jump to navigation

Imparare a programmare January 31, 2006

Posted by laspinanelfianco in Programmazione.
trackback

Fino a qualche anno fa, programmare era un mestiere rivendibile, a volte persino ben pagato. Dal 2001 a questa parte le cose sono molto cambiate, sia a causa dell’esplosione della bolla speculativa sulla new economy che per altre ragioni. Come conseguenza di questo, ora farei molta fatica a consigliarvi di imparare a programmare (od a fare molte altre cose legate all’informatica) come attività di “sviluppo della professionalità personale”. Tuttavia, c’è ancora una ragione molto seria per cui dovreste imparare a programmare un computer se ancora non lo sapete fare: è il modo migliore per capire, una volta per tutte, come funziona un computer dietro le quinte. Dato che dovrete comunque avere a che fare con questi diabolici aggeggi, conquistare questo grado di conoscenza è comunque un vantaggio.

Ma come si impara a programmare? Quale linguaggio è meglio usare? Su quale piattaforma? E con quale ambiente di sviluppo? Qui di seguito trovate le mie personalissime risposte a queste domande.

Come si impara a programmare

Orientativamente, la procedura “corretta” è la seguente.

  1. Si decide su quale piattaforma si vuole lavorare, con quale linguaggio e quale ambiente di sviluppo (vedi sotto).
  2. A computer rigorosamente spento (meglio se dovete ancora comprarlo), si legge (senza studiarlo) un manuale introduttivo adeguato. Lo scopo di questa operazione è quella di farsi una prima idea di massima dell’ambiente che si deve affrontare.
  3. A computer acceso, si comincia con scrivere qualche semplice esercizio fornito dal libro, diciamo i primi 2 o 3.
  4. Una volta capito come si tratta un piccolo programma di 10 o 12 righe, si cerca di sviluppare un piccolissimo programma di propria progettazione, diciamo un aggeggino che apre un file di testo, sostituisce tutte le ricorrenze di “governo” con “manica di ladri” e salva nuovamente il file, magari con un nuovo nome.
  5. Una volta capito come si costruisce un programmino generico come questo, si torna sui libri, questa volta su un manuale più serio e più approfondito. Lo scopo è quello di cominciare a conoscere la piattaforma su cui si sta lavorando (vedi sotto).
  6. Ci si sceglie un “tema” (interfacce grafiche, networking, text processing, quello che vi pare) e si cerca di sviluppare un programma di quel tipo.
  7. Da qui in poi, solitamente, si è in grado di procedere da soli.

Tutto questo almeno in teoria. In realtà, ogni programmatore segue una propria strada per imparare. Pensare che una strada sia migliore di un’altra sarebbe segno di stupidità e di intolleranza. Sentitevi liberi di fare come vi sembra meglio.

Quale linguaggio

Sto per dire una cosa per cui verrò scorticato vivo ma devo comunque dirvela: ci sono alcuni linguaggi che, in questa prima fase della vostra carriera di programmatori, dovreste evitare accuratamente. Li elenco qui di seguito, spiegando il motivo per cui non dovreste usarli.

Basic (e soprattutto M$ Visual Basic): Viene suggerito agli utenti alle prime armi dicendo loro che è “semplice”. Nella realtà è molto più complesso ed irregolare di altri linguaggi e, nel caso di Visual Basic è molto, molto più complicato del necessario (e del ragionevole) a causa della costruzione delle interfacce grafiche (GUI), da cui non è praticamente possibile prescindere. Come se non bastasse, permette di fare la stessa cosa in molti modi diversi. Questo vuol dire che una persona che legge il codice di un’altra spesso non riesce a capire cosa faccia quel codice a causa delle diverse “abitudini” di programmazione. Persino la stessa persona, che rilegga il proprio codice a distanza di settimane o di mesi, può trovarsi in difficoltà. (In realtà, in VisualBasic si possono creare programmi privi di interfaccia grafica ma tutta la pressione dell’ambiente tecnico/sociale del VB va verso la creazione di programmi GUI-based.)
Perl: Valgono tutte le considerazioni appena fatte per il Basic. Per fortuna, Perl non vi obbliga da subito a trattare con le interfacce grafice.

Java: Java è molto semplice ed elegante, al punto che viene largamente utilizzato nelle scuole superiori e nelle università per insegnare a programmare. Tuttavia, devo sconsigliarvelo (anche se siete professori e lo usate per insegnare!). Il motivo è che Java costringe il programmatore ad organizzare il codice in maniera piuttosto fiscale ed innaturale (una classe per ogni minima cazzata, un file per ogni classe, un archizio compresso per ogni progetto, etc.) e questo introduce nel discorso “programmazione” un elemento di “gestione del file system” che francamente non è proprio necessario. Ci sono linguaggi, come Python, che offrono gli stessi vantaggi di chiarezza ed eleganza e non rompono i coglioni in questo modo.

La mia personalissima e discutibilissima opinione è, che per cominciare (ed anche “per finire”), dovreste usare Python.

Python: Python è un linguaggio molto simile a Java ma che non impone nessuna delle follie organizzative di Java. Python è talmente semplice ed elegante che viene largamente ritenuto dagli specialisti “il” linguaggio con cui insegnare a programmare (o con cui imparare a programmare da soli). Python è molto simile a C, il linguaggio più usato in assoluto per la programmazione professionale, e quindi è un ottimo modo di prepararsi alla carriera da professionista.

In ogni caso, tutti i linguaggi che abbiamo citato sono linguaggi interpretati: i programmi che si possono scrivere con questi linguaggi richiedono l’interprete installato sulla macchina per l’esecuzione. Non possono funzionare da soli. In altri termini, un programma Python deve essere lanciato in questo modo:

python mioprogramma.py parametro1 parametro2

Non può essere lanciato senza l’interprete, in questo modo:

mioprogramma.py parametro1 parametro2

(Questo non è del tutto vero ma per il momento fate finta che lo sia). Questo comporta un vantaggio ed uno svantaggio: il vantaggio è che il vostro programma gira dovunque sia disponibile l’interprete, lo svantaggio è che è leggermente più lento di un programma C. Un programma Python può essere scritto ed eseguito su queste piattaforme:

  • Windows (tutte le versioni)
  • McOS (Tutte le versioni)
  • Unix (Tutte le versioni)
  • Linux (Tutte le versioni)
  • BSD (Tutte le versioni)

Non pensiate che Python sia un linguaggio per studenti o che sia in qualche modo limitato: dispone delle librerie necessarie per trattare qualunque (dico proprio qualunque) problema che si possa presentare nella vita professionale, dalla creazione di interfacce grafiche con vari toolkit su qualunque (ripeto qualunque) piattaforma fino alla creazione di interpreti di linguaggi. Python viene usato da molti anni da schiere di programmatori professionali che con esso hanno creato una moltitudine di programmi di ogni tipo, alcuni dei quali sono persino dei successi commerciali (come Komodo di theKompany). Da ogni punto di vista, è un rispettabile linguaggio di programmazione professionale come il C, solo che è interpretato.
Quale piattaforma

Quasi certamente state usando Windows, in una delle sue molte versioni. Lo posso dire con una buona probabilità di prenderci perchè Windows occupa ben il 93% del mercato. Restate fedeli a Windows, se vi trovate bene.

Se non vi trovate bene con Windows, passate a Linux o BSD (FreeBSD, OpenBSD o NetBSD). Questo vi costerà un po’ di fatica ma ne vale la pena.

Se siete fortunati possessori di un MacIntosh, restategli fedeli. Se non ne possedete uno, non fate la voglia inutilmente: installate Linux conKDE o Gnome e non pensateci più.

La piattaforma sui cui è in assoluto più semplice e più gradevole programmare è probabilmente Linux, per molte ragioni. Tuttavia, tenete presente che su Windows e su MacIntosh sono disponibili degli ambienti di sviluppo veramente molto raffinati e molto avanzati che su Linux non sono disponibili, in particolare, su Windows è disponibile (a pagamento) il fantastico ambiente “Visual Studio” di M$.

Quale ambiente

L’ambiente di lavoro, noto come IDE (Integrated Development Environement) è un programma che include tutto il necessario per scrivere codice e che, soprattutto, si occupa della manutenzione dei “progetti” (l’insieme dei file che scrivete). Un buon IDE può semplificare di molto la vita ad un programmatore, soprattutto se inesperto (o terribilmente pigro, come me).

Su Windows, lo abbiamo detto, esiste la Rolls-Royce degli IDE: il gigantesco, potentissimo e raffinato “Visual Studio” di M$. Costa come uno scooter, e nei primi 3 mesi vi farà impazzire, ma può valere la pena imparare ad usarlo se pensate di programmare a livelli non solo dilettanteschi.

Ambienti come questi esistono anche su MacIntosh ma per questo dovete chiedere consiglio a qualcuno che usa MacIntosh. Io non ho pratica di questo ambiente.

Su Linux (e su tutti gli Unix) sono disponibili vari ambienti di sviluppo molto raffinati, tra cui il mitico “meta-IDE” “Eclipse” di IBM ed il raffinato “KDevelop” di KDE. Sono tutti piuttosto validi.

Il mio personalissimo consiglio è che stiate alla larga dagli IDE per i primi mesi e vi limitate ad usare un editor di testo (NotePad o simili). Dopo aver capito come si programma, provate i due o tre IDE più diffusi nel vostro ambiente e scegliete quello che vi piace di più.

Personalmente, ne ho provati diverse dozzine nell’arco di molti anni ed alla fine ho deciso di usare… KEdit di KDE (Su Linux), un piccolo e scarno editor di testo simile a NotePad di MS Windows.

Altri consigli

Non lavorate da soli: se vi è possibile, cercate di lavorare con un amico od almeno iscrivetevi ad una mailing list di programmatori e restate in contatto con loro.

Non ponetevi obiettivi prima di 6 mesi: lo so che fremete dalla voglia di fare qualcosa di vostro ma cercate di avere pazienza. Ci vuole un po’ di esperienza prima di maturare la competenza necessaria per mettere in cantiere un progetto orginale. Tentare di farlo prima del tempo può portarvi ad un fallimento frustrante e farvi passare la voglia di imparare.

Tenete presente che qualunque progetto di un qualche interesse reale richiede molto, a volte moltissimo lavoro e quindi sarete quasi certamente costretti a trovarvi almeno un compagno di avventura.

Leggete molto: gran parte del problema della programmazione è in realtà un problema legato alla conoscenza della piattaforma (Windows o Linux) e delle tecniche di programmazione specifiche dei vari ambienti (text processing, GUI, networking). Per questo è importante leggere molto.

Il modo in cui si studia in informatica è qualcosa che probabilmente farebbe inorridire molti professori di fisica o di matematica ma per fortuna è molto piacevole: si tratta quasi sempre di curiosare nei libri e nei siti web seguendo il filo delle proprie esigenze, senza farsi problemi di organicità delle conoscenze apprese. Rovistate dentro il web senza farvi troppi problemi e fate qualche esperimento pratico. Dopo poco vi renderete conto da soli di cosa vi serve e di come dovete organizzare le vostre conoscenze.
Questo è tutto. Nella pagina “libri” troverete presto qualche titolo interessante per approfondire.

Comments»

1. danix - February 1, 2006

grazie mille. Per me è un incoraggiamento sentire quest parole. Io hocominciato a programmare in pythonlo scorso e devo davvero dire e sottolineare che studiare da solo è abbastanza noioso e difficile.

2. laspinanelfianco - February 1, 2006

Lavorare a piccoli gruppi (2 o 3 persone) non è solo un mio consiglio personale ma è anche uno degli elementi chiave della strategia di sviluppo software a livello professionale più quotata del momento: l’extreme programming.

Puoi trovare tutte le informazioni del caso a queste URL:

http://en.wikipedia.org/wiki/Extreme_programming
http://c2.com/cgi/wiki?ExtremeProgramming
http://www.extremeprogramming.org/

3. Paolo - February 2, 2006

Ciao, sono un ex programmatore che ora si occupa d’altro ma che fra gli hobby mantiene anche quello di scrivere qualche riga di codice. Programmo in C, PHP, Delphi, Python, Perl, Visual Basic e qualche altro ancora.
Condivido molte delle cose del tuo articolo, soprattutto quelle riguardanti il non usare un IDE quando si muovono i primi passi nel mondo degli algoritmi. Con un’unica eccezione: Delphi. Poco costoso (anzi con free pascal e lazarus è gratuito), elegante, tipizzato ed ordinato.
Volevo aggiungere altre due cose (se non rompo troppo). Dato che il tuo è un articolo rivolto ai principianti forse spendere due parole su quale toolkit grafico per pytoon è più semplice da usare.

Riguardo ai libri citerei sicuramente alcuni libri di vecchia data:
Niklaus Wirth: Algoritmi+strutture dati = programmi
e alcuni di quelli dell’inarrivabile Donald Knuth (il mitico creatore del TeX… l’unico programma le cui versione vanno con le cifre di pi greco: 3 – 3.1 – 3.14 eccc)

Ciao e continua così con questo blog!

4. laspinanelfianco - February 2, 2006

Mi fa piacere che qualcuno citi il bellissimo libro di Niklaus Wirth, in assoluto uno dei più chiari e dei più appassionanti testi di programmazione che abbia mai letto.

Per quello che riguarda i toolkit grafici, Python può pilotare quasi qualunque toolkit esistente, da MS MFC, a Qt (KDE), a GTK (Gnome), a FLTK a wxWidgets.

Personalmente uso QT/KDE (via PyQT e PyKDE) e wxWidgets. Di questi preferisco wxWidgtes perchè è veramente libero ed open source. Non è improbabile che ne parli in qualche articolo futuro.

Consiglio a tutti di tenere d’occhio anche C# e Mono.

5. Paolo - February 2, 2006

Anche io uso wxWidgets. RIguardo C# ammetto di averci dato un’occhiata senza approfondire: mis embra comunque che sia una buona soluzione per evitare da un lato la complessità del C++ e dall’altro l’eccessivo formalismo di Java. Fra l’altro ora con Csharpdevelop ci si può risparmiare qualche euro.

6. Yuri - February 3, 2006

Bell’articolo. Ma vorrei fare un appunto. Sono ben conscio delle “pressioni di produzione” a cui uno sviluppatore è sottoposto (). Ma per chi è alle prime armi, perché non fargli studiare un po’ di teoria?
Da questo punto di vista vorrei suggerire il libro di Dijkstra (l’autore di un algoritmo dei cammini minimi da sorgente singola) “A discipline of programming” che illustra e guida il lettore in un nuovo modo di programmare: programmare correttamente (nel senso della correttezza formale dell’output). Mi rendo conto che magari potrebbe non essere facile, ma almeno non si vedrebbero più alcuni programmi veramente scadenti.
Dal punto di vista degli algoritmi e strutture dati, vorrei suggerire il Cormen (et al.) “Introduzione degli algoritmi”. I libri di Knuth li ho sempre trovati un po’ “criptici” (pur se di altissima qualità).
Ho intravisto il python e sembra veramente interessante. Ho solo l’impressione che sia un po’ immaturo, per lo meno in termini di librerie disponibili (il confronto con Java è impari).
Sempre insistendo sulla correttezza, perché non proporre un linguaggio tipo Eiffel? O qsa del tipo di Smalltalk (è uno dei primi linguaggi utilizzati per descrivere i design pattern)?
Ma alla fine secondo me il migliore, per iniziare, rimane il Pascal (o il suo fratello maggiore Delphi, seppure ha avuto una vita un po’ travagliata)… E, dopotutto, non è stato lo stesso Wirth a proporlo?E la struttura del compilatore, poi, è così semplice…
Mi farebbe piacere cosa ne pensate, anche se, ricordo, non intendo dire che questi linguaggi vadano bene per la “produzione”…

7. hardskinone - February 4, 2006

Bell’articolo.
Vedendo studenti più giovani di me che affrontano i primi corsi di programmazione ho notato che uno degli “errori” più comuni è quello di mettersi subito a “scrivere codice”. Premesso che provare con mano è fondamentale per prendere confidenza con l’ambiente ed il linguaggio tale approccio può essere disastroso quando si comincia ad affrontare problemi un pochino più complessi.
Il risultato il più delle volte è una perdita tempo: codice non funzionante, malamente scritto e bassa comprensione del problema.
Per ovviare c’è solo un suggerimento: spegnere il computer ed accendere carta e penna per capire e studiare il problema da affrontare.

8. Luca - March 31, 2006

Sono stati messi insieme troppi concetti. Programmare è un concetto che prescinde da linguaggio ed environment. Dalla scrittura di un mero algoritmo alla programmazione Agent Oriented, dalla Procedure Call al Message Passing non c’è un concetto nella “programmazione” che sia legato al linguaggio che si usa per l’implementazione. La differenze tra un linguaggio e l’altro sono due: la sintassi e l’astrazione. Imparata la sintassi e compreso il grado di complessità del nostro linguaggio rimangono sempre veri e sviluppabili i concetti della programmazione. Altra cosa ancora, che secondo me esula proprio dalla programmazione, è il sistema al quale facciamo riferimento. Non si può dire ad una persona che vuole imparare a programmare che la scelta del sistema è vincolante, anche perchè ben pochi programmatori si possono fregiare di conoscere tutte le librerie del C o di Windows o di Java, ma quelli furbi si fregiano di essersi fatti una buona raccolta di manuali dove travar all’occorenza le informazioni necessarie per ogni evento. Il mio consiglio è non aver pregiudizi o timore, io mi sono sporcato davvero le mani con tutto, le cose più importanti sono due: prima di tutto commentate sempre il vostro codice e per questo per prima cosa imparate tutti i modi per fare un commento nel linguaggio che più vi ispira fiducia, in secondo luogo non siate ambiziosi. Progettare software non è un gioco che si fa pensando al risultato (voglio fare il mio personal address book), ma un arte complessa tanto quanto l’architettura e l’ingegneria edile, che presenta le stesse difficoltà di analisi e progetto. Da ingegnere consiglio a tutti di imparare ad usare Java. Esso è un liguaggio con un livello d’astrazione elevato, dove si fanno pochi pastrocchi e si è costretti ad usare del criterio nel costruire le cose, questo è un buon passo per fare le cose bene😉, per il resto mi associo agli altri: leggere, leggere, leggere, e ricordatevi che sulla rete c’è tutto quello che serve.

9. Olga - June 27, 2006

C’è qualcuno che può aiutarmi a scrivere il codice sorgente per creare un editor in java?
E’ per un esame di fondamenti di informatica.
Grazie

10. Marco - November 11, 2007

Salve, sapete dirmi un libro (possibilmente in Italiano) che insegnin le basi della programmazione? (VB script)

Grazie

11. edoardo - December 27, 2007

premetto che ho 15 anni appena compiuti, quindi non insultatemi se dico cazzate… per favore :-PP

mio padre è un programmatore, io ho preso da lui la passione… mah, coi computer ci so fare, smonto, rimonto, xp non ha più segreti, non ho mai programmato in vita mia però…

e mio padre di tutta risposta ha detto che è in vacanza e on vuole lavorare pure qua a casa…

ho scaricato python alla sua ultima versione, stavo seguendo il corso di alan gauld, imparare a programmare… io però, non ho capito una cosa concettuale basilare… lui mi spiega coe fare una stringa, come dare un valore a una lettera, come fare una classe, i tipi di dati esistenti, tutte belle cose, ma io cosa ci faccio? io voglio sapere cosa bisogna scriovere perchè il computer capisca quello ce io gli voglio dire, io mi chiedo:
una volta che so come parlare a livello di forma (classi, virgolette ecc) come faccio a farmi capire dal computer? se io gli dico, prit: “quando premo M tu aprimi il programma” lui mica mi capisce vero?

rispondete ne ho bisogno! grazie

12. imparare a programmare, da dove comincio? « - January 22, 2008

[…] un qualche tool grafico del tipo Visual Studio… Beh, ho trovato tutte le risposte in un unico post sul blog di Alessandro Bottoni, in cui l’autore sembra leggere nel pensiero di chi decide di imparare a programmare, tanto […]

13. Nicola - April 1, 2008

Vi chiedo se potete ndicarmi un buon libro che parli di programmazione, indipendentemente dal linguaggio.
Come si costruiscono gli algoritmi per risolvere qualsiasi problema relativo alla programmazione.
Grazie
Saluti
Nicola

14. francesco - June 4, 2008

devo cercare siti su cui trovare i codici?
sono nuovo e sono perennemene alla ricerca di aiuto

15. antonio - September 11, 2008

anche io mi unisco all’appello di francesco. aiuto!

16. Classico, Scientifico, Tecnico « Alessandro Bottoni - January 25, 2011
17. farizio - December 27, 2011

Salve, “… Ci sono linguaggi, come Python, che offrono gli stessi vantaggi di chiarezza ed eleganza e non rompono i coglioni in questo modo.”
…troppo forte…non hai idea delle risate che mi sono fatto quando l’ho letto.
Complimenti sinceri per la giuda.
Grazie, saluti Fabrizio.

18. Darmen - January 13, 2013

Secondo la mia esperienza (sono sviluppatore web e docente di informatica) un altro linguaggio adattissimo per iniziare a programmare (e anche per finire) è Ruby. Specialmente come è presentato nel celebre tutorial “Learn To Program” di Chris Pine, disponibile in italiano qui: http://corsorubyonrails.com/imparare-a-programmare/

Provate a leggerlo e ditemi se non ho ragione🙂

19. Darmen - January 16, 2013

Ah, un’altra cosa interessante su Ruby è il fatto che, pur essendo un linguaggio molto simile a Python, la sua semplicità (che deriva anche dalla sua “mission” ovvero “to make programmers happy”), specialmente se combinato con un framework come Sinatra o Ruby on Rails induce a *non* usare nessuna famigerata IDE, perlomeno per lo sviluppo di applicazioni web.

Perfino i professionisti dichiarano di programmare in Ruby qualsiasi applicazioni web anche particolarmente complesse (Ricordo che in Ruby sono scritte applicazioni web del calibro di Twitter, Groupon ma il meno conosciuto ma più complesso pool di programmi di 37signals.com, es. “Basecamp”) affidandosi unicamente a un editor testuale avanzato (tipicamente Textmate per Mac e Vim con qualche plugin per Linux) un terminale avanzato (come ZSH o iTerm, in cui controllare il server, Git per il version control, far girare tail dei log file e automazione della test suite, tipicamente scritta con la meravigliosa libreria *Rspec*) e un browser con ovviamente installati i vari plugin per developer (es Firefox con Firebug etc.).

Chiaramente però, per lavorare bene, serve anche uno schermo bello grande🙂.

Fonte (oltre alla mia modesta esperienza): “Agile Web Developments with Rails 3”, the Pragmatic Programmers, pagina 9.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: