La posta di Slashcode – Come iniziare a programmare

A parte il titolo stupido di questa “rubrica” volevo pubblicare la risposta ad una domanda che mi è arrivata da Facebook. La domanda è la tradizionale “Come faccio a programmare come un Dio?”. Domanda la cui risposta basterebbe da sola a riempire corsi e tonnellate di guide. Tuttavia ho scritto un mezzo poema e, unito al fatto che la risposta può servire anche ad altri, mi sembra sprecato lasciarla nella mia casella di posta in uscita.

La domanda era la seguente:

io avrei bisogno di un consiglio se possibile: vorrei sapere come sei arrivato e dove hai imparato a fare queste cose cosi complesse?io provo provo e provo ma fallisco miserabilmente.

Ed ecco la risposta.

Mi fanno in molti questa domanda e difficilmente riesco a dare risposte soddisfacenti.

Per primo credo che sia necessario apprendere una forma mentis che va al di là del linguaggio usato per programmare. Questo permette di passare facilmente da un linguaggio ad un altro e di “progettare” un applicazione ancor prima di scrivere una sola riga di codice.

Tale impostazione è la cosa a mio avviso più importante. Bisogna imparare a trattare le cose che vogliamo fare come entità matematiche perché , fondamentalmente, i computer sanno fare solo calcoli matematici.

Il problema è, come sempre, trovare il modo per entrare in quest’ottica. Il primo modo è avere una preparazione matematica basilare: la matematica è di per se un “linguaggio” e conoscerlo aiuta molto. Secondo c’è il lato puramente informatico. Riguardo a questo ci sono un paio di consigli che con l’esperienza mi sento di dare:

1) Scegliersi un linguaggio e concentrarsi su quello. Non cambiare quindi linguaggio nella speranza che vada meglio: le basi concettuali sono sempre le stesse.

2) La scelta del linguaggio è molto importante: linguaggi troppo “severi” rischiano di farti concentrare troppo sul lato “macchina” del linguaggio, linguaggi troppo “di bocca buona”, al contrario, astraggono talmente tanto la programmazione che difficilmente si imparano i suoi aspetti fondamentali. Io quindi solitamente consiglio delle buone vie di mezzo come C# o Java (tanto per usare i più famosi). Python è molto facile ma lo trovo “poco istruttivo”: è molto più facile passare da C# o Java ad un altro linguaggio piuttosto che passarci da Python.

3) Perseverare. Una volta appresa la sintassi di un linguaggio non si sa programmare. A programmare si impara programmando: piazzarsi un obbiettivo non troppo elevato e iniziare a portarlo avanti. Anche abbandonarlo se si rivela troppo alto ma l’importante è provarci. Il 90% delle cose che ho imparato le ho imparate sbattendoci la testa, cercando soluzioni su Google, chiedendo a gente più esperta. Quindi ti consiglio caldamente di imparare la sintassi di un linguaggio e di usare quello per realizzare piccoli progetti personali. Roba anche inutile ma utile per imparare. Ad esempio scoprirai che è molto istruttivo cercare di implementare una specie di rubrica da terminale.

4) Ultimo consiglio: le librerie. Quando si padroneggia un linguaggio è giunge il momento di imparare qualche libreria: interfacce grafiche (Gtk o QT ad esempio), sistemi audio (gstreamer o Xine), per l’interazione col web, e così via… Questa è l’unica parte veramente difficile 😀 E a questo punto non puoi far a meno di chiedere e domandare in giro e dovrai pensarci solo a tempo debito.

Mi sono dilungato anche troppo. 😀 Ti ringrazio per la domanda che mi ha spinto a una piccola riflessione e spero che tu possa continuare a provarci. Per ogni domanda che ti verrà in mente durante il tuo percorso puoi sempre trovarmi su Slashcode o chiedere sul forum di LinuxQualityHelp.

12 comments on “La posta di Slashcode – Come iniziare a programmare

  1. ciao visto che anch’io sono interessato a imparare qualche linguaggio di programmazione volevo chiederti un consiglio. Tu consigli il C# o Java ma visto che io vorrei imparare a programmare qualcosa sopratutto rivolto a kde il massimo sarebbe il C++ con le qt, il problema è che non so niente di programmazione pensi che vada bene inziare subito dal C++?

    • Prima cosa: a meno che tu non abbia intenzione di partecipare a qualche progetto del core di KDE esistente puoi scegliere qualunque linguaggio. Esistono binding delle librerie Qt per ogni linguaggio (tranne Jave credo… per il resto ci sono PyQT per Python o Qyoto per Mono ad esempio ). Questo per dirti che puoi comunque sentirti libero di provare.

      Detto questo il C++ è sicuramente un buon linguaggio. Se impari bene quello puoi benissimo dimenticarti gli altri. Tuttavia per questioni di ottimizzazione ha dei comportamenti che non aiutano certo uno senza esperienza. Ad esempio la mancanza del Garbage Collector ti obbliga a pensare bene sia a creare oggetti che ad eliminarli. Insomma, in teoria con il C++ ti insegna più cose ma purtroppo la curva di apprendimento è sensibilmente più ripida.

      Io personalmente sono passato al C/C++ con molta facilità passando per Java rispetto a quando provai ad andarci direttamente. Ma queste sono considerazioni del tutto personali. 🙂

  2. si sapevo del pyQT ma leggendo il tuo articolo avevo gia scartato python (anche se essendo il più facile mi tenta molto 😛 )

    • Fra C++ e Python allora ti consiglio Python. Il problema è soppesare adeguatamente capacità istruttive di un linguaggio e “produttività”. Se un linguaggio è troppo complesso il rischio è che non si riesce a fare molto e questo è demoralizzante. E allora è preferibile fare qualcosa che diverta, dia risultati anche se nasconde alcuni elementi.

  3. oh questo è quello che volevo sentire mi butto su python! 😛 grazie del consiglio comunque se poi volessi provare a imparare il c++ conoscendo gia python avrei qualche vantaggio o non centrano proprio niente?

    • Avresti il vantaggio di aver appreso un p’o di pensiero informatico 🙂 il che è la cosa fondamentale. Ma riguardo la sintassi e il funzionamento sono parecchio diversi.

  4. capito è che con il c++ mi sa di cosa abbastanza difficile e pesante per uno alle prime armi come me finirei per mollare subito o comunque non sarebbe un divertimento.. con python invece essendo più facile riuscirei a studiarlo meglio piu volentieri anche divertendomi provando a fare magari un plasmoide o cose del genere.. penso che otterei risultati migliori 🙂 grazie del consiglio! 🙂

  5. ancora una cosa.. ma a livello di kde creare un app qt in python o in c++ è la stessa cosa? non cambia niente? o sarebbe meglio per qualche ragione utilizzare un linguaggio invece dell’altro? ci voglio pensare bene prima di mettermi sotto a studiare voglio essere sicuro 😛

    • Dipendi cosa intenti per “stessa cosa”. A livello di utente finale le due cose sono praticamente indifferenti. Per quanto riguarda KDE, se hai intenzione di proporre un eventuale progetto al team ufficiale, oppure vuoi partecipare allo sviluppo di qualche applicazione di KDE esistente… allora diciamo che il team di KDE preferisce e incoraggia che le sue applicazioni siano in C++.

  6. ecco infatti mi interessava di più la seconda.. cioè per fare qualche plasmoide o altre cosette cosi va bene python ma se volessi creare qualche applicazione un po seria in futuro o collaborare in qualche applicazione di kde dovrei comunque imparare il c++.. a questo punto preferisco buttarmi subito sul c++ ci metterò di piu a impararlo ma mi serve di più..