Qual è il miglior linguaggio di programmazione con cui iniziare a programmare?
Qual è il miglior linguaggio di programmazione con cui iniziare a programmare?
Questa è una domanda che ormai mi sono sentito ripetere molte volte, ed è una domanda che mi spiazzia tantissimo perchè non ha una risposta immediata, il che, specialmente se non si ha tempo di argomentare, porta ad una risposta molto molto vaga come
Tutti, e nessuno!
Ho quindi deciso di scrivere questo articolo per rispondere (o almeno provare a dare la mia personalissima risposta) a questa domanda per nulla banale.
Partiamo da una mia ipotesi, che però secondo me e valida quasi sempre. Chi mi fa questa domanda in realtà vorre dire
Qual è il miglior linguaggio di programmazione con iniziare a fare lo sviluppatore?
E sì, perchè c'è una enorme differenza tra saper programmare ed essere uno sviluppatore. Ovviamente saper programmare è un requisito fondamentare per essere sviluppatore, ma non tutti quelli che sanno programmare sono anche sviluppatori. Cerchiamo di capire perchè!
Chi sa programmare non è necessariamente uno sviluppatore
Prima di tutto partiamo con un'analogia: io so scrivere, ma sicuramente non sono uno scrittore (al massimo un blogger 😅). Uno scrittore per il 90% del suo tempo probabilmente scrive, ma in realtà la sua vera skill non è tanto il fatto di saper scrivere o no (quella capacità la hanno praticamente tutti). Ciò che rende uno scrittore tale è la capacità di mettersi al computer e scrivere per ore, di progettare il proprio libro (sia creativamente in caso di romanzi ma anche in caso di saggi o libri tecnici).
Lo scrittore deve documentarsi, leggere tantissimi altri libri per crearne di nuovi che sono all'altezza, fare prove per capire cosa funzione e cosa invece non funziona, e dove migliorare. Queste sono le vere capacità di uno scrittore.
Una cosa molto simile succede per lo sviluppatore, e ci tengo particolarmente a questo aspetto perchè l'incomprensione tra saper programmare ed essere sviluppatore l'ho passata in prima persona quando ero in università.
Durante l'università mi sono appassionato tantissimo alla programmazione, tanto da mettere in dubbio il mio percorso in meccatronica durante il 2^ anno, e iscrivermi ad informatica (cosa che non ho fatto alla fine). Ad ogni modo programmavo e smanettavo con codice che richiedevano una conoscenza avanzata di programmazione, robot, microcontrollori e via dicendo. Mi consideravo uno sviluppatore (o robot developer come piaceva a definirci me e al mio socio Gabriele).
Però non avevo ancora sviuppato costanza e gli strumenti dello sviluppatore. I miei programmi e il mio codice non era mai pensato per essere eseguito per un tempo indefinito in modo corretto (adesso direi in produzione). Ma i miei erano progetti di ricerca avevano solo bisogno di dimostrare che concettualemnte una cosa si sarebbe potuta fare e avrebbe funzionato, oppure piccoli progettini personali che sarebbero stati spenti dopo qualche settimana.
Ho iniziato a capire la neccessità di costruire una serie di strumenti e abilità intorno alla programmazione durante i primi progetti reali con HotBlack Robotics (la mia società), quando l'approccio che avevo portato avanti fino a quel momento ha iniziato ad avere problemi nell'essere modificato.
La cosa che ho scoperto durante i primi incidenti dei miei progetti è che la parte veramente difficile dello sviluppare del software in modo professionale non è tanto la fase di scrittura e sviluppo in se, quindi il programmare, quanto lo scrivere un codice che sia mantenbile, facile da evolvere e robusto.
Perchè il vero problema del mondo software è che il software cambia nel tempo, non è una cosa, come credono in molti, che fai per 3/4 mesi, metti online quando e pronto e te ne dimentichi. Un progetto solitamente va online il prima possibile ma poi lo sviluppo continua con l'aggiunta di nuove feature, l'integrazioni e il cambiamento dei requisiti nel tempo che ti porta non solo ad aggiungere codice ma anche a modificare codice che già è stato scritto.
E il vero problema è che tenere la mente organizzata sul progetto sembra facile all'inizio, ma diventa praticamente impossibile dopo un certo periodo di tempo se non si adottano degli approcci per contenere questa esplosione di complessità.
Per non parlare di progetti a cui lavorano più di una persona e che quindi, per loro stessa natura, non sono mai completamente conosciuti da una persona sola. Ma anche se ci limitiamo a un progetto completamente sviluppato e mantenuto da una persona sola, il problema si pone comunque con l'aumento della complessità e con il tempo. Chiuque abbia provato a rileggere un programma anche semplice fatto da se stesso dopo qualche settimana, si sarà accorto che non ci capisce una cippa, anche se il programma è stato scritto dalla stessa persona.
Parti da un progetto, non da un linguaggio
Un'altro argomento che vorrei trattare è l'importanza di trovarci qualcosa da fare. Il mondo dello sviluppo software è complesso, e sicuramente imparare le regole di un linguaggio di programmazione senza applicarle non ci farà diventare sviluppatori.
Va bene studiare da un libro di introduzione a quel linguaggio, ma finchè non faremo qualcosa di pratico non saremo mai veramente degli sviluppatori, esattamente come una persona che fa ogni giorno esercizi di scrittura ma non lavora a nessun libro non sarà mai uno scrittore.
La primissima cosa che dobbiamo fare, indipendetemente dal linguaggio che abbiamo scelto, è trovare un progetto da fare che possa essere di impatto verso qualcuno. Per me è stata l'implementazione della prima versione di questo blog, per voi può essere qualsiasi altra cosa che possa esservi d'aiuto. L'importante è non limitarsi agli esercizi di programmazione da libri universitari e lanciarsi in qualcosa che abbiamo uno scopo preciso ed un po' di complessità.
All'inizio sarà difficile, e probabilmente non vi troverete a vostro agio e avrete la classica senzazione di non sapere da che cosa iniziare. Ma è proprio in questi momenti che abbiamo la più grande possibilità di crescere ed imparare.
Ok, ma se voglio essere uno sviluppatore? Da cosa inizio?
Dopo questa introduzione proviamo a rispondere alla domanda. Se quello che conta per uno sviluppatore non è tanto conoscere il linguaggio X o Y, dall'altra parte da qualcosa dovrà inizia per imparare. Abbiamo visto che non è importante il linguaggio specifico, quindi come facciamo a scegliere il linguaggio che è più adatto a noi per fare esperienza?
Secondo me ci sono due modi per scerglierlo, vediamo quali sono:
- Scegliamo il linguaggio con cui è più facile per noi trovare supporto;
- Scegliere il linguaggio dominante nel mercato che abbiamo puntato.
Linguaggio con cui è più facile per noi trovare supporto
Questo secondo è il modo migliore per imparare: se abbiamo la possibilità di chiedere aiuto e supporto a delle persone che sanno già programmare (come amici, parenti, ecc.), scegliamo il linguaggio che loro conoscono meglio.
Saranno molto più propensi ad aiutarci quando avremmo dei problemi e sarà molto ma molto più facile per noi imparare a fare i primi passi nel mondo dello sviluppo software. Ricordiamoci sempre che il linauggio è solo uno strumento, e mentre la curva di apprendimento del primo linguaggio di programmazione è molto lenta, ci accorgeremo che impararne ad usare un secondo e poi un terzo ecc. ecc. diventa via via molto più semplice.
Ogni linguaggio ha le sue caratteristiche e le sue particolarità, ma la sintassi, le regole base e il funzionamento non cambia troppo da un linguaggio all'altro. La cosa che dobbiamo fare è impararne uno il più velocemente possibile e poi andare avanti.
Linguaggio dominante nel mercato che abbiamo puntato
Se non abbiamo la possibilità di chiedere a qualcuno una mano, dobbiamo adottare un'altra strategia. Non è detto che sia facile da fare perchè solitamente è difficile sapere a priori in quale mercato inserirci se non conosciamo per niente il mondo della programmazione. Ma sappiamo ad esempio che vogliamo fare sviluppo web, allora lanciarsi su Javascript è sicuramente la cosa migliore da fare per noi, proprio perchè Javascript è il linguaggio più usato in questo mondo.
Se ci piace fare roba più a basso livello, ad esempio (come era per me a 13 anni) ci piace l'elettronica e non vogliamo solo scrivere codice ma anche saldare e smanettare con le breadboard, allora C/C++ è la scelta più sensata.
Se invece siamo interessati a come funziona l'intelligenza artificiale, allora Python è la scelta più adatta.
Conclusioni
Come avete visto la risposta alla domanda non è per niente scontata. Alla fine di questo post (o pippone) non vi ho indicato un linguaggio di programmazione da imparare ma una serie di metodi per scegliere la vostra strada.
Spero che questo post possa essere d'aiuto a qualcuno.
Fatemi sapere che ne pensate nei commmenti.