Amateurs and Professionals


Every so often I get the craving to tweak my workflow: a more comfortable shell here, a few Vim shortcuts there, and a sprinkle of aesthetics to tie it all together. It's a fun diversion and makes my daily work a little faster.

The instinctual fantasy is that the right tools and the right shortcuts will finally rapture me to the world of Rockstardom. But the moment passes when I remember that one of the best engineers I know uses two-finger typing.

The author Steven Pressfield distinguishes between amateurs and professionals:

The sign of the amateur is overglorification of and preoccupation with the mystery.

The professional shuts up. She doesn’t talk about it. She does her work.

— Steven Pressfield, The War of Art

These terms are attitudes, not job descriptions. Even a senior Google engineer can be an amateur, and even a hobbyist can be a professional.

The amateur attitude is flash over substance. It's being a writer over doing the writing; hacks over principles; the fantasy of big results over the reality of daily process.

The professional attitude is the opposite: process, consistency, discipline, effort, and fundamentals. It's focusing your energy on what really matters.

Three examples:

  • Dan Luu has one of the plainest blogs I've ever seen, enough so that Hacker News inevitably kvetches about it. ("I would have tried to read this but the 1994 styling of the page made it impossible," e.g.). But his posts are so thorough and insightful that they become popular anyway. When substance is solid, substance wins.

  • I saw a nice comment online that I wish I could find again. The gist: Elon Musk is a notoriously bad presenter. But his companies are pushing the boundaries on monstrously hard technical problems. The technology is so captivating that his presentations are riveting despite him.

  • Sublime Text is a gorgeous editor. I don't think I've seen any text editor that looks and feels better. But it's also reliable, powerful, and stunningly fast. If it were uglier, it would still have customers. If it were unstable, I don't know anyone who would buy it.

What are the fundamentals of software engineering? What does the professional see that the amateur doesn't?

Here are some that come to mind:

  • Make something people want. The professional deeply engages with reality. She finds opportunities by talking to real people and diving into the details of real systems. She observes, iterates, and creates something valuable that people love.

  • Solve the hard problem. The professional solves the hard problems that others avoid. She has the domain knowledge to know what the hard problems are and the technical expertise to know what she can do about them.

  • Stay disciplined. The professional tames the waves of frustration, boredom, uncertainty, and self-doubt. She has the tenacity and focus to see her work through.

  • Work as a team. The professional knows she can't do everything alone. She plays to her strengths, communicates clearly and openly, and works well with others. She builds trust and a professional culture.

  • Move fast and learn fast. The professional knows which parts of a project are the most fraught and optimizes her workflow accordingly. She tests her assumptions early and cheaply, and she avoids chasing dead ends. And if something just won't work, she acknowledges it and moves on.

Sounds great. But how do we translate these high-level ideas into something concrete and actionable? I have some hunches, but it'll take more than one blog post to work them out.

I only write when I am inspired. Fortunately I am inspired every day at nine o’clock.

— William Faulkner, maybe

Jeff Dean and Sanjay Ghemawat are two of the most outstanding engineers at Google. Together, they've produced breakthrough projects like MapReduce, Bigtable, and TensorFlow. Google pays them lavishly and they're worth every penny.

How are they so effective?

For those who work inside Google, it's well worth it to look at Jeff & Sanjay's commit history and code review dashboard. They aren't actually all that much more productive in terms of code written than a decent SWE3 who knows his codebase.

The reason they have a reputation as rockstars is that they can apply this productivity to things that really matter[.]

nostrademons (via Hacker News)

Why is the professional attitude so rare? It's precisely because the professional attitude is about fundamentals.

Fundamentals apply widely and deeply. They are so global that they must become habit. They are so simple that they border on cliché. Working on them can feel boring, effortful, and even embarrassing.

Hacks and tricks apply narrowly and shallowly. They are so local that we can use them and forget them. They are complex and novel, so they easily grab our attention. And knowing a neat trick can make us feel special and superior.

[W]hat changed me from an amateur into a professional was getting a really firm grip on the fundamentals.

— Toshiro Kageyama 7-dan, Lessons in the Fundamentals of Go (Japanese title: Amateurs and Professionals)

Don't mistake me; I think tricks are great. Even world-class mathematicians have favorites that they use constantly. But they are world-class precisely because they have mastered their fundamentals.

How can we cultivate a professional attitude? I don't know. But if it helps, here's a tendency I've noticed in myself.

When I'm solving a problem I care deeply about, even the drudge work is energizing. Then the professional spirit kicks in: I'm greedy for anything that will help me attain my goal.

When I'm solving a problem I don't care about, even the novel parts are boring. Then the amateur spirit kicks in: a new language, a new framework, some twist to keep myself engaged.

Comes a day you're gonna have to decide whether it's about you or about the work.

— Cedric Daniels, The Wire

I hope you find something that inspires you to hold a professional attitude. Get the substance right and the rest takes care of itself.