Home

About

The Passionate Programmer notes

04 May 2015

已经很久没有读鸡汤文了。不过对这本书里的很多语句感触很深,值得一记

我经常在问自己,为什么总是会不开心。细想,应该是出于对现状的无奈和对自己能力的不满。因此读完本书的导言觉得有些话真是说得鞭辟入里。读书确实是分人和场合的。如果几年之前读到的话,应该不会有这些共鸣吧。

Forward

You can’t be remarkable if you don’t love your environment, your tools, and your domain.

leading a remarkable career is the best way I know to kick start that same desire for leading a remarkable life–one where you don’t just become a better and more valuable worker, but you become a better human too.

Introduction

Strangely, we don’t all set out on the quest to lead remarkable lives when we start our careers. Most of us are content to go with the flow. Our expectations have been lowered for us by the media and by our friends, acquaintances, and family members. So, leading a remarkable life is something you have to discover as even being a reasonable goal. It’s not obvious.

If your life is primarily consumed by your work, then loving your work is one of the most important keys to loving your life. Challenging, motivating, rewarding work is more likely to make you want to get up in the morning than dull, average tasks.

Ultimately, we’re all looking for happiness. Once we have our basic human needs like food and shelter taken care of, most of our goals are geared toward finding happiness. Sadly, our activities are often mismatched to that one overarching goal. This is because we as humans get bogged down in the means and forget about the end.

A higher salary might actually be desirable and lead toward happiness. But if you take your eyes off the primary goal, you can find yourself driving toward a higher salary at the expense of your happiness.

You might make more money if you follow this advice. You might gain more recognition or even become famous. But please don’t forget that these are not the goals. They’re a means to an end.

Failure Is Off the Radar!

You don’t win a race by trying not to lose. And you don’t win at life by trying not to suck. Fortunately, the content of the book has never been about trying not to suck. I can’t think that way, and neither should you.

The only way to find yourself around those people as often as possible is to become one of those people.

Nobody becomes a musician because they want to get a job and lead a stable and comfortable life. The music industry is too cruel an environment for this to be a feasible plan. People who become professional musicians all want to be great. At least when starting out, greatness is binary in the music world. A musician wants to either be great (and famous for it!) or not do it at all.

It’s because a person who wants to be great is far more likely to become great than someone who just wants to do their job. And even if we can’t all be Martin Fowler, Linus Torvalds, or the Pragmatic Programmers, setting a high target makes it likely that we’ll at least land somewhere far above average.

You own it

Most people follow everyone else’s plan but not their own. To start differentiating yourself, all you have to do is stop and take a good look at your career. You need to be following your plan for you–not theirs.

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.

If you currently find yourself feeling afraid about losing your job, the steps you’ll take to build a remarkable career will remove that fear. Remarkable software developers don’t languish. They don’t find themselves fruitlessly searching for work. So, don’t worry. Stay focused on winning, and the fear of losing will be forever a memory

Part I choosing your market

You’re about to make a big investment. It may not be a lot of money, but it’s your time–your life.

If you think of your career as a business (which it is), your “product” is made up of the services you have to offer.

1 Lead or bleed

what I’ve been talking about is the difference between choosing technologies that are still on the bleeding edge and technologies that are firmly entrenched. Picking a stable technology that has already wedged itself into the production systems of businesses worldwide is a safer, but potentially less rewarding, choice than picking a flashy new technology that nobody has deployed yet.

the old systems don’t just die. They are replaced. Furthermore, in most cases, homegrown systems are replaced in stages. In those stages, the old systems have to talk to the new systems. Someone has to know how to make the new speak to the old, and vice versa.

Helping the old systems die comfortably and with dignity is a task that should not be underestimated. And, of course, most people will jump ship before it sinks, either via retirement or by sidestepping into another technology realm. By being the last one left to support still-critical systems, you can pretty much call the shots. It’s risky, in that once the technology really is gone, you’ll be an expert in something that doesn’t exist. However, if you can move fast enough, you can look for the next dying generation of legacy systems and start again.

Act on It!

  1. Make a list of early, middle, and late adoption technologies based on today’s market. Map them out on paper from left to right; the left is bleeding edge, and the right is filled by technologies that are in their sunsets. Push yourself to find as many technologies in each part of the spectrum as possible. Be as granular as possible about where in the curve they fall in relation to one another. When you have as many technologies mapped out as you can think of, mark the ones that you consider yourself strong in. Then, perhaps in a different color, mark the ones that you have some experience with but aren’t authoritative on. Where are most of your marks on the adoption curve? Do they clump? Are they spread evenly across? Are there any technologies around the far edges that you have some special interest in?

2 Supply and Demand

if you’re worried about losing employment to offshoring, one strategy would be to avoid the types of work that offshore companies are doing. Offshore companies are doing work that is in high demand. So, focusing on niche technologies is a strategy that, although not necessarily making the competition less fierce (there are fewer jobs to go around), might change the focus of competition from price to ability. That’s what you need. You can’t compete on price, but you can compete on ability.

To make offshoring work well, many companies realize the need for a reserve of high-end, onshore developers who can set standards, ensure quality, and provide technical leadership. An increase in overall Java programming demand would naturally lead to an increase in this category of Java work. The low-end jobs might be going offshore, but there are more of the elite jobs to go around than there were pre-offshoring. As we saw in the niche job markets, in this tier of Java development work, the competition would shift from price to ability.

The tried-and-true, follow-the-jobs strategy will put you squarely in price competition with offshore developers, because your skills will fit into the offshore-friendly balanced markets. To compete in the mainstream technology market, you’ll have to compete at a higher tier. 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.

Act on It!

  1. Research current technical skill demand. Use job posting and career websites to find out which skills are in high demand and in low demand. Find the websites of some offshore outsourcing companies (or talk to employees of those companies if you work with them). Compare the skills available via these companies with the high-demand list you compiled. Make note of which skills appear to be in high demand domestically with little penetration offshore. Do a similar comparison between leading-edge technologies and the skills available via offshore outsourcing firms. Keep your eyes on both sets of technical skills that are underserved by the off-shore companies. How long does it take for them to fill the holes (if ever)? This time gap is the window during which a market imbalance exists.

3 coding don’t cut it anymore

a software person should understand a business domain not only well enough to develop software for it but also to become one of its authorities.

You should think of your business domain experience as an important part of your repertoire. If you’re a musician, when you add something to your repertoire, it doesn’t just mean you’ve played the song once. It means you truly know the song. You should apply the same theory to your business domain experience. For example, having worked on a project in the health insurance industry doesn’t guarantee that you understand the difference between an HIPAA 835 and an HIPAA 837 EDI transaction. It’s this kind of knowledge that differentiates two otherwise equivalent software developers in the right situation.

You might be “just a programmer,” but being able to speak to your business clients in the language of their business domain is a critical skill.

In light of the importance that you should place on selecting a business domain when rounding out your portfolio, the company and industry you choose to work for becomes a significant investment on your part. If you haven’t yet given real, intentional thought to which business domains you should be investing in, now is the time. Each passing day is a missed opportunity. Like leaving your savings in a low-yield savings account when higher interest rates are to be had, leaving your development on the business front in stasis is a bad investment choice.

Act on It!

  1. Schedule lunch with a businessperson. Talk to them about how they do their job. As you talk to them, ask yourself what you would have to change or learn if you aspired to have their job. Ask about the specifics of their daily work. Talk to them about how technology helps them (or slows them down) on the job. Think about your work from their perspective.

Do this regularly.

  1. Pick up a trade magazine for your company’s industry. You probably don’t even have to buy one. Most companies have back issues of trade rags lying around somewhere. Start trying to work your way through a magazine. You may not understand everything you read, but be persistent. Make lists of questions you can ask your management or business clients. Even if your questions seem stupid to you, your business clients will appreciate that you are trying to learn. Look for industry websites that you can monitor on a regular basis. In both the websites and the magazines, pay special attention to what the big news items and the feature articles are about. What is your industry struggling with? What’s the hot new issue right now? Whatever it is, bring it up with your business clients. Ask them to explain it and to give you their opinions. Think about how these current trends affect your company, your division, your team, and eventually your work.

4 Be the worst

Being the worst guy in the band means always playing with people who are better than you.

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.

Act on It!

  1. Find a “be the worst” situation for yourself. You may not have the luxury of immediately switching teams or companies just because you want to work with better people. Instead, find a volunteer project on which you can work with other developers who will make you better via osmosis. Check for developer group meetings in your city, and attend those meetings. Developers are often looking for spare-time projects on which to practice new techniques and hone their skills.

If you don’t have an active developer community nearby, use the Internet. Pick an open source project that you admire and whose developers appear to be at that “next level” you’re looking to reach. Go through the project’s to-do list or mailing list archives, pick a feature or a major bug fix, and code away! Emulate the style of the project’s surrounding code. Turn it into a game. Make your design and code so indistinguishable from the rest of the project that even the original developers eventually won’t remember who wrote it. Then, when you’re satisfied with your work, submit it as a patch. If it’s good, it will be accepted into the project. Start over, and do it again. If you’ve made decisions that the project’s developers disagree with, either incorporate their feedback and resubmit or take note of the changes they make. On your next patch, try to get it in with less rework. Eventually, you’ll find yourself to be a trusted member of the project team. You’ll be amazed at what you can learn from a remote set of senior developers, even if you never get a chance to hear their voices.

5 Invest in Your Intelligence

we were more likely to extend offers to candidates with diverse (and even unorthodox) experience than to those whose experiences were homogenous. My explanation is that either good people seek out diversity, because they love to learn new things, or being forced into alien experiences and environments created more mature, well-rounded software developers.

Act on It!

  1. Learn a new programming language. But, don’t go from Java to C# or from C to C++. Learn a new language that makes you think in a new way. If you’re a Java or C# programmer, try learning a language like Smalltalk or Ruby that doesn’t employ strong, static typing. Or, if you’ve been doing object-oriented programming for a long time, try a functional language like Haskell or Scheme. You don’t have to become an expert. Work through enough code that you truly feel the difference in the new programming environment. If it doesn’t feel strange enough, either you’ve picked the wrong language or you’re applying your old way of thinking to the new language. 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

6 Don’t Listen to Your Parents

your parents are going to give you fear-driven advice. Fear-driven advice is geared toward not losing. Thinking about not losing is not the way to win! Winners take risks. They think about where they want to go–not where the rest of the pack is. Fear-driven career planning is more likely to land you in a cubicle farm for the rest of your life than on the path to greatness. Sure, it’s safe, but it’s no fun.

And without fun, there’s unlikely to be any passion in a software job.

The more domains you’ve seen and the more technical architectures you’ve slogged through, the more prepared you are to make the right decisions on tougher projects.

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.

Act on It!

  1. What are your biggest career fears? Think about the last few career choices you made. They don’t have to be big decisions (after all, if you’re making fear-driven choices, your decisions likely aren’t big anyway). They could be whether you took on special assignments or whether you applied for a job change or promotion. Make a list of these choices, and, for each one, force yourself to make an honest assessment: how much was your decision driven by fear? What would you have done if fear had not been a factor? If the decision was indeed fear-driven, how can you reverse it or find a similar opportunity in which to make the less fear-driven choice?

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. If you’re afraid that your once-crowded development office will become home to an onshore skeleton crew, it would serve you well to realize that when the team has only a few slots, a “just-a-tester” or “just-a-coder” is not going to be in demand. Better, if you just want to stand out and be remarkable, wrapping your head around The Big Picture is where it’s at.

Master one, and get good at the other. Your skills should transcend technology platform.

Act on It!

  1. On a piece of paper or a whiteboard, list the dimensions on which you may or may not be generalizing your knowledge and abilities. For each dimension, write your specialty. For example, if Platform and Operating System is one of your dimensions, you might write Windows/.NET next to it. Now, to the right of your specialty, write one or more topics you should put into your “To Learn” list. Continuing with the same example, you might write Linux and Java (or even Ruby or Perl).

As soon as possible (some time this week at the latest!), find thirty minutes of time to start addressing at least one of the “To Learn” items on your list. Don’t just read about it. If possible, get some hands-on experience. If it’s web technology, then download a web server package and set it up yourself. If it’s a business topic, find one of your customers at work and ask them to go out for lunch for a chat.

8 be a specialist

Act on It!

  1. Do you use a programming language that compiles and runs on a virtual machine? If so, take some time to learn about the internals of how your VM works. For Java, .NET, and Smalltalk, many books and websites are devoted to the topic. It’s easier to learn about than you think.

Whether your language relies on a VM or not, take some time to study just what happens when you compile a source file. How does the code you type go from being text that you can read to instructions that a computer can execute? What would it mean to write your own compiler?

When you import or use external libraries, where do they come from? What does it actually mean to import an external library? How does your compiler, operating system, or virtual machine link multiple pieces of code together to form a coherent system?

Learning these facts will take you several steps closer to being an expert specialist in your technology of choice.

  1. Find an opportunity–at work or outside–to teach a class on some aspect of a technology that you would like to develop some depth in. As you’ll see in Be a Mentor, teaching is one of the best ways to learn.

9 Don’t Put All Your Eggs in Someone Else’s Basket

This guy wanted to build his career around a specific technology created by a specific company of which he was not an employee. What if the company goes out of business? What if it let its now-sexy technology become obsolete? Why would you want to trust a technology company with your career?

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. Even if you can’t or don’t want to make the case for using the open source solution in your workplace, use the open source option as the platform from which you can take a deep dive into a technology. For example, you may want to become an expert in how J2EE application servers work. Instead of focusing your efforts on the details of how to configure and deploy a commercial application server (after all, anybody can figure out how to tweak settings in a config file, right?), download the open source JBoss or Geronimo servers, and set aside time for yourself to not only learn how to operate the servers but to study their internals.

Act on It!

  1. Try a small project, twice. Try it once in your home base technology and then once, as idiomatically as possible, in a competing technology.

10 love it or leave it

Act on It!

Go find a job you’re actually passionate about.

Starting next Monday, keep two weeks of a simple log. Every workday when you wake up, rate your level of excitement on a scale from 1 to 10–1 means you would rather come down with an actual sickness than go to work, and 10 means you could hardly stay in bed because you were consumed by the idea of getting the next thing done.

After two weeks of keeping this log, review the results. Were there spikes? Were there trends? Was it all low or all high? What would your average grade be if this were a school test?

For the next two weeks, every morning plan how you’re going to make tomorrow a 10. Plan what you’re going to do today to make tomorrow one of those workdays you can’t wait to start. Each day, log yesterday’s excitement level. If after two weeks things are looking sad, it might be time to consider a major change.

Part II Investing in Your Product

11 learn to fish

Act on It!

  1. How and why?–Either as you sit here reading or the next time you’re at work, think about the facets of your job that you may not fully understand. You can ask yourself two extremely useful questions about any given area to drill down into the murky layers: How does it work? and Why does this (have to) happen?

You may not even be able to answer the questions, but the very act of asking them will put you into a new frame of mind and will generate a higher level of awareness about your work environment. How does the IIS server end up passing requests to my ASP.NET pages? Why do I have to generate these interfaces and deployment descriptors for my EJB applications? How does my compiler deal with dynamic vs. static linking? Why do we calculate tax differently if a shopper lives in Montana?

Of course, the answer to any of these questions will lead to another potential opportunity to ask the question again. When you can’t go any further down the how and why tree, you’ve probably gone far enough.

  1. Tip time–Pick one of the most critical but neglected tools in your toolbox to focus on. Perhaps it’s your version control system, perhaps a library that you use extensively but you’ve looked into only superficially, or maybe the editor you use when programming. When you’ve picked the tool, allot yourself a small period of time each day to learn one new thing about the tool that will make you more productive or put you in better control over your development environment. You may, for example, choose to master the GNU Bourne Again Shell (bash). During one of those times when your mind starts to wander from the task at hand, instead of loading up Slashdot, you could search the Internet for bash tips. Within a minute or two, you should find something useful that you didn’t know about how to use the shell. Of course, now that you have a new trick, you can dive into its guts with a series of Hows and Whys.

12 learn how business really work

Act on It!

Go get a book on basic business, and work through it. A trick for finding a good overview book is to look for books about getting a master’s of business administration (MBA) degree. One such book that I found particularly useful (and pleasantly short) is The Ten-Day MBA. You can actually get through it in ten days. That’s not a very big investment.

Ask someone to walk you through the financials of your company or division and explain them to you (if this is information your company doesn’t mind sharing with its employees).

Explain them back.

Find out why the bottom line is called the bottom line.

13 find a mentor

Act on It!

  1. Mentoring yourself–We’d all ideally have someone to actively mentor us, but the reality is that we won’t always be able to find someone in the same location that we can place in this role. Here’s a way to proxy-mentor yourself.

    Think of the person in your field whom you admire most. Most of us have a short list already formulated from some stage in our careers. It may be someone we’ve worked with, or it may be someone whose work we admire. List the ten most important attributes of this role model. Choose the attributes that are the reason why you have chosen this person to be your role model. These attributes might be specific areas of skill, such as technology breadth, or the depth of their knowledge in some particular domain. Or, they might be more personal traits like the ability to make team members comfortable or that they are an engaging speaker.

Now, rank those qualities in order of importance, with 1 being the least important and 10 being the most important. You have now created and distilled a list of attributes that you find admirable and important. These are the ways in which you should strive to emulate your chosen role model. But, how do you choose which to focus on first?

Add a column to the list, and for each item on the list, imagine how your role model would rate you on a scale of 1 to 10 (10 being the best). Try to really put yourself into the mind of your role model and to observe yourself as if a third person.

When you have the attributes, ranking, and your own ratings, in a final column subtract your rating in each row from the importance level you gave it in the preceding column. If you ranked something as 10, the most important attribute of your role model, and your rating was 3, that gives you a final priority score of 7. Having filled this column in completely, sorting in descending order will you give a prioritized top ten list of areas in which you need to improve. Start with the top two or three items, and put together a concrete list of tasks you can start doing now to improve yourself.

14 be a mentor

If you want to really learn something, try teaching it to someone else. There’s no better way to crystallize your understanding of something than to force yourself to express it to someone else so that they can understand it. The simple act of speaking is a known elixir for treating an unclear mind.

15 practice, practice, practice

Most modern programming languages offer rich and powerful libraries in all of these areas, but software developers tend to learn a small subset, with which they can less efficiently write the same code they could have written if they had mastered the full set of tools available to them.

Act on It!

  1. TopCoder–TopCoder.com is a long-standing programming competition site. You can register for an account and compete online for prizes. Even if you’re not interested in competing with others, TopCoder offers a practice room with a large collection of practice problems that you can use as excellent fodder for your practice sessions. Go sign up, and give it a try.

  2. Code Kata–Dave Thomas, one of the Pragmatic Programmers (our beloved publisher), took the idea of coding practice and made something…well, pragmatic out of it. He created a series of what he calls Code Kata, which are small, thought-provoking exercises that programmers can do in the language of their choice. Each kata emphasizes a specific technique or thought process, providing a concrete flexing of one’s mental muscles.

    At the time of this printing, Dave has created twenty-one such kata and has made them available for free on his [weblog] (http://codekata.pragprog.com/). On the weblog, you’ll also find links to a mailing list and to others’ solutions to the exercises along with discussion about how the problems were solved.

    Your challenge: work through all twenty-one kata. Keep a diary (perhaps a weblog?) of your experiences with the kata. When you’ve finished working through all twenty-one exercises, write your own kata, and share it with others.

16 The Way That You Do It

Act on It!

  1. Pick a software development methodology, and pick up a book, start reading websites, and join a mailing list. Look at the methodology with a critical eye. What do you think would be its strong and weak points? What would be the barriers to implementing it where you work? Next, do the same with another. Contrast their strengths and weaknesses. How could you combine their approaches?

17 On the Shoulders of Giants

Act on It!

Pick a project, and read it like a book. Make notes. Outline the good and the bad. Write a critique, and publish it. Find at least one trick or pattern that you can use from it. Find at least one bad thing that you observed that you will add to your “What not to do” checklist when you’re developing software.

Find a group of like-minded people, and meet once a month. Each session have someone nominate some code to study–2 lines to 200 lines. Break it down. Discuss what’s behind it. Think of the decisions that went into it. Ponder the code that isn’t there.

18 Automate yourself into a job

Act on It!

  1. 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.

    Think of a way to raise the level of abstraction of what you are generating.

  2. 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.

Part 3

Getting things done feels good. It’s often hard for people to get into a rhythm. But once you felt a fire under you, you won’t want to stop

19 Right Now

Act on It!

  1. Look at your proverbial plate. Examine the tasks that have been sitting on it for a long time, the projects that are starting to grow mold, or the ones you’ve been just a little bit stuck on—perhaps in bureaucracy, perhaps in analysis paralysis.

    Find one that you could just do in between the cracks of your normal work, when you would normally be browsing the Web, checking your e-mail, or taking a long lunch. Turn a multimonth project into a less-than-one-week task

20 Mind Reader

Act on It!

  1. An early reviewer for this book, Karl Brophey suggests that 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. Be creative. Try to see the system from their points of view. After you have a list of the not-so-obvious features that might come up, think about how you could most effectively implement each feature. Think about edge cases that your users might not immediately have in mind.

    As you get into the project or enhancement requests, track your hit rate. How many of your guesses turned out to be features you were actually asked to implement? When your guessed features did come up, were you able to use the ideas you came up with in your brainstorming session?

21 Daily hit

Act on It!

  1. Block off half an hour on your calendar, and sit down with a pencil and paper in a quiet place where you won’t be interrupted. Think about the little nitpicky problems your team puts up with on a daily basis. Write them down. What are the annoying tasks that waste a few minutes of the team’s time each day but nobody has had the time or energy to do anything about?

    Where in your current project are you doing something manually that could be automated? Write it down. How about your build or deployment process? Anything you could clean up? How might you reduce failures in your build? Write all of these ideas down.

    Give yourself a solid twenty minutes of this. Write down all of your ideas—good or bad. Don’t allow yourself to quit until the twenty minutes are up. After you’ve made your list, on a new sheet of paper write out your five favorite (most annoying) items. Next week, on Monday, take the first item from the list, and do something about it. On Tuesday, take the second item, Wednesday the third, and so on

22 Remember Who You Work For

Act on it

  1. Schedule a meeting with your manager. The agenda is for you to understand your manager’s goals for the team over the coming month, quarter, and year. Ask how you can make a difference. After the meeting, examine how your daily work aligns to the goals of your team. Let them be a filter for everything you do. Prioritize your work based on these goals

24 How Good a Job Can I Do Today?

What if you tried to do the boring stuff perfectly? Say, for example, you hate unit testing. You love programming, but you get annoyed with having to write automated test code. What if you strove to make your tests perfect? How might that change your behavior? What does perfect even mean with regard to unit testing? It probably has something to do with test coverage. Perfect test coverage would mean that you had tested 100 percent of the functionality of your real code. Perfect unit tests are also clean and maintainable and don’t depend on a lot of external factors that might be hard to replicate on another computer. They should be runnable directly after a fresh version control checkout on a new machine. And, of course, all of the tests should pass at 100 percent.

Act on It!

  1. Make it visible–Turn those boring tasks into a competition with your co-workers. See who can do them better. Don’t like writing unit tests? Print out the number of test assertions for the code you checked in every day, and hang it on your cubicle walls. Keep a scoreboard for the whole team. Compete for bragging rights (or even prizes). At the end of a project, arrange for the winner to have his or her grunt work done by the rest of the team for a whole week.

26 A Pebble in a Bucket of Water

You become arrogant, and with arrogance you develop blind spots. The less replaceable you think you are, the more replaceable you are (and the less desirable you become).

Feeling irreplaceable is a bad sign, especially as a software developer. If you can’t be replaced, it probably means you perform tasks in such a way that others can’t also do them. Although we’d all like to claim some kind of special genius, few software developers are so peerless that they in fact should be irreplaceable.

28 Eight-Hour Burn

We treat scarce resources as being more valuable, and we make more efficient use of them.

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.

29 Learn How to Fail

Raise the issue as early as you know about it.

Take the blame

Offer a solution

Ask for help

31 don’t panic

What panicking really gave me was an inability to perform at my best at the times I really needed to be performing at my best.

We panic because we lose perspective. When something has going wrong, it’s hard not to focus all attention on the problem. To some extent, that’s a good way to solve problems. Unfortunately, it also makes the problem, no matter how small, seem more important than it is. And with the problem inflated and stress levels running high, our brains turn themselves off.

I analyze the situation from the third-person perspective, as if I’m helping that frustrated family member with their word processing disaster. Seemingly hard problems are suddenly easier. Seemingly bad situations are suddenly not so bad. And, I often find that the solution simple and staring me in the face in the same way that an error dialog often tells you exactly what to do next.

Act on It!

  1. Keep a panic journal.The key to catching panic before it happens is to develop a heightened real-time awareness of your perception and emotions as they happen. I’ve had my best luck learning to do this by analyzing my reactions to situations after the fact. I’m not smart enough to naturally keep a background thread running and analyzing my thoughts as they happen, but I’ve discovered that if I practice the analysis “offline,” I get better and better at doing the analysis in real time.

    Saying you’re going to do a better job of analyzing your reactions and actually doing it are two different things. Keeping a journal will help add structure to the process. Each day at a specific time (use a calendar with a reminder!), open up a text file and record any situation that caused you to panic, even if only a little bit. Once a week, look back on the past week’s list and take stock of the lasting impact of each panic-inducing situation. Was the situation panic-worthy? What would have been the most productive reaction to the situation? What would the hero in a dramatized movie about your life have done instead of panicking?

    After some practice, you’ll find the analysis to start happening while the panic sets in. As you rationally explore the reasons for your panic in real time, you’ll find that the panic itself takes a backseat and eventually dissipates.

32 say it, do it, show it

The easiest way to never get anything done is to never commit to anything. If you don’t have a deadline, you don’t have any pressure or much incentive to finish something. This is especially true when the something that needs to get done isn’t 100 percent exciting.

Consistently tracing tasks on a plan will create the deserved impression that no important work is getting lost in the mix.

Part 4

33 Perceptions, Perschmeptions

The same goes for your work. If you kick ass and no one is there to see, did you really kick ass? Who cares? No one.

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.

35 Me Rite Reel Nice

Act on It!

Start keeping a development diary. Write a little in it each day, explaining what you’ve been working on, justifying your design decisions, and vetting tough technical or professional decisions. Even though you are the primary (or only–it’s up to you) audience, pay attention to the quality of your writing and to your ability to clearly express yourself. Occasionally reread old entries, and critique them. Adjust your new entries based on what you liked and disliked about the old ones. Not only will your writing improve, but you can also use this diary as a way to strengthen your understanding of the decisions you make and as a place to refer to when you need to understand how or why you did something previously.

36 Being Present

Remember, you need to make it personal, and to do that you have to remember the natural human tendency to want to work with other humans–not voicemail, e-mail, or instant messaging but actual people.

37 Suit Speak

Act on It!

Make a list of your recent accomplishments. Write the business benefit for each. If there are accomplishments on the list that you can’t write a business benefit for, ask a manager or trusted acquaintance how they would frame the benefit.

Make your elevator speech, and memorize it.

38 Change the World

Act on It!

  1. Catalog the crusades you’ve personally witnessed in the workplace. Think of the people you’ve worked with who have behaved as if on a mission. Think of the most driven and effective people in the places where you’ve worked. What were their missions?

    Can you think of any such missions that were inappropriate? Where is the line between drive and zealotry? Have you seen people cross it?

39 Let Your Voice Be Heard

Set your sights higher. Don’t think of yourself as a programmer at a specific company–after all, it’s not likely that you’ll be at the same place forever–but as a participating member of an industry. You are a craftsperson or an artist.

The more places you are attached to the network, the better your chances of connecting with that perfect job or career break. Limiting yourself to the company you work for places serious limits on the number of connections you can form.

the most critical tip of all is to start sooner than you think you’re ready. Most people undersell themselves. You have something to teach. You will never feel 100 percent ready, so you might as well start now.

Act on It!

  1. If you don’t already have a weblog, create one right now. Go to one of the many free weblog hosting sites, and set one up.

    Now create a new text file on your computer. In it, create a list of possible weblog topics. These are future articles you’re going to write. Don’t limit yourself to epic ideas. Shoot for ideas you can write about in ten to twenty minutes. Stop when the list is ten items long (unless you’re inspired–keep going).

    Save the file but leave it open. If you reboot, reopen the file. You have three weeks. Each day, choose an item from the list and write an article. Don’t think too hard about it. Just write it and publish it. In the articles, link to other weblogs with related articles. As you read the list to pick each day’s topic, feel free to add ideas to it.

    After the three weeks are over, pick your two favorite articles and submit them to user-moderated news sites such as Digg and Reddit. If you still have ideas on your list, keep writing.

40 Build Your Brand

Guard your brand with all your might. Protect it from yourself. It’s all you’ve got.

Act on It!

  1. Google yourself–Search Google for your full name in quotes. Look through the first four pages of results (are there actually four pages of results?). What could someone surmise about you following only the links from the first four pages of Google results? Are you even represented in the first four pages of search results for your name? Is the picture that these first four pages paints a picture that you appreciate?

Do the same search again, but this time pay special attention to forum and mailing list conversations. Are you a jerk?

41 Release Your Code

Act on It!

  1. Stuart Halloway does a workshop at conferences he calls “Refactotum.” If you get a chance to participate, I highly recommend it, but the gist is as follows: 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.

    The beautiful thing about this is it’s measurable and can be done quickly. There’s no excuse not to try it.

42 Remarkability

To be remarkable means that something is worthy of attention. You will not become a remarkable software developer by simply being better than all the other software developers you know. Being incrementally better than someone else isn’t striking enough to result in the viral spread of your reputation. If someone were to ask, you might have a glowing report card, but remarkability means that people talk about you before they are asked.

To be remarkable, you have to be significantly different from those around you.

You might be the smartest or the fastest, but just being isn’t good enough. You have to be doing.

Act on It!

  1. Start small, but try to do something remarkable on your current project or job. One way to experiment is to shoot for remarkable productivity. Project schedules often have a lot of padding. Find something that everyone thinks is going to take a week and do it in a day. Work extra hours for it if you need to do so. You don’t have to make a habit of working extra hours, but this is an experiment. 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.

43 Making the Hang

Speaking for myself (and extrapolating from there), the most serious barrier between us mortals and the people we admire is our own fear. Associating with smart, well-connected people who can teach you things or help find you work is possibly the best way to improve yourself, but a lot of us are afraid to try.

Act on It!

Pick one of your favorite pieces of software and e-mail its creator. Start by thanking him or her for the software. Then make a suggestion, ask a question, or make some other attempt at establishing a human connection with them. Solicit a response of some sort. If the software is free or open source, offer to help in some way.

Think of someone local to you whom you admire or would like to learn from. Look for a situation where you can see the person (a users’ group meeting or speech are good possibilities), and go out of your way to start a conversation, even if it makes you uncomfortable–especially if it makes you uncomfortable.

Part 5

44 Already Obsolete

Act on It!

  1. Carve out weekly time to investigate the bleeding edge. Make room for at least two hours each week in order to research new technologies and to start to develop skills in them. Do hands-on work with these new technologies. Build simple applications. 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.

47 make yourself a map

Although it is definitely ok to learn diverse skills–it expands your thinking–it’s also a good idea to think about the story your skillset tells

Action on it

  1. 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. Notice where you made incremental improvements and where you seemed to make big leaps. Notice the average length of time it took to make a major advancement. Use this map as input as you look forward in your career. You can set more realistic goals for yourself if you have a clear image of your historical progress. Once you’ve created this historical map, keep it updated. It’s a great way to reflect on your progress as you move toward your newly defined goals.

48 watch the market

You have to keep your eyes and ears open. Watch the technology news, both the business side and the pure technical side. Watch the alpha geeks. Slog geeks are those supernerds who are always on the bloodiest tip of the bleeding edge, at least in their hobby activities. 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

Act on it

Spend the next year trying to become one of the alpha geeks. Or at least make the hang with one

52 Better Than Yesterday

Act on It!

  1. 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.

53 Go Independent

In this way, 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 get into the right groove in the same way that a bakery is a bad place to go to try to work off your love handles. The solution? Go independent!

Consider it a personal development project, and put yourself in the market in your spare time. Set a goal to land a contract at a certain rate and finish it with a happy customer. Work on it at night or on the weekends (but please don’t work on it in your cubicle at your day job!). You’ll learn a lot without losing your safety net. Worst case, you’ll overwork yourself for a few weeks, fail at one project, and be sent back to your comfortable cubicle with a new sense of appreciate for your job. The best case is that you are wildly successful, love the work, and set yourself on a new path toward career satisfaction and financial reward.

If you currently work for a big company, consider joining a small one. If you work for an established company, try a startup. In a small startup, you can get the best of both worlds: a full-time job with a salary and the challenge of being pitted directly against the unfiltered problems of your business.

HaveFun