Nel 2014 avrei detto Python. Nel 2017, credo fermamente che la lingua per insegnare agli studenti universitari sia Julia.
L'insegnamento riguarda sempre un compromesso. Da un lato, vuoi scegliere qualcosa che sia abbastanza semplice da essere facile da capire. Ma in secondo luogo, vuoi insegnare qualcosa che ha una capacità di resistenza, cioè qualcosa che può crescere con te. I linguaggi dinamici comuni (Python / MATLAB / R) rientrano facilmente nella categoria 1 a causa del loro codice di caldaia inesistente e della facilità di apertura di un interprete e di emissione del codice, mentre C / C ++ / Fortran rientrano nella seconda categoria come le lingue con cui sono stati scritti i principali software ad alte prestazioni del mondo di oggi.
Ma ci sono problemi con l'utilizzo di una lingua che non cattura completamente l'altra categoria. Quando si utilizza un linguaggio come Python, si asporta piacevolmente cose come tipi e overflow di interi. Questo è utile per insegnare il primo semestre dell'informatica, ma siccome vuoi approfondire il modo in cui le cose stanno effettivamente funzionando, il linguaggio di Python è troppo lontano dal metal sottostante per essere un buon strumento di insegnamento. Ma C / C ++ / Fortran (o Java ... ho imparato Java prima ...) hanno tutti un costo di avvio così grande che la cosa più difficile da imparare è come ottenere l'installazione e la main
compilazione delle intestazioni , il che distrae dall'imparare effettivamente a programmare .
Entra Julia. Quando usi Julia per la prima volta, puoi sottrarre l'intera idea dei tipi e usarla come MATLAB o Python. Ma se vuoi saperne di più, c'è una "tana del coniglio" di profondità nella lingua. Dato che si tratta in realtà di un livello di astrazione basato su un sistema di tipi + invio multiplo su LLVM, è essenzialmente "un modo semplice per scrivere codice compilato staticamente" (e le funzioni stabili al tipo possono effettivamente essere compilate staticamente). Ciò significa che anche i dettagli di C / C ++ sono accessibili. Puoi imparare a scrivere semplici loop e funzioni senza codice boilerplate e quindi scavare nei puntatori di funzione. Le funzionalità di metaprogrammazione di Julia ti consentono di accedere direttamente all'AST e ci sono macro che mostrano ogni parte della catena di compilazione. Inoltre, come Lisp, è suscettibile di stili di programmazione funzionale. E ha molte capacità di calcolo parallelo. Idee come la digitazione parametrica e la stabilità del tipo sono abbastanza uniche e profonde in Julia.
Se vuoi studiare da solo i linguaggi di programmazione, puoi imparare i passaggi di come funziona la compilazione usando @code_lowered
per vedere cos'è l'abbassamento, vedi l'AST digitato con @code_typed
, vedi IR LLVM con @code_llvm
e infine il codice assembly nativo con @code_native
. Questo può essere usato per mostrare qual è il costo delle variabili dinamiche ed esattamente come funziona il "boxe variabile", e questo post sul blog mostra come questi strumenti di introspezione possono essere usati per insegnare come possono / non possono verificarsi le ottimizzazioni del compilatore.
Non ci sono solo idee di informatica e ingegneria del software da esplorare, ma anche ricche idee matematiche. Dato che le principali librerie di Julia sono scritte pensando alla tipizzazione generica, è banale creare operatori senza matrice e usare IterativeSolvers.jl per eseguire GMRES utilizzandoli. Puoi usare strumenti di introspezione come @which
per mostrarti esattamente come è stato implementato qualsiasi cosa. Ad esempio, come \
funziona?
@which rand(10,10)\rand(10)
#\(A::AbstractArray{T,2} where T, B::Union{AbstractArray{T,1}, AbstractArray{T,2}} where T) in Base.LinAlg at linalg\generic.jl:805
Questo mi indica direttamente la definizione di \ . È implementato in Julia, quindi qualcuno che conosce Julia può quindi imparare l'algoritmo e come funziona attraverso l'identificazione dei sottotipi di matrice e la specializzazione quando possibile (ripiegando sull'eliminazione gaussiana). Poiché il codice di Julia è concesso in licenza MIT (e quasi tutti i pacchetti sono autorizzati MIT), gli studenti sono quindi liberi di utilizzare queste idee nel proprio codice (con attribuzione) (quando il codice è concesso in licenza GPL, come nel caso della maggior parte dei pacchetti MATLAB e R, devono stare attenti ai problemi di licenza!).
Poiché il nucleo linguistico è costruito con una comunità open source molto attiva, esiste anche una ricca risorsa sulla storia dello sviluppo del linguaggio: suoi problemi con Github . Comprendere domande sulla lingua come cos'è veramente una trasposizione matriciale? può essere molto illuminante per comprendere questi oggetti matematici in modo più dettagliato.
Ma alla fine, vuoi insegnare ai tuoi studenti come creare. Sfortunatamente, imparare Python o R non significa necessariamente che hai quello che serve per "sviluppare Python / R" poiché la maggior parte dei pacchetti ampiamente usati e ben ottimizzati contengono una notevole quantità di codice C / C ++ / Fortran in ordine per ottenere prestazioni. Pertanto, affinché questi studenti possano contribuire agli ecosistemi scientifici di queste lingue, alla fine dovranno imparare un'altra lingua a un certo punto. Anche se non è del tutto orribile, non è ottimale ora che Julia esiste. Poiché Julia è stabile al tipo, è in grado di raggiungere la velocità di C / Fortran, la maggior parte dei pacchetti nell'ecosistema Julia è puro codice Julia. Imparare Julia significa che uno ha imparato a sviluppare Julia. E poiché Base Julia è anche principalmente codice Julia (solo alcune primitive e il parser non lo è),
Detto questo, ci sono alcuni aspetti negativi nella scelta di Julia. Per uno, è molto più recente di queste altre lingue e quindi è un po 'più scarso in termini di risorse. Dovrai inventare molti strumenti per insegnare da solo o attingere alle risorse sul web che sono elencate sul sito Web di Julia . Inoltre, i dettagli della lingua non sono abbastanza definiti, anche se 1.0 sarà presto disponibile (entro la fine del 2017). Ed è anche molto probabile che tu, potenziale insegnante di un corso a Julia, potresti non avere molta esperienza con la lingua da solo. Tuttavia, questi sono i tipi di problemi che scompaiono nel tempo, mentre i vantaggi di Julia che ho menzionato sopra sono molto più importanti per le lingue stesse.