Guida Come scegliere un Linguaggio di Programmazione da cui iniziare

Zanzo

Utente Electrum
12 Febbraio 2011
314
13
125
161
Ultima modifica da un moderatore:
Sempre più spesso mi imbatto in utenti, sia sul forum che in privato, che chiedono "Qual è il miglior linguaggio di programmazione?", oppure "Quale linguaggio devo conoscere per realizzare [...]?". Per questo motivo ho deciso di stilare una piccola guida per orientare i newbie verso un linguaggio adatto a loro o semplicemente per avere un quadro generale.


Cos'è un linguaggio di programmazione?
Wikipedia ha detto:
Un linguaggio di programmazione, in informatica, è un linguaggio formale, dotato (al pari di un qualsiasi linguaggio naturale) di un lessico, di una sintassi e di una semantica ben definiti. È utilizzabile per il controllo del comportamento di una macchina formale o di una implementazione di essa (tipicamente, un computer) ovvero in fase di programmazione di questa attraverso la scrittura del codice sorgente di un programma ad opera di un programmatore.

Tutti i linguaggi di programmazione esistenti possiedono (almeno) questi due concetti chiave:

  • Variabile: un dato o un insieme di dati, noti o ignoti, già memorizzati o da memorizzare; ad una variabile corrisponde sempre, da qualche parte, un certo numero (fisso o variabile) di locazioni di memoria che vengono allocate, cioè riservate, per contenere i dati stessi. Molti linguaggi inoltre attribuiscono alle variabili un tipo, con differenti proprietà (stringhe di testo, numeri, liste, atomi ecc.).
  • Istruzione: un comando oppure una regola descrittiva: anche il concetto di istruzione è molto variabile fra i vari linguaggi. A prescindere dal particolare linguaggio però, ogni volta che un'istruzione viene eseguita, lo stato interno del calcolatore (che sia lo stato reale della macchina oppure un ambiente virtuale, teorico, creato dal linguaggio) cambia.



Qual è il miglior linguaggio per iniziare a programmare?
Non esistono criteri per affermare che un linguaggio è migliore di un altro, dipende tutto dal contesto in cui viene applicato. Personalmente consiglierei di iniziare col C per una serie di motivi che andrò ad illustrarvi:

  • Nonostante sia un tecnicamente un linguaggio di alto livello, possiede affinità semantiche e procedurali col linguaggio macchina e l'Assembly. Questo consente di apprendere contemporaneamente il linguaggio in sé e il modo in cui si relaziona con la vostra macchina.
  • Possiede un alto livello di efficienza, cioè può eseguire algoritmi, complessi e non, limitando al minimo l'utilizzo della CPU e lo spazio occupato in memoria.
  • Molti dei linguaggi di alto livello utilizzati oggi, come i più famosi C++, Java e PHP, hanno ereditato la propria sintassi dal C. In questo caso si parla di sintassi C-like, per cui un programmatore che già possiede buone basi con il suddetto linguaggio è avantaggiato nel comprendere la struttura di quello nuovo.
Se ancora non siete convinti, vi basta pensare al mercato delle app mobile, che si stanno diffondendo a macchia d'olio. Per lavorare su Android e iOS si utilizzano rispettivamente i linguaggi Java (in una versione modificata) ed Objective-C (una variante del C completamente ad oggetti), entrambi basati sul C.
Nota bene: Non vi sto ordinando di imparare perfettamente il C, ma di avere almeno un'infarinatura generale. Poi, se volete approfondire, siete liberi di farlo, di certo male non vi fa!

Un altro linguaggio ottimale per apprendere le basi della programmazione è Python. I suoi punti forti sono:

  • Possiede una versatilità veramente ottima. Grazie all'interprete di Python potete sia sviluppare applicazioni complesse lato client che realizzare degli script utilizzabili sui webserver. Il tutto avvalorato dal fatto che, essendo multipiattaforma, non avrete problemi di compatibilità.
  • Si basa sull'indentazione per delimitare istruzioni singole o in blocchi. Questo aspetto lo rende unico tra i linguaggi più diffusi ed è ottimo per imparare ad indentare sin dall'inizio (quando vi troverete a programmare applicazioni di vasta estensione gliene sarete veramente grati).
L'unica pecca di Python è che, essendo interpretato, può risultare lento se utilizzato per progetti di grandi dimensioni, per i quali sono consigliati i linguaggi compilati.


Quali sono i linguaggi consigliati per sviluppare un videogame?
Il campo dei videogames è in continua ascesa. Negli ultimi vent'anni questa industria ha subito una notevole crescita, grazie all'avanzamento delle tecnologie di sviluppo e alla riduzione dei tempi (tralasciando Watch Dogs :asd:). Oggi i motori grafici fanno cose che qualche anno fa sarebbero state ritenute impensabili. Ma lasciamo stare questo argomento e torniamo a parlare di programmazione.
Per sviluppare un buon gioco ci occorre un engine grafico, e per utilizzare un engine grafico dobbiamo conoscerne le librerie. I più diffusi sono:

  • Unity3D è un motore grafico multipiattaforma sviluppato da Unity Technologies. E' programmato attraverso vari linguaggi, tra cui C++, C#, JavaScript e Boo (quest'ultimo è un linguaggio Open Source ispirato a Python, compatibile con la piattaforma .NET e Mono). E' rinomato per la portabilità, dato che può produrre eseguibili compatibili con la maggior parte delle piattaforme attuali.
  • Unreal Engine, sviluppato da Epic Games, è a mio parere l'engine più avanzato attualmente in circolazione ed è scritto interamente in C++. La risoluzione visiva di questo motore grafico non ha eguali.
  • CryENGINE, giunto alla versione 3, è meno utilizzato dei primi due ma non ha nulla da invidiare in quanto a portabilità e rendering. Anch'esso è scritto in C++.
Di sicuro avrete intuito che i linguaggi più gettonati per lo sviluppo dei videogiochi sono C++ e C#. Questo perchè sono linguaggi estremamente potenti e con un alto tasso di efficienza (sono molto veloci, caratteristica indispensabile nei videogames).
Il mio consiglio è di intraprendere la strada del C++. Quest'ultimo è un linguaggio che supporta il paradigma Object-Oriented ed è utilizzato inoltre in molti altri progetti, come il client FTP FileZilla, il browser Chromium (su cui è basato Google Chrome) o il software VoIP TeamSpeak.
In alternativa potete sviluppare giochi nativi utilizzando la tecnologia HTML5.


Voglio creare un Social Network, quali linguaggi mi servono?
Qui entriamo nel campo della programmazione web. Essa include la struttura delle pagine, realizzata tramite il linguaggio di markup HTML e il linguaggio di stile CSS, e la dinamicità delle stesse. Quest'ultimo aspetto può essere realizzato impiegando un linguaggio di scripting lato server, tra cui i più famosi PHP e ASP.NET. Analizziamoli singolarmente:

  • PHP (PHP: Hypertext Preprocessor) è un linguaggio di programmazione interpretato lato server, che permette di rendere dinamiche le proprie pagine. E' un software libero, per cui il sorgente dell'interprete è consultabile da chiunque. Forte di una raccolta di circa 5000 funzioni (in costante aumento) e del supporto al paradigma Object-Oriented, PHP è il linguaggio più utilizzato per produrre webapp. Gli altri suoi punti di forza sono il fatto che è presente sulla stragrande maggioranza dei web server e che la comunità degli utilizzatori invia continuamente feedback relativi ai bug e alle modalità di utilizzo, rendendolo uno dei linguaggi più documentati.
  • ASP.NET (Active Server Pages basate sul framework .NET) è una tecnologia di sviluppo di pagine web dinamiche. Grazie al framework Microsoft .NET è possibile scriverle in un qualunque linguaggio supportato da quest'ultimo, come C#, VB.NET o J#. Rispetto ai normali linguaggi di scripting, ASP.NET è significativamente più veloce, grazie al fatto che l'intero codice viene raccolto in una o più librerie .dll che vengono precompilate dal web server.


Questo è tutto. Non ho l'ambizione di definirla una guida, ma semplicemente uno schema atto a semplificare la scelta di un linguaggio, tramite una panoramica più o meno completa. In seguito aggiungerò nuove informazioni.
Se avete domande o pensate che abbia commesso qualche errore rispondete pure ;)

Per informazioni sui linguaggi di programmazione:
[GUIDA] Guida ai linguaggi di programmazione (di Elysium)
 

Mammon

Utente Platinum
3 Gennaio 2013
1,935
148
410
935
A finale, anche se i linguaggi sono molti le scelte ricadono sempre sugli stessi in base ai propri obbiettivi. Non capisco perché la gente lo trova cosi difficile decidere :\
 

TheSeeker

Utente Emerald
17 Aprile 2014
1,638
47
424
586
Se riusciste a creare una guida che comprenda la tua, le due di LordRevenant e quella di Maestro Yoda (con le guide e i libri) uscirebbe una figata... comunque ottima guida :)

Inviato dal mio HUAWEI G510-0100 utilizzando Tapatalk
 

</Singh>™

Utente Palladium
8 Marzo 2013
5,572
146
1,706
1,448
@Mammon fa fatica poichè è inesperta

Fai una richiesta a un programmatore esperto che ci mette 2 secondi a scegliere il linguaggio più adatto( o a consigliarne uno) per fare quella determinata cosa.
 

Zanzo

Utente Electrum
12 Febbraio 2011
314
13
125
161
@Mammon fa fatica poichè è inesperta

Fai una richiesta a un programmatore esperto che ci mette 2 secondi a scegliere il linguaggio più adatto( o a consigliarne uno) per fare quella determinata cosa.
Beh non è proprio così, molti linguaggi possono essere usati per ottenere lo stesso risultato senza che nessuno di loro prevalga... Diciamo che bisogna prima informarsi su cosa esattamente si vuole sviluppare, la tipologia, fare una ricerca su quali sono gli strumenti più indicati. Per esempio, se voglio programmare un gioco per Windows posso benissimo imparare il C# che è portabile e compatibile con Unity3D, oppure il C++ che invece è più adatto ad Unreal. Dipende molto da cosa hai intenzione di fare, poi nessuno
ti vieta di impararne svariati e alternarli mano a mano a seconda delle necessità, anzi, è preferibile avere una cultura estesa ;)

Piccola aggiunta, sono tornato dopo un periodo di inattività e presto aggiungerò ed integrerò il tutorial con nuovi elementi.
 

</Singh>™

Utente Palladium
8 Marzo 2013
5,572
146
1,706
1,448
Beh non è proprio così, molti linguaggi possono essere usati per ottenere lo stesso risultato senza che nessuno di loro prevalga... Diciamo che bisogna prima informarsi su cosa esattamente si vuole sviluppare, la tipologia, fare una ricerca su quali sono gli strumenti più indicati. Per esempio, se voglio programmare un gioco per Windows posso benissimo imparare il C# che è portabile e compatibile con Unity3D, oppure il C++ che invece è più adatto ad Unreal. Dipende molto da cosa hai intenzione di fare, poi nessuno
ti vieta di impararne svariati e alternarli mano a mano a seconda delle necessità, anzi, è preferibile avere una cultura estesa ;)

Piccola aggiunta, sono tornato dopo un periodo di inattività e presto aggiungerò ed integrerò il tutorial con nuovi elementi.
Ho specificato un programmatore esperto che sà subito se gli dici di fare un giochino in c# di usare unity.. Al posto di un newbie che prima di tutto deve capire cos'è c# e poi cos'è unity.
Non so se mi spiego
 

Zanzo

Utente Electrum
12 Febbraio 2011
314
13
125
161
Ho specificato un programmatore esperto che sà subito se gli dici di fare un giochino in c# di usare unity.. Al posto di un newbie che prima di tutto deve capire cos'è c# e poi cos'è unity.
Non so se mi spiego
Beh, da come l'hai scritto tu intendevi un linguaggio, non un motore. Si presupponeva che il "newbie" non conoscesse il significato di C#
 

</Singh>™

Utente Palladium
8 Marzo 2013
5,572
146
1,706
1,448
Beh, da come l'hai scritto tu intendevi un linguaggio, non un motore. Si presupponeva che il "newbie" non conoscesse il significato di C#
Anche se lo conoscesse non ha la competenze/conoscenze per dire che quel linguaggio è adatto per fare X cosa rispetto a un altro linguaggio e qui rimane in confusione su quale scegliere. Un programmatore esperto beh...si può dire che è onniscente sul campo
 

TheSeeker

Utente Emerald
17 Aprile 2014
1,638
47
424
586
Anche se lo conoscesse non ha la competenze/conoscenze per dire che quel linguaggio è adatto per fare X cosa rispetto a un altro linguaggio e qui rimane in confusione su quale scegliere. Un programmatore esperto beh...si può dire che è onniscente sul campo
È un mio pensiero, io penso che ci sono sempre delle preferenze e il newbie deve assolutamente farsi una sua idea, per fare un esempio pratico, mettiamo io volessi sviluppare un sito web dinamico che non pretende molto, questo potrebbe essere sviluppato con successo sia usando PHP che usando Python o Ruby o Java, ora un programmatore PHP consiglierebbe ovviamente il PHP argomentando che quest'ultimo è più facile da imparare e non necessita di framework (dovrebbe spiegargli anche cosa sono ^^') mentre un programmatore Python consiglierebbe Python argomentando che quest'ultimo è più facile da imparare e che ha frameworks leggeri e ottimi per imparare (vedi Flask).

Ovviamente il newbie per farsi un'idea ha bisogno di ascoltare entrambe le parti, non solamente una delle due.