UX & Product Designer

Thoughts

I write about UX design, programming, and journalism—sometimes all at once.

Why Learning to Code is So Hard

Coding is the new literacy. It's easy. Everyone's learning it. Everyone should learn it.

We've heard those refrains before. The truth is, programming is difficult.

Not the act of it itself, at least for quick and dirty front-end effects. In fact, I found programming to be quite logical and straightforward. What made me want to pull my hair out was everything before and after writing code—like how to set up my environment, where to start a project, and which tools, languages, and frameworks I should devote my time to learning. I spent—and still spend—hours trying to figure out how to do simple stuff. Many other beginners feel similarly.

In my last post, I mentioned that I’m starting this blog in part because existing online materials cater to either total beginners or accomplished programmers. Here are four reasons why learning to code is difficult—and none of them involve the actual act of writing.

1.  Programming tutorials are not made for beginners.

Whenever I try a new language or framework, I look for a tutorial that walks me through the process of actually building something. I’ll follow along just fine until I hit some programming jargon, like a warning not to write spaghetti code or a reminder to separate my business logic from application logic. All too often, I’ll spend way too much time studying up on theory and get sidetracked from my original task. These concepts, perhaps obvious to a seasoned programmer, are brick walls for beginners.

2.  Programming tutorials that are made for beginners abstract too much.

Recently, I came across this line came from an AngularJS tutorial: “Obviously this is a really contrived example, and you would never actually write this Angular code. But you get the gist of it.”

Do I?

Tutorials that provide a simplified version, without at least explaining how to extend it, can distort the mental model of what a certain framework or tool can do. I understand that it is difficult to strike a balance between providing a novice with a comprehensive understanding without overwhelming them. But it can, and should, be done without too many layers of abstraction.

3.  It is difficult to know what you don’t know.

Both beginning and experienced programmers know how to get answers (thanks, Google). What separates the two, I would argue, is that experienced programmers know when to get answers.

I struggle to pinpoint gaps in my knowledge base. For that reason, I look for tutorials that provide a birdseye view of how a given concept fits within its larger domain.

4. It’s intimidating to know where to start.

One question I often get is, which language should I learn? The answer is very frustrating—it depends on what you want to do. With so many frameworks, languages, and possible paths you can take, there really is no right or wrong answer to how to begin your programming journey. I do, however, have some suggestions on sound starting points.
 

A Curated List of Coding Resources to Start You Off

Code Crew: Better if you can attend in person, but the resources are great too!

Code School: Similar to Codecademy, but more thorough and refined.

Harvard's CS50 Online Course: Best way to really understand the theory and heart of computer science, if you’re into that like I am.

Eloquent Javascript: The nuts and bolts of JavaScript.

NICAR Listserv: Best resource for journalists if you have a question about a specific question asking how to do a specific project.

This blog: I’ll continue to post tutorials, guides, and resources to keep you going on your coding journey.

 

The Tools I Use

These basics will help get you up and running as a web developer.

Sublime Text: My text editor of choice.

GitHub: To track versions of my projects.

Google (usually points to Stack Overflow): To search and find answers.

Mozilla Developer Network: If you know exactly what you are searching for.

CodePen: To create and see immediate results (and get ideas from the community).