Domanda:
Durante il peer-review, devo commentare il codice disordinato degli autori?
reviewer
2018-08-29 03:30:24 UTC
view on stackexchange narkive permalink

Sto rivedendo un articolo di matematica pura. Molti risultati nel documento dipendono fortemente dai calcoli del computer e gli autori hanno fornito nell'articolo un collegamento al codice Magma che hanno usato per la maggior parte di questi calcoli. Tuttavia, questo codice è quasi impossibile da capire a causa del modo disordinato in cui è scritto. Ad esempio, non utilizza alcun rientro e a tutte le variabili vengono assegnati nomi come "aaa" o "X" che non forniscono alcuna informazione sul loro scopo nel programma.

Da un lato, la matematica alla base di questi calcoli è spiegata sufficientemente bene che è possibile riprodurre i risultati senza utilizzare il codice degli autori (questo è quello che ho finito per fare). Inoltre, il documento contiene solo un collegamento al codice e non il codice vero e proprio, quindi non sono sicuro che il codice sia davvero nell'ambito della revisione. Inoltre, il codice difficile da leggere sembra non essere raro nel mondo accademico e alla maggior parte delle persone non sembra importare. D'altra parte, penso che una piccola quantità di lavoro degli autori (che presumibilmente capiscono il codice) renderebbe questo codice molto più utilizzabile per gli altri, semplicemente sostituendo alcuni dei nomi delle variabili con nomi che effettivamente trasmettono un significato.

La mia domanda è: è ragionevole per me dire agli autori che il loro codice è inutilmente difficile da capire e dovrebbe essere migliorato?

Non vedo perché il contenuto in codice lo renda diverso da una dimostrazione: se referenziassi un articolo con una prova che nominava variabili in modo inappropriato o non spiegava cosa stava succedendo, chiederei agli autori di migliorarlo.
Se hai finito per scrivere la tua versione del codice, forse prendi in considerazione di inviarla all'autore se sei disposto ad aiutarlo?IDK se "collaborare" con gli autori a quel livello andrebbe oltre i limiti di ciò che dovrebbe fare un revisore, ma da un punto di vista pratico mi sembra ragionevole.(Sono un fanatico del software libero e non un accademico).
Una cosa da tenere a mente riguardo al codice è che lo stile è molto soggettivo.- Personalmente non mi piace il rientro nei miei file LaTeX e nei miei script bash.- Posso aggiungerlo facilmente ai miei codici C ++ con Ctrl + I in Eclipse e usarlo.Fa qualcosa di utile?A volte sì, altre volte no.- Ma nomi significativi di variabili e funzioni sono estremamente utili.Se hai visto il vecchio codice Fortran, vedrai un'enorme quantità di commenti descrittivi e poi "codice miracoloso" che non è documentato / ben spiegato ... - Ma funziona.(E si possono rintracciare singole variabili.)
Domanda pertinente su questo sito: [Dovrei condividere il mio orribile software?] (Https://academia.stackexchange.com/q/37370/529)
Quando dici di aver riprodotto i loro risultati, intendi dire che hai reimplementato il loro calcolo?
Potrebbe essere che il software venga generato automaticamente da un altro strumento?
@DetlevCM Style è soggettivo, sì, ma se il tuo codice non ha rientri, scusa, ma il tuo codice oggettivamente fa schifo.Lo scopo dell'indentazione è di rendere più facile vedere l'ambito di varie parti del codice (ad esempio blocchi, cicli for, ecc.).Non averlo rende molto più difficile leggere e decifrare.
Pensi che non avresti potuto rivedere il documento senza il codice o è parte integrante?Non voglio dire se tu con una buona comprensione e capacità di reimplementazione non ne hai bisogno, ma se ti aspetti che il lettore medio sia in grado di utilizzare il foglio senza il codice.
@JimClay Divertente, trovo spesso il rientro per rendere la leggibilità PEGGIORE non migliore nel codice.Per quanto riguarda l'ambito: questo è ciò a cui servono le parentesi graffe.
"alla maggior parte delle persone non sembra dispiacere" - citazione necessaria
In che modo il codice in un documento di matematica ** puro ** diventa particolarmente rilevante?
la rivista ha standard in stile codice che potrebbero essere citati?Altrimenti, non è solo opinione stilistica contro un'altra?Difficilmente motivi per rifiutare il documento
È difficile giudicare quanto sia rilevante la qualità del codice per la tua recensione, ma la mia esperienza è che la scarsa leggibilità del codice di programmazione è solitamente un sintomo di problemi più profondi.È come una grammatica e un'ortografia scadenti in inglese: o indica che gli autori non sono molto competenti nella lingua (che nel caso di un linguaggio di programmazione è un segnale di pericolo), o indica un pensiero confuso, o una mancanza di attenzione ai dettagli.
@GitGud Questo genere di cose va avanti da decenni.Vedi, ad esempio, la dimostrazione del [teorema dei quattro colori] (https://en.wikipedia.org/wiki/Four_color_theorem).
@JohnColeman Dovrei essere convinto che quel teorema è un teorema di matematica "pura".Ad essere onesto, non ho mai nemmeno considerato la teoria dei grafi come pura matematica.Comunque, la questione non sarebbe mai stata risolta in pochi commenti.Posso accettare che le persone abbiano altre opinioni su ciò che costituisce la matematica pura.
Dieci risposte:
aeismail
2018-08-29 03:43:43 UTC
view on stackexchange narkive permalink

Se gli autori hanno fornito un collegamento al loro codice come riferimento, è opportuno offrire commenti, in particolare se l'articolo è basato sul codice.

Tuttavia, consiglierei di fare la critica costruttivo: offri suggerimenti concreti su come migliorarlo piuttosto che dire semplicemente che è "disordinato" o "sciatto" e deve essere "ripulito".

Questo non finisce per essere in pratica solo un PR con il codice migliorato?Questo sembra che scaricherà il lavoro di scrivere un buon codice ai revisori che capiscono cosa significa.Quindi le persone continueranno a produrre codice errato e sperano che i revisori lo risolvano per loro.Sembra un sistema di incentivi sbagliato.
@Hakaishin Il rifiuto della carta è ancora un'opzione.
@Hakaishin Non capisco questo ragionamento.aeismail non ha proposto di ripulire il codice per gli autori e inviare una richiesta di pull, ha solo suggerito di fornire un feedback utilizzabile piuttosto che semplicemente dire che il codice è disordinato e deve essere migliorato.Se seguiamo il ragionamento che non possiamo fornire alcun feedback utile, potremmo sbarazzarci della revisione tra pari e prendere semplicemente decisioni sì / no sui documenti.
@Hakaishin No. Un feedback costruttivo non significa "aggiustare il codice per te".Il feedback potrebbe essere semplice come "allineare meglio i blocchi di codice".Il punto è che dovrebbe essere perseguibile.Un vago "aggiustalo!"Non aiuta nessuno.Ma sì, se il codice è uno dei punti principali del documento, è giusto che un revisore ne faccia un commento.
@aeismail Addendum al tuo commento: La critica costruttiva, proprio come hai detto, non sta fissando il codice per la persona;sta solo evidenziando problemi specifici e, facoltativamente, spiegando perché sono problemi, piuttosto che dire semplicemente "questo non va bene, risolvilo".Quest'ultimo non è costruttivo perché non c'è modo di sapere cosa è brutto e potresti anche fare di nuovo gli stessi "errori" perché non sapevi di non farlo.
Ben
2018-08-29 06:06:19 UTC
view on stackexchange narkive permalink

Il codice rientra nell'ambito della revisione ed è opportuno esaminarlo e offrire suggerimenti costruttivi in ​​relazione alle sue carenze. Ora, tieni presente che l'onere è dell'autore di soddisfare i revisori del loro argomento, e se l'argomento dipende da un codice del computer che è così disordinato da essere illeggibile, non è tuo compito risolverlo per loro. In questo caso, un consiglio costruttivo potrebbe limitarsi a spiegare perché attualmente è troppo difficile da leggere (cioè mancanza di rientranza, nomi di variabili poco chiari, ecc.), E questo potrebbe ragionevolmente portare a una raccomandazione per rivedere e ripresentare. Cerca di essere chiaro e completo nel descrivere il motivo per cui il codice è attualmente difficile da leggere, quindi ci si può aspettare che i successivi invii siano all'altezza.

La cosa migliore da fare in questi casi è trattare il codice del computer proprio come la prosa nel giornale. Proprio come con la prosa, il codice del computer deve essere chiaro e intelligibile, rispetto agli standard di codifica. Se è disordinato e incomprensibile, deve essere rivisto finché non è chiaro. I revisori non esitano a rifiutare i documenti quando la prosa è incomprensibile, quindi è perfettamente ragionevole richiedere che il codice del computer sia reso intelligibile.

Il fatto che il codice sia un pasticcio probabilmente non è una ragione valida per una revisione importante se il manoscritto stesso merita una raccomandazione più positiva.
Se è troppo disordinato per essere comprensibile, e se l'argomento nel documento dipende da questo, allora direi che non potresti accettare senza modifiche.Cosa sarebbe più positivo che rivedere e ripresentare in quel caso?
In questo caso, l'OP ha verificato i risultati senza il codice.Questa è una zona grigia.Personalmente menzionerei i problemi, ma se tutto il resto fosse risolto lascerei la decisione all'editore.
einpoklum
2018-08-29 15:28:34 UTC
view on stackexchange narkive permalink

Sì, dovresti commentare e possibilmente altro.

L'hai detto tu stesso:

Molti risultati nel documento dipendono fortemente dai calcoli del computer.

Bene, il codice del programma per i calcoli fa quindi parte del lavoro che stai rivedendo. Se il testo dell'articolo fosse difficile da leggere, non lo considereresti un punto debole? Logicamente, quindi, lo stesso vale per il codice (anche se è in misura leggermente minore).

Inoltre, se il codice è illeggibile per te, forse ci sono errori in esso, nonostante la matematica sana sotto. E infine, se puoi dire quali dovrebbero essere i risultati senza il codice, perché anche avere il codice?

Quindi, se ritieni che il disordine non precluda "l'analisi" del foglio, commentalo (e forse, se pertinente, ridimensionalo da Strong Accept a Weak Accept, anche se forse è troppo duro, dipende dalle specifiche.)

Se hai bisogno di leggere il codice per ottenere i risultati, e semplicemente non è possibile, allora questo è un problema più serio. Ma prima di dire qualcosa come "Richiede revisione", consulta l'editore della rivista / il presidente del comitato del programma / ecc.

Nota: sono un informatico, quindi la mia risposta potrebbe essere in qualche modo parziale. D'altra parte, ho scritto un documento di pura teoria senza codice.

kingledion
2018-08-29 17:47:27 UTC
view on stackexchange narkive permalink

Il codice disordinato influisce sulla riproducibilità

Hai provato a riprodurre i loro risultati con il codice collegato e non sei riuscito a farlo. Sebbene tu implichi che alla fine sei stato in grado di sviluppare il tuo codice e replicare i risultati, io sostengo che il codice scritto male influisce sulla riproducibilità. Nella programmazione per computer, questo può essere ancora più importante, poiché i linguaggi di programmazione non hanno necessariamente una vita molto lunga. Chissà se il magma o qualsiasi altra lingua sarà di dominio pubblico tra 50 anni.

A lungo termine, la riproducibilità è la parte più importante dello sforzo scientifico. La prova che facendo a si ottiene b , un fatto che può essere riconfermato da chiunque abbia voglia di provare, è un mattone assiomatico su cui possono stare ulteriori risultati scientifici.

Se la riproducibilità è importante, non c'è niente di sbagliato nel dire loro di ripulire il loro codice. Francamente, se il loro codice è così pessimo come descrivi, sembra che gli autori avranno difficoltà a comprendere il proprio lavoro tornando ad esso in pochi anni. In tal caso, costringendoli a imparare un po 'su come scrivere un buon codice, faresti loro un favore.

E.P.
2018-08-29 17:45:54 UTC
view on stackexchange narkive permalink

Vorrei soffermarmi brevemente su un aspetto che non è apparso nelle risposte esistenti.

La mia domanda è: è ragionevole per me dire agli autori che il loro codice è inutilmente difficile da capito e dovrebbe essere migliorato?

, dovresti commentare il codice, ma non solo quello: convincere gli autori che è in se stessi -interesse per risolvere questi problemi.

Il codice leggibile è un codice facile da riutilizzare. Il codice riutilizzabile è un codice che semplifica l'esplorazione della matematica presentata nel documento. È più probabile che la matematica esplorabile abbia lettori che trovano estensioni interessanti. Vengono pubblicate estensioni interessanti e quelle pubblicazioni citano il codice originale e, inoltre, forniscono alcune delle citazioni più preziose in circolazione.

Rendere il tuo codice leggibile e riutilizzabile non garantisce che ciò accada, ma se tu pubblica codice illeggibile stai creando una barriera artificiale di fronte a un lettore che potrebbe o non potrebbe continuare a fare ulteriori ricerche sulla base del tuo lavoro, e se ci sono abbastanza barriere di questo tipo, quel lettore si rivolgerà semplicemente altrove. Rendere il codice leggibile è un modesto investimento di tempo che si traduce in un grande miglioramento nell'estensibilità del lavoro.

Questo aumento di barriere, ovviamente, non è esclusivo del codice: non chiaro figure, struttura aggrovigliata, grammatica disordinata, lemmi mancanti e ogni sorta di altri problemi possono creare barriere simili, e il tuo lavoro come revisore include indicarle e aiutare gli autori a sbarazzarsene. Il codice non è diverso: aiutali a migliorarlo!

ivanivan
2018-08-30 08:17:49 UTC
view on stackexchange narkive permalink

Non sono un accademico o un revisore di articoli / documenti a questo livello (aggiunto alla scuola di tecnologia), ma do molti compiti a casa di programmazione e l'esempio di documenti tecnici dispari, e mi occupo dello sviluppo di software per pagare effettivamente i conti.

Se l'articolo dipende dall'output del codice generato, allora il codice deve essere leggibile e comprensibile - altrimenti, il codice potrebbe non fare ciò che l'autore pensa di fare ed è impossibile per gli altri confermare con o la propria reimplementazione. Se tale reimplementazione è relativamente banale, allora sembra che il codice effettivo non sia importante, quindi mi chiedo perché il codice rotto per qualcosa che è facile da implementare in base alle specifiche sarebbe incluso o referenziato in un documento accademico.

Dato che sei stato in grado di verificare utilizzando il tuo codice di implementazione dei suoi algoritmi, non credo che sia così, ma dovrebbe essere preso in considerazione. Qualsiasi IDE decente o anche un editor di testo avanzato dovrebbe essere in grado di formattare automaticamente il codice e di eseguire ricerche / sostituzioni a livello di progetto (refactoring). Un po 'indica la pura pigrizia ....

* "Qualsiasi IDE decente o anche un editor di testo avanzato dovrebbe essere in grado di formattare automaticamente il codice" * - Al contrario, significa che chiunque può formattare il codice a proprio piacimento.Quindi la mancanza di formattazione non è un problema.Certo è pigro, ma è solo un inconveniente per il lettore.
@NisargShah, un IDE non può dare alle tue variabili nomi significativi.
Pierre de Buyl
2018-08-29 16:12:24 UTC
view on stackexchange narkive permalink

Gli autori forniscono un collegamento nell'articolo , quindi il codice viene considerato un riferimento o parte della ricerca. Qualunque sia la situazione, questo solleva domande:

  1. Il codice è archiviato? I modi pratici per archiviare il codice includono Zenodo o figshare. Il codice su una home page vale quanto nessun codice.
  2. Esiste una licenza per il codice? In caso contrario, il suo stato non è affatto evidente.

In qualità di revisore, spetta a te decidere cosa fare. Le possibili azioni includono:

  1. Non commentare il codice.
  2. Commentare il codice con quello che chiamerei il minimo: richiedere che il codice sia archiviato e concesso in licenza correttamente .
  3. A seconda dell'importanza del programma per computer nella ricerca, richiedono una quantità minima di leggibilità e che l'autore fornisca alcuni test sul programma (cioè che il programma fornisce risposte analitiche note se alcuni set di parametri lo consentono it, ecc.).

Per quanto riguarda l'archiviazione, puoi fare riferimento alle informazioni editoriali del Journal of Open Research Software.

Il "Journal of Open Research" non sembra proprio degno di fiducia dato che il collegamento sia a Codeplex che al codice Google che hanno cessato di funzionare da tempo.Infine, bisogna pagare per la pubblicazione, il che solleva ancora una volta domande sull'affidabilità, soprattutto date le informazioni obsolete e l'apparente dipendenza dagli autori per ospitare il codice altrove ... (Elsevier ha anche un software "paga per pubblicare"diario - ma offriranno / offriranno di ospitare una copia del codice con il foglio.)
La loro tariffa di pubblicazione è piuttosto bassa rispetto a Elsevier e provengono da una società scientifica (il [Software Sustainability Institute] (https://software.ac.uk/), quindi non sono d'accordo con la tua valutazione (disclaimer:Ho pubblicato con loro) Hai ragione riguardo alla lista dei repository, ne parlerò a loro.
325 sterline contro 500 euro non sono un'enorme differenza.Ora possono avere un sostenitore di buona reputazione, ma questo dovrebbe essere adeguatamente comunicato E dovrebbero possibilmente mantenere le loro risorse aggiornate.Google Code ha chiuso all'inizio del 2016 mentre Codeplex ha chiuso a dicembre 2017. (Facendo ancora un po 'di ricerca su Google, sembra che Ubiquity Press sia normalmente un "editore riconosciuto" di articoli ad accesso aperto - Ma la presentazione del giornale non ispira esattamente fiducia.)
Albert van der Horst
2018-08-31 18:31:41 UTC
view on stackexchange narkive permalink

Sono un ingegnere del software e voglio rispondere alla domanda da quella prospettiva. La maggior parte del codice non è leggibile di per sé. È necessario disporre di commenti per documentare le strutture di dati e le specifiche per le chiamate di subroutine. Gli accademici non sono ingegneri del software e non mi aspetto che facciano un lavoro professionale in questo senso. Tuttavia, è certamente per commentare la qualità del software. Senza guardare il codice vero e proprio, non sono sicuro che commenterei che è illeggibile, perché l'articolo (che è secondo testimonianze, sufficiente per riprodurre il codice) è da considerarsi parte della documentazione del programma. Se il programma usa nomi brevi, che sono gli stessi del giornale, non c'è problema. Il rientro mancante non è un'indicazione di bassa qualità, ma molti livelli di rientro lo sono. Ti suggerirei di esprimere la tua sensazione che trovi difficile leggere, ma che non sei nemmeno un esperto di codice, e magari chiedi a qualche ingegnere del software di esaminarlo. È un set di abilità diverso, sai. Questo dovrebbe sminuire il commento.

Per finire: ho fatto un buon lavoro nella pulizia del codice, che non capivo a livello di scopo. Sarai sorpreso di ciò che è capace di fare un esperto in un campo diverso.

In conclusione, il codice non è essenziale, la qualità del codice è secondaria e non dovrebbe influenzare la tua decisione in alcun modo.

akhmeteli
2018-08-31 11:17:09 UTC
view on stackexchange narkive permalink

A quanto mi risulta, gli autori non inviano il codice per la pubblicazione, quindi il codice non sembra essere soggetto alla tua revisione. Gli autori danno solo un collegamento al loro codice. Ciò solleva una domanda: se solo avessero fornito un riferimento al loro lavoro pubblicato altrove, avresti considerato di dire loro che quel lavoro dovrebbe essere migliorato? Si potrebbe obiettare che la validità dei loro risultati dipende dalla correttezza del loro codice, ma potrebbero scegliere di non fornire affatto l'accesso al codice, poiché "la matematica alla base di questi calcoli è spiegata sufficientemente bene che è possibile riprodurre i risultati senza utilizzando il codice degli autori ". Tu, in qualità di revisore, ti sei preso la briga di verificare i risultati del loro calcolo, andando così oltre e al di sopra del tuo dovere, ma ciò significa che i loro risultati sono effettivamente riproducibili.

Quindi penso che potresti menzionare che il loro codice è scadente (sebbene apparentemente corretto), ma ciò non dovrebbe influenzare la tua raccomandazione sulla pubblicazione / non pubblicazione del documento.

Se fornissero un * link * per lavorare altrove e seguendo quel link portassero a una pagina che era fondamentalmente illeggibile, non sarebbe una cattiva idea farglielo notare.
@RDFozz: Ciò non sembra contraddire la conclusione nell'ultimo paragrafo della mia risposta.
Nella mia lettura della domanda, non vedo nulla che indichi che l'OP consiglierebbe di non pubblicare l'articolo in base allo stato del codice (anche se forse mi manca qualcosa).Mi sono concentrato sulle prime due frasi della tua risposta e ho cercato di sottolineare la differenza tra un riferimento a un'opera pubblicata di qualche tipo (che potrebbe richiedere l'ottenimento di una copia fisica del lavoro per guardarla, e che èpresumibilmente in un formato che non consentirebbe una semplice revisione) e un collegamento a una pagina web (che generalmente è relativamente facile da modificare / migliorare).
@RDFozz: Potrebbe esserci qualche differenza pratica, ma il codice è ancora oltre lo scopo della revisione e gli autori potrebbero avere tutti i tipi di motivi per non toccare il codice.
dusa
2018-10-23 19:43:03 UTC
view on stackexchange narkive permalink

Non sono a conoscenza di alcuna rivista scientifica che basi le proprie decisioni sul codice. Che sia disordinato o meno non è una preoccupazione relativa al giornale. Che dovrebbe essere riproducibile dovrebbe essere un problema, ma non sono a conoscenza di alcuna rivista che lo renda un criterio, ad eccezione di alcune iniziative per alcune comunità, ad es. NIPS, CVPR. A mio parere, è già un bonus che abbiano scelto di rilasciarlo (e in alcuni casi le persone non sono nemmeno autorizzate a rilasciarli a causa delle regole della loro organizzazione). Se hai qualche affermazione che il codice non è corretto o non fa quello che si dice, potrebbe essere una storia diversa ma devi giustificarlo. Se vuoi solo fare un commento sulla sciatteria del codice, penso che dovresti chiarire il tuo commento e sottolineare che non influisce sulla revisione generale, sono d'accordo con un commento fatto in precedenza "convincere gli autori che è nel loro interesse personale per risolvere questi problemi ". Fai solo sapere che il tuo commento sul codice non è correlato alla revisione dell'articolo. Inoltre, non scoraggiare le persone che rilasciano il proprio codice anche se "disordinato".



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