i Nuovi programmatori, benvenuto per l’industria del software di sviluppo, senza dover investire un decennio di carriera per imparare queste lezioni nel modo più duro.
Ora, alcune cose possono essere apprese solo dall’esperienza. Posso dirti che queste cose sono importanti, o che accadono davvero nel settore, ma potresti non credermi finché non le guardi accadere nella tua carriera. La decisione spetta a voi, ma qui ci sono i suggerimenti per il vostro beneficio, se si sceglie di imparare loro il modo più semplice.
1. Le abilità delle persone sono importanti anche per i programmatori
Sei appena uscito dal college. La tua testa è un giardino dove pianti molte cose interessanti e creative — dopo tutto, vivrai lì per il resto della tua vita, quindi perché no? Sei riluttante a far entrare le persone perché potrebbero distruggere e rovinare tutto il tuo duro lavoro con i loro diversi modi di pensare e fare le cose. Sei bravo ad assimilare-trovare nuove idee, scomporle e analizzarle, e poi piantarle nel vasto archivio dati del tuo cervello programmatore. Questo descrive la maggior parte dei programmatori abbastanza bene, e certamente mi ha descritto. Se è così, sei dentro per un bel aggiustamento.
Ci sono voluti quasi la metà della mia carriera decennale nei computer per rendersi conto che le persone possono essere difficili da lavorare a volte, e che il lavoro di un programmatore include molto di più che lavorare con i computer. Prima di lavorare con i computer, qualcuno deve capire che cosa è che in realtà vogliono spendere i loro soldi su-i soldi che stai pagati con. Una volta che lo capiranno, ci sarà un sacco di tempo trascorso nelle riunioni a discutere di qualsiasi cosa su di esso — quanto tempo ci vorrà, qual è il modo giusto per progettarlo e chi deve essere coinvolto. Queste discussioni sono raramente veloci o facili, e se già si lotta per comunicare in modo efficace e convincere la gente delle vostre convinzioni, non sarà più facile quando si deve usare termini tecnici che non tutti stanno andando a capire. Se, come il tipico programmatore descritto in precedenza, sei timido o riservato ed eviti di parlare durante le riunioni, questo è un altro ostacolo sulla tua strada.
Poi gettare nel mix il fatto che non tutti è facile andare d’accordo con, e hai una ricetta per guai. La maggior parte dei programmatori è già carente di abilità delle persone, quindi immaginano l’emozione di lavorare solo con i computer, qualcosa che capiscono molto meglio delle persone. Come spiega il paragrafo precedente, è il contrario. Che ti piaccia o no, passerai molto più tempo a lavorare con le persone che con i computer. Con il tempo si arriva finalmente a rimboccarsi le maniche e iniziare a “codifica come il vento,” probabilmente sarete malati di incontri e stanco di essere trattati come una risorsa, piuttosto che apprezzato per la vostra esperienza. Mentre ogni azienda è diversa, le aziende con una cultura aziendale amichevole e confortevole sono difficili da trovare. Non solo, ma le cose cambiano anche di giorno in giorno.
2. Esperienza senza autorità
Molto spesso, le tue idee su quella che sarà una soluzione software utile entrano in conflitto drammaticamente con le idee delle persone che effettivamente prendono quelle decisioni. Devi essere in grado di conviverci, lavorare su progetti temuti/noiosi e prendere i tuoi grumi come un adulto. Fred Brooks nel mitico Uomo-mese chiamato questa esperienza senza autorità.
È molto più probabile che finirai per mantenere il codice mal scritto di qualcun altro da 10 anni fa, svegliato da un cercapersone che ronza alle 3 del mattino sul tuo turno di supporto, piuttosto che essere scelto per scrivere una nuova applicazione web full-stack di fantasia da zero, con tutti i nuovi strumenti succosi che hai letto e salivato. Dopo tutto, nuovi strumenti possono essere costosi, e di solito non sei quello che prende le decisioni.
Certo, è un’idea stupida falciare un intero prato con un mangiatore di erbacce. Ma quando chiedi un tosaerba e ti viene detto “No”, puoi gettare la spugna o accontentarti del mangiatore di erbacce.
3. La naturale curiosità di sperimentare è un MUST
Avere una buona conoscenza della sintassi, della semantica e del linguaggio — come potresti guadagnare dall’essere un inglese, matematico o ingegneristico — fa molto per renderti un buon programmatore, ma non è tutto.
Più grande di questo non è aver paura di provare le cose – di spingere i pulsanti — di commettere errori-di vedere cosa succede. Curiosare un po’. Scrivi un codice errato e guardalo cadere piatto sulla sua faccia. Questo è il principale e il modo migliore per conoscere i computer. Se ti affidi agli altri per capirlo per te, stai solo limitando te stesso. Devi essere disposto a provarlo da solo e imparare dai risultati, buoni o cattivi.
4. Il compilatore/computer richiede la perfezione assoluta
Immagina di non essere in grado di inviare un’e-mail fino a quando non hai corretto ogni singolo errore di grammatica, parola errata e virgola mancante. Ti sembra ridicolo? Con un computer come il tuo capo, questo descrive OGNI e-mail. Tranne che invece di una e-mail, stiamo parlando di scrivere un programma per computer.
Raggiungere la perfezione richiede molto impegno, motivazione e persistenza — più di molte persone. L’aspirante programmatore potrebbe non essere motivato o abbastanza persistente da sfondare le barriere, gli errori, i bug, le specifiche tecniche di 100 pagine e le sfide di debug per raggiungere finalmente l’ultimo passo della perfezione assoluta. E ‘ una lunga strada da percorrere, soprattutto senza naturale curiosità e attitudine al linguaggio.
5. Le idee sono semplici; i programmi per computer sono complessi
Durante la programmazione, si sta istruendo il computer a fare qualcosa. Il computer può essere fatto per fare qualsiasi cosa si può pensare. Stai lavorando con idee astratte-cose-idee pure. Questo può sembrare il paradiso, e ci sono certamente cose buone su di esso; ma come tutto il resto, ha i suoi svantaggi.
Spesso, le idee sembrano molto semplici. Una singola, nuova idea suona abbastanza semplice per gli esseri umani che possiedono intelletto intrinseco sui concetti del mondo reale. I computer non hanno questo intelletto intrinseco, quindi anche l’idea più semplice, tradotta in linguaggio informatico, diventa rapidamente complicata. Trovare le istruzioni giuste è un compito difficile anche per i programmatori esperti e veterani, specialmente per qualcosa che non è stato fatto prima. E se è stato fatto prima, perché non comprare quel programma, invece di scriverne uno nuovo? Il tempo di un programmatore è costoso-di solito $30 / ora o più. Se un programma costa $30 per utente, quel programma di solito può essere acquistato in modo permanente. Anche se costa $300 per utente, è ancora molto più economico di $30/ora.
6. Non tutti gli errori sono un bug
Molti nuovi programmatori sono scoraggiati la prima volta che costruiscono o compilano qualcosa, solo per avere 50 segni rossi, linee ondulate o errori e avvisi pop-up. A peggiorare le cose, ogni singolo errore è una sciocchezza criptica come ” non è possibile accedere al membro non statico da un contesto statico.”
Il mio consiglio per te: rilassati! Rilassati un attimo. Non tutti gli errori sono un bug. Non tutti gli errori sono colpa tua. Non tutti gli errori devono essere corretti immediatamente. Inoltre, gli errori POSSONO essere corretti.
La maggior parte dei moderni editor di codice sarà così impegnata a trovare errori, anche prima di finire di digitare il codice, che può sembrare rapidamente un compito impossibile mettere le parentesi tutte nei punti giusti. Ancora una volta-basta calmarsi, fare un passo indietro e rendersi conto che non è così male come sembra.
Ho programmato per più di un decennio, e non penso di aver scritto una volta un programma che ha funzionato perfettamente la prima volta che l’ho provato. Ci saranno errori nel tuo codice! Abituati all’idea di vedere quei fastidiosi, rossi, segni ondulati dappertutto.
Successivamente, un errore non è necessariamente un bug. Sì, gli errori devono essere corretti alla fine, prima di poter eseguire il programma. Tuttavia, lo sforzo di rimuovere i bug è secondario accanto al compito di scrivere il codice. E come affermato in precedenza, la maggior parte degli editori oggi troverà TUTTI gli errori possibili molto prima che tu abbia finito di scrivere il codice. Questo non rende quegli errori più importanti di quello che stavi già facendo. Non lasciarli viaggio in su; stanno per accadere, in modo da essere pronti e imparare a metterli in attesa fino a quando hai ottenuto il blocco delle cose. Mentre impari a pensare come un computer, inizierai a capire quali errori sono importanti e quali mancano solo i bit del tuo programma che non hai ancora completato.
Per riassumere: red, squiggly e annoying (un errore) non si traduce automaticamente in importante.
7. Nessun errore NON significa nessun bug
Immagina di essere seduto dopo un sacco di duro lavoro, soddisfatto di aver finalmente risolto tutti quegli errori fastidiosi. Ora puoi essere sulla tua strada allegra, giusto? Sbagliato.
Non tutti gli errori sono un bug e anche il contrario è vero: una mancanza di errori non è necessariamente una mancanza di bug. Solo perché il tuo codice non ha errori non significa che funzionerà correttamente. In generale, è necessario assumere che il codice non funzioni correttamente, anche dopo aver corretto tutti gli errori.
Esistono due tipi generali di errori: errori di compilazione (il tipo rosso, squiggly) e errori di runtime o logici. Quest’ultimo è quello di cui stiamo parlando ora.
Dì che il tuo codice viene effettivamente eseguito. Ciò significa che il computer lo capisce ed è in grado di eseguirlo, ma ciò non significa che le istruzioni stesse non siano difettose. Ciò che il tuo cervello si presenta con la prima volta ha senso per te, ma un computer di solito ha bisogno di più dettagli di un cervello umano per capire un processo o un algoritmo.
Un esempio perfetto sta dividendo per zero. Questa espressione matematica non è definita, ma il problema non è evidente se stai solo dividendo x per y. x o y potrebbero essere qualsiasi cosa. Solo quando il programma è in esecuzione y ha un valore reale, che potrebbe o non potrebbe essere zero.
8. Risolvere il problema, non solo un problema
E ‘ incredibilmente facile quando la risoluzione dei problemi o il debug di diventare confuso su ciò che il vero problema è in realtà — per ottenere i fili incrociati e trascorrere ore improduttivo, inseguendo un’oca che non ha nulla a che fare con il problema reale a portata di mano.
Diventare un programmatore migliore ha molto a che fare con l’essere in grado di identificare rapidamente la causa principale di un problema, e quindi risolverlo. Come mi piace dire, risolvi il problema.
Nel processo, spesso si incontrano problemi minori correlati che potrebbero anche essere risolti, un problema, ma non IL problema. Non rilassarti solo perché hai risolto qualcosa. Ci vuole molta attenzione per risolvere un problema fino alla fine.
Il debug è spesso pensato come fatto al 99%, per la maggior parte del tempo necessario per il debug. Questo perché, fino a quando la causa principale è effettivamente nota, sapere quanto tempo ci vorrà per risolverlo è una discussione discutibile. Trovare la causa principale può spesso richiedere molto tempo in sé.
Quindi, ricorda queste semplici regole per la risoluzione dei problemi e il debug:
A) verificare Sempre il codice
B) verifica e convalida di tutto, soprattutto le cose che si pensa di non averne bisogno
C) Cercare di non fare “knee-jerk” modifiche, l’ipotesi casuale di convincere l’errore ad andare via; questi spesso introducono ulteriori problemi
D) Quindi controllare
Debug di per sé è una semplice prova che i computer o robot non potrà mai conquistare il mondo. Mostrami un computer che può eseguire il debug da solo, e ti mostrerò un mondo che non ha bisogno di programmatori.
9. Il problema fondamentale dello sviluppo del software
Non importa quanto sia grande il tuo programma o software, qualcuno troverà un modo per usarlo male, ma sarà totalmente convinto che dovrebbe funzionare in questo modo. Non mi credi? Sviluppare alcuni software, pubblicarlo, e leggere i commenti e le email che si ottiene. Presto scoprirai che questo è assolutamente vero.
Ognuno ha il proprio modo di lavorare. Un formato non può mai andare bene tutti, ma purtroppo per voi come il programmatore, un formato è molto più economico e più efficiente di tre o quattro dimensioni. Raramente ti verrà data la possibilità di implementare tutte le funzionalità possibili, tutte le campane e i fischietti a cui puoi pensare. Spesso, è proprio l’opposto che la direzione ti chiede. Vogliono un bare-bones, minimum viable product (MVP) per testare il concetto e vedere se i clienti piace e se la versione a tutti gli effetti sarà anche la pena di costruire a tutti.
10. La tecnologia è un bersaglio imprevedibile e in movimento
Di tanto in tanto, le persone non riescono a prendere una decisione su ciò che vogliono — e devi affrontare le conseguenze, o persino ripulire il casino. Edward Berard ha detto così: “Camminare sull’acqua e sviluppare software da una specifica sono facili se entrambi sono congelati.”A volte i requisiti cambieranno nel bel mezzo del progetto, e dovrai adattarti e adattarti, un po’ come operare sul motore di un’auto mentre stai guidando in autostrada. Pazzo, ma vero.
Quando hai completato il tuo progetto, potresti scoprire che è diventato obsoleto o non necessario. Forse una libreria o un framework dipende dalle esigenze aggiornate e la tua azienda non vuole finanziare l’aggiornamento. Forse lo consegni effettivamente ai clienti e non vogliono nemmeno usarlo (l’ho visto accadere al mio progetto).
La tecnologia dipende dall’interazione di successo tra persone e altre persone, persone e computer e computer con altri computer. Sia le persone che i computer possono essere imprevedibili, e tutta questa imprevedibilità intrinseca non svanirà semplicemente perché lo vuoi.
11. La stima è difficile
I progetti più interessanti e preziosi sono normalmente quelli che non sono mai stati fatti prima. Perché non sono mai stati fatti, stimare quanto tempo stanno andando a prendere è un particolare punto di frustrazione, difficoltà e dolore. L’imprevedibilità (punto 10 sopra) è per definizione, difficile da prevedere!
Dirigenti aziendali non vogliono mai sentire quanto tempo qualcosa sta per prendere. Di solito sono interessati a come farlo più velocemente e con un budget minimo.
I programmatori non vogliono mai sentire quanto poco tempo o quante poche risorse avranno. Hanno bisogno di tempo libero per l’innovazione e la ricerca. Hanno bisogno di nuovi strumenti costosi per codificare più velocemente e meglio. La programmazione è in parti uguali tecnica e creativa, e non può essere affrettata senza rovinare il risultato finale — ma spesso lo è. Una catena di montaggio funziona solo con un processo che è semplice, cambia poco e può essere ripetuto all’infinito, nessuno dei quali si applica allo sviluppo del software. Questo non sembra mai impedire ai manager di cercare di trasformarlo in una catena di montaggio.
Lo sforzo di stima è la battaglia senza fine che stai per intraprendere come programmatore. Nel concludere questa panoramica della carriera, posso solo dire: non dimenticare di ridere e divertirti. Un giorno potresti scoprire che l’umorismo è ciò che ti ha portato alla fine con la tua sanità mentale intatta.
P. S. Programmatori sono ora più prezioso per le aziende di denaro. Non essere troppo duro con te stesso; il computer si prenderà cura di questo. Datevi una pacca sulla spalla per essere interessati a una professione così difficile ma gratificante.