Jestem badaczem i programistą-samoukiem. Robiłem duże projekty, które opierały się głównie na oprogramowaniu. Chociaż moja praca jest daleka od najbardziej „hardkorowych” rzeczy, które istnieją pod względem złożoności i skali, projekty były na tyle duże, że naiwne błędy (np. Brak kontroli wersji lub słabo dokumentujący kod) były bardzo bolesne. Skończyło się na tym, że nauczyłem się kilku „najlepszych praktyk” metodą prób i błędów.
Byłem również na końcu „nieobsługiwanego kodu przekazywanego innym badaczom”:
Moje doświadczenie w przemyśle stanowi przeszkodę w moich badaniach
Nie, w zasadzie pochodzisz z cywilizowanego środowiska, które rozwiązało te problemy dziesiątki lat temu taki, który utknął w epoce kamienia łupanego pod względem higieny tworzenia oprogramowania. Naukowcy nadal kodują jak w latach 60. Oczywiście czujesz konflikt, ale wina nie leży po twojej stronie.
W przemyśle kod musi być (idealnie): możliwy do utrzymania, wolny od błędów, refaktoryzowany, dobrze udokumentowany, rygorystycznie przetestowany
Powiedzmy, że prelegent na konferencji naukowej, opisując część obliczeniową swoich badań, powiedział jedno z następujących:
„ Kod, który napisałem ponieważ te badania są, trzeba przyznać, ... "
- ... nie do utrzymania (i powodzenia w budowaniu moich badań!)
- ... pełne błędy (i nie mam pojęcia, czy wynik jest poprawny!)
- ... nieczytelne spagetti (i nawet nie wiem, jak to działa, nie mówiąc już o poprawności!)
- ... nieudokumentowane (a wszystkie błędy są zaciemniane przez recenzentów!)
- ... nie testowane (więc Bóg wie, czy robi to, co mówię / myślę, że robi!)
Czy spodziewasz się, że publiczność zareaguje czymś innym niż pogardą i oburzeniem? Gdybym coś takiego usłyszał, nie uwierzyłbym w nic, co ta osoba kiedykolwiek opublikował.
W środowisku akademickim celem jest (...) w jak najkrótszym czasie.
Tak, ale „ nie krócej ”. Nie pomijasz ważnych eksperymentów kontrolnych, ponieważ „kontrole wymagają czasu”. Nie możesz oszczędzać na jakości kodu z bardzo podobnych powodów.
Wydaje się, że nie ma motywacji do pisania [dobrego kodu]
Ponieważ jest to endemiczny problem środowiska akademickiego. Chociaż komputery są wykorzystywane w nauce od dziesięcioleci, wydaje się, że algorytmy stały się ważną częścią badań dopiero w ostatniej dekadzie (być może z powodu „dużych zbiorów danych”). Kiedy opierasz swoje badania na kodzie, kod ten musi być dobrej jakości. Nie wystarczy po prostu uruchomić jakiś błędny skrypt tylko do zapisu i nazwać go dniem. Społeczność programistów wymyśliła to wszystko dawno temu, ale środowisko akademickie jeszcze się nie zorientowało - myślę, że powodem jest to, że większość naukowców nie ma formalnego doświadczenia w tworzeniu oprogramowania i nie było wystarczająco dużo skandali w badaniach, przez złe praktyki programistyczne (np. kluczowe wyniki głośnego artykułu okazują się artefaktami spowodowanymi błędami).
Zastanów się, jak w wielu dyscyplinach recenzenci nie będą nawet pytać o kod źródłowy twojego papier ciężki obliczeniowo. Jak więc mogą ocenić ważność twoich wyników? Nie mogą i jest to porażka modelu wzajemnej oceny, który obecnie istnieje.
Przepraszam, że kontynuuję rantowanie, ale zasadniczo wygląda to tak: Jak wiesz, istnieją bardzo dobre powody do pisania kod jakości, nawet jeśli nikt nie patrzy Ci przez ramię. W nauce obecnie tak się dzieje, że nikogo nie obchodzi, czy Twój kod jest dobry, czy nie. Ale to nie powinien być powód, dla którego i tak nie powinieneś pisać dobrego kodu - powody pisania dobrego kodu w branży wciąż w dużej mierze dotyczą nauki.
Niestety, możesz nie otrzymać wynagrodzenia za dodatkową pracę. Możesz nawet zostać ukarany, ponieważ, jak mówisz, dobry kod trwa dłużej, a inni mogą nie patrzeć poza to. Twój PI lub koledzy mogą nie rozumieć, dlaczego jesteś o wiele wolniejszy. Najlepsze, co możesz zrobić, to wyjaśnić im potrzebę dobrych praktyk.
Oczywiście są wyjątki. Na przykład możesz nie martwić się o przenośność lub kompatybilność wsteczną ze starymi wersjami systemu operacyjnego dla kodu, który ma działać na dedykowanym komputerze laboratoryjnym (chociaż niepożądane jest pisanie kodu w taki sposób, że działa on tylko w bardzo egzotycznym środowisko, którego inni naukowcy nie będą w stanie łatwo zrekonstruować). Ale ogólnie rzecz biorąc, uważam, że praktyki branżowe nadal obowiązują, a wyjątki można łatwo wykryć, stosując odrobinę krytycznej myśli. To powiedziawszy, istnieje również pomocna publikacja „ Best Practices for Scientific Computing ”, która szczegółowo analizuje tę kwestię.
Ostatecznie jest to etyczna decyzja, którą musisz podjąć. Czy zależy ci przede wszystkim na robieniu dobrej nauki? Postępuj zgodnie z najlepszymi praktykami. Chcesz iść na skróty, których nie powinieneś (w sensie etycznym), zaoszczędzić czas lub uniknąć tarć ze współpracownikami? Z zasady nie mógłbym ci tego polecić. Ale oczywiście wielu ludzi to robi i być może w praktyce niektórzy naukowcy są do tego zmuszani - chociaż z drugiej strony, czy niezdolność do uprawiania dobrej nauki przez okoliczności nie usprawiedliwia złej nauki?
Ponadto, jak powiedziałem, ja Myślę, że część problemu polega na tym, że nie było żadnych wielkich skandali. Jeśli oszczędzisz na jakości kodu, jest szansa, że cię dogoni. Możesz nawet skończyć jako jeden z tych wielkich skandali. Trzeba przyznać, że ryzyko jest prawdopodobnie niewielkie ... Ale myślę, że rozumiesz, o co mi chodzi.