Cosa dovrebbe sapere ogni programmatore?


245

Indipendentemente dal linguaggio (i) di programmazione o dai sistemi operativi utilizzati o dall'ambiente in cui si sviluppano, cosa dovrebbe sapere ogni programmatore?

Alcuni retroscena:

Sono interessato a diventare il miglior programmatore che posso. Come parte di questo processo, sto cercando di capire ciò che non conosco e mi farebbe molto beneficio se lo facessi. Mentre ci sono un sacco di liste intorno alla linea di "n cose che ogni sviluppatore [inserire il linguaggio di programmazione] dovrebbe sapere", devo ancora trovare qualcosa di simile che non sia limitato a un linguaggio specifico.

Mi aspetto anche che queste informazioni siano di interesse e vantaggi per gli altri.

Risposte:


636

Come ingoiare l'orgoglio e ammettere gli errori senza prenderli sul personale.


60
È qualcosa che ogni essere umano dovrebbe fare indipendentemente dal proprio lavoro (... sesso, religione, cultura, status sociale ...), non credi? ;)

3
Oh si. Ma noi programmatori (almeno lo faccio) abbiamo la tendenza ad avere un orgoglio più evidente rispetto alla maggior parte :-)

17
Vorrei poterti votare due volte.

4
Penso che questa sia una cosa che ho imparato all'università. Al liceo sono sempre stato uno dei ragazzi intelligenti. Se non fossi andato all'università, avrei pensato di essere piuttosto intelligente e di avere un grande ego. Andare all'università e interagire con persone veramente più abili di me mi ha aiutato a vedere quanto ero stupido
Kibbee,

4
Anche se questo è molto vero, il problema non è sempre la negazione o un grande ego, ma le potenziali conseguenze dell'ammettere apertamente di fare errori, almeno non senza prima una sorta di autodifesa / controllo dei danni. A volte è una cosa culturale. :)

309

Come pensare come un utente e non come un programmatore geek tecnico.


2
Trovo sempre ironico che la cosa che sembra mancare a molti di noi nel settore possa essere una delle abilità più importanti da avere: abilità comunicative.

Non potrei essere più d'accordo. Questo dovrebbe essere il numero 1.

23
In realtà non sono d'accordo. Questo è ciò per cui assumi persone. Non sarai mai in grado di pensare come un utente, ma puoi sicuramente fare in modo che le persone ti diano ciò che gli utenti pensano e agiscono su quel consiglio. Basta non chiedere agli utenti come pensano! Questa è l'opzione peggiore di tutte.

1
Puoi assumere altre persone per farlo, ma se il tuo team di sviluppo può capire come pensa un utente, allora avrai molte meno discussioni e iterazioni prima che le cose vadano bene. Inoltre, se uno sviluppatore può pensare come un utente, chissà quali nuove funzionalità presenteranno

3
L'utente può benissimo essere un programmatore di techie geek, ma meno probabilmente un programmatore di techie geek che ha anche implementato il codice . Se l'applicazione ha una semantica / comportamento molto sottile e complesso, la persona che ha scritto il codice potrebbe essere l'unica persona in grado di capire come utilizzare l'applicazione ...
Reuben,

244

Quando chiedere aiuto e quando NON chiedere aiuto.


2
Così vero. Ultimamente, la risposta mi è venuta in mente mentre chiedevo a qualcuno. :(
kevindaub il

quindi, qual è la risposta?)

28
Chiedi prima al tuo papero di gomma. Se non può aiutarti, chiedi a qualcun altro ...
Decano Piuttosto l'

3
votato perché quando ho iniziato non mi rendevo conto di quanto stavo seccando gli altri sviluppatori chiedendo continuamente loro cose semplici che avrei dovuto capire da solo fino a quando non avessi fatto un po 'di n00b per me.

1
Mi pongo sempre una domanda sulla falsariga di "Cosa direbbe il mio collega se dovessi chiedere loro". Di solito questo mi aiuta a chiarire un po 'di più il problema prima di doverlo effettivamente chiedere.

184

Come leggere il codice di altre persone.


102
Addendum: come scrivere il codice che altre persone possono leggere

42
Addendum n. 2: come leggere il proprio codice 6 mesi dopo

10
@Nathan Koop: Dovrebbe essere meglio "Come scrivere il codice in modo da poterlo leggere da solo 6 mesi dopo".
Doc Brown,

4
Quando sono passati 6 mesi, è già diventato il codice di qualcun altro. Nel senso che da allora ti sei evoluto, sei migliorato e potrebbe anche essere qualcun altro che l'ha scritto in primo luogo, quindi trattalo come tale.
MPelletier,

7
Addendum n. 3: come leggere il codice 6 minuti dopo.
aprono il

152

Familiarità con i sistemi di controllo della versione. Non deve essere tutti, ma i concetti di base che possono essere applicati a tutti dovrebbero essere conosciuti.


e quel controllo di revisione non è un software
jrhicks,

4
Vorrei aggiungere che c'è una differenza abbastanza significativa tra SCM centralizzati (ad esempio sovversione, CVS) e SCM distribuiti (ad esempio git, mercurial, bazar) che è importante imparare uno di ciascuno.
intuito il

128

Ecco i miei 10 bit:

  • Come essere umili. Siamo tutti qui per imparare. Puoi essere più intelligente di altri, ma ci sono molte persone più intelligenti di te.
  • Come studiare / consumare informazioni. Non ti conosco, ma studio per sempre! Libri, Internet, qualunque cosa!
  • Che cos'è un dizionario e come utilizzarlo e come scoprire rapidamente gli acronimi.
  • Quali sono gli strumenti di base del commercio e cosa fanno (IDE, CVS et al).
  • Conoscere terminologia comune e cosa significano: modelli di progettazione, usabilità, test (ah!), Stack, ecc.
  • Comprendere OOP.
  • Sii "capace" in almeno una lingua, niente di straordinario, sappi solo come identificare variabili e metodi, ecc. Da qui puoi imparare VELOCE.
  • Comprendi che alla fine le persone usano il software e vogliono renderle felici.

38
Questo deve essere un posto ottale.
Anche Mien, il

10
Per quanto riguarda il primo pezzo ... "Non essere così umile, non sei così eccezionale".
Magnus,

@TheOtherScott, bello catturare lol, ma in realtà stavo dicendo 2 bit: D;)

3
Per quanto riguarda il punto 3: www.acronymfinder.com
Jasper Bekkers,

1
@ jasper / intuited: basta digitare l'acronimo in google e tirerà su uno o l'altro ... la risposta è di solito in uno dei primi 10 risultati comunque. maggiori informazioni possono essere ottenute cliccando!
aprono il

104

Forse è troppo sottile, ma lo considero "sapere quale problema risolvere". Molti programmatori (e persone normali) sprecano sforzi enormi per risolvere cose che semplicemente non sono molto importanti; oppure creano una soluzione, con una grande quantità di lavoro extra, che non è proprio ciò che è necessario.


4
D'accordo, preoccuparsi degli scenari di casi d'uso marginali che solo una manciata di utenti incontrerà mai invece di più funzionalità di base è una trappola fin troppo comune! Lo imparo ancora nel modo più duro ...
Ian Robinson,

Dovrei mettere un link alla tua risposta come homepage del mio ex capogruppo. hai proprio ragione.

4
Adoro che tu abbia detto "molti programmatori (e persone normali)" :-)

95

Come rilassarsi È il segreto della produttività.

Alla fine, forza di volontà e caffeina non sono sufficienti. Questa costante contrazione che facciamo è molto dannosa.

Questo è un grosso problema.


1
Cosa intendi per contrazione?

4
@Egg: A volte quando lavoro, sono in grado di essere completamente rilassato e molto produttivo. Nei miei brutti giorni, corro adrenalina e caffeina e sento una tensione tremenda nel mio corpo. Se presto molta attenzione, in realtà sto contraendo alcuni muscoli. Noto questa tensione negli altri tutto il tempo. Sfortunatamente può portare a tutti i tipi di problemi come il burnout e le malattie cardiache e probabilmente porta anche a una perdita netta di produttività poiché è possibile scattare solo per un tempo limitato. Questa è la contrazione di cui sto parlando.
Brian MacKay,

Uovo, significa contrazione dei muscoli inutilizzati.

2
parlando di caffè e contrazione, lo sapevate che il caffè restringe l'arteria fornendo sangue al cervello. Ciò provoca il risveglio del cervello. Il caffè non è poi una cosa così buona. tl; dr drink water
Reno,

83

Tipo di dati di base e teoria dell'algoritmo. Cose come notazione O grande, array, code, ecc.


Non ti aiuta affatto se tutto ciò che fai è creare modelli per i sistemi di gestione dei contenuti web.

3
Bene, al giorno d'oggi gli algoritmi standard sono implementati nelle librerie / framework, ma sono d'accordo sul fatto che un pensiero simile ad un algoritmo duro sia utile, ma non molto spesso

7
Solo perché sono già implementati non significa che non devi capire cosa usare quando, la complessità garantisce, ecc. Questa è la roba importante dietro gli algoritmi.

3
D'accordo con Greg Rogers. Potrebbe essere necessario implementare gli algoritmi, ma comprendere meglio le loro complessità e compromessi. Per esempio. Alcuni algoritmi richiedono più memoria ma sono più veloci.

6
Non saprai quale usare se non li capisci. Gli algoritmi sono molto importanti.

60

Come scegliere lo strumento giusto per il compito giusto e non prendere parte a stupide guerre infuocate sui suoi strumenti di programmazione preferiti.


+1 in modo che questo non rimanga a 42 :)
CharlesB

54

Bene, ecco il mio 0,02 $:

  • L'apprendimento non si ferma mai. Non importa quanto tu pensi di essere bravo, c'è sempre qualcuno migliore di te e c'è sempre qualcosa che puoi migliorare di te stesso. Se smetti di imparare, inevitabilmente ti degraderai come programmatore. Leggere libri. Leggi i blog. Parla con altri programmatori.
  • Prova ad imparare diverse lingue. Almeno uno di essi orientato agli oggetti. Inoltre, dovresti sapere qualcosa sulle varie tecnologie legate alla lingua che impari (ad es. Se impari Java, sarebbe bello sapere qualcosa di Spring e così via ...).
  • Refactoring. Prima o poi avrai bisogno di quella conoscenza.
  • Scopri come gestire il codice legacy.
  • Scrivi unit test. Informazioni su TDD.
  • Impara a lavorare in gruppo.
  • Scrivi un codice elegante e leggibile. Come dice il vecchio proverbio: "Scrivi il tuo codice come se la persona che lo manterrà fosse un serial killer psicotico che sa dove vivi".
  • Impara come essere pigro e disciplinato allo stesso tempo. I bravi programmatori hanno entrambe queste qualità. Per quanto strano possa sembrare, non sono contraddittori tra loro, ma complementari.

Sono i tuoi 0,02 dollari o 0,02 centesimi? LOL! :-D

"Scrivi il tuo codice come se la persona che lo manterrà fosse un serial killer psicotico che sa dove vivi." +1
Ben

50

Non è possibile testare la qualità in un prodotto.


2
Pertanto, i professionisti di "Quality Assurance" hanno un nome sbagliato.

1
Tecnicamente parlando QA e Test non sono la stessa cosa, anche se a tuo avviso non sono sicuro che la maggior parte delle organizzazioni pratichi effettivamente la differenza.
Tall Jeff,

5
Recentemente incontrato e bloccato: "Il risultato dei test non è qualità, ma conoscenza".
peterchen,

richdiet: l'esperto di SQA James Bach ritiene che la "A" in SQA / QA dovrebbe indicare "Assistenza". Sono pienamente d'accordo con la sua opinione e la tua dichiarazione.

44

Ogni programmatore dovrebbe comprendere i modelli di progettazione .


13
Vorrei aggiungere che hanno anche bisogno di capire che non tutto può essere calato con le scarpe in un determinato modello di progettazione.
contattare il

10
Vorrei anche aggiungere che non tutti i programmatori dovrebbero comprendere i modelli di progettazione. Ci sono lingue là fuori in terre lontane che hanno altre caratteristiche così potenti che il pensiero fluisce direttamente dal programmatore e nei programmi di lavoro. In quelle lingue, i modelli deliberati sono una direzione sbagliata.
Ali,

2
i modelli di progettazione sono per desinger non "programmatori" - un programmatore dovrà sapere che quando diventerà un "designer"

10
Esistono due tipi di persone: persone a cui piace la programmazione e persone che preferiscono parlare di programmazione. I motivi di design sono un must per il secondo gruppo ..
Bjorn Reppen,

1
Tali schemi sono un modo per superare i limiti delle lingue. Un programmatore dovrebbe capirli solo perché dovrebbe capire ed essere in grado di superare le debolezze delle sue lingue.

44

Sono un po 'in ritardo su questo, ma andrò con le conoscenze stabilite da Edsger Dijkstra:

Oltre a un'inclinazione matematica, una padronanza eccezionalmente buona della propria lingua madre è il bene più vitale di un programmatore competente.

Se non riesci a scrivere un buon paragrafo, è probabile che non puoi scrivere neanche un buon codice.


8
Eppure sono stupito dalla terribile ortografia, grammatica e punteggiatura utilizzata nella scrittura in linguaggio naturale da alcuni programmatori.

1
@cheduardo, perché una volta compilato o eseguito un programma, nella maggior parte delle lingue, ti verrà comunicato qualsiasi errore di ortografia, grammatica o punteggiatura, che può quindi essere facilmente corretto. Non così per errori logici.
Inshallah,

@Inshallah: a meno che tu non faccia qualcosa del genere if (BlowUpTheSystem = 1). Concesso, dato il corretto test unitario, è probabile che risparmierai solo tempo. Ma poi il tempo è piuttosto importante.
intuito il

2
Accetto .. hmm ... meno la parte "madrelingua", alcuni di noi [purtroppo?] Comunicano meglio / più chiaramente nelle nostre lingue non native.

39

Non essere troppo emotivamente coinvolto, attaccato o religioso riguardo a una determinata tecnologia, sistema operativo o linguaggio - nessuno è perfetto - a lungo termine probabilmente finirai per desiderare di poter creare la tua ala carte da ciò che come su ognuno diverso.

Pensala come un'auto - potresti non aver mai guidato una determinata auto prima, ma tutte hanno chiavi, volante, acceleratore e freno - dovresti essere in grado di entrare in una e partire rapidamente dopo aver individuato dove. Tratta i sistemi operativi e le lingue in modo simile e concentrati sull'apprendimento dei concetti essenziali sottostanti anche se sei alle prese con le specifiche di una determinata istanza.

E nel tempo cerca di capire e apprezzare la discendenza, il patrimonio e i punti in comune delle varie tecnologie che ti aiuteranno a mantenere la prospettiva. Renditi conto, ad esempio, che, mentre l'albero evolutivo si sta ramificando attivamente e pieno di vicoli ciechi, nel tempo la tecnologia tende a convergere ripetutamente intorno alle "migliori pratiche" e alle "economie di scala" ( ad esempio notare che un Mac non è poi così diverso da un PC sotto il cofano in questi giorni ...).

Infine, ricorda, non importa quanto ti diverta, la tecnologia rappresenta essenzialmente una lente imperfetta tra ciò che la tua mente può immaginare e ciò che effettivamente produci. Fai del tuo meglio, impara a imparare e resta adattabile ...



35

Che il giorno in cui smetti di imparare dovrebbe essere il giorno in cui non sei più un programmatore.


Se avessi un desiderio, sarebbe che Babbo Natale fosse mio padre.

Perché Babbo Natale ...?

1
Il giorno in cui smetti di imparare dovrebbe essere il giorno in cui muori. :) +1 comunque
ShdNx

Quindi per vivere per sempre devi sempre continuare ad imparare? Ora c'è un'idea che posso approvare!
canadese

34

Test di unità e debug.


Il primo rimuove la necessità del secondo. ;-)

4
No, quando il test unitario fallisce, è necessario il debug. I due vanno insieme.
Zan Lynx,

Non posso sottolineare abbastanza.
fastcodejava,

33

È stato menzionato prima, ma penso che meriti la sua risposta.


Mi imbatto sempre più spesso in esso e raccolgo pezzi qua e là, ma non sono ancora nemmeno un dilettante.

Sono completamente d'accordo. Sembra strano e difficile quando non lo capisci, ma quando lo capisci, è molto più facile di una tonnellata di sottostring / index delle chiamate di funzione che sarebbero necessarie per fare la stessa cosa altrimenti. Vorrei solo garantire che i tuoi schemi siano ben commentati.
Kibbee,

9
Alcune persone, di fronte a un problema, pensano "Lo so, userò espressioni regolari". Ora hanno due problemi. - "Jamie Zawinski": jwz.livejournal.com , in comp.lang.emacs
Bjorn Reppen,

L'uso di un editor fondamentalmente costruito attorno a loro è un buon modo per imparare il brutto brutto. La mia esperienza è con vim, che utilizza un equivalente per lo più paragonabile ai PCRE standard di fatto, ma ho l'impressione che le stesse regole si applichino nel mondo di emacs.
intuito il

1
Alcune persone, quando si confrontano con un'espressione regolare, pensano "Lo so, citerò Jamie Zawinski". Ora hanno due problemi (uno dei quali è che probabilmente non sanno cosa stanno facendo in primo luogo) .
Donal Fellows,

29

Nessuno vuole usare il software. Vogliono risolvere i problemi.


7
Esattamente. Quando sento gli sviluppatori tentare di spiegare il database a un utente finale come una risposta alla loro domanda sul perché qualcosa non può essere fatto, mi arrabbio. Non hanno bisogno di sapere come facciamo le cose. Vogliono solo che funzioni. E così dovrebbe essere.
Kevin Fairchild,

Mi piace credere che si possano scrivere software che le persone trovano un piacere usare.

Non potrei essere più d'accordo. Ciò vale anche per le API. Nessuno vuole imparare nuove API perché è così dannatamente divertente. Vogliamo la funzionalità dell'API, non il codice che rappresenta.
Blub,

Kevin, vorrei che il nostro "programmatore di implementazione" (parola elegante per il ragazzo di prova) lo leggesse e lo capisse. Anch'io mi siedo dietro la mia scrivania sperando che il mondo lo inghiottisca mentre inizia a parlare di loop e di dichiarazioni agli utenti finali.

27

Caffè e IntelliSense sono i tuoi migliori amici di sempre.


Vorrei poter dare più di 1 voto!
Dinah,

Spero di avere più caffè !!!! ñ_ñ

Penso di essere d'accordo con questo più di ogni altra cosa su SO.
Unkwntech,

Praticamente non bevo mai caffè a meno che non abbia assolutamente bisogno di finire un progetto in X ore, quando: Numero di ore consumate + X> 8 per un giorno.
Blub,

Il caffè non ti dà energia. Basta spremerne un po 'dalle tue riserve interne. Questo è cattivo / malsano.
Andrei Rinea,

18

Come osservare un grande oggetto complicato e scomporlo in piccoli oggetti semplici che svolgono ancora lo stesso compito quando vengono rimessi insieme.


18

Non fidarti mai di un utente ( specialmente se l'app è pubblica!), Spesso faranno tutto il possibile per interrompere l'app in un modo o nell'altro.

Renderlo a prova di futuro ed espandibile: non si sa mai quando si desidera espanderlo in pochi anni e si rende conto di quanto sforzo sarebbe necessario per ricodificare il codice creato male.


1
Questo è troppo generalizzato. Anche un po 'di pragmatismo è buono.
mafu,

18

Che il programmatore non sappia tutto e dovrebbe sempre cercare di imparare nuove lingue / tecnologie, ecc.


16

Le basi del buon design dell'interfaccia utente e del design della comunicazione (aka graphic) .

Vedo così tante app e progetti rovinati dal cattivo design o dalla scarsa usabilità. Imparare le basi può fare la differenza. Inoltre, le tecniche di risoluzione dei problemi visivi (ovvero come comunicare visivamente un concetto) sono una sfida stimolante che dovrebbe aprire gli occhi su nuovi modi di vedere, che a loro volta dovrebbero avere un impatto sul codice.

Un libro consigliato è Il libro di design del non designer di Robin Williams

Ecco cosa ne dice Joel Spolsky :

Wow! Tutti devono fare un po 'di progettazione grafica e non tutti i team di software hanno il lusso di progettisti professionisti. Questo eccellente e sottile libro ti darà una comprensione dei principi che stanno dietro l'impaginazione, i caratteri, ecc. La buona notizia è che puoi leggerlo nella vasca prima che l'acqua si raffreddi, e il giorno successivo, le tue finestre di dialogo e punti di forza e le pagine Web inizieranno a sembrare migliori.


1
Lo secondo, con un cenno aggiuntivo al "design delle cose di tutti i giorni". amazon.com/Design-Everyday-Things-Donald-Norman/dp/0385267746
Stimul8d

14

Ogni programmatore dovrebbe sapere come imparare rapidamente. Molte volte entri in un lavoro e ti verrà chiesto di sviluppare una tecnologia che non hai mai usato. Potrebbero darti circa una settimana per rimetterti in piedi (se sei fortunato) prima che ti venga chiesto di scrivere un codice di qualità di produzione.


Ho iniziato il mio primo lavoro di programmazione in assoluto e nel giro di una settimana stavo scrivendo un codice che alla fine sarebbe diventato live. Fortunatamente sono uno studente veloce e ho avuto esperienze di programmazione passate. Entro 6 mesi avevo ristrutturato la connessione client-server per migliorare le prestazioni in tre modi. Era in una lingua che non avevo mai usato prima.

14

Controllo della versione. E per citare la mia ragazza: "Non voglio solo che tu faccia i piatti, voglio che ti piaccia !"


10

I requisiti cambiano, il tuo codice dovrà adattarsi e potresti essere tu o meno a doverlo adattare.

Ci sono state diverse domande qui relative agli argomenti che sono interessati da questo.


10

In cima alla mia testa:

  1. Pochissimi problemi di programmazione richiedono matematica oltre ad addizione, sottrazione, moltiplicazione e divisione. Se stai pensando di utilizzare il calcolo per risolvere un problema, cerca esaustivamente le alternative prima di farlo.

  2. Ogni volta che ti ritrovi a indovinare come dovrebbe funzionare qualcosa, stai sbagliando. Non è il tuo lavoro essere telepatico.

  3. La persona che ti fornisce le specifiche raramente sa tutto quello che vuole fino a quando non le hai cancellate.

  4. Più della metà dell'essere un grande programmatore viene dal rapporto con gli esseri umani. Interagire con il proprio team, gestire il proprio manager e perfezionare l'utente finale è metà del lavoro.

  5. Il buon codice è scritto per essere letto dalle persone tanto quanto deve essere letto dal compilatore.

  6. Le migliori pratiche e la realtà pratica saranno in conflitto più di quanto il programmatore pensi, ma meno del manager. Quando sembrano essere in conflitto, sta a te delineare e comprendere il conflitto e poi cedere alla pratica. La soluzione sottile e intelligente è solo migliore di quella brutta e brutale se a lungo termine è più conveniente.

  7. I grandi strumenti non possono diventare grandi programmatori, ma i cattivi strumenti ci rendono ugualmente terribili.

  8. Non guardare mai una tecnologia, ma cerca sempre la migliore alternativa.

  9. Più lingue conosci, meglio sarai in quello che stai usando.

  10. Non essere disturbato dal lento insinuarsi di pensieri orientati alla programmazione nella tua vita quotidiana. Anche quando non siamo al computer, tutti soffriamo di limiti di larghezza di banda, penalizziamo le prestazioni a causa del cambio di attività e dobbiamo caricare elementi dall'archivio di backup. I computer dovrebbero imitare il pensiero umano e gli analoghi sono ovunque.


Il numero 10 mi ha fatto ridere. Tante volte lavorerò su un problema sul lavoro, ma è solo a letto alle 22:00 che alla fine mi viene in mente la risposta!

9

Leggere il codice di altre persone non ti rovinerà il cervello, ma piuttosto capire perché non lo avresti fatto in questo modo (se meglio o no è un'altra domanda).

Questo ti dà la programmazione di gedankenexperiment , e occasionalmente trovi qualcuno che implementa qualcosa di meglio! Come in meglio.

Questa risposta si espande naturalmente alla lettura del proprio codice, quindi si espande per utilizzare il controllo versione e DIFF, e quindi a 42.

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.