Recently in Programmazione Category

Ho iniziato ad interessami dei sistemi di controllo revisione qualche tempo fa, volevo saper utilizzare questi sistemi per stendere un programma, controllando i rilasci con numeri di revisione e soprattutto per collaborare con altre persone. Ho sentito spesso parlare di SVN tanto che avevo preso l'ebook ufficiale per poterlo stampare con calma.

Per vari motivi ho messo da parte questo argomento rinviandolo continuamente. In un secondo tempo, attraverso i miei siti di notizie, ho conosciuto altri sistemi molto diversi da SVN per concetti base. Il modello classico prevedeva un server centrale, e dei sviluppatori che mandavo al repository le loro modifiche a turni. Da quel che ho letto questo modo di lavorare è complesso e soprattutto incline ad errori. Il nuovo modello, invece, è totalmente distribuito: il repository non risiede su un server centrale. Ogni sviluppatore ha una copia del repository sul proprio computer, le modifiche avvengono tutte in locale. Alla fine del lavoro si trasmettono le proprie modifiche verso altri sviluppatori oppure verso un nodo centrale (che si, solitamente risiede su un server ma può essere anche il computer del capo reparto).

I sistemi distribuiti più diffusi sono principalmente due: git (pensato per il kernel linux) e Mercurial. Ho preferito quest'ultimo sistema perché quando conobbi git lo trovai molto macchinoso perché era ancora in fase di definizione.

Con Mercurial eseguo tutte le operazioni in una unica directory, senza servizi in attivo. Posso creare un repository con un comando, clonarlo per apportare modifiche provvisorie o ritornare in uno stato storico del progetto.

Ho provato seriamente Mercurial per stendere la revisione della guida a goldeneye, sperimentato con mano e aprendo anche un repository temporaneo su bitbucket per fare commit. Mi sono trovato bene, non è che il progetto era di chissà quali dimensioni, però ho trovato interessanti e facili da usare gli strumenti messi a disposizione.

La guida ufficiale Mercurial the definitive guide è ben scritta, la potete leggere liberamente on-line e commentare i singoli paragrafi. Esiste anche una traduzione in italiano che ho pure letto fino in fondo con molto piacere.

Ho deciso di imparare Python non perché volessi volare ma per la voglia di conoscere un linguaggio interpretato, qualcosa di nuovo che non fosse la solita roba c-like. Ho visto questo linguaggio come supporto a molti altri programmi come inkscape e blender che mi hanno fatto intuire che sarebbe tornato sempre utile. Durante lo studio del linguaggio mi sono accorto di quanto fosse davvero interessante, possiede alcune peculiarità che ho trovato formidabili e a volte inusuali.

La prima cosa che salta subito all'occhio è l'indentazione; il linguaggio impone uno stile rigido che ha lo scopo di aumentare la leggibilità di quello che scrivi. In questo modo non c'è bisogno di marcatori come parentesi graffe o parole chiavi per delimitare gli scope. Solitamente ogni statement si conclude con un ritorno a capo, in casi eccezionali possiamo usare il punto e virgola ma possiamo farne sempre a meno.

I nomi delle variabili vengono collegate tramite riferimenti ai dati veri e propri, quindi il vecchio concetto che avevo di variabile come scatola per contenere le mie cose qui viene a mancare. Questa scelta comporta che la semplice copia tra variabili sia di fatto la copia del riferimento, con la conseguenza che le semplice copie per assegnazioni non sono così banali come ero stato sempre abituato. Tutto questo comporta una visibilità delle variabili all'interno degli scope che mi ha basito a primo impatto.

Il linguaggio mette a disposizione un sistema semplice ma efficace per creare e gestire le proprie librerie. Possiamo scrivere il codice e includerlo nei nostri script con una semplice direttiva, oppure organizzare una serie di script in modo ragionato con i package. L'accesso alla libreria può avvenire attraverso un oggetto che porta il nome della libreria stessa, oppure con l'inclusione diretta. Python permette di più, abbiamo la facoltà di scrivere librerie in linguaggio C e includerle direttamente nei nostri programmi!

In tutto questo l'interprete possiede una serie di ottimizzazioni davvero interessanti. Possiamo programmare come più vogliamo, ma se adottiamo delle particolari strategie apriamo un canale diretto con l'interprete che comprende le nostre intenzioni ottenendo così un aumento delle prestazioni.

Python è un bel linguaggio, ha delle caratteristiche particolari che trovo azzeccatissime. Il libro che mi sono fatto consigliare per lo studio si chiama Learning Python pubblicato da O'Reilly. L'autore di chiama Mark Lutz e cura altri libri sempre dedicati a Python, scrive davvero molto bene. Questo libro è per chi si affaccia per la prima volta al linguaggio, non tratta di argomenti particolarmente avanzati ed è un ottimo punto di inizio.

Questo è il mio raccoglitore di guide e tutorial su tutto quello che riguarda lo sviluppo web. È iniziato tutto con una breve trattazione sul PHP e col tempo ha queste dimensioni che vedete per via dei nuovi articoli che aggiungevo.

Il mio raccoglitore

Ricordo che passavo il tempo al computer nel rastrellare la rete, ricopiare i testi più interessanti su un word processor, aggiungere il numero di pagine e fare una sorta di indice. Ho raccolto i tutorial in varie categorie e piazzato le linguette che potete vedere nella foto. Quella risma di carta si potrebbe adesso benissimo sostituire con alcuni libri specifici...

I tutorial sono immediati, soddisfano la sete di sapere con un rapida ricerca su internet. Può trovare materiale recentissimo, a costo zero e pronto alla lettura su schermo. Sei subito dopo pronto per esercitare e provare le tue conoscenze, imparare attraverso questa tecnica del trial-and-error che ti fa risparmiare tempo e denaro. Quindi sembra lecito domandarsi; perché comprare libri? non sono quasi sempre già vecchi alla stampa e molto costosi?

L'apprendimento tramite trial-and-error

Ho fatto fatica a padroneggiare cose semplici, leggevo e rileggevo i tutorial. Non ero stupido, le mie difficoltà erano legate al fatto di non avere delle buone basi. Durante le mie sessioni di programmazione chiedevo in chat cosa non andava nel mio codice, cercavo su google le stringhe di errore che ricevevo e rastrellavo php.net alla ricerca di soluzioni. Spesso durante la lettura di nuovi tutorial scoprivo caratteristiche del linguaggio a me ignote. Posso dire che è stato un apprendimento a suon di errori e richieste di aiuto.

Tutto questo dover navigare e chiedere consigli non è stato necessario quando ho studiato il C e dopo il C++ dai libri di testo. Quindi mi chiedo, perché non ho avuto gli stessi problemi di apprendimento incontrati con i tutorial?

Penso che la risposta risieda nel fatto che un libro offre un percorso formativo che ti aiuta a capire bene l'argomento, solitamente è scritto da un autore che non si improvvisa mentore, gli argomenti (si spera) sono connessi tra di loro ed affrontati in maniera più o meno completa.

Tengo in considerazione che il C e il C++ sono linguaggi standardizzati e consolidati, il PHP (come i CSS e l'HTML) sono in continua evoluzione per soddisfare le esigenze del mondo. Molto probabilmente un libro di C comprato nel 1985 è completo nei contenuti come un altro uscito uscito nel 2000. Questo non è applicabile con qualsiasi libro di PHP, perché appunto è un linguaggio che cambia rapidamente nel tempo.

La formazione di un libro

Prendere un libro che può sembrare già vecchio appena comprato non la trovo una idea maligna. Se si deve affrontare un argomento completamente nuovo, considero il libro come la scelta migliore per imparare. Offrono un percorso di apprendimento che l'approccio trial-and-error non può offrire. La presenza di esercizi a fine capitolo, appendici ed una scrittura coerente sono elementi importanti per l'apprendimento. A fine percorso vi ritroverete (si spera) capaci di comprendere bene la materia, qualità che si rivela utile nel tempo e che ti fa risparmiare frustrazioni davanti al codice che sembra non voler funzionare.

Il costo dei libri non è indifferente (sopratutto per uno studente come me), ci sono alcuni che hanno un prezzo spropositato. L'edizione in formato ebook costa qualche cosa in meno ma non aiuta a risparmiare a chi, come me, deve poi stampare tutto. Fortunatamente ci sono autori con una certa competenza che scrivono opere per poi rilasciarli gratuitamente su internet. Personalmente ho studiato C e CPP da TrickyC e Thinking in CPP e ringrazio gli autori che mi hanno permesso di apprendere questi linguaggi a costi così irrisori.

Dopo aver finito quei libri, quando mi trovavo in difficoltà li consultavo sapendo cosa andare a cercare. Avere la consapevolezza di dove sbagliare è una qualità importante, anche in occasioni dove non avete il libro sottomano sapete esattamente cosa cercare su internet o chiedere in chat. Non incollate il codice su nopaste per poi passarlo in chat aspettando che qualche anima pia vi dica la soluzione...

La longevità di un libro dopotutto non è così breve, standard e linguaggi si basano su quello che loro stessi sono stati in passato. Conoscerli bene significa dover faticare meno per comprendere i cambiamenti che sono stati apportati. I libri consentono di formare delle solide basi utili agli apprendimenti futuri.

L'approccio del trial-and-error non consente questo, per la loro natura telegrafica e certe volte superficiale. Con questo non intendo essere generalista e denigrare ogni tutorial scritto, capita anche che interi siti o blog vengano impaginati e stampati per la creazione di un libro. Esistono degli ottimi redattori che scrivono articoli di tutto rispetto, è il metodo con cui si vuole apprendere che trovo errato.

La lettura di articoli, anche se di ottima qualità, la trovo buona per una piccola infarinatura, assaggiare l'argomento e magari per prendere poi un libro. Altre volte è utile per approfondire ed ampliare il proprio bagaglio di conoscenze, per aggiornarsi sugli sviluppi del tema trattato, non per basare una intera formazione.

I libri non sono tutti perfetti, ci sono edizioni da 100 pagine che pretendono di insegnare argomenti complessi o che sono scritti male. Il punto della questione non è sentenziare la vittoria dei libri rispetto ai tutorial, ma far capire che è necessario un buon percorso di apprendimento, contestualizzare l'utilizzo dei diversi tipi di testo per non metterli sullo stesso piano.

La valutazione di un libro

Visto che la scelta di un libro comporta che ci sia dopo una spesa da affrontare è doveroso sceglierlo bene. Molte case editrici offrono il download di alcuni capitoli di esempio e dell'indice (cosa che trovo inutile alla fine della valutazione), potete così leggere le informazioni messe in vetrina dall'editore. Il materiale messo così a disposizione spesso è la cosa meglio scritta di tutto il libro, per evitare di farsi condizionare sarebbe meglio chiedere in prestito il libro in questione da una biblioteca o da un amico.

Questi non sono gli unici mezzi a disposizione di chi si trova nella situazione di dover scegliere; si può chiedere consiglio sui forum, newsgroup, o andare a leggere le opinioni su siti anobii e booshelf. Potete addirittura sfogliare la copia su google books o amazon. Gli strumenti per aiutare nella decisione ci sono tutti senza dover comprare il libro ad occhi chiusi.

In english please

Sapere l'inglese, e saperlo bene, è necessario per poter accedere alle migliori risorse. Potete attingere ad informazioni scritte dagli stessi autori delle tecnologie che volete apprendere. Non aspettare la traduzione di un libro, prenderlo in lingua madre e cominciate a leggerlo. Questo giova al vostro inglese e vi ripara da errori di traduzione.

Conclusioni

Ho avuto modo di imparare attraverso due metodi distinti, libri e tutorial. Sono due tipi di testi che offrono una formazione differente, è sbagliato mettere questa offerta formativa sullo stesso piano. Il prezzo di questo errore lo si ripaga con frustrazioni e perdite di tempo per stupidate. Sapere bene la materia è importante per lavorare bene e questa preparazione può dartela il libro.

L'articolo ben scritto è utile come punto di partenza o infarinatura, per aggiornamenti ed approfondimenti specifici. Per il resto è fondamentale affidarsi ad un buon libro per formare delle solide basi. Spero sempre di avere il tempo necessario per poter studiare bene un libro e non dover fare tutto di corsa, perché in fondo, capisco chi studia articoli perché non può dedicarsi ai libri...

Avvertenze

Questo blog non rappresenta una testata giornalistica in quanto aggiornato senza alcuna periodicità'. Non può' pertanto essere considerato un prodotto editoriale ai sensi della legge numero 62 del 7/03/01. Le immagini pubblicate sono state trovate su pagine web e giudicate di pubblico dominio. Se qualcuno, potendo vantare diritti su di esse, volesse chiederne la rimozione, può' scrivere al mio indirizzo di posta elettronica.

Recent Comments

  • Infrid: ok :D read more
  • Nonsonomirko: eh già, la "solita roba c-like" ha rotto :) buono read more
  • Infrid: pagine da ricopiare rigorosamente a mano :D a me che read more
  • Janniz: Io invece la scroccavo ad un amico... mammamia... devo dire read more
  • Mirko: Da piccolo compravo sempre questa rivista, quanti ricordi. Notevole il read more
  • Gabriele Massari: Ma se anche nei contenuti speciali dei DVD, scrivono "le read more
  • Infrid: corretto, grazie della dritta e per il complimento :D read more
  • noa: Ottavo capoverso, prima riga: correggi :D Per il resto... ottimo read more
  • Fabio: Imparare un linguaggio è facile. Imparare a scrivere bene un read more
  • Mirko: Nessun riferimento al fatto che l'altro giorno ti ho detto read more