When I taught myself to code, I did it because I really wanted to keep my startup dreams afloat, and finding reliable technical co-founders was a pain.  I made a ton of mistakes and even quit a several times. So much so that I published a course on Udemy about how not to quit coding (if you pay attention to this article, you'll even find out how to get a promo code).  At the end of a long, painful, and often tedious journey, I attained my goals. And as it happened, even found work , first freelance, then as a developer at a small, growing startup.   I never intended to become a professional dev, and it was pure luck that the curriculum I designed for myself happened to give me a huge advantage (hence the Udemy course).

Like almost everyone else who teaches themselves to code, I started with a lot of self-doubt. I started timidly - trying it out in tiny bites.  The easiest ways to get started were with sites like Codecademy.  I then discovered FreeCodeCamp, and Courseera. And from there on I kept learning the theory and fundamentals of programming.  I did several of the courses twice, as I quickly forgot what I "learned".   This turns out to be normal - like any new skill (think of walking, or driving)  it takes a lot of practice and time. So I grew comfortable with not being able to memorise. I focused instead on understanding.  I developed my knowledge. These resources (always used for free) gave me a sense of confidence in my understanding of the fundamentals.  Thanks to these resources, I overcame my doubt, started to enjoy it, and felt like  I was making progress.

There was one problem.  I couldn't build much.  Or rather, I was easily overwhelmed when I tried to to build anything more than a basic, static HTML site.  I rarely could go much beyond what I learned on these sites.  I was not yet able to take on "real" projects.  I was not ready to solve code related problems on my own.  I didn't know enough to even Google for answers correctly or efficiently.

So, I turned to other resources, and I will return to them in a moment.  Before I tell you what I did that resulted in me getting 4 job offers, let me tell you why I happened to get those offers...

It wasn't just because I had the knowledge. That is easily established without an interview - most firms give you a coding test anyway.  If you don't know enough to make it past that, you're not going to get the interview, let alone an offer.  

As one interviewer put it: "We don't hire for knowledge. We hire for skill." And that seems perfectly logical and intuitively obvious - there is an important difference between knowledge and skill. Skill is applied knowledge.

Here's the catch :  how do you showcase your skills?  A certification from online courses showcases knowledge. It does not demonstrate ability. Managers expect you to know the theory and syntax.  They expect you to write a for loop easily, and to be able to read a switch-case statement and know what it does.  But what they want is for you to be able to put that knowledge to work, and build things with it.  You're hired to get a job done, and that's really what you need to prove you can do.

Which brings me to the nasty shock many people who have "learned to code" face when they struggle to find work.  They're shocked that all their learning and effort does not get them much interest in the job market.  Think of it this way - the finest department stores still need to showcase their wares in the shop windows right?  Empty shop windows look bare and uninviting. They do not inspire confidence.

A shop window that has certificates of quality, and standards but is bare of goods is not going to bring in customers, no matter how good the goods.

So think about the resources you've used to learn and ask yourself this :  what have you got to show for it? If it's nothing more tangible than a certificate, then consider what a potential hiring manager is going to assess you on, and how are you going to stand out from others?

See what I mean?

So this hiring manager said I was the least "experienced" candidate who'd applied, but I was very compelling. Why? I had (without meaning to) built a solid showcase. And they didn't need to look at my CV.

So now it's time to tell you what I did.  I took a number of courses that were long and intense, but which were project-based.  Because they were long and intensive, and project-based I had to use Github to store my code as I went along.  And it turned out that my Github profile was what impressed the hiring managers - they loved that I had a lot of projects there.  

It turns out that most applicants have weak Github profiles.  

And that's an opportunity for you. Anyone can make claims in a CV.  It's not terribly hard to make it to the end of a course and get a certificate.  But you cannot argue with projects sitting in your Github repo.  Especially if they're documented with a decent README file and installation instructions (this bit I didn't do so well ?).

Personally, I found that Udemy was the best for this - I did some great courses from Stephen Grider, Colt Steele, Andrew Mead etc.  All of them had 20 -30 hours of video (which, if you code along and experiment, will take you 50+ hours).   It's easiest to follow along if you've already done the basics on Freecodecamp, Codecademy etc.  After a year or so of this, I had, through slow and patient persistence, made it through a bunch of courses, and accidentally built up a pretty good bunch of projects. I was even familiar and skilled enough to work on full stack projects that I dreamed up, and tackle things like Google Actions, Alexa, AR etc that were not related to the courses I'd taken.  But importantly, I now had a body of work that demonstrated my ability and commitment to code.  I had tangible evidence that any hiring manager could rely on, in addition to me passing the tests they gave me.

So, if I had to summarise the best approach to teaching yourself to code if you want a job as a dev, it would be this:

Projects, not certificates, will teach you you enough to do it professionally and showcase your skills and knowledge.

Keep in mind this post is targeted at new, beginner devs.  If you want to see a talk version of this content, check out this video below from juniordev.io's Melbourne chapter.  It's a fantastic group and I encourage you to think about participating in similar meetups in your city, to build your own understanding of conditions in your local market.

Good luck, and don't be afraid to go the extra mile. That's where the successful people are.


Postscript For FreeCodeCamp students

I really, truly believe your most precious resources are your time, effort and money. Of these, the single most important resource is time, because the other two can be renewed and recovered. So if you’re going to spend time on something make sure it gets you closer to this goal.

With that in mind, if you want to invest 3 hours with me to find your shortest path to learning to code (especially if you’re a career changer, like me...), then head to my course site and use the form there sign up (not the popup!). If you add the words “FREE MY TIME” to the message, I will know you’re a freeCodeCamp reader, and I will send you a promo code, because just like you, freeCodeCamp gave me a solid start.

[Update] Quincy at FreeCodeCamp has relaunched the freeCodeCamp podcast, and uses his incredible experience as an educator to pull together content that will help you on your journey. I was recently on episode 53 and some of the things in this post are covered in greater detail there. You can also access the podcast on iTunes, Stitcher, and Spotify or directly from this page.

I can be contacted on Twitter: @ZubinPratap