Do you need to go to school to learn programming?
May 4, 2009 – 6:52 pmThere was an interesting question recently on the Code Justin blog: Did you go to college for programming?, and how going/not affected you?
I already left a comment on it, but I want to put some more thoughts about that to this post.
My main feeling about this is that the answer is no, but also yes…
Learning it yourself
People who learn programming themselves and not in school are usually the ones who actually like programming a lot. From that I think we can already tell that if you keep going, you will eventually become pretty good - go to school for programming or not.
I think the advantages you gain by learning to write code yourself is that you gain a lot of practical knowledge. Because you write much code just for fun, even if the code does suck, you will get experience in developing different kinds of applications and how to solve problems in a practical way.
Another benefit may be that in schools they usually won’t let you choose the language you will be using. When you learn a programming language yourself, you might pick one that you wouldn’t learn in school, and that way you will already have an advantage, assuming you didn’t pick Visual Basic 4
The people who learn languages for fun on their own time also often learn more than one language, which again is a benefit. You may learn a language with a considerably different syntax or ideas (say functional programming), which will widen your understanding and teach your different approaches.
I think the biggest disadvantage of learning it yourself is that you will lack theoretical knowledge. By this I’m refering to things such as how to write good code, how to design object oriented systems, or things like algorithms and patterns.
Learning it in school
If you learn programming in school, assuming it’s not just some really basic course, you will often get knowledge heavily on the theoretic and design side of things.
You may learn an “academic” language like Scheme, and things like how programming languages and compilers work, language architechture and so on. Depending on the school there may be courses on using Object-Oriented languages “correctly” and not just as a wrapper for procedural code, databases etc.
Basically you will learn a strong understanding of how things work, and how to make things work.
The disadvantage here is that you won’t learn practical things and writing applications. You may know a lot about programming in general, but it may be difficult to apply all your knowledge in practice if you only have a formal education in programming.
Now, I didn’t go to school to learn programming, and I don’t have a university degree, so I can’t say all this for certain. I asked some people about what they learned and sounds quite right to what I thought myself about it as well.
Removing the disadvantages
So by learning to code yourself will give you a weaker knowledge of fundamentals and theory, and by learning in school you won’t be so good in actually producing working applications.
The way to learning theory yourself is by reading books, and maybe going to school if you can and want. It can also be useful to try to learn more “formal” languages like Java, for which there is more theoretical material available.
I got a lot better when I started using MVC frameworks and read books about design patterns and coding practices. If you have a strong practical understanding, it will be quite easy to shift your style into a cleaner and better one I think.
For those who have the education but not much practical experience, I think participating in an open source project may be a good idea. Of course, it doesn’t really matter as long as you’re coding something, but open source projects often have people with more experience working on them, who may be able to assist you.
Naturally, if you get a job in the industry, you will learn the practical things quite fast.
In the end, it doesn’t probably matter so much whether you have a formal education in programming or not, as long as you know what your weaknesses are and keep continuously improving yourself. I think this is especially important, as new programming languages and concepts emerge pretty fast and the technology keeps on improving.
Did you learn programming in school? Did you learn it yourself? What do you think?












14 Responses to “Do you need to go to school to learn programming?”
Personally I come from both an educated and a self-taught background. Although on a much smaller scale than yourself, or many of your readers.
I was self-taught until I reached a certain level, and then went to school. But it was only for a 2 year degree in website development. But that degree lead me to a university.
The point about logic, patterns, and best practices is dead on. Those are the things that get overlooked on a self-taught level.
Also, an often overlooked skill is explaining your code at a high level. I have been on many interviews that I totally bombed in because I could read the code to them, but I couldn’t explain it. Maybe it’s just me, but that was somehow difficult.
I say do both!
Scott
By Scott Radcliff on May 4, 2009
I learned and still am learning programming by reading books. Books related to security, OOP, design patterns, etc have helped me immensely. Being in the open source community has helped me quickly learn and use source code management( svn, git, et all), coding standards, unit testing and other development best practices.
I think once you understand how to get the information you want on the Internet, you can achieve pretty much anything. Mailing lists, IRC, forums, blog posts, podcasts, screencasts, recorded talks, manuals, API docs, presentations and events are available for free. There are also many free books online like Diving Into Python, SVN Book, etc. But you get good study material with commercially produced books.
By Sudheer on May 4, 2009
I can’t weigh in just yet on weather or not I went to college since this is the point I’m at now. I can however sorta put my spin on how I feel about this. I think that your pretty much right Jani. Self-taught programmers can be some of the most skilled programmers in the world but at least in the states some companies are very picky about having a college degree which scares me from self teaching. I’m worried that people wont take me as seriously my first 6 years. Than again if I start right now I will have 4 years experience instead of a degree and 40k debt. Just not sure if the overall earnings from a college degree will out weigh not having one in the end.
Looking back at that poll on the blog post it now has 100 votes and 52% went to college 48% did not. So it’s really close!
I’m still not 100% sure I’m going to college but at this time it seems to me like I kinda have to with the economy being so bad I don’t think I will be able to find any kinda of “trainee” position. I have looked but really haven’t found much or the ones I find require your currently in college.
Take care
By CodeJustin on May 5, 2009
Maybe I had a different schooling than most. But yes, I’m a classically trained Computer Scientist, and I HIGHLY recommend it to anyone wanting to get into the industry, for the reasons that you state.
However, I also didn’t see the disadvantages that you are discussing. At least at my school you DID get “practical things and writing applications”. After the first year, many of the classes revolved around you writing actual applications, sometimes of your own design, sometimes to match the course’s requirements. With the instructor looking over it, pointing you in different directions, and so on.
That to me, is what getting a CS degree is all about. You are learning the theories/algorithms/inner-workings of programming, while at the same time being shown how to apply them.
Of course, many people also went and got internships and/or summer/part-time jobs that enhanced that concept as well.
By Eli White on May 5, 2009
I earned my B.S. in computer science in 2004 and I think you are overlooking one huge point regarding a college degree which has nothing to do with programming. It is such a big issue that you will never understand what I’m talking about until you graduate. I say this because I didn’t understand it either when I went back to school at the age of 30, but I sure did when I finished.
College is not only about learning programming. It’s also about learning mathematics, science, history, and literature. It’s about learning how to spell correctly and write with good grammar. It’s about developing relationships with your colleagues and learning how to work in groups. Graduating from college demonstrates that you can start a project, stick with it over the long haul, and finish!
And that’s why I’ll never hire anyone without a college degree.
By Scott Lively on May 7, 2009
@Scott
Completely agree. While I do not have my B.S. yet, I did return to school and received an Associates before deciding to go for my B.S.. I have to admit that I learned many “little” things like the ones that you mentioned. And looking forward to learning more.
By Scott Radcliff on May 7, 2009
You’re very true with the “yes and no” answer: while I did learn programming I never thought I’ll end up using that knowledge - but when I did (do), I actually find it very helpful.
By deadcabbit on May 7, 2009
@Scott
Exactly, its not just about learning how to Program, its about learning how be BE a Programmer.
Someone with a self taught background may be an outstanding programmer (grain of salt), but I have no idea if he could make it in my team.
He’s very likely been a lone wolf, knows the language but not the concepts, not worked on any teams, and probably has the writing skills of a highschool senior (which being from California, that’s not saying much), and doesn’t have any “big scope” experience thus able to focus on a single class or function but not how it relates to a much bigger system.
That little piece of paper is worth a lot more than the paper its printed on.
By Daniel on May 11, 2009
Hey,
Interesting read.
I recently spent some time interviewing potential programmers to work on a project for our company. I invariably found the strongest candidates were those who had NOT done a CS major. Those that had done knew the wrong languages and had very poor programming practices (except in some few cases where they had self-learned out of class too).
Some of the CS people knew the theoretical stuff - but it was patchy (because the courses are crap and archaic) and I found that self taught guys were MUCH better at the theoretical side.
On the other hand the CS mejors were better at team work and management than the self-taught crowd (again that did vary a little).
IMO the very BEST combination of skills is a self taught *engineering* major (I may be slightly biased there because it is what I am :)).
But the reasoning is sound. They have proven problem solving and team working skills as part of their degree. They are quick learners (you have to be to do engineering). They also tend to have an extra-curricular interest in programming and programs and usually know a LOT more of a particular language.
The VERY best are Electronic Engineering graduates who specialised in the digital electronics courses (i.e. not analogue electronics) because that also covers a smattering of programming stuff too. If they can cram an advanced C-based program onto a PIC microprocessor they will have no problems writing good code for a PC.
So in actually fact I would say going to school to learn to program is a major disadvantage if you want to be a good programmer.
By Errant on May 11, 2009
I’m with Scott Radcliff. Learning on your own and going to school are both required to become a successful programmer.
Another thing that helps immensely is being an apprentice to someone. I always thought that programming was a bit more like welding and a little less like brain surgery.
The desire to program is what makes you do it on your own. Going to school hones your skills and lets you focus on doing things the right way.
Going to school also helps you learn how to work in groups, which is something another reader spoke about. I’ve noticed that all self-taught programmers have trouble working with more people than just themselves.
By John Rockefeller on May 11, 2009
While the points about not working well in a team are valid in my opinion, it’s not fair to say all self-taught are bad in that.
You don’t have to go to school to learn teamwork. You can learn it at work too.
Obviously if you don’t have any work experience, then it may be a different matter.
For the record, I don’t have a higher level formal programming education, and I would say I work quite well in a team and I enjoy working with others.
By Jani Hartikainen on May 12, 2009
@Jani
true, generalization comes into play here, but the point is still valid
but lets do a theoretical, if I took 10 College CS majors, and 10 “self taught” guys (girls? never met a self taught CS woman), and gave them a rough project outline, told them they can work together, and told them to give me a proposal by the end of the day, I’d get probably 2-3 groups out of the college people and could very likely wager the proposals they turned in have been proofread by someone other than the author, however I also wager you’d get 5-9 proposals out of the self taught guys, each “maybe” proofread by the author.
Now turn those proposals into RFP proposals, and the College majors are getting a nice fat contract from some enterprise/agency and the self taught guys are back to scraping Craigslist
By Daniel on May 12, 2009
I think we (or I) need to learn at school ,, I didn’t get the chance to have a good one to be satisfy with my knowledge but ,, and i agree with u about reading more theoretical books to more understanding ,, but if we have the chance to go to school it ‘ll be better ..
By K@R!M on May 12, 2009
Being good at programming, problem solving, math, science and related fields is mostly an inherited genetic trait.
People with high IQ’s having brains that focus on left-hemisphere logical thinking will always excel, having a degree or not.
Here is one example, who would you hire? :
Candidate A:
B.S. in Computer Science
learned programming for the first time in school
2 semesters of trainee internships
Candidate B:
Self-taught programmer
Mensa community member (~IQ 145)
12 years of programming experience
In my opinion, Candidate B wins hands down. People who learn programming at age 20, will never be better programmers than those who learned at 14.
Sure the B.S. gives some “certification” that the applicant has attended classes and done homework, but it tells me nothing about the person’s natural aptitude and intelligence.
IQ test type problems should always be part of the programmer hiring process, in addition of course, to a practical programming test.
By Cyril on May 23, 2009