I programmatori hanno bisogno di una buona memoria? [chiuso]


16

Sembra che si debba ricordare ogni sorta di sintassi per poter programmare. Se uno non ha una buona memoria per ricordare i nomi, sarà più difficile imparare a programmare?


20
C'era un nome per avere una buona memoria per i nomi, ma ho dimenticato di cosa si tratta.
Mike Two,

3
Se la sintassi è un problema, scegli una lingua che abbia la sintassi minima. Lisp / Clojure?
Chirone,

1
In questi giorni non passo tutto il giorno a programmare, ma passo un po 'di tempo ogni giorno a programmare. E programmo in un sacco di lingue che non sono simili l'una all'altra. Programma di tanto in tanto in C, Java, Javascript, Lisp, VBA, PL / SQL, Ruby, Python, Perl, Smalltalk e anche un po 'di Prolog. Cerco solo la sintassi.
Mike Sherrill "Cat Recall",

4
Se lo fanno, lo sto fingendo da circa 13 anni.
ElGringoGrande,

1
Le università certamente lo insegnano come se avessi bisogno di una buona memoria, il che è assolutamente stupido. Il mio è particolarmente noto per richiedere che gli esami finali CS valgano almeno il 50% (sempre a libro chiuso) e gli esami intermedi di solito almeno il 30-40%.
Rei Miyasaka,

Risposte:


34

La sintassi di una lingua non è così difficile come pensi di ricordare, se la usi quotidianamente. Alla fine diventa molto facile. Ricordare tutte le varie funzioni della biblioteca potrebbe essere molto più difficile e non penso che la maggior parte delle persone possa ricordare più di quelle più comuni che usano, ma va bene se si ha accesso al Web, a un libro o qualcos'altro che " ricorda "tutti gli altri dettagli per te.


+1. Diventa davvero una seconda natura. Ripenso al codice e non ricordo nemmeno di aver fatto nessuna delle regole di formattazione che seguo ...
Reid

1
Le guide tascabili di O'Reilly mi aiutano a tenere traccia delle cose. Molto utile.
Ingegnere mondiale il

17

Sembra che bisogna ricordare ogni sorta di sintassi per essere in grado di programmare un linguaggio naturale.

Se uno non ha una buona memoria per ricordare i nomi delle parole, sarà più difficile imparare a parlare in modo programmato ?

Non può essere vero che le persone hanno una struttura "naturale" con le lingue, vero?

Non può essere vero che abbiamo hardware neurale di basso livello solo per acquisire lingue, vero?

La programmazione utilizza linguaggi artificiali che seguono molte delle regole dei linguaggi naturali.

I linguaggi naturali hanno un po ' più di flessibilità rispetto ai linguaggi di programmazione.

grammatica ancora severa. le regole ci sono molto che Ma

Se sai parlare, puoi imparare a programmare senza memorizzare nulla di più di quello che hai memorizzato quando hai imparato a parlare.


13

Sì:

Se stai parlando di memoria a breve termine, allora . un programmatore deve essere in grado di destreggiarsi tra più bit di informazioni contemporaneamente durante la programmazione / risoluzione dei problemi.

No:

Se stai parlando di memoria a lungo termine, allora non proprio. Esistono molti manuali e riferimenti + strumenti che possono aiutare in modo significativo nel richiamo delle informazioni. Certamente memorizzare queste informazioni a lungo termine ti renderà uno sviluppatore più veloce (nel complesso), ma non è un prerequisito.


1
+1 Per fare un utile confronto tra l'utilità della memoria a breve e lungo termine in relazione alla domanda. Stavo aspettando di vedere qualcuno farlo.
KChaloux,

8

Un buon ricordo è assolutamente essenziale, ma non per ovvi motivi.

Ricordare i dettagli su specifici algoritmi, librerie, nomi di variabili e simili è molto utile, ma non è molto importante. Hai Google, DuckDuckGo, pagine man, documentazione specifica della lingua e editor intelligenti per aiutarti con tutto quanto sopra. Aiuta se non hai bisogno di fare affidamento su queste stampelle, ma ti andrà bene se ne hai bisogno di tanto in tanto.

Dove la memoria è essenziale è mantenere i dettagli di ciò su cui stai lavorando nella memoria attiva a breve termine. Essere in grado di visualizzare il design, il flusso di dati, gli algoritmi, le strutture di dati e il modo in cui tutti interagiscono per fare qualunque cosa faccia il tuo prodotto separa il programmatore OK dal grande programmatore. Quando lo stai facendo attivamente, ti sembra di destreggiarti con successo in un gigantesco numero di palle mentre guidi un monociclo.

Questo è spesso indicato come essere nella zona . Interruzioni, domande stupide, boss che hanno bisogno di rapporti TPS ti scuotono da questa zona.

Migliore è la tua memoria, più facile sarà entrare nella zona, più facile sarà rimanere lì, e più facile sarà tornare in essa dopo un'interruzione.

Se hai problemi con questo tipo di memoria, suggerirei di imparare tecniche di meditazione e trucchi di memoria man mano che più diventa facile la tua memoria, maggiore sarà il tuo successo come programmatore.


1
In realtà direi che i requisiti di memoria sono ridotti se modifichi meglio il programma e dai un nome alle cose. Se hai un metodo a due pagine con 20 variabili, devi ricordare molto di più che se hai un metodo a 5 righe con chiamate ad altri metodi ben definiti per eseguire attività secondarie. Inoltre ogni volta che vuoi modificare qualcosa di così complesso, devi entrare nella "zona" per farlo. Considerando che se è più semplice, puoi semplicemente apportare la modifica. Direi che "la zona" è una responsabilità.
Cervo,

1
@Cervo - Sì, quando stai codificando singoli moduli e piccole unità di codice, ciò che descrivo sopra non è davvero necessario. Ma quando esegui il debug di un intero sistema e cerchi di trovare in quale modulo bello, pulito e pulito si trova il problema, aiuta a essere in grado di tenere a mente quanto più stato possibile.
unpythonic il

Perché nel mondo questo ha avuto un solo voto? Non puoi progettare correttamente il tuo codice senza ricordare come si adatta alle cose che lo circondano. Molta programmazione moderna riguarda la riduzione della quantità di dettagli che ciò comporta, ma ciò riduce semplicemente la quantità che devi ricordare, non il fatto che devi ricordarla per fare il tuo lavoro.
Loren Pechtel,

5

Ho intenzione di andare controcorrente e dire di . Un buon ricordo è una risorsa straordinaria come programmatore. La mia memoria l'ho sempre vista come una responsabilità di programmazione, quindi ho raccolto alcuni trucchi per compensare il mio handicap:

  • Dovresti essere in grado di ricordare come è stata scritta quella variabile (che hai usato 3 righe prima). Se non riesci a imparare a usare Intellisense (o qualunque sia la tua forma di completamento automatico nel tuo editor o IDE).

  • Dovresti essere in grado di ricordare rapidamente cosa stavi facendo l'ultima volta che hai lavorato a questo progetto. Questo potrebbe essere stato giorni fa, potrebbe essere stato poco prima di pranzo. Se non puoi, impara a scrivere cose . Tieni un quaderno al tuo fianco e scrivi cosa stavi facendo (o cosa), oggetti TODO e cose che devi ricordare su come il codice corrente su cui stai lavorando si adatta.

  • Il debug e il QA sono difficili. Idealmente, dovresti tenere un quaderno molto dettagliato sui passi che hai fatto quando hai cercato di riprodurre un bug o eseguire il debug di qualcosa. Questo è qualcosa che so che dovrei fare, ma con cui ancora lottare.

Spero che sia di aiuto!


4

La Guerrilla Guide to Interviewing (versione 3.0) è un riferimento comune che le note che sono intelligenti e che fanno le cose sono i punti importanti della programmazione. Smart include alcune capacità di memoria, ma non necessariamente quanto potresti pensare.

Intellisense può essere di grande aiuto quando si tratta di sintassi se si desidera un po 'di aiuto su quel lato delle cose. Sapere come apprendi in modo da poter applicare rapidamente ciò che apprendi in modo significativo è più importante che essere in grado di rispondere alle domande trivia.


2

Credo che ricordare i nomi sia una funzione cognitiva piuttosto diversa dal ricordare i processi che è diverso dal ricordare i vocabolari. Ci sono stati casi di persone che hanno ricevuto lesioni cerebrali che hanno rimosso completamente la capacità di ricordare i nomi pur essendo in grado di funzionare perfettamente bene altrimenti.

Quindi direi che la capacità di ricordare i nomi non è correlata all'apprendimento dei linguaggi di programmazione.

Sarebbe comunque utile essere in grado di ricordare schemi logici, regole e vocabolario.


2
Sono abbastanza sicuro che tu abbia ragione. L'indicatore del tipo Myers-Briggs afferma che gli INTP (che sono particolarmente adatti a diventare programmatori) hanno difficoltà a ricordare i nomi delle persone. Lo so vero nel mio caso. Ricordo i nomi dei tuoi animali domestici, la targa della tua auto e dove ho messo la stampa di uno stacktrace che mi hai dato l'anno scorso che aveva le strane newline come 0x0D0A0D. Il tuo nome, però, lo dimenticherò 10 minuti. (Quando ero più giovane, mi ci sono voluti tre anni per ottenere i nomi di tutte le persone della mia squadra di calcio.)
Mike Sherrill 'Cat Recall'

2

No. La profondità di memoria degli strumenti (Intellisense, Google, compilatori, generatori di codice) è infinita rispetto alla memoria umana. Quindi un programmatore con una buona memoria non è molto meglio di uno con un buco nella testa.

Ciò di cui i programmatori hanno effettivamente bisogno è la "velocità di picco della messa a fuoco" quando passano tra i livelli di astrazione. Più veloce puoi, meglio sei come programmatore. Alcuni hanno una velocità del battito cardiaco come 500 ms, con l'arrivo della prima ondata di sangue al cervello in cui ti concentri. Alcuni hanno un orologio di messa a fuoco arrotondato al ciclo del fumo, circa 2 ore. Alcuni hanno bisogno di una doccia mattutina, quindi circa 24 ore. ecc. La differenza tra programmatore buono e cattivo una volta era dichiarata 1:80 volte anni fa, e il divario sta solo crescendo.


1

No, devi solo capire come funziona Google per ottenere ciò che desideri

Ho un ricordo orribile, ma le mie abilità su Google sono fantastiche ^ _ ^

In tutta serietà, finché sai dove trovare la sintassi, non è necessario ricordarla. Ecco a cosa servono intellisense, file di aiuto, guide di riferimento, Internet, ecc.


1

Prima di tutto, imparare a programmare è difficile per tutti. Avere una buona memoria aiuta sicuramente. Ma la dedizione e l'amore per l'apprendimento permanente sono più preziosi. La sintassi dell'apprendimento è come qualsiasi altra cosa, la ripetizione.

Non c'è nulla di magico o sovrumano nell'abilità di programmare. Trascorri circa 10.000 ore su di esso ... e sarai un maestro come qualsiasi altra abilità. Certo, sono 10.000 ore di allenamento, che non ripetono ciecamente e in modo assordante mente gli errori del passato.


1

Hai scritto questo post in inglese, con la sintassi corretta. Chiaramente sei in grado di ricordare come usare una lingua. Devi solo imparare una nuova lingua e usarla abbastanza spesso da averla sempre bene. A differenza dei linguaggi orientati all'uomo, i linguaggi di programmazione per computer ti faranno sempre sapere quando hai utilizzato una sintassi errata, quindi in realtà è più facile. :-)


1

Sono d'accordo che esiste una grande varietà di cose che un programmatore medio può sapere per svolgere i suoi compiti, basti pensare a tutte le parole, le sintassi, le tecniche che dovresti sostanzialmente controllare per costruire un semplice sito Web (sul front-end: HTML, CSS, javascript (puoi anche considerare alcuni framework Js come jquery), ajax, sul back-end: Php o ASP o ASP.Net, e non dimenticare di basi di dati, mySql o SqlServer o Oracle o MongoDB, ecc.). C'è un enorme elenco di lingue, paradigmi, sintassi, schemi, ecc., È impossibile ricordare tutto di loro.

Pensa che ciò che rende un buon programmatore sia la pratica, le pratiche con algoritmi più che con le lingue, e con ciò alla fine ricorderai le cose che usi più spesso, per il resto, c'è sempre google = P


1

Un grande ricordo può tagliare in entrambi i modi.

Se riesci a destreggiarti in una dozzina di informazioni contemporaneamente, avrai un tempo molto più semplice nel dare un senso (e spero riscrivere) quell'orribile pezzo di codice legacy che è fondamentale per il progetto ma così complicato che tutti gli altri hanno paura toccarlo.

D'altra parte, quell'orribile pezzo di codice che è fondamentale per il progetto ma così complicato che tutti gli altri hanno paura di toccarlo è stato probabilmente scritto da qualcuno con una straordinaria capacità di destreggiarsi tra dozzine di informazioni. Se hai un grande ricordo, lavora sodo per coltivare un apprezzamento per l'eleganza della semplicità.

L'apprendimento della sintassi di un linguaggio di programmazione non richiede una grande memoria. Come altri hanno già detto, la sintassi è rafforzata nella tua memoria così tanto che diventa rapidamente una seconda natura. Hai mai dimenticato da che parte della strada dovresti guidare? Quali simboli aritmetici rappresentano addizione e sottrazione? Altrimenti, padroneggi le parti più comuni della sintassi della lingua scelta senza troppi problemi e puoi cercare i bit meno comuni quando vengono fuori.

Alcune librerie hanno centinaia o migliaia di funzioni, classi e / o metodi. Sembrerebbe a un estraneo come un compito impossibile imparare a usare tutta quella funzionalità. Ma c'è quasi sempre qualche struttura sottostante alla biblioteca. Invece di provare a ricordare tutte quelle funzioni, un programmatore intelligente cerca di capire come è organizzata la biblioteca e cosa può fare. Fatto ciò, di solito è abbastanza facile trovare la funzione di cui hai bisogno quando ne hai bisogno.

In breve, la memoria è molto meno importante della comprensione.


0

Dipende. All'interno di Java e .NET le librerie standard sono in una sorta di gerarchia e sono ben documentate. Pertanto, se sai che hai a che fare con il networking, vai su system.net in C # e da lì puoi approfondire gli oggetti / le chiamate specifici di cui hai bisogno. Quindi da quel punto di vista non è necessario memorizzare i dettagli e lì.

Nel tuo programma, è tutto su come organizzare / nominare le cose. Se stai usando nomi come $, b $, c $ ... o g $ da Basic in vecchio, allora buona fortuna. se dai un nome alle cose come le penserai come FirstName, LastName è molto più semplice. Molte lingue hanno standard di denominazione che aiutano anche. In Java, ad esempio, esiste una convenzione di setX, getX per ottenere / impostare attributi specifici di una classe e convenzioni di capitalizzazione. Quindi, se sai che una persona ha il nome, probabilmente si chiama firstName e il getter / setter sono probabilmente getFirstName e setFirstName ..... Quindi queste convenzioni aiutano molto ...

Inoltre, metodi / funzioni più brevi ti aiutano a rimanere meno in testa contemporaneamente. E l'uso di nomi propri ti aiuta a non aver bisogno di andare a cercare. Ad esempio, se si nominano le cose per quello che fanno, quindi quando si legge una procedura che chiama getMaximumValue probabilmente non sarà necessario leggere getMaximumValue per capire cosa fa ... Ma poiché funzioni / metodi diventano più lunghi e nidificati, allora una memoria migliore aiuta sicuramente.


Ho lasciato fuori l'intellisenso che JB King ha menzionato, ma anche per C # aiuta davvero. Tendo a usare editor per Java che non ce l'hanno :( Tuttavia il resto si applica ancora, se mantieni metodi più brevi, segui le convenzioni di denominazione, allora l'intellisense funziona ancora meglio. Se hai 50 variabili in un metodo, l'intellisense potrebbe comunque lasciare sei un po 'sopraffatto.
Cervo,

Cervo Sono principalmente uno sviluppatore di C # ma ultimamente ho fatto sempre di più in Java. Prova IntelliJ Idea. La loro ultima versione ha un buon intellisense. Visual Studio non buono ma vicino.
Adrian,

0

La memoria non è poi così importante. Se sei preoccupato, mi dimentico regolarmente il mio portafoglio o le chiavi a casa mia al mattino. Chiamo tutti con il nome sbagliato almeno una volta (compresi la mia famiglia e la mia ragazza). Ho semplicemente dimenticato di fare le cose in casa per tutto il tempo.

Alla fine della giornata i principi della programmazione saranno ancora nella tua testa proprio come "non dimenticherai mai come andare in bicicletta". I dettagli specifici e i dettagli di implementazione non sono poi così importanti. Puoi sempre Google quelli.


0

Da Joel On Software sulla produttività di un programmatore-

La produttività dipende dalla capacità di destreggiarsi tra tanti piccoli dettagli nella memoria a breve termine contemporaneamente.

Quindi, la memoria a breve termine è molto importante per un programmatore che ha un compito critico.
Ma non penso che la memoria a lungo termine sia così importante.


0

Da una lettura veloce, non ho visto nessuno parlare della memoria nel senso generale della programmazione piuttosto che di un singolo compito di scrivere un programma.

La memoria è utile per due cose:

  1. Ricordando la semantica / le librerie di base:

    Questo è facilmente soppiantato dalla ripetizione e da Google. IOW, la quantità di memoria con cui sei nato deve essere ridicolmente bassa per non riuscire a superare questo problema.

  2. Ricordare il contesto nei grandi programmi:

    Ecco dove sta il trucco. Man mano che i programmi diventano più grandi (e tu diventi senior), le decisioni che prendi riguardano totalmente la quantità di conoscenza del sistema e la capacità di recuperarlo in pochi millisecondi se deve essere utile in discussioni di progetto, debug, reagire alle emergenze operative ecc. Quando la spinta si fa avanti, nessuna quantità di documentazione / voci wiki ti aiuteranno - il "mago" del tuo team sarà la tua unica opzione. Questo è uno dei motivi per cui i principali ingegneri sono valutati / pagati così tanto. La maggior parte di loro potrebbe non passare tutto il loro tempo a scrivere codice a questo punto, trascorrono più tempo a tenersi aggiornati sull'immagine completa e ad applicarla per eventuali problemi / miglioramenti. I bravi si tengono in contatto semplicemente facendo un sacco di CR e un cambio di codifica qua e là / prototipazione di nuove revisioni.

IOW, puoi essere un programmatore ragionevole con il solo # 1, ma se mai sarai il prossimo Linus, è meglio avere molta memoria, almeno abbastanza per comprendere il problema che stai risolvendo.

Dalle mie osservazioni, potrei persino dire che la memoria di lavoro è quasi direttamente proporzionale al valore della persona.

Un piccolo disclaimer da concludere: se hai una memoria Eidetic ma zero / basso potere intellettuale nell'applicare quella logica, non sarai utile a un progetto di una telecamera.


0

Se hai difficoltà a ricordare i nomi delle persone che incontri, potresti comunque diventare un grande programmatore.

Dimentico sempre i nomi delle persone. Sono un programmatore senior con quasi un decennio di esperienza. Nel mio caso, la mia terribile memoria uditiva è compensata da una grande memoria visiva.

Tuttavia, il requisito essenziale per un buon programmatore è la capacità di astrarre. Non importa quanto o quanto poco ricordi, se non riesci a capire il concetto di una variabile e come usarlo in un programma, non diventerai un buon programmatore.

Il mio suggerimento è di provare un breve corso di programmazione o di completare il tutorial di Python per vedere come ti piace.

Questo dovrebbe darti una buona idea se la programmazione è una carriera che potresti essere interessato a perseguire.


-1

Dico un SÌ enfatico!

Al momento sto imparando JAVA & C #. Tutti i test sono a libro chiuso, quindi per JAVA è tutto al 100% dalla memoria che codifica tutte le applicazioni negli esami.

Inoltre, sta diventando sempre più difficile. Ora sono al punto in cui devo iniziare a usare trucchi di memoria come mnemonici, ecc.

Direi Alto QI, buone conoscenze generali, buon vocabolario, polimatismo, conoscenze matematiche più elevate, digitazione tattile e buona memoria sono tutte risorse per un programmatore.

Conosco programmatori molto abili che non riescono a toccare il tipo o fare matematica più elevata, ecc. Potrebbero essere molto meglio.


Il mondo reale non è un libro chiuso. In quasi tutti i casi i test a libro chiuso sono un'indicazione di un insegnante che non sa come fare buoni test.
Loren Pechtel,
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.