1 min read

Learning Programming Isn’t That Hard, Deep Work Is Hard

I just finished Deep Work by Cal Newport. In it he argues that there are two types of work: deep work and shallow work. Shallow work is characterized by interruption. It’s checking e-mail, using Twitter, having frequent meetings. Deep work is characterized by long periods of uninterrupted concentration. After finishing the book I had a realization why so many people learning programming struggle – it’s actually a struggle to do deep work.

Ironically, the very thing that makes people think they will enjoy programming, the rush of interacting with a computer (click, alt-tab, refresh, type, send, bing bang boom), is very different than the reality of programming (stare, stare, think, scratch head, type, compile, fail, repeat). Students who come to programming expecting it to be a shallow work reach an impasse. They want there to be a rush and flow to programming when really programming often requires a speed of thought that is very different from the pace of computer interactions they’re used to (browsing, e-mailing, messaging). Programming requires patience, sitting at the edge of your mental abilities and slowly pushing forward. These skills are learnable, but they’re so different from what students are expecting to learn, or what they think they want to learn, that it makes it very difficult to make that shift. Programming is learnable by everyone, but trying to solve the wrong problem makes it a lot harder.

I’ve interacted with a lot of new programmers. In college I taught a supplement to introductory programming for many semesters, and after college I did some mentoring for Mobile Makers, a development boot camp. I’ve seen people pick up programming like they’d always known how to code, and I’ve seen others hit a wall that seemed impassable. That wall is deep work. People think they’re struggling with programming concepts, but they’re actually struggling with focused work. When I myself run into trouble programming, it’s most often because of an inability to get into a mindset for deep work.

People new to programming often ask me, “I’m worried I’m not good enough at math.” Don’t worry about math. Worry about your ability to work slowly, quietly, and patiently. Chances are decent the rest will take care of itself.