Ho iniziato a programmare quando ero al liceo. Mi hanno insegnato le lingue HTML e Pascal tra le altre cose. Ma stavo anche frequentando alcune lezioni di programmazione estiva in un istituto IT. È lì che ho imparato Visual Basic e la progettazione di software e database (A quel tempo, abbiamo usato MERISE (Méthode d'Etude et de Réalisation Informatique pour les Systèmes d'Entreprise)). Ad un certo punto ho installato Visual Basic sul mio computer di casa e potevo esercitarmi da solo, con i libri.
Ma non è stato fino a dopo il diploma di maturità che ho iniziato a studiare e applicare C# quasi a tempo pieno durante la scuola di specializzazione, ed è quello che considero il mio vero inizio nella programmazione e ingegneria del software.
Ho imparato alcune lezioni negli ultimi dieci anni e ho pensato che avrei preso un momento per raccogliere le mie opinioni su questi argomenti. Mi ci sono voluti circa dieci anni e molta sperimentazione per capire alcune di queste cose.

 

1. L'apprendimento di un linguaggio di programmazione è la parte più facile: essere consapevoli e fare attenzione alle piattaforme
Prendi C# per esempio. L'apprendimento del linguaggio C# non è difficile. Se hai già una buona conoscenza dei fondamenti del linguaggio informatico e se hai esperienza in altri linguaggi orientati agli oggetti, puoi diventare un programmatore C# competente in pochi giorni, almeno per quanto riguarda il linguaggio lui stesso. Tuttavia, il prezzo reale da pagare non riguarda il linguaggio, riguarda la piattaforma. Per sviluppare con C# su .NET, devi sapere:
- il framework .NET
- una o più tecnologie .NET come ASP.NET o WPF
- e l'ambiente di sviluppo di Visual Studio.
Il tempo necessario per acquisire competenza nello sviluppo di .NET viene generalmente misurato in mesi, anche per uno sviluppatore esperto. L'apprendimento di una piattaforma è sempre più costoso dell'apprendimento di un il linguaggio specifico, pertanto la scelta della piattaforma è la decisione più cruciale.
L'apprendimento ha sempre un costo e questo costo è uno dei fattori chiave da considerare quando si sceglie la tecnologia che si desidera imparare. Il vero costo dell'apprendimento è nel tempo, l'apprendimento richiede sempre tempo. Dal momento che non hai tempo per imparare tutto, è importante pensare strategicamente a ciò che vuoi imparare. E poiché i linguaggi sono semplici, è necessario prestare attenzione alle piattaforme: le tecnologie associate al linguaggio, gli strumenti di sviluppo e distribuzione, i sistemi operativi e altre infrastrutture.

 

2. Ripeto, l'apprendimento di un linguaggio di programmazione è la parte più semplice: capire i concetti fondamentali dell'ingegneria del software
La sintassi stessa, le parole che usi quando applichi il linguaggio sono relativamente semplici e puoi impararle facilmente. Tuttavia, questo è ben lungi dall'essere sufficiente per la produzione di codice di qualità, che spesso coinvolge principi OOP, TDD, BDD e SOLID, test unitari, schemi di progettazione e altri concetti tecnici che esulano dallo scopo di questo articolo. Allora...

 

3. In realtà la scrittura del codice è solo una (piccola) parte del lavoro
Un ingegnere del software è spesso coinvolto nella ricerca tecnologica, nella configurazione di strumenti e progetti, nelle attività DevOps e di amministrazione, nelle procedure di debug e test, nella documentazione e nel debito tecnico (correzione e refactoring del codice esistente). Inoltre, deve pensare a soluzioni e progettare sistemi: a volte, il lavoro più importante viene svolto mentre siamo lontani dalla tastiera.

 

4. Ricette collaudate ed efficaci: le vecchie tecniche noiose sono talvolta le migliori
Non è davvero "vecchio contro nuovo", o addirittura "cool contro noioso", ma piuttosto la tecnica con cui hai più esperienza. Come dice il proverbio, non mi fido dello sviluppatore che ha praticato 1000 tecnologie una volta, ma mi fido dello sviluppatore che ha praticato la tecnologia pertinente 1000 volte. Se l'obiettivo è costruire qualcosa nel modo più efficiente e rapido possibile, sarebbe più produttivo utilizzare le tecnologie che padroneggi meglio.
Ad esempio, uno dei miei contatti guadagna $ 25.000 al mese con un SaaS che ha creato con una combinazione noiosa: ASP.NET + SQL Server + Angular 1, perché era quello che sapeva. Lo ospita su Windows, perché sa come rendere Windows veloce e sicuro. Ci è riuscito perché dedica tutto il suo tempo alla costruzione della funzionalità richiesta dai suoi clienti, piuttosto che all'apprendimento delle tecnologie più popolari.
È importante rendersi conto che il tapis roulant tecnologico non si ferma mai. Ci sono sempre cose nuove da imparare. Ancora un altro framework JavaScript potrebbe essere stato lanciato mentre stai leggendo questo. La tecnologia all'avanguardia di oggi non esisteva nemmeno quando stavo iniziando (EF Code First, Xamarin, ASP.NET Core, Razor), e questo ci porta ai 2 punti successivi.

 

5. Focus su tecnologie sostenibili
L'unica costante al mondo è il cambiamento. La gestione delle azioni e del tempo è un'abilità importante per gli sviluppatori, in particolare perché siamo su un tapis roulant tecnologico che continua a muoversi o addirittura ad accelerare.
Ad esempio, le tecnologie Web che erano popolari intorno all'anno 2000 (Flash, ASP Classic e Java Applet) stanno diventando quasi obsolete e in calo sul mercato. Oggi parliamo di ASP.NET Core, SignalR, Angular2, React e VueJS. Nessuna di queste tecnologie esisteva nel 2000 e queste nuove tecnologie saranno probabilmente obsolete entro 10 anni.
Cosa non è veramente cambiato? I fondamenti di linguaggi come C++ / C#, le loro implementazioni di algoritmi e i loro principi sono ancora rilevanti dopo diversi decenni. Se padroneggi le basi di un sistema stabile, potresti adattarti per cambiare meglio, apprezzarlo e usarlo per evolvere.

 

6. Equilibrio tra esplorazione e sfruttamento
L'esplorazione riguarda l'apprendimento di nuove cose, lo studio di nuove tecniche, la lettura di libri, la visione di tutorial video, la pratica e il miglioramento delle competenze. Lo sfruttamento, tuttavia, è di trarre vantaggio da ciò che già sappiamo per risolvere i problemi della vita reale. Si tratta di pensare in modo creativo ai modi di utilizzare le conoscenze che già abbiamo per creare valore per gli altri.
Quindi sì, entrambi questi compiti sono sia necessari che importanti. Il rischio è concentrarsi troppo su una di queste attività.
Con troppa esplorazione non otterrai mai un utile livello di competenza nella tecnologia scelta. C'è un enorme costo di opportunità con questo tipo di apprendimento della luce, perché, sebbene espanda la tua mente, il tempo impiegato implica che non migliorerai davvero le abilità che hai già acquisito.
D'altra parte, un eccessivo sfruttamento può impedirti di evolvere in nuove tecnologie e può limitare le tue opportunità di lavoro.

 

7. È facile essere eccellenti... È difficile essere coerenti.
È facile essere eccellenti per 2 minuti. È difficile rimanere sempre eccellenti ogni giorno.
Quando hai una buona idea per un nuovo progetto, senti un grande desiderio di iniziare la ricerca, la progettazione e la programmazione. Hai fretta di trasformare la tua idea in qualcosa di reale e diventi super produttivo. Ma il problema è che questa motivazione si attenua nel tempo.
Sì, è divertente ed è facile avere nuove idee e iniziare a lavorarci. Ma poi ci sono gli sforzi da fare, le regolazioni, il lancio, la manutenzione, le correzioni, i miglioramenti e così via. Per diversi mesi. Questo è dove diventa difficile. È difficile rimanere concentrati sulla stessa idea, sullo stesso progetto per mesi e anni. Ci vuole molta disciplina.
È facile essere eccellenti. È difficile essere coerenti.

 

8. Diversifica le tue abilità
Non essere solo un programmatore, diventa un esperto che programma, un esperto in un altro settore pertinente di cui sei appassionato. Puoi essere un imprenditore, un project manager, uno scienziato di Big Data, un ricercatore, uno specialista della sicurezza, ecc. Se sei un esperto che programma, oltre a essere in grado di programmare (forse a tempo pieno), hai anche un ulteriore credibilità correlata a qualcosa di diverso dall'ingegneria del software.
Da qui l'importanza di perseguire l'istruzione superiore. Se vai all'università e sai già come programmare, probabilmente non imparerai molto sulla programmazione. Ciò non significa che non dovresti andare in questo tipo di scuole. Avrai bisogno di una certa cultura e le università sono ottimi posti per ottenerla. Tu acquisisci cultura studiando e comprendendo il mondo che gli umani hanno creato, da diverse angolazioni. Sarebbe difficile acquisire questo tipo di conoscenza se non fai altro che studiare la programmazione.

 

9. Scegli le tue nicchie per distinguerti
Più piccola è la nicchia che scegli, maggiore è la tua possibilità di essere visto come uno dei migliori nel tuo campo. Ad esempio, è molto difficile per gli sviluppatori distinguersi con un titolo come "Sviluppatore PHP". Sono competenti, versatili, utili, ma non notevoli. Si sentono facilmente sostituibili perché ci sono così tante altre persone con un set di abilità comparabili. Il campo è troppo ampio per distinguerti facilmente dalla folla. Se, d'altra parte, diventi noto per una nicchia, come Xamarin.Forms o visualizzazioni JavaScript, hai molte più probabilità di essere prezioso per coloro che cercano specificamente quel set di competenze.

 

10. Era di Competenze
Le informazioni sono le conoscenze specifiche necessarie per risolvere i problemi. Le competenze rappresentano la capacità di implementare soluzioni usando le tue conoscenze.
In un mondo in cui la maggior parte delle conoscenze e degli strumenti sono praticamente gratuiti, cosa fa la differenza? Le abilità, ovviamente. Non siamo più una società basata sulla conoscenza, siamo una società basata sulle competenze. C'è stato un tempo in cui quasi tutti i titoli di studio universitari garantivano un buon lavoro. Ora non è più così. A nessuno importa quello che sai. Alla gente importa cosa puoi fare. Ti pagano per fare le cose, non per sapere le cose.

 

Impara a programmare in 10 anni
I ricercatori hanno dimostrato che occorrono circa dieci anni (o 10.000 ore) per sviluppare le competenze in un campo.
La soluzione è una pratica riflessiva: Non è sufficiente ripetere le stesse cose più e più volte, ma dovresti sfidare te stesso con un compito che supera le tue attuali capacità, provarlo, analizzare le tue prestazioni e correggere tutti gli errori. Quindi ripeti. E ripeti ancora. Sembra che non ci siano scorciatoie reali. L'apprendimento attraverso la lettura è buono. Ma sporcarsi le mani in pratica è meglio. Il miglior tipo di apprendimento è imparare facendo.
Personalmente, piccoli progetti e prototipi mi hanno aiutato a migliorare. Ma ci sono ancora cose interessanti da padroneggiare, quindi continuiamo a imparare.