If you think this looks impossibly complex, you’re right! Unrealistic depictions of coding like this have conditioned you to think it’s much harder than it actually is.

How to Learn to Code and Stick with It

Coding will soon be seen as a basic life skill just like reading and writing. Don’t be fooled into thinking it will always be restricted to an elite few — that was once the case with literacy, too. The modern hacker elite is doomed to disappear just like the scribe class of ancient Egypt because, sooner or later, the world is bound to catch on to their big secret:

Practically anyone can learn to code if they try.

Nothing to do with talent

If you think it takes some special innate quality like “talent” or “aptitude” in order to write software, you belong to one of two camps:

  1. You’re a coder and you pride yourself on that talent which you believe separates you from the masses. You may fear that someone advocating to democratize software creation is ultimately trying to oust you from your position of privilege. (You just may be right about that last part.)
  2. As much as you appreciate software, you’re satisfied with staying a passive participant in it. You trust that godly race of hacker geniuses to deliver you the next generation of life-changing apps while you just sit and wait. It may suck to admit that you can’t do anything to contribute, but it’s better than admitting you actually could do something but choose not to.

I used to be of the second camp. Then, after succeeding to teach myself to code on my second try, I realized it was never about me or my innate technical aptitude. It was all about finding the right resources and motivation.


Learning resources are abundant these days. Now that coding skills are in such high demand, there are loads of tutorials and boot camps and even free long-term learning roadmaps that lay out step by step what you need to do in order to build those skills.


But most people just sign up for those things and forget about them after a week or two. I think what those folks are missing, and what I was missing the first time around, was a guide to the shifts in perspective the non-coder needs to make in order to become able to solve problems with software. This is my attempt to write such a guide.

I’ve boiled it down to three things.

In summary:

  1. Software is not magic (even though it feels like it)
    This is obvious when you think about it, but being on the end-user’s side of things makes it easy to forget. You’ll understand this on a deeper level when you come to terms with the fact that developer and end-user actually exist on a single continuum, and coding is less cryptography than it is communication.
  2. It’s only boring if you’re doing it wrong
    The field of software development has evolved to encompass countless sub-fields. Each features its own particular kinds of tools and people. If you’re bored and stressed in your work, you don’t have to keep doing it that way! There’s practically always the option to move on to different tools and work environments that will make you happier and more productive.
  3. Code is not the goal
    When it comes to software development, the ends, for the most part, justify the means. Your job is to solve problems with speed and precision, not to geek out. Computers are ubiquitous today because of how much they help to automate away tedium in everyday life. Your success ultimately hinges not on your knowledge of programming languages and algorithms, but on the impact your software has on real-life users.
Computers aren’t really all that complicated. Image credit: xkcd (CC BY-NC 2.5)

1. Software is not magic (even though it feels like it)

Every website you’ve ever visited and every app you’ve ever downloaded was made by people. This is obvious when you think about it, but being on the end-user’s side makes it easy to forget. Features like autocomplete, geolocation, and single sign-on seem to work like magic, without you having to think about anything! Indeed, that’s what makes them so great.

The first step to becoming a coder, then, before even writing your first program, is to remember that each and every one of those automagical software features people usually take for granted was implemented by real people, just like you. Great software is not magic — it’s the result of lots of hard work undertaken by teams of developers so the user doesn’t have to.

You’re already halfway there

Yet the end-user is not entirely excluded from that work! In essence, the developer’s job is to determine how the computer responds to user input. When you think about it, isn’t that exactly what you’re doing anytime you tweak the settings on your phone, or change the font in Word? You’re telling the computer how to respond to your input, just on a smaller scale. In a sense, we software developers are just glorified settings-tweakers.

Because of the interactive nature of software, the relationship between software developer and end-user is more than a customer-vendor relationship. It’s a relationship between collaborators, both sharing the project of getting something out of the computer. In the end, the distinction between developer and user is fuzzy at best.

This is good news because it means you don’t need to undergo any radical transformation in order to become a developer. You know it’s within your reach because developer and user are one and the same, or at least they’re on one continuum.

You’re not all on your own

Developer and user are one and the same in another, more literal sense. We always use existing software to write new software, whether it’s a code library, a text editor, or even an operating system. No one talks directly to the computer in pure 1’s and 0’s — that only happens in movies to emphasize the fictional hacker-genius’ otherworldly powers. In the real world, you’re always building on top of someone else’s code.

The human element in software is crucial. Image credit: xkcd (CC BY-NC 2.5)

Since you’ll always be building on top of other people’s code, you’ll need to be able to read and understand a lot more code than you will ever produce. As you gain experience writing software, you’ll come to value clarity and organization in code as much as you would in an essay. All too often, you’ll come across code that’s cryptic and opaque, with no accompanying documentation. But you’ll learn to recognize those instances more as a sign of the author’s shortcomings than of your own. Lots of the time, the code you write can look very much like English.

It turns out that quality code is not just code that gets through to the machine — it has to get through to other people, too. Despite media depictions, the job is more about communication than cryptography. Doing it well doesn’t just mean writing code that leverages the most mind-boggling advanced techniques — it means writing code that’s easy to understand, especially for beginners.

Mastering the magic

The beauty of it is that even when you begin that transition from end-user to coder and the inner-workings of software become more transparent, that feeling of magic doesn’t go away. The basic purpose of this machine you’re working on is to automate away boring stuff and get you quick, accurate results. The only difference is as a software developer, you can just bend it to your will a whole lot better.

Next: It’s only boring if you’re doing it wrong