Justin Weiss has two great posts about learning programming.
If you want to lead the technology curve, start investigating whatever Martin Fowler was writing about a decade ago.1
For an intermediate developer, learning is more focused. Instead of knowing a little about a lot, you’ll learn a lot about a little.
I started working as a developer when I was still coursing my bachelor and soon I realized that there are a bunch of smart people out there working on impressive projects such Linux, Gimp, Vim, the Ruby language, and many many others open-source (closed as well) projects. Since college I’ve being striving for this level of proficiency in both coding and software design, but I found difficult to understand the need for abstract things such as the ones explained on Design Patterns. With time and some (short) experience in real world applications, I was able to recognize the value of those elements. Now, as a computer engineer, I still don’t have the confidence I’ve been looking forward to but, at least, I think I found a way to get there.
It’s all about learning and applying.
Much like the TDD (test driven development) jingle, “Red, Green, Refactor”. I realized I just had to keep learning from the brilliant gurus, applying it on my daily work and improve. Somehow I stumbled upon this question on StackOverflow: What is the single most influential book every programmer should read? That was when I decided to buy the 10 top ones, read them and write a little bit about it. To the present point, the ten top ones are:
- Code Complete (2nd edition) by Steve McConnell
- The Pragmatic Programmer by Andrew Hunt and David Thomas
- Structure and Interpretation of Computer Programs
- The C Programming Language by Kernighan and Ritchie
- Introduction to Algorithms by Cormen, Leiserson, Rivest & Stein
- Design Patterns by the Gang of Four
- Refactoring: Improving the Design of Existing Code by Martin Fowler
- The Mythical Man Month by Fred Brooks
- The Art of Computer Programming by Donald Knuth (this one I still don't know if I'll actually read or not ...)
- Compilers: Principles, Techniques and Tools by Alfred V. Aho, Ravi Sethi and Jeffrey D. Ullman
I also think it’s nice that the books are diverse, they cover from Software Engineering (requirements, project management, etc), language specifics, theoretical computer science, and so on. This way, hopefully, I’ll become a more complete professional.
It’s actually a quote from Avdi Grimm. ↩