Domanda:
Perché vengono accettati documenti senza codice ma con risultati?
Sam Stoelinga
2014-06-11 19:23:29 UTC
view on stackexchange narkive permalink

Ho appena iniziato a leggere alcuni articoli (Informatica, in particolare Visione artificiale) e ho pensato "ora diamo un'occhiata al codice sorgente" e sono rimasto piuttosto stupito dal fatto che la maggior parte degli articoli non abbia alcun codice sorgente che implementa i metodi descritti per cercare a, pur rivendicando alcune prestazioni o essendo migliore di altri documenti.

Come vengono accettati questi articoli in riviste / conferenze? Le persone devono inviare il loro codice sorgente in privato almeno ai revisori, in modo che possano riprodurre l'esperimento, se possibile.

La maggior parte delle riviste / conferenze si limita a "fidarsi" che le persone che inviano l'articolo abbiano davvero implementato il teoria e ottenuto quei risultati esatti?

Ho sempre avuto l'idea che qualsiasi esperimento dovrebbe essere riproducibile da altri, altrimenti non è scientificamente giustificato. Mi stavo chiedendo questo negli ultimi giorni.

Le persone nella mia area di ricerca non si preoccupano molto del codice effettivo utilizzato per ottenere i risultati; i concetti alla base di un'implementazione codificata sono più importanti. Si presume che chiunque abbia una conoscenza nel campo possa produrre codice in un linguaggio di sua scelta purché i concetti (descrizioni degli algoritmi, ecc.) Siano spiegati in modo molto esplicito e chiaro.
Correlati: [In che modo le riviste accademiche proteggono dai risultati empirici forniti dai bug?] (Http://academia.stackexchange.com/questions/18117/how-do-academic-journals-protect-against-empirical-results-given-by -insetti)
Si noti che il problema non è specifico del codice del computer, ma segue in modo analogo anche il lavoro di laboratorio. Anche se le procedure / protocolli sono descritti in dettaglio, non c'è modo di sapere se la persona che ha svolto il lavoro ha seguito i protocolli meticolosamente.
Questo è davvero troppo vago per consentire una possibile risposta. Di che tipo di "codice" parli?
* "La maggior parte delle riviste / conferenze" si fida "semplicemente che le persone che presentano l'articolo abbiano davvero implementato la teoria e ottenuto quei risultati esatti?" * Questa è la mia impressione e non mi piace affatto, specialmente quando i finanziamenti per produrlo l'attuazione proviene dal denaro pubblico. Se il finanziamento è * pubblico *, il codice dovrebbe essere * pubblico *. Se vuoi * pubblicare * un articolo su un sistema, il codice dovrebbe essere * pubblicato *. Sfortunatamente questo è raramente il caso.
BTW: vedi anche questa risposta correlata: http://academia.stackexchange.com/questions/13726/should-i-supply-code-as-supplemental-material/13730#13730
@user11192 Hmm, bene in pratica a volte può essere problematico. Soprattutto perché il tempo è sempre breve. Ecco un esempio http://iopscience.iop.org/1367-2630/7/1/034 :)
@posdef: Labwork * non * è analogo. Puoi facilmente mettere il codice disponibile online affinché chiunque lo possa scaricare, leggere, testare e utilizzare. Non puoi fare lo stesso con il lavoro di laboratorio. Questo è il motivo per cui dobbiamo fidarci della tua parola sul tuo lavoro di laboratorio, ma non è necessario fidarci della tua parola sul tuo codice.
@JukkaSuomela Capisco il tuo punto, ma uno _può_ riprendere te stesso mentre svolgi il lavoro di laboratorio e metterlo online. Non sto dicendo che abbia senso, sto semplicemente dicendo che è possibile.
@JukkaSuomela Il punto è che l'intero sistema di pubblicazione accademica si basa su riassunti (relativamente) brevi e una grande quantità di fiducia. Il lavoro di laboratorio è un po 'più opaco, ma i ricercatori in genere non pubblicano nemmeno dati grezzi o registri. Con l'editoria elettronica, materiale supplementare, ecc. * Potrebbe * essere diverso, ma l'analogia è ancora valida.
Non sono a conoscenza di nessuna scienza in cui la revisione pre-pubblicazione implichi la riproduzione degli esperimenti: gli esperimenti dovrebbero essere riproducibili in modo ragionevole, ma non è previsto che i revisori lo facciano effettivamente prima della pubblicazione, questo è compito di altri gruppi di ricerca in seguito. Tuttavia, ciò che * è * necessario sono i dettagli sul processo di misurazione e sul set di test, in modo da poter ottenere risultati comparabili dalle reimplementazioni in camera bianca della vostra metodologia. E questo è l'unico modo per chiamare l'esperimento riproducibile - l'uso del codice non lo è, poiché potrebbe fare le cose in modo leggermente diverso da quanto descritto.
Rieseguire il programma non sarebbe comunque una verifica adeguata. Se l'implementazione è difettosa, rieseguirla fornisce comunque risultati errati. La reimplementazione è una verifica adeguata. Riproducibilità significa che è spiegato abbastanza chiaramente da consentire la reimplementazione. Una descrizione chiara è molto più utile per riprodurre i risultati rispetto al codice. Il codice è pensato per il funzionamento dei computer, non per la lettura da parte delle persone. (Ricorda: nella stragrande maggioranza dei casi questo codice è implementato da una sola persona e non è pensato per essere mantenuto, non si tratta di "ingegneria del software"). Il documento è pensato per essere letto dalle persone.
Sono un geofisico che scrive molto codice di modellazione. Ma il codice stesso è francamente irrilevante. È l'idea alla base del codice che conta. D'altra parte, se vuoi che il tuo modello (non il codice) venga accettato, faresti meglio a dimostrare che ha funzionato contro qualcosa di noto o verificato in precedenza. Nessun revisore lascerà andare un documento per modelli senza un passaggio di verifica.
@posdef In realtà c'è un diario dedicato al "video te stesso mentre lavori in laboratorio": JoVE. http://www.jove.com
@Szabolcs Sono con voi - nel mio campo, "riproducibilità" nella sua forma corretta significa essere in grado di condurre uno studio comparabile su una popolazione completamente diversa. "Posso fare clic su Esegui e ottenere la stessa risposta" è una forma bassa e bassa di riproducibilità. E questo ignora la prospettiva di dati che * non posso condividere con te * che il codice richiede per essere eseguito.
@Trylks, Sono d'accordo con te al 100%, se dipendesse da me ... niente codice, niente fondi pubblici ... per qualsiasi cosa CS. Credo anche fermamente che molti studenti prendano quella ricerca segreta finanziata pubblicamente e saltino direttamente nel mercato privato con i loro "beni". Non ho problemi con qualcuno che commercializza lavori pubblici, ecco perché lo finanziamo all'inizio ... ma non sono d'accordo con il vantaggio finanziato pubblicamente fornito dal codice. Non mi interessa se è utilizzabile, o pratico ... o completamente inutile. l'abbiamo comprato, spetta a noi decidere se ha un valore.
Tutto dipende da quanto siano dimostrabili i risultati. Se sono teoremi matematici, ciò che è richiesto è una dimostrazione matematica, non codice in esecuzione (a meno che non sia codice per un dimostratore di teoremi).
@Szabolcs "Riproducibilità significa che è spiegato abbastanza chiaramente da consentire la reimplementazione". La spiegazione migliore è il codice stesso, il codice dovrebbe essere letto. Se scommetti sulla quantità (due spiegazioni, una in inglese e una in codice) è molto probabile che la qualità non sia all'altezza a causa delle scadenze ravvicinate. Se vuoi dare la priorità a una spiegazione di qualità, dovrebbe essere il codice. In teoria, teoria e pratica sono la stessa cosa, ma in pratica sono molto diverse. La mancata osservanza della pratica porta al confinamento nella "torre d'avorio".
@Trylks Ma cosa succede se sei veramente interessato alla teoria e questo è ciò in cui sei bravo? Sostieni che la "torre d'avorio" sia cattiva e che la pratica sia buona, ma ogni scienziato informatico del mondo dovrebbe dedicare tempo e risorse alla produzione di software di livello produttivo o allo spin-off di imprese?
@Relaxed Direi che il lavoro di un informatico è produrre software. Ho visto articoli che propongono qualcosa in teoria e lo stesso autore che lotta per ottenere un'implementazione funzionante (e non ho ancora visto l'implementazione). Cosa diremmo se questo accadesse in altre aree? Pensa a una persona che afferma di aver curato il cancro (in teoria) ma quando si cerca di prenderlo per esercitarsi si scopre che _empiricamente_ non funziona (e uccide le persone con grande dolore). Non è raro vedere ricercatori che non possono "produrre" la propria ricerca, la "riproducibilità" dovrebbe essere sottolineata e applicata.
@Trylks Penso che la tua analogia sia molto significativa. Ci sono molte ricerche sulla biologia del cancro che non mirano a una cura immediata di nulla. Anche la ricerca medica strettamente definita non è limitata alle sperimentazioni cliniche di rimedi pronti per essere testati e persone diverse svolgono diversi tipi di ricerca (ad esempio, alcune persone sono specializzate in sperimentazioni cliniche, altre in varie sotto-aree della biologia). Se è empirico, dovrebbe essere il più riproducibile possibile, ma non tutto riguarda o dovrebbe riguardare applicazioni pratiche (mediche o altro) e non credo che CS riguardi solo la produzione di software.
Devono metterlo in modo più provvisorio di "abbiamo curato il cancro", ma le persone pubblicano davvero articoli tutto il tempo senza andare fino alla sperimentazione clinica di una molecola reale (l'implementazione se vuoi).
@Relaxed Lo riassumerei in: "codice o non è successo".
@Trylks Lo immaginavo ;-) Ma non è così che funziona la ricerca (o dovrebbe funzionare, IMO).
"Rieseguire il programma non sarebbe comunque una verifica corretta. Se l'implementazione è difettosa, rieseguirla dà comunque risultati errati" Se l'implementazione è "buggata" i risultati potrebbero essere basati su un bug quindi i risultati non dovrebberoessere attendibile.
Dodici risposte:
Piotr Migdal
2014-06-11 19:49:47 UTC
view on stackexchange narkive permalink

Per me sembra che le ragioni siano due:

  • la convinzione che il codice sia solo uno strumento, una particolare implementazione essendo secondaria rispetto all'idea o all'algoritmo,
  • il residuo storico (era poco pratico stampare molte pagine; soprattutto perché nessuno poteva copiarlo e incollarlo).

Inoltre:

Inoltre, le cose relative agli incentivi attuali nel mondo accademico (dove le pubblicazioni, non il codice, sono legate alle proprie possibilità di carriera):

  • condividere il codice può comportare il rischio di essere scoperti (invece di mungere lo stesso codice per anni),
  • la pulizia del codice richiede tempo, che può essere utilizzato per scrivere altre pubblicazioni.

Le persone devono inviare il loro codice privatamente al r almeno gli osservatori, in modo che possano riprodurre l'esperimento, se possibile.

Tipicamente - no. Se il codice non viene reso pubblico, quasi sicuramente nessun revisore ne ha verificato l'esistenza; molto meno: correttezza.

Tuttavia, molti scienziati stanno iniziando a notare il problema (e vedono come fiorisce la cultura open source). Quindi, ci sono nuove iniziative che affrontano questo problema, come il Science Code Manifesto:

Il software è una pietra angolare della scienza. Senza software, la scienza del ventunesimo secolo sarebbe impossibile. Senza un software migliore, la scienza non può progredire.

O ad es. questo manifesto. Prova a cercare ricerche riproducibili o guarda cose come knitr per R e questa introduzione a IPython Notebook, oppure leggi informazioni sull ' utilizzo GitHub per la scienza. E sembra che stia decollando.

+1. Per me, in particolare, il tempo impiegato per la pulizia è un punto importante. Anche se già faccio la maggior parte delle analisi come file `knitr` .Rnw. Ma c'è ancora una grande differenza tra fondamentalmente uno script con pochi titoli e qualcosa che può andare al materiale supplementare.
Allora come fanno i revisori a confermare che i risultati dichiarati nel documento specifico sono corretti? Senza codice sorgente per verificare i risultati, come possono dire che è corretto?
@Zindarod Purtroppo no.
@Zindarod: Lo riscrivono. Se ottengono gli stessi risultati, è la prova che entrambi non avevano (o erano identici) ma. Se la fonte fosse fornita, una verifica che la fonte abbia fornito i risultati sarebbe facile, ma _non_ mostra che la _toria_ produce quei risultati, perché potrebbe esserci un bug nel codice.
@MooingDuck Vuoi dire che per ogni giornale riscrivono il codice sorgente da zero? Sto implementando un documento nel mio lavoro quotidiano e mi ci è voluta la parte migliore del mese solo per capire il documento. I revisori seguono questo processo per ogni articolo?
@Zindarod questa sembra una nuova domanda interessante.
@Zindarod La revisione tra pari pre-pubblicazione non ha lo scopo di eliminare errori come quello che stai descrivendo. La revisione tra pari pre-pubblicazione verifica semplicemente che il metodo sperimentale sia valido, che la conclusione corrisponda ai risultati dichiarati, che siano state prese le decisioni appropriate riguardo a set di dati, confronti e test statistici. La riproduzione avviene dopo la pubblicazione, proprio come in qualsiasi altro campo.
@Articuno Grazie, questo ha chiarito bene.
Anche la pulizia del codice può essere letteralmente intrattabile. Al mio studente universitario, il gruppo CV aveva una * libreria * interna che comprendeva almeno diverse decine di migliaia di righe che necessitavano di una profonda pulizia. Ma per ripulirlo ci sarebbero voluti mesi e avrebbe portato a un numero imprecisato di progetti in corso nel processo di refactoring. Dal momento che qualsiasi ricerca pubblicabile proveniente da loro quasi certamente includeva parti di quel codice di libreria, beh ...
@Jsor In ogni caso, il codice sporco è infinitamente meglio di nessun codice. "Dal momento che qualsiasi ricerca pubblicabile proveniente da loro quasi certamente includeva parti di quel codice di libreria ...", potrebbe valerne la pena impiegare qualche mese per ripulirlo.
@PiotrMigdal Bene, sono d'accordo con te in linea di principio, ma la libreria aveva un grafico delle dipendenze completamente connesso e un sistema di compilazione simile a cmake fatto in casa (sì, ci voleva un'eternità per costruire qualsiasi cosa), quindi pubblicare qualsiasi frammento richiedeva anche di occuparsi dell'hackerato insieme costruiscono strumenti e il fatto che il rilascio di qualsiasi parte comportava il rilascio di OGNI parte in modo che potesse anche essere compilato.
Penso che i dump del codice dovrebbero essere la norma nel mondo accademico.Bloccare intenzionalmente il codice perché potrebbero esserci bug e impedire ad altre persone di avanzare nel tuo lavoro è comprensibile se i dump del codice non sono un requisito, ma dovrebbero essere un requisito
user1482
2014-06-11 20:02:45 UTC
view on stackexchange narkive permalink

Di quale campo stai parlando? Un documento CS che descrive la progettazione e le prestazioni di un algoritmo di visione artificiale è diverso da un documento di sociologia che utilizzava un foglio di calcolo per elaborare i dati demografici.

La maggior parte delle riviste / conferenze si "fidano" di quelle persone che inviare l'articolo ha davvero implementato la teoria e ottenuto quei risultati esatti?

Sì. La presunzione è sempre che non vi siano frodi scientifiche coinvolte.

Ho sempre avuto l'idea che qualsiasi esperimento dovrebbe essere riproducibile da altri, altrimenti non è scientificamente giustificato.

Se gli algoritmi sono completamente descritti nel documento, il risultato è riproducibile. Per riprodurlo, devi reimplementare l'algoritmo.

Ho appena iniziato a leggere alcuni documenti e ho pensato ora di dare un'occhiata al codice e sono rimasto piuttosto sorpreso dal fatto che la maggior parte dei documenti non abbia alcun codice da guardare, pur rivendicando alcune prestazioni o essendo migliore di altri documenti.

Presumibilmente la migliore prestazione è perché l'algoritmo descritto nel documento è un algoritmo più efficiente. Ad esempio, quando si ordina una grande quantità di dati, un Quicksort è un algoritmo di ordinamento migliore di un Bubble Sort. Il quicksort ha in media prestazioni O (n log n), mentre il bubble sort ha O (n ^ 2), e questo è vero indipendentemente dai dettagli dell'implementazione.

I dettagli nell'implementazione, tuttavia, possono influenzare le costanti che sono escluse dalla notazione Big-O, quindi confrontare direttamente i risultati delle prestazioni tra due algoritmi senza essere a conoscenza del codice effettivo può essere problematico.
Per aggiungere a questo: in alcuni casi può anche essere più facile verificare i risultati reimplementando l'algoritmo piuttosto che comprendere l'implementazione dell'autore.
_Se gli algoritmi sono completamente descritti nel documento, il risultato è riproducibile. Per riprodurlo, devi reimplementare l'algoritmo._ Ma, conoscendo persone che hanno provato a reimplementare le cose in economia o in fisica, le descrizioni sono _raramente_ abbastanza complete da riprodurre risultati esatti. Il codice non mente. Il testo può (anche se tutto è in buona fede e con un alto livello di controllo, non compili il testo).
Secondo il commento di Piotr, aggiungerei che non solo hai bisogno di codice, ma hai bisogno di una suite di test per assicurarti che il codice funzioni effettivamente. E sì, una descrizione di un algoritmo in un articolo nella mia esperienza è raramente abbastanza completa da poter essere reimplementata da zero, a meno che non sia un algoritmo molto semplice. Inoltre, ovviamente, è molto preferibile eseguire del codice invece di reimplementare un algoritmo.
* I dettagli nell'implementazione, tuttavia, possono influenzare le costanti che sono escluse dalla notazione Big-O * Sure. Inoltre, l'hardware utilizzato per eseguire il codice influirà sulla costante. Se l'articolo è stato scritto n anni fa, il codice verrà eseguito più velocemente sull'hardware di oggi per alcuni fattori che derivano dalla legge di Moore. Questo è il motivo per cui gli informatici in genere non sono molto interessati a giudicare l'efficienza di un algoritmo in base al tempo dell'orologio da parete, ed è il motivo per cui sono tipicamente interessati alle proprietà dell'algoritmo, non alle proprietà di una particolare implementazione.
@BenCrowell No, non suggerisco il codice invece della descrizione. Suggerisco insieme ad esso. Soprattutto nel non CS, dove le persone algoritmi molto più `` tecnici '' (ad esempio questa raccolta demografica che fa molte ipotesi implicite, conversioni di dati, ecc.) E non hanno l'abitudine di descriverle in ogni minimo dettaglio. E so cos'è Big-O o perché il tempo in secondi non è una buona misura delle prestazioni di un dato algoritmo.
@Trylks: alcune ricerche finanziate con fondi pubblici sono finanziate con la premessa che la ricerca dovrebbe in qualche modo generare ritorni economici. Per esempio. o da società spin-off, o chiedendo un finanziamento parziale da parte dell'industria (si noti che, ad esempio, il finanziamento pubblico della Società tedesca Fraunhofer è accoppiato alla quantità di denaro che acquisiscono da terze parti / industria) ecc. È possibile avviare una discussione politica come il tipo di ricerca dovrebbe essere finanziato, ma fintanto che questi obiettivi legati all'industria sono accettati come legittimi, è necessario un qualche tipo di compromesso sull'accessibilità pubblica del lavoro.
... il che non significa che non sto sostenendo la pubblicazione del codice di analisi dei dati o almeno internamente utilizzando tecniche di ricerca riproducibili, controllo della versione ecc. Tendo a pensare che già una tale riproducibilità interna (che richiederebbe noi per dati e codice - proprio come potrebbe essere necessario chiederci se puoi visitare per apprendere le tecniche di laboratorio) sarebbe un grande passo avanti. E quel passo è possibile senza entrare nei campi minati dei diritti di proprietà intellettuale ...
"Sì. La presunzione è sempre che non vi siano frodi scientifiche coinvolte." - questo mi sembra un presupposto strano e probabilmente dannoso per la revisione tra pari.
Dikran Marsupial
2014-06-11 23:29:36 UTC
view on stackexchange narkive permalink

Penso che un problema correlato a quello sollevato da Piotr (+1) è che i finanziamenti per la ricerca non sono generalmente disponibili per coprire i costi di produzione di codice portatile altamente affidabile o i costi di manutenzione / supporto del codice prodotto per la "ricerca qualità". Ho scoperto che questo è un problema significativo quando provo a utilizzare codice rilasciato da altri ricercatori nel mio campo; troppo spesso non riesco a far funzionare il loro codice perché utilizza una libreria di terze parti che non è più disponibile, o che funziona solo su un PC Windows, o che non funziona più sulla mia versione del software perché utilizza alcune deprecate caratteristica della lingua / ambiente. L'unico modo per aggirare questo problema è reimplementare le routine dalla libreria di terze parti in modo che tutto il codice venga fornito come un singolo programma monolitico. Ma chi ha il tempo di farlo in un ambiente "pubblica o muori" sottofinanziato?

Se la società vuole che un codice di alta qualità accompagni ogni documento, allora la società deve mettere a disposizione fondi in modo che i bravi ingegneri del software possano scrivere e mantenerlo. Sono d'accordo che sarebbe una buona cosa, ma non è a costo zero.

Quello che dici in realtà parla contro la pubblicazione di codice, poiché è probabile che diventi obsoleto o che debba affrontare problemi di portabilità. A mio parere, ciò che conta è la teoria alla base dell'implementazione e non credo che il finanziamento della ricerca debba essere destinato allo sviluppo di prodotti software robusti, indipendenti dalla piattaforma e aggiornati di frequente. Questo è il lavoro dell'industria del software.
Non sono completamente d'accordo con quello. Il motivo per cui pubblichiamo articoli è perché altri ricercatori raccolgano le nostre idee e le seguano. Un buon modo per assicurarsi che ciò accada è assicurarsi che gli strumenti necessari siano disponibili. Quindi c'è spesso una buona ragione per fornire strumenti che sono * adeguati * per quello scopo, ma che hanno ancora un costo che non è attualmente soddisfatto. Non abbiamo bisogno di produrre codice di qualità della produzione, ma abbiamo bisogno di finanziamenti per produrre codice di qualità adeguata (dal punto di vista della portabilità e della ragionevole longevità).
@DikranMarsupial: "in modo che altri ricercatori prendano le nostre idee e corrano con esse" - sembra molto facile, come se fosse sufficiente pubblicare il proprio codice e ciò consentirebbe direttamente ad altri ricercatori di costruire su di esso. Tuttavia, questo è collegato a * molti * se in realtà - funziona solo * se * gli altri ricercatori conoscono le tecnologie utilizzate per il codice, * se * qualsiasi altra cosa che vogliono combinare con quel codice è compatibile, * se * il codice funziona affatto sulla loro piattaforma, ecc.
@O.R.Mapper ti manca il punto, se fornisci il codice è più facile per gli altri costruire sul tuo lavoro. Quanto più facile dipende da una serie di fattori, ma se leggi la mia risposta scoprirai che avevo già sollevato quegli stessi punti! Inoltre non ho detto che fosse sufficiente pubblicare il codice - non lo è, il codice supporta la pubblicazione, niente di più. Più puoi fare per alleviare gli "se", meglio è, ma alla fine della giornata stai lavorando per un budget di tempo e impegno, quindi ci saranno sempre "se" rimasti, ma questo non significa non dovresti dare via il codice di ricerca.
Il codice NON deve soddisfare gli standard di qualità del codice. Finché il codice produce i risultati promessi dal giornale. Consenti agli ingegneri del software di ottimizzare o riscrivere il codice.
rumtscho
2014-06-12 01:32:50 UTC
view on stackexchange narkive permalink

Sembra che tu pensi che dovremmo richiedere il codice, perché senza codice, qualsiasi risultato folle, sia esso una frode o un errore onesto, può essere inserito nel giornale. Ma non è così. Includere il codice è una caratteristica piacevole da avere, non una caratteristica indispensabile. Le altre risposte lo presumono silenziosamente e spiegano le ragioni (buone e non così buone) che portano alla situazione attuale del codice insolitamente incluso. Penso di poterli completare spiegando perché non è una caratteristica indispensabile.

Per risultati teorici, non è necessario alcuno strumento empirico come il codice per riprodurli, come altri hanno menzionato (ad esempio, dimostrare che un algoritmo ha un comportamento O maggiore migliore di un altro). Naturalmente, ci sono anche risultati empirici, che non possono essere replicati in questo modo.

Ma i tuoi revisori avranno un'aspettativa di ciò in cui si tradurrà la tua idea. Se la migliore performance attuale per wugging zums è di 3 zums / se aggiungi una piccola modifica e segnali 300 zums / s, il tuo i revisori dovrebbero notare che la tua richiesta è insolita e fare qualcosa (possibilmente chiedere di inviare nuovamente il codice). Questo non è infallibile, ma con più revisori per articolo è efficace, perché l'entità dei risultati più empirici è prevedibile una volta che il revisore vede l'idea e capisce come funziona.

Per questa classe di articoli, sia gli errori onesti che quelli disonesti hanno buone possibilità di essere scoperti, con risultati negativi per gli scienziati onesti (perdita di reputazione, specialmente se scoperti dopo la pubblicazione) e risultati peggiori per gli scienziati disonesti (fine di carriera se provata!). Inoltre, più grave è l'errore (misurato nella dimensione dell'errore), maggiore è la possibilità di essere scoperti. È meno probabile che tu venga scoperto se il tuo algoritmo gestisce 4 zums / se segnali 5 zums / secondo, rispetto a quando segnali 300 zums / s. Quindi, gli scienziati sono disincentivati ​​a presentare documenti errati, lasciando quelli meno errati nel pool presentato, ei revisori prendono molto del resto.

Ci sono casi in cui è totalmente sconosciuto il motivo per cui un'osservazione è così com'è, e in questi casi è molto importante descrivere perfettamente la configurazione esatta del test. Ma non ho mai visto questo tipo di articolo in informatica, è associato alle scienze naturali. Quindi nessun codice lì. Anche se hai ottenuto tali risultati in informatica (ad esempio hai osservato che gli utenti sono in grado di leggere un EULA di 12000 parole in meno di 30 secondi, il che contraddice le comuni osservazioni sulla velocità di lettura e non hai spiegazioni per questo), è improbabile che includa il codice utilizzato per ottenere il risultato sarà pertinente alla replica.

Per metterlo insieme, tra una grande massa di articoli di informatica, quelli teorici e quelli di osservazione dei fenomeni naturali non hanno bisogno dell'inclusione del codice per la replica, e quelli rimanenti conterranno solo un basso percentuale di documenti errati ma non presi. Complessivamente, ciò porta a un livello accettabilmente basso di documenti non corretti inviati. Richiedere il codice per accompagnarli aumenterà la qualità di una classe di carta, ma sarà un aumento di un livello di qualità già elevato. Non è che non avere questa caratteristica renda la qualità attuale troppo bassa.

Ottimo punto sulla differenza tra caratteristiche belle e indispensabili. Ricordo qualche articolo (forse un editoriale ?; Purtroppo in questo momento non riesco a trovarlo) che discuteva una problematica simile per gli standard di rendicontazione delle analisi statistiche. La conclusione era che fondamentalmente è nota una lista di controllo per le buone pratiche, ed è stato suggerito che tutti coloro che la conoscono e obbediscono includano una singola frase che lo dichiari (o una descrizione più minuta). L'idea è che questa strategia piacevole da avere promuoverà la qualità senza la necessità del consenso sulle politiche indispensabili.
+1 per trasmettere essenzialmente questo in termini di rilevamento del segnale. Bello!
Roy T.
2014-06-13 02:56:17 UTC
view on stackexchange narkive permalink

Perché ad alcuni ricercatori non piace pensare al mondo reale e i revisori non vogliono il fastidio.

(Il prossimo è un po 'uno sproloquio)

Ho ha recentemente svolto un sondaggio su un tipo specifico di algoritmi relativi alla geometria. In tutti i documenti il ​​programma veniva descritto come funzionante perfettamente, ma una volta che ho richiesto il codice sorgente a una dozzina di autori le cose sono diventate brutte.

Il 50% del software mancava di importanti caratteristiche pubblicizzate. Ad esempio, il software funzionerebbe solo in 2D mentre il documento mostrava esempi 3D. (Che nel mio caso rende davvero le cose molto più difficili). Dopo aver chiesto il motivo per cui queste funzionalità mancavano, di solito non erano mai state implementate o erano state implementate ma si sono rivelate instabili / non funzionanti. Per essere chiari: era impossibile al 100% generare i risultati mostrati nel documento con un software che spesso veniva persino migliorato dopo il rilascio del documento.

Il 75% del software non funzionava perfettamente in casi normali . Nel mio caso questo di solito è dovuto al fatto che l'algoritmo è stato progettato pensando ai "numeri perfetti", ma l'algoritmo è stato implementato utilizzando normali numeri in virgola mobile e quindi ha avuto problemi di rappresentazione che hanno portato a grandi errori. Solo pochi articoli hanno menzionato questi problemi e solo due hanno cercato di risolverli (parzialmente).

L'85% del software non funzionerebbe in scenari progettati specificamente per trovare casi di problemi. Diciamo la verità; se un "semplice" studente riesce a trovare in poche settimane uno scenario che rompe totalmente il tuo algoritmo, probabilmente lo sai già.

Non fornire codice rende possibile mentire e con mio disgusto (sono nuovo al mondo accademico) questo viene fatto molto spesso. Il mio supervisore non era nemmeno sorpreso. Tuttavia, testare il codice è molto faticoso, quindi questo comportamento probabilmente rimarrà deselezionato per un po 'più a lungo.

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

In qualità di editore associato di una rivista (che collega statistiche e psicologia), ho chiesto agli autori di inviare il codice quando hanno proposto nuovi algoritmi e procedure, quindi ho inviato il codice agli esperti nel pacchetto statistico per verificare che (un ) il codice fa ciò che descrive l'articolo e (b, secondario) che è un buon codice (robusto per input non validi, efficace dal punto di vista computazionale, ecc.). Mi è stato anche chiesto di rivedere alcuni documenti per Stata Journal il cui focus è il codice, e ho fatto lo stesso. Ci sono stati momenti in cui (a) ha fallito, quindi ho dovuto restituire l'articolo e dire che gli autori dovevano allineare la metodologia e il codice. Ci sono stati momenti in cui (b) falliva, e nel caso di Stata Journal, ciò significherebbe anche restituire il documento. Ci sono stati momenti in cui il codice non arrivava.

La maggior parte delle volte sarei felice di condividere il mio codice, ma è abbastanza complicato (con controlli interni basati sui metadati, output personalizzato, ecc.) che un ricercatore meno esperto con i pacchetti Io uso non sarò in grado di modificarlo per farlo funzionare sul loro computer.

Tornando alla tua domanda principale: i revisori sono pigri a corto di tempo e hanno il loro proprie ricerche da spingere alle loro riviste, così pochi di loro si impegnano per verificare completamente i risultati. È così che va il mondo. Forse questi professori ordinari potrebbero richiedere il codice e darlo ai loro studenti laureati con cui giocare, interrompere e fare il debug, poiché questa sarebbe una buona opportunità educativa per questi ultimi. Ma ancora una volta questo non accade molto spesso, poiché le clausole di riservatezza per accettare il ruolo di revisore di solito precludono la condivisione del documento con qualcun altro.

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

Vorrei aggiungere un punto di vista leggermente diverso da un campo sperimentale (chimica / spettroscopia / analisi chemiometrica dei dati).
Qui lo studio inizia in laboratorio (o forse sul campo), con un tipo di taccuino antiquato. Tipicamente vecchio stile ancora carta + penna. L'analisi dei dati viene spesso eseguita con programmi GUI in modo interattivo. Le registrazioni vengono conservate proprio come in laboratorio: carta + penna. Forse con alcune figure salvate e / o stampate. Poiché già la parte in laboratorio è stata registrata in questo modo, non avere un file di registro o anche uno script di analisi dei dati non è visto come un problema. Ad ogni modo, chiedere la pubblicazione del codice è solo una parte di ciò di cui hai bisogno per rieseguire l'analisi: avresti anche bisogno dei dati effettivi.
Già il suggerimento di digitare l'analisi dei dati e almeno di salvare uno un registro della sessione matlab / R o digitarlo in forma di script è ancora un po 'nuovo (anche se le persone adorano i report generati da knitr che produco ...). Ma IMHO le cose si stanno muovendo abbastanza velocemente ora. Direi che con strumenti come git e knitr i maggiori ostacoli pratici sono quasi risolti almeno per il tipo di persona che preferisce il codice al clic. Tuttavia, non è che tutto funzioni già senza intoppi (considera dati binari grezzi di grandi dimensioni e git , e ammetto francamente che non ho idea di come impostare praticamente un server di database "reale" in modo efficiente che tiene traccia delle modifiche). Questo è dal mio punto di vista di scienziato che ha solo bisogno di strumenti per la riproducibilità come utente - e quindi capisco i miei colleghi non programmatori che tuttavia devono analizzare i loro dati: semplicemente non hanno di) gli strumenti che consentirebbero loro di registrare le proprie analisi con uno sforzo ragionevole.

La stima tradizionale di dove si nascondono le grandi difficoltà si concentra anche sulla parte di laboratorio. Penso che molti ricercatori semplicemente non siano consapevoli dei problemi di riproducibilità con i calcoli / analisi dei dati. Ad essere onesti, di solito condivido questo punto di vista: IMHO in biospettroscopia uno dei grandi problemi importanti è il numero troppo basso di individui negli studi. Se hai solo 4 topi nello studio, la gestione precisa dei dati non può influenzare troppo le conclusioni pratiche. C'è una zona grigia in cui non eseguire una corretta convalida può influenzare le conclusioni, ma ancora: tutti quelli che conosco che eseguono la convalida secondo la pratica più nota lo spiegano in modo molto esplicito - quindi di nuovo (e accettando qualche rischio di falsamente scartando pochi documenti come "probabilmente non riproducibili") tendo a pensare che le conclusioni pratiche siano difficilmente influenzate.


D'altra parte, guardando i requisiti che ad es. le comunicazioni chimiche messe in campo se una nuova sostanza chimica deve essere pubblicata, non vedo perché non possano esserci riviste di informatica che richiedono il codice in modo simile.
Come ad es. il Journal of Statistical Software lo fa. (Sono abbastanza sicuro che esistano altre riviste simili, ma non le conosco.)

Per me questo rientra in un campo molto più ampio di questioni di riproducibilità. Naturalmente, se l'analisi dei dati non può essere riprodotta, ci sono grossi problemi.


Ancora un altro punto: sebbene le pubblicazioni sul software siano ancora molto rare nel mio campo, di recente ho avuto un documento del genere per la revisione. Sfortunatamente, si propone di distribuire il software contattando uno degli autori - cosa che, in quanto revisore anonimo, ovviamente non ho potuto fare.
Pertanto, il software vero e proprio potrebbe essere ancora meno accessibile per i revisori che per i lettori normali!

Per il tuo ultimo paragrafo: puoi sicuramente chiedere all'editore di chiedere il codice agli autori?
@NateEldredge: sicuro. Ho semplicemente messo come esempio il fatto che allegare il codice è ancora molto lontano dall'arrivare alle impostazioni predefinite-cose-da-fare quando si invia un manoscritto se viene dimenticato anche per un manoscritto che si occupa esplicitamente di rilasciare quel codice.
Phil Perry
2014-06-12 01:37:19 UTC
view on stackexchange narkive permalink

Penso che la maggior parte dei lettori / revisori troverebbe un algoritmo sufficientemente dettagliato abbastanza. Scrivi il tuo articolo mostrando, oh, codice C ++, e io uso SPSS nel mio negozio - il tuo codice è inutile per me. Non che la maggior parte dei lettori si divertirà a reimplementare il codice (specialmente per i documenti non CS), ma con un codice specifico che gira su una piattaforma specifica, ci sarà sicuramente un sacco di disordine da attraversare. Un algoritmo lo riduce all'essenziale.

Se il mio articolo mostra il miglioramento della velocità del mio nuovo metodo Quicksort rispetto allo standard Bubble Sort, mostrare algoritmi per i due metodi renderebbe più facile supportare le mie affermazioni per O (n log n) rispetto a O (n ^ 2) accelerazione. Se il mio articolo riguarda la distribuzione dell'età della popolazione nelle economie ricche rispetto a quelle in via di sviluppo, a meno che non ci sia un trucco davvero accurato che ho usato per elaborare i dati, la maggior parte dei lettori probabilmente non si preoccuperebbe nemmeno dell'algoritmo, tranne che in pennellate molto ampie.

Dipenderà dall'area tematica (generale, diciamo, Informatica) e dalla sottoarea specifica (diciamo, metodi di ordinamento), nonché dall'impatto che l'algoritmo utilizzato ha sui risultati, dal fatto che l'algoritmo sia necessario. Se mostro le differenze del compilatore nel codice Fortran, sarebbe bene includere il codice effettivo. Altrimenti, il codice stesso è raramente interessante.

"Penso che la maggior parte dei lettori / revisori troverebbe un algoritmo sufficientemente dettagliato abbastanza". Per un algoritmo di sufficiente complessità, una descrizione non è sufficiente. "il tuo codice mi è inutile". A condizione che funzioni codice (e forse anche se non lo è) il codice per definizione è un'implementazione di un algoritmo, e quindi utile.
Kaveh
2014-06-13 10:21:34 UTC
view on stackexchange narkive permalink

Questa è una visione di Computer Science / Theoretical Computer Science / Mathematics.

Chiediti: qual è il pubblico di destinazione di un articolo accademico?

non gli utenti finali. Sono i revisori ! I revisori vogliono il codice? Dipende dalla situazione. A volte lo fanno. Spesso non lo fanno.

Pensa a questo: perché i matematici non forniscono dimostrazioni formali ma usano argomenti informali?

È costi contro benefici. Fornire una prova formalmente verificata è possibile, ma di solito richiede troppo lavoro, lavoro per il quale gli autori non sono formati e con cui non hanno molta esperienza. D'altra parte, cosa ci guadagnano gli autori? Aiuta a convincere i revisori della correttezza dei risultati? No, di solito i revisori preferiscono una breve spiegazione informale che consenta loro di capire e vedere perché il risultato è vero. Una prova formale di solito non aiuta molto. Ci sono persone a cui non piacciono le prove assistite dal computer che non possono essere verificate e comprese direttamente dagli esseri umani.

Lo stesso pensiero sui costi e sui benefici si applica ai programmi. Se fornire il codice non aiuta a convincere il revisore della correttezza dell'articolo, perché sprecare risorse (tempo / denaro / pagine / ...) per farlo? I revisori hanno il tempo di leggere codici con migliaia di righe per verificare che non ci siano bug in essi?

D'altra parte, a volte il software risultante dalla carta è di interesse primario. Avere il codice è utile per verificare i reclami. Per esempio. affermi di avere un algoritmo più veloce per SAT. Quindi è utile fornire il codice. In questi casi gli autori forniscono il loro codice. Questo è principalmente in parti più sperimentali. Non ci interessa la correttezza del codice ma ottenere risultati migliori rispetto agli algoritmi esistenti. In tali situazioni ci sono tipicamente benchmark standard per confrontare gli algoritmi. (Vedi ad esempio competizioni SAT.) Se non ci sono benchmark stabiliti, perché pubblicare codice? Se è un risultato teorico in cui i benefici asintotici si verificano su istanze troppo grandi per essere testate, qual è il vantaggio di avere il codice? Tanto più considerando il fatto che il codice di grandi dimensioni sviluppato da programmatori non professionisti è altamente probabile che sia difettoso? Impiegare sviluppatori di software professionisti per sviluppare codice di qualità è costoso ( il reddito annuale medio per una persona con uno scapolo in CS è di circa 100.000 negli Stati Uniti) (tranne forse come studenti laureati;) e in genere non lo fa avere dei profitti in seguito.

Ma il codice deve essere incluso nei documenti? Ovviamente no! Esistono modi migliori per pubblicare codice, ad es. avere un collegamento nel giornale a una copia online (sul loro sito web o un repository pubblico come github). Perché si preferisce includere un codice con migliaia di righe all'interno di un documento che dovrebbe essere letto da esseri umani ?

Forse il pubblico di destinazione di un ** contributo ** accademico è il revisore, ma il pubblico di destinazione di un ** documento ** è sicuramente la comunità in generale.
Ovviamente i documenti @Suresh, sono scritti per i lettori per la comunità accademica in generale. Tuttavia penso che gli autori prestino maggiore attenzione a ciò che i revisori si aspettano. Ovviamente i revisori hanno lo scopo di rappresentare la comunità, ma nel loro ruolo di revisori spesso hanno priorità che possono essere leggermente diverse dalla comunità in generale.
Per esempio. potrebbero volere più dettagli di altri lettori per assicurarsi che i risultati siano corretti, potrebbero aver bisogno di meno dettagli perché sono esperti nell'argomento, o talvolta possono obiettare a un articolo perché pensano che la presentazione contraddica la loro visione dell'argomento, ecc. Mi sembra che in genere consideriamo la comunità in generale molto meno dei potenziali revisori come nostro pubblico quando scriviamo articoli in pratica. Ad ogni modo, non penso che il problema abbia un grande effetto su ciò che sto cercando di dire nella risposta:
il codice viene pubblicato quando il pubblico di destinazione lo desidera dagli autori e gli utenti finali che desiderano un codice pronto per l'uso non sono il pubblico di destinazione dei documenti accademici.
questo ultimo punto sono d'accordo.
Ovviamente il codice non dovrebbe essere sulla carta, ma piuttosto un collegamento a un repo. Lol non può nemmeno immaginare di guardare un codice software di oltre 1000 righe in un singolo file pdf.
Floris
2014-06-12 17:46:44 UTC
view on stackexchange narkive permalink

Di solito le "prestazioni" del codice si riferiscono a "quanto bene si adatta alla dimensione del problema". Ciò significa, a mio parere, che un documento che afferma che "l'algoritmo A è più veloce dell'algoritmo B" deve mostrare i tempi sia per A che per B _ per problemi di dimensioni diverse_. Sebbene possano ancora esserci inefficienze (ed errori) nelle implementazioni, questo dimostrerà almeno se l'algoritmo sottostante è più efficiente (basso big-oh).

Dove il software è la chiave del documento (il prodotto, non lo strumento) mi aspetto che sia disponibile (github o altro). Quindi un documento che dice "Posso ordinare in ordine 1 / n kerfugling il numero dargibold" deve mostrare come è stato fatto; il documento che afferma "quando ho ordinato questi due set di dati, quello di Whoville aveva flubbit più grandi" non ha bisogno di mostrare come è stato ordinato il codice - devono concentrarsi sullo spiegare cosa c'è di significativo nei flubbit di Whoville.

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

Tratto dal libro SKIENA, S. The Algorithm Design Manual: Springer. 2008:

Dopo una lunga ricerca, Chazelle [Cha91] ha scoperto un algoritmo tempo lineare per triangolare un semplice poligono. Questo algoritmo è sufficientemente disperato da implementare da qualificarsi più come una prova di esistenza.

[Cha91] CHAZELLE, Bernard. Triangolazione di un semplice poligono in tempo lineare. Discrete & Computational Geometry , 1991, 6.3: 485-524.

Penso che gli autori considerino costi e benefici ed evitino la presentazione di codice quando i costi superano i vantaggi.

Secondo David W. Hogg i costi sono:

  1. potresti essere preso
  2. puoi essere imbarazzato dal tuo brutto codice, o dalla tua incapacità di commentare o documentare
  3. dovrai rispondere a domande (e spesso stupide o irrilevanti) sul codice e passare il tempo a documentare
  4. dovrai prendere in considerazione le richieste pull o comunque mantenere il codice, possibilmente lontano nel futuro
  5. potresti dover abbattere risultati negativi e errati generati con il tuo codice
  6. la tua reputazione potrebbe risentirne se il codice viene utilizzato in modo errato
  7. potrebbero esserci problemi legali (inclusi quelli militari) e di licenza

I vantaggi sono:

  1. più scienza viene fatto, vengono scritti più documenti; tutte le misure di aumento dell'impatto
  2. ottieni la motivazione per pulire e documentare il codice
  3. i risultati diventano (più) riproducibili e (più) affidabili
  4. gli estranei trovano bug o apporta miglioramenti al codice e invia richieste pull
  5. ottieni credibilità e visibilità e costruisci una community
  6. i tassi di citazione potrebbero aumentare
  7. il codice viene preservato
  8. il codice diventa ricercabile (anche da te!) e sottoposto a backup
  9. ci sono buoni siti per l'archiviazione a lungo termine e l'interfaccia
  10. può stabilire la priorità su un'idea o arte anteriore su un metodo
Sefu
2017-02-15 03:03:42 UTC
view on stackexchange narkive permalink

Perché in verità la maggior parte dei ricercatori accademici in campi tecnici non può programmare per salvare le proprie vite. Nella visione artificiale, hanno semplicemente hackerato qualcosa insieme in un singolo file Matlab. A loro piace pensare che la programmazione sia per gli studenti universitari. Credono che sia inutile sprecare il loro tempo in queste banalità. La maggior parte di loro non ha mai imparato buone pratiche di ingegneria del software e non ha una comprensione della complessità e delle abilità necessarie per scrivere un buon codice.

Il problema principale è che questo è supportato dai ricercatori perché tutto il mondo accademico si preoccupa è l'editoria, la quantità sulla qualità. Il successo è misurato da quante citazioni hai, non da quanto sono buoni i tuoi contributi. Alla fine della giornata, quando le uniche persone che ti citano non producono nulla di utile, non importa. Non è più scienza quanto è "ricerca per il bene di fare ricerca".



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...