Anant Jain

The Passionate Programmer

Book Review

The Passionate Programmer: Creating a Remarkable Career in Software Development

If I were to create a list of essential reads for anyone about to start a career as a professional software developer, The Passionate Programmer would be in the top 3 slots on it. In this book, Chad Fowler, a musician turned software developer, lays out a very useful framework to think about your software engineering career.

The key idea is to "think of your career as if it is the life cycle of a product that you are creating. That product is made up of you and your skills." The four facets that a business must focus on when designing, manufacturing, and selling a product are sections I-IV of the book (i.e., Choosing a market, Investing in your Product, Executing, and Marketing.) Each chapter is fairly short and is framed as a tip. More helpfully, each tip ends with an "Act on It" section that gives practical, usable tips on how to go about implementing the key idea in that chapter. Here's the TOC of the book, with a line or two about the key idea from the chapter quoted directly from the book:

I. Choosing Your Market

  • Tip 1. Lead or Bleed?: Are there any technologies around the far edges that you have a special interest in?
  • Tip 2. Supply and Demand: You might choose to compete in segments of the job market in which there is actually lower demand. Alternatively, you could exploit market imbalances—going where the offshore companies won’t go. In either case, it pays to understand the forces at work and to be skilled and nimble enough to react to them.
  • Tip 3. Coding Don’t Cut It Anymore: If you want to stay relevant, you’re going to have to dive into the domain of the business you’re in.
  • Tip 4. Be the Worst: Always be the worst guy in every band you’re in. People can significantly improve or regress in skill, purely based on who they are performing with. And, prolonged experience with a group can have a lasting impact on one’s ability to perform. Attempting to be the worst actually stops you from selling yourself short. You might belong in the A band but always put yourself in the B band, because you’re afraid. Acknowledging outright that you’re not the best wipes away the fear of being discovered for the not-best person you are. In reality, even when you try to be the worst, you won’t actually be.
  • Tip 5. Invest in Your Intelligence: Go out of your way to learn the idioms of the new language. Ask old-timers to review your code and make suggestions that would make it more idiomatically correct.
  • Tip 6. Don’t Listen to Your Parents: Take calculated risks with your career. Don’t let fear consume you. And if you’re not having fun, you’re not going to be excellent.
  • Tip 7. Be a Generalist: If your goal is to be the last person standing amid rounds of layoffs and the shipment of jobs overseas, you better make yourself generally useful. The way to become a generalist is to not label yourself with a specific role or technology. The ability to be flexible in the roles you can and will fill is an attribute that many people don’t understand the value of. Programmer geeks can’t lead, and leaders can’t hack. It’s rare to find someone who’s even decent at both.
  • Tip 8. Be a Specialist: Too many of us seem to believe that specializing in something simply means you don’t know about other things. I could, for example, call my mother a Windows specialist, because she has never used Linux or OS X. Don't be one of these shallow "specialists."
  • Tip 9. Don’t Put All Your Eggs in Someone Else’s Basket: You can really learn only so much about a piece of proprietary software until you reach the professional services barrier. The professional services barrier is the artificial barrier that a company erects between you and the solution to a problem you may have so that it can profit from selling you support services. So, although a single-minded investment in one particular technology is almost always a bad idea, if you must do so, consider focusing on an open source option, as opposed to a commercial one.
  • Tip 10. Love It or Leave It: You have to be passionate about your work if you want to be great at your work. If you don’t care, it will show.

II. Investing in Your Product

  • Tip 11. Learn to Fish: Ask for a fish, eat for a day. Ask someone to teach you to fish, eat for a lifetime. Better yet, don't ask to be taught — go learn for yourself!
  • Tip 12. Learn How Businesses Really Work: Understanding the financial drivers — and language — of your company will give you the ability to make meaningful changes, rather than stabbing in the dark at things that seem intuitively right to you.
  • Tip 13. Find a Mentor: The first and most important purpose that a mentor serves is that of a role model. A mentor can also give structure to your learning process. A mentor can help take some of the choice out of what to focus your energies on.
  • Tip 14. Be a Mentor: We learn by teaching. If nothing, just start helping people, and the rest will come natuarally.
  • Tip 15. Practice, Practice, Practice: When you practice music, it shouldn’t sound good. If you always sound good during practice sessions, it means you’re not stretching your limits. That’s what practice is for. In the computer industry, it’s common to find developers stretched to their limits. Unfortunately, this is usually a case of a developer being underqualified for the tasks that he or she has undertaken. Our industry tends to practice on the job. If we’re going to try to compete based on quality, we have to stop treating our jobs as a practice session. We have to invest the time in our craft. Areas to practice: physical/coordination, sight reading, improvisation.
  • Tip 16. The Way That You Do It: Fortunately, a lot of thought has been put into the process of making good software (and products in general). Much of this prior art has been codified into a group of methodologies. Learn these.
  • Tip 17. On the Shoulders of Giants: Learn from the greats of the software engineering industry. Reading open source code is an excellent place to start.
  • Tip 18. Automate Yourself into a Job: Automation is part of the DNA of our industry. Yet for some reason we don’t tend to automate our work as software developers.

III. Executing

  • Tip 19. Right Now: Parkinson’s law is an empirical observation—not an unescapable human mandate. A sense of urgency, even if manufactured, is enough to easily double or triple your productivity. Try it, and you’ll see. You can do it faster. You can do it now. You can get it done instead of talking about getting it done. If you treat your projects like a race, you’ll get to the end a lot faster than if you treat them like a prison cell. Create movement. Be the one who pushes. Don’t get comfortable.
  • Tip 20. Mind Reader: For your next project or a system you maintain, start making some notes about what you think your users and managers are going to ask for.
  • Tip 21. Daily Hit: As with most tasks that are worth doing, becoming a standout performer is more likely with some specific and intentional work. When was the last time you went above and beyond the call of duty? Did your manager know about it? How can you increase the visible instances of this behavior? When you start to search for outstanding accomplishments, you naturally go through the process of evaluating and prioritizing your activities based on the business value of what you might work on. Tracking daily hits at a reasonably high frequency will ensure that you don’t get stuck: if you’re supposed to produce a hit per day, you can’t spend two weeks crafting the perfect task. You don’t have to worry so much about tracking your progress, because performing at this level becomes more akin to a nervous tic than a set of tasks that need to be planned out in Microsoft Project.
  • Tip 22. Remember Who You Work For: The role of a good manager is to set priorities for the team, make sure the team has what it needs to get the job done, and do what it takes to keep the team motivated and productive, ultimately getting done what needs to get done. If the manager’s job is to know and set priorities but not to personally do all the work, then your job is to do all the work. You are not doing the manager’s job for him or her. You’re doing your job.
  • Tip 23. Be Where You’re At: As a manager, I can tell you that the most frustrating thing to deal with is an employee who’s always aiming for the next rung on the ladder. If and when you finally land the big promotion you’ve been dreaming about, you’ll quickly grow tired and realize that it’s not this job you were meant for—it’s the next one. The cycle begins again. I haven’t reached the top yet, but I have a strong hunch that if there were such a position and I were to reach it, I would look ahead and realize I’d been chasing a ghost. What a frustrating waste of a professional life.
  • Tip 24. How Good a Job Can I Do Today?: How much more fun would your job be if you could treat the most uninteresting and annoying tasks with the same feverish desire to do them right? For most of us techies, the boring work is boring for two primary reasons. The work we love lets us flex our creative muscles. Software development is a creative act, and many of us are drawn to it for this reason. The work we don’t like is seldom work that we consider to be creative in nature. What if you tried to do the boring stuff perfectly?
  • Tip 25. How Much Are You Worth?: Just how much value do you add? Talk to your manager about how to best quantify it. The very fact that you want to quantify it will be taken as a good thing. How could you creatively save the company money? How could you make your development team more efficient? Or what about the end users of your software? You’ll be surprised at how many opportunities you can spot if you start asking these questions.
  • Tip 26. A Pebble in a Bucket of Water: Your presence on the job is, to the company, like a pebble in a bucket of water.
  • Tip 27. Learn to Love Maintenance: A hidden advantage of doing maintenance work is that, unlike the contractual environment of many of today’s project teams, the maintenance programmer often has the opportunity to interact directly with his or her customers.
  • Tip 28. Eight-Hour Burn: Martin renamed forty-hour workweek to “eight-hour burn.” The idea is that you should work so relentlessly that there is no way that you could continue longer than eight hours. When you have too much time to work, your work time reduces significantly in perceived value. If you have seventy hours available, each hour is less precious to you than when you have forty hours available. Budget your work hours carefully. Work less, and you’ll accomplish more. Work is always more welcome when you’ve given yourself time away from it.
  • Tip 29. Learn How to Fail: The difference between how a company treats us when they make a mistake can be the ultimate in loyalty building (or destroying). A mistake handled well might make us more loyal customers than we would have been had we never experienced a service problem. Remember this with your customers whenever you make mistakes on the job.
  • Tip 30. Say “No”: Saying “yes” is an addictive and destructive habit. It’s a bad habit masquerading as a good one. But there’s a big difference between a can-do attitude and the misrepresentation of one’s capabilities. If someone always says “yes,” they’re either incredibly talented or lying. The latter is usually the case. Don’t go overboard with the “no” game. Can-do attitudes are still appreciated, and it’s good to have stretch goals. If you’re not sure you can do something, but you want to give it a try, say that. “This is going to be a challenge, but I’d like to give it a try” is a wonderful answer. Sometimes, of course, the answer is simply “yes.”
  • Tip 31. Don’t Panic: We panic because we lose perspective. When something is going wrong, it’s hard not to focus all attention on the problem.
  • Tip 32. Say It, Do It, Show It: When you have too much to do, a plan can make the difference between confused ambiguity at the start of a workday and clear-headed confidence when attacking the tasks ahead.

IV. Marketing… Not Just for Suits

  • Tip 33. Perceptions, Perschmeptions: If you kick ass and no one is there to see, did you really kick ass? Who cares? No one. We’ve culturally trained ourselves to perceive that managing perception is somehow a dirty and shameful activity. But, as you can see, managing perception is just practical. Perceptions really do matter. They keep you employed (or unemployed). They get you promoted or get you stuck in the same job for years. They give you raises or lowball you on salary. The sooner you get over yourself and learn to manage perceptions, the sooner you’ll be on the right track.
  • Tip 34. Adventure Tour Guide: Instead of feeling like you are the computer genius, descending from computer heaven to save your poor customer from purgatory, turn the tables around. If you’re, for example, working in the insurance industry, think of your customer as a subject matter expert in insurance from which you have to learn in order to get your job done.
  • Tip 35. Me Rite Reel Nice: You’re going to be writing a lot. If so much of your job is going to involve writing, you better get good at it. More than ever, perceptions of you are going to be formed based on your writing ability. You may be a great coder, but if you can’t express yourself in words, you won’t be very effective on a distributed team. Communication, especially by means of writing, is the bottleneck through which all your wonderful ideas must pass. You are what you can explain.
  • Tip 36. Being Present: If you’re locked up in an office, accessible only by phone (if you answer) or e-mail and perhaps even working all hours of the night and sleeping late as a result, there’s no difference between you being onsite with your bosses and your customers and being offshore. You are missing a huge opportunity to become a sticky fixture in your company.
  • Tip 37. Suit Speak: Businesses and those who run them are interested in business results. So, marketing your accomplishments in any language other than the language of the business is ineffective. As a software developer, that means framing your accomplishments in the context of the business you work for. Sure, you got it done, but what was it? Why did it matter? How was this so-called accomplishment not just a waste of company time?
  • Tip 38. Change the World: If you don’t know what your crusade is, you probably don’t have one. If you’re not already actively trying to make your mark, you’re probably not making it.
  • Tip 39. Let Your Voice Be Heard: Companies want to hire experts. While a résumé with a solid list of projects is a good way to demonstrate experience, nothing is better at a job interview than for the interviewer to have already heard of you. It’s especially great if they’ve heard of you because they’ve read your articles or books or they’ve seen you speak at a conference. Wouldn’t you want to hire the person who “wrote the book” on the technology or methodology you’re attempting to deploy?
  • Tip 40. Build Your Brand: Brand building has two parts: actually making your mark so that people will recognize it and then making sure that mark is associated with positive traits. Recognition and respect.
  • Tip 41. Release Your Code: Leading an open source project can demonstrate much more than technical ability. It takes skills in leadership, release management, documentation, and product and community support to foster a community around your efforts.
  • Tip 42. Remarkability: A purple cow would stand out in a crowd of best, most milk-giving, and prettiest cows. It would be the purple one that you would talk about if you saw that group. What can you do that would make you and your accomplishments like the purple cow? Don’t just master a subject—write the book on it. Write code generators that take what used to be a one-week process to a five-minute process. Instead of being respected among your co-workers, become your city’s most recognized authority on whatever technologies you’re focusing on by doing seminars and workshops. Do something previously unthinkable on your next project.
  • Tip 44. Making the Hang: The really good people won’t mind if you want to know them. People like to be appreciated, and they like to talk about the topics they are passionate about. The fact that they are the professional or the guru or the leader or the renowned author doesn’t change that they’re human and like to interact with other humans.

V. Maintaining your Edge

  • Tip 44. Already Obsolete: Beware. Success breeds hubris, which breeds complacency. You have to start by realizing that even if you’re on the bleeding edge of today’s wave, you’re already probably behind on the next one. Looking ahead and being explicit about your skill development can mean the difference between being blind or visionary.
  • Tip 45. You’ve Already Lost Your Job: Don’t try to settle into the identity of a programmer. Or a designer. Or a tester. It’s good to have ambition, but don’t buy too heavily into a long, imagined future. You can’t afford to have tunnel vision with something too far off in the future.
  • Tip 46. Path with No Destination: The real meat of your career is not the promotions and salary advances. It’s the time you spend working toward those advances. Or, more important, it’s the time you spend working regardless of the advances.
  • Tip 47. Make Yourself a Map: Your personal product road map is what you use to tell whether you’ve moved. When you’re going to the same office day in and day out, working on a lot of the same things, the scenery around you doesn’t change.
  • Tip 48. Watch the Market: Alpha geeks are those super-nerds who are always on the bloodiest tip of the bleeding edge, at least in their hobby activities. Tim’s assertion, which I have since observed in the wild, is that if you can find these people and see what they’re into, you can get a glimpse of what’s going to be big one or two years down the road. It’s uncanny how well this works.
  • Tip 49. That Fat Man in the Mirror: When it comes to fluctuations in body weight, you have a scale, so it’s fairly easy to measure your progress (or lack thereof, in my case). There is unfortunately no such scale for measuring your marketability or your skill as a software developer. A 360 review comes closest to something that can help you understand where you stand.
  • Tip 50. The South Indian Monkey Trap: Find your monkey traps—What are your rigid assumptions? What are those values that guide your daily actions without you even consciously knowing it?
  • Tip 51. Avoid Waterfall Career Planning: Just as in software development, the cost of career change doesn’t have to be high. Sure, it might be hard to go from software testing to being a lawyer. But changing your direction from management to programming, or vice versa, isn’t hard. Nor is finding a new company to work for. Or moving to a different city.
  • Tip 52. Better Than Yesterday: If every day you do a little better than yesterday toward improving yourself, you’ll find that the otherwise ocean-sized proposition of building a remarkable career becomes more tractable.
  • Tip 53. Go Independent: A big company makes a wonderful place to go and semi-retire for a while if you’re burned out. But if you’re striving to be remarkable (which you are!), a big company is a hard place to find the right groove in the same way a bakery is a bad place to try to work off your love handles. The solution? Go independent!

Conclusion

Ultimately, the most important thing I’ve learned over the journey that my career in software development has been is that it’s not what you do for a living or what you have that’s important. It’s how you choose to accept these things. It’s internal. Satisfaction, like our career choices, is something that should be sought after and decided upon with intention.


This is #60 in a series of book reviews published weekly on this site.