Cosa differenzia i programmatori eccezionali da quelli veramente bravi? [chiuso]


59

Sai chi sono. Sono le rock star della programmazione:

  • Codificano 10 volte più velocemente.

  • Il loro codice funziona e basta.

  • Non solo conoscono la loro lingua principale dentro e fuori, ma sanno anche come funziona sotto il cofano.

  • Conoscono la risposta a quasi tutte le domande prima di porle.

  • Alcuni di loro hanno inventato i principi di programmazione che tutti usiamo.

  • E tendono anche a essere insolitamente umili.

Di cosa parla questa gente? C'è qualcosa nel loro processo di pensiero che è fondamentalmente diverso dal programmatore sopra la media? O sono semplicemente persone di grande talento che lavorano duramente?

In altre parole: come posso essere come loro? So cosa penso di dover imparare per essere così bravo, ma sembra che ci vorranno i prossimi dieci anni per impararlo, e quindi la mia conoscenza sarà obsoleta.


49
I programmatori eccezionali non hanno un blocco try-catch attorno al loro codice. zing

11
@Giovanni: sono totalmente in disaccordo, ho visto le 10 cose in gioco ancora e ancora e sembra essere vero, purtroppo abbastanza. Penso che gran parte del problema sia che la maggior parte dei programmatori professionisti non può davvero programmare, e alcuni non possono nemmeno programmare cose semplici. Non è che un programmatore divino sia 10 volte superiore a un buon programmatore, ma piuttosto un programmatore divino è 10 volte superiore al peggior altro programmatore della sua organizzazione o squadra.
Pax Noctis,

10
@fennec: fare o no. Non c'è try.
mmyer,

29
18 anni di esperienza per una lingua inventata 15 anni fa è davvero impressionante!
Ricky Clarkson,

15
@Tjaart - No, è un numero solido e gli studi dagli anni '60 lo hanno dimostrato. Lo studio originale fu condotto alla fine degli anni '60 da Sackman, Erikson e Grant. Hanno studiato programmatori professionisti con una media di 7 anni di esperienza e hanno scoperto che il rapporto tra il tempo di codifica iniziale tra i programmatori migliori e peggiori era di circa 20 a 1; il rapporto tra i tempi di debug oltre 25 a 1; di dimensioni del programma da 5 a 1; e della velocità di esecuzione del programma da 10 a 1. Non hanno trovato alcuna relazione tra la quantità di esperienza di un programmatore e la qualità o la produttività del codice. (Grazie a Steve McConnell).
Jon Hopkins,

Risposte:


88
  • Umile: un programmatore eccezionale non pretenderà mai che il loro codice sia il migliore, infatti cercheranno sempre un modo migliore (ogni possibilità che ottengono) .

  • Paziente: un programmatore eccezionale avrà una pazienza illimitata (Ciò non significa che perderanno giorni in caso di problemi. Vedi: Risoluzione dei problemi) .

  • Strumento di risoluzione dei problemi: un programmatore eccezionale sarà in grado di risolvere un problema in pochi minuti che potrebbero richiedere giorni per il programmatore medio.

  • Curioso: un programmatore eccezionale non sarà in grado di resistere cercando di capire perché succede qualcosa.

  • Ingegnere: un programmatore eccezionale progetterà i sistemi piuttosto che mettere insieme un miscuglio di quadri (questo non significa che non useranno quadri) .


5
Mi piace il tuo punto "ingegnere"!
Cedric H.,

1
@Chaos - Il programmatore più veloce che conosco ha costruito il proprio framework web. Cose del genere credo siano ciò che rende qualcuno migliore e più veloce. Grazie per la tua risposta. Mi fa sentire meno impotente nel voler sempre riprogettare le cose.
Orokusaki,

11
"Ingegnere" è un punto cruciale. Ogni riga di codice creerà una solida base, piuttosto che aggiungere a una traballante creazione simile a Jenga.
Alex Feinman,

5
Non voglio -1 ma come contrappunto, mi qualifico per tutti questi; e faccio ancora schifo. (A meno che i programmatori medi con il mio eccezionale con cui io paragono non siano in realtà terribili)
Steven Evers,

1
@Chaos, "Curioso" ma solo fino a un certo punto.

28

Ne hai colpito molto nel tuo ultimo punto elenco:

"E tendono anche ad essere insolitamente umili."

Penso che sia una combinazione di umiltà - non solo esteriore ma anche dentro le loro menti. Accettano di sbagliarsi, fanno un errore e si allontanano molto rapidamente dalla frustrazione. Molti programmatori proveranno qualcosa, falliranno e poi saranno molto emotivamente elaborati abbastanza rapidamente, uno stato che è un anatema per scrivere un buon codice. Devi accettare che non sei perfetto, e che stai per rovinare (spesso!), E che la cosa migliore che puoi fare è imparare come recuperare rapidamente quando lo fai. È un'umile sicurezza , come "So che ho intenzione di sbagliare, ma so anche se continuo a provare, alla fine ci arriverò".

C'è un detto in NLP, "Non c'è fallimento, solo feedback". Per essere un programmatore di rock star, penso che tu debba abbracciarlo. Non c'è niente che non puoi programmare. All'inizio potresti essere lento, ma se continui a provare e ti rifiuti di fermarti quando fallisci o rovini qualcosa, ti consegnerai. E in questo processo imparerai tutti i trucchi mentali necessari per diventare uno dei migliori.

Il consiglio è, ovviamente, buono solo come la sua fonte, quindi ... tutto solo la mia opinione.


"Non ho fallito, ho trovato 10000 modi che non funzionano" - Thomas Edison
ninjalj,

1
L'unico modo per essere in grado di imparare velocemente è accettare che puoi migliorare e desiderare.

25

Si preoccupano profondamente del loro codice.


2
Indubbiamente vero.
Robert Harvey,

3
Un programmatore povero non può preoccuparsi profondamente del proprio codice? Anche se potrebbe non essere così buono?
Walter,

2
@Walter hanno potuto ma non l'ho mai visto. Il più vicino che ho visto sono i programmatori principianti che si preoccupavano profondamente del loro codice ma facevano ancora errori da principiante (nessuno è immune). Quando questi errori sono stati segnalati, sono stati risolti rapidamente e raramente ripetuti.
JaredPar,

15

Personalmente, i migliori programmatori che conosco / conoscevo capivano le basi e NON erano gli esperti in una determinata lingua. Hanno semplicemente avuto un'esperienza sufficiente su quasi tutto. Il canonico "Jack of All Trades".

È più della scienza di base, c'è un valore significativo nell'esperienza nelle operazioni reali. Esempi, quelli che comprendono la filosofia Unix e quindi potrebbero risolvere problemi sconosciuti con vari strumenti dati (IOW sapevano dove cercare) valorizzano di gran lunga l'esperto Java che ha codificato una soluzione filettata e parallela.

I programmatori eccezionali rispettano anche quelli che li hanno preceduti. Non odiano i modelli di dati relazionali o si arrabbiano quando vedono SQL come un'API formale, né si oppongono a FORTRAN in matematica. Sanno che OO non è la fine, e soprattutto capiscono che la programmazione è un'ARTE, non una scienza.


2
Per testo-files grep, awk, sort, e uniqin grado di rispondere a un sacco di domande. Se hai perlanche, ancora di più!

2
Penso che sia un artigianato, non scienza né arte.
Alexander Gessler,

11

Quando ho iniziato, stavo lavorando con questo ragazzo che pensavo fosse assolutamente brillante in tutto ciò che faceva in termini di programmazione. Probabilmente lo è ancora, ma ora è diventato direttore di una società nel sud-est asiatico.

Comunque, ha mantenuto le cose semplici e le cose semplici funzionano. Non volendo mai scrivere più righe di codice del necessario, tutto quello che ha fatto ha funzionato. Stavo giocando per un anno solo per avvicinarmi al suo livello. L'altra cosa però è il tempo. Aveva fatto le cose per molto più tempo di me in quel momento, e aveva avuto la possibilità di porre queste domande esatte più e più volte, fino a quando non avesse saputo (apparentemente) tutte le risposte.

Non aveva nemmeno paura di fare domande. Penso che sia la cosa più grande.


Sembra che io sia pronto (vedi la mia domanda conta su SO)

2
@ acidzombie24 - O ... hai appena iniziato.
Orokusaki,

haha orokusaki. +1

"Mantenere le cose semplici" è una delle bellezze dello sviluppo guidato dai test. Non potrei raccomandarti di meglio.

10

Matrice delle competenze del programmatore

Molti argomenti per aiutarti a identificare qual è il tuo livello sugli argomenti di programmazione.


Conoscenza di stackoverflow: 2 ^ n: mai sentito parlare di O (n ^ 2): pone regolarmente alcune domande facili su SO O (n): pone domande interessanti ed è a conoscenza dei programmatori.SE O (log (n)): Inizio utente su un sito SE relativo a CS. ;-)
shuhalo,

Grazie mille per questo link! Mi ha dato fiducia in ciò che so e mi ha indicato quali aree dovrei migliorare.
Oksayt,

7

Ho imparato la risposta a questa domanda in un libro sul poker Texas Hold'em, ma si applica a tutti gli sforzi frustranti. I migliori programmatori non vanno mai in tilt. Andare su Tilt è il momento in cui qualcosa non funziona come previsto, e tu rispondi in un modo che crea errori esponenziali nell'applicazione complessiva. Nel torneo di poker ti fa piazzare scommesse sbagliate e viene eliminato.

Nella programmazione, l'inclinazione ti consente di strapparti i capelli e scrivere ridicole patch di codice che funzionano solo in alcuni casi dell'applicazione. Tilt fa sì che i programmatori ignorino le esigenze del progetto nel suo insieme, cercando una gratificazione immediata per risolvere il problema immediato ora. Spesso il problema viene risolto oggi, ma l'applicazione soffre domani.

I migliori programmatori prendono il concetto di inclinazione e lo gestiscono in un modo che consenta loro di guardare i problemi da una prospettiva esterna, sempre. In caso contrario, bere un po 'di caffeina.


cosa suggerisci di fare come attività per superare l '"inclinazione" durante la programmazione? Lo capisco sempre e finisco per ricodificare roba continuamente.
Orokusaki,

@orokusaki - L'attività più semplice per evitare l'inclinazione è cambiare una domanda fondamentale che i programmatori si pongono ogni giorno. Quando viene assegnato un problema, invece di pensare: "Perché dovrei risolvere il problema in questo modo?" chiedi: "Perché dovrei evitare di risolverlo in questo modo?" Spesso la risposta al motivo per cui non dovresti risolvere un problema con una particolare soluzione ti darà una serie di suggerimenti per trovare una soluzione migliore.
JMC,

6

Programmatori eccezionali:

  • Cura del loro codice
  • Cura gli utenti che usano il loro codice
  • Cura le persone che manterranno il loro codice
  • Cura della produttività
  • Cura del processo, non solo del prodotto

Due cose sul fattore "10x":

  1. Deve essere applicato end-to-end. Non è un buon codice di scrittura 10 volte più veloce se impiega 10 volte più a test, rilavorazioni e manutenzione.
  2. Credo che il fattore "10x" sia un riflesso di quanto sia scarso un numero elevato di programmatori piuttosto che di un buon numero di programmatori.

3

la maggior parte sembra riservata e nulla di speciale .. alcuni sembrano super intelligenti .. preferiscono controllare / eseguire il debug delle cose due volte da tutti i possibili punti di vista, il loro software è senza errori nel mondo: p IMO alcuni programmatori potrebbero essere più lenti, ma la qualità è migliore, anche le persone comuni possono capire come funziona il loro software!

ho un amico che ha scritto il suo primo programma ASM all'età di 10 anni, ora ha 24 anni, non ha finito l'università, ma questo non gli ha impedito di creare la propria compagnia, guadagnando milioni :) ma da quello che vedo lui è abile in tutto :)

programmatori eccezionali direbbero molto probabilmente che questo codice può essere codificato in un altro modo migliore piuttosto che dire che è totalmente sbagliato e che ha una reputazione di altri programmatori inferiore :)

"Cos'è questa gente? C'è qualcosa nel loro processo di pensiero che è fondamentalmente diverso dal programmatore sopra la media? O sono semplicemente persone di grande talento che lavorano duramente?"

penso che siano nati in quel modo, è dentro il loro DNA: non conosco il loro processo di pensiero, ma il miglior programmatore che abbia mai conosciuto aveva l'epilessia


3

Poche cose differenziano un eccezionale con un tipico.

Eccezionale:

  1. Molto appassionato del suo lavoro e si impegna a fornire un capolavoro.

  2. Prestazioni e qualità sono il quadro generale nella loro mente anche prima dell'inizio della programmazione.

  3. Pensano al miglioramento continuo dopo ogni uscita.

  4. Vigilano rigorosamente sulle alternative e sono i primi ad adottare.

  5. Il loro tema nella vita professionale è: "Scrivi meno, trasmetti di più".

  6. Continuano a pensare a prospettive logiche anche quando non si codifica.

Tipico

  1. A volte un po 'appassionato ma si sforzano di offrire perché dopo tutto è un lavoro. Se non è un capolavoro, va bene. Almeno consegnato in tempo.

  2. Penserò alle prestazioni in seguito, comunque i PC sono abbastanza veloci in questi giorni.

  3. Migliora solo quando non è disponibile alcuna opzione per salvare un lavoro.

  4. Non c'è tempo per scavare in altre tecnologie. Attenersi a ciò che il tuo lavoro richiede ora. Imparerà altre cose quando se ne presenterà la necessità.

  5. Il loro tema è: "Fai ciò che ti viene chiesto e raggiungi la casa in tempo".


2

I programmatori eccezionali applicano i principi spartani .

Immagine che attira l'attenzione:

inserisci qui la descrizione dell'immagine

Questo articolo: http://willcode4beer.com/design.jsp?set=codeReduction

E questa citazione:

Qualsiasi sciocco può rendere le cose più grandi, più complesse e più violente. Ci vuole un pizzico di genio - e tanto coraggio - per muoversi nella direzione opposta. - Albert Einstein


5
l'immagine è illustrazione della notazione Big-O.

0

Autopromozione e intendo nel migliore dei modi. Avere un lavoro come la programmazione, specialmente in una squadra, significa che non è immediatamente ovvio dove il tuo contributo personale si adatti alla visione d'insieme, o chi sia stato responsabile di quale parte. Le persone di cui sentiamo parlare e che apprendiamo come "grandi programmatori" sono IMO quelle che hanno imparato l'arte di far conoscere i loro contributi senza sembrare egocentrici o egocentrici al riguardo. In molti casi, ciò avviene creando gli strumenti, le librerie e il software su cui tutti noi facciamo affidamento per guadagnare il nostro pane quotidiano.


3
Forse, ma credo che John Resig sia famoso per i suoi notevoli successi con Javascript e jQuery. La sua roba è ampiamente usata perché è fantastica, non perché John ha grandi capacità di marketing.
Robert Harvey,

@Robert Harvey - O, vero? È senza dubbio un grande programmatore, ma forse ciò che lo ha reso da veramente buono a "eccezionale" è stato il fatto che le sue cose hanno guadagnato popolarità ed è stato vittima del suo stesso successo, dovendo tenere il passo con la crescente domanda? Quando ti piace davvero una camicia, ma è troppo grande, non provare a farcela prima di acquistarla. Sarà passato allora. Compralo e poi fai del tuo meglio per crescere.
Orokusaki,

Robert: Sicuramente. Ma se avesse appena condiviso jQuery con alcuni amici e al lavoro, non avremmo mai saputo nulla di lui. Lo conosciamo come un grande programmatore proprio perché ha avuto il coraggio, non solo di condividere jQuery con il mondo, ma anche di promuoverlo attivamente come un modo migliore per fare Javascript. Mi piacerebbe vedere più programmatori (incluso me stesso) che imparano a farlo in modo efficace.
Gaurav,

1
-1 Mentre questo può essere vero agli occhi dei manager quando si tratta di autopromozione, non l'ho mai visto funzionare con altri sviluppatori. Tra gli sviluppatori, non ci vuole molto per capire chi è bravo, chi è nella media e chi fa schifo. L'autopromozione non fa nemmeno parte dell'equazione.
Dunk

1
@Gauruv - Penso che i programmatori "rockstar" siano quelli che sono in grado di affrontare problemi difficili e renderli davvero semplici. Quindi, non penserei che un pezzo di codice sia fantastico se lo guardassi e dicessi "Woah - chi ha scritto questo"? Mentre pensavo diversamente dalla scuola, l'esperienza del mondo reale mi ha insegnato che la genialità nel codice non è una virtù. Sono più colpito dalle persone che non mi devo preoccupare se le loro cose funzionano o meno perché so già che funziona senza mai doverle guardare. Quelle persone sono poche e distanti tra loro e sono i veri programmatori di rock star.
Dunk,


0

Ottimo articolo correlato: The Free Electron (da randsinrepose.com)

Mi scuso per non aver riassunto l'articolo qui, ma i punti non sono facilmente separabili dalla prosa.


Non dice molto sul perché. Ma sì, queste sono le persone di cui sto parlando.
Robert Harvey,

Citando l'articolo: "Un elettrone libero può fare qualsiasi cosa quando si tratta di codice. Possono scrivere un'applicazione completa da zero, imparare una lingua in un fine settimana e, soprattutto, possono immergersi in un enorme mucchio di spaghetti code, avere un senso, e farlo funzionare davvero. Puoi costruire un intero business attorno a un elettrone libero. Sono così buoni ".
Robert Harvey,

0

Programmano puramente sull'intuizione. Non c'è bisogno di pensare che scorre .


Indubbiamente vero per le persone con esperienza in qualsiasi professione, non solo nella programmazione. Cosa differenzia specificamente i programmatori eccezionali ?
Robert Harvey,

Bene, non sono uno di loro, quindi non posso assolutamente rispondere a questa domanda con certezza al 100%, ma non credo che non si tratti di conoscenza ma piuttosto di un processo di pensiero (subconsciamente). Penso che le persone che sono eccezionali in qualsiasi cosa abbiano la capacità di eliminare qualsiasi interferenza nei loro pensieri e vedere qualcosa in una forma molto semplice. Più qualcosa è semplice, più è facile elaborarlo.
John Shaft,

3
-1 È COSÌ SBAGLIATO in ogni modo possibile. Vorrei poter -100. Direi esattamente il contrario. PENSANO ATTRAVERSO e risolvono il problema prima che inizino.
Dunk

@Dunk - Non sono d'accordo. Con quello che hai scritto direi che cosa fa un normale programmatore. Non c'è niente di eccezionale in questo. Confronto programmatori eccezionali con chitarristi eccezionali. Non stanno pensando alle note che stanno suonando, lo sentono e basta.
John Shaft,

@Pablo - Immagino che le nostre esperienze siano diverse. Nella mia esperienza, gli sviluppatori normali vanno per intuizione e pensano erroneamente che scorre. Pertanto, creano molta immondizia. Gli sviluppatori eccezionali si prendono il tempo per capire dove stanno andando. Solo perché qualcuno può mostrarti al volo come dovresti progettare il tuo componente non significa che lo stiano facendo per intuizione. Scommetto che l'hanno già fatto prima o hanno la visione d'insieme del sistema già realizzata nella loro mente, se non nella documentazione. Quindi, ciò che chiami intuizione è davvero seguire un piano di pensiero.
Dunk,

0

I programmatori eccezionali hanno influenza su un progetto oltre lo scopo del proprio codice e individuano i problemi prima che si verifichino a causa della loro esperienza. Migliorano tutti i membri del team e salvano i loro progetti da cattiva progettazione e gestione.

In realtà hanno creato qualcosa di eccezionale.


0

ma sembra che ci vorranno i prossimi dieci anni per impararlo, e quindi la mia conoscenza sarà obsoleta.

Lo farà. Hai già stabilito che questi ragazzi sono 10 volte più veloci, motivo per cui lo imparano in 1 anno e ti ci vogliono 10. Per la parte seria della risposta penso che siano già super intelligenti (potrebbero avere molto successo in qualsiasi cosa), amano la programmazione e per qualche motivo hanno (o trovano) un'abbondanza di tempo libero per esercitarsi nella programmazione o per lavorare su progetti personali.

Se stai facendo questa domanda qui probabilmente non hai quello che serve (non ti preoccupare, sto rispondendo qui, quindi probabilmente neanche io). Non preoccuparti, anche se puoi ancora diventare pazzo se ami scrivere codice.


0

Ci sono molti post ben intenzionati qui su Humility, Engineering, Passion, Patient, Troubleshooter. IMO questi sono tutti richiesti. Tuttavia, descrivono il primo 30% di programmatori.

Penso che tu stia chiedendo dei programmatori davvero eccezionali, l'1% in alto.

Una delle cose che invidio del talento occasionale molto raro con cui lavoro è la loro capacità di tenere in mente una grande quantità di dettagli su un sistema complesso in una volta e di poterlo ricordare rapidamente. Penso di poterlo fare occasionalmente, forse una volta al mese, quando sono veramente nella zona. Questa sensazione è meravigliosa. Lo sviluppatore a cui sto pensando sembra essere in grado di trovarsi in quella zona per la maggior parte del tempo .

È questa caratteristica, l'IMO, oltre alle capacità di umiltà, curiosità, ingegneria, passione, pazienza e risoluzione dei problemi che li rendono davvero eccezionali.


0

Avere la qualità di automotivazione e autodeterminazione, nonché la volontà di addentrarsi nell'abisso dell'ignoto e sentirsi a proprio agio nell'essere assolutamente confusi come parte del processo è enorme. Non si tratta di intelligenze iniziali come si potrebbe pensare perché il cervello diventa molto meglio nelle cose che fa e pensa sempre. Venivo dal nulla al college e poi sono diventato molto benestante solo per pura perseveranza, senza mai arrendermi, essendo quel ragazzo che ha tenuto un problema quando tutti gli altri si sono stancati di provare a capirlo. Dopo quel tipo di persistenza, i problemi sono diventati sempre più facili e provengono dall'essere il noob al college a mettere la maggior parte di loro a questo punto vergogna. Il puro talento non è abbastanza e talvolta può portare a riposare sugli allori.

Inoltre, per Robert Harvey, continui a farmi l'occhiolino ai miei post quando menziono qualcosa a che fare con il mio CMS che ho scritto da zero. Vedi molti altri elenchi di link che potrebbero o non potrebbero aver scritto. Stai spingendo verso il basso le persone che sono auto-motivate ed è ironico che tu abbia pubblicato questo. Sei "l'uomo" in questo piccolo universo e non stai leggendo le cose nel loro merito, ma semplicemente facendo un pisolino e cancellandole per il tuo capriccio. Ami anche Star Wars troppo e probabilmente fai un cenno con la mano alle porte ad apertura automatica della drogheria credendo di avere la forza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.