Il codice scientifico è un regno abbastanza diverso da ignorare gli standard di codifica comuni?
No non lo è.
Il codice di ricerca è spesso "buttato via" e scritto da persone che non sono sviluppatori in background, per quanto forti siano le loro credenziali accademiche. Alcuni dei codici di ricerca che ho scritto mi farebbero piangere . Ma ha funzionato!
Una cosa da considerare è il gatekeeper per i progetti che guidano ciò che viene incluso. Se un grande progetto è iniziato come un progetto di codice accademico / di ricerca, finisce per funzionare e ora è un disastro, qualcuno deve prendere l'iniziativa per riformularlo.
Ci vuole molto lavoro per il refactoring del codice esistente che non sta causando problemi. Soprattutto se è specifico per il dominio o non ha test. Vedrai che OpenCV ha una guida di stile che è molto completa, anche se non perfetta. Applicandolo retroattivamente a tutto il codice esistente? Cioè ... non per i deboli di cuore.
Questo è ancora più difficile se tutto quel codice funziona. Perché non è rotto. Perché ripararlo?
Eppure questi progetti prosperano, sono mantenuti e ampiamente utilizzati!
Questa è la risposta, in un certo senso. Il codice di lavoro è ancora utile e quindi è più probabile che venga mantenuto.
Potrebbe essere un disastro, soprattutto inizialmente. Alcuni di questi progetti probabilmente sono iniziati come un progetto unico che "non avrebbe mai dovuto essere riutilizzato e potrebbe essere gettato via".
Considera anche che se stai implementando un algoritmo complesso potrebbe avere più senso avere metodi più grandi perché tu (e altri che hanno familiarità con il lato scientifico) potete comprendere concettualmente l'algoritmo. Il mio lavoro di tesi era legato all'ottimizzazione. Avere la logica dell'algoritmo principale come metodo era considerevolmente più semplice da capire di quanto avrebbe cercato di scomporla. Certamente ha violato la regola delle "7 righe per metodo", ma ha anche significato che un altro ricercatore poteva esaminare il mio codice e comprendere più rapidamente le mie modifiche all'algoritmo.
Se questa implementazione fosse stata sottratta e progettata bene, questa trasparenza sarebbe persa per i non programmatori .
Per i compagni di risposta: questa domanda si riferisce alla base di codice delle librerie open source per compiti intensivi dal punto di vista computazionale in uno o più domini scientifici. Questa domanda non riguarda il codice usa e getta. Fai una pausa per un momento per assicurarti di cogliere ogni aspetto evidenziato prima di scrivere una risposta.
Penso che la gente abbia spesso questa idea che tutti i progetti open source iniziano come "ehi, ho una grande idea per una biblioteca che sarà selvaggiamente popolare e utilizzata da migliaia / milioni di altri" e quindi ogni progetto accade così.
La realtà è che molti progetti vengono avviati e muoiono. Una percentuale ridicolmente minuscola di progetti "arriva" al livello di OpenCV o VTK ecc.
OpenCV è iniziato come un progetto di ricerca di Intel. Wikipedia lo descrive come parte di una "serie di progetti". La sua prima versione non beta è stata il 2006, o sette anni dopo il suo avvio. Ho il sospetto che l'obiettivo inizialmente fossero le versioni beta significative, non il codice perfetto.
Inoltre, la "proprietà" di OpenCV è cambiata in modo significativo. Questo fa cambiare gli standard, a meno che tutte le parti responsabili non adottino gli stessi standard e li mantengano per la durata del progetto.
Devo anche sottolineare che OpenCV era in circolazione da diversi anni prima che il Manifesto Agile da cui Clean Code traesse ispirazione fosse pubblicato (e VTK quasi 10). VTK è stato avviato 17 anni prima della pubblicazione di Clean Code (OpenCV era "solo" 9 anni prima).