billiejoex ti prende in giro; un buon programmatore sa a memoria ovviamente la sintassi del linguaggio che sta usando, tendenzialmente le regole del paradigma di programmazione che sta utilizzando e sicuramente un buon numero di algoritmi e soluzioni a problemi comuni che ha appreso nel tempo, magari dopo averci sudato su qualche volta. Poi conosce sicuramente le classi/funzioni/... la libreria standard del linguaggio che sta usando, non necessariamente tutto a memoria (questo solitamente vale per ciò che usa di più), ma almeno sa quali ambiti copre; per fare un esempio, della libreria C++ conosco bene buona parte della STL (perché la uso in continuazione), ho una conoscenza non troppo approfondita di iostream (di cui non faccio largo uso, o almeno, la uso in maniera "banale") e so molto poco di tutta la faccenda dei locale (che non uso praticamente mai). Questo poi si applica a qualunque libreria/framework che si utilizzi: si tende a conoscere bene la parte che si utilizza più di frequente, e per il resto è bene sapere almeno che esiste, per evitare di riscrivere codice inutilmente. In tutto questo l'utilizzo della documentazione (MSDN, Google, libri, documentazione specifica della libreria, ...) è fondamentale, visto che andando solo a memoria si rischia di commettere errori. Ovvio che se ci si imbatte in un problema nuovo e non viene in mente nulla la prima cosa da fare è una ricerca su Google.