Smart & Gets Things Done by Joel Spolsky was one of the items on my Amazon.com Christmas wish list. Thanks to my wonderful mother, I happily received a copy Christmas morning and spent most of the day reading it. The whole thing. It was very interesting, and it changed what I look for in a potential employer.
While at present I may not yet be the top-notch software developer Joel describes (I’m still in college, which I suppose justifies that), the book at least gives me some ideas about (a) what I can do to become such a programmer, and (b) what I can expect if (when?) I do reach that level and look for a “real” job.
The top-notch developers who can “hit the high notes” (chapter 1) can afford to be picky about where they work, with whom, and in what conditions, simply because they’re just that good. For the companies that want to hire them, the game changes from one in which the company has something that the candidate desperately wants to one in which the candidate is the thing the company desperately wants.
At the peril of extrapolating Joel’s thoughts far beyond their originally intended scope, I offer some suggestions to myself (and any other budding programmer who wants to “hit the high notes”):
- Be passionate about what you do. Work on projects you like doing, whether that's hacking around with Perl or writing a FORTRAN compiler in assembly language. A skilled programmer with passion and aptitude (as Joel points out in chapter 6) is much more valuable to a development team than someone who merely has a skill set. (Parenthetically, Joel also mentions that one of his standard interview questions probes the candidate's understanding of pointers and recursion. If you grok those important concepts, despite their seeming irrelevance in the face of "modern" languages, that's a good sign.)
- Be a good follower and a good leader. University computer science curricula don't provide much in the way of sustained, team-based software development. But when you start working for a bone fide software company (or even doing in-house IT), you'll almost always be on a team. For a team like that to be successful, it has to consist of developers who are flexible enough to follow (whether that's each other or the project manager) but strong enough to lead (when there's a better way of doing it that the manager doesn't see). Learning those skills before you hit the workplace will be a tremendous boon.
- Know what you want. Unless you're really desperate, you can probably afford to be (more than) a little picky about where you work. Do some research about the company before you even apply, and when they call you in for an interview, take careful note of the experience you have. Is the boss friendly? Do the other programmers who interview you know what they're talking about? Would you be able to work well with them? Is the office quiet and private enough to allow you to get in "the zone" while you're programming? Are they going to give you good tools (and, perhaps, toys)? All these factors will contribute to your success and satisfaction in your job and (of primary concern to your employer) your productivity. If you're happy and like what you do, you'll be productive. Which is a win-win situation for everyone. So take note.
- Stay on top of the ever-changing technology game. Java was the hip language years ago. And even though many college curricula still use it extensively, it's not always the best tool for the job. C++, either. Learning Ruby or Python will benefit you--right now anyway. And a few years into your first job you'll likely be learning something else. So that cool, innovative company you want to work for will value early adopters like you, because you're cool and innovative, too. Staying on top of the technology game will give you a competitive advantage.
Well, those are my thoughts. There’s a lot that goes into becoming a great developer, but these are a few things to get you started. At any rate, Smart & Gets Things Done is an enlightening read for manager and (budding) programmer alike.