Quale lingua dovrei imparare per la scienza computazionale?


11

Sono completamente nuovo al concetto di scienza computazionale e sto cercando un buon punto di partenza.

Capisco che non esiste una lingua oggettivamente migliore, ma mi piacerebbe imparare una lingua che abbia una presenza indiscutibilmente forte e di spicco per quanto riguarda la scienza computazionale - una considerata considerata dotata di capacità ed efficienza eccezionali.

Per iniziare, mi ero orientato verso la modellizzazione relativa al legame atomico e alle interazioni, con un requisito per rappresentazioni / simulazioni grafiche.

Alcune lingue tendono ad essere migliori in alcuni campi rispetto ad altri (es. Fisica vs. pura matematica)? O la scelta di una lingua si basa su altri fattori?

Ho sentito che il nome Fortran viene lanciato molto spesso.

Suggerimenti?


1
C ++ e Fortran sono lingue ben note nella comunità. Di recente, puoi vedere un aumento nell'uso dei linguaggi dinamici. Spesso scegli la tua biblioteca e non la tua lingua.
vanCompute il

9
Mi viene in mente il detto che i veri programmatori possono scrivere Fortran in qualsiasi lingua.
Hardmath,

1
Ecco una domanda molto simile con molte risposte: scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
Ondřej Čertík

1
"Capisco che non esiste una lingua oggettivamente migliore", appunto, quindi perché non imparare ad essere linguistico-agnostico, in modo da poter scrivere in qualunque lingua che ti viene lanciata?
JM

2
Devi padroneggiare l'inglese. Senza di essa, non arriverai da nessuna parte nella scienza computazionale.
Johannes,

Risposte:


15

Principalmente si tratta delle librerie numeriche a tua disposizione che ti aiuteranno a svolgere il tuo compito. C / C ++ hanno un gran numero di librerie numeriche implementate per loro, ma essendo linguaggi di basso livello non sono i migliori per prototipare rapidamente qualcosa.

Penso che per andare rapidamente verso una soluzione, consiglierei di usare qualcosa come Matlab o Mathematica. Hanno un ampio set di strumenti e sono di altissimo livello. Molto probabilmente, la tua implementazione non sarà scalabile per l'uso in produzione, ma potrebbe essere un bel parco giochi per provare diversi metodi. Una volta che conosci un percorso da seguire, puoi sempre implementare qualcosa in C / C ++ in modo più efficiente.


4
Molte persone, sia all'interno che all'esterno del mondo accademico, non si fidano davvero del codice a meno che non abbia almeno una suite di test automatizzata minima. Non so come siano gli strumenti per queste cose in Matlab e Matematica, ma ci sono molti bei pacchetti per linguaggi più tradizionali come Python e C ++.
cjordan1,

3
MATLAB ha MATLAB xUnit, ma Python e C ++ hanno più (e, secondo me, migliori) suite di test.
Geoff Oxberry,

24

Pitone!

  1. Inizia direttamente usando la libreria numpy , i piccoli script e la shell interattiva ipython .
  2. Diventa più avanzato con l'aiuto di numerosi libri e tutorial gratuiti .
  3. Aumenta la tua produttività usando scipy come frontend per routine numeriche e matplotlib altamente performanti per la visualizzazione
  4. Approfitta di moduli ben sviluppati e potenti per il calcolo scientifico come Krypy , FeNiCS e molti altri
  5. Si noti che la transizione graduale tra la programmazione flat e orientata agli oggetti e la modularità intrinseca di Python rendono facili da gestire i progetti più grandi.
  6. Rendi il tuo codice veloce come C o Fortran semplicemente riscrivendo le parti critiche in cython . Si può anche facilmente includere routine scritte in Fortran o C .

Ciò parafrasa quello che penso sia il modo migliore per affrontare un problema nell'informatica scientifica. Inizia con una mano sul problema giocando con esempi di giocattoli in piccoli script. Diventa più sistematico e crea una suite di codice. Quindi fai funzionare il tuo codice !!! Infine, se necessario, esegui l'ottimizzazione del codice. Non reinventare la ruota e non eseguire l'ottimizzazione prematura.

(Ulteriori aspetti: Python viene fornito gratuitamente - nessun problema di licenza, grande comunità, ad esempio su StackOverflow, moduli per una buona programmazione come test di unità o registrazione ...)




5

Fortran: come Matlab, facile da imparare e da usare e rapidamente diventa produttivo ma buono solo per il calcolo numerico

C ++: difficile da padroneggiare (richiederà anni) ma molto utilizzato al di fuori del calcolo numerico (sicurezza del lavoro)

Python: consigliato molto in questi giorni ma troppo lento per lavori non banali. Avrai scritto tutti i tuoi kernel computazionalmente costosi sottostanti in C e poi li chiamerai da Python, il che significa che dovrai imparare (almeno) due lingue


1
Direi che la curva di apprendimento di Fortran e C ++ è in qualche modo simile. Ho acquisito competenze sufficienti in entrambi per risolvere la fine più semplice dei problemi in pochi mesi ciascuno proveniente da uno sfondo di Java, Matlab e C #. A seconda delle lingue che qualcuno conosce, potrei vedere c ++ molto più facile da imparare rispetto a fortran poiché la maggior parte dei codici di grandi dimensioni sono scritti in versioni datate.
Godric Seer

@Godric: a ~ 600 pagine lo standard Fortran 2008 è meno della metà di C ++ 11 (~ 1300 pagine)
stali

1
@stali, Sì, ma ad esempio lavoro con circa un quarto di milione di righe di codice legacy scritte in Fortran77. Quindi ho dovuto imparare lo stile di 77 per poter lavorare con esso, 90-95 per apportare modifiche sostenibili ad esso (poiché i blocchi comuni sono atroci), e poi '08 per non rimanere bloccato in un decennio in passato. Fortran, sebbene una vecchia lingua, ha subito enormi cambiamenti negli ultimi decenni e, a meno che tu non stia iniziando da zero, apprenderne l'eredità non è banale.
Godric Seer

2
Non sarei d'accordo con l'affermazione che Python è "troppo lento per un lavoro non banale". In effetti, se scrivi le tue moltiplicazioni a matrice vettoriale (e simili) puramente in Python, avrai un brutto momento. L'astrazione per alcune lingue più efficienti è già stata fatta per te: NumPy, Scipy probabilmente hanno tutto ciò di cui hai bisogno. O uno degli altri 50.000 pacchetti.
Nico Schlömer,

1
@ NicoSchlömer Concordo con "troppo lento per un lavoro non banale". La mia simulazione in Python (Numpy / Scipy) è più lenta dello stesso codice nella versione Fortran90 di circa 10 volte. Raccomando Fortran90 o C ++.
fronthem,

4

Risposta breve
Apprendi le basi del codice orientato agli oggetti attraverso Python e apprendi le basi dell'informatica attraverso C. Quando almeno sei abbastanza d'accordo con entrambe le altre lingue impari il C ++, perché puoi fare praticamente qualsiasi cosa in C ++ e farlo funzionare velocemente (anche se ci vuole un'eternità per scrivere).

Risposta più lunga
Quindi, ecco la cosa: per il tuo primo progetto sarai nel laboratorio di qualcuno a lavorare sul codice di qualcun altro. Nel qual caso saranno loro a scegliere il linguaggio di programmazione. Il che personalmente ritengo fantastico!

Voglio dire, come principiante non conoscerai davvero il culo dal gomito per un po 'e, soprattutto quando non sai cosa stai facendo, imparare a programmare può essere noioso. Pertanto, è bene avere la struttura e i limiti che derivano dal lavorare sul codice di qualcun altro, ed è bene avere la motivazione e l'eccitazione che possono derivare solo dal lavorare su un vero progetto.

Tuttavia, indipendentemente dal linguaggio utilizzato dal tuo laboratorio (specialmente se si tratta di Matlab), dovresti probabilmente imparare Python, C e C ++. In particolare, se non provieni da un background informatico, DEVI leggere "The C Programming Language" di Kernighan e Ritchie. Ha 35 anni e dà la netta impressione che i suoi autori stessero programmando su schede perforate, ma è il più raro degli uccelli: un libro di informatica senza tempo. Renderà molte cose molto più chiare.

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.