This week I finished reading Passionate Programmer by Chad Fowler. While reading it I found myself highlighting a lot of snippets of the book, so I’m going to use this blog post as a reference and put down all the sections that I highlighted. I’ll comment on my favorite ones:
On being a developer, what it means for your employer:
Your challenge is to become an obviously good investment. You will start to judge your own performance in terms of the business value you bring to the organization.
Coming from marketing/management I absolutely agree with that idea and am totally embracing it. I want to write great code, but not at the expense of the business. I try to bring value to the business by working on projects that have either a great impact or an immediate impact, or both. And I feel like this is even more important since I am a junior developer still learning a lot.
On the career of a programmer itself:
Schedule lunch with a businessperson. Talk to them about how they do their job.
Pick up a trade magazine for your company’s industry.
Look for industry websites that you can monitor on a regular basis.
Nice reminders, things you already know but forget to do when you’re focusing on coding.
On mastering the platform that you are working on:
It’s rare, and refreshing, to find a developer who truly understands the platform on which he or she is working. Applications are better and work gets done faster as a result.
Try a small project, twice. Try it once in your home base technology and then once, as idiomatically as possible, in a competing technology.
When you’ve picked the tool, allot yourself a small period of time each day to learn one new thing about the tool that wil make you more productive or put you in better control over your development environment.
You have to make time for practice.
Research model-driven architecture (MDA). Try some of the available tools. Look for somewhere in your work to apply the concepts of MDA if not the full toolset. Think about applying MDA concepts with just the tools you use every day.
I need to do a better job of working a little bit every day on my pet project, beebuzz, to repeat and practice what I learn.
On resources to practices:
TopCoder—TopCoder.com is a long-standing programming competition site. You can register for an account and compete online for prizes.
Code Kata, which are small, thought-provoking.
On being more efficient:
Pick a task you normally do repetitively, and write a code generator for it. Start simple. Don’t worry about reusability. Just make sure your generator saves you time.
I should probably start with learning bash scripting to create shortcuts for repetitive daily tasks.
On getting things done:
To be successful, raw ability wil get you only so far. The final stretch is populated by closers—people who finish things.
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.
If you do more than what they ask for or you have already done things before they ask, you will delight them.
All of us can benefit from scheduling and tracking our accomplishments.
Simply setting a goal (daily, weekly, or whatever you’re capable of) and tracking this type of accomplishment can radically change your behavior.
The hurdle rate: The minimum rate of return on a project or investment required by a manager or investor. In order to compensate for risk, the riskier the project, the higher the hurdle rate. In the hedge fund world, hurdle rate refers to the rate of return that the fund manager must beat before collecting incentive fees.
On marketing yourself:
On the surface, marketing yourself is simple. You have only two goals: to let people know you exist and to let them know you are the person who can solve the tough problems that keep them up at night.
Start keeping a development diary. Write a little in it each day, explaining what you’ve been working on, justifying your design decisions.
Make a list of co-workers, bosses, and customers whom you don’t talk to enough. Put recurring appointments on your calendar to call and check in with them.
Make a list of your recent accomplishments. Write the business benefit for each.
Make your elevator speech, and memorize it.
Have a mission. Make sure people know it.
Writing about (and linking to) the stories in your aggregator that you find interesting.
Google yourself —Search Google for your full name in quotes. Look through the first four pages of results.
On getting started with contributing to open-source projects:
Take a piece of open source software with unit tests. Run the unit tests through a code coverage analyzer. Find the least-tested part of the system and write tests to improve the coverage of that code. Untested code is often untestable code. Refactor to make the code more testable. Submit your change as a patch.
On being better than awesome:
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.
Try to do something remarkable on your current project or job. One way to experiment is to shoot for remarkable.
Do the work in a remarkably short time. See whether people “remark.” If not, why not? If so, in what ways? Fine tune the variables, and try again.
On reaching out to great people:
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.
It’s crazy how easy it is to get great programmers and business people to respond to you when you ask nicely. I have to take advantage of that more. And make myself available as well, return the favor.
On staying informed and current:
The process in this book is a loop that repeats until you retire. Research, invest, execute, market, repeat.
Carve out weekly time to investigate the bleeding edge. Make room for at least two hours each week in order to research.
Prototype new-tech versions of the hard bits of your current-tech projects to understand what the differences are and what the new technologies enable. Put this time on your schedule. Don’t let yourself miss it.
On enjoying the craft itself, not just the results:
One of America’s biggest problems is that it is a goal-oriented society. We’re a nation of people who are always focused on the outcome of a process, whether it is the process of learning, one’s career, or even a drive in the car. We’re so centered on the outcome that we forget to look at the scenery.
The real meat of your career is not the promotions and salary advances. It’s the time you spend working toward those advances.
That was one of my key realizations over the last few weeks: instead of having a good week/month or being happy when a project is successful, while I still enjoy these moments, now I love the tasks that I do daily, the work itself and not just the outcome.
On thinking about the long-term:
Before mapping out where you want to go, it can be encouraging and informative to map out where you’ve been. Take some time to explicitly lay out the timeline of your career. Show where you started and what your skills and jobs were at each step.
Books recommendations: The Miracle of Mindfulness by Thich Naht Hanh and Zen and the Art of Motorcycle Maintenance.
Focus on making whatever it is you’re trying to improve better today than it was yesterday.
Make a list of the difficult or complex improvements you’d like to make; they can be personal or professional. It’s OK if you have a fairly long list. Now, for each item in the list, think about what you could do today to make yourself or that item better than yesterday. Tomorrow, look at the list again. Was yesterday better than the day before? How can you make today better? Do it again the next day. Put it on your calendar. Spend two minutes thinking about this each morning.
Long road ahead, good planning will only help.