Rust, Go, Julia ? (o anche altro)

Messaggioda Flamber » 04/04/2020, 09:12

Come molti di voi, immagino, ultimamente mi sono ritrovato con un pò di tempo libero in più per le ragioni che tutti sappiamo (nel caso abbiate dubbi vi rimando al TG la7 ore 20).

Da qualche tempo avevo intenzione di imparare ad usare, a livello professionale, un nuovo linguaggio di programmazione. Facendovi un breve riassunto della mia esperienza, ho iniziato come programmatore C di basso livello in ambito embedded, e a livello bassissimo con VHDL e Verilog. Dopo sono passato all'ambito applicativo utilizzando per lavoro principalmente C++ ( e qualcosina in Python). Intanto utilizzavo Matlab e Simulink principalmente per simulazioni e progettazione di sistemi di controllo.

Successivamente, anche grazie al mio cambio di carriera universitaria (dopo una triennale ing.elettronica ho iniziato una magistrale in data science & engineering), ho lasciato l'ambito embedded ed ora mi occupo principalmente di machine learning e statistica. Allo stato attuale mi trovo a lavorare spesso con Python, R e Matlab, ma ora ho voglia ( e soprattutto il tempo) di imparare un nuovo linguaggio.

I miei tre personalissimi candidati al momento sono, come da titolo, Rust, Go e Julia. Avete dei suggerimenti (anche suggerimenti su altri linguaggi sono più che benvenuti)?

Capisco che la risposta più ovvia in questo caso sia "dipende da cosa devi fare", ma il punto è che al momento non ci devo fare nulla, è solo un modo per ottimizzare il tempo libero che, nostro malgrado, ci siamo ritrovati. La mia scelta ricadrebbe quindi sul linguaggio "più diverso" rispetto a quelli che già conosco, ma che possa comunque essermi utile in futuro ( se il criterio fosse solo quello della "diversità" rispetto a quello che già conosco mi metterei a studiare Pascal :D ). Aggiungo che sono interessato al paradigma funzionale e alla fuzzy logic
Avatar utente
Flamber
Advanced Member
Advanced Member
 
Messaggio: 947 di 2188
Iscritto il: 27/03/2012, 07:49

Re: Rust, Go, Julia ? (o anche altro)

Messaggioda claudio86 » 04/04/2020, 21:03

I tuoi tre candidati sono indirizzati a nicchie completamente diverse.
Julia è esplicitamente intenzionato a prendere il posto di Matlab (e a farlo prima di Python). Programmazione scientifica e analisi dati.
Rust è orientato alla programmazione di sistema, come C e C++, usando però un type system complesso per garantire la correttezza dei programmi prima dell'esecuzione.
Go è pensato per sviluppare servizi web. Uno dei suoi punti di forza è la facilità con cui permette di sfruttare coroutine e programmazione concorrente.

Nessuno di essi è un linguaggio funzionale, anche se ovviamente puoi usare quel paradigma con qualsiasi linguaggio. Anche la logica fuzzy è un concetto abbastanza ortogonale.

Personalmente, se non hai mai lavorato con linguaggi con type system avanzati, ti consiglio uno di questi. Dalla tua lista sceglierei quindi Rust, altrimenti la classica alternativa è Haskell (che è anche funzionale puro).



Ti do poi un altro consiglio un po' più ampio.
Tempo fa ho seguito un corso sui linguaggi di programmazione su Coursera. Comprendeva tre linguaggi: uno funzionale e con tipi statici (Standard ML, simile ad Haskell), uno funzionale e con tipi dinamici (Scheme, un dialetto LISP), e uno orientato agli oggetti con tipi dinamici (Ruby). Il corso era molto ben fatto, trattava i diversi paradigmi offerti dai diversi linguaggi e li metteva in relazione tra loro, mostrando quali vantaggi avessero a seconda dell'applicazione.

Oggi sembra sia diviso in tre corsi diversi. Quando l'avevo seguito io Coursera rilasciava ancora i certificati gratis, ma alla fine quello che importa è imparare qualcosa di nuovo, e le videolezioni sono sempre disponibili:

https://www.coursera.org/learn/programming-languages
https://www.coursera.org/learn/programm ... ges-part-b
https://www.coursera.org/learn/programm ... ges-part-c
"This theorem, as many others, is proven by writing zero in a creative way…"
claudio86
Senior Member
Senior Member
 
Messaggio: 542 di 1130
Iscritto il: 09/01/2011, 15:12

Re: Rust, Go, Julia ? (o anche altro)

Messaggioda apatriarca » 05/04/2020, 19:43

Se il tuo obiettivo è imparare qualcosa di diverso, perché indirizzarti a linguaggi il cui obiettivo è principalmente quello di prendere il posto di linguaggi che già conosci? Ognuno di loro ha ovviamente alcune caratteristiche che li rendono unici, ma in linea di massima non sono così diversi da quelli che già conosci.

Volendo provare cose veramente diverse potresti provare qualcosa come i seguenti:
* Haskell (un linguaggio funzionale puro)
* Prolog (un linguaggio logico)
* Erlang/Elixir (un linguaggio funzionale e concorrente)
* J (un linguaggio basato sugli array - ma non pensare sia come Matlab..)

Personalmente ho considerato tutti e tre i linguaggi che hai identificato e li ho tutti abbandonati abbastanza velocemente. Su Julia è mancata un po' di motivazione. Per quanto lo trovi un buon linguaggio, probabilmente superiore a Python e Matlab, non sono sicuro abbia granché un futuro in un mercato che è comunque dominato dagli altri due. La programmazione in Julia era poi alla fine abbastanza simile a molti altri linguaggi che conosco. Go semplicemente non l'ho amato. Probabilmente non sono nel suo target. Rust è quello che ho provato per più tempo e sinceramente l'ho trovato spesso frustante. Suppongo di non essere ancora entrato nella giusta mentalità, ma ho spesso l'impressione che ti forzi nel fare le cose in un determinato modo piuttosto che essere "al tuo servizio".

Il mio consiglio è quello di provare un po' di linguaggi e decidere dopo averli provati. Concedi ad ognuno di essi uno o due giorni per capire un po' la loro sintassi e le loro idee principali e poi vai avanti con quello che ti è piaciuto di più. Non c'è alcuna ragione di scegliere alla cieca. Hai tempo.. ;)

@claudio86 in realtà anche Julia ha un sistema di tipi avanzato con una relazione d'ordine parziale di sottotipo (forma un reticolo). Anche se ammetto che il borrow checker di Rust richiede forse un cambio di mentalità maggiore.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5389 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Rust, Go, Julia ? (o anche altro)

Messaggioda claudio86 » 05/04/2020, 20:29

apatriarca ha scritto:@claudio86 in realtà anche Julia ha un sistema di tipi avanzato con una relazione d'ordine parziale di sottotipo (forma un reticolo).

Vero, però ha uno strano mix di type checking sia a runtime che a compile time. Un sacco di volte mi è capitato di compilare codice che poi dava type error quando veniva eseguito, se non ricordo male perché una funzione generica viene compilata per una determinata combinazione di tipi solo quando viene eseguita la prima volta con tali tipi, à la jit (ma potrei sbagliare, ho seguito Julia abbastanza tra le versioni 0.3 e 0.5, poi però anche io ho perso interesse).
Insomma, un'esperienza molto diversa da Haskell, dove errori a runtime non esistono a meno di mettercisi d'impegno.

apatriarca ha scritto:Rust è quello che ho provato per più tempo e sinceramente l'ho trovato spesso frustante. Suppongo di non essere ancora entrato nella giusta mentalità, ma ho spesso l'impressione che ti forzi nel fare le cose in un determinato modo piuttosto che essere "al tuo servizio".

È stato abbastanza frustrante anche per me. La mia impressione è che non è semplice impararlo "gradualmente", ci sono tanti concetti abbastanza alieni con cui ci si scontra anche agli inizi. Anche le varie guide che ho usato ogni tanto glissavano su alcuni argomenti. Di contro mi piace la documentazione delle librerie, e il fatto che sia generata automaticamente per tutto quello che si trova su cargo. In generale mi sembra che abbiano dedicato molta attenzione anche all'ecosistema e non solo al linguaggio.
"This theorem, as many others, is proven by writing zero in a creative way…"
claudio86
Senior Member
Senior Member
 
Messaggio: 543 di 1130
Iscritto il: 09/01/2011, 15:12

Re: Rust, Go, Julia ? (o anche altro)

Messaggioda Flamber » 06/04/2020, 09:31

Grazie ad entrambi per i suggerimenti, ho dato un'occhiata ai corsi di coursera e mi sembrano un buon punto di partenza, e neanche particolarmente "pesanti".

Rispondendo ad apatriarca, il mio obiettivo è sicuramente quello di imparare qualcosa di diverso ma che abbia una certa "spendibilità" nella mia professione. Python (ma anche Matlab volendo) è eccezionale per i prototipi, e per avere subito "qualcosa da mostrare" al cliente ( o ai soci o ai product manager), se però si vuole ottenere la soluzione ottimale e più efficiente bisogna adeguarsi.

Julia da questo punto di vista mi sembra promettente, nel senso che ha già tantissime librerie per il ML (nonostante sia relativamente giovane) ed una sintassi molto elegante ed intuitiva, ma al contempo, ha prestazioni migliori di Python e Matlab su praticamente tutti i principali benchmark. ( P.S. R lo odio profondamente. )

Per quanto riguarda Go, invece, nonostante sia nato principalmente per microservice, la mia personalissima impressione è quella che possa avere un futuro in ambito ML anche visto che la community mi sembra molto attiva (Gonum è un ottimo esempio). In più, nonostante sia nato da Google, non vedo il rischio Obj-C -> Ruby, proprio grazie alla community.

Rust, invece, lo stavo considerando perchè ha dei buoni bindings con Python, ed ho visto in particolare un' applicazione al ML di un mio collega, dove la pipeline principale gira sullo script di python, e le operazioni più pesanti ( ma soprattutto quelle che devono essere eseguite in parallelo con coerenza ) vengono eseguite con Rust. ( Questa necessità era nata perchè utilizziamo CUDA in praticamente tutti i progetti, ma in questo progetto specifico per un sistema embedded non era possibile ).

Dei linguaggi che mi hi consigliato conoscevo Haskell e Erlang ( grazie a degli interessanti video di computerphile ), gli altri invece non li conosco neanche "di fama" ci darò sicuramente un'occhiata. Probabilmente cercherò di capire quali siano i più recenti ( o meglio quali in prospettiva possono avere più futuro ) e magari guarderò qualche repo con esempi di utilizzo in abito machine learning.

Grazie ancora!! :smt023
Avatar utente
Flamber
Advanced Member
Advanced Member
 
Messaggio: 949 di 2188
Iscritto il: 27/03/2012, 07:49


Torna a Informatica

Chi c’è in linea

Visitano il forum: apatriarca e 1 ospite