Original question from Quora:
How do self-taught developers actually get jobs?
I’m 17 years old and I’ve been coding since I was 14. My main focus is Java and I managed to score a 5 on my AP Computer Science course. I’m pretty well-versed in Java (e.g. Syntax, major classes,, GUI/JFrame, etc.) and I’m decent with HTML5 and CSS3. I feel like I lack a lot of the skills I need to actually be able to market myself (e.g. How databases work and which ones I should use) and I’m curious as to how others learn these things. I do plan to go to college for a degree in Software Development but it’s beginning to get frustrating feeling like I have to go to college in order to be employable. Are there courses I’m not taking that I should be or things I’m not doing?
I believe you are looking at it wrong. You believe you need to take courses for someone else to tell and teach you the answer. Fundamentally, self-taught programmers do something different.
A self taught programmer has a lot in common with a self taught guitar player. I don’t know if you’ve ever played guitar, so I’ll explain how a self-taught guitar player might learn guitar.
First, it starts with someone who sees someone who they identify with playing the guitar. Most people who play guitar at some point want to be like someone else who plays guitar. After that, they decide “I can be a guitar player too!” and they go to their local music shop and buy a used guitar (because they are cheaper, but still cool).
Next, one of two things will happen, either the person will pick up a “teach yourself guitar” book in some form, OR, they will go to YouTube and start learning how to play their favorite songs. The ones who try and learn their favorite songs tend to do better.
Now, when a young guitar player is motivated to learn a particular song, they will watch videos, print out tab sheets, the chords, and so on and they will sit and try and recreate the song themselves based on the videos and tabs available to them.
After hours of practice, going over the chords, solos, picking patters, and so on, they’ll be able to play their own version of that song. It won’t be quite the same, but it will be close enough for rock n roll.
Then, they’ll pick up another song they like and another song they like. Along the way, they will learn patterns, techniques, and so on without even realizing what they are. They will just figure out how to do them without learning the names and theories.
Eventually, playing guitar will just “feel right” and picking up a new song will be common and painless. The “language” of guitar will be something they speak like you and I speak words.
This all happens after thousands of hours of accumulated practice. Even at hours of practice a day, it takes years.
So, what does this have to do with self taught programmers?
Well, the thing that really makes a self taught programmer is that they build things. Lots of things. To become a great programmer with very marketable skills, you have to build things and write code.
Taking classes and learning the theory is great, but a lot of professors couldn’t code their way out of a cardboard box. They couldn’t build you a useful application that anyone would want to use if they tried.
It’s not that they don’t know their stuff, but rather that the skill of being a professor is research and theoretical understanding, not building code and delivering value to a client.
Do you see the difference?
The way that the best programmers I’ve ever worked with got good is they built things. Lots of things. Pretty much all the time.
For example, nowadays everybody and their brother uses WordPress. Long before WordPress, I built for myself something like 3 or 5 different content management systems in PHP and MySQL. I’ve built games. I’ve built mobile apps. I’ve built frameworks. I’ve built SAAS apps.
Nobody paid me to do any of those things. I did them for fun or learning or curiosity.
I haven’t taken a class in years and I don’t think they would really move the needle on my career much if I did. Yet, if I sat down and decided to build my own computer language or operating system from scratch, I bet I’d learn a lot of interesting things along the way.
Yes, I could take a class on those ideas, but I’d learn more from building something, making mistakes, and really “feeling” the experience of it all, than I would from reading a book or listening to a lecture.
So, this advice I will give you that will give you a huge advantage over everyone else who mostly doesn’t do this…
Solve a problem that you want to solve. Build some software that does a cool thing you want software to do or someone else wants software to do. Write code for that every single day. Nights, weekends, every day. Even if you only spend 15 minutes, fine.
Eventually, you’ll have something that works and is pretty decent.
Then, you do that again. Build something else. Keep building and building and building and building. Invest the thousands of hours into your skill by challenging yourself to build more things.
As you are building, save your work and put together a little portfolio on your website. Each time you finish a project submit to Hacker News or Reddit or whatever. Blog about it.
You are 17… By the time you are 20 you could easily put 2,000+ hours into developing your skill, have like 10-20 things in your portfolio, and you’ll have learned many lessons that those who just take classes will never learn.
More importantly, you’ll be able to clearly demonstrate that you can write code, solve problems, and ship something to the world. That is valuable. That is the kind of thing companies are looking for.
Once you land a job, keep building in your spare time and promoting your work. You’ll rise faster than your peers because they go home and watch TV and aren’t learning or growing or building ANYTHING. They get the paycheck and go home.
The more you build, the more you learn. The more you learn the more valuable you are. The more valuable you are, the easier it is to get a job, the more you get paid, and so on.
So, go out there and build something. Write the code!
P.S. I unpack more ideas in Creative Genius.