Tuesday, September 28, 2010

Le risposte al programmatore principiante

Spesso mi è capitato di rispondere via mail a giovani appassionati di computer che vogliono entrare nel mondo della programmazione (in particolare in merito al linguaggio Pascal). Quasi sempre le domande sono simili e in questo post voglio fornire le risposte in base alla mia esperienza, ma soprattutto in base a link "autorevoli" provenienti dalla rete.

In generale, le domande che mi arrivano ed alcune delle domande che un programmatore principiante si pone sono le seguenti:

1) a cosa serve il linguaggio Pascal?
2) tu che linguaggio usi per programmare?
3)
che linguaggi devo imparare per essere un programmatore?
4)
in che ordine devo imparare i vari linguaggi?
5)
come si fa a diventare hacker ?
6)
che linguaggi devo imparare per diventare hacker?
7)
che cos'è e a cosa serve Linux?
------------------------------------------------------------------------------------

RISPOSTE

1) A cosa serve il linguaggio Pascal?

Un link abbastanza esaustivo è semplicemente questo.
Essendo un linguaggio pensato per degli utenti inesperti, spesso i compilatori Pascal hanno un atteggiamento materno nei confronti del programmatore, partendo dal presupposto che qualunque irregolarità del codice scritto sia un errore, che infastidisce un po' gli esperti. In cambio è un linguaggio completo e potente, e soprattutto educa fin dall'inizio ad adottare un buono stile di programmazione e ad analizzare a fondo il problema prima di cominciare a scrivere il codice, cosa che rende i programmi Pascal più chiari e più facili da leggere.
Dal mio punto di vista si tratta di un linguaggio molto semplice per entrare nel mondo della programmazione ed è, appunto, uno strumento più che altro didattico. Nella realtà credo di non aver mai visto applicazioni moderne che fanno uso di "pezzi" di codice in Pascal.
Una guida per iniziare a capire come funziona la programmazione in questo linguaggio è questa.

2) Tu che linguaggio usi per programmare?

Questa è una classica domanda a cui si risponde: dipende. Non esiste un linguaggio universale per fare tutto. Piuttosto esistono più linguaggi che si adattano meglio o peggio a seconda del problema da risolvere. Così se si vuole programmare un gioco moderno, per esempio, si opta per il linguaggio C++, Java o Python (oppure esistono tante altre opzioni); se si vuole programmare la logica sottostante ad un sito web complesso si usano linguaggi di scripting come PHP, ASP, .NET, JavaScript, ecc.
Se si tratta di un problema generico/semplice, praticamente tramite tutti i linguaggi attuali è possibile risolverlo. Ma se il problema abbraccia diverse tematiche/ambienti ecc. è utile e opportuno scegliere il linguaggio migliore per risolverlo.
Quindi quando io programmo il linguaggio che utilizzo dipende strettamente dal problema da risolvere.

3) Che linguaggi devo imparare per essere un programmatore?

A mio avviso, didatticamente parlando, i linguaggi fondamentali sono C e C++, ai quali si può successivamente aggiungere Java o Python.
Per un elenco sempre aggiornato dei linguaggi fondamentali, professionalmente parlando, l'azienda TIOBE (che si occupa di qualità del software) offre questa graduatoria che ormai è una sorta di cult link nel mondo della programmazione professionale.
Altri link interessanti sono i seguenti:
How to be a programmer: a short, comprehensive, and personal summary
How to become a programmer
Teach yourself programming in ten years.

4) In che ordine devo imparare i vari linguaggi?

Innanzitutto, per fare le cose perbene, si dovrebbe partire da un linguaggio semplice e didattico come il Pascal, il BASIC, il Delphi oppure con le nozioni fondamentali del Python. Io ho iniziato col Pascal che è davvero intuitivo e facile.
Successivamente un percorso ottimale sarebbe quello di imparare in maniera approfondita e in successione
C, C++ e Java. Questi ultimi due hanno molte caratteristiche in comune e non è "traumatico" passare dall'uno all'altro.
A questo punto, si avranno le basi complete per imparare più o meno tutti gli altri linguaggi che servono nel mondo informatico e si può avviare una fase di specializzazione. Per esempio, se si vuole tendere all'ambito della sicurezza informatica avanzata, oppure all'analisi dei driver, ecc. inevitabilmente si dovranno conoscere linguaggi come assembly; oppure se si è orientati all'ambiente web, si dovranno approfondire i linguaggi di scripting. Di ambiti ce ne sono tanti e per ogni ambito esistono decine di linguaggi, c'è solo l'imbarazzo della scelta.

5)
Come si fa a diventare hacker?

Domanda classica del principiante. Io non mi ritengo affatto un hacker (termine dal multiforme significato) e, in ogni caso, per una trattazione completa ed accattivamente su come diventarlo rimando ad una guida famosa che è la seguente:
How to become a hacker scritta da un vero hacker, ossia Eric Steven Raymond. Esiste anche una traduzione in italiano.
[...] L'atteggiamento dell'hacker: 1. Il mondo è pieno di affascinanti problemi che aspettano di essere risolti. [...]
6)
Che linguaggi devo imparare per diventare hacker?

Vedi la guida della domanda precedente.

7)
Che cos'è e a cosa serve Linux?

In parole povere un sistema operativo è il software alla base di un computer. Al di sotto di tutto quello che quotidianamente si usa e si vede durante l'interazione con un computer, esiste un complesso software di gestione, controllo, ecc. che è appunto il sistema operativo.
Windows è un sistema operativo creato dalla Microsoft e le cui versioni famose degli ultimi anni sono Windows XP, Windows Vista, Windows 7.
Linux è il nucleo fondamentale (creato da Linus Torvalds nel 1991) di un sistema operativo libero di tipo Unix. L'argomento trattato in maniera completa e precisa è disponibile qui.
Da questo nucleo fondamentale sono venute fuori una serie innumerevole di distribuzioni, ossia di "versioni personalizzate" di sistemi operativi create da vari gruppi di programmatori. A loro volta le distribuzioni hanno diverse versioni e nomi in codice. Attualmente le distribuzioni più diffuse sono: Ubuntu, Fedora, Mint e OpenSuse (per un elenco completo e aggiornato vedi qui). In questo momento io uso Ubuntu 9.10 (code name: karmic koala).
Non è necessario installare e usare una distribuzione Linux per essere un programmatore (o un hacker). Tuttavia è una cosa assolutamente interessante e coinvolgente, soprattutto perchè, essendo Linux un sistema aperto, è possibile vedere/ritoccare in maniera profonda praticamente tutte le parti del sistema ogni volta che si vuole (interagendo attraverso la programmazione in vari linguaggi). Tuttavia i sistemi operativi sono un argomento avanzato che non andrebbe affrontato prima di aver creato una solidissima base di programmazione e di conoscenze informatiche.

AddToAny