top | item 14337854

How do self-taught developers get jobs? (2016)

85 points| _qc3o | 8 years ago |brianknapp.me

75 comments

order
[+] twblalock|8 years ago|reply
I'm a self-taught programmer, and I got my first job in the industry in 2012. Now that I've been interviewed as a candidate and interviewed candidates for jobs at my company, the thing that stands out most to me in the software industry, whether engineers are self-taught or not, is that networking and personal connections really matter.

The hardest part about getting your first job as a self-taught engineer is getting companies to take you seriously. A lot of companies will just throw out applications from candidates without CS degrees, unless those candidates were referred by someone inside the company. Like most job requirements, the degree and experience are flexible if you can get past the bureaucracy, and knowing an insider helps you do that.

So, I agree with the author of the article that a good portfolio is necessary, but I would rate networking just as highly.

[+] bobbytherobot|8 years ago|reply
> A lot of companies will just throw out applications from candidates without CS degrees, unless those candidates were referred by someone inside the company

To add to this remark, getting hired as a programmer is a show and dance in more than one way. For example, I stuff my resume with specific keywords for the initial recruiters, not the seasoned programmer who in the end interviews me.

My advice is to study up on interview coding questions. Half of them have little to do with the actual job. Often people are picking a homework question they had from their sophomore year in college because they don't know better (or they have a bias towards people like them).

Is the interview process fair, no. It just isn't. But if you are smart, you'll play the unfair parts in your favor.

[+] toexitthedonut|8 years ago|reply
>Whether engineers are self-taught or not, is that networking and personal connections really matter.

As someone who has no good network, is there any other good way? I tend to read "X really matters" as "X is essential" in that without X you're nothing. I don't believe in essential ingredients- I believe that, as professional life is very open-ended, there is a multitude of good recipes for success in which there is no common ingredient.

[+] cyberferret|8 years ago|reply
I am both a self taught programmer, as well as a self taught guitarist (both for over 30 years now), and I don't agree completely with that answer in the blog post.

Self learning is great, and it will give you experience and chops in both disciplines, but at the end of the day, you will hit many walls that only a formal education (or a good teacher) can give you.

I've written hundreds of (perhaps over a thousand now?) apps over the decades which are used in the real world to save/make businesses time or money. I would probably categorise myself as a 'fairly decent' programmer, but I know I would fail most whiteboard tests which have basic CS knowledge patterns. I often look at discussions right here on HN about machine learning or cryptographic patterns etc. and feel like a green newbie again because I find the technical conversations hard to follow.

To bring it back to guitar playing - I remember when I was in my first band in high school, I had no idea how to play a guitar solo, but a session musician visiting the school showed me the pentatonic scale, and how you could move it up and down the neck to suit different keys. Mind blown. Pick any standard 3 or 4 chord song and I could play a semi decent sounding solo over it. Forget theory or all that Jazzy stuff - I was on a roll!

But after many years, I discovered that I was simply playing the same thing over and over again in different keys. I wasn't really moving forward. I remember telling other guitarist that - "The _best_ thing I ever learned was the pentatonic scale, and the _worst_ thing I ever learned was the pentatonic scale...". I felt boxed in and felt that my skills had plateaued.

It wasn't until a couple of years ago that I started taking lessons from an experienced guitarist, that I realised what I had been missing on by omitting basic music theory from my vocabulary. I was astounded by the power of learning the differences in scales, and using modes, triads, augmented chords etc. Stuff that I thought was too 'intellectual' or that I believed would restrict my creative freedom actually proved to be the exact opposite. It was the first time I experienced the concept of "the more you learn, the more you realise there is out there for you to learn". A kind of reverse Dunning-Kruger effect?

TLDR: Self learning is great, but formal education is a force multiplier.

[+] thomastjeffery|8 years ago|reply
I think it's worth mentioning that theory need not be learned in a formal setting.

I, like practically every guitarist, followed the same learning pattern. Early on, I learned the pentatonic scale, so my noodling was more structured. Later on, I learned about scales and modes. Those two elegantly simple constructs are the most useful, extensible points of knowledge I learned, but I learned then from friends, and even from the internet.

To contrast, through high school, I learned scales, and a lot of theory. I was forced to practice specific aspects of performance, learned about breathing, embouchure, sight reading, etc. I learned how to have a good ear, and work together with the rest of the band.

The only things I learned from formal education, that I likely couldn't reproduce independently, were physical. Things like breathing, embouchure, etc. This, I believe, is where the analogy falls apart. In music, especially as a performance art, most of what you do is physical. That simply is not the case with software. Everything I learned about programming, I learned on my own. I learned theory and implementation. I learned several languages. I learned how to interface with the operating system.

Programming is not a performance art; in fact, it is the opposite. The computer is the performer. You are the composer. The most wonderful aspect of writing is that it is only information, and with the internet, information is really available, no matter what setting, formal or not.

[+] YZF|8 years ago|reply
I'm a self taught guitarist (for the last 2+ years). I know a fair bit of music theory. I know different scales. I know how chords are constructed over scales. Major chords, minor chords, 7th chords, add/sus, power chords... Chord progressions... Different chord voicings ... inversions... Time signatures... I play classical pieces and I play rock/pop. I put a lot of time into this and I realize getting somewhere is going to take a lot more time, I don't suck any more but I'm still a beginner.

There are endless online resources for learning music theory, Coursera, YouTube, Wikipedia and more.

Point is the self-taught vs. theory is orthogonal. Some people are formally taught and don't get the theory and some people are self taught and spend the time getting a deep theoretical understanding. I took some lessons with a recent music graduate who didn't really know that much music theory, he wasn't that interested and it went in one ear and out the other apparently. Technically he was at a much higher level but he didn't care much for theory...

It is unfortunately true that a lot of "self taught" developers are just not that. I.e. they didn't really invest time in learning much. But there's no fundamental reason why you can't learn just as much CS on your own. I read Knuth's AOCP when I was 14. I do have a CS degree but I still took two online machine learning courses to keep my knowledge up to date and I learn new things all the time. A friend was telling me about their friend who spent a month learning "HTML" and now has a job as a "web developer"...

[+] somecallitblues|8 years ago|reply
Don't worry about what you read. It's mainly dick measuring or stuff learnt at work in specific domain. I know a lot of people who are awesome devs and feel inferior when reading HN comments. The only thing that matters is if you can build stuff people will like and use.
[+] psile|8 years ago|reply
Please allow me share my personal experience and as to why I don't consider a "formal education" to be anything special or unique or magical (including my own). For the record, my degrees are in engineering, and not in CS.

I would describe the majority of the classes (not course topics) I sat in during my time as completely worthless and a waste of my time. There was a very typical pattern from undergraduate courses all the way to graduate courses: professor would come in, dribble a bit on the board and often copy verbatim from a book onto the board, mumble a bit, and erase the board move on the the next topic and then leave. I'd then have to go read the book and pick up 1 or 2 reference books to try and understand what was going on. Maybe I had a total of 2-3 courses that I felt I actually gained something worthwhile by sitting in the _classes_. So almost all of the time I was "self-teaching" despite having a "teacher" and getting a "formal" education. And now, 4 years later, I'm continuing to self-teach by picking up books and reading through them on my own.

Having said all that, unfortunately I would have never gotten my current job had I not put down that I have an "X in Y" on my resume/CV -- not because it's required for the job, no, _not at all_, but because it just helped them check off one of those "requirements" off their list.

[+] whiskyant|8 years ago|reply
You can learn the material taught by formal education by yourself too.

There are hundreds of resources online for learning algorithms, practice problems, and even video lecture on the very classes that are taught in Ivy-league Universities. You can also buy the books that are used to teach those courses as well.

The only thing a formal education will give you is some structure to your education, as well as teachers who you can ask questions. But you could probably get the latter online as well.

[+] dkobia|8 years ago|reply
Thank you for this comment. I am both a programmer and guitar player. Theoretical knowledge seems to be out of fashion these days and I'm rediscovering it again after taking it for granted. Hard to describe how much it adds to ones repertoire
[+] chrisbennet|8 years ago|reply
I'd say the best developers are self taught and by that I mean autodidacts. Those few courses in college are great but if you don't keep "schooling yourself" you won't ever be very good.

Something I do think is great about formal education is that you are forced to metaphorically, "eat your vegetables" i.e. learn some fundamental things that aren't interesting or aren't as interesting as some other things you would study if it wasn't for a test.

[+] stirno|8 years ago|reply
Nearly 20 years in now as a self-taught developer.. and I agree with most of what the post says. I would just add that a young person should continually keep trying to get a job, any job, building software. The process of applying for these kinds of jobs helps you identify areas to focus on.

I think the biggest thing that keeps people from being successful is the assumption that, even with all the effort they are putting in, their potential peers are better at the job. In some strict sense that is true but delivering customer value is number one. Keep your focus on that, people will want to work with you. Ignore any feelings of being an imposter.

I got my first contract development gig at 14, first salaried position at 17. Stick with it and make it happen. Be confident. Don't be a dick.

Also, the original question talked about using Java. There is nothing wrong with Java and there are a lot of jobs in that space but I can't imagine a harder place to come in as a young untrained programmer than Java Enterprise development.

[+] Mandatum|8 years ago|reply
> but I can't imagine a harder place to come in as a young untrained programmer than Java Enterprise development.

It's funny, I can't think of a better place. Well-established companies will have the money to support you as you learn, cogs move slowly in these orgs so you don't have to rush - take your time as you learn about the code base, and figure out how things are done certain ways and make suggestions to improve.

[+] georgemcbay|8 years ago|reply
The enterprise isn't the only place you'll find Java.

As much as the title pains me to type here (as a former C/C++/Assembly snob), I've been essentially a "Java programmer" for the past 5-6 years due to a focus on native Android development.

[+] simonsarris|8 years ago|reply
This is good advice, and "Go out there and build something" can be extended even to "Go out and be a developer in public." Blogging is way under-rated, so is (not mentioned by the article) StackOverflow.

I wasn't self-taught but did get a lot of interview offers this way (and job offers and book offers). Around 2010 I started answering questions on StackOverflow for the 'canvas' tag, which began because I had some questions and then realized lots of people had interesting questions of their own and I wanted to help. It got addicting in the way that playing with Lego blocks is addicting as a child. Just this strange urge to do it and to get excited about it, and its quite gratifying to feel useful.

Not a lot of people continuously participate, so if you do you stand out. All of a sudden I had a "public" developer persona, and I was getting recruiter emails (some very serious but most typically flippant) or just people emailing me questions personally even though I didn't really have any projects to my name. I wrote just a couple blog posts to help out with common issues, and then Pearson asked me to write a book. Sadly the book-writing crushed all my free time and it was actually the reason I stopped regularly participating on SO.

So you don't have to build anything to be taken seriously, you just have to be out practicing your craft in public. Blogging and answering SO questions are a great way to build some kind of presence and there are no barriers to entry.

[+] xupybd|8 years ago|reply
I like a lot of what the author is saying, but there is still value in learning the theory.

You can get learn a lot building your own apps, but then you're forced to learn some lessons the hard way. Sometimes you can avoid making mistakes by learning from someone with years of experience. You don't need to take a course, but reading can help so much. Books like The Pragmatic Programmer, Code Complete or Literate Programming can set a good base for thinking about your code.

Also to address the how self taught programmers get jobs, it's worth pointing out that the first question was from a 17 year old. I'd say it would be tricky at that age to get given a chance by an employer. So with time and age their employ-ability should increase as a factor of age alone.

[+] toexitthedonut|8 years ago|reply
That is how my experience was. If you don't go the often traveled route of getting a CS degree, you're a lesser known quantity. By that I mean, you are more uncertain from the eyes of an employer. You also can't easily measure yourself against CS graduates, nor can you leverage the kind of network you may have had if you had, say if you took that major.

Out of my 100-ish Facebook friends that I consider to know to some reasonable degree in person, only one is a software engineer, like me, and he lives very far away. Being self-taught is really hard, especially if you do not have any peers that you can learn from.

[+] thaumasiotes|8 years ago|reply
> the first question was from a 17 year old. I'd say it would be tricky at that age to get given a chance by an employer. So with time and age their employ-ability should increase as a factor of age alone.

Seriously? Who do you think is more employable?

- 17 years old; high school graduate; never had a job.

- 30 years old; high school graduate; never had a job.

If it isn't the second one, you're describing something other than "age alone".

[+] thatwebdude|8 years ago|reply
A common misconception with "self-taught" is that theoretical knowledge is always a black hole. This isn't true for music or development.

There isn't anything keeping you from learning the Lydian-Chromatic Concept, or how to fully understand the 12-Tone System in music. There also isn't anything keeping you from learning key fundamental concepts taught in Computer Science. The information is out there. And most information is free.

[+] cagataygurturk|8 years ago|reply
I want to highlight the difference between people who are self-thaught programmer but with engineering/math/etc. degree and people without any technical education. From what I see for engineers the life is easier even they did not study CS.
[+] EliRivers|8 years ago|reply
That's all very nice, but it doesn't seem to be answering the question "How do self-taught developers actually get jobs?"

It dances around becoming good and having a lot of things to point to to demonstrate being good, but doesn't go near the actual question.

[+] jasode|8 years ago|reply
>, but it doesn't seem to be answering the question

It seems the relevant "answer" is :

>To become a great programmer with very marketable skills, you have to build things and write code. [...] As you are building, save your work and put together a little portfolio on your website.

The projects portfolio gets people interested. I've seen some websites that showed off a project and on the webpage somewhere would be blurb like: "Btw, I'm also looking for a job in Javascript blah blah blah." And then the recruiters or hiring managers would email them because they were impressed with the work they saw.

[+] lr4444lr|8 years ago|reply
I think he's implying that you get it through an abundant portfolio and the ability to ace the "practical" kind of technical interview, but you're right, that needs to be spelled out. I imagine that very few people doing everything this guy is describing are going to get a job at one of the larger companies with a more rigorous vetting process where the gaps in the CS fundamentals are going to show. He should delineate the kinds of jobs these people will be strong for.
[+] SpoilerAlert|8 years ago|reply
My portfolio works for me. Then during the interview I really sell myself.
[+] thomastjeffery|8 years ago|reply
Learning to play is different from learning to write.

As a mostly self-taught guitarist, and almost entirely self-taught programmer, the most difficult thing, both in programming and music, is writing.

The main advice is always to keep creating; but creating what?

As a guitarist, I started out reading tabs for my favorite songs, and perfecting my performance. The most fulfilling experiences for me were getting together with someone, and improvising. Writing music is artistic, rather than functional, so improvising works.

Writing software is not art. You need a problem to solve before you can write anything. But what problem do I focus on? The hardest thing for me was always finding a project to exercise my skills.

Take SQL for example: If I want to learn SQL, and how to administer a database, I need data to put in it. I need a reason to query that data.

I need a purpose, however trivial, to implement software, just so I can practice implementing software. That is the hardest thing to find on my own.

[+] ptr_void|8 years ago|reply
I don't entirely like this picture of self-taught developer. A self-taught developer should teach themselves necessary theory as well, not just build things. Otherwise one will be biased towards learning only the things that are fun or easy (theory is seldom fun) - and there will be gaps.
[+] mattbgates|8 years ago|reply
What a beautifully written article. You explained me. You explained it well. I've never picked up a guitar, but I am a coder, and really, to learn anything, you have to at least be interested and wanting to learn. Most important, you could read a hundred books, but actually doing something with the knowledge is the only way to really learn.

I am a self-taught programmer and never had any dreams of ever doing it for a living, yet here I am, started off getting hired as a programmer for Visual Basic 6.0 working on autobody shop software. I eventually left that job ( http://www.confessionsoftheprofessions.com/the-opportunity/ ) and got a job working in web design for a media company.

I had taken a few college classes in programming and realized it really was mostly just theory and little sample designs. Nothing that I have really ever used or that helped me. Sure, I got a good grade.. passed the class, but that was about it.

Most code that has been useful has always come from me learning it myself. I tried taking a database course and ended up having to drop it because it just confused me. A few weeks later, I spent 3 hours teaching myself about SQL queries and adding, removing, editing, and deleting data. I completely understood it and that escalated me into actually making valuable web apps in which I am actually charging money to clients to use.

And as you said, "build and build some more" .. absolutely right! This is the project, a free web app, that got me started doing what I am doing: https://mypost.io

Solve a problem: I wanted to get a web page up on the internet in seconds without having to worry about registering for an account or having to share my email with yet another website.

Everything since then has only be escalating my knowledge and even helping me to enhance my code for the better.

Great advice!

[+] conorcleary|8 years ago|reply
"Generate URL" isn't working for me on your Create Post page.
[+] wcummings|8 years ago|reply
By applying? People almost never ask me about my education, I don't even include it on my CV anymore. If people are nitpicking education you've got a weak CV.
[+] flukus|8 years ago|reply
You're not wrong, but it's worth mentioning that employers care more earlier in your career. After a few years it's largely a non-issue, except for backwards places like banks and other large corporate environments.

Even at the entry level though, a lot of graduates can't handle the FizzBuzz test, a self taught person that can probably has a better chance in the job market.

[+] haspok|8 years ago|reply
Beware of self-taught people: there are diamonds in the rough, but in general, the problem is that practice does not make anyone perfect, _perfect practice_ makes someone perfect! There is a huge difference, and the problem is that people generally don't know what to practice and how to practice it - they may not even realize the existence of important topics!

Of course, there are exceptions to this rule, but the average person can save so much time and effort just by getting a basic education (learning about big-O, for instance). It does not have to be formal education however, just try to be around people smarter and wiser than you and pay attention to what they are doing and - most importantly - why.

[+] banachtarski|8 years ago|reply
Self-taught programmer (as well as guitarist) also chiming in. I take umbrage at this article as it is pretty much not the advice I give to anyone. You being self-taught doesn't make you off the hook for learning operating systems fundamentals, data structures, distributed systems, etc. You still need to learn it and not doing so puts a hard cap on your capability, in the same way that not understanding scales and modes, fingerings, and chord shapes will hamstring your abilities as a guitarist.

Build for sure, but don't neglect the fundamentals.

[+] analog31|8 years ago|reply
I'm a self taught programmer, but a formally trained musician.

My observation is that you can learn practically anything on your own, but some skills are so rare among the self taught, that one might as well assume they won't happen.

For instance, most self-taught musicians can't read sheet music at a useful level of fluency. That includes the vast majority of guitarists. Now there are plenty of playing opportunities that don't involve reading, and you'll generally do just fine, but if someone calls you for a gig that involves a lot of reading, you'll have to turn it down. Every town has a small cadre of musicians who enjoy this kind of work, and everybody knows who to call.

Also, some instruments lend themselves to self-teaching. The one that I play -- double bass -- is physically dangerous if you don't follow a "correct" approach, and most people who try to learn it on their own, give up in frustration. Guitar is a great instrument for the self taught. You won't kill yourself trying, and it pretty much makes a pleasant sound right off the bat.

As for programming, I use it in my job, but I'm not employed as a programmer per se. Programming is my secret weapon. I've never applied for a programming job. I work in a big enough shop, that if I have a theory question, or a problem that would really benefit from the opinion of someone who is steeped in theory, I just have to ask.

[+] bgammon|8 years ago|reply
I am a recent undergraduate. My undergrad CS major did not offer courses in line with my interests (they focus on data science, I focus on systems). The bulk of my working knowledge has come not from that program, but from the countless hours I spend reading at practicing at home.

Undergrad has given me credentials, and provided invaluable momentum to get me started, but over 4 years has acted as a hindrance to allowing me to become a strong candidate for jobs in the focus area I care most about.

[+] _nalply|8 years ago|reply
I am a self taught programmer who later made an engineering degree. The courses only told me the names of the concepts I already knew. This is in itself valuable because it gives you a language.

In my youth I found my first gigs by good contacts (in German «Vitamin B»). After that it was easy because of «official» experience.

[+] G3E9|8 years ago|reply
Answering the HN title, as a self-taught developer, I did some full-stack web development work (pro bono) for a small company and built my reputation up there over 2-3 months. From there that company introduced me to a staffing agency which has placed me in interviews with above-market offers (starting my next project through them soon!)

I have had no recruiters or clients question my lack of formal education (I'm 2 history classes away from an associates) except for a health care organization who's insurer required their workers (direct-hire/contractor) have a degree by their definition of being HIPPA compliant.

I've built relationships up over time and have proven myself to others that I can deliver and solve technical problems - really, they're sponsors... I mean, isn't that all a degree is, someone trusted saying you can do something?

[+] cdevs|8 years ago|reply
Here's the problem, thinking every job comes with a whiteboard test and needs you to know every sort algorithm as if you're going to build the next database. You know some Java and HTML and CSS? Great you'll either make it as a junior and become a awesome developer with those 8-9 hour days of new experience learning around other devs or you will flop. Maybe the question is how much does the industry generally tolerate as a junior dev? Forcing myself into the areas I hated or dreaded was what helped me the most. Realllly learn how the stack communicates.