How to Succeed as an Apprentice Programmer
David Hoover, author of Apprenticeship Patterns
, offered these tips for new programmers to help them reach their full potential in a recent interview
- Understanding where you're at. "I wasn't really exposed to the concept of apprenticeship until about two years into my career. And I had already made some pretty good progress. But once I was exposed to that idea and that people were out there trying to master this craft, this software development, it made me realize, 'Oh, man. I'm just an apprentice.' So having an accurate self-assessment. And you have that but it's too easy to compare yourself to the standard developer out there, the average developer in our industry. And if you do that, you're going to feel a little bit smug. And you're going to feel like you've accomplished something pretty darn quickly. Just by caring, you're already going to be ahead of a lot of different people. But instead, you should be comparing yourself to masters which are people that are out there doing great work and potentially speaking about it or writing books about it. And if that's what you -- if you want to achieve mastery of this craft, that's who you should be comparing yourself to.
- Find mentors who are ahead of you in the field. "That might not be the luminaries of the field, but people that you can learn from and that are going to be able to give you some guidance about the right ways to approach problems."
- Find some peers to network with. "Finding kindred spirits is another thing that is really important, I think, for people that are trying to walk this long road to mastery. These are more peers, people that come along with you who you're going to bounce ideas off of each other or you're going to keep each other going through different projects. You might not work with them. For me, I had a kindred spirit who worked at a different company, but we both worked in Chicago. We'd meet once a week over pizza and either pair on things we were more interested in than our job or lament the difficulties of our different organizations."
- Perpetual learning. "As people in our industry know, our industry changes quickly. The technologies are rapidly evolving. There's fundamentals, so you have to go back and study the classics of our field. There's certain books that are timeless that I think everybody needs to be able to read. Certain computer science fundamentals like compilers and algorithms that maybe you're not going to use everyday, but they're important for stretching your brain. And other things that are a little more people-centric like Peopleware by Demarco and the Psychology of Computer Programming by Weinberg. So educating yourself, perpetual learning."
- Setting aside time to practice. "Setting time aside to be able to write software outside the constraints of your day job is important because that's where you're going to be able to learn new techniques and try out new techniques without bringing down your production site because you screwed up or you were too excited about some new design pattern or some new technology, but being able to break these things called breakable toys where you can experiment and learn. And sometimes those things grow into real projects. Linux was a breakable toy a long time ago. Where Linus was just playing around and never thought it would amount to anything, but it turned into something."
Excellent advice - I've been reading Apprenticeship Patterns and it's really rekindled my interest in getting back into programming. Great book.