Pratiche per la programmazione in un ambiente scientifico? [chiuso]


91

sfondo

L'anno scorso ho svolto uno stage in un gruppo di ricerca di fisica presso un'università. In questo gruppo, abbiamo utilizzato principalmente LabVIEW per scrivere programmi per il controllo delle nostre configurazioni, per l'acquisizione e l'analisi dei dati. Per i primi due scopi, funziona abbastanza bene, ma per l'analisi dei dati è un vero dolore. Inoltre, tutti erano per lo più autodidatti, quindi il codice scritto era generalmente un bel casino (non c'è da stupirsi che ogni dottorato di ricerca abbia deciso rapidamente di riscrivere tutto da zero). Il controllo della versione era sconosciuto e impossibile da configurare a causa delle rigide normative di rete e software del reparto IT.

Ora, le cose in realtà sono andate sorprendentemente bene, ma come fanno le persone nel campo delle scienze naturali a sviluppare il loro software?

Domande

Alcune domande concrete:

  • Quali linguaggi / ambienti hai usato per sviluppare software scientifico, in particolare l'analisi dei dati? Quali biblioteche? (ad esempio, cosa usi per la stampa?)
  • C'è stata formazione per persone senza una formazione significativa nella programmazione?
  • Avevi qualcosa come il controllo della versione e il monitoraggio dei bug?
  • Come fareste a cercare di creare un ambiente decente per la programmazione, senza intralciare troppo i singoli scienziati (soprattutto i fisici sono persone testarde!)

Riepilogo delle risposte fino ad ora

Le risposte (o la mia interpretazione di esse) fino ad ora: (2008-10-11)

  • Lingue / pacchetti che sembrano essere i più utilizzati:
  • Il controllo della versione è utilizzato da quasi tutti gli intervistati; il rilevamento dei bug e altri processi sono molto meno comuni.
  • Il corso di carpenteria software è un buon modo per insegnare tecniche di programmazione e sviluppo agli scienziati.
  • Come migliorare le cose?
    • Non forzare le persone a seguire protocolli rigidi.
    • Crea tu stesso un ambiente e mostra i vantaggi agli altri. Aiutali a iniziare a lavorare con il controllo della versione, il monitoraggio dei bug, ecc.
    • Rivedere il codice di altre persone può aiutare, ma tieni presente che non tutti potrebbero apprezzarlo.

Risposte:


27

Quali lingue / ambienti hai usato per sviluppare software scientifico, esp. analisi dei dati? Quali biblioteche? (Ad esempio, cosa usi per la stampa?)

Ho lavorato per En Thought , il principale sponsor aziendale di SciPy . Abbiamo collaborato con scienziati delle società che hanno incaricato En Thought per lo sviluppo di software personalizzato. Python / SciPy sembrava essere un ambiente confortevole per gli scienziati. È molto meno intimidatorio iniziare con che dire C ++ o Java se sei uno scienziato senza un background software.

La distribuzione Python di En Thought viene fornita con tutte le librerie di calcolo scientifico tra cui analisi, plottaggio, visualizzazione 3D, ecc.

C'è stata formazione per persone senza una formazione significativa nella programmazione?

En Thought offre formazione SciPy e la comunità SciPy è abbastanza brava a rispondere alle domande sulle mailing list.

Avevi qualcosa come il controllo della versione, il monitoraggio dei bug?

Sì e sì (Subversion e Trac). Dato che lavoravamo in collaborazione con gli scienziati (e in genere in remoto da loro), il controllo della versione e il monitoraggio dei bug erano essenziali. Ci è voluto un po 'di coaching per convincere alcuni scienziati a interiorizzare i vantaggi del controllo della versione.

Come proveresti a creare un ambiente decente per la programmazione, senza intralciare troppo i singoli scienziati (specialmente i fisici sono persone testarde!)

Assicurati che abbiano familiarità con la catena degli strumenti. Ci vuole un investimento in anticipo, ma li farà sentire meno inclini a rifiutarlo a favore di qualcosa di più familiare (Excel). Quando gli strumenti falliscono (e lo faranno), assicurati che abbiano un posto dove cercare aiuto: mailing list, gruppi di utenti, altri scienziati e sviluppatori di software nell'organizzazione. Più aiuto c'è per riportarli a fare fisica, meglio è.


21

Il corso Software Carpentry è rivolto in modo specifico a persone che si occupano di informatica scientifica e mira a insegnare le basi e le lezioni di ingegneria del software e come applicarle al meglio ai progetti.

Copre argomenti come il controllo della versione, il debug, il test, lo scripting e vari altri problemi.

Ho ascoltato circa 8 o 9 lezioni e penso che sia altamente raccomandato.

Modifica: sono disponibili anche gli MP3 delle lezioni .


16

Fisica nucleare / delle particelle qui.

  • Il lavoro di programmazione principale veniva svolto principalmente in Fortran utilizzando CERNLIB (PAW, MINUIT, ...) e GEANT3 , recentemente è stato svolto principalmente in C ++ con ROOT e Geant4 . Ci sono un certo numero di altre librerie e strumenti in uso specializzato e LabVIEW ne vede un po 'di utilizzo qua e là.
  • L'acquisizione dei dati nella mia parte di questa attività ha spesso significato un lavoro di livello piuttosto basso. Spesso in C, a volte anche nell'assemblaggio, ma questo sta scomparendo man mano che l'hardware diventa più capace. D'altra parte, molte delle schede sono ora costruite con FPGA che necessitano di gate twiddling ...
  • One-off, interfacce grafiche, ecc.Usano quasi tutto ( Tcl / Tk era grande, e ultimamente ho visto più Perl / Tk e Python / Tk) incluso un numero di pacchetti che esistono principalmente all'interno della comunità della fisica delle particelle .
  • Molte persone che scrivono codice hanno poca o nessuna formazione formale e il processo viene trasmesso in modo molto irregolare per tradizione orale, ma la maggior parte dei leader di gruppi software prende sul serio il processo e legge quanto necessario per colmare le proprie carenze in quest'area.
  • Il controllo della versione per gli strumenti principali è onnipresente. Ma molti programmatori individuali lo trascurano per i loro compiti più piccoli. Gli strumenti formali di tracciamento dei bug sono meno comuni, così come le build notturne, i test di unità e i test di regressione.

Per migliorare le cose:

  1. Mettiti dalla parte dei leader di software locali
  2. Implementa il processo che desideri utilizzare nella tua zona e incoraggia anche coloro che lasci entrare a usarlo.
  3. Aspettare. I fisici sono persone empiriche. Se aiuta, se ne accorgeranno (prima o poi!).

Un altro suggerimento per migliorare le cose.

  1. Dedica un po 'di tempo ad aiutare le persone con cui lavori direttamente. Rivedi il loro codice. Parla loro della complessità algoritmica / generazione del codice / DRY o qualsiasi cosa di base che non hanno mai imparato perché un professore ha lanciato loro un libro di Fortran una volta e ha detto "fallo funzionare". Indottrinali su questioni di processo. Sono persone intelligenti e impareranno se gli dai una possibilità.

11

Questo potrebbe essere leggermente tangenziale, ma si spera rilevante.

Ho lavorato per National Instruments, R&D, dove scrivevo software per NI RF & Communication toolkit. Abbiamo usato LabVIEW un po 'ed ecco le pratiche che abbiamo seguito:

  1. Controllo della fonte. NI utilizza Perforce. Abbiamo fatto la cosa normale: dev / trunk branch, integrazione continua, il lavoro.
  2. Abbiamo scritto suite di test automatizzate.
  3. Avevamo alcune persone che avevano esperienza nell'elaborazione dei segnali e nella comunicazione. Avevamo regolari revisioni del codice e documenti di best practice per assicurarci che il loro codice fosse all'altezza.
  4. Nonostante le revisioni del codice, ci sono state alcune occasioni in cui i "ragazzi del software", come me, hanno dovuto riscrivere parte di questo codice per maggiore efficienza.
  5. So esattamente cosa intendi per le persone testarde! C'erano persone che pensavano che segnalare un potenziale miglioramento delle prestazioni nel loro codice fosse un insulto personale diretto! Inutile dire che ciò richiede una buona gestione. Ho pensato che il modo migliore per trattare con queste persone fosse andare lentamente, non premere troppo per i cambiamenti e, se necessario, essere preparati a fare il lavoro sporco. [Esempio: scrivi una suite di test per il loro codice].

9

Non sono esattamente uno scienziato "naturale" (studio trasporti) ma sono un accademico che scrive molto del mio software per l'analisi dei dati. Cerco di scrivere il più possibile in Python, ma a volte sono costretto a utilizzare altri linguaggi quando lavoro per estendere o personalizzare uno strumento software esistente. C'è pochissima formazione sulla programmazione nel mio campo. La maggior parte delle persone è autodidatta o ha appreso le proprie capacità di programmazione da lezioni prese in precedenza o al di fuori della disciplina.

Sono un grande fan del controllo della versione. Ho usato Vault in esecuzione sul mio server di casa per tutto il codice della mia tesi. In questo momento sto cercando di convincere il dipartimento a configurare un server Subversion, ma la mia ipotesi è che sarò l'unico che lo userà, almeno all'inizio. Ho giocato un po 'con FogBugs, ma a differenza del controllo della versione, non credo sia altrettanto utile per una squadra di un solo uomo.

Per quanto riguarda l'incoraggiamento ad altri a usare il controllo della versione e simili, questo è davvero il problema che sto affrontando ora. Ho intenzione di costringere i miei studenti universitari a usarlo nei progetti di ricerca che stanno facendo per me e di incoraggiarli a usarlo per le loro ricerche. Se insegno in una classe che coinvolge la programmazione, probabilmente costringerò gli studenti a usare anche il controllo della versione (valutandoli su cosa c'è nel repository). Per quanto riguarda i miei colleghi e i loro dottorandi, tutto quello che posso fare è rendere disponibile un server e fare affidamento su una gentile persuasione e dare il buon esempio. Francamente, a questo punto penso che sia più importante convincerli a fare backup regolari che ottenerli sul controllo del codice sorgente (alcune persone stanno portando in giro l'unica copia dei loro dati di ricerca su unità flash USB).


7

1.) I linguaggi di scripting sono popolari in questi giorni per la maggior parte delle cose a causa di un hardware migliore. Perl / Python / Lisp sono prevalenti per applicazioni leggere (automazione, calcolo leggero); Vedo molto Perl nel mio lavoro (EM computazionale) poiché ci piace Unix / Linux. Per le prestazioni, vengono generalmente utilizzati C / C ++ / Fortran. Per il calcolo parallelo, beh, di solito parallelizziamo manualmente le corse in EM invece di avere un programma che lo fa implicitamente (cioè dividere i lavori in base all'angolo di visione quando si calcolano le sezioni trasversali del radar).

2.) Abbiamo semplicemente coinvolto le persone nel mix qui. Gran parte del codice che abbiamo è molto disordinato, ma gli scienziati sono in genere un gruppo sbadato a cui non importa quel genere di cose. Non è l'ideale, ma abbiamo cose da offrire e siamo gravemente a corto di personale. Stiamo lentamente migliorando.

3.) Usiamo SVN; tuttavia, non disponiamo di un software di tracciamento dei bug. Quasi buono come ci arriva è un file txt che ti dice dove si trovano i bug specifici dei bug.

4.) Il mio suggerimento per implementare le migliori pratiche per gli scienziati: fallo lentamente . In quanto scienziati, in genere non spediamo prodotti. Nessuno nella scienza si fa un nome avendo un codice pulito e gestibile . In genere ottengono il riconoscimento dai risultati di quel codice. Hanno bisogno di vedere una giustificazione per dedicare tempo all'apprendimento delle pratiche software. Introduci lentamente nuovi concetti e cerca di farli seguire; sono scienziati, quindi dopo che le loro prove empiriche confermano l'utilità di cose come il controllo della versione, inizieranno a usarlo tutto il tempo!



5

Sono un fisico che lavora nel campo della fisica della materia condensata, costruendo modelli classici e quantistici.

Le lingue:

  • C ++ - molto versatile: può essere usato per qualsiasi cosa, buona velocità, ma può essere un po 'scomodo quando si tratta di MPI
  • Octave - buono per alcuni calcoli supplementari, molto comodo e produttivo

Biblioteche:

  • Armadillo / Blitz ++ - astrazioni veloci di array / matrice / cubo per C ++
  • Eigen / Armadillo - algebra lineare
  • GSL - da utilizzare con C
  • LAPACK / BLAS / ATLAS - estremamente grande e veloce, ma meno conveniente (e scritto in FORTRAN)

Grafica:

  • GNUPlot - ha un output molto pulito e ordinato, ma a volte non così produttivo
  • Origine : molto comodo per la stampa

Strumenti di sviluppo:

  • Plugin Vim +: funziona alla grande per me
  • GDB : un ottimo strumento di debug quando si lavora con C / C ++
  • Code :: Blocks - L'ho usato per un po 'di tempo e l'ho trovato abbastanza comodo, ma Vim è ancora migliore secondo me.

Se il tuo c ++ è più lento del tuo c lo stai usando in modo sbagliato. Certo, è facile, ma questa è un'altra questione. :: lavora con c ++ da circa 7 anni e impara sempre cose nuove ::
dmckee --- ex moderatore gattino

Sono davvero un grande fan di C ++, ma è difficile vedere come potrebbe essere "molto più lento" di C o Fortran. A meno che non includa varianti C per HPC come UPC e C per CUDA.
Suugaku

4

Lavoro come fisico in un'università del Regno Unito.

Forse dovrei sottolineare che diverse aree di ricerca hanno un'enfasi diversa sulla programmazione. I fisici delle particelle (come dmckee) eseguono modelli computazionali quasi esclusivamente e possono collaborare a grandi progetti software, mentre le persone in campi come il mio (materia condensata) scrivono codice relativamente di rado. Sospetto che la maggior parte degli scienziati ricada in quest'ultimo campo. Direi che le abilità di programmazione sono generalmente viste come utili in fisica, ma non essenziali, proprio come le abilità di fisica / matematica sono viste come utili per i programmatori ma non essenziali. Con questo in testa...

  • Quali lingue / ambienti hai usato per sviluppare software scientifico, esp. analisi dei dati? Quali biblioteche? (Ad esempio, cosa usi per la stampa?)

Comunemente l'analisi e il tracciamento dei dati vengono eseguiti utilizzando pacchetti di analisi dei dati generici come IGOR Pro , ORIGIN , Kaleidegraph che possono essere considerati "Excel plus". Questi pacchetti in genere hanno un linguaggio di scripting che può essere utilizzato per automatizzare. Un'analisi più specialistica potrebbe avere un'utilità dedicata per il lavoro che generalmente sarà stato scritto molto tempo fa, nessuno ha la fonte ed è piuttosto bacato. Alcuni più tecnici potrebbero utilizzare i linguaggi menzionati (Python, R, MatLab con Gnuplot per la stampa).

Il software di controllo è comunemente fatto in LabVIEW, sebbene in realtà utilizziamo Delphi, il che è piuttosto insolito.

  • C'è stata formazione per persone senza una formazione significativa nella programmazione?

Sono stato a seminari su grid computing, visualizzazione 3D, apprendimento Boost ecc. Tenuti da entrambe le università in cui ho frequentato. Come studente universitario ci è stato insegnato VBA per Excel e MatLab, ma C / MatLab / LabVIEW è più comune.

  • Avevi qualcosa come il controllo della versione, il monitoraggio dei bug?

No, anche se le persone hanno configurazioni di sviluppo personale. La nostra base di codice si trova in una cartella condivisa su un "server" che viene mantenuto aggiornato con uno strumento di sincronizzazione.

  • Come proveresti a creare un ambiente decente per la programmazione, senza intralciare troppo i singoli scienziati (specialmente i fisici sono persone testarde!)

Un passo alla volta! Sto cercando di sostituire la cartella condivisa con qualcosa di un po 'più solido, forse sarebbe utile trovare un client SVN che imiti il ​​comportamento degli strumenti di sincronizzazione corrente.

Direi però che nel complesso, per la maggior parte dei progetti di scienze naturali, il tempo è generalmente speso meglio facendo ricerca!


Grazie per aver condiviso i tuoi pensieri! Sono d'accordo che "il tempo è generalmente speso meglio facendo ricerca", ma vedendo quanto tempo viene spesso perso a causa della mancanza di cose come il controllo della versione e la formazione di base nella programmazione, direi che gli scienziati sottovalutano questo problema.
onnodb

4

Ex fisico accademico e ora fisico industriale nel Regno Unito qui:

Quali lingue / ambienti hai usato per sviluppare software scientifico, esp. analisi dei dati? Quali biblioteche? (Ad esempio, cosa usi per la stampa?)

Al giorno d'oggi uso principalmente MATLAB (funzioni di visualizzazione e matematica di facile accesso). Ho usato per usare Fortran molto e IDL . Ho usato C (ma sono più un lettore che uno scrittore di C), macro di Excel (brutte e confuse). Al momento ho bisogno di essere in grado di leggere Java e C ++ (ma non posso davvero programmare in loro) e ho anche hackerato Python. Per il mio divertimento ora sto programmando in C # (principalmente per ottenere portabilità / basso costo / interfacce carine). Posso scrivere in Fortran praticamente con qualsiasi lingua mi venga presentata ;-)

C'è stata formazione per persone senza una formazione significativa nella programmazione?

La maggior parte (tutti?) Dei corsi universitari di fisica avrà un piccolo corso di programmazione di solito su C, Fortran o MATLAB ma sono le vere basi. Mi piacerebbe davvero aver avuto una formazione in ingegneria del software ad un certo punto (controllo di revisione / test / progettazione di sistemi di media scala)

Avevi qualcosa come il controllo della versione, il monitoraggio dei bug?

Ho iniziato a usare Subversion / TortoiseSVN relativamente di recente. I gruppi con cui ho lavorato in passato hanno utilizzato il controllo di revisione. Non conosco nessun gruppo accademico che utilizzi un software formale di tracciamento dei bug. Ancora non uso alcun tipo di test sistematico.

Come proveresti a creare un ambiente decente per la programmazione, senza intralciare troppo i singoli scienziati (specialmente i fisici sono persone testarde!)

Vorrei provare a introdurre alcune idee di ingegneria del software a livello universitario e quindi rafforzarle con la pratica a livello universitario, fornendo anche indicazioni a risorse come il corso di carpenteria software di cui sopra.

Mi aspetto che una parte significativa dei fisici accademici scriverà software (non necessariamente tutto però) e hanno un disperato bisogno di almeno un'introduzione alle idee nell'ingegneria del software.


4

Quali lingue / ambienti hai usato per sviluppare software scientifico, esp. analisi dei dati? Quali biblioteche? (Ad esempio, cosa usi per la stampa?)

Python, NumPy e pylab (plottaggio).

C'è stata formazione per persone senza una formazione significativa nella programmazione?

No, ma lavoravo in un laboratorio di ricerca multimediale, quindi quasi tutti avevano una formazione informatica.

Avevi qualcosa come il controllo della versione, il monitoraggio dei bug?

Sì, Subversion per il controllo della versione, Trac per la ricerca dei bug e wiki. Puoi ottenere bug tracker / hosting di controllo della versione gratuiti da http://www.assembla.com/ se i loro TOS si adattano al tuo progetto.

Come faresti a cercare di creare un ambiente decente per la programmazione, senza intralciare troppo i singoli scienziati (specialmente i fisici sono persone testarde!).

Assicurati che l'infrastruttura sia configurata e ben mantenuta e prova a vendere i vantaggi del controllo del codice sorgente.


3

Sono uno statistico in un'università nel Regno Unito. Generalmente le persone qui usano R per l'analisi dei dati, è abbastanza facile da imparare se conosci C / Perl. Il suo vero potere sta nel modo in cui puoi importare e modificare i dati in modo interattivo. È molto facile prendere un certo numero di file CSV (o Excel) e unirli, creare nuove colonne basate su altre e poi lanciarle in un GLM, GAM o qualche altro modello. Anche la stampa è banale e non richiede la conoscenza di un linguaggio completamente nuovo (come PGPLOT o GNUPLOT.) Naturalmente, hai anche il vantaggio di avere un sacco di funzionalità integrate (da cose semplici come media, deviazione standard ecc. la strada per reti neurali, spline e grafici GL.)

Detto questo, ci sono un paio di problemi. Con set di dati molto grandi R può diventare molto lento (l'ho visto solo con set di dati> 50.000x30) e poiché è interpretato non si ottiene il vantaggio di Fortran / C sotto questo aspetto. Ma puoi (molto facilmente) fare in modo che R chiami le librerie condivise C e Fortran (da qualcosa come netlib o da quelle che hai scritto tu stesso.) Quindi, un normale flusso di lavoro sarebbe:

  • Stabilisci cosa fare.
  • Prototipa il codice in R.
  • Esegui alcune analisi preliminari.
  • Riscrivi il codice lento in C o Fortran e chiamalo da R.

Che funziona molto bene per me.

Sono una delle poche persone nel mio dipartimento (di> 100 persone) che usa il controllo della versione (nel mio caso usando git con githuib.com). Questo è piuttosto preoccupante, ma sembra che non vogliano provarlo e si accontentano di passare file zip in giro (schifo.)

Il mio suggerimento sarebbe quello di continuare a utilizzare LabView per l'acquisizione (e forse cercare di convincere i tuoi colleghi a concordare un set di strumenti per l'acquisizione e la creazione è disponibile per tutti) e quindi passare all'esportazione dei dati in un CSV (o simile) e facendo l'analisi in R. Non ha davvero molto senso reinventare la ruota sotto questo aspetto.


2

Quali lingue / ambienti hai usato per sviluppare software scientifico, esp. analisi dei dati? Quali biblioteche? (Ad esempio, cosa usi per la stampa?)

Il mio dipartimento di fisica universitaria ha tenuto lezioni di LabVIEW e lo ha utilizzato ampiamente nei suoi progetti di ricerca.

L'altra alternativa è MATLAB , in cui non ho esperienza. Ci sono campi per entrambi i prodotti; ognuno ha i suoi vantaggi / svantaggi. A seconda del tipo di problemi che devi risolvere, un pacchetto potrebbe essere più preferibile dell'altro.

Per quanto riguarda l'analisi dei dati, puoi utilizzare qualsiasi tipo di strumento di calcolo dei numeri desideri. Idealmente, puoi eseguire calcoli complessi nel linguaggio X e formattare l'output per la stampa in modo corretto in Excel, Mathcad , Mathematica o qualunque sia il sistema di tracciamento del giorno. Non aspettarti la standardizzazione qui.

Avevi qualcosa come il controllo della versione, il monitoraggio dei bug?

Guardando indietro, non l'abbiamo fatto, e sarebbe stato più facile per tutti noi se lo avessimo fatto. Niente come rompere tutto e lottare per ore per risolverlo!

Usa sicuramente il controllo del codice sorgente per qualsiasi codice comune. Incoraggia le persone a scrivere il loro codice in un modo che potrebbe essere reso più generico. Questa è solo la codifica delle migliori pratiche. In realtà, dovresti fargli insegnare (o seguire) un corso di informatica in modo che possano apprendere le basi.

Come proveresti a creare un ambiente decente per la programmazione, senza intralciare troppo i singoli scienziati (specialmente i fisici sono persone testarde!)

Esiste una chiara divisione tra acquisizione di dati (DAQ) e analisi dei dati. Ciò significa che è possibile standardizzare il DAQ e quindi consentire agli scienziati di giocare con i dati nel programma di loro scelta.


2

Un'altra buona opzione è Scilab . Ha moduli grafici à la LabVIEW , ha un proprio linguaggio di programmazione e puoi anche incorporare codice Fortran e C, per esempio. Viene utilizzato nei settori pubblico e privato, comprese le grandi aziende industriali. Ed è gratis.

Riguardo al controllo delle versioni, alcuni preferiscono Mercurial , in quanto dà più libertà nella gestione e definizione dei repository. Tuttavia, non ne ho esperienza.

Per la stampa utilizzo Matplotlib . Presto dovrò creare animazioni e ho visto buoni risultati usando MEncoder . Ecco un esempio che include una traccia audio.

Infine, suggerisco di diventare modulare, cioè cercare di mantenere le parti principali di codice in file diversi, così la revisione, la comprensione, la manutenzione e il miglioramento del codice saranno più facili. Ho scritto, ad esempio, un modulo Python per testare l'integrità dei file, un altro per le sequenze di elaborazione delle immagini, ecc.

Dovresti anche considerare di sviluppare con l'uso un debugger che ti permetta di controllare il contenuto delle variabili a punti di interruzione impostabili nel codice, invece di usare le righe di stampa. Ho usato Eclipse per Python e lo sviluppo di Fortran (anche se ho ricevuto un falso bug durante la compilazione di un breve programma Fortran con esso, ma potrebbe essere stata una cattiva configurazione) e sto iniziando a utilizzare l' IDE di Eric per Python. Ti permette di eseguire il debug, gestire il controllo delle versioni con SVN , ha una console incorporata, può fare refactoring con Bicycle Repair Man (può usarne anche un altro), hai Unittest, ecc. Un'alternativa più leggera per Python è IDLE , incluso con Python dalla versione 2.3.

Come alcuni suggerimenti, suggerisco anche:

  • Non utilizzare variabili a carattere singolo. Quando vuoi cercare le apparenze, otterrai risultati ovunque. Alcuni sostengono che un IDE decente lo renda più semplice, ma poi dipenderà dall'avere un accesso permanente all'IDE. Anche usare ii, jj e kk può essere sufficiente, sebbene questa scelta dipenderà dalla tua lingua. (Le doppie vocali sarebbero meno utili se i commenti al codice fossero fatti in estone, per esempio).

  • Commentando il codice fin dall'inizio.

  • Per le applicazioni critiche a volte è meglio fare affidamento su versioni di linguaggio / compilatore precedenti (versioni principali), più stabili e con un migliore debug. Ovviamente puoi avere un codice più ottimizzato nelle versioni successive, bug corretti, ecc., Ma sto parlando di usare Fortran 95 invece di 2003, Python 2.5.4 invece di 3.0, o giù di lì. (Specialmente quando una nuova versione interrompe la compatibilità con le versioni precedenti.) Molti miglioramenti di solito introducono molti bug. Tuttavia, questo dipenderà da casi di applicazione specifici! Nota che questa è una scelta personale, molte persone potrebbero obiettare contro questo.

  • Usa backup ridondanti e automatizzati! (Con controllo delle versioni).


2

Sicuramente, usa Subversion per mantenere copie istantanee del codice sorgente correnti, in corso di lavorazione e stabili. Ciò include C ++, Java ecc. Per strumenti software sviluppati internamente e script rapidi per l'elaborazione una tantum.

Con la forte inclinazione della scienza e dell'ingegneria applicata verso la metodologia di sviluppo del "cowboy solitario", la consueta pratica di organizzare il deposito in baule, tag e qualsiasi altra cosa fosse - non preoccuparti! Agli scienziati e ai loro tecnici di laboratorio piace ruotare le manopole, muovere gli elettrodi e cercare le perdite di vuoto. È abbastanza un lavoro per convincere tutti ad accettare, ad esempio Python / NumPy o seguire una convenzione di denominazione; dimenticare di cercare di far loro seguire pratiche e convenzioni arcane degli sviluppatori di software.


2

Per la gestione del codice sorgente, i sistemi centralizzati come Subversion sono superiori per l'uso scientifico a causa del chiaro singolo punto di verità (SPOT). La registrazione delle modifiche e la capacità di richiamare le versioni di qualsiasi file, senza dover cercare dove trovare qualcosa, ha enormi vantaggi nella conservazione dei dati. Strumenti come Git e Monotone : oh mio Dio, il caos che posso immaginare che sarebbe seguito! Avere registrazioni chiare di quale versione degli script di hack-job è stata utilizzata mentre si giocava con il nuovo sensore quando quel bosone di Higgs è passato o quella supernova è esplosa, porterà alla felicità.


Hai mai provato a utilizzare un sistema di controllo della versione distribuito?
Andrew Grimm,

1
Quasi tutti i sistemi distribuiti lo rendono facile quanto quelli centralizzati. Devi solo registrare un ID commit (in termini Git) invece di un numero di revisione (come in SVN).
Phil Miller

2

Quali lingue / ambienti hai usato per sviluppare software scientifico, esp. analisi dei dati? Quali biblioteche? (Ad esempio, cosa usi per la stampa?)

Lingue che ho usato per i numeri e le cose relative ai sicentifici:

  • C (sviluppo lento, troppo debug, quasi impossibile scrivere codice riutilizzabile)
  • C ++ (e ho imparato a odiarlo - lo sviluppo non è lento come il C, ma può essere un problema. I modelli e le classi erano fantastici inizialmente, ma dopo un po 'mi sono reso conto che li stavo combattendo tutto il tempo e trovando soluzioni alternative per problemi di progettazione del linguaggio
  • Common Lisp, che era OK, ma non ampiamente utilizzato per Sci computing. Non facile da integrare con C (rispetto ad altri linguaggi), ma funziona
  • Schema. Questa è diventata la mia scelta personale.

Il mio editor è Emacs, anche se uso vim per cose veloci come la modifica dei file di configurazione.

Per la stampa, di solito genero un file di testo e lo inserisco in gnuplot.

Per l'analisi dei dati, di solito genero un file di testo e utilizzo GNU R.

Vedo molte persone qui che usano FORTRAN (principalmente 77, ma circa 90), molto Java e un po 'di Python. Non mi piacciono, quindi non li uso.

C'è stata formazione per persone senza una formazione significativa nella programmazione?

Penso che questo non si applichi a me, dato che mi sono laureato in CS - ma dove lavoro non c'è formazione formale, ma le persone (ingegneri, fisici, matematici) si aiutano a vicenda.

Avevi qualcosa come il controllo della versione, il monitoraggio dei bug?

Il controllo della versione è assolutamente importante! Conservo il mio codice e i miei dati su tre macchine diverse, in due diverse parti del mondo - nei repository Git. Li sincronizzo tutto il tempo (quindi ho il controllo della versione e dei backup!) Non eseguo il controllo dei bug, anche se posso iniziare a farlo. Ma i miei colleghi non hanno affatto BTS o VCS.

Come proveresti a creare un ambiente decente per la programmazione, senza intralciare troppo i singoli scienziati (specialmente i fisici sono persone testarde!)

In primo luogo, darei loro quanta più libertà possibile. (Nell'università in cui lavoro potrei scegliere tra avere qualcuno che installi Ubuntu o Windows, o installare il mio sistema operativo: ho scelto di installare il mio. Non ho il supporto da loro e sono responsabile di tutto ciò che accade con le mie macchine, inclusi i problemi di sicurezza, ma faccio quello che voglio con la macchina).

Secondo, vedrei a cosa sono abituati e lo farei funzionare (serve FORTRAN? Lo configureremo. Serve C ++? Nessun problema. Mathematica? OK, compreremo una licenza). Quindi vedi quanti di loro vorrebbero imparare "strumenti aggiuntivi" per aiutarli a essere più produttivi (non dire strumenti "diversi". Dì "aggiuntivi", così non sembrerà che nessuno "perderà" o "lascerà vai "o qualsiasi altra cosa). Inizia con gli editor, vedi se ci sono gruppi che vorrebbero usare VCS per sincronizzare il loro lavoro (ehi, puoi stare a casa e inviare il tuo codice tramite SVN o GIT - non sarebbe fantastico?) E così via. Non imporre: mostra esempi di quanto siano fantastici questi strumenti. Effettua analisi dei dati utilizzando R e mostra loro quanto è stato facile. Mostra una bella grafica e spiega come li hai creati (ma inizia con semplici esempi,


2

Suggerirei F # come potenziale candidato per eseguire manipolazioni legate alla scienza, dati i suoi forti legami semantici con i costrutti matematici.

Inoltre, il suo supporto per le unità di misura, come scritto qui, ha molto senso per garantire una corretta traduzione tra modello matematico e codice sorgente di implementazione.


1

Prima di tutto, preferirei sicuramente un linguaggio di scripting per evitare di dover spiegare molte cose extra (ad esempio la gestione manuale della memoria è - principalmente - ok se stai scrivendo cose di basso livello e sensibili alle prestazioni, ma per qualcuno che semplicemente vuole usare un computer come una calcolatrice scientifica aggiornata è decisamente eccessivo). Inoltre, guardati intorno se c'è qualcosa di specifico per il tuo dominio (come R per le statistiche). Questo ha il vantaggio di lavorare già con i concetti con cui gli utenti hanno familiarità e di avere un codice specializzato per situazioni specifiche (ad esempio il calcolo delle deviazioni standard, l'applicazione di test statistici, ecc. Nel caso di R).

Se desideri utilizzare un linguaggio di scripting più generico, sceglierei Python. Due cose che ha da offrire sono:

  • La shell interattiva dove puoi sperimentare
  • È chiara (anche se a volte lunga) la sintassi

Come ulteriore vantaggio, ha librerie per la maggior parte delle cose che vorresti fare con esso.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.