Introduction: Code is the best, code is the worst
Code is the best
Coding is an act of pure creation. It’s often exhilarating: you type a sequence of words into the void and, assuming you don’t mess up, entire worlds begin to exist. Software development is one of the few fields where you can create something of extraordinary value without expending any raw materials. In a way, coding more closely resembles the TV stereotype of witches and wizards than the TV stereotype of coders (or developers, or engineers, or whatever they call themselves—see my chapter “Choosing a job title” for more on that topic).
There are moments as a software engineer when you know exactly what you’re doing. You come into a project, see a problem you’ve solved before, and every component of the solution springs into your mind. Suddenly you are a being of unstoppable force; you are elemental. You are typing as fast as you can, everything is working perfectly, every piece is elegant. You hand off the finished product and take in the admiration of your peers. It’s a triumph.
There are other times where you come up against a challenge you don’t have the first idea how to solve. And this makes you happy too, because learning is fun. You start exploring, surfing Q&A sites, reading the 11th page of old forum threads, copying snippets, compiling and debugging code, and before you know it you’ve figured it out. You tuck the solution safely away in your mind for next time. You can’t wait to do it again.
In the right environment, code is the ultimate brain teaser. Every last scrap of intelligence, creativity, determination, quirkiness, playfulness, intuition—none of it goes to waste when you’re writing code. You get so close to your own potential that you feel like you could reach out and touch it. That’s not to say you’ll always be recognized for it, but it’s satisfying in and of itself.
Programming is a science, as we all know. But it’s also an art. Like the painter who imagines beautiful sun-dappled landscapes, or the musician who wakes up whistling a tune, many programmers find their imagination filling up with code. They daydream of apps and libraries. Their GitHub profiles are full of projects that never got finished, but only because they were so eager to start on something else. Not everyone is so obsessed—you certainly don’t need to be to have a successful career in code—but everybody is here for something, even if it’s just the salary and benefits. And whatever your reason is, there’s a place for you.
Code is the worst
Coding can be a real headache.
There’s a well-known cycle to fixing bugs. You examine the problem; you make a guess about what might be causing it; you update the code based on your theory; you test the new code; if the problem isn’t fixed, you start over. Sometimes this goes on for hours. Sometimes for days. Sometimes until it just doesn’t seem worth it anymore.
In the best of circumstances, you’ll be on a team of compassionate and attentive people. They’ll listen to you and make tactful suggestions. You’ll take their ideas back to your computer and ride a wave of genius all the way to your next task. Your boss will drop by your office afterward to tell you what a great job you did. You’ll go home at 4:30 and spend the evening relaxing at home.
You don’t always get to work in the best of circumstances. Someday you may find yourself struggling to concentrate in an open floor plan office, sharing a desk with eight other programmers, drowning in noise from phone calls and water-cooler conversations. The company will expect you to work 16-hour days if you’re not meeting their deadlines, which they never consulted you about in the first place. Your manager will think coding is black magic. Your teammates won’t seem to think you belong in tech, and some of them will have never learned how to hold a polite conversation. Some days will be a nightmare of egotistical managers, unreadable error messages, burnout and anxiety.
Sometimes you’ll wonder if you chose the wrong career.
Code is just a tool
The truth is, most of the time coding isn’t amazing. And most of the time it isn’t miserable. Code is a means to an end, and the ups and downs of your career will be more about people than about lines of code.
For now other people will decide what you build, who’s on your team, and whether you feel emotionally safe at the office. But you’ve still got a few responsibilities. To be a good teammate—to say things like “you belong here” and “it’s okay to make mistakes” and “you deserve a break.” To break stereotypes about programmers being insensitive and rude. To have the courage to quit if your boss doesn’t treat you or your teammates well.
Later on, you’ll be the one making decisions. Code will be the best on some days and the worst on others, and it’ll be because of you. You’ll set the tone for an entire team or department or company.
We’re trusting you to do the right thing.