Competenze permanenti nello sviluppo di software
da Davide Vallejo, Professore Universitario presso ESI-UCLM.
“Leggi ciò che ami finché non ami leggere.” La proposta che trae spunto da questa famosa citazione di Naval Ravikant mi ha portato a trovare, qualche anno fa, Morgan Housel. Adesso è uno dei miei scrittori preferiti. Morgan ha la straordinaria capacità di farti riflettere su moltissimi argomenti, legati alla vita e al comportamento delle persone, attraverso idee e argomenti che intreccia con piccole storie.
Il suo ultimo libro, intitolato Come sempre, si concentra sulla conoscenza di cose che non cambiano mai, mentre la tendenza generale della maggior parte di noi è quella di fare previsioni incerte su un futuro sempre più sconosciuto.
In uno degli episodi del suo podcast, anch'esso consigliatissimo, Morgan riflette sulle competenze che scadono o scadono e sulle competenze che sono permanenti.
Le competenze in scadenza Tendono ad attirare molta attenzione. Almeno, temporaneamente. Tendono ad esserlo argomenti più seguiti richiesto dal settore per migliorare le prestazioni a breve termine. Tendono anche a generare l’effetto FOMO (la paura di perdere).
Per contro, competenze permanenti Sono diversi. Sono sempre stati lì, e sempre lo saranno. Sono semplici. Sono basilari. Sono perfino silenziosi. Ma fanno la differenza nel lungo termine. Interesse composto nella sua forma più pura.
Tutto ciò mi ha portato a pensare alle competenze permanenti dal punto di vista dello sviluppo software. E in questo articolo ne elencherò 7 che ritengo particolarmente rilevanti.
- Abilità numero 1. Renditi conto che averne alcuni solidi fondamenti di programmazione rappresenta la pietra angolare. Questo è importante quanto avere una casa con buone fondamenta su cui costruire. Il debito tecnico è un problema ricorrente in molti progetti di programmazione. Per mitigarlo, è necessario proporre una buona progettazione del software. E per proporre un buon design è necessario avere solidi fondamenti di programmazione. Mi dispiace, ma non puoi imparare a programmare in 21 giorni.
- Abilità numero 2. Avere la capacità di farlo gestire le astrazioni, applicando le soluzioni esistenti ai problemi ricorrenti. Esatto; Probabilmente ci stai pensando: design pattern. La ruota esiste già, non reinventarla costantemente. Usare ciò che è ben testato e funziona fa risparmiare tempo e combatte il debito tecnico.
- Abilità numero 3. Identificare la complessità delle cose e accettarlo con umiltà quando non può essere evitato. Il principio del BACIO (Mantienilo semplice, stupido) è il tuo alleato senza tempo, ma ci sono progetti che sono intrinsecamente complessi. A volte non c’è altra scelta che affrontare la complessità e semplificare non è realistico.
- Abilità numero 4. Essere in grado di creare prototipi in modo agile, in modo che il paradigma di sviluppo o la tecnologia utilizzata non rappresentino un ostacolo significativo. Chiamo software di liquidità. Strumenti, tecnologie, linguaggi e perfino paradigmi cambiano continuamente. Riuscire a capire come funzionano in breve tempo e utilizzarli in modo pratico e agile è fondamentale. Padroneggia l'abilità numero 1 prima di acquisire l'abilità numero 4.
- Abilità numero 5. Capire il problema che il tuo cliente deve risolvere. Questo passaggio, precedente alla progettazione e allo sviluppo del software, è essenziale per raggiungere una conclusione positiva. La capacità di interagire e comprendere il cliente è insostituibile. Quasi quanto la capacità di dire no quando le proprie aspettative (requisiti dichiarati) superano la realtà (risorse disponibili).
- Abilità numero 6. Non ottimizzare eccessivamente. L’economia può essere intesa come la definizione di politiche di allocazione di risorse scarse. Ciò vale anche per lo sviluppo del software. Ricorda: “il tempo è il tuo bene più prezioso”. Concetto di percorso negativo. Avvertenza che si attiva ogni volta che un collega utilizza l'espressione “bene, eccoci qui”.
- Abilità numero 7. Sii generoso. Questa è una competenza permanente che potrebbe essere applicata a qualsiasi campo umano o professionale. Lo sviluppo del software è un lavoro collaborativo. Il codice che scrive uno sviluppatore deve essere compreso e utilizzato da altri colleghi. Presenti e futuri. La stessa cosa accade con la documentazione del codice, anche nei progetti realizzati da una sola persona: "La documentazione è una lettera d'amore che scrivi al tuo sé futuro". Se pensi che ChatGPT possa farlo per te, chiediti se davvero gli commissioneresti di scrivere una lettera d'amore per te.
Riferimenti
- L'almanacco di Ravirato navale.
- Come sempre. Morgan Housel.
- Il podcast di Morgan Housel.
- Il cigno nero. Nassim N. Taleb.
- Smettere: il potere di sapere quando andarsene. Anni Duca.