L’eterna lotta tra Python e Ruby

Ho sempre sognato di fare il programmatore invece che il sistemista. Tuttavia continuo a rimbalzare tra Ruby e Python e non so quale linguaggio scegliere.

L’ho già detto che non sono un programmatore? Mi pare di sì. Ma ho anche detto che mi piacerebbe imparare.

In passato, quando ero uno studente di informatica all’ITIS e di ingegneria all’università, i linguaggi con i quali ho avuto maggiormente a che fare sono stati il PASCAL, l’Assembly x86, il C, il C++ e, un po’ di striscio, Java.

Più tardi, iniziando a lavorare ed occupandomi quasi esclusivamente di reti e di sistemi, ho smesso quasi del tutto di programmare. Quando ne ho bisogno, faccio ricorso a qualche linguaggio di scripting, prevalentemente Bash e Python.

La voglia di programmare e di realizzare delle applicazioni più complesse, però, rimane. Durante gli ultimi quindici anni ho provato diversi linguaggi di programmazione (interpretati) e diversi framework per lo sviluppo di applicazioni web. La mancanza di perseveranza e il continuo rimbalzare da un linguaggio all’altro non mi hanno consentito di raggiungere risultati concreti e apprezzabili.

Linguaggi interpretati

PHP

Tra i primi linguaggi che ho provato ad imparare c’è sicuramente il PHP.

Il pregio del PHP è che la sua sintassi ricorda abbastanza quella del C e di Java, e quindi mi risultava relativamente familiare. Inoltre PHP è ancora largamente utilizzato nella programmazione web; le applicazioni scritte in questo linguaggio sono facili da mettere in produzione e l’hosting PHP è sicuramente quello più diffuso e spesso anche a bassissimo costo.

Un altro pregio di PHP è anche la notevole disponibilità di framework, alcuni dei quali anche molto “potenti”, con i quali è possibile sviluppare velocemente applicazioni di ogni genere. Il primo framework con cui ho avuto a che fare è stato Yii, che all’epoca era alla versione 1.qualcosa e mi sembrava piuttosto promettente. Poi venne la versione 2 e, a parer mio, è diventato meno intuitivo.

Oltre a Yii ho provato a studiare Zend e Symfony, che però erano evidentemente fuori dalla mia portata.

Come ultima spiaggia ho provato un framework più snello, ovvero CodeIgniter, col quale sono riuscito a fare piccole applicazioni molto semplici. I suoi pregi maggiori sono velocità e semplicità di setup, come anche una certa facilità nell’apprendimento. Le cose però si complicano quando si prova a fare qualcosa di più complicato, dove bisogna essere programmatori un po’ più esperti e soprattutto avere le idee ben chiare.

Altro pregio di PHP è che con questo linguaggio sono scritte molte killer-app, vale a dire applicazioni particolarmente diffuse e di successo. Tanto per elencarne alcune: WordPress, Nextcloud, Wikipedia, Moodle, Joomla, per non parlare di Facebook.

La cosa brutta di PHP è che è confuso, con decine di funzioni dal comportamento simile, alcune delle quali deprecate e/o insicure. La documentazione non è delle più chiare, il linguaggio non è strettamente object-oriented e questo non aiuta ad avere uno stile di programmazione pulito. Anche gli strumenti per il testing non sono particolarmente evoluti, sebbene negli ultimi anni siano stati fatti dei passi avanti.

Ruby

Archiviato il PHP, mi sono imbattuto in Ruby, un linguaggio incredibilmente elegante, chiaro, pulito ma tutt’altro che facile da imparare. Il maggiore incentivo all’utilizzo di Ruby è il framework Ruby on Rails, probabilmente l’unico nel suo genere. Realizzare applicazioni web con Rails è estremamente veloce e il risultato è generalmente apprezzabile, almeno finché si rimane nell’ambito della filosofia del framework, ovvero convention over configuration. Se si vuole uscire dal solco raccomandato da questa modalità, le cose si complicano non poco.

Ruby ha la fama di essere poco performante, ma in realtà questa cosa dipende molto dall’architettura dell’applicazione.

Dal punto di vista del suo utilizzo, Rails ricorda un po’ Yii, o forse è più corretto dire che Yii si ispira a Rails.

Tra le killer-app fatte con Ruby mi vengono subito in mente Jekyll, Metasploit e Discourse.

La mia esperienza con Ruby e Rails non è stata particolarmente proficua; ho acquistato diversi manuali, ma lo studio si è sempre interrotto a causa di mancanza di tempo o per colpa di Python.

Python

Frequentavo ancora il CiLUG (Ciociaria Linux User Group) quando ho sentito parlare per la prima volta di Python. Uno dei membri del LUG, un programmatore esperto, ne elogiava la semplicità, la potenza, l’eleganza… soprattutto in confronto al PHP.

Python è forse uno dei linguaggi interpretati attualmente più utilizzati al mondo; ci si può fare di tutto, soprattutto per via della sterminata quantità di librerie che coprono quasi tutte le necessità di un programmatore.

Con Python si realizzano programmi con interfaccia grafica per il desktop, tool per il penetration testing, strumenti per l’automazione della rete e dei sistemi, siti e applicazioni web. Uno degli utilizzi principali di Python è nel Machine Learning e nell’analisi di grosse quantità di dati.

Anche di Python non si può certo dire che sia particolarmente performante, e mostra alcuni limiti quando si tratta di programmazione parallela.

Tra le killer-app scritte in Python possiamo citare sicuramente Ansible, Odoo, ma anche Spotify e Dropbox.

Uno dei framework più famosi per lo sviluppo web con Python è sicuramente Django, che possiamo paragonare per potenza e complessità a Ruby on Rails. Particolarmente apprezzato però è anche il microframework Flask.

Realizzare una semplice applicazione web usando Django o Flask è più o meno alla portata di tutti. Per me il principale ostacolo con Python è la sintassi, che trovo scomoda e per niente elegante. La parte che più apprezzo del linguaggio è il supporto ai cosiddetti virtual environment, che permettono di creare ambienti virtuali all’interno dei quali eseguire specifiche versioni dell’interprete e installare particolari versioni di pacchetti. Questo facilita enormemente la distribuzione delle applicazioni e il loro mantenimento.

Nonostante tutto, Python mi piace e ci ho fatto diverse cose utili per il mio lavoro. Tuttavia anche qui la principale difficoltà è stata la continuità e quell’avversione verso la sintassi che proprio non mi va giù.

Quale linguaggio scegliere

Una specie di lavagna bianca con i nomi di tanti linguaggi di programmazione.

Come ho anticipato, ho passato gli ultimi anni a rimbalzare da PHP, a Ruby a Python, coinvolgendo più o meno tutti i framework disponibili nei diversi linguaggi. Ad oggi non ho ancora trovato la mia strada.

Quando si tratta di scegliere quale linguaggio imparare o adottare per un certo progetto, quello che conta maggiormente non è tanto il gusto o la simpatia verso l’uno o l’altro. Ciò che dovrebbe guidare la scelta è la tipologia di applicazione che si intende sviluppare, oppure la piattaforma sulla quale si vuole lavorare.

Per esempio si può avere l’esigenza di lavorare su WordPress, perché è il CMS maggiormente diffuso per la realizzazione dei siti di tante PMI e non solo. Se uno vuole inserirsi in questo mercato, non può che scegliere di investire tempo (e denaro) per imparare efficacemente PHP in generale e WordPress in particolare.

Se si lavora molto nell’ambito della sicurezza delle reti e dei sistemi e si ha l’esigenza di dover sviluppare rapidamente dei tool per testare la robustezza di dispositivi ed applicazioni, probabilmente Python è la scelta migliore.

Nel caso in cui si avesse l’esigenza di dover sviluppare rapidamente delle applicazioni web più o meno “standard”, allora padroneggiare Ruby e Rails può avere i suoi vantaggi.

Evitare le mode del momento

Una cosa importante quando si decide si investire tempo per imparare qualcosa di nuovo, soprattutto se di mezzo c’è il lavoro e la propria stabilità finanziaria, è preferibile orientarsi verso piattaforme collaudate e diffuse. Infilarsi in una nicchia può avere senso se si hanno le idee ben chiare di quelle che sono le esigenze del settore, altrimenti meglio non rischiare con linguaggi o piattaforme che non hanno mercato.

Purtroppo nel settore della programmazione la concorrenza è tanta e spietata, e qualsiasi cosa possiate avere in mente è probabile che sia stata già fatta da qualcun altro. La differenza la fa soprattutto l’esperienza e la capacità di offrire un supporto costante ed attento alle esigenze degli utenti ai quali ci si rivolge.