Metterci una croce sopra

La mancanza di tempo e di costanza nell'impegno mi suggeriscono di abbandonare l'idea di dedicarmi alla programmazione.

Basta! Smetto di programmare! O meglio, smetto di provare a sviluppare applicazioni web.

Perché?

Perché non sono capace e tutto il tempo speso a cercare di imparare è stato tempo perso.

Sia chiaro, non sono uno script kiddie che si mette a copiare&incollare codice a destra e a manca per accroccare qualcosa di funzionante. Ho una laurea (triennale) in ingegneria informatica, conosco i fondamenti dell’ingegneria del software e delle basi di dati, ho una buona padronanza degli algoritmi fondamentali e del design pattern MVC. Ho anche una buona conoscenza di alcuni linguaggi di programmazione, come Ruby, Python e PHP.

E allora qual è il problema?

Il problema è che tutto ciò non basta. Di professione non faccio lo sviluppatore ma sono un network engineer (come dicono gli americani) e un sistemista Linux, so far funzionare le applicazioni ed integrarle tra loro. Ma sviluppare è differente.

Se fossi un programmatore professionista, realizzare un’applicazione web potrebbe essere uno dei tanti side project ai quali uno si dedica nel tempo libero. Ma, pur sapendo programmare, non sono un programmatore e ci sono alcune lacune che, al momento, mi risultano incolmabili.

Cosa mi manca?

Come detto, le basi teoriche non mi mancano, soprattutto per quanto riguarda il backend. Le mancanze principali riguardano prevalentemente la parte frontend, cioè tutto quel che ha a che fare con CSS e Javascript, per non parlare della cosiddetta user experience (UX), ovvero la capacità di progettare e realizzare qualcosa che sia usabile e anche bello da vedere.

In passato ci ho provato, e finché mi ci potevo dedicare a tempo pieno (o quasi), qualche risultato l’ho ottenuto. Poi però il lavoro “vero” ha prevalso, e certe cose non puoi impararle seriamente solo nei ritagli di tempo.

Cosa ho fatto?

Per semplificare, il mio percorso è stato più o meno il seguente:

Imparo PHPProvoZend FrameworkProvo SymfonyProvo YiiProvoCodeIgniterPasso a RubyProvo Rubyon RailsPasso aPythonProvo DjangoProvo FlaskTorno a Ruby
Il loop della MORTE!
Il loop della MORTE!
Text is not SVG – cannot display

Devo dire che, ogni tanto, ci ho anche provato ad uscire dal loop.

In particolare ho tentato la strada più “facile” (sulla carta): prendere un CMS già pronto, come WordPress, Joomla, Drupal, FuelCMS e chi più ne ha più ne metta, e customizzarlo per ottenere il risultato che avevo in mente. Ovviamente l’esito è stato altrettanto disastroso.

Quale materiale ho usato?

In questo mio viaggio nel mondo dello sviluppo web non ho esitato a ricorrere a manuali, libri, tutorial e corsi on-line. Li elenco qui di seguito, dato che si è trattato sempre di materiale assolutamente valido.

PHP

Ruby e Ruby on Rails

  • Beginning Ruby 3, di DiLeo e Cooper (Apress)
  • Programming Ruby 1.9 & 2.0, di Dave Thomas (Pragmatic Programmers)
  • Agile Web Development with Rails (edizioni dalla 3 alla 7), di Sam Ruby e David Bryant Copeland (Pragmatic Programmers)
  • Ruby on Rails 5 for Autodidacts, di Stefan Wintermeyer
  • The Ruby on Rails Tutorial, di Michael Hartl
  • Ruby on Rails for Beginners, corso di GoRails disponibile su YouTube

Python, Django e Flask

  • Beginning Python, di James Payne (Wrox)
  • Programming Python, di Mark Lutz (O’Reilly)
  • Test Driven Development with Python, di Harry J.W. Percival (O’Reilly)
  • Django 3 by Example, di Antonio Melé (Packt)
  • The (new and improved) Flask Megatutorial, di Miguel Grinberg
  • Il video tutorial su Flask di Corey M. Schafer su YouTube
  • Il video tutorial su Django di Corey M. Schafer su YouTube

E mo?

Ho detto che per il momento rinuncio alla programmazione web. Tuttavia un minimo di programmazione, nel mio lavoro, mi serve sempre.

In passato ho realizzato uno script Python, per niente banale, che convertiva le regole e gli oggetti di un firewall Checkpoint nei corrispondenti oggetti e regole per Cisco ASA. Era un tool da riga di comando e non era nemmeno particolarmente generalizzato, nel senso che andava adattato in funzione della configurazione del firewall da tradurre, ma tutto sommato faceva il suo mestiere e mi è costato diverse settimane di sviluppo e test.

Python è sicuramente il linguaggio di elezione per script e programmi quick and dirty, ma con un po’ di impegno ci si possono fare cose veramente carine ed eleganti. Peccato per la sua sintassi, che di certo elegante non è!

Il principale rivale di Python, per me, è Ruby. I due linguaggi si assomigliano parecchio, ma trovo Ruby estremamente più elegante e leggibile. Lo stesso vale anche confrontando Rails con Django. Tuttavia la quantità di librerie disponibili per Python supera di gran lunga le gemme di Ruby, quindi non è sempre facile fare con Ruby quel che si fa con Python.

Ciò nonostante la mia intenzione è quella di familiarizzare ulteriormente con Ruby anche per la realizzazione di script di utilità comune, come faccio con Python. Vediamo se almeno questo obiettivo riuscirò a centrarlo.