Aaron's Blog

Don't Be Afraid of Self-Taught Programmers

I think that self-taught programmers can be just as qualified for the job as those who had a guided computer science (CS) education.

This is a companion blog post to my "Why I Dropped Out of University" post.

Why people are afraid

Please contact me if you are an employer and disagree, or have reasons to shy away from self-taught programmers that weren't listed. I'd love to talk and update my writing.

People claim that CS graduates have fewer gaps in knowledge than self-taught programmers.

While I do agree that there are gaps in knowledge, I disagree that there are fewer, and I disagree that the gaps in knowledge are bad.

If you don't know me, I'm involved in computer security competitions called Capture the Flag (CTF) where you're asked to hack certain things, and then prove that you hacked them. There's a huge variety of possible targets in these competitions. You may be asked to get remote code execution on a webserver by exploiting some tricky memory corruption bug.

I would argue that the skill required to exploit such a bug is as obscure as any skill that self-taught programmers may have as a gap in knowledge. For example, a specific, common knowledge gap in self-taught programmers is an understanding of time complexity. Is an understanding of time complexity required to write code for most projects? No! The core competency of being a programmer is being able to write functioning code.

Even students of guided CS programs have gaps in knowledge. I think most college graduates in CS have not exploited a binary exploitation vulnerability before, for example.

Is an understanding of time complexity required to get some jobs? Absolutely, yes. Most jobs? No.

Is an understanding of binary exploitation required to get some jobs? Absolutely, yes. Most jobs? No.

Furthermore, most self-taught programmers aren't stupid. They can learn. In fact, learning on a job is very important to avoid burnout and stay productive. I would never take a job only for the money or to stay busy.

So, I think gaps in knowledge are normal regardless of the path you take, and they are acceptable to have as long as you have the core competencies of your job covered.

CS at a university doesn't just teach you how to code, but also how to think holistically as an engineer.

(i.e. considering social implications, business practices and processes, good/bad design patterns, communication, collaboration skills, etc).

I agree with this. However, I don't think college is the only place you can learn this.

I believe I've picked up much of this knowledge from internships, jobs, the many projects I've worked on with others, and the many teams I've been a part of. Some people read books on this.

Of course, it is up to employers to determine whether candidates' experiences qualify them for the job. The interview process is a good way to figure out whether a candidate has enough experience being an engineer.

Benefits of being self-taught

Self-taught programmers may have a greater level of self-motivation and discipline, which is a valuable trait for any programmer. Self-taught programmers have had to take the initiative to find resources, study, and practice their craft, which demonstrates a level of commitment that may be greater than that of a student in a guided CS program. Having a background of having to teach yourself how to program also provides an advantage in that self-taught programmers are used to finding and using a variety of different resources and tools to accomplish their goals.

They may also have more experience working with and learning from real-world projects; for example, they may have a greater appreciation for the importance of testing, debugging, and learning from mistakes, as they have had to figure out these concepts on their own.

Loading...