Purtroppo, spannometricamente parlando, se sei “alle prime armi”, per diventare un “programmatore professionista” e' un po' tardi.
I motivi sono diversi:
- supponendo che l'eta' non sia un problema eccessivo, ma che tu venga assunto come “programmatore junior”, gli stipendi sono “ridicoli”
- molto probabilmente, senza un percorso di studi “specifico”, ti mancano moltissimi concetti che al giorno d'oggi sono e' “obbligatorio” sapere
- le tecnologie con cui avrai a che fare sono diventate mooolto sofisticate anche per le cose piu' semplici ed, onestamente parlando, stanno diventando un po' complicate da seguire ANCHE per chi e' del mestiere e lavora 8ore/giorno 5giorni/settimana 45/settimane/anno
.
Poi c'e' il problema dell'acquisire quel corpo di competenze “necessario” per sapere come far le cose “bene” al primo/secondo tentativo. Per questo NON BASTA lo studio ma serve esperienza. Anche qui, “spannometricamente parlando” servono almeno 5 anni. 10 e' meglio ANCHE SE molto spesso, se uno non approccia questo mestiere con il giusto atteggiamento mentale, nemmeno 10 anni potrebbero essere sufficienti.
E siamo arrivati a 55 anni.
Diciamo che a questa eta' si inizia ad accedere a stipendi non particolarmente “ridicoli”. Direi che a 10 anni dalla pensione, non ne vale molto la pena.
MA
per un utilizzo amatoriale della programmazione, non ci sono limiti.
Inoltre, ti puoi concentrare sul settore di tuo interesse INVECE che in quello dell'azienda che nel 99.9999% dei casi e' interessante per l'azienda SOLO per i soldi, NON per le cose intelligenti che si fanno. Queste RARAMENTE sono “intelligenti” ;-)
Per quanto riguarda i linguaggi di programmazione, ne esistono a MIGLIAIA.
Quelli per i quali esiste un “ecosistema” completo, formato da una ricca bibliografia, social network che li supportano, strumenti di sviluppo ben “rodati”, ed vaste collezioni di “componenti” gia' pronti, sono qualche decina.
La scelta tra questi DIPENDE da che cosa uno vuole/deve fare: un linguaggio di programmazione, ANCHE se “general purpose” (di uso generale), ha un suo “dominio” di applicazione ben specifico, ed una sua “filosofia”
Se vuoi e' come la differenza di un'automobile a benzina, diesel o elettrica: benche' tutte siano automobili, ogn'una funziona bene per un certo utilizzo, male negli altri.
Una PRIMA lista potrebbe essere questa:
- C/C++: implementazione di algoritmi MOOOOOLTO efficienti, ma il linguaggio di programmazione e' MOLTO complicato. NON e' solo um problema di sintassi. Se uno guarda la sintassi del C, sembra un linguaggetto abbastanza “stupidino”. Ma con tale linguagetto “stupidino” ci scrivono i Sistemi Operativi dei computer, delle sonde spaziali, ecc, cioe' i software piu' sofisticati esistenti
- Java: implementazione di algoritmi, applicazioni “desktop”, lato “server” di applicazioni per il web, applicazioni “server” anche di grandi dimensioni. Linguaggio molto simile al C++, con molte semplificazioni e molte estension. MOOLTO ricco
- Javascript: lato “client” per applicazioni per il “web” ed ultimamente ANCHE lato “server”. Non molto efficiente MA il suo dominio di utilizzo NON RICHEDE efficienza ma “trasportabilita”, visto che deve girare su QUALUNQUE browser, da quello del cellulare a quello dei computer desktop
- Python: NON molto efficiente (anzi, proprio per niente ;-) ), implementazione di SEMPLICI algoritmi MA il suo ecosistema offre possibilita' INFINITE. Ad esempio e' usato ESTENSIVAMENTE in ambito Machine Learning, quello che ultimamente chiamano, “erroneamente”, Intelligenza Artificiale.
Giusto un nota: Python fa da “collante” tra cose scritte in C/C++. Sono QUESTE ULTIME che fanno le cose VERAMENTE complesse/interessanti ;-)
.
Poi c'e' la questione “filosofica”, cioe' usando termini tecnici, il “paradigma di programmazione”.
Tu ne hai visto probabilmente SOLO 2: “procedurale” e “ad oggetti”.
NON SONO gli unici MA ne esistono altri.
ALCUNI di questi DEVONO essere conosciuti da un “buon programmatore professionista” perche' IMPORTANTI in specifici ambiti di utilizzo.
.
OVVIAMENTE questa e' solo una NANOSCOPICA intriduzione sull'argomento.
.
SENZA sapere che uso ne vuoi fare, SE vuoi iniziare a “pasticciare” arrivando a risultati concreti, SEMPLICI, MA soddisfacenti, in tempi “ragionevoli”, il consiglio e':
- inizia con Python. E' un linguaggio con una sintassi un po' strana (mi ci e' voluto un po' per farci l'abitudine, e tutto sommato non ci sono ancora riuscito ;-) ) MA ti evita un'infinita' di dettagli abbastanza ostici.
Se uno lo vuole usare in modo “avanzato” ci si possono fare delle cose ESTREMAMENTE intelligenti/interessanti - studiati ALGORITMI e le STRUTTURE DATI
.
Una delle “stupidaggini” che cercano i “programmatori in erba” e' scrivere “algoritmi efficienti”, concentrandosi su dettagli ASSOLUTAMENTE INSIGNIFICANTI.
L'efficienza di un algoritmo NON SI MISURA nel risparmio di qualche microsecondo su qualche istruzione,
MA
se invece di stare 60 minuti per fare qualcosa, ne sta' SOLTANTO 6!
Oppure invece di stare 1440 minuti (24 ore), ne sta' SOLTANTO 10 (di minuti)! Giusto per chiarire, e' lo stesso algoritmo di prima in cui il numero di oggetti da processare e' aumentato di un fattere 24 (invece di 10, 240!) MA il tempo e' aumentato di SOLI 4 minuti! !
Questa e' la differenza tra un algoritmo con “complessita O(N)” (cioe' il tempo aumenta in modo lineare con il numero di oggetti da processare) E un algoritmo con “complessita O(log(N))” (il tempo aumenta in modo proporzionale al LOGARITMO del numeri di oggetti da processare).
QUESTA e' EFFICIENZA. E scoprire/scrivere algoritmo “efficienti” e' “un'arte” ;-)
Per il “programmatore quadratico medio”, comunque, NON DEVE scoprirli o implementarli, ma DEVE SAPERE che esistono in modo da sapere quando utilizzarli.