There 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?