This was originally published on my blog, where I often write about remote work, learning to code, and women in tech.
I recently gave a talk about learning to code products in less than a year.
The talk was well-received and was even labelled the best talk of 2018 at the location it was given. 🙂 Since it seemed to spark some inspiration in those who attended, I decided to write up a more accessible summary of the key points.
Background
To preface the piece, I think it's important to quickly go over my story. I'm Steph and I'm 25 years old. Across the 25 years, I've had a varied past ranging from:
- A degree in chemical engineering
- Commuting my life away in management consulting
- More recently working in growth/marketing for a technology company - Toptal
Different decisions led me down different paths but ultimately something about tech stuck. Throughout the past 2.5 years at Toptal I learned more about the industry and had the opportunity to go to conferences like TechCrunch Disrupt, where I could see the extent of opportunity and innovation.
More recently, the missing piece was being able to contribute to technology myself. I was working with developers; I was seeing the products others were creating....and ultimately, I wanted to be a part of that world. So, starting in February, I went on a year of learning that was focused on learning programming from scratch, with a focus on learning to make web apps.
Long story short, it worked. I launched 4 times this year, one of which went to number 1 on Product Hunt, another which recently won an award for Inclusion and was nominated for 2 Golden Kitty awards, and others which had their own quirks - like this one which came 5th in the 24h startup challenge.
I was even nominated for Maker of the Year in Product Hunt's annual Golden Kitty awards** less than one year after learning my first lines of code**.
Learning to code has been one of the most rewarding periods of my life and is totally accessible to anyone reading this article. Before starting, let's take a quick step back and question why this even matters.
It's hard to dispute that the tech industry is going to be the most influential industry on our future and in many ways already is. The decisions going into making the products that are going to be ubiquitous in our future need to be made by a representative population. As we understand development, we are removing that barrier so that we can be a part of that future.
Many people look for shortcuts. For example, some common search queries include:
- easy way to learn coding
- easiest way to learn programming
- fastest way to learn coding
There is nothing wrong with agility or simplification, but learning programming (especially on your own) takes dedication and time. For that reason, you won't find any shortcuts in this article since I don't think there are any. This article focuses on what I believe to be the 7 myths of learning to code, as I believe those are truly to the biggest barriers in people participating - not the technology itself.
I'll start with a story:
There is a terrible car accident in which the father is killed, and his son is injured and taken to the hospital. When the boy is brought into surgery, the surgeon looks at the boy and says "I can't operate on this patient. This is my son."
How is this possible?
If you didn't get the answer yet, the surgeon is the mother. Many people, including myself, don't find that response immediately.
This is due to something called perception bias: people tending to "see things" based on their particular frame of reference. While seemingly straightforward, perception bias is essentially a filter over every decision that you make; who you hire, what you learn, how you negotiate, etc.
I believe that if you haven't started learning to code yet, you've labelled yourself as someone who "isn't a developer". With that knowledge in tow, I'd like to introduce you to 3 developers who may not look like typical developers, but certainly are.
So, it begs the question: _Why does that perception even exist?_To answer this question, it's important learn about the history of development. Back in the 40s and 50s when development was first taking off, a lot of the key software engineers were actually women, like Grace Hopper.
Come 1966, enter the Cannon-Perry test. This was a test done on a select group of individuals which tried to identify who the best software engineers were and there were two key conclusions:
- They were good problem solvers
- They apparently didn't like people
This "conclusion" forever changed the way that technical recruiters found the "best developers" and this self-reinforced for decades to come. This psychological perception permeates into the myths we tell ourselves or others tell us in learning to code.
If one study can so drastically change the trajectory of development, we can actively turn it around by addressing the barriers and myths head on.
So here they are; the myths that once prevented me and hopefully will not prevent you from learning this valuable and rewarding skill.
Myth 1: There are two types of people in this world
There's a common misconception that there are two types of people: those that know how to code and those that can't. In some cases, the image is so pervasive that there seems to almost be a different species associated with the two, with a big, impermeable barrier between them.
The reality is simply **a learning curve. **Just like any other language or industry, someone who has spent 10 years learning to code is simply further along that learning curve.
For some reason, people who are first starting compare themselves with others years further on the curve, yet this doesn't happen with other skill acquisition. You would never compare yourself to a native Spanish speaker a few weeks into learning the language, nor would you consider yourself less capable than them.
Myth 2: Stack matters
Many people get hung up on stack. They end up on blog posts that tells
them the performance of one stack is better or a specific language is "dying". This noise prevents them from starting, which is what truly matters.
In reality, stack does not matter. Below are three successful companies that most people are familiar with. All three use completely different technologies and some even utilize languages that some code snobs would deem "outdated".
- FB: PHP and React
- Spotify: Python and Java
- Medium: Node and Go
Please don't end up on a blog post that compares the performance of React vs Angular vs Vue. While you're learning, this does not matter. Find a stack that you like and stick with it.
Myth 3: You need to learn 3820 languages/frameworks to be a real developer
Below is a representation of the ecosystem of development. The image doesn't even capture everything that exists, but even what is displayed overwhelms people and certainly overwhelms me. No developer will ever know all of this, yet this is what scares people away.
"The tech industry is moving so quickly."
"There's so many new things popping up. Which programming language do I learn?"
"There's a new Javascript framework everyday. Where do I start?"
"I don't know what any of this means."
"I can never be a developer because I'm so far behind."
The below image is my reality within that ecosystem and I have launched every single app or project with this stack. These are the same projects that have been successful, won awards, and are actually generating some income. Ignore the above image and remember, you only need to learn something similar to what you see below.
Important note: you don't need to learn my stack because: stack doesn't matter! :)
Below is a simple structure to think about what you need to learn if you're tackling your own projects. It's important to note that this obviously differs if you're a paid developer, but everyone needs to start somewhere.
If you're creating a simple static site, all you need is HTML and CSS. As you start to add functionality, you'll naturally venture into Javascript. Learn vanilla Javascript and jQuery at the beginning and ignore the frameworks! These can be great later on, but are distractions at the beginning.
As you need things like authentication or a database, you'll need a backend. But again, don't get overwhelmed with choice as you truly only need 1 database (for me, Mongo) and 1 backend language (for me, Node).
Myth 4: "I just don't get programming and never will"
I want to differentiate something that I think is very important. Logic != (does not equal) syntax. Logic is what you're trying to achieve, while syntax is the specific set of rules that get you there; the specific characters that the computer can parse.
For most people, logic clicks immediately, but they get hung up on the fact that they don't understand syntax right away. That's natural! Not understanding syntax does not mean that you're not capable of thinking like a developer or comprehending that logic. Syntax takes time, and the best part of learning to code is that there is a constant online dictionary available to you, which is Google.
Myth 5: "I don't have anything to build"
If you truly believe that you have nothing to build, you're almost certainly looking too hard for the perfect idea. If we take a look at some of the biggest tech companies and distill them down to their simplest form: Evernote is a note-taking app, Reddit is a public forum, and Medium is a blogging platform.
I can almost promise you that you won't wake up one day and find the perfect idea. Ideas and execution are functions of one another, but ultimately execution is worth much more than ideas. Accepting this is an important precursor to actual creation and launching, which is what truly matters.
Credit to Derek Sivers for this idea and executing on it so that the world knew about it. Multiply the two integers together to generate a proxy for value.
20 (amazing idea) x 10000 (average execution) = $200,000
1 (weak idea) x 1000000 (great execution) = $1,000,000
Myth 6: "I started too late"
"Starting late" makes sense for fads. For example: if you didn't get on the fidget spinner train, sorry, you missed the boat. However, tech is not a fad. It's becoming more and more ubiquitous in our lives and not showing any signs of slowing down.
My best explanation of this concept is:
"Everyday, there's a bus leaving to tech world and you can get on that bus. If you miss it today, there's another one leaving tomorrow and this will continue to be true for years and years to come. So, do yourself a favour and hop on one of those busses."
There's also a misconception that so many people know how to code and it's already competitive. Well, actually only ~0.5% of the world knows how to code. If we approach this with the Diffusion of Innovation curve, we're still very much in the innovator phase. You can and should be a part of this, and you didn't start too late.
Myth 7: "I don't have enough time"
It doesn't take as much time to learn to code as you think. It can take a matter of months or even weeks if you're truly dedicated.
I would also invite you to try one of my applications Make Yourself Great Again, which helps you think critically about how you're spending your time and how re-allocation of distraction time can result in meaningful growth and learning.
Since I tracked my effort for the greater part of the year, I was able to determine that I probably spent ~300 hours learning to code over the last 10 months. Although it'll differ for each individual, this 300 number gives us a much better sense of how long this truly takes.
If you spend 1 hour per week learning to code, yes, it takes forever (6 years). As we scale that up to 1 hour per day, you're already looking at less than a year. If you scale up your commitment further to more of a part-time or full-time focus, we're looking at mere months before you're capable of creating fully-fledged applications.
To recap, most of the barriers that once blocked me and may be blocking you from learning are psychological. The world of development in theory is approachable, if we can remove these mental and societal barriers. The best advice that I can give you is to start as it is truly the only way to put development in a place that you perceive as accessible.
Many people end up getting stuck in what language they should learn or how to most effectively learn by searching things like:
- best way to learn coding (SV: 2400)
- best websites to learn coding (SV: 1600)
- best sites to learn coding (SV: 1000)
- best code to learn (SV: 480)
Here's a secret: there's no "best" way to learn coding. Everyone learns slightly differently but the commonality between people that actually end up learning is consistency and persistence. All of the major tools (Code Academy, Free Code Camp, Udacity, Udemy, etc) teach you effectively so it's a matter of starting.
So I encourage you to start, today. You could be building apps in weeks.
If you'd like to learn more about how I specifically approached learning this year, you can read about My Year of Sponge and watch my talk. I'm also here on Twitter - please let me know if you start learning!
Continue the conversation over [at Twitter].(https://twitter.com/stephsmithio/status/1088442256359591936)
Top comments (23)
Good: It doesn't matter if you pick Vue or React for your first project. Pick something, anything proven, and stick to it. Execute.
Bad: You can get started with HTML & CSS. You can't. And you don't really need either, to start, just use a component library. Are you some kind of UI designer AND library author, or do you have a business to create? Use your framework and mind your business.
Eldritch Horror: jQuery is helpful. It's 2017 already.
Thanks for the feedback Mihail. I have to disagree with you on a few points, but this is just my experience.
I launched my personal site with only HTML and CSS and it did everything I needed to begin with. Obviously if you're creating full applications, yes you need more.
jQuery is perfectly fine and can do almost everything that other frameworks can. Is it "as good"? Maybe not, but it's great for beginners and can accomplish a lot.
Maybe I misunderstood and we are talking about different things.
When I said HTML & CSS aren't enough, I assumed the app is a core part of the product. If it's an informational/commerce site for your offline business, you will probably have more of an advantage using something like Squarespace/Shopify/a WordPress theme. The amount you have to learn to make something for scratch for those purposes, as well as the effort of upkeep without a static site generator or CMS is very unlikely to be worth it today.
But about jQuery, I simply cannot agree. Native APIs have eaten it, and learning them (aka the fundamentals aka the platform) will not only be as easy initially, with abundant documentation and examples, but also remain useful regardless of what they use later. So yeah, beginners are precisely the people who should stay well well away of it, lest they forever be confused by the subtle differences such as some jQuery methods being properties in the native APIs.
You're being part of the problem (one of the myths that was covered). Rather than say that jQuery will just create confusion or that it's a waste of time, present some clear, SIMPLE alternatives.
For total newcomers:
developer.mozilla.org/en-US/docs/Web
developer.mozilla.org/en-US/docs/L... (guided tour)
For those that already use jQuery and want to get rid of it:
youmightnotneedjquery.com/
vanilla-js.com/
A repository of technologies available to webs goes against the grain of this article, and again echoes one of the myths. If you're going to suggest that jQuery is a waste of time, then offer a specific alternative to jQuery (with reasons), otherwise you are just adding to the clutter.
I'm sorry, I don't understand what you're asking of me.
Give a man a framework and (s)he will eat for a day, teach him HTML, CSS, JS, HTTP, etc. and (s)he will eat forever. Also, frameworks comes with a certain frame of mind, frame of thought. They are great to get things done, not so great to understand. That's why they are faster to deliver, which is great for the deadline, not so much to build knowledge.
I think this matches close to the post I made. Learning involves a lot of exploration and even being a skilled programmer you're trying things and lacking knowledge of much that is out their. That lack of knowledge doesn't mean you should avoid it, just take what gets you further.
Impostor Syndrome or Just Getting By
Jesse Phillips ・ Dec 16 '18 ・ 3 min read
Yes, exactly! I think it's important especially for new programmers because it's easy to get overwhelmed with everything out there!
What is interesting is, even though I have experience and constantly explore new things, there is still things out of reach.
I would love to have experience with machine learning, D needs a better GC and it would be interesting have knowledge to cover that. It is not like I can't, but grabbing time outside work and choosing other programming things I want stop me.
That rabbit hole is so familiar! We have so many choices when it comes to technology, and the industry has, for the most part, become so obsessed about specific technologies, that we are never taught to value what we try to condense to the concept of "domain knowledge" is really the most instrumental part of programming. If one don't clearly understand the problem and the solution, it doesn't matter how many languages are used, the problem won't get solved at the end of the day.
Some languages are better than others at expressing a problem or a solution, but it still took someone with deep domain knowledge to notice that utility or specifically create it. Machine learning throws a curveball into the system; we have enough computing power that, given enough monkeys, we probably can end up with the entire works of William Shakespeare. Or it could just take up a lot of processing power.
I'm glad computing has reached a point where non-traditional backgrounds are no longer as heavy as a barrier to entry. I probably would have made more money at the beginning if I finished up my CS degree, but instead I ended up becoming an EMT and going on a detour that totally changed my perspective on life.
Intuition is an interesting concept. I've seen hopeless cases survive because someone decided to order a random test before they threw in the towel and end up discovering it's something we can easily treat, we just aren't used to encountering it that way. And sometimes, no matter how many resources you have or how much knowledge you possess, systems are so interconnected and complex that you can't manage state in a predictable or positive manner.
Great stuff!
I would like to add to Myth 5:
Maybe try building something you need for yourself (a portfolio site, a cool little automation script, some kind of calculator). Certainly does wonders for my own motivation.
Great point! I completely agree - building the things that you want in your life is super motivating!
Myth 1 is real, however one cannot judge without trying, your point is misleading that after spending whole day on Stack overflow people will improve, nope, some can't improve at all. We have more programmers with least programming knowledge compared to ones that existed before Stack overflow !!
Your article is great! I love it. Knowledge is power!
Thanks Vincent!
Really awesome article I love it when you debunk myths about our industry especially the tech stack part.
Thank you!! It's so important to talk about these things!
Very inspiring post! Loved it!
Thank you!! 🤗
Excellent article. It has addressed many of the issues I struggle with. Thanks so much.
Thanks Michael! So glad it resonated.