Czy kod naukowy jest na tyle inną dziedziną, aby zignorować wspólne standardy kodowania?
Nie, nie jest.
Kod badawczy jest często „wyrzucany” i zapisywany przez osoby, które nie są programistami ze względu na pochodzenie, bez względu na swoje kwalifikacje akademickie. Część kodu, który napisałem, sprawiłaby, że płaczę . Ale zadziałało!
Jedną rzeczą do rozważenia jest to, że strażnicy projektów kierują tym, co zostaje uwzględnione. Jeśli duży projekt rozpoczął się jako projekt kodu akademickiego / badawczego, kończy się działaniem, a teraz jest bałaganem, ktoś musi podjąć inicjatywę, aby go przeredagować.
Zmodyfikowanie istniejącego kodu, który nie powoduje problemów, zajmuje dużo pracy. Zwłaszcza jeśli jest w ogóle specyficzny dla domeny lub nie ma testów. Zobaczysz, że OpenCV ma przewodnik po stylach, który jest bardzo obszerny, nawet jeśli nie idealny. Stosujesz to z mocą wsteczną do całego istniejącego kodu? To znaczy ... nie dla osób o słabym sercu.
Jest to jeszcze trudniejsze, jeśli cały ten kod działa. Ponieważ to nie jest zepsute. Po co to naprawiać?
Jednak projekty te rozwijają się, są utrzymywane i szeroko stosowane!
W pewnym sensie jest to odpowiedź. Działający kod jest nadal użyteczny i dlatego jest bardziej prawdopodobne, że zostanie utrzymany.
Może to być bałagan, szczególnie na początku. Niektóre z tych projektów prawdopodobnie rozpoczęły się jako projekt jednorazowy, który „nie wymagałby ponownego wykorzystania i mógłby zostać wyrzucony”.
Weź również pod uwagę, że jeśli wdrażasz złożony algorytm, sensowniejsze może być posiadanie większych metod, ponieważ ty (i inni znający stronę naukową) lepiej rozumiesz algorytm. Moja praca dyplomowa dotyczyła optymalizacji. Posiadanie głównej logiki algorytmu jako jednej metody było znacznie łatwiejsze do zrozumienia, niż próbowałoby to rozdzielić. Z pewnością naruszyło zasadę „7 wierszy na metodę”, ale oznaczało również, że inny badacz mógł spojrzeć na mój kod i szybciej zrozumieć moje modyfikacje algorytmu.
Gdyby to wdrożenie zostało wyabstrahowane i dobrze zaprojektowane, ta przejrzystość zostałaby utracona dla programistów .
Do innych użytkowników: To pytanie odnosi się do bazy kodu bibliotek typu open source do intensywnych obliczeniowo zadań w jednej lub wielu domenach naukowych. To pytanie nie dotyczy kodu jednorazowego. Zatrzymaj się na chwilę, aby upewnić się, że rozumiesz każdy wyróżniony aspekt przed napisaniem odpowiedzi.
Myślę, że ludzie często mają taki pomysł, że wszystkie projekty open source zaczynają się od „hej, mam świetny pomysł na bibliotekę, która będzie bardzo popularna i używana przez tysiące / miliony innych”, a potem każdy projekt tak się dzieje.
Rzeczywistość polega na tym, że wiele projektów jest uruchamianych i ginie. Śmiesznie niewielki odsetek projektów „dociera” do poziomu OpenCV lub VTK itp.
OpenCV powstał jako projekt badawczy firmy Intel. Wikipedia opisuje to jako część „serii projektów”. Jego pierwsza wersja niebędąca wersją beta miała miejsce w 2006 roku, czyli siedem lat po jej uruchomieniu. Podejrzewam, że początkowo celem były znaczące wersje beta, a nie idealny kod.
Ponadto „własność” OpenCV uległa znacznej zmianie. To powoduje zmianę standardów, chyba że wszystkie odpowiedzialne strony przyjmą dokładnie te same normy i zachowają je przez czas trwania projektu.
Powinienem również zauważyć, że OpenCV istniał przez kilka lat, zanim opublikowano Manifest Agile, z którego czerpie inspirację Clean Code (a VTK prawie 10). VTK został uruchomiony 17 lat przed opublikowaniem Clean Code (OpenCV był „tylko” 9 lat wcześniej).