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.
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.
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.