The Self-Taught Developer Path

Ryan McDermott
6 min readMay 14, 2016

--

For the last few months I’ve been tutoring some good friends of mine who are wanting to become developers. I get all sorts of questions from them, like, what is this undefined is not a function thing? (do a stack trace!)”, why is object inheritance a good thing? (ask a rich kid)”, and should I make my own JavaScript framework? (the answer is no, but you will end up on Hacker News!)”

Answering all these questions is a lot of fun because I was exactly where they are just a few years ago. I have felt their pain, their joy, and their confusion many times over. Of everything I’ve been asked so far, the most thought provoking question I’ve heard is, “what should I make?”

When I first heard that I said to myself, “Wait, what do you mean what should you make? Just make something you like and get it over with!” I stopped and mulled over it for a while though, and I reflected on how it all began for me.

I never got a CS degree. Hell, I never got a STEM degree. I studied Philosophy in college. When I got into programming “officially”, I started out by freelancing, making little web sites, little apps, just a little bit of anything. I had made a lot of such things, and most were really, really bad. There was enough spaghetti code to start an Italian restaurant. But aside from the programming itself and the pains of watching red letters fly across my screen night after night, there was one theme to every project I took on: Every single thing I did was something that I hoped would be a learning experience.

It could be anything, even a simple website. When you are starting out, every project will give you an excuse to learn, because you have nowhere to go but up. Just making a simple WordPress theme allowed me to learn about TCP/IP, FTP, Git, PHP, OOP, HTML, CSS, and enough JavaScript to be dangerous.

I did that for quite a while, but I noticed a trend that started to emerge: I was beginning to plateau. I learned a bunch of pragmatic stuff early on, but quickly it became me doing the same things over and over again. I tried to take on stuff that would be a learning experience, but pretty soon I started to fall into habits. You know what the worst part was though? I didn’t know if those habits were even right or not.

That brings us back to the original question at hand: “What should I make?” Is that really the right question to ask when trying to go the self-taught developer path? I don’t think it is. I told my friends and I’ll tell you, it’s not difficult to find out what to make — scratch your own itch, take a freelance job, or just program a social network and make billions! That’s not the hard part. The hard part really is to ensure that you keep learning and that you become a better developer in the process. Now, how do you accomplish that? Well, here are a few things I think can help answer that.

1. Get a Mentor

You don’t know what you don’t know. It’s a cliche, but it’s always important to remember. If you are studying engineering formally at a university, you have the advantage of built-in mentors all around you, and they are always making sure you know what they think about your work with a big fat letter grade.

When you are going it alone though, you have to seek all of this out for yourself. It’s tough, but very doable. The best possible situation of all is getting in as a very junior developer at a company where you can learn under someone else with many years of experience and enough scars to earn a programmer’s Purple Heart. That’s a difficult thing to find though. I think this industry isn’t very friendly to beginners, especially those without a technical degree. If you’re like most of us self-taught folk, you have to go a different path. A great way is to go to a local meetup and find yourself an Obi-wan — you need someone to really show you what concepts you should learn and where you need to focus more. You can’t become a programming Jedi without one.

2. Do something every day to get you to your goal.

They say, “don’t break the chain”, and guess what, they are right. And who is they you say? Well, the best programmer of all time, Jerry Seinfeld! What’s the deal with that? Well, let me explain.

It’s absolutely imperative that you do something every day to get you closer to finishing your project, your job, or whatever it is you are working on. You don’t have to work literally every day. Breaks are important after all, but you need to be making very steady progress regularly. In school this is easy. You are required to do so. Otherwise, you fail your class, your parents disown you, and then you buy a motorcycle, travel the world, and write an award-winning screenplay about it. Ok well, maybe not that last part!

In freelancing, it’s almost as easy. If a good portion of your income depends on you getting your code done, then by golly you will get it done. In any other self-taught path though, this can be challenging. All you have is the love of what you are doing to keep you going, but even that doesn’t always keep you on the rails or, on the Ruby for that matter. You can get burnt out, and give yourself yet another day off. Pretty soon, you’re looking at your terminal and your last commit was six months ago and that code looks as foreign as all the Korean action films you’ve been binging on Netflix.

Get yourself some structure. There’s a lot of options: you can do a gig, attend a coding bootcamp, or just meet every few days with a group of other programmers working and hacking on stuff together. The point is, keep yourself motivated and don’t think you can do that part alone.

3. Combine as many academic topics as you can into a project you would enjoy working on.

As a self-taught developer, you have to work really hard to fill in the holes of your swiss cheese of knowledge. Let me tell you, swiss cheese looks way better on a sandwich than a resumé.

Despite the fact that most of the time you will see these academic topics in practice is in technical interview questions, which are oftentimes way harder than your actual job, you still need to know them. They not only expand your understanding of the underlying systems you work with, but they also help you think of ideas you never could have imagined without that knowledge.

Let me explain with an example: I was interested in really understanding concurrency and the benefits of a type-safe language. I was also interested in finding out how I could connect one artist to another via a chain of related artists on Spotify. In other words, how could I play the Kevin Bacon game with musicians? I built an app that did that and the results were quite fun:

I learned a lot from this, as I did with every other project, but having said all of that, going the self-taught way takes a lot of work. If you’re just getting out of high school, I recommend going for a computer science degree. I know, I know — so conformist. But seriously, it’s safe, it’s obvious, and people take you more seriously with one. If you were like me though, and you didn’t really get the confidence or expertise until after you got some other degree, then don’t hesitate to get into the industry. You have to love it though. Don’t go for the money, or to be the next Zuck. Go because you love changing the world through technology, even in the smallest way possible. Make something you love, make sure it teaches you something in the process, don’t break the chain, and get a great mentor! If you focus on all of that, you’ll do alright. Hell, you may even make it onto Hacker News!

--

--