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.