Why Is Learning to Code So Hard?
Will.i.am says you need to learn to code. It is not rocket surgery! Y-Combinator founder Paul Graham blithely says that:
"For the price of a Linux box, a copy of K&R, and a few hours of advice from your neighbor's fifteen year old son, you'll be well on your way.” Paul Graham, How to Start a Startup
You're working hard and making progress, but have you ever felt that despite your best efforts, true mastery is still hopelessly remote? Is learning to code supposed to be this hard?
We live in an age of unprecedented access to information. Anything you’d ever want to know is right at your fingertips in a tiny black box. There are more resources available to teach yourself than there have been at any time in the past, and since developers make the Internet, more ways to learn to code than perhaps any other discipline.
So whats the problem? Maybe you just don’t have the brain for it? Nonsense. The fact is, despite unprecedented resources, learning to code online sucks because nothing out there does enough to address the problems that most beginners face.
Most people fail in the same ways. These are the four motivation killers: getting overwhelmed, lacking a why, getting stuck, and false progress.
There’s an immense amount of information one must assimilate to become a modern software developer. If you Google it, perhaps you’ll come across resources like this list of free programming books. Despite the best intentions, these can be worse than useless. Not only will you probably fail to learn anything from reading this list, but you'll become so overwhelmed that you fail to even begin.
Say you’ve made it through the hand holding stage. You can make a simple website and reverse a string, and you are feeling pretty good about it. Then, suddenly, you reach the dreaded trough of uncertainty.
You are past the basics, and have no idea where to go from there. Should you learn a new language? Which? Why? Who are these wizards who can learn to code by jumping in and picking apart the linux kernel? What even is a kernel, anyway?
Even if no single topic is hard, there’s so many that in aggregate it is impossible. It is a death by 1000 cuts. Faced with a vast and impenetrable mountain of information, the vast majority give up.
So how do you make sense of it all? What exactly do you need to learn to become a software developer? In the Atlas, I try to break it all down.
Lacking a Why
I was trying to build a little CRUD app, but Active Record was hopelessly opaque and magical to me when I didn’t understand how to model a simple relational database, let alone the point of an ORM.
I could have jumped into SQL and worked my way back up, but I had no confidence that they was the right way to go. Learning new technologies takes massive effort, and without a clear understanding that I’d actually gain something from the struggle, any little snag made it far easier to just give up. I wasn’t lacking desire, and if I had merely had someone assure me that my effort wasn’t wasted, motivation would never have become an issue.
Maybe you're rolling your eyes reading about my struggle, but maybe all of these acronyms mean nothing to you, and that is exactly the point: if you don’t know and you don’t know that you don’t know, what should you do next?
Just having a list of things you need to learn is not enough. In order to stay motivated, its critical to be confident that your effort is actually getting you somewhere. The Developer Atlas Curriculum will give you clear goals so you can see your progress and always know the next step.
For each step, I'll justify why it matters, why it comes next, and what you'll be able to do with it. This structure will help you set goals and expectations rooted in the real world, such as when you’ll be able to seek a job.
In school, you had a support network around you, directing you and helping you move forward. As a self learner, now its just you. Pretty soon, you’ll run in to something that will stop you in your tracks. The ability to unblock yourself is a key skill, and one of the defining character attributes of developers. I once was stuck on a tiny problem in an esoteric legacy system for four months. In my performance review, my manager told me that stubbornness was my best quality.
But thats how it works: developers are supposed to learn how to bang our heads against a wall repeatedly until a hole appears. If you are learning on your own, it is even more bleak, because there’s nobody to turn to. Nothing kills motivation more than not having a way forward.
Developer salaries are through the roof because there’s a critical lack of people able to do the jobs. There’s a huge public movement to get kids into STEM, but what about the people who are already interested? How many neophytes have given up after becoming stuck or overwhelmed, thinking they aren’t cut out for it?
Its personal because I was very nearly one of them. To some degree, getting stuck is a reality of programming, but that doesn’t justify how hard we make it for self-learners.
So what can you do about it? The best thing you can do to improve your long term chance of success is to get help. Join the mailing list and I’ll personally help you the best I can. I’ll also help you connect with a mentor and a coding buddy to bounce ideas off of your peers. See mentors has more details.
Realizing you know less then you thought you did is maybe the most pernicious and brutal motivation killer of all. I’ve always thought learning to make mobile apps would be fun, and discovered that Stanford’s iOS course is available for free on Youtube. What an opportunity, a chance to learn from perhaps the best iOS teacher in the world!
18 lectures and several weeks later, I was done. I had taken copious notes and learned a ton. Then I sat down to make an app, and realized I couldn’t do it. What happened? Why was it so hard to gauge how much progress I was making or how well I understood things?
It seems like with learning to code, you have two bad choices: watch lectures and don’t really absorb anything, or try a personal project and get hopelessly overwhelmed. Why is the idea that you can only learn to code from coding accepted as dogma?
I dove into the science of learning to find an answer. There’s good reasons for the notion, but it isn’t the full story. What is the best way to learn? That’s what Developer Atlas is all about.
Software development is an extremely fun and rewarding job and hobby. It is an act of pure creation. You can sit down at a computer and from nothing but time and ideas create something of real value. It is creative, mentally stimulating and fun.
So why is learning how to do it so stressful and difficult? 69% of developers identify as at least partially self taught, so why is the process still so crude? If a bright, young ambitious kid wants to become a lawyer, there’s a clear path for them. They take the LSAT, go to law school, take the BAR, pay their dues and hopefully eventually become a partner.
Software development is one of the most promising new careers, but what is our process? Learn the basics, and then I dunno, go pick a random weekend project? You can go get a CS degree but is that necessary or even advisable? You can do a bootcamp, but what if you don’t have the time or money?
Having survived the process (so far), I took a look at what I would have wanted if I was just starting out. This is Developer Atlas’s simple promise: no matter where you are now, you can efficiently and reliably get to the point where you are a great, empowered developer.