PHP è morto? La guerra dei linguaggi di programmazione

Perché, da imprenditore, non dovresti farti appassionare dalla guerra dei linguaggi e su quali basi dovresti scegliere il linguaggio di programmazione del suo software

TL;DR

Se, da imprenditore o decision-maker non tecnico, devi effettuare una scelta su quale linguaggio di programmazione utilizzare per il software che vuoi costruire, è facile farsi trascinare in lunghe ricerche, liste di pro e contro e derive eccessivamente tecniche.

Non farlo. Se intendi costruire un software web, a meno che tu non ricada in casi estremamente particolari, con grande probabilità dal punto di vista tecnico una qualsiasi delle maggiori tecnologie back-end moderne vale l’altra (PHP, Java, Ruby, Python, NodeJs, ecc...)

È fuorviante ragionare su aspetti tecnici marginali e cercare l’ottimizzazione assoluta dal momento che il vero impatto non è dato dal linguaggio scelto, ma da chi andrà a lavorarci e come.

PHP è un ottimo linguaggio di programmazione: è veloce, moderno, con una vastissima community e, vista la bassa probabilità che il tuo progetto sia così peculiare da richiedere qualcosa che PHP non sa fare bene o non può fare, va benissimo.

La dura scelta di un linguaggio di programmazione

Un software è un programma con cui diamo delle istruzioni a una macchina ed è composto da una serie di istruzioni codificate attraverso le quali comunica ai nostri dispositivi cosa devono fare e visualizzare. Le istruzioni con cui il software dice al dispositivo come comportarsi sono codificate in un linguaggio di programmazione. Questo può essere immaginato come un vero e proprio linguaggio, composto da una serie di standard che permettono al programmatore di controllare il comportamento delle macchine su cui il software verrà elaborato.

Non diversamente da ciò che succede tra due individui che per comunicare devono condividere la conoscenza di una stessa lingua, il programmatore, attraverso il dominio di un linguaggio di programmazione, sa quali istruzioni la macchina è in grado di comprendere, come si aspetta le informazioni e quali sono le regole “sintattiche” concordate. Di linguaggi ne esistono innumerevoli, ciascuno con le sue caratteristiche e i suoi difetti, comprensibile da alcuni dispositivi e non da altri, con i suoi casi d’uso e via dicendo.

In una simile Torre di Babele informatica, da sempre gli sviluppatori cercano di orientare la loro scelta di apprendimento, di specializzazione e di utilizzo in base ai linguaggi di programmazione che credono essere più efficaci per l’ambito in cui lavorano. Si tratta di una scelta che non è affatto facile vista la quantità di possibili alternative che il mondo dell’informatica offre.

Per la parte backend delle nostre applicazioni (cioè quello che accade “dietro le quinte” di un software web) in BitBoss abbiamo scelto da tempo di specializzarci in PHP, uno dei linguaggi di programmazione web più celebri, tramite un framework di sviluppo come Laravel. Nella vastissima comunità di sviluppatori, divisa in gruppi e sottogruppi, PHP ha inevitabilmente i suoi detrattori che ne criticano la fama e l’utilizzo. In questo articolo vorrei provare a spiegarti perché, come imprenditore, la “guerra dei linguaggi” (tanto cara ad alcuni informatici) è qualcosa in cui non dovresti farti coinvolgere. Chi sostiene la spesa della creazione di un software dovrebbe cercare di curare al meglio l’efficacia, la resa e il ritorno dell’investimento. Imbarcarsi in complesse diatribe tecniche e teoriche è il modo sbagliato e talvolta dannoso di esaminare i pro e contro di un linguaggio di programmazione nel momento in cui la tua impresa avrà la necessità di effettuare, o almeno avvallare, una scelta in merito.

Un linguaggio di programmazione è esclusivamente uno strumento, non un fine, che viene utilizzato per costruire i software che utilizziamo. Ecco a cosa dovresti prestare attenzione.

Caso di utilizzo

Ogni linguaggio di programmazione ha le sue peculiarità, pregi, difetti e spesso una propria filosofia dietro alla community che lo mantiene e migliora. Non tutti i linguaggi sono equivalenti, alcuni sono obbligatoriamente destinati a un particolare ambiente: Swift, il linguaggio di programmazione di Apple, non può essere usato per applicazioni Android, come Java non può costituire la base di una App per iPhone. Altri linguaggi sono la scelta più efficace, ma non obbligata, per determinati ambiti di utilizzo. Python ad esempio, che nasce e prospera come linguaggio di backend general-purpose, si è rivelato essere ottimo in ambito AI (Artificial Intelligence) grazie alle sue librerie e all’ottimizzazione dei processi di sviluppo.

In tutti gli altri casi (la stragrande maggioranza in realtà) la scelta del linguaggio di programmazione ideale è solo tema di preferenza personale. È del tutto indifferente dal punto di vista tecnologico sviluppare il backend della nostra App in Ruby o Python o creare il nostro CRM aziendale in PHP o Java. Quello che conta è l’abilità degli sviluppatori, la padronanza del linguaggio e dell’architettura che lo circonda. Temi come performance e sicurezza non sono affatto irrilevanti ed è utile, a volte fondamentale, che chi deve decidere conosca bene questi aspetti che sono più legati al “come” che al “cosa”.

Quando si sviluppano un sito web o una web app esistono tantissime alternative, molte delle quali estremamente valide. Si può scegliere di creare una Single Page Application con delle API di un CMS Headless o utilizzare un framework frontend con Server Side Rendering o ancora scegliere di creare una Multi Page Application. Sono tutte scelte da ponderare, ognuna con dei pro e dei contro spesso evidenti. Queste scelte però sono architetturali, legate quindi a come comunicano le diverse tecnologie e a come funzionano, non a quale linguaggio di programmazione sia meglio utilizzare. Il tema è quindi decidere come funziona il nostro software, non da cosa è costituito.

Per capire i vantaggi di una scelta architetturale rispetto ad un’altra è fondamentale farsi spiegare e consigliare opportunamente, farsi una propria idea, stressare i concetti. Compreso il funzionamento di base, scegliere il linguaggio di programmazione che ne determinerà il funzionamento non è più importante e ogni azienda, consulente o programmatore promuoverà unicamente il linguaggio su cui si sente più a suo agio.

Ecosistema

La diffusione di un linguaggio di programmazione non è tema da scartare con leggerezza. È gratificante scoprirsi pionieri di qualche nuova tecnologia promettente, poter agire fuori dal coro e andare controcorrente o al contrario continuare a utilizzare ciò che ha sempre funzionato bene ignorando le nuove evoluzioni. Talvolta scegliere un linguaggio poco utilizzato o addirittura di nicchia può avere motivi validi. Bisogna assicurarsi però che siano estremamente fondati e non legati, come spesso accade, a emotività, mode, entusiasmi passeggeri, orgoglio o fossilizzazione.

In assenza di ragioni razionali, scegliere un linguaggio che abbia un’ampia base di utilizzo è sempre un’idea migliore. Ad oggi PHP è il linguaggio di sviluppo alla base di quasi l’80% dei siti Web più frequentati. Nel 2010 i siti Internet animati tramite PHP erano il 72.5%. I dati di utilizzo di PHP, che ne fanno il linguaggio in assoluto più utilizzato per il suo ambito di utilizzo, sono “drogati” dall’enorme diffusione dei più popolari CMS come Wordpress, Joomla, Magento, tutti costruiti e basati su PHP. Molto spesso l’utilizzo di questi CMS non è gestito da programmatori visto che una delle raison d’etre di un CMS è proprio liberare l’utilizzatore dal fardello della programmazione tramite facili installazioni e gestioni da interfaccia grafica.

Molti dei più celebri siti web al mondo tra cui Facebook, Wikipedia, Yahoo, Flickr, Tumblr utilizzano per buona parte del loro codice sorgente strutture in PHP. Basare la scelta del linguaggio sulla fama di chi lo utilizza può essere fuorviante, la riprova sociale è forse un’argomentazione poco razionale e il caso di utilizzo può essere diverso dal nostro. L’aspetto importante di una forte diffusione non è dunque il numero o la fama dei software che usano un linguaggio, ma l’ecosistema, cioè il numero di librerie, strumenti, programmatori, aggiornamenti e fermento che sta loro intorno. Inevitabilmente, un linguaggio largamente utilizzato avrà molte persone che con esso lavorano, che creeranno librerie e pacchetti, cioè porzioni di codice riutilizzabili, che contribuiscono a velocizzare e irrobustire fortemente il nostro lavoro sul software dotandoci di strumenti che altrimenti avremmo dovuto costruire noi con tempo, impegno e minor qualità. Sarà presente una community attiva, capace di dare soluzioni ai nostri problemi già risolti da altri in passato. Saranno possibili frequenti aggiornamenti al linguaggio di programmazione e alle librerie che usiamo, dotandoci delle ultime patch di sicurezza disponibili. Verranno infine sviluppati continuamente nuovi strumenti e software destinati ai numerosi sviluppatori che possano aiutarli a rendere sempre migliore e più efficiente il loro lavoro.

Nessun programmatore è un’isola, ma vive più o meno consapevolmente immerso nel sistema di riferimento delle tecnologie su cui lavora, utilizza librerie e strumenti fatti da altri, studia da chi è più esperto di lui. La robustezza dell’ecosistema, la numerosità e qualità della community, il fermento che ruotano intorno a un linguaggio hanno una ripercussione importantissima sulla velocità di sviluppo e di evoluzione e sulla qualità del nostro software.

Hiring

PHP, come Javascript e molti altri linguaggi, ha una bassissima barriera all’ingresso. È un linguaggio accessibile e per impararne i rudimenti bastano motivazione e impegno, non è necessaria una grande esperienza pregressa. Per questo motivo tantissimi programmatori iniziano la loro carriera da PHP e nelle scuole di programmazione rappresenta una delle prime materie d’insegnamento.

Questa facilità di ingresso porta ad avere un gran numero di programmatori, alcuni dei quali senza la giusta esperienza per produrre una code base che sia sufficientemente sicura e affidabile ed è uno dei motivi che hanno minato la fama di PHP nel tempo. In poco tempo un professionista è in grado di raggiungere un livello di esperienza tale da essere autonomo e affidabile, ma prima che raggiunga questo livello è inevitabile che debba ancora essere supervisionato e guidato. La capacità di reperire, assumere, mantenere e far crescere programmatori validi è uno dei fattori determinanti in qualsiasi impresa che produce o deve curare dei software. In questo periodo è più difficile che mai per qualsiasi azienda assumere risorse di talento, dato il generale boom di domanda che fatica a essere servita da un’adeguata offerta di sviluppatori. Ciò rende fattori come cultura aziendale, possibilità di crescita, ambiente di lavoro, capacità di governance tecnica, aspetti estremamente cari a chi voglia andare a lavorare per una determinata azienda.

Scegliere un linguaggio di programmazione che permetta di attingere a una buona base di candidati developer è fondamentale per evitare di venire strozzati da mancanza di capacity e risorse nel portare a compimento i nostri sviluppi continui. Quando si sceglie un linguaggio è necessario ragionare nel lungo termine: sceglierne uno meno utilizzato significa essere in maggiore difficoltà nell’attrarre nuove persone da aggiungere alle proprie fila per incrementare la capacità di sviluppo o per rimpiazzare chi ha sviluppato parti di un’applicazione in passato. Esiste il rischio che, facendo fatica a trovare qualcuno che possa curarne anche solo aggiornamenti e manutenzione, ci accorgiamo di non essere più in grado di intervenire sul software su cui tanto abbiamo investito.

La scelta non è oggi tra i linguaggi di programmazione che possano attrarre sviluppatori migliori rispetto ad altri, ma quelli che possano portare degli sviluppatori o non portarne affatto. Se è dunque vero che la quantità di sviluppatori è uno dei fattori predominanti, la competenza di chi viene a lavorare per noi si può facilmente selezionare affinando processi di assunzione più efficaci o creando dei percorsi di crescita e formazione interni, dando la possibilità agli sviluppatori più junior di creare software più semplici e marginali, in modo da “imparare facendo” con rischi e investimenti bassi.

Manutenibilità

Chi si approccia alla creazione di un software raramente è mosso dalla risoluzione di qualche problema di breve termine. Visti gli investimenti spesso ingenti a cui si deve far fronte, chi commissiona la costruzione di una propria soluzione informatica lo fa tenendo ben presente vantaggi e svantaggio di lungo periodo, conscio che i dividendi della propria spesa saranno pagati negli anni a venire. Per questo motivo la scelta del linguaggio di programmazione deve richiedere forte attenzione a quanto un programma può “vivere” nel tempo. Dopo una sufficiente quantità di tempo qualsiasi software diventa sempre più difficile da manutenere (aggiornare, pulire ed estendere), fino a rendere eccessivamente oneroso continuare a lavorarci sopra.

La durata della vita di un software dipende da moltissimi fattori, dove l’elemento preponderante è la qualità della code base costruita, ovvero il modo in cui il software è stato scritto dai programmatori che nel tempo hanno contribuito alla sua realizzazione. Un codice non adeguatamente testato e documentato, scritto in maniera caotica e disordinata, con numerosi strati di sviluppo incrementali che poggiano uno sull’altro su fondamenta deboli, è la prima causa di veloce decadimento della manutenibilità di un software, rendendo difficilissima la vita a chi deve curarne il funzionamento.

Questo aspetto è da prendere in considerazione in maniera del tutto indipendente rispetto al linguaggio di programmazione scelto ed esistono numerosi modi per mitigare l’entropia assolutamente naturale del caos che governa la storia di un software costruito dalla mano da tante persone. Esistono tecniche di programmazione, tecniche organizzative e gestionali, sistemi di test automatici e standard per rendere efficiente (fino a renderla superflua) la documentazione. Esistono numerosi framework di sviluppo, ovvero porzioni di codice già costruite e utilizzabili dai programmatori che danno delle linee guida più o meno rigide entro cui sviluppare le logiche del nostro software. Quando possibile è sempre meglio preferire l’utilizzo di un framework, magari controllandone il tasso di utilizzo, la storia e la sua evoluzione nella community dei developer.

PHP è un linguaggio di programmazione con una lunga storia ricca di frequenti aggiornamenti. L'aspetto positivo più lampante che caratterizza la sua evoluzione riguarda il miglioramento continuo che lo rende un linguaggio capace di rimanere sulla cresta dell’onda in fatto di prestazioni, comodità ed efficacia di sviluppo. Dall’altra parte, anni di evoluzione continua hanno inevitabilmente portato a errori, esperimenti poco riusciti, istruzioni e sintassi caotiche che nel tempo sono state risolte con successo dalla community PHP che si occupa di manutenere e aggiornare questo linguaggio di programmazione.

Quest’ultimo aspetto è il più sentito e tirato in causa dai detrattori di PHP. Tuttavia, come imprenditore che deve prendere una decisione, è decisamente ininfluente per ciò che andrai a costruire oltre a essere falso e fuorviante.

Perché chi lo odia, lo odia

Per la sua storia

PHP ha avuto problemi con la progettazione del linguaggio e le implementazioni di base, molti dei quali sono legati alla sua lunga storia. Nell’immaginario di molti sviluppatori PHP è rimasto nella versione 4, quando il linguaggio era instabile, con prestazioni scarse e OOP inesistente. Gli sviluppatori che odiano PHP credono che il linguaggio sia rimasto fermo per 20 anni. Quando si conosce PHP oggi si sa che è molto lontano da PHP4.

Per la diffusione

Usando PHP è facile produrre errori e altri linguaggi hanno restrizioni più forti. È possibile vedere problemi di sicurezza legati a software sviluppati in PHP; fattori legati molto più (o quasi esclusivamente) a come si è codificato un software anziché al linguaggio di programmazione in sé.

Molti sviluppatori odiano PHP perché è più probabile che si ottengano errori con un linguaggio che consente così tanta libertà. Inoltre, una forte diffusione del linguaggio significa avere tanti sviluppatori, inevitabilmente alcuni dei quali alle prime armi. Gli errori dei software mal programmati, con i relativi problemi di sicurezza, sono però dovuti a chi li ha scritti, non al linguaggio scelto.

Perché gli sviluppatori sono fatti così

I programmatori sono esseri umani, inclini ad aderire a un gruppo che dia loro autorità e status. Molti programmatori sono elitari, ossessivamente puristi, poco pragmatici, amanti del carrozzone e cercano una squadra con cui omologarsi e di cui diventare fan-boy. Per loro, soprattutto se si son formati un’idea ormai cristallizzata da anni, PHP è un bersaglio facile.

Letture interessanti

Riccardo Barbotti

Co-founder di BitBoss | Software Architect | Senior Developer