Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
How do self-taught developers get jobs? (2016) (brianknapp.me)
85 points by _qc3o on May 14, 2017 | hide | past | favorite | 75 comments


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.


> 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.


>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.


If "you're creating value" there is going to be some sort of network. It can eventually get to the point where you'd wish everyone would just shut up (a pretty common open source Dev complaint).


Few people start out with a good network. You need to meet people. If you live in an area with a lot of software companies, there are probably going to be meetups, clubs, and that sort of thing.

I got into the field by working at a startup in a nontechnical role and transitioning into the engineering department after demonstrating that I could code and helping with some minor projects. I know several other people who went that route, and I think it's viable at startups, but not at large companies.


I already have held four different jobs as a web developer and still have no good network. See my reply to "developer2" for more details.


I got my first developer job the old fashioned way: sent in a résumé, went in for an interview, and was hired. I did not know anyone at the company, and was not referred in any way. I got very lucky in that this process worked on my first try. It was, and can be, that simple. The trick is to have realistic expectations. You're not looking to impress anyone with the name of the company or your salary. You're looking for someone to open an initial door for you that will lead to future opportunities.

First: the company. Aim for small companies with fewer than 30 employees. Avoid larger companies, who have faceless HR departments and rigid hiring processes. You want a tiny company where interviews and hiring decisions are performed by your peers - senior developers and team leads, rather than managers. You want the person who holds the hiring power to have a chance to put themselves in your shoes, and see your future potential rather than what you can bring to the company. You're hoping they take a risk with you, and to a certain extent you're trying to provoke a pity hire.

Second: the interview. When asked technical questions, answer to the best of your ability. Be willing to admit you don't know, instead of spewing nonsense. Hint: "Hrm, I don't know that one... yet." Know beforehand what programming language the company uses, and have a basic working knowledge. If asked to do a coding test, you must be able to give it your best shot. I didn't finish the test I was given, but the logic I had put down was sensible and headed in the right direction. It was enough to give the impression I had a technical mind and, more importantly, that I was able to begin working on a task.

Third: salary. Prepare to be disappointed. My first job's salary was ~40% the market rate of a junior developer. You could say the company was "taking advantage of me", but they were a) taking a risk hiring someone without experience, b) paying me three times what I made working as a Walmart cashier, c) giving me my first step into my preferred industry, and d) giving me experience to put on my résumé.

Fourth: once hired, stay with the company for a minimum of two years. Do everything in your power not to duck out earlier. You really need your résumé, with its single entry as a developer, to hold some weight. Once you have this, the number of doors that open up will give you a choice of where to head next. You may never have a realistic shot at a company like Google, but you will be paid market rate.

tldr; Start with small companies, where you will be interviewed and hired by senior developers and team leads instead of managers and an HR department. Be willing to start at low salary. Your first company is about gaining experience for your craft and your résumé, not to make money.


First things first: You talk as if I am just starting out my career. I don't know how you arrived to that conclusion about my job experience from my my last comment- I didn't even state my experience there. I simply stated that my network is lackluster.

I have worked in multiple small (~20 employee) companies, most for over a year and a half. I have 8 years of total experience as a web developer. During that time I have not made any reliable long term contacts that can refer me to any relevant work.

Second, ALL of my past jobs have paid 40-50% of the local market rate. Each one I have earned more money, but it's still well below average for the large Midwest city that I'm in.

Every few months I return to Facebook, post to my feed so friends can see, announcing that I'm still looking for work and if anyone knows someone looking for a web developer. Usually I get no replies.

So you see, even with my years of experience, I have been unable to rely on a network for jobs, and recruiters have also been ineffective.

Now, with this new information I have given you, I am more curious to see what you would suggest, as something more tailor-made to my career experience.


Have you tried getting out and focusing on building your professional network? Go to meetups and meet people. Contribute to existing OSS projects and earn respect from the other maintainers. Reach out to people in your local industry and ask to buy them a coffee.

It takes work and time, but that's how you get a network.


I'm going out on a limb here, but perhaps it's your attitude. It comes through very clearly in your post, and likely a lot more so in person.

I've interviewed dozens of people over the years and the easiest way to be disqualified is to come across as being difficult to work with.

I understand your position, and your frustration, but I'm sure you could have found a more pleasant way to phrase what you said above.


I definitely took the OP's article as the baseline to fill the context gap in others' comments. OP is 17 years old and just starting out with their professional career. I combined with your "as someone who has no good network" to mean "As someone who is starting out, who has no good network, ...". I apologize for the assumption. The advice still stands for others who are looking to get a foot in the door of their first company. :)

Have all of your jobs been contract-based? That really sucks, I cannot imagine having to worry about contracts not being renewed. Fixed-term employment contracts almost don't exist in our industry where I am. I'm sorry you have such a hard time finding companies looking for stable long-term employees. Random tip that might be helpful with your next job hunt if you're not doing it already: never answer the question "how much were you making at your previous employer?". Tell them how much you want to make NOW (+ $5-10k/yr padding) and negotiate down from there. You're instantly setting an artificial cap in their minds once you admit to how little you were willing to settle for previously.

As for climbing the salary ladder if it doesn't happen naturally over time, I'm not entirely sure. There is one truth I can extract from your comment, based on discussions with coworkers over the past decade: frontend devs have a tougher go at things, and me being a primarily backend dev looking at the work frontend devs do, I don't understand why that is. Backend devs seem to be appreciated more, and I agree that it's nonsense.

One loosely composed answer is that backend devs form a circle jerk of touting our profession and work as important, and we demand proper compensation to match. The personality traits of the frontend devs I've met are less aggressive on the whole. As in, on a personal and professional level, frontend devs are much nicer people. Perhaps the industry translates this to mean "pushover", and is taking advantage?

A better analysis would be that the industry hasn't caught up to what it means to be a frontend dev today. 15-20 years ago, learning HTML, CSS, and early JavaScript was not a difficult task. Every backend dev was also doing everything for the frontend, so a "frontend-only developer" would have been seen as someone worth less than a "full-stack developer".

As of 7-10 years ago, this has all changed. There are very few devs who are truly "full-stack" anymore, to the point where the ones who claim to be are mostly liars, carrying their outdated knowledge of HTML and CSS from 1995 as if they are marketable skills. Today's seasoned backend devs are rarely well-versed in everything CSS3+ and HTML5, let alone ES6, Canvas, WebGL, and all the tooling (css preprocessors, grunt, gulp, webpack, frameworks with build processes, etc.).

In the distant past, frontend work was a nice-to-have addon for backend devs to have in their toolkit. Today, they're completely separate disciplines, and the pay should reflect that fact with equal pay for both roles. An expert frontend dev today is absolutely worth the same as a backend dev. The industry needs to realize this truth and fix the salary gap. A developer is a developer, is a developer.


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.


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.


Yes - I think to expand upon my post above and your excellent reply, it all boils down to "context matters".

I think learning theory and concepts (in both guitar playing and programming) is far more interesting to me when applied to 'real world' situations.

Basically, instead of learning and memorising the various keywords of, say, SQL, if you gave a student a dataset with several tables and thousands of rows of data and said - "Now extract X for me from these tables", then they will see that there are several ways of doing so, with different benefits and downsides.

Similarly, if you gave a guitarist an unusual chord progression with, say a diminished or minor chord in the mix and said "Work out a solo that sounds good over that", then there will be some interesting learning in there without having to memorise every single scale that they could use. Many ways of coming up with a solution to the problem.

Another anecdote that relates to my favoured method of learning - When I was in high school, I disliked trigonometry, and never really got to grips with soulless diagrams and charts on the page. But when I graduated and went to flying school, and had to learn spherical trigonometry (several fiendish levels harder than standard trig) in the context of learning navigation on a globe, I absolutely fell in love with it, and indeed I think the first time I ever got 100% in a maths test was in one of my first spherical trig classes at flight school.


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"...


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.


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.


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.


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


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.


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.


> 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.


Ya I understand that, if you can get in the door. Those same companies are also the ones I've found more likely to automate rejections of applicants who can't check the right boxes though, making it harder to get in without experience.


This is true, I guess networking is key here - I got into that kind of company by reporting a bug on their website and explaining it over coffee with one of the tech leads. Hired the following week.


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.


Thats a very good insight that didn't occur to me right away actually.. Android dev has lots of opportunities in general.


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.


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.


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.


> 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".


To be honest 17 is very young. I'd employ neither, without something that blew me away. I don't know that making that comparison is really relevant.

30 years and no work history implies some problem that has prevented them from working.

17 years implies a lack of life experience and likely a lack of soft skills. Once they hit their 20's however they're going to be less of a gamble, regardless of their work experience.

So yes at some point too much time will have passed for them to become more employable. But I was only thinking in a sub 5 year term. More as a means of encouraging someone in that situation, not as a hard and fast rule, that the older you are the more easily you're employed.


Hey, whatever you like! Who's more employable?

(1a) 17 years old; high school graduate; never had a job.

(1b) 22 years old; high school graduate; never had a job.

Or, if you prefer:

(2a) 17 years old; college graduate; never had a job.

(2b) 22 years old; college graduate; never had a job.

I submit that in every case the 17-year-old is more employable.


How would you go about finding a 17y/o college graduate in the first place?


I'd disagree, the 22 year old in every case to me.


You wouldn't wonder what he's been doing for the last 5 years?


Yeah I would wonder, but it wouldn't automatically raise concerns. I'd imagine that the unemployment rate for that demographics is relatively high. 22 is still very young and I'd not be surprised if many had not yet had a professional job at that age.

Perhaps my views are not typical, but I find a lot of maturing happens in late teens and early 20's. I might be jaded but I find people get significantly easier to work with when they hit mid 20's. There are many exceptions to this however and not all people mature at the same age.


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.


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.


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.


>, 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.


> The projects portfolio gets people interested.

No it doesn't. My portfolio that I've been adding to for the past 10 years doesn't get me any offers at all. You get offers by networking and making buddies with high powered people.


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.


I agree even though there are several ways, having a portedolio is the best.

The first method I personally used was to work for the guy one week with ludicrously low pay. He said yes at 7$/h, but I would have gone down even more. This kick started my carrier enough to not worry about searching for jobs anymore.

Second method I employed to get to the place I wanted to be was to build something that would impress them and publish it. It took 2 years and it worked.

This is all anecdotal but it worked for me.


You can still ace the theory.. plenty of online courses that emphasize the fundamentals... without a degree you will trade at a discount at first. But that's moneyball. Plenty of companies will hire you if you know your stuff. lots of levels to this. Don't sweat the small stuff. Work hard, learn, apply. Know your algorithms and data structures.


My portfolio works for me. Then during the interview I really sell myself.


What does a developers portfolio entail? I'm a motion graphic designer and when I apply for jobs I send a demo reel of my work. Which is a 1 minute video with snippets of my best stuff set to music. Is there something similar developers send along with resumes?


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.


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.


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!


"Generate URL" isn't working for me on your Create Post page.


You have to enter something into the headline. If nothing is entered, it automatically pulls from there.


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.


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.


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.


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.


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.


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.


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.


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?


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.


The essential building brick of programming is the function, simply because -- unlike the class/object -- it is also a perfectly valid basic building brick for a turing-complete axiomatization.

Once you know this, you can [1] search for existing functions [2] compose new functions [3] and debug them, in order to solve the particular problem at hand.

Is that what you learn at school? No. Never.

At school, you will not do any deep sea fishing. You will only read about deep sea fishing. So, someone with a degree in deep sea fishing, is not a deep sea FISHERMAN at all. He is an avid deep sea fishing READER.


My education has never got me my foot in the door, my reputation and demonstrable open source work has. Education was really only due diligence after they wanted to hire.


As a self taught front end developer, I got my first job as a paid internship after narrowly missing out on the original job the interview was for. It's an odd story, but it worked out none the less. Personal connections helped a bit too, especially since my second job was gotten purely because I knew someone working at the company (well, running the company) and it turned out they were hiring for the exact job I needed.


Although I have a Computer Science degree, which I value, I am mostly self-taught when it comes to my career as a programmer.


Another option is to not work for somebody else. Write your own apps (I would do iOS because Apple customers seem to be more willing to spend money for apps). Maybe you will get lucky and one of your apps will go viral; then you will be on easy street.


As a self taught guitar/piano player, programmer, and investment trader I couldn't agree more. I learnt by reading and playing/coding/investing as much as I could when I could.

As to how to get a job as a self taught anything? Being persistent.


networking. finding a person that knows your work personally that is willing to bring you on for an interview. or craiglist. or that odd recruiting analyst that actually looks at your github and realizes that you can code


I'm a full-on autodidact. I've never seen a college campus, much less been in class. I should be, by all definition, for this article. I play guitar and program. How good vs others is a matter of opinion.

I hate the short-cut analysis that this response gives. I hate it when people confuse classical training for do-it-yourself learning. There is simply no excuse for not knowing the theory, and sadly many autodidacts feel like dismissing theory is proper justification for self-baked learning, and I'm sorry, this is not true. It's pure laziness, especially in a day and age when so many excellent books are on the cheap, and even MOOCs are available that really drill down and challenge you to rethink your own IQ. Even if I've never actually used DFS or had to build my own hash table, the ideas have been incredibly valuable to know about. These are all components of proper design and thinking.

I'll say it bluntly: You CANNOT play guitar well without learning the underlying theory and you CANNOT program well without learning the theory of what you are doing. Yes, I know people point to famous musician X who knows no theory, but they do know more than absolute zero. They are, more often than not, saying they don't know enough to teach it, but they certainly know it. Even Hendrix knew his scales and proper chord progressions.

Yes, you can sort of BS your way into something resembling knowledge, but the problem is, if you can't use language to describe why something is good or why it works, you are guessing, pure and simple.

How do you find a job as an autodidact? Well, the main problem we all have is that we simply don't know where we are in the pecking order. We sit in interviews and don't really know how to describe why we are better than a college grad (to be honest, we probably aren't).

For autodidacts, it is probably easier to get contracts or build our own businesses.

The language for a contractor is "I'm able to do this and this is what I charge," as opposed to "I'm able to do this better than the other 8 people you are interviewing." Contracting is a much easier sell. If you have a convincing project, then you are good to go, and that's all you really need.

A business is the same language as a contractor: You are able to do this and you are good to go. Post ads, open a paywall, whatever. There is no asking permission to work, just do it.


I'm self taught by most accounts, but I have a 4-year degree. I think it's a curious predicament I'm in, because part of the curriculum is "web programming but not really Computer Science". The major I took doesn't even exist in that college anymore- it had a name change and major curriculum overhaul. I think it felt the throes of trying to teach by the tool, which is a big problem in a fast-paced field like web development.

In short, my degree was very "bootcamp-y" in nature, in a decade before coding bootcamps became very popular. Even worse, I think bootcamps have made a lot of my 4-year degree obsolete.

I got a few jobs at mom & pop places, I've consulted for a media agency, and yes, most were indeed contract jobs. But these jobs are not stable as working for a major tech corporation. And these are not places that allow me to really refine my engineering skills and learn how things are developed to a large scale. Building websites for clients that do not intend to grow on a national level are what you'd be limited to if you don't learn the theory behind programming.

However, I have no interest in building my own agency business. I'm a very technical guy through and through. I am an autodidact with a dilemma in which I want to follow the mainstream career path of a CS graduate. One that is marked by working as an engineer reputable companies and connections in these companies. But trying to do that with a self-taught background and with no friends that know me well enough to refer me in a professional capacity, it's been a very rough road.


Equating learning programming with learning a musical instrument was an interesting take. Like most analogies, it fits in some ways and doesn't in others, but the ways that it fits ring quite true. Programming is in large part an art and an act of constant 'practice'.

A lot of us divide into two camps - "self-taught is better" or "university is better". In interviews I've ran in the past, I've often been an advocate for lesser considered candidates that lacked formal degrees but showed exceptional understanding of the craft. I've also been on the side of devaluing the degree of a person due to their lack of experience or quality code that demonstrates their practical abilities. Self-taught programmers can lack some of the foundation of software craftsmenship, but not always. It usually just depends on how long they've been at it and what their exposure is to large projects. The self-taught tend to start out like self-taught musicians -- "do first" then learn the specifics later...if they're needed at all. Unlike a musician -- who might be able to get away with never learning to read music or understanding anything about music theory, it's not possible to design a supportable piece of software without understanding major core concepts of computational theory, or design practices like 'SOLID' and the Single-Responsibility Principal. The moment you have to extend a large program you've written, you discover these mistakes and tend to start learning them.

Here's the thing, though. Self-taught programmers get jobs the same way as everyone else because we're all self-taught. The moment we leave University, our skillset and even parts of computational theory, become outdated (or maybe our skillset was already outdated due to the choice of technologies that the school decided to use)[0].

Regardless of being self-taught or University trained, I look for people who can demonstrate a constant state of learning. I like a candidate who knows the language I'm targeting for a job, but comes in talking about a couple of other languages that they're poking around with and find interesting (as well as understanding why they find them interesting). Way too often we'd get University graduates who clearly chose Computer Science because someone told them that those jobs pay well[1]. They had little-to-no passion for it, had no hobby-projects[2] and had nothing to show me that would demonstrate an ability to actually write code in the language we were seeking candidates for. On the two occasions we landed a candidate with no formal education in software development, I advocated for both of them (with strong disagreement from the other interviewers)[3].

[0] I often joke that anything I've written six months ago might as well have been written by someone else... someone else who doesn't know what they're doing. Part of that is because I strive to hone my craft. I want to feel this way about old code. But there's another side to this phenomenon. If I study the code carefully, my biggest complaint is usually that I've chosen an overly complex approach when there was a much easier way to do something. Further investigation usually yields that this much easier way only became possible shortly after or during the middle of the time that the majority of this code is written due to features being added to the language or runtime that weren't there previously. I'm not sure there's another industry where I can look at a product and think 'that design is just ... ugly' when it was cutting-edge 6-months ago ... maybe hair-styling?

[1] Part of this was that the only job I had where I was regularly interviewing candidates was for a somewhat non-sexy IT development position at a large company who's primary business wasn't technology. It didn't naturally attract passionate programmers looking to solve interesting problems so we got the candidates that were probably the most appropriate for the job we were posting.

[2] And by none, I mean literally no code to show me. I wasn't even expecting them to come with a few GitHub repos of personal projects -- A blog post describing something related to programming, a Pull Request to another person's GitHub repo or even a single Stack Overflow or a programming-centric forum of some kind would have been nice. Nope. And since I refuse to do white-board coding, that pretty much disqualified the candidate.

[3] The first was somewhat reluctantly hired due to my persistence. I made the argument and backed it up with the code the candidate had showed off in the interview -- personal project code that was written very well. He was such a successful hire that I ended up doing many later interviews and the second time this issue came up, the candidate was hired on my recommendation without the required persistence. Both quickly became senior developers. Both, also, left after a couple of years for more interesting work.


> 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.

Or, in some fields, you would learn nothing at all, because you would hit a brick wall of your lack of understanding basic concepts that are taught in some of the classes you've dismissed in the article.

Though most of the fields in IT are reachable by people without external training.


> because you would hit a brick wall of your lack of understanding basic concepts that are taught in some of the classes you've dismissed in the article

Ehhhh, it is possible to learn just about anything on your own if you are interested enough. I have a coworker who didn't go to college but who has been working through those little yellow Springer-Verlag math books for fun for 30 years, and is thus our first go to anytime some weird theory questions comes up.


> Ehhhh, it is possible to learn just about anything on your own if you are interested enough.

Not really. There are several fields that have two types of learning material available: most basic and trivial stuff only good for showing off at parties and academic books and papers, too difficult to learn from without guidance. Unless "interested enough" means "you're ready to put in enormous effort".

> I have a coworker who didn't go to college but who has been working through those little yellow Springer-Verlag math books for fun for 30 years

Of course there are exceptions. Who do you think developed all these fields if not untrained researchers?


> Not really. There are several fields that have two types of learning material available: most basic and trivial stuff only good for showing off at parties and academic books and papers, too difficult to learn from without guidance.

Do you have an example? I can't think of anything in my field, computer science, that can't be learned by self-experimentation and reading.

A good example of more hands-on science learning would be Cody from Cody's Lab who has claimed to have done similar experiments dating back to his early teens in highschool before he started his college education.


Cryptography is one prominent example. Modern compilers would be another (though an amateur can go here a little farther than in others, because of parser generators and such). Operating systems more sophisticated than a toy-grade proof of concept is yet another. And writing (again, non-toy-grade) databases. And formal verification of programs, this is hard to learn on one's own, too.




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: