Questo articolo è la traduzione della risposta data da Brian Feldman alla domanda Why don't more people work as programmers? apparsa su Quora e ripresa dal seguente articolo su Forbes .
Diventare un buon programmatore è incredibilmente difficile e non accade rapidamente.
Non possiamo aspettarci di piantare alcuni alberi e ottenere la crescita di sequoie di 2000 anni in una notte, indipendentemente dalla richiesta per esse.
I tratti della personalità#
In sostanza bisogna essere degli autodidatti per imparare la programmazione. Ci vogliono anni di pratica per imparare tutto il necessario per andare oltre un semplice livello base dove puoi scrivere piccoli programmi che funzionano. Nessuno è mai diventato un grande programmatore semplicemente seguendo corsi o leggendo libri. Ci vogliono ore di pratica. E contrariamente alle credenze popolari, i programmi dell'università non insegnano a programmare. I programmi dell'università insegnano la teoria.
Come programmatore, hai bisogno di avere una tenacia quasi illimitata per poter continuare a provare a risolvere problemi, correggere e sviluppare cose. C'è bisogno di una persona speciale per perseverare così tanto, specialmente quando spesso sembra che non si stia facendo alcun progresso. Questo è più o meno un tratto della personalità e non avere questo livello di perseveranza è sufficiente per spegnere la maggioranza delle persone che non lo possono avere dalla professione.
Devi essere eccezionale in matematica e nella risoluzione di problemi. La programmazione ha un sacco di problem solving.
Devi avere un memoria eccellente a breve e a lungo termine, in modo che tu possa manipolare più cose nella tua testa contemporaneamente e ricordare quello che hai scritto un mese fa.
Devi avere una vasta comprensione di come le cose interagiscano tra loro e come progettare una buona architettura. Se cambio questa piccola cosa qui, cosa potrei rompere da qualche altra parte?
Devi avere un'incredibile attenzione ai dettagli. Vicino non è sufficiente nella programmazione. Dimentichi un punto e virgola? Il programma non compilerà! Sbagli il nome di una funzione? Il programma potrebbe fare qualcosa di completamente differente da quello che avevi previsto.
Non avere questi tratti della personalità è sufficiente per escludere la maggior parte delle persone.
La materia conta#
Devi avere una profonda comprensione delle strutture dati e delle classi e devi sapere quando e come usarle.
Devi avere familiarità con librerie che sono già state sviluppate in modo che tu non debba reinventare la ruota.
Devi avere familiarità con un sacco di algoritmi base e avanzati, di nuovo, in modo che tu non debba reinventare la ruota.
Spesso devi conoscere i limiti dell'hardware su cui sta lavorando in modo da poter fare cose come gestire la memoria correttamente ed evitare di consumarla tutta, o utilizzarla opportunamente in modo da eliminare lo spreco di dati nei trasferimenti all'interno del processore e velocizzare così l'esecuzione.
Quindi sai programmare. Grande! Ma sai nulla della struttura dei pacchetti, di TCP/IP, HTML, CSS, progettazione di interfacce utente o database? I programmi non girano isolati.
Ci sono tonnellate di roba che devi sapere e che continua a cambiare! Non è qualcosa in cui puoi essere veramente grande a meno che non sia il tuo obbiettivo principale. Non puoi essere un "programmatore della domenica".
Ambiente di lavoro#
Hai bisogno di avere lunghi periodi di tempo ininterrotto in modo da non perdere la concentrazione quando stai programmando o imparando a programmare. Molti ambienti di lavoro lottano per offrire questo. Il telefono squilla? Grande, serviranno 15 minuti per recuperare il filo logico.
Spesso devi prendere delle decisioni al volo su compromessi. Certo, potresti scrivere un programma che possa gestire ogni singolo caso, ma quanto spesso qualcuno inserirà davvero "zero" come input? Inoltre, siamo in ritardo ed è più importante avere qualcosa di funzionante adesso.
Sopra a tutto ciò, il linguaggio di programmazione che pensavi sarebbe stato la prossima grande cosa si è rivelato una moda passeggera e nessuno lo sta più usando 5 anni più tardi. Adesso sei sul prossimo linguaggio fico che potrebbe non essere utilizzato prima dei prossimi 5 anni. Devi costantemente rimanere aggiornato.
Oltre a ciò ci sono gli aspetti manageriali.#
I Programmatori vengono spesso trattati come operai. Le persone senza talento nella programmazione (e meno senso degli affari) sono spesso responsabili di progetti. Loro pensano che i programmatori siano ingranaggi all'interno di macchine. La verità è che i programmatori sono artigiani e per ottenere i migliori risultati da un progetto la cosa più saggia da fare sarebbe quella di chiedere a chi è esperto nella programmazione come le cose andrebbero fatte! Praticamente tutti i progetti finiscono per sforare il budget e in ritardo, obbligando i programmatori a lavorare tonnellate di ore più del necessario per consegnare un prodotto progettato e testato male. I grandi programmatori si accorgono che non vengono pagati più di quelli mediocri perché il management non sa capire la differenza e, oltre a ciò, devono fare lavoro extra per compensare il basso livello dei colleghi. E i grandi programmatori che parlano e cercano di migliorare le cose vengono spesso intimiditi dai managers i quali tentano spesso di sbarazzarsene. Questo è sufficiente per capire come mai le buone persone lascino perdere la professione, specialmente da quando ci sono un sacco di altre opportunità. Anche solo i programmatori medi, posto che siano abbastanza bravi a interagire con le persone, hanno sufficienti capacità per avere successo in molte altre professioni. La programmazione è qualcosa che può essere facilmente trasferita al di fuori, ma non all'interno.
È meno probabile che i bravi programmatori siano casualmente in cerca di lavoro.#
È facie trovare programmatori. È difficile trovare programmatori bravi. I programmatori mediocri sono probabilmente alla costante ricerca di lavoro. I programmatori bravi, se l'azienda si accorge che sono bravi, lo sono probabilmente molto meno poiché l'azienda fa qualsiasi cosa per aggrapparsi a loro. E quando lo fanno sono esigenti su dove vogliono lavorare - il che spiegherebbe perché molte aziende si lamentano che "non ci sono bravi programmatori disponibili, tutto quello che riusciamo a trovare sono programmatori mediocri". Come è stato detto altrove, un buon programmatore può certamente valere molte volte quello che un programmatore medio vale e un programmatore mediocre può in realtà avere un valore negativo. Ed è veramente dura (se non impossibile) per i programmatori medi e mediocri diventare dei buoni programmatori - e certamente il rischio non vale l'investimento per nessuna startup quando si suppone che sia concentrata su sviluppare qualcosa rapidamente per averlo fuori dalla porta.