Kod w dokumentach naukowych


34

W mojej karierze akademickiej przeczytałem sporo artykułów naukowych na różne tematy informatyczne. Wiele z nich obejmuje implementację i pewną ocenę tej implementacji, ale odkryłem, że bardzo niewielu z nich faktycznie publikuje używany kod.

Dla mnie korzyści płynące z włączenia faktycznego wdrożenia byłyby znaczące, a mianowicie:

  • Rozszerzenie zaufania lub odtwarzalności (po prostu przetestuj sam!)
  • Wyjaśnienie dwuznaczności (szczególnie w przypadku artykułów napisanych przez osoby nie będące rodzimymi użytkownikami języka)
  • Ponowne użycie kodu dla aplikacji

Dlaczego więc tak niewiele artykułów zawiera kod?

Przypuszczam, że organizacją stojącą za tym dokumentem może być wykorzystanie implementacji we własnych aplikacjach, a zatem nie chciałbym jej wypuszczać, ale jeśli tak, to po co pisać artykuł?


14
Dlaczego więc tak niewiele artykułów zawiera kod? Ponieważ recenzenci z jakiegoś powodu to tolerują, nawet jeśli nie ma dobrego powodu, aby ukryć implementację. Jesteśmy recenzentami, możemy to zmienić.
Jukka Suomela

14
Myślę, że musi się to różnić w zależności od podpola. Prawie wszystkie rzeczy z teorii B, które znam (a zwłaszcza Haskell, Agda, a czasem związane z Coq), zawierają opublikowany kod, czasem nawet jako dodatek lub lepiej, ale jeszcze w tekście. Spora liczba artykułów z ICFP jest pisana jako programy piśmienne na początek, a ich źródła w całości są publikowane przez autorów. Spora ich liczba zaowocowała wyodrębnieniem bibliotek do dystrybucji. Spośród pozostałych artykułów na początku nigdy nie było kodu.
sclv,

8
Wyniki badań powinny być otwarte (i bezpłatne), podobnie jak kod. Według niektórych definicji nauka dzieje się tylko wtedy, gdy hipotezy są falsyfikowalne, a eksperymenty powtarzalne, więc można argumentować, że publikacje oparte na kodzie, który nie został opublikowany, nie są dziełem naukowym.
Raphael

4
@Raphael Wydanie tego samego kodu pomogłoby jedynie ustalić powtarzalność, a nie odtwarzalność. Uruchomienie dokładnie tego samego kodu w dokładnie tym samym eksperymencie nie jest prawie niezależne. Nauka wymaga odtwarzalności, a nie powtarzalności.
Mark Reitblatt,

2
Myślałem o wynikach, które mówią o właściwościach kodu, a nie o jego wynikach (w takim przypadku oczywiście masz rację). Powiedzmy, że autorzy przeprowadzają eksperymenty na pewnej implementacji przedstawionego algorytmu i porównują środowiska wykonawcze poprzez badanie grafów (nazywają to „inżynierią algorytmów”). Tutaj kod zapewnia odtwarzalność.
Raphael

Odpowiedzi:


17

Oto dobrze uzasadniony artykuł Davida Donoho i Jonathana Buckheita, który przeczytałem w szkole, który porusza dokładnie ten temat z punktu widzenia badaczy falek:

„WaveLab i powtarzalne badania”

Ich pomysł był jeszcze bardziej ambitny, aby zapewnić kod do reprodukcji wszystkich cyfr z ich dokumentów w wygodnym pakiecie Matlaba.

Naprawdę podoba mi się ich pomysł, ale myślę, że problemy są oczywiste.

(1) Jest to dodatkowa praca (czyszczenie kodu, tworzenie przynajmniej podstawowego interfejsu użytkownika, pisanie dokumentacji, zapewnianie wsparcia, gdy ludzie nieuchronnie napotykają problemy)

(2) Tak naprawdę nie jest to wymagane / oczekiwane przez większość konferencji / recenzentów

Ale nie mogę się oprzeć wrażeniu, że społeczność badawcza CS skorzystałaby, gdyby spodziewano się, że kod i dane wykorzystane w dowolnej publikacji będą publicznie dostępne w użytecznym formacie. Przyznaję, że sam tego nie zrobiłem, nawet jeśli wymagałoby to nakładu pracy. Myślę, że trudno jest zmusić się do dodatkowego wysiłku, gdy nie ma zewnętrznego pchnięcia.


7
Myślę, że oczekiwanie na dostęp do (a) pseudokodu lub (b) kodu, przynajmniej na stronach internetowych, byłoby bardzo przydatne dla społeczności badawczej CS. Nie każdy kod badawczy ma wysoką użyteczność i nie jestem pewien, czy udostępnienie błędnego kodu byłoby dobre, czy nie.
Peter Shor,

1
Rozmawiałem z autorami gazet, którzy nie wydali swojego kodu z podobnych powodów - w stanie, w którym się znajduje, poczuliby się winni, gdyby ktoś próbował coś z tym zrobić.
sclv,

6
kod nie musi być dobry, czysty ani wielokrotnego użytku. ale musi być odtwarzalna, aby można ją było uznać za „naukę”. Był dobry artykuł w naturze autorstwa Nicka Barnesa (2010). Opublikuj swój kod komputerowy: wystarczy argumentować o tym.
David LeBauer

16

Jeśli pracujesz w laboratorium przemysłowym, uzyskanie zatwierdzenia dokumentu do wydania może być o wiele łatwiejsze niż zatwierdzenie kodu do wydania (nawet jeśli artykuł zawiera wszystkie informacje potrzebne do przepisania kodu). Obwiniaj biurokrację.


1
chociaż jest to oczywiście prawda, zastanawiam się, czy odpowiednia zmiana w kulturze napędzana przez naukowców akademickich pozwoliłaby badaczom przemysłowym na zarządzanie presją, aby umożliwić wydanie kodu. W końcu podejrzewam, że nawet uzyskanie polisy na wydanie papierowe musiało trochę
potrwać

6
Przynajmniej w MSR bardzo łatwo jest wydać kod badawczy. W rzeczywistości trudniej jest używać kodu zewnętrznego, ponieważ MS bardzo ostrożnie przestrzega licencji na oprogramowanie. Ponieważ wiele spadków kodu związanych z papierem nie ma wyraźnego pliku licencji, może to być trochę denerwujące. Zwykle wystarczy e-maila do autora artykułu, aby to wyjaśnić, ale możesz ułatwić naukowcom przemysłowym, pamiętając o naklejeniu licencji zatwierdzonej przez OSI na twoim publicznym kodzie.
Neel Krishnaswami,

2
@Neel: Czy masz na myśli „zatwierdzony przez OSI, ale nie GPL”?
Radu GRIGore,

3
GPL jest zwykle w porządku - wielu z nas korzysta z Emacsa! :) Nie wolno nam używać oprogramowania Affero GPL, ponieważ jego warunki wzajemności rozciągają się na każdego, kto wchodzi w interakcję z oprogramowaniem (tj. Zamyka lukę serwisową), a MS nie chce ryzykować możliwości, że jakiś wewnętrzny serwer uruchomienie kodu AGPL może przypadkowo zostać upublicznione. Ale nawet AGPL jest lepsze niż brak licencji, ponieważ wybranie licencji sprawia, że ​​warunki udostępniania są jednoznaczne.
Neel Krishnaswami,

13

Przeniesiono i rozwinięto z komentarza:

Myślę, że to musi się różnić w zależności od podpola. Prawie wszystkie rzeczy z teorii B, które znam (a zwłaszcza Haskell, Agda, a czasem związane z Coq), zawierają opublikowany kod, czasem nawet jako dodatek lub lepiej, ale jeszcze w tekście. Spora liczba artykułów, np. Z ICFP, jest pisana jako programy piśmienne na początek, a ich źródło w całości jest publikowane przez autorów. Spora ich liczba zaowocowała wyodrębnieniem bibliotek do dystrybucji.

Spośród pozostałych artykułów na początku nigdy nie było kodu. Spośród nich prawdopodobnie są dwa główne powody. Najpierw są artykuły, których główną zawartością są drzewa próbne, reguły pisania z powiązanymi proofami dźwiękowymi i tym podobne. Wśród nich postępy w zmechanizowanej metateorii zachęciły przynajmniej niektórych autorów do podania kodu w twierdzeniu, że jest wybieranym przez siebie wyborem (patrz slajdy Weiricha na POPLmark: http://www.seas.upenn.edu/~sweirich/talks/cambridge-09. pdf). Drugie to te, które wywodzą się z materiału Bird-Merteens (banannas & co.). Można je przełożyć na funkcjonalny język bez zbytniego nakładu pracy. Podejrzewam jednak, że zazwyczaj następuje utrata ogólności, a zajmowanie się konkretnymi problemami składni i pisania niepotrzebnie komplikuje rzeczy i utrudnia podążanie za rozumowaniem równań.

Chciałem trochę uzasadnić swoje spostrzeżenia, podobnie jak z grubsza liczba pierwszych dwóch dni ICFP 2010. Spośród standardowych artykułów (tj. Brak raportów z raportów lub zaproszonych rozmów) 12 z 21 dostarczyło jakiś kod. Trzy dostarczyły Coq (czwarty twierdził, że jest to częściowy dowód, ale go nie opublikował). Trójstronny Haskell. Trzy dostarczone Agda. Jeden dostarczył Schemat, jeden dostarczył Camla, a drugi Twelf. (Należy pamiętać, że niektóre zawierały kod dla więcej niż jednego asystenta dowodu lub zarówno dla formalizacji, jak i wdrożenia). Z pozostałych prac kilka pracowało na wystarczająco wysokim poziomie abstrakcji, że wdrożenie go w asystencie dowodowym samo w sobie byłoby nowym referatem, a sporo innych pracowało, co, jak podejrzewam, mogło zostać zaimplementowane w asystencie dowodowym, używając standardowe techniki, ale z pewnością wymagałoby to sporo pracy.


12

Uważasz, że kod powinien zostać opublikowany, ale pytasz, dlaczego artykuły nie zawierają kodu. To są dwie różne rzeczy.

W większości przypadków po prostu brakuje miejsca na opublikowanie znacznej ilości kodu. W mojej dziedzinie badań (przetwarzanie obrazu) pseudokod lub informacje o architekturze są często o wiele cenniejsze i nigdy nie utknąłem z powodu braku kodu w dokumencie. Często jest to ćwiczenie dla czytelnika, który zrozumiał artykuł.

Istnieje jednak wiele kodów ilustrujących artykuły. Autorzy zwykle mają stronę internetową i nawet jeśli recenzent nie ma szansy na sprawdzenie samego kodu, naturalna selekcja wydaje się działać całkiem dobrze, a autorzy, którzy nie publikują kodu, są o wiele mniej cytowani.


8

Mogłem o to zapytać już dawno temu, ale zawsze mocno o tym myślałem, więc dam dwa centy. Pracuję od lat (już nie) w społeczności SAT. Większość badaczy rzadko publikuje swój kod. Artykuł jest publikowany wraz z algorytmem, ale bardzo rzadko można zobaczyć rzeczywisty kod solvera SAT (solvera MAXSAT) itp., Opublikowanego wraz z artykułem.

Rzeczywistość jest taka, że ​​dzięki samemu kodowi opublikowanemu w artykule nigdy nie będziesz mieć szansy na odtworzenie eksperymentów autora. Nie tylko dlatego, że opublikowany kod nie jest kompletny (oczywiście), ale także dlatego, że nawet opublikowany pseudo-kod rzadko tłumaczy pół-bezpośrednio na to, co jest faktycznie zaimplementowane.

Powód tego jest trudny do poznania i może zależeć od badacza do badacza, ale głównie jest dwojaki.

  • Po pierwsze, badacz ma tendencję do ciągłej pracy w pojedynczym rozwiązaniu, publikując artykuły po artykułach na tym samym rozwiązaniu i stopniowo dodając nowe funkcje, które przekładają się na nowe wersje rozwiązania. Istnieje niezdrowa obsesja na punkcie tego, że konkurencja wykorzysta twój solver do dalszego rozwoju kariery, przedłużając go i publikując artykuły bez należnego uznania (znaczenie, współautorstwo).

  • Po drugie, niektóre kody są naprawdę (jak w przypadku wszystkich programów) pisane w pośpiechu. Na wpół upieczone skrypty. Niesprawdzone funkcje itp. Publikując ten kod, badacz poczułby, że zawstydziłby siebie i zaszkodziłby ich reputacji.

Pozostawiam wam najnowsze odniesienie do tego od ACM: http://cacm.acm.org/magazines/2011/5/107698-the-importance-of-reviewing-the-code/fulltext


7

Historycznie artykuły naukowe musiały być drukowane na papierze, a czasopisma były wysyłane na cały świat. Każda dodatkowa strona powodowała znaczny koszt, dlatego artykuły podlegały ograniczeniom długości, a nawet prosty działający kod zwykle zajmuje dużo miejsca niż nieformalny opis.

Dzisiaj nie ma dobrego powodu, aby nie umieszczać kodu w żadnym artykule odwołującym się do algorytmu.

Przydatne może być także porzucenie formatów zorientowanych na druk, takich jak pdf i postscript, na rzecz formatów bardziej świadomych semantycznie (HTML z MathML lub być może wariantem Mathematica typu open source).


8
+1 dla pierwszych dwóch akapitów, -1 dla ostatniego akapitu. Możesz zabrać LaTeXa, gdy podważasz go z moich zimnych, martwych rąk.
Jeffε

2
Obecnie dostępnych jest wiele narzędzi umożliwiających umiejętne programowanie w LaTeX ...
sclv
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.