Should you learn to code?

Should you learn to read and write?

There is a discussion on the boards revolving around the eternal question of whether “non-techie” startup founders will put their time to good use by learning to code.

Five years ago, there was still some room for discussion. These days, I believe discussing it is a waste of time:

Yes. Learn to code.

As simple as that. But perhaps it is not as obvious to you as it is to me. Worry not! I will explain, give examples and even recommend where to start.

Since this is very relevant to my interests, I will create shorter and shorter version of this essay as time passes, incorporating your feedback, hoping to eventually converge on a version that passes the message.


At the time, the skill of stone-sharpening was a superpower. Those who knew it could do much more than those who didn’t because they had sharp stones to help them with almost every important task – hunting, skinning, sewing, protecting against predators, building shelter… Stone-sharpening was like a superpower. It made you so much more productive it was indistinguishable from magic!

I imagine it took a while, but eventually we reached a state where everyone could sharpen stones. Children would learn it as part of basic education – together with all the other basic survival skills like hunting, distinguishing good fruit from poisonous fruit, and so on.

Probably the next “superpower-grade” skill was fire-kindling. Once again, it made you so much more productive at almost everything! Eventually, every child learned that too.

Mankind still discovers a new superpower once in a while. A skill that empowers its wielder so much that at first those who practice it are regarded as supermen and eventually we teach it to every kid when they’re still young and learn fast.

I’m pretty sure reading is the hardest mental task I ever performed. Shape recognition is horribly difficult and we became amazingly good at it. In the past it seemed so hard that only the most genius would attemp it. Eventually we realized how useful it is and taught more and more of the population, until today UNESCO claims that more than 89% of the world’s youth can read and write.

A distinction

Not all important human discoveries are what I call superpowers. For example, not everyone can forge swords, design assembly lines, manufacture combustion engines or build atomic bombs, even though all of these are skills that make a society that wields them a superpower relative to competing societies that don’t.

The distinction lies, conveniently, exactly on my argument: “Is this a skill worth teaching every member of society?”

Reading is taight to every member of society. The skill itself is often useful in everyday life. It is very hard and expensive to teach, but well worth it.

Engine manufacture isn’t. It is much more expensive to teach, and since it is only the product of the skill and not the skill itself that is useful in everyday life, we can make do with only training a few engineers to engineer for all of us.

We’d like to teach everyone advanced math, but not everyone is able to learn it (given our teaching resources).

Now that we have our background all set, lets talk about the new contender.

Is Programming like Reading or like Engineering?

Computer Programming is engineering. This is true in many senses, among them the sense we’re talking about: programming is an expensive skill to teach, not useful in everyday life, probably not teachable to everyone. Programming is a very high-value activity (look at the salaries programmers get!), but only when practiced by talented and experienced professionals.

So wait, you ask. You’re arguing against your big bold claim?

Let me explain. Programming a computer, as practiced professionally, is the art and science of engineering software to withstand tests of scale (make it so that with minor modifications it could run on one thousand times the amount of data planned for), time (make it so that with minor modifications it can run on hardware that wasn’t even planned when it was designed) and change (make it so that with minor modification done by the new intern when you’re abroad it can suit the CEO’s every whim).

This includes a lot of painfully-learned lessons about what survives these tests and what doesn’t, some of which cannot be taught in class and must be learned from experience working on the same project for many years.

“Coding”, in the sense I meant in the big bold letters above, is something much simpler. It means telling the computer what to do.

(Those aren’t exactly the popular meanings and distinction, but indulge me in this language-shaping and we’ll get to convey the argument well).

Coding is the latest Superpower

Coding is easy to learn. Average adults need about one full time month of training to gain coding skills they can use often in everyday life (based on personal experience, may be skewed). As I said, I think it was much harder to learn to read and I must assume you managed OK with that.

Coding is very useful in almost every modern profession. Artist, secretary, teacher, marketer, lawyer, technician, engineer, scientist – all will save a lot of time by automating boring parts of their daily routine, freeing it up to do harder (and thus more valuable) work. Those on the end of the list will also tremendously benefit from coding as part of their research.

Most of these tasks cannot be delegated to a professional programmer, not only because his time is prohibitively expensive, but also because they cannot wait for him – for example, a secretary needs to copy all files with the word “salary” from a thumb drive to her hard drive now, not next month.

A good rule of thumb is: if your profession involves working with data (and that may even be non-core-business-related-data like orders and payments) you will save loads of time by learning to code.

Furthermore, like reading – which is very useful as a means to pass knowledge across the ages when a few scholars practice it, but becomes many times as useful when it can be used to communicate with everybody (I’m thinking street signs), coding has much greater benefits when practiced by a whole society – and my experience shows they are present for “societies” as small as a single business unit in an organization.

I know three such benefits, all pertaining to the interface between laymen and programmers:

First, everyone now knows how to recognize a situation that calls for a professional software project. Better decisions will be made of when to hire programmers, making the society more efficient.

Second, everyone will have a shared language to communicate with programmers and thus software projects will serve the society much better.

The third is harder to explain. Imagine a newspaper company catering to the illiterate. It will either need to employ many artists to painstakingly convey at least some of the information they want to convey with illustrations, or employ news-tellers to read the news to their customers. Compare the service the customers receive to the service customers of a regular, textual newspaper receive. The written newspaper can give much better service because its clients have the superpower to read. The same goes for software. If your clients can at least code a bit, software can be delivered faster and cheaper that serves their needs better.

As I said, I’ve seen all of these things work in an organization where every employee learns to code, including secretaries, managers, marketers and all other completely non-technical roles.

Coding is a superpower. Soon we’ll realize it as a society and teach it to all our kids in primary school. In the meantime, you can learn to code and save a lot of time on everything you do with large amounts of data (and increasingly, everything we do involves large amounts of data, because it is becoming so easy to collect).

So, what we said is…

Before I talk a bit about learning to code, lets go over everything again:

  • Man sometimes discovers a skill like sharpening stones, kindling fire or reading that make him much more productive. I call them superpowers because they are.
  • Not every discovery, even not every disruptive discovery or technological revolution, is a superpower. Superpowers are those for which the answer to the question “Should I learn this?” is always “Yes”, irregardless of who you are.
  • Coding is the latest superpower. Everyone stands to gain a lot from learning it, and we’ll gain even more when it will become a language you can use to communicate with everyone. It will probably soon be taught in primary schools everywhere.
  • Programming, on the other hand, is much more difficult and should be done by experienced professionals.
  • You should learn to code. You probably shouldn’t learn to program.

How do I learn to code?

If you’ve made the decision to dedicate, say, a month full time, or 50% of two months, to study coding, and don’t know where to start, I’ll try to help a bit.

Make sure this is what you want

First, make sure you want to learn to code and not learn to program. Those are, as I explained, completely different paths to take and they don’t start the same. If you want to learn to program and really want to hear my opinion on it, drop a comment and I might write a post about it.

So just to make sure: If you want to save time by automating boring work, learn to code. If you want to be able to communicate better with your technical cofounder and make better decisions, learn to code (and at his recommendation possibly learn to program later). If you want to build the MVP of your startup idea, learn to program and prepare for it to take a year or three.

Great! On to the next step.

If you can, find people to study by your side

This is so worth it. If you need to, get them into your house one day every week, buy infinite supplies of pizza for everyone to make sure they don’t miss a day. Costs way less than university tuition, advances you in life way more.

Choose a language

Programmers love this stage. They can get stuck on it for a year or two and enjoy themselves immensely. So never ask more than one programmer about it. And since you asked me, just trust what I say and save yourself months of procrastination.

Choose Ruby. It’s a great language, probably the most user-friendly language language that is usable in the real world, and more importantly, it has a very good community. You will learn good ideas and good habits from the community, and they will always treat you with great kindness and sympathy.

Find a Mentor

This is very important. You need someone to ask questions and someone who will review your exercises and first programs. Preferrably, someone you know. For some reason most programmers would be very excited to help new people into their field (humorously, often more than the new guy), so it shouldn’t be hard. If there’s nobody you know, look for a local user group. Still no luck? The great folks in the mailing list will surely come to your help.

Explain to your mentor what you want to learn and more importantly, what you want to skip. Perhaps point him to this essay (preferrably quote the relevant paragraphs, better not waste precious mentor time).

And now all that is left is the actual studying…

Learn the basics of the language

I haven’t been in touch with the Ruby community for a few years and it seems that they have been innovating a lot in teaching over the web, so ask your mentor what is the current best way to get to know the basics of the language, but at the end of this step you should know at least:

  • What “control flow” means, how to use “if” and “while” and “for” and “each”
  • What “method” means, how to use and write them
  • What “class” means, how to use and write them
  • How to read a file and write to a file

And you should have practiced these things until you barely ever need to look stuff up in the reference book or help file (now is the time to find out if you personally prefer to practice on invented exercise problems, e.g. from Ruby Challenge, or tiny real world projects devised by you and your mentor).

Learn some cool stuff to keep you intersted

Learn one of the ways to draw or produce sound and make some cool art. You’ll learn a lot and enjoy it immensely. Share your art with friends, preferrably those that study with you, and try to improve on each other’s ideas.

Learn some practical stuff that you work with

Do you work a lot with Microsoft Office? Ask your mentor for learning resources on how to control Excel or Outlook from Ruby.

Do you work a lot with a certain website? Ask your mentor for learning resources on how to do operations on the website from Ruby.

Do a small project that actually saves you time every day.

Learn some SQL

SQL is how you talk to databases. You won’t regret learning it. Ask your mentor to point you to good learning resources.

Integrate into your life

Occasionally have a conversation with your mentor on how your new skills have or have not helped you in your day-to-day. Integration is the most important step, have your mentor help you find more places in your life where your new skills can help you.

Tell me about your experiences

I’ll integrate them into this document so that others can learn even better.

23 thoughts on “Should you learn to code?

    1. i said the same thing to myself , i have no clue if he can code well or not , but he can SURELY write well! 🙂

      Great txt , shared it all over my facebook … this is the word on the street , people without coding knowledge is going to be left behind. or at least a step behind everytime.

    1. Do you have a very good reason to prefer Python over Ruby? Maybe a business partner or good friend uses it? Then go for it.

      Otherwise, I strongly advise to take up Ruby, as it has a great community very dedicated to quality of code and quality of teaching.

      Take note that they are very similar languages, so there shouldn’t be too much thinking.

  1. First, make sure you want to learn to code and not learn to program. Those are, as I explained, completely different paths to take and they don’t start the same. If you want to learn to program and really want to hear my opinion on it, drop a comment and I might write a post about it.

    What’s the different path to take to learn to program?


  2. Hi aursaraf , nice words! It would be nice about recommendations if I want to learn programming to develope my own MVP. You said 1 -3 years. It is not the same 1 than 3 😉
    Regards From Ibiza

    1. I don’t know what your MVP is, either, or who you are, what you like and what you’re good at.
      I’ve written a few different recommendations on Having a mentor would help a lot in keeping you on the quickest path to being able to create your MVP.
      Chances are you won’t make it on time with this idea – by the time you can program well enough, the market will probably be crowded. But on the next one you just might make it.
      Good luck!

  3. There’s a discussion about this at Coding Horror ( and Philip Howard pronounces my opinion very clearly. Quoting:

    “[..] a lot of the job of a mayor is dealing with bureacracy; if that mayor could tell when there was a technical solution to a problem that avoided the bureaucratic one, maybe he could spend less on the bureaucracy.

    Your wider point that not everyone needs to learn to code is true, with the same caveats; if you don’t know when code can solve a problem, how will you know when code can solve a problem? I’ve helped many people in the past with macros that saved them hours of repetitive work – they just didn’t know it could be done. [..]”

  4. I’m a serial entrepreneur and business angel for many years and I strongly feel that you are biased about Ruby on Rails. Popular programming languages such as PHP, Python, and Ruby for startups have pros and cons without any doubt. Therefore, you cannot just argue that Ruby is the best because it has a great community. I could easily argue that Python is the easiest to learn for non-programmers and beginners. Ruby is the most difficult to learn comparing to Python and PHP. Please check this infographic for a detailed comparison of popular programming languages:

    1. I’m not saying “Ruby is the best”. I’m only saying “if we don’t finish with this question soon, we’ll get into language wars that bring us nowhere, and from my experience programming and teaching programming, starting with Ruby will give you the most value”. And as I said, “never ask more than one programmer about it. And since you asked me, just trust what I say and save yourself months of procrastination.”

      For the last few years I’ve been programming almost exclusively in Python. Great language. I’ve also been teaching it to beginners (lately as part of my job). I saw many people begin programming in both languages. I still stand behind my recommendation.

      Do note that it’s not a recommendation for what to use for your startup, just what to learn as a first language. Knowing a language well, you’ll be a better judge of technologies you could use for your startup (and more importantly, of programmers you could partner up with who are much better judges).

    1. Why, thank you.

      I wanted to evaluate LearnStreet but couldn’t skip ahead to see how you teach advanced lessons so I wrote about my problem on HN. Your personal note made me go check again, and it’s still that way.

      Sorry. I really want to evalueate your product because I genuinely care deeply about this area and want to be up to date on the best ways to teach, but I just don’t have time to follow yet another “Hello World” Python tutorial. I’ll have to wait for the skip-ahead feature. Please tell me about it when it’s added.

      The TryRuby/Codecademy/LearnStreet concept is great, but now we need to start judging who wrote the best lesson plan, and to do that we need random access to the lesson plans.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s