Dove eravamo rimasti?

Verolinux.org torna on-line con WordPress, e il primo post è dedicato ad una scelta molto difficile che ho preso di recente. Speriamo che sia l'inizio di un lungo percorso.

Ci eravamo lasciati con l’avviso che avrei migrato questo blog da Ghost a WordPress, per tutta una serie di motivi che non sto qui a elencare nuovamente. Avevo anche scritto che non avrei conservato i vecchi articoli, fondamentalmente perché erano pochi, poco interessanti e scritti male.

Tra le ultime cose che avevo pubblicato, c’erano alcuni post in cui parlavo di programmazione e, in particolare, del perenne dilemma nella scelta tra Ruby e Python. Un po’ come l’asino di Buridano, che non sapeva scegliere quale mangiare tra due mucchi di fieno identici, io rischiavo di morire senza riuscire a scegliere il linguaggio di programmazione per i miei “progetti”.

La scelta è fatta!

Gozer il Gozeriano

Si va con Python

Ebbene sì, con un po’ di tristezza e rammarico, mi vedo ormai costretto ad optare per Python. Le ragioni di questa scelta sono sostanzialmente le seguenti:

  1. familiarità
  2. organizzazione del codice
  3. strumenti a disposizione
  4. materiale didattico
  5. diffusione
  6. disponibilità di librerie
  7. utilità in ambito lavorativo

Di seguito provo ad argomentare un po’ queste motivazioni.

Familiarità

Soprattutto in passato, ho usato Python molto di più di quanto abbia usato Ruby. In particolare mi è capitato di sviluppare dei piccoli tool, mediamente complessi, che hanno richiesto molte ore di programmazione, testing e refactoring. Questo mi ha portato a conoscere relativamente bene alcuni costrutti del linguaggio e quelle che sono alcune delle pratiche raccomandate.

A distanza di alcuni anni, trascorsi senza più scrivere codice “utile”, molte cose le ho dimenticate, tuttavia non dovrebbe volerci molto per riprenderle in maniera efficace.

Organizzazione del codice

Uno dei maggiori pregi che riconosco a Python è la semplicità con cui si possono creare e organizzare moduli e package personali al fine di riutilizzare il codice contenuto al loro interno. Questo, insieme ai virtual environment, rende molto più agile strutturare il codice dei vari progetti, mantenendo il proprio ambiente di sviluppo ed esecuzione pulito, ordinato e opportunamente segregato.

Strumenti a disposizione

Sebbene per sviluppare con Python (o qualsiasi altro linguaggio di programmazione) sia sufficiente un semplice editor di testo, ci sono alcuni IDE che semplificano molto le cose e consentono una maggiore velocità di sviluppo, nonché una maggiore capacità di individuare e correggere più rapidamente gli errori.

Un paio di anni fa, convinto di dedicarmi in maniera più assidua allo sviluppo web con i framework Django e Flask, entrambi basati su Python, ho deciso di acquistare la versione professional di PyCharm, probabilmente il migliore IDE per Python attualmente in circolazione. La versione professional, a differenza di quella Community, ha delle integrazioni che supportano lo sviluppo con questi framework, semplificando ulteriormente le cose. Ovviamente non ho mai sfruttato appieno questo IDE, ma la licenza ce l’ho ancora.

Quando, più di recente, ho deciso di puntare su Rails per lo sviluppo web, ho tentato più volte di utilizzare Visual Studio Code (orrore!) ma purtroppo non sono mai riuscito a trarne grossi vantaggi. L’equivalente di PyCharm per Ruby si chiama RubyMine, ma sinceramente non me la sono sentita di buttare via altri soldi per comprare la licenza.

Materiale didattico

Ho diversi manuali per lo sviluppo con Python, Django, Flask, Ruby e Rails, tutti abbastanza completi e fatti bene, ma a causa delle mie indecisioni non sono mai riuscito a concentrarmi fino in fondo su nessuno di essi.

Per quanto riguarda il materiale disponibile on line, invece, trovo che i corsi e i tutorial migliori siano quelli dedicati a Python. Solo limitandomi a quello che si trova su YouTube, mi basta citare i video di Corey M. Schafer e di Federico Azzurro (Indently.io) per darvi un’idea dell’elevata qualità di questo materiale.

Corsi, articoli e tutorial su Ruby fatti bene sono un po’ più rari e il più delle volte sono orientati prevalentemente allo sviluppo web con Rails.

Diffusione

A questo proposito non c’è molto da dire. Python è usato e supportato ovunque, mentre Ruby può essere quasi considerato un linguaggio di nicchia. Sicuramente ci sono software fatti con Ruby (e Rails) molto usati e di altissima qualità (basti pensare a Discourse, Jekyll o Metasploit) ma, quando c’è da trovare una soluzione rapida ed efficace ad un problema, Python è il linguaggio al quale si ricorre maggiormente.

Disponibilità di librerie

Python e Ruby hanno un approccio molto simile per quanto riguarda la condivisione e pubblicazione di librerie, tuttavia il codice disponibile per Python è quantitativamente maggiore, copre una superficie più ampia di casi d’uso ed è maggiormente manutenuto. Non è raro andare su RybyGems per cercare qualcosa che possa essere utile al proprio progetto, trovarla e poi scoprire che si tratta di codice abbandonato da almeno dieci anni oppure allo stato di semplice stub o poco più. Un esempio lampante è rappresentato dal binding con librerie grafiche come Qt, GTK o Tcl/Tk per lo sviluppo di applicazioni desktop, per cui Ruby è una strada veramente poco percorribile.

Per Python, al contrario, qualunque sia l’ambito in questione è probabile che si trovi almeno una mezza dozzina di librerie e package aggiornati, ben documentati e funzionanti. O almeno questo è quanto posso affermare sulla base della mia esperienza personale.

Utilità in ambito lavorativo

Qui mi riferisco in particolare al mio ambito lavorativo, vale a dire quello del networking. Che si possa fare network automation anche con Ruby è fuori di dubbio, ma con Python c’è maggiore supporto da parte dei principali vendor e, come detto al punto precedente, maggiori package già pronti all’uso.

Un esempio fra tutti sono le librerie per interagire con dispositivi di rete Juniper. La libreria ruby-junos-ez-stdlib non è più aggiornata dal 2018, mentre la corrispondente Python è mantenuta molto attivamente.

Anche i corsi e le certificazioni per DevOps, fra tutte quelle di Cisco e Juniper, utilizzano come linguaggio di riferimento proprio Python, e questo la dice lunga sulla possibilità di essere maggiormente produttivi in questo ambito rispetto a Ruby. Ricordiamo poi che lo stesso Ansible, che ormai è lo strumento standard per network automation, orchestration e configuration management, è fatto anch’esso in Python, anche se non è richiesto di conoscere il linguaggio per utilizzarlo in maniera efficace.

E Ruby?

Dal punto di vista dell’eleganza e della leggibilità del codice, trovo che Ruby sia nettamente superiore a Python. Scrivere codice in Ruby è molto più divertente; alcuni sostengono che sia più difficile da imparare, ma sinceramente trovo che la curva di apprendimento sia paragonabile a quella di Python.

Anche dal punto di vista della potenza e dell’espressività, entrambi i linguaggi si equivalgono ed è possibile fare le stesse cose tanto con l’uno quanto con l’altro, almeno in teoria. Mi dispiace veramente molto dover abbandonare lo studio e l’uso di Ruby, anche e soprattutto perché il framework Rails è una killer app nel suo settore, cioè quello dello sviluppo web.

Chi sostiene che Django sia l’equivalente Python di Ruby on Rails, secondo me, dice una enorme stupidaggine. Basti solo osservare in che modo è organizzato il codice in Rails rispetto a Django per rendersene conto.

Ad ogni modo non credo che questo sia un addio, ma piuttosto un arrivederci. Punterò molto su Python per tutto quello che riguarda il mio impiego ufficiale, cioè quello di network engineer, ma in futuro tornerò a Ruby per occuparmi (spero) di sviluppo web.

Ultimo aggiornamento: 18 Aprile 2024 (Gica78R)