I have hired exactly one developer who was self-taught who did an adequate job.
I don’t mean that I am biased against developers who taught themselves a particular language, because, really, after you’ve learned one programming language it’s pretty easy to pick up another one. Once you’ve got down the idea of arrays, global vs macro variables, do-loops, initialization, etc. it’s pretty much the same concept in any language.
No, I am opposed to the people who have taught themselves to code online via something like Codecademy, Lynda or just by checking out library books. Don’t get me wrong, all of those things are great things to do and I have looked at all of them at one time or another. These are a great supplement, a terrific way to expand your skills.
My opposition is to people who have had no formal education, no coding boot camp, and no prior work experience. They have learned some programming statements, maybe even made a working application and say they are good to go.
Here is what people who are ‘self-taught’ have generally not learned because they are working by themselves, i.e., alone.
- Documentation. I know I’m the biggest hypocrite on this because it’s my worst flaw as a developer. One reason I write blog posts, both code talks here and at The Julia Group, on statistical programming, is to provide some documentation of problems I’ve solved. If you’re working alone, you don’t feel the need as much to document solutions. You are wrong about that, by the way.
- Version control. I’m actually good about this. If you are working with multiple people, you need something to control the changes, notify you if your changes conflict with someone else’s. We use SourceTree for this. I pretty much push my changes every time I get up from my computer. Other people in our company do it once a day. Most self-taught programmers I have met have zero knowledge of integrating their changes with others’ because they never have needed to do it.
- Integrating code. Self-taught programmers are the classic ‘does not work well with others’, not on a personality basis but in the sense of they have never had to get their code to work with scripts written by three different people. They have not had to think as much about local scope or not changing the style sheet called by five other people. This makes us want to kill them on a regular basis as they delete a class from pages because they don’t see what it does, without thinking maybe it was called in one of those scripts in the head.
- Lack of testing!! This is a problem with every new developer and self-taught developers are by definition, “new”. Otherwise, they would be experienced. When I test a new problem in one of our games, I test that it works when I get it right, when it get it wrong, when I leave it blank. I don’t just check if it goes on to the next part of the game but I also check if the answer was written correctly to the database. I test it in multiple browsers. Then, I assign it to someone else to test on multiple operating systems. (I can do that because I’m the president of the company. If you aren’t, then you should be testing it on multiple operating systems yourself.). I looked at it in the debugger and it did not show any errors is not testing!
What should you do if you are a ‘self-taught’ programmer who wants a job? My suggestion would be to get some formal education. It doesn’t have to be graduate school or a coding boot camp. (Although if you are looking for a coding boot camp, I can recommend Sabio ) You could also take classes at a community college.
Hackathons don’t impress me, no; not even if you won something, but that is another post.