Fråga:
Varför accepteras papper utan kod men med resultat?
Sam Stoelinga
2014-06-11 19:23:29 UTC
view on stackexchange narkive permalink

Jag började just läsa några artiklar (datavetenskap, särskilt datorvision) och tänkte "nu ska vi titta på källkoden" och blev förvånad över att de flesta av artiklarna inte har någon källkod som implementerar de beskrivna metoderna för att titta samtidigt som de gör anspråk på vissa prestationer eller är bättre än andra artiklar.

Hur accepteras dessa artiklar i tidskrifter / konferenser? Måste människor skicka in sin källkod privat åt granskarna åtminstone så att de kan reproducera experimentet om det är möjligt.

Gör de flesta tidskrifter / konferenser bara "förtroende" för att personer som skickar in papperet verkligen implementerade teori och fick de exakta resultaten?

Jag hade alltid den uppfattningen att alla experiment skulle kunna reproduceras av andra, det är inte vetenskapligt motiverat. Undrar om det de senaste dagarna.

Folk i mitt forskningsområde bryr sig inte så mycket om den faktiska kod som används för att få resultaten; begreppen bakom en kodad implementering är viktigare. Det antas att vem som helst med kunskap inom området kan producera kod på ett språk som de väljer så länge begreppen (algoritmbeskrivningar etc.) förklaras mycket tydligt och tydligt.
Relaterat: [Hur skyddar akademiska tidskrifter mot empiriska resultat från buggar?] -bugs)
Observera att problemet inte är specifikt för datorkod utan också följer analogt med labbarbete. Även om procedurerna / protokollen beskrivs i detalj finns det inget sätt att veta om personen som gjorde jobbet följde protokollen noggrant.
Detta är verkligen för vagt för att möjliggöra ett möjligt svar. Vilken typ av "kod" pratar du om?
* "Litar de flesta tidskrifter / konferenser bara på att människor som skickar in papperet verkligen implementerade teorin och fick de exakta resultaten?" * Detta är mitt intryck och jag tycker inte om det alls, speciellt när finansieringen för att producera det genomförandet kommer från offentliga medel. Om finansieringen är * offentlig * bör koden vara * offentlig *. Om du vill * publicera * en uppsats om ett system ska koden * publiceras *. Tyvärr är detta sällan fallet.
BTW: se även detta relaterade svar: http://academia.stackexchange.com/questions/13726/should-i-supply-code-as-supplemental-material/13730#13730
@user11192 Hmm, bra i praktiken som ibland kan vara problematisk. Speciellt eftersom tiden alltid är kort. Här är ett exempel http://iopscience.iop.org/1367-2630/7/1/034 :)
@posdef: Labwork är * inte * analogt. Du kan enkelt lägga till kod som är tillgänglig online för alla att ladda ner, läsa, testa och använda. Du kan inte göra detsamma med labarbete. Det är därför vi måste lita på ditt ord på ditt arbete, men det finns ingen anledning att lita på ditt ord på din kod.
@JukkaSuomela Jag förstår din poäng, men en _ kunde_ videoband själv göra labbet och sätta det online. Jag säger inte att det är vettigt, utan bara säger att det är möjligt.
@JukkaSuomela Poängen är att hela det akademiska publikationssystemet bygger på (relativt) korta sammanfattningar och en stor mängd förtroende. Labarbete är lite mer ogenomskinligt men forskare publicerar vanligtvis inte heller rådata eller loggböcker. Med elektronisk publicering, tilläggsmaterial etc. kan det * vara annorlunda men analogin är fortfarande giltig.
Jag är inte medveten om några vetenskaper där granskning före publicering innebär att man reproducerar experimenten - experiment bör vara reproducerbara på ett rimligt sätt, men det förväntas inte att granskarna faktiskt gör det före publicering, det är för andra forskargrupper att göra efteråt. Det som * behövs * är ändå detaljer om mätprocessen och testuppsättningen - så att jag kan få jämförbara resultat från rena rumsimplementeringar av din metodik. Och det är det enda sättet att kalla experimentet reproducerbart - att använda din kod är inte, eftersom det kan göra saker lite annorlunda än beskrivet.
Att köra programmet igen skulle inte vara en korrekt verifiering ändå. Om implementeringen är buggy ger det fortfarande fel resultat om du kör det igen. Återimplementering är en korrekt verifiering. Reproducerbarhet innebär att den förklaras tillräckligt tydligt för att möjliggöra reimplementering. En tydlig beskrivning är mycket mer användbar för att återge resultat än kod. Koden är avsedd för datorer att köras, inte för människor att läsa. (Kom ihåg: i de allra flesta fall implementeras den här koden av en enda person och den är inte avsedd att underhållas, det här är inte "programvaruteknik"). Papperet är avsett för människor att läsa.
Jag är en geofysiker som skriver mycket modelleringskod. Men själva koden är uppriktigt sagt irrelevant. Det är tanken bakom koden som betyder något. Å andra sidan, om du vill att din modell (inte kod) ska accepteras, skulle du bättre visa verifiering att den fungerade mot något känt eller tidigare verifierat. Ingen granskare låter ett modelleringspapper gå utan något verifieringssteg.
@posdef Det finns faktiskt en tidskrift som ägnas åt "video själv som gör labarbete" - JoVE. http://www.jove.com
@Szabolcs Jag är med dig - inom mitt område betyder "reproducerbarhet" i sin rätta form att kunna genomföra en jämförbar studie på en helt annan population. "Jag kan klicka på kör och få samma svar" är en låg och basform för reproducerbarhet. Och det ignorerar utsikterna till data som jag * inte kan dela med dig * som koden kräver för att köras.
@Trylks, Jag håller 100% med dig, om det var upp till mig ... ingen kod, inga offentliga medel ... för något CS. Jag tror också starkt att många studenter tar den offentligt finansierade hemliga forskningen och hoppar direkt på den privata marknaden med sina "varor". Jag har inga problem med att någon kommer att kommersialisera offentligt arbete, det är därför vi finansierar det till att börja med ... men jag är inte ok med det offentligt finansierade försprånget med kod. Jag bryr mig inte om det är användbart, eller praktiskt ... eller helt värdelöst. vi köpte den, det borde vara upp till oss att avgöra om det är av värde.
Allt beror på hur bevisbara resultaten är. Om det är matematiska satser, krävs matematisk bevis, inte körning av kod (såvida det inte är kod för en teoremprover).
@Szabolcs "Reproducerbarhet betyder att den förklaras tillräckligt tydligt för att möjliggöra reimplementering". Den bästa förklaringen är själva koden, koden ska vara avsedd att läsas. Om du satsar på kvantitet (två förklaringar, en på engelska, en i kod), kommer kvaliteten med stor sannolikhet att saknas på grund av korta tidsfrister. Om du vill prioritera en kvalitetsförklaring ska det vara kod. I teorin är teori och praktik desamma, men i praktiken är de mycket olika. Att bortse från praxis leder till en inneslutning i "elfenbenstornet".
@Trylks Men vad händer om du verkligen är intresserad av teorin och det är det du är bra på? Du antyder att "elfenbenstornet" är dåligt och praxis är bra, men borde alla datavetare i världen ägna tid och resurser åt att producera programvara i produktionskvalitet eller spinning off-företag?
@Relaxed Jag skulle säga att en datavetenskapares arbete är att producera programvara. Jag har sett papper som föreslår något i teorin och samma författare kämpar för att få en fungerande implementering (och jag har inte sett implementeringen ännu). Vad skulle vi säga om detta hände på andra områden? Tänk på en person som påstår sig ha botat cancer (i teorin) men när man försöker ta det för att träna visar det sig att _empiriskt_ det inte fungerar (och dödar människor med stor smärta). Det är inte sällsynt att se forskare som inte kan "producera" sin egen forskning, "reproducerbarhet" bör betonas och verkställas.
@Trylks Jag tycker att din analogi är väldigt talande. Det finns mycket forskning inom cancerbiologi som inte syftar till att omedelbart bota något. Även snävt definierad medicinsk forskning är inte begränsad till kliniska prövningar av färdiga läkemedel och olika människor gör olika typer av forskning (dvs. vissa människor är specialiserade på kliniska prövningar, andra inom olika delområden av biologi). Om det är empiriskt bör det vara så reproducerbart som möjligt men inte allt handlar eller borde handla om praktiska tillämpningar (medicinska eller på annat sätt) och jag tror inte att CS bara handlar om att producera programvara.
De måste uttrycka det mer försiktigt än "vi botade cancer" men folk publicerar verkligen tidningar utan att gå hela vägen till en klinisk prövning av en faktisk molekyl (implementeringen om du vill).
@Relaxed Jag skulle sammanfatta det i: "kod eller så hände det inte".
@Trylks Så mycket gissade jag ;-) Men det är inte så som forskning fungerar (eller borde fungera, IMO).
"Återkörning av programmet skulle ändå inte vara en ordentlig verifiering. Om implementeringen är buggy, återkörning ger det fortfarande fel resultat" Om implementeringen är "buggy" kan resultaten baseras på ett fel, därför borde resultaten intekan man inte lita på.
Tolv svar:
Piotr Migdal
2014-06-11 19:49:47 UTC
view on stackexchange narkive permalink

För mig verkar det som om skälen är två:

  • tron ​​att kod bara är ett verktyg, en viss implementering är sekundär till idén eller algoritmen,
  • den historiska återstoden (det var opraktiskt att skriva ut många sidor, särskilt eftersom ingen kunde kopiera och klistra in den).

Dessutom:

Dessutom är saker relaterade till nuvarande incitament i den akademiska världen (där publikationer, inte kod, är relaterade till ens karriärmöjligheter):

  • delningskod kan innebära risk för att tas bort (istället för att mjölka samma kod i flera år),
  • att rensa koden tar tid, vilket kan användas för att skriva en annan publikation.

Måste människor skicka sin kod privat till r åtminstone så att de kan reproducera experimentet om möjligt.

Vanligtvis - inte. Om koden inte offentliggörs har nästan ingen granskare kontrollerat dess existens. mycket mindre - korrekthet.

Men många forskare börjar märka problemet (och de ser hur öppen källkodskultur blomstrar). Så det finns nya initiativ som behandlar en sådan fråga, som Science Code Manifesto:

Programvara är en hörnsten i vetenskapen. Utan programvara skulle det tjugoförsta århundradet vara omöjligt. Utan bättre programvara kan vetenskapen inte utvecklas.

Eller t.ex. detta manifest. Försök att söka efter reproducerbar forskning eller titta på saker som knitr för R och detta introduktion till IPython Notebook, eller läs om med GitHub för vetenskap. Och det verkar som att det tar fart.

+1. För mig är särskilt den tid som krävs för att städa upp en viktig punkt. Även om jag redan gör de flesta analyser som 'knitr' .Rnw-filer. Men det finns fortfarande en stor skillnad mellan i princip ett manus med få rubriker och något som kan gå till det kompletterande materialet.
Så hur bekräftar granskarna att de resultat som påstås i det specifika dokumentet är korrekta? Utan källkod för att verifiera resultaten, hur kan de säga att den är korrekt?
@Zindarod Det gör de tyvärr inte.
@Zindarod: De skriver om det. Om de får samma resultat är det bevis för att båda inte hade några (eller identiska) buts. Om källan tillhandahölls, skulle det vara enkelt att verifiera att källan gav resultaten, men det visar inte _ att _teorin_ producerar dessa resultat, eftersom det kan finnas ett fel i koden.
@MooingDuck Du menar för varje tidning, skriver de om källkoden från grunden? Jag implementerar en uppsats i mitt dagliga jobb och det har tagit mig den bättre delen av månaden bara för att förstå tidningen. Granskarna går igenom denna process för varje uppsats?
@Zindarod detta verkar som en intressant ny fråga.
@Zindarod Peer review före publicering är inte avsett att rensa bort fel som det du beskriver. Peer-review före publicering kontrollerar bara att den experimentella metoden är sund, att slutsatsen matchar de påstådda resultaten, att lämpliga beslut togs angående datamängder, jämförelser och statistiska tester. Reproduktion sker efter publicering, precis som på alla andra områden.
@Articuno Tack, det rensade det snyggt.
Kodrensningen kan också vara bokstavligen otrevlig. Vid min grundutbildning hade CV-gruppen ett internt * bibliotek * som bestod av minst flera tiotusentals rader som allvarligt behövde städa upp. Men att städa upp det skulle ha tagit månader och ångrullat allt otaligt antal pågående projekt i processen för att omarbeta det. Eftersom all publicerbar forskning som kommer från dem nästan säkert inkluderade delar av den bibliotekskoden, ja ...
@Jsor I alla fall är smutsig kod oändligt bättre än ingen kod. "Eftersom all publicerbar forskning som kommer från dem nästan säkert innehöll delar av den bibliotekskoden ...", kan det vara värt det att ta några månader att städa upp det.
@PiotrMigdal Tja, jag håller med dig i princip, men biblioteket hade ett fullständigt anslutet beroendediagram och ett hemvalsat cmake-liknande byggsystem (ja, det tog evigt att bygga någonting), så att publicera alla utdrag som behövs för att hantera hackad tillsammans bygga verktyg och det faktum att släppa någon del innebar att släppa ALLA delar så att det till och med kunde sammanställas.
Jag tycker att koddumpar borde vara normen i den akademiska världen.Det är förståeligt om koden är felaktig, men det bör vara ett krav
user1482
2014-06-11 20:02:45 UTC
view on stackexchange narkive permalink

Vilket område pratar du om? Ett CS-papper som beskriver designen och prestandan hos en datorvisionsalgoritm skiljer sig från ett sociologipapper som använde ett kalkylblad för att knäcka demografiska data.

Gör de flesta tidskrifter / konferenser bara "lita på" att människor som skicka in papperet verkligen implementerade teorin och fick de exakta resultaten?

Ja. Antagandet är alltid att det inte finns något vetenskapligt bedrägeri involverat.

Jag har alltid haft den uppfattningen att alla experiment ska kunna reproduceras av andra, det är inte vetenskapligt motiverat.

Om algoritmerna beskrivs fullständigt i tidningen är resultatet reproducerbart. För att reproducera det måste du implementera algoritmen igen.

Jag började bara läsa några papper och tänkte nu, låt oss titta på koden och blev förvånad över att de flesta papper inte har någon kod att titta på, samtidigt som man gör anspråk på lite prestanda eller är bättre än andra papper.

Förmodligen är bättre prestanda på grund av att den algoritm som beskrivs i tidningen är en mer effektiv algoritm. Till exempel, när man sorterar en stor mängd data, är en quicksort en bättre sorteringsalgoritm än en bubblasortering. Snabbsorten har O (n log n) -prestanda i genomsnitt, medan bubblasorten har O (n ^ 2), och detta gäller oavsett detaljerna i implementeringen.

Detaljer i implementeringen kan emellertid påverka konstanterna som lämnas utanför Big-O-notationen, så det kan vara problematiskt att jämföra prestandaresultat mellan två algoritmer utan att vara känd för den faktiska koden.
För att lägga till detta: I vissa fall kan det till och med vara lättare att verifiera resultaten genom att implementera algoritmen på nytt än genom att förstå författarens implementering.
_Om algoritmerna beskrivs fullständigt i tidningen, är resultatet reproducerbart. För att reproducera den måste du implementera algoritmen på nytt._ Men att känna till människor som har försökt att återimplementera saker inom ekonomi eller fysik, är beskrivningarna _nära_ fullständiga nog för att återge exakta resultat. Koden ljuger inte. Text kan (även om allt är i god tro och med hög granskning sammanställer du inte text).
Jag andra Piotr kommentar, och skulle tillägga att du inte bara behöver kod, men du behöver en testsvit för att se till att koden faktiskt fungerar. Och ja, en beskrivning av en algoritm i ett papper enligt min erfarenhet är sällan tillräckligt komplett för att implementera om från början, såvida det inte är en mycket enkel algoritm. Naturligtvis är det mycket att föredra att köra lite kod i motsats till att implementera en algoritm igen.
* Detaljer i implementeringen kan emellertid påverka konstanterna som lämnas utanför Big-O-notationen * Visst. Dessutom kommer hårdvaran som används för att köra koden att påverka konstanten. Om papperet skrevs för n år sedan, kommer koden att köras snabbare på dagens hårdvara av någon faktor som kommer från Moores lag. Det är därför datavetare vanligtvis inte är mycket intresserade av att bedöma effektiviteten hos en algoritm baserat på väggklockans tid, och det är därför de vanligtvis är intresserade av algoritmens egenskaper, inte egenskaper för en viss implementering.
@BenCrowell Nej, jag föreslår inte kod istället för beskrivning. Jag föreslår tillsammans med det. Särskilt i icke-CS, där människor mycket mer "tekniska" algoritmer (t.ex. den här demografiska skörden som ger många implicita antaganden, datakonverteringar osv.) Och inte har vana att beskriva dem i minsta detalj. Och jag vet vad som är Big-O eller varför tid i sekunder inte är ett bra mått på prestanda för en given algoritm.
@Trylks: en hel del offentligt finansierad forskning finansieras under förutsättning att forskningen på något sätt skulle generera ekonomisk avkastning. T.ex. antingen av spin-off-företag eller genom att be om delfinansiering per bransch (notera att t.ex. den offentliga finansieringen av det tyska Fraunhofer Society är kopplad till den summa pengar de förvärvar från tredje part / bransch) etc. Du kan börja en politisk diskussion hur vilken typ av forskning som ska finansieras, men så länge dessa branschrelaterade mål accepteras som legitima, krävs någon form av avvägning om allmänhetens tillgänglighet av arbetet.
... vilket inte betyder att jag inte förespråkar publicering av dataanalyskoden eller åtminstone internt med hjälp av reproducerbar forskningsteknik, versionskontroll osv. oss för data och kod - precis som du kan behöva fråga oss om du kan besöka för att lära dig labtekniker) skulle vara ett stort steg framåt. Och det steget är möjligt utan att komma in i gruvan för IP-rättigheter ...
"Ja. Antagandet är alltid att det inte finns något vetenskapligt bedrägeri involverat." - det ser ut som ett udda och förmodligen skadligt antagande för kollegial granskning.
Dikran Marsupial
2014-06-11 23:29:36 UTC
view on stackexchange narkive permalink

Jag tror att en fråga som är relaterad till den som tagits upp av Piotr (+1) som är att forskningsfinansiering i allmänhet inte är tillgänglig för att täcka kostnaderna för att producera mycket pålitlig bärbar kod eller kostnaderna för att underhålla / stödja kod som produceras för "forskning kvalitet". Jag har funnit att detta är en viktig fråga när jag försöker använda kod som släppts av andra forskare inom mitt område. alltför ofta kan jag inte få koden att fungera eftersom den använder något tredjepartsbibliotek som inte längre är tillgängligt, eller som bara fungerar på en Windows-dator eller som inte längre fungerar på min version av programvaran eftersom den använder något föråldrat inslag i språket / miljön. Det enda sättet att komma runt detta är att implementera om rutinerna från tredjepartsbiblioteket så att all kod tillhandahålls som ett enda monolitiskt program. Men vem har tid att göra det i en underfinansierad "publicera eller förgås" -miljö?

Om samhället vill ha högkvalitativ kod som ska åtfölja varje uppsats, måste samhället göra medel tillgängliga så att bra programvarutekniker kan skriva och underhålla den. Jag håller med om att det här skulle vara bra, men det kostar inget.

Vad du säger talar faktiskt mot publicering av kod, eftersom det sannolikt kommer att bli föråldrat eller möta bärbarhetsproblem. Enligt min mening är det viktigaste teorin bakom implementeringen och jag tror inte att forskningsfinansiering bör gå till att utveckla robusta, plattformsoberoende, ofta uppdaterade programvaruprodukter. Det är mjukvaruindustrins jobb.
Jag håller inte helt med det. Anledningen till att vi publicerar artiklar är att andra forskare tar upp våra idéer och kör med dem. Ett bra sätt att se till att det händer är att se till att de verktyg som krävs är tillgängliga. Det finns alltså ofta en god anledning att tillhandahålla verktyg som är * adekvata * för det ändamålet, men som fortfarande har en kostnad som för närvarande inte täcks. Vi behöver inte producera kvalitetskod för produktion, men vi behöver finansiering för att producera kod av tillräcklig kvalitet (ur portabilitet och rimlig livslängd).
@DikranMarsupial: "så att andra forskare tar upp våra idéer och kör med dem" - det låter väldigt enkelt, som om det var tillräckligt att publicera en kod och som direkt skulle göra det möjligt för andra forskare att bygga ovanpå den. Det är dock kopplat till * många * ifs i verkligheten - det fungerar bara * om * de andra forskarna känner till teknologierna som används för koden, * om * något annat de vill kombinera med den koden är kompatibel, * om * koden kör alls på deras plattform etc.
@O.R.Mapper du saknar poängen, om du anger kod är det lättare för andra att bygga vidare på ditt arbete. Hur mycket lättare beror på ett antal faktorer, men om du läser mitt svar kommer du att upptäcka att jag redan hade tagit upp samma punkter! Jag sa inte heller att det var tillräckligt att publicera koden - det är inte, koden stöder publikationen, inget mer. Ju mer du kan göra för att lindra "if", desto bättre, men i slutet av dagen arbetar du med en tids- och ansträngningsbudget, så det kommer alltid att finnas "if" s, men det betyder inte du ska inte ge bort forskningskod.
Koden behöver INTE uppfylla några kvalitetsstandarder. Så länge som koden ger resultaten som lovats av tidningen. Låt programvarutekniker optimera eller skriva om koden.
rumtscho
2014-06-12 01:32:50 UTC
view on stackexchange narkive permalink

Du verkar tro att vi bör begära kod, för utan kod kan något galet resultat, oavsett om det är bedrägeri eller ärligt misstag, släppas in i tidningen. Men detta är inte så. Inkludering av kod är en trevlig-att-ha-funktion, inte en måste-ha-funktion. De andra svaren antar tyst detta och förklarar de (bra och inte så bra) orsakerna som leder till den nuvarande situationen med ovanligt inkluderad kod. Jag tror att jag kan komplettera dem genom att förklara varför det inte är en måste-ha-funktion.

För teoretiska resultat behöver du inga empiriska verktyg som kod för att reproducera dem, som andra nämnde (t.ex. bevisa att en algoritm har ett bättre stort O-beteende än en annan). Naturligtvis finns det också empiriska resultat, som inte kan replikeras på det sättet.

Men dina granskare kommer att förvänta sig vad din idé kommer att resultera i. Om den nuvarande bästa prestandan för att wugging zums är 3 zums / s, och du lägger till en mindre tweak och rapporterar 300 zums / s, kommer din granskare ska märka att ditt anspråk är ovanligt och göra något (eventuellt kräva att skicka in igen med koden). Detta är inte idiotsäkert, men med flera granskare per papper är det effektivt eftersom storleken på de mest empiriska resultaten är förutsägbar när granskaren ser idén och förstår hur den fungerar.

För denna typ av papper har både ärliga och oärliga misstag goda chanser att fångas, med dåliga resultat för ärliga forskare (rykteförlust, särskilt om de fångas efter publicering) och sämre resultat för oärliga forskare (slut av karriär om bevisat!). Ju större misstaget är (mätt i felstorleken) desto större är chansen att fångas. Det är mindre troligt att du kommer att fastna om din algoritm hanterar 4 zums / s och du rapporterar 5 zums / sekund, än om du rapporterar 300 zums / s. Så, forskare undantas från att skicka in felaktiga papper, lämna mindre felaktiga i den inlämnade poolen, och granskarna fångar mycket av resten.

Det finns fall där det är helt okänt varför en observation är som den är, och i dessa fall är det mycket viktigt att beskriva den exakta testuppsättningen perfekt. Men jag har aldrig sett denna typ av papper inom datavetenskap, det är förknippat med naturvetenskap. Så ingen kod där. Även om du fick sådana resultat inom datavetenskap (t.ex. observerade du att användare kan läsa ett 12000 ord EULA på mindre än 30 sekunder, vilket strider mot vanliga läshastighetsobservationer, och du har ingen förklaring för det), är det osannolikt att inkludera koden du använde för att få resultatet kommer att vara relevant för replikering.

För att sätta ihop det, bland en stor massa datavetenskapliga artiklar, behöver de teoretiska och de naturfenomen-observationerna inte inkludera kod för replikering, och de återstående innehåller endast en låg procent av felaktiga men icke-fångade papper. Sammantaget leder detta till att en acceptabelt låg nivå av felaktiga papper skickas in. Att begära att koden ska följa med kommer att öka kvaliteten för en pappersklass, men det kommer att öka en redan hög kvalitetsnivå. Det är inte det att den nuvarande kvaliteten inte blir för låg om den inte har den här funktionen.

Mycket bra poäng om skillnaden mellan trevligt att ha och måste-ha funktioner. Jag minns en del papper (möjligen en ledare ?; Tyvärr just nu kan jag inte hitta den) som diskuterar en liknande problematisk för standarder för rapportering av statistiska analyser. Slutsatsen var att i princip en checklista för god praxis är känd, och det föreslogs att alla som känner till och följer den innehåller en enda mening som anger detta (eller en kortare beskrivning). Tanken är att den här trevliga strategin kommer att driva kvalitet utan behov av enighet om måste-ha-politik.
+1 för att i huvudsak casta detta i signalavkänningsvillkor. Trevlig!
Roy T.
2014-06-13 02:56:17 UTC
view on stackexchange narkive permalink

Eftersom vissa forskare inte gillar att tänka på den verkliga världen och granskare inte vill ha besväret.

(Vad som är nästa är lite av en rant)

Jag har nyligen gjort en undersökning av en specifik typ av geometri-relaterade algoritmer. I alla tidningar beskrivs programmet som att det fungerar perfekt men när jag frågade källkoden från ett dussin författare blev saker fula.

50% av programvaran saknade viktiga annonserade funktioner. Till exempel fungerar programvaran bara i 2D medan papperet visar 3D-exempel. (Vilket i mitt fall verkligen gör saker mycket svårare). Efter att ha frågat varför dessa funktioner saknades hade de vanligtvis aldrig implementerats eller implementerats men visat sig vara instabila / inte fungerar. För att vara tydlig: det var 100% omöjligt att generera de resultat som visas i papperet med programvara som ofta till och med förbättrades efter att papperet släpptes.

75% av programvaran skulle inte fungera perfekt i normala fall . I mitt fall berodde detta vanligtvis på att algoritmen var utformad med "perfekta siffror" i åtanke men algoritmen implementerades med hjälp av normala flytpunktsnummer och därmed hade representationsproblem som resulterade i stora fel. Bara ett fåtal papper nämnde dessa problem och endast två försökte (delvis) ta itu med dem.

85% av programvaran skulle inte fungera i scenarier som är särskilt utformade för att hitta problemfall. Låt oss vara ärliga; om en "bara" student kan hitta ett scenario om några veckor som helt bryter din algoritm vet du förmodligen redan om detta.

Att inte tillhandahålla kod gör det möjligt att ljuga och till min avsky (jag är ny till den akademiska världen) görs detta extremt ofta. Min handledare blev inte ens förvånad. Testkod är dock mycket arbete så detta beteende kommer förmodligen att vara okontrollerat en stund till.

StasK
2014-06-12 18:53:37 UTC
view on stackexchange narkive permalink

Som biträdande redaktör för en tidskrift (överbryggande statistik och psykologi) bad jag författarna att skicka in koden när de föreslog nya algoritmer och procedurer och skickade sedan koden till experterna i det statistiska paketet för att kontrollera att (en ) koden gör vad papperet beskriver, och (b, sekundär) att det är en bra kod (robust till dåliga ingångar, beräkningseffektiv, etc.). Jag blev också ombedd att granska några artiklar för Stata Journal vars fokus är koden, och gjorde detsamma. Det fanns tillfällen då (a) misslyckades, så jag var tvungen att skicka tillbaka tidningen och säga att författarna var tvungna att anpassa metoden och koden. Det fanns tillfällen då (b) skulle misslyckas, och i fallet med Stata Journal skulle detta också innebära att papperet återlämnades. Det var tillfällen då koden inte skulle komma.

För det mesta skulle jag gärna dela min kod, men det är tillräckligt komplicerat (med interna metadatabaserade kontroller, anpassad utdata etc.) att en forskare som är mindre skicklig med paketen Jag använder kommer inte att kunna redigera det för att få det att fungera på sin dator.

Återgår till din huvudfråga - granskare är lat pressade för tiden och har sina egen forskning för att driva på sina tidskrifter, så få av dem försöker fullständigt verifiera resultaten. Så här är världen. Det kan hända att dessa professorer kan begära koden och ge den till sina doktorander att leka med, bryta och felsöka, eftersom detta skulle vara en bra utbildningsmöjlighet för de senare. Men återigen händer det inte så ofta, eftersom sekretessbestämmelserna för att acceptera granskarrollen vanligtvis hindrar en från att dela tidningen med någon annan.

cbeleites unhappy with SX
2014-06-12 01:42:02 UTC
view on stackexchange narkive permalink

Jag vill lägga till en lite annan synvinkel från ett experimentfält (kemi / spektroskopi / kemometrisk dataanalys).
Här börjar studien i laboratoriet (eller kanske i fältet), med en gammaldags typ av anteckningsbok. Gammaldags vanligtvis fortfarande papper + penna. Dataanalys görs ofta med GUI-program på ett interaktivt sätt. Dokument hålls precis som i labbet: papper + penna. Kanske med några sparade och / eller tryckta siffror. Som redan registrerades delen i labbet på detta sätt, att inte ha en loggfil eller ens ett skript av dataanalysen ses inte som ett problem. Hur som helst, att be om att koden ska publiceras är bara en del av vad du behöver för att köra analysen igen: du behöver också den faktiska informationen.
Redan förslaget att skriva in dataanalysen och åtminstone spara antingen en logg över matlab / R-sessionen eller skriv den i skriptform är fortfarande typ av ny (även om människor älskar knitr -genererade rapporter som jag producerar ...). Men IMHO-saker går ganska snabbt nu. Jag skulle säga att med verktyg som git och knitr är de största praktiska hindren nästan löst åtminstone för den typ av person som föredrar kod framför att klicka. Det är dock inte så att allt redan fungerar smidigt (överväga stora binära rådata och git , och jag medger uppriktigt sagt att jag inte har någon aning om hur jag praktiskt kan skapa en "riktig" databasserver på ett effektivt sätt att det håller reda på förändringar). Detta är ur mitt perspektiv som forskare som bara behöver verktyg för reproducerbarhet som användare - och därmed förstår jag mina icke-programmerande kollegor som ändå behöver analysera sina data: de har bara inte (eller vet av) verktygen som gör det möjligt för dem att logga sina analyser med rimlig ansträngning.

Den traditionella uppskattningen av var de stora svårigheterna lurar fokuserar också på lab-delen. Jag tror att många forskare inte är medvetna om reproducerbarhetsproblemen med beräkningarna / dataanalysen. För att vara ärlig delar jag vanligtvis den synvinkeln: IMHO i biospektroskopi är ett av de stora viktiga problemen det alldeles för låga antalet individer i studierna. Om du bara har 4 möss i studien kan den exakta hanteringen av uppgifterna inte påverka de praktiska slutsatserna för mycket. Det finns en grå zon där inte en korrekt validering kan påverka slutsatserna, men igen: alla jag känner som gör valideringen enligt den mest kända praxis stavar detta mycket uttryckligen - så igen (och accepterar en viss risk för falskt kasta bort få papper som "förmodligen inte reproducerbara") Jag brukar tro att de praktiska slutsatserna knappast påverkas.


Å andra sidan ser jag på kraven som t.ex. Chemmical Communications som läggs ut om en ny kemisk substans ska publiceras Jag kan inte se varför det inte kan finnas datavetenskapliga tidskrifter som kräver koden på ett liknande sätt.
Som t.ex. det gör Journal of Statistical Software. (Jag är ganska säker på att det finns andra sådana tidskrifter, men jag känner dem inte.)

För mig faller detta i ett mycket större område med reproducerbarhetsfrågor. Naturligtvis, om dataanalysen inte kan reproduceras finns det stora problem.


Ännu en punkt: även om publikationer om programvara fortfarande är mycket sällsynta inom mitt område, hade jag nyligen en sådan uppsats för granskning. Tyvärr föreslås att mjukvaran distribueras genom att kontakta en av författarna - vilket jag självklart inte kunde göra som en anonym granskare.
Således kan den faktiska programvaran vara ännu mindre tillgänglig för granskare än för normala läsare!

För ditt sista stycke: säkert kan du be redaktören att be författarna om koden?
@NateEldredge: säker. Jag uttrycker det bara som ett exempel att bifoga koden fortfarande är väldigt långt ifrån att komma till standardinställningarna när man skickar in ett manuskript om det glöms även för ett manuskript som uttryckligen handlar om att släppa den koden.
Phil Perry
2014-06-12 01:37:19 UTC
view on stackexchange narkive permalink

Jag tror att de flesta läsare / granskare skulle hitta en tillräckligt detaljerad algoritm. Du skriver ditt papper som visar, oh, C ++ - kod, och jag använder SPSS i min butik - din kod är värdelös för mig. Inte för att de flesta läsare skulle njuta av att återimplementera koden (speciellt för icke-CS-papper), men med en specifik kod som körs på en specifik plattform, kommer det säkert att vara mycket röran att vada igenom. En algoritm reducerar den till det väsentliga.

Om mitt papper visar hastighetsförbättringen av min nya Quicksort-metod jämfört med standard Bubble Sort, skulle det vara lättare att stödja mina påståenden genom att visa algoritmer för de två metoderna. för O (n log n) vs O (n ^ 2) speedup. Om mitt papper handlar om befolkningsåldersfördelningar i rika kontra utvecklingsekonomier, såvida det inte finns ett riktigt snyggt trick som jag använde för att bearbeta data, skulle de flesta läsare förmodligen inte ens bry sig om algoritmen, utom i mycket breda penseldrag.

Det kommer att bero på ämnesområdet (allmänt, exempelvis datavetenskap) och det specifika delområdet (säg sorteringsmetoder), samt hur stor inverkan algoritmen som används har på resultaten, om algoritmen är nödvändig. Om jag visar kompilatorskillnader i Fortran-koden, skulle det vara bra att inkludera faktisk kod. Annars är själva koden sällan av intresse.

"Jag skulle tro att de flesta läsare / granskare skulle hitta en tillräckligt detaljerad algoritm." För en algoritm med tillräcklig komplexitet räcker det inte med en beskrivning. "din kod är värdelös för mig". Förutsatt att det är fungerande kod (och kanske även om det inte är) är kod per definition en implementering av en algoritm och därför användbar.
Kaveh
2014-06-13 10:21:34 UTC
view on stackexchange narkive permalink

Detta är en vy från datavetenskap / teoretisk datavetenskap / matematik.

Fråga dig själv: vem är målgruppen för en akademisk uppsats?

Det är inte slutanvändare. Det är granskare ! Vill granskare ha kod? Beror på situationen. Ibland gör de det. Ofta gör de det inte.

Tänk på det här: varför matematiker inte ger formella bevis utan använder informella argument?

Det är kostnader kontra fördelar. Att tillhandahålla ett formellt verifierat bevis är möjligt men behöver vanligtvis för mycket arbete, arbete som författare inte är utbildade för och inte har mycket erfarenhet av. Å andra sidan, vad tjänar författarna på det? Hjälper det att övertyga granskarna om riktigheten i resultaten? Nej, vanligtvis föredrar granskare en kort informell förklaring som gör att de kan förstå och se varför resultatet är sant. Ett formellt bevis hjälper vanligtvis inte mycket. Det finns människor som inte gillar datorassisterade bevis som inte kan verifieras och förstås direkt av människor.

Samma kostnader jämfört med nytta tänkande gäller program. Om tillhandahållande av kod inte hjälper till att övertyga granskaren om papperets riktighet, varför slösar du bort resurser (tid / pengar / sidor / ...) för att göra det? Har granskare tid att läsa koder med tusentals rader för att kontrollera att det inte finns något fel i dem?

Å andra sidan är ibland mjukvaran som härrör från papperet av primärt intresse. Att ha koden är till hjälp för att verifiera anspråken. T.ex. du hävdar att du har en snabbare algoritm för SAT. Då är det bra att ange koden. I sådana fall anger författarna sin kod. Detta är främst i mer experimentella delar. Vi bryr oss inte om riktigheten i koden utan att få resultat bättre än befintliga algoritmer. I sådana situationer finns det vanligtvis standardvärden för att jämföra algoritmer. (Se till exempel SAT-tävlingar.) Om det inte finns etablerade riktmärken, varför publicera kod? Om det är ett teoretiskt resultat där de asymptotiska fördelarna sker över fall som är för stora för att testa, vad är fördelen med att ha koden? Mer med tanke på det faktum att stor kod som utvecklats av icke-professionella programmerare med stor sannolikhet är buggy? Att anställa professionella programutvecklare för att utveckla kvalitetskod är kostsamt ( den genomsnittliga årliga inkomsten för en person med en kandidatexamen i CS är cirka 100 000 i USA) (förutom eventuellt som doktorander;) och är vanligtvis inte har några vinster efteråt.

Men behöver kod inkluderas i papper? Självklart inte! Det finns bättre sätt att publicera kod, t.ex. ha en länk i tidningen till en online-kopia (på deras hemsida eller ett offentligt arkiv som github). Varför skulle man föredra att inkludera en kod med tusentals rader i ett dokument som ska läsas av människor ?

Möjligen är målgruppen för en akademisk ** inlämning ** granskaren, men målgruppen för en ** uppsats ** är definitivt samhället i stort.
@Suresh, uppenbarligen skrivs papper för läsarna för det akademiska samhället i stort. Men jag tror att författare ägnar mer uppmärksamhet åt vad granskarna förväntar sig. Naturligtvis är granskare avsedda att representera samhället, men i sin roll som granskare har de ofta prioriteringar som kan vara lite annorlunda än samhället i stort.
T.ex. de kanske vill ha mer information än andra läsare för att se till att resultaten är korrekta, de kan behöva mindre information eftersom de är experter på ämnet, eller ibland kan de motsätta sig ett papper eftersom de tycker att presentationen strider mot deras syn på ämnet, etc. Det verkar för mig att vi vanligtvis betraktar samhället i stort mycket mindre än de potentiella granskarna som vår publik när vi skriver papper i praktiken. Hur som helst, jag tror inte att frågan har någon stor effekt på vad jag försöker säga i svaret:
kod publiceras när målgruppen vill ha det från författarna och slutanvändare som vill ha färdig kod är inte målgruppen för akademiska artiklar.
den sista punkten håller jag med.
Naturligtvis borde koden inte finnas i tidningen, utan istället en länk till en repo. Lol kan inte ens föreställa mig att titta på programvarukod på mer än 1000 rader i en enda pdf-fil.
Floris
2014-06-12 17:46:44 UTC
view on stackexchange narkive permalink

Vanligtvis avser "prestanda" för kod "hur bra den skalas med storleken på problemet". Detta betyder enligt min mening att ett papper som hävdar "algoritm A är snabbare än algoritm B" behöver visa timing för både A och B _ för problem med olika storlek. Även om det fortfarande kan finnas ineffektivitet (och fel) i implementeringarna, kommer detta åtminstone att visa om den underliggande algoritmen är effektivare (lägre stor-oh).

Var programvaran är de nyckeln till papperet ( produkt, inte verktyget) Jag förväntar mig att den är tillgänglig (github eller annat). Så ett papper som säger "Jag kan sortera i ordning 1 / n genom att kerfugla dargibold-numret" måste visa hur det gjordes; papperet som hävdar "när jag sorterade dessa två datauppsättningar, den från Whoville hade större flubbits" behöver inte visa hur koden sorterades - de måste fokusera på att förklara vad som är viktigt med flubbits från Whoville.

Alessandro Jacopson
2016-06-20 23:03:35 UTC
view on stackexchange narkive permalink

Hämtad från boken SKIENA, S. The Algorithm Design Manual: Springer. 2008:

Efter en lång sökning upptäckte Chazelle [Cha91] en linjär tidsalgoritm för triangulering av en enkel polygon. Denna algoritm är tillräckligt hopplös för att implementera att den kvalificerar mer som ett existenssäker.

[Cha91] CHAZELLE, Bernard. Triangulering av en enkel polygon i linjär tid. Diskret & Computational Geometry , 1991, 6.3: 485-524.

Jag tror att författarna överväger kostnader och fördelar och undviker inlämning av kod när kostnaderna uppväger fördelarna.

Enligt David W. Hogg kostar det:

  1. du kan bli avskaffad
  2. du kan bli generad av din fula kod eller av att du inte kommenterar eller dokumenterar
  3. måste du svara på frågor (och ofta dumma eller irrelevanta) om koden och spendera tid på att dokumentera
  4. du måste överväga att dra förfrågningar eller på annat sätt behålla koden, eventuellt långt in i framtiden
  5. du kan behöva slå ner dåliga och felaktiga resultat som genereras med din kod
  6. ditt rykte kan drabbas om koden används felaktigt
  7. kan det finnas lagliga (inklusive militära) och licensfrågor

Fördelarna är:

  1. mer vetenskap blir klar, fler artiklar skrivs; alla mått på påverkan ökar
  2. du får motivation att städa och dokumentera koden
  3. resultaten blir (mer) reproducerbara och (mer) pålitliga
  4. utomstående hittar fel eller göra förbättringar i din kod och leverera pull-förfrågningar
  5. du får kredit och synlighet och bygga community
  6. citatpriser kan öka
  7. koden bevaras
  8. -koden blir sökbar (inklusive av dig!) och säkerhetskopieras
  9. det finns bra webbplatser för långvarig arkivering och gränssnitt
  10. kan skapa prioritet på en idé eller känd teknik på en metod
Sefu
2017-02-15 03:03:42 UTC
view on stackexchange narkive permalink

Eftersom de flesta akademiska forskare inom tekniska områden inte kan koda för att rädda sina liv. I datorsyn hackar de bara något tillsammans i en enda Matlab-fil. De tycker om att kodning är för undergrader. De tror att det är under dem att slösa bort sin tid på sådana bagateller. De flesta av dem lärde sig aldrig bra mjukvaruteknik och förstår inte komplexiteten och skickligheten som krävs för att skriva bra kod.

Det största problemet är att detta stöds av forskare eftersom alla akademier bryr sig om publicerar, kvantitet över kvalitet. Framgång mäts av hur många citat du har, inte av hur bra dina bidrag är. I slutet av dagen, när de enda som citerar dig själva inte producerar något användbart, spelar det ingen roll. Det är inte vetenskap längre så mycket som det är "forskning för att göra forskning".



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...