Other Posts

What I Wish I Was Told as a Beginner Learning to Code

You don’t have to look very hard to see how important technology is in modern society. As of writing this, the five most valuable companies in the world are all tech giants, and Google jobs are so famously cushy that they literally made a movie about it. President Obama spent a good part of his state of the union address talking about how we need to get more kids into technology.

Technology has transformed our lives and suffused our popular culture, and Software Engineering is quickly transforming from being a misunderstood nerdy fringe group to being a venerated skill that everyone is encouraged to pursue. Record numbers of people are being attracted to learning how to code without really understanding what they are getting into. Here's what I wish I knew when I was starting out.

Should you become a developer?

So for whatever reason, you are toying with the idea of learning to code. Maybe you are an unsure high school student, or an adult looking for a career change. Maybe you’ve come across blog posts promising you a new shiny career where you get money, prestige and freedom and don’t have to work very much. How do you know if you’ll actually like it? Is it for you? It is certainly not a given.

There has been a big backlash in the tech community against the ‘everyone should learn to code’ movement. Cynical thought leaders complain that coding is hard, and that flooding the market with clueless novices does more harm than good.

Many beginners jump in thinking that it might be a cool skill to pick up in their spare time without sufficiently appreciating the complexity of the task. You wouldn’t consider picking up medicine as a hobby, right?

I would no more urge everyone to learn to program than I would urge everyone to learn to plumb. Basel Farag, Please don’t learn to code

Personally, I think this analogy is seriously flawed. You don’t need to commit to becoming a professional software developer in order to learn how to code. As long as you appreciate the difference, picking up some coding skills can be a fun and rewarding hobby. If you do want to go pro, there’s never been a better time. It is absolutely achievable for anyone willing to commit themselves to it.

Learning to code is so incredibly worthwhile: It is creative, tangible, and intellectually stimulating. Software development is more akin to carpentry than science: you get to make things! You work with your mind instead of your hands, but the things you create can potentially affect millions of people. Its fun, and it doesn't hurt that everyone is dying to hire you.

Sticky notes

Appearances can be deceiving: software development has more in common with carpentry than science.

I am in love with software, and can’t believe that I almost didn’t pursue it. I stumbled trying to teach myself, and got so discouraged that I almost gave up. Its personal, which is why I am writing this.

Can anyone learn to code?

There is a notion in conventional wisdom that not everyone can learn to code. Some people, they say, just don’t have the brain for it. They even cite a paper (that was never published) that purports to predict which group people fall in to.

This idea is completely ludicrous, and a great example of what Steven Pinker calls a “conventional absurdity”

“a conventional absurdity: a statement that goes against all common sense but that everyone believes because they dimly recall having heard it somewhere and because it is so pregnant with implications.” Steven Pinker, The Language Instinct

Before the industrial revolution, people were saying the same thing about literacy. Don’t accept the idea that you are somehow fundamentally limited, because there is no evidence for it. (By the way, do we only use 5% of our brains? Is subliminal advertising a real thing? Do lemmings commit mass suicide?)

This notion is particularly pernicious because it convinces beginners, who are so often confused and frustrated, that perhaps they just aren’t cut out for it. Anyone can learn to code. If you are motivated, you can do it.

The problem is that that is a big if. Computer Science has the highest dropout rate of any major. In fact, despite growing enrollment, the number of students graduating from CS programs has actually decreased since 2003. Learning to code is a long, arduous process full of doubt and uncertainty. Without some serious grit, the brutal reality is that you will probably fail.

Learning to code is hard work

When you do start trying to learn on your own, an interesting shift will happen. All the encouraging voices urging you to try and guiding you through the beginner tutorials will gradually disappear, and you’ll realize that you are alone and still hopelessly far from competence.

There is a lot to learn to be a professional developer, and it is hard to appreciate that as a beginner that doesn’t know and doesn’t know that they don’t know. "Learning to code" is a hazy term that covers a lot of skills beyond just programming.

“Oh my god, the rabbit hole is far deeper than I ever could have imagined.” Ken Mazaika, What are the things I should know before I start learning programming?

Mastery requires persistence and patience. Prepare to feel frustrated and confused for a long time. Even when it is going great, you’ll still get that niggling feeling that you are an impostor who unlike everybody else, still can't actually do anything. I’ve worked professionally for years and I still often feel this way.

A common complaint with “teach yourself to code” programs and workshops is that you’ll breeze happily through the beginner material and then hit a steep curve where things get more difficult very quickly. You know how to print some lines of text on a page but have no idea where to start working on a “real,” useful project. You might feel like you were just following directions without really understanding, and blame the learning materials. Cecily Carver, Things I Wish Someone Had Told Me When I Was Learning How to Code

Struggling is inevitable. With the downers out of the way, know that it is so rewarding, and the highs match the lows. Nothing beats the feeling of breaking through on a problem you’ve been stuck on all afternoon, or of pushing the button and seeing the thing you’ve created go out into the world.

Time is your biggest ally

Don’t believe anyone who tells you that you can learn web development in a matter of weeks. Honestly, if you want to be successful, you should consider learning to code more akin to a lifestyle change than a hobby: It will take months or years of sustained effort. The biggest struggles that learners report are finding time, maintaining motivation and interest, and staying patient over the long process.

There's no agreement on what "learning to code" exactly means so it's hard to put a firm estimate on how long it will take. Learning web development to an employable level should take roughly 500-700 hours with a good mentor. Becoming a skilled professional developer will take years.

This is discouraging to hear, especially to the big bloc of learners determined to get a developer job within the next 6 months. It is a huge reason for the growing success of coding bootcamps that promise to equip you with all the skills you need to get a first job in just a few months. These bootcamps are wonderful, but get that they only get you there by making you work 80 hour weeks for months on end and trimming all but the essentials.

Does the idea that you'll still be learning new things in 5 years in depress you or excite you?

Don’t worry about that just yet

If you are just getting started, you don’t need to think about that right now. It’s not true that it will be months before you see any benefit. There are lots of projects you can do and skills you can master along the way that will make the journey interesting and fun.

But beware: the first 20 hours are the hardest part of learning anything. Its likely you’ll trudge along at first without feeling like you are making progress, and give up way too early. As this great talk advises, you should commit to spending 20 hours trying to learn upfront before letting yourself fail. The community of learners over at Free Code Camp have created the 100 days of code challenge, where you publicly commit to spending 1 hour every day for 100 days.

At first, you should just focus on getting your feet wet and seeing if programming is something you like. If and when you are convinced that you are willing to make the effort, I encourage you to take the pledge yourself.

When are you ready?

One hairy issue with self-guided learning is figuring out when you are done. What will it take to get my first job? How much more do I need to learn before I am truly competent? Am I already there or am I just suffering from the Dunning–Kruger effect? This is a difficult question to answer. There's no test to take, and no consensus on what a developer needs to know. You are ready to get a job when someone is willing to hire you to do it.

Its a good idea to gun for a job as soon as possible, because you'll learn so much faster by working 40 hours a week than you will through fragile self-motivation. Check out the guide "How to Learn to Code" for more details.

How can you learn? What’s out there?

So how do you go about learning? The good news is you have lots of options. So many, in fact, that it is a bit difficult to make sense of it all. You essentially have two broad choices: school or self-directed learning. Going to university or a code bootcamp are reliable ways to get a great education, but they are not for everyone. Self-directed learning is slower and harder, but ultimately necessary.

Understand that if you do go to school, you’re going to end up doing lots of self directed learning anyway. Two out of three developers identify as being self taught, school or not, and learning does not stop once you get the piece of paper. If you want to become a great developer, the ability to teach yourself will be your single most important skill.

Should you get a Computer Science degree?

For many learners, going (back?) to college doesn’t make any sense. It is not necessary to get a job, and once you have industry experience your degree diminishes in importance quickly. Silicon Valley loves to preach the mythology of the college dropout; the Mark Zuckerberg type who leaves Harvard to go bootstrap Facebook knowing that anything of real value isn’t learned in a classroom.

But let’s be practical. There are two good reasons to get a degree: first, because you will learn a ton of things that are hard to pick up from working, and second because it will make getting a job way easier down the stretch.

Software developers love to fancy ourselves a meritocracy, where those who can do it will succeed, but having a diploma will make the process of getting your foot in the door much easier. It is certainly not required to become a developer, but going to school can still be worth it.

As a rule of thumb, if you are a high schooler considering going to university, go get a CS degree. If you are an adult changing careers, a bootcamp is probably a better fit.

There are two important caveats. One, understand that Computer Science and Software Development are not the same thing. Computer Science departments in universities are actually having a bit of an identity crisis as all of their students come through just wanting to train to be developers.

Computer Science in fact is its own distinct field with more in common with math than with web development. The foundation you build in school will be enriching and practical in your future career, but understand that you’ll probably also need to be self-teaching all the less theoretical bits pari passu. Some people choose to get a CS degree and attend a bootcamp.

Second, if you do go, make sure you go for the right reasons.

“It's painfully obvious when I interview candidates who earned a CS degree just because of the promise of good pay” tyrannoflorist, Is getting a Bachelors degree in computer science worth it?

To become a good developer you are going to have to actually like it, and it can’t hurt to dabble in some online learning before you make a big commitment.

Coding Bootcamps

Coding bootcamps are intensive programs geared to teach you enough programming to get a job as fast as possible. They stress total immersion, expecting you to put in 80 hour weeks over a period usually lasting around three months. There are many different types, but on average they take 12.9 weeks and cost $11,451.

If you are considering going back to school, I would encourage you to take a hard look at this option if it's financially tenable. It'll allow you to get into the industry as quickly as possible, and a year of working a job will easily teach you as much as a year of school. Some bootcamps won’t take your money until you have landed a job, highly incentivizing them to help you.

How to choose?

There are over 100 bootcamps out there to choose from, with new ones springing up all the time. They are relatively new as a concept, and the market is absolutely exploding, nearly doubling in total enrollment year over year.

Selecting one can be tricky. If you google it, make sure the blog post comparing them isn't written by one of the bootcamps themselves! Look for one that has been around for a few years and knows what they are doing. In the FCC survey, General Assembly was the most popular, so if it were me I’d consider looking at them first.

Some bootcamps also have part-time and online offerings if that suits you better.

Not for everyone

Bootcamps are the best way to learn to code as quickly and aggressively as possible, but they are not for everyone. They are expensive and time consuming. As with school, you should definitely attempt to teach yourself first to make sure that it is a good fit for you.

Keep in mind that you shouldn't expect to cram for 3 months and come out a master. You will still need to continue learning once you finish, so learning to self-teach is unavoidable. Learning on your own is totally achievable, way cheaper, and won’t force you to disappear from the rest of your life for several months.

Self-teaching

Now is an exciting time to be trying to learn to code. Education technology is advancing rapidly, and it is far easier to teach yourself to be a developer than it was even 5 years ago. There’s gobs of different tools and resources available. Here is a basic rundown of the major options:

Books

I love textbooks. I am the kind of weirdo that reads them in my spare time, and you should be too! Unfortunately, many textbooks nowadays are written with the intention of being manifestos of a discipline instead of being readable or practical. Reading a book is a passive exercise, and doesn’t connect you to the material the way active learning methods such as, say, coding will. Telling you to try to learn to code by reading The Art Of Computer Programming would be horrible advice.

The problem, of course, is that if I sit around reading some enormous textbook on the theory of cooking all day, I'd be a terrible chef—both because I'd have no real practice, and because I'd surely give up a few days in! Andy Matuschak, What are some of the best ways to learn programming?

Still, It is unfortunate that it has become so common to rag on them because a good textbook is a treasure trove. You should read textbooks, but they are just one tool and not a particularly good one when you are starting out.

If you feel like you absolutely must start with a book, consider this one.

Massive open online courses

MOOCs have achieved burgeoning popularity in the last few years with companies such as Coursera, EdX, and Udacity finding mainstream success. Prestigious universities, like Harvard, MIT, and Stanford have also started making their courses available for free online.

Udacity’s or Harvard’s "Intro to Computer Science" courses are a great place to start for someone looking to balance theoretical knowledge and practical skills.

Personally, I’ve always had difficulty choosing what course to take, and when I do, I have a hard time sticking them out. MOOCs have a dismal completion rate of around 7%, but that doesn’t tell the whole story. With a little extra structure and accountability (say, from Developer Atlas), these classes are indispensable.

Interactive online learning tools

The most popular way to learn how to code nowadays is through interactive programs like CodeAcademy. They stress learning by doing, allowing you to try things out by coding directly in your browser.

The major players are Code Academy, Free Code Camp, Treehouse, Khan Academy, Code School, and Pluralsight, among others. They range from free to a small subscription fee, usually around 25 dollars per month.

Keep in mind that these resources are popular because they do a lot of the legwork for you. If your goal is to become a professional developer, these tools aren’t going to be enough to get you there.

The reason why Codecademy is successful is because it takes coding, and transforms it into addictive bite-sized pieces that are easy to accomplish, and offer instantaneous feedback. It’s the candy of coding. Matthew Hughes, 4 Reasons Why You Shouldn’t Learn to Code from Codecademy

Still, don’t let that dissuade you from getting started. These schools are fantastic, and I wish they were around when I was learning. If I was going to suggest one place for you to begin among all the available options (besides here), it would be with Code Academy.

Truly self-directed

You’ll discover that as you get further into your learning journey, you’ll rely less and less on the big brands. If you know what you are looking for, random Medium posts and Stack Overflow answers from google will often have the most concise and useful information. Working, I use resources like this on a nearly daily basis.

But how do you separate the diamonds from the turds? I hate having turds on my diamonds. Not all online tutorials are created equal, and when there’s so much to learn, it is brutal to feel like you are wasting time. Getting good at finding answers with google is a useful skill to cultivate, but how do you know what questions to ask?

If Code Academy already has you feeling like you are missing the big picture, how much can you expect from random youtube videos?

The structure and curriculum provided by these big companies helps people get the confidence to begin, which is a large reason why they are so popular. However, if you can be intentional and direct your own studies, you can break out of these walled gardens. Then, you’ll discover that the internet has a lot more to offer.

Developer Atlas

Naturally, best way to learn how to code is to use every tool at your disposal. You should try out all of these resources and find a method that works for you. I made Developer Atlas to help you make sense of it all.

Developer Atlas is a free online curriculum that will help you gain context and set goals. It makes staying motivated easier by making sure you always know what to do next. For each lesson, I curate the best free online resources so you save time and don't miss out on the diamonds. Give it a try! Learning to code is fun.

Good luck, I'd love to hear from you!

What is Developer Atlas?