Ask HN: Your opinion on self-taught programmers?
Some time ago, I wrote a little post on my personal blog titled "Self-taught vs formal education in programming". You can find it here: http://bit.ly/12131O7
To my surprise, the stats of my blog exploded. Even though I didn't get many comments, I received quite a few e-mails asking me how to become a self-taught programmer. Today, I posted what I think is a very valid path, for anyone with the drive and passion, to learn: http://bit.ly/1246qMU
I am very interested to know what's your take when it comes to self-taught coders. Are you one of those? Have you hired one? Do you think self-taught ones are not as good as those with a formal education?
21 comments
[ 2.9 ms ] story [ 58.6 ms ] threadI think self-taught or not is not the question. The real question is, are you passionate about programming, or at least about creating things via programming. There are a lot of people who have taught themselves to program as a means to an end, and I think that makes them "better", in some sense, than someone who started their CS degree in search of a paying job without ever writing a line of code.
Of course, the above is very binary, and as comfortable as we programmers might be with that, (and if I may issue a blanket cop-out at the last second), I think "self-taught" is a small facet of the whole that makes a "good" or "bad" programmer.
I can't agree more but I know there are many who believe the exact opposite and think that only academic education can turn someone into a good coder.
That one hurt. Some say it's easy as pie even for a kid, some say it's so complex with all the layers going on. Why can't we never see it as it is?
I also firmly believe that anyone who thinks web development is easier than any other kind of application development should stop writing crappy PHP and improve the quality of her/his own work.
The web is just the interface. What's going on behind the scenes varies on the application. The parent made an extremely broad generalization.
Edit: that wasn't a knock at you, but I am often surprised at some of my smart friends who don't know how to use it, as in not knowing that the dash in front of keyword will eliminate those results.
The key problem with being self-taught is that it is up to you to find the things you should be learning. It is very easy to miss whole topics that may be interesting or enlightening, or may even change how you think about programming. Here is an example of something I would never have known without a formal education:
https://en.wikipedia.org/wiki/Logic_programming
It is easy to gloss over it, but this is a completely different way to think about programming. You might not see it used much in the real world, but it opens your mind to a new way to think about problem solving and can help a lot in understanding other things (like model checking or natural language processing).
There is also the matter of understanding certain abstract concepts that are very important in both theory and practice. Asymptotic analysis comes to mind here, though even a lot of people with formal educations seem to have trouble with it (probably because they thought their theory courses were a waste of time). Algorithms and data structures are also prominent examples of things that are easy for self-taught programmers to miss, especially those that are not included in their favorite languages' standard libraries.
All-in-all, I think the best programmers are those who have both a formal education and who can and do learn on their own. Self-taught programmers usually know their language of choice at a deep level; coupled with a formal education, you can do a lot.
I wouldn't be so sure about that. I read a blogger who wrote that CSS was a declarative language. Curious, it wasn't 10 minutes later after looking at various programming paradigms on Wikipedia that I was reading about Logic Programming.
As you mentioned, one problem is that you wont have the direction. I think some other problems that are often overlooked is that you wont have the drive, or the time.
When you're in college, learning is your full time job. You have deadlines and requirements for that learning. All of your time is dedicated to it.
If you try to teach yourself these things while working, are you really going to be as dedicated to it as a student can be? In practice, I don't see this happening.
Another complaint is that you're not learning the applied skills you'll need in the industry. My view on that is that you have your entire life to work and learn the tools of the trade. You only have one real chance to go to college and learn the theoretical stuff.
If you're burnt out on school, by all means, take a few years off, see how the working life is, save some money. But before long you'll have more responsibilities, maybe a family, and no time. The longer you wait, the harder you'll have to work to go back to college.
Unfortunately there are lots of university trained "software engineers" who can barely compete with your average self-taught programmer. So in terms of getting a job it depends on the company's hiring and evaluation processes. Typically big corporates want degrees and many startups look at what you've already accomplished.