There are a number of things that programmers are supposed to do, before they can consider themselves real programmers: learning C, learning touch typing, or writing an OS for a Cray 1 using only the front panel.
My advice is somewhat simpler:
Specifically, read the right stuff. For example
one all of the following classic papers:
A great recap of the field of software engineering , its problems and the lack of a “break-through” solution. And an invitation to strongly disagree. While agreeing. Or something like that.
In this great prophecy, Rob Pike and Brian Kernighan show what is wrong with UNIX today – about a decade before things actually started to go wrong. Read this if you are in a love-hate relationship with the modern unices. Double-read this if you write software for *nix systems. Learn this by heart if you write a *nix system. Plan 9 users may skip this – they’ll already know everything said here.
If you liked Hofstadter’s* Gödel, Escher, Bach*, you will love this. Ken Thompson was the man, ’84 was the year, great was the hack.
The story of developing fetchmail as an example for the Free Software Way of Software Engineering. Good stuff. A warning beforehand: it’s a typical esr essay. Stay cool and don’t quit on his self-praise.
Part of the “Lisp Papers” by Guy Steele and Gerald Sussman, this one is more technically involved than the rest of the list – but still an exciting read. These papers more of less form the foundation of the programming language *Scheme*. Containing great thoughts and a well-compiled introduction into the main problems of (implementing) programming languages, all of them are well worth your time.
Maybe *the* classic Paul Graham essay. I hope that every programmer on the planet has read this one at least twice – so this is the invitation to read it a third time. If you do not know this essay: read it if you are a hacker || you want to know what hacking is || you like well-written essays || you have never read any of Graham’s essays || true.
Dijkstra’s classic note where he makes the case for structured programming. Read it – and don’t just think or say you know it. Completely banning gotos, and justifying that stupidity with Dijkstra’s essay is, in my humble opinion, both the most common and the most severe case of ignorance among programmers and tech leads around the world. Know Dijkstra – know your rights!