Czasami śledzę trochę tag…

7 lipca 2018

Czasami śledzę trochę tag #bitcoin i ostatnio dużo czytam wypowiedzi ludzi, o tym, że bitcoin ma kod najlepszej jakości. Na czym te opinie bazują? Jedyny argument jaki tutaj spotykałem brzmi, że kod pisza najlepsi specjaliści. Czyli jak najlepszy specjalista napisze kiepski kod to kod stanie się automatycznie niekiepski? Tutaj mamy sprzeczność. A może najlepszy specjalista nie jest w stanie napisać słabego kodu? Logiczne, że to jest błędne założenie.

Kiedy więc kod jest dobry? Poniższe to moje przemyślenia.

Z perspektywy stakeholdera:
1. Dobry kod to taki, który pozwala w szybkim tempie wprowadzac nowe funkcjonalności.
2. Dobry kod to taki, który pozwala przetestować aplikację, a co za tym idzie dostarczyć aplikację spełniającą wymagania i zawierającą niską ilość błędów.
3. Dobry kod to taki, który pozwala dostarczyć wydajną aplikację czyli między innymi taką, która wydajnie korzysta z zasobów komputera.

Z perspektywy software developera:
4. Dobry kod to taki który jest czytelny i przejrzysty.
5. Posiada dobrą architekturę: można go łatwo rozwijać, nie ingerując w aktualne struktury programu (open-close principle)
6. Jest dobrze przetestowany czyli nawet prosta zmiana w kodzie będzie wykryta przez testy aplikacji.

Jak to się ma do bitcoina? Nie znam kodu bitcoina. Może jest tu jakiś aktywny deweloper i się wypowie. Ja mogę się wypowiedzieć jedynie na podstawie krótkiego rzucenia okiem na losowe klasy.

Według mnie kod w wielu klasach jest słabo czytelny. Np. w takim wallet.cpp trafiam na jakieś monstra typu funkcja
-for
— jakiś struct
— while
—- for
—– if
—— else
——– if
itd.
Tak naprawdę dobry kod powinien mieć bardzo dobre pokrycie unittestami. Patrząc na ten kod uważam solidne pokryce tego za wręcz awykonalne. Niby są jakieś testy. Ale na klasę która zawiera 4,5 tys. linijki kodu, przypada 366 linijek kodu testów. Strasznie mało. W ogóle, jak testować taki kod? Poza tym trudno przy takich monstrach mówić o czystym kodzie. Czytając kilka ksiażek Roberta Martina typu Clean Code i Clean Architecture raczej bym widział niektóre fragmenty bitcoinowego kodu jako kontrprzykłady dobrego kodu. Jakby ktoś nie wiedzial to Robret Cecil Martin to jeden z większych autorytetów w dziedzinie architektury / dobrego stylu kodowania.

Nie mówię, że bitcoin źle działa albo ma zły kod pod względem funkcyjnym i pod względem bezpieczeństwa. Być może świetnie działa i ma bardzo małą liczbę błędów. Może w takich otwartych dużych projektach weryfikacja działa bardziej na zasadzie wielu oczu niż świetnej architektury i bardzo dużym pokryciu testami? Kiedyś oglądałem wywiad z polskim profesorem, który wypowiadał się na temat kryptografii oraz jej impementcji w bitcoinie, jakoby była ona na najwyższym poziomie. Nie chcę tego negować i być może własnie tak jest. Jednak nie stoi to w sprzeczności z moimi przemyśleniami na temat jakości samego kodu, niekoniecznie pod względem funkcyjnym, a nawet głównie nie pod względem samego działania.

Trudno mi zgodzić się ze swierdzeniem, że jest to kod najlepszej jakości.

#bitcoin #kryptowaluty #altcoin

No Comments

Comments are closed.