Od lat chodzą mi po głowie myśli o kodzie idealnym. Różne koncepcje, potwierdzające i obalające. Z jednej strony wiem, że coś takigo nie istnieje, ale z drugiej chcę szukać, drążyć. Gonić króliczka. Podczas deweloperskiej drogi miałem różne opinie na temat super-kodu. Z każdym rokiem, gdy nabieram więcej pokory i więcej rozumiem, moje spojrzenie się zmienia. Dzisiaj przedstawiam różne perspektywy tego tematu.

Najlepszy kod spełnia SOLIDa

Co kryje te 5 liter? Każdy programista wie. Czy można powiedzieć, że kod spełniający zasady SOLID jest kodem idealnym? Zdecydowanie nie jest to wystarczające. Bez problemu przypominam sobie klasy spełniające te założenia, choć ich analiza była męką.

Najlepszy kod dobrze się czyta

Czy zdarzyło Ci się spotkać kod czytelny jak książka fabularna? Czy taki twór jest idealny? Ma on z pewnością wiele zalet. Przede wszystkim łatwo zrozumieć intencję autora. Co przekłada się na szybkość poprawiania błędów i rozwoju. Wciąż na podstawie tego wskaźnika nie jestem w stanie stwierdzić perfekcyjności. Dodatkowo pojawia się kolejny aspekt, a mianowicie percepcja. Dla jednego może być czytelny, a dla innego absolutnie nie. Może to być spowodowane wieloma rzeczami. Takimi jak przyzwyczajenie do innego stylu lub nieznajomość języka. Jednak taki który czyta się tak dobrze wciąż może nie być idealny ponieważ może brakować mu testów.

Najlepszy kod jest pokryty testami

Każda zmiana jest ryzykowna. Aby minimalizować niebezpieczyństwo należy posiadać testy. Aplikacji bez testów z pewnością czegoś brakuje, ale czy posiadanie ich, nawet wspaniałych, czyni ją lepszym? Z pewnoscią to wciąż nie to. Zatem co?

Najlepszy kod zarabia pieniądze

To powie każdy manager i muszę przyznać, że jest w tym sporo racji. Jest to bardzo mocny argument, ponieważ kod ma właśnie zarabiać lub oszczędzać pieniądze. Inaczej, po co go pisać? Tylko w takim wypadku jest wart zainwestowanych pieniędzy. Tylko czy to wystarczy, aby był to kod marzeń? Raczej nie, bo przecież należy spojrzeć na to z troszkę innej perspektywy. Mianowicie, czy ten kod będzie zyskowny również w przyszłości.

Najlepszy kod można łatwo przystosować do nowej rzeczywistości

Jeżeli kod zarabia teraz i w miarę niskim kosztem można go dostosować do nowych przepisów prawa, takich jak zmiany podatkowe czy ostatnio popularne RODO. To już brzmi dobrze, bo to znaczy, że zarabia pieniądze i jest dobrze napisany, ale czy to jest definicja kodu idealnego? Z pewnością ma już takie symptomy, ale spróbujmy spojrzeć na to z zupełnie innej perspektywy.

Najlepszy kod nie istnieje

Ten tytuł ma pewien dualizm. Po pierwsze jest to zaprzeczenie całego posta. Skoro kod idealny nie istnieje to po co o nim pisać! Ale chwila… może inaczej. Załóżmy, że istnieją dwa programy robiące to samo. Jeden składa się z 100 000 lini kodu, a drugi z 1 000. Oba zarabiają pieniądze. Ten drugi potencjalnie jest dużo bardziej utrzymywalny i napisane go zajęło duuuużo mniej czasu, ponieważ ma mniej kodu.

Pracowałem kiedyś nad rozwojem pewnego programu. Początkowo postanowiłem zrobić porządny refaktor. Przez cztery pierwsze miesiące usunąłem multum kodu, a aplikacja cały czas działała tak samo. Po analizie historii commitow sprawdziłem, żę średnio usuwałem 400 linii dziennie. Dzięki temu kod stał się dużo lżejszy, łatwiejszy do zrozumienia i modyfikacji. Może najlepszy kod to taki, którego niema? Być może.

Podsumowując

Jakość kodu to skomplikowany temat. Ile ludzi tyle opinii. Każdy rozumie to inaczej. Uważam, że najlepsza jest sensowna wypadkowa z pomiędzy powyższych właściwości. Tak aby kod zarabiał pieniądze, miał testy, spełniał SOLIDa, był w miarę czytelny i dał się modyfikować w sensownym czasie. Ewentualnie by został usunięty. Oczywiscie należy dążyć do ideału i znaleźć złoty środek, inny dla każdego systemu. Czy zgadzasz się z moimi założeniami? Czy jest jeszcze jakaś miara kodu warta poruszenia?



Podobało Ci się?

Zapisz się i nie przegap kolejnych postów.


Dodaj komentarz

Twój adres email nie zostanie opublikowany.

This site uses Akismet to reduce spam. Learn how your comment data is processed.