Do you really need to take classes in CS to learn how to program?

<p>With the vast number of online resources available (codeacademy, udacity, APIs), I feel that one could learn how to program decently without taking official classes. I’ve certainly learned how to program through that route, and I feel that this DIY way is more efficient than taking official classes. </p>

<p>Sure, there are some great professors in the CS department like Sinclair and Hilfinger, but is it really necessary to to take university-certified CS classes to become a top-notch Google software engineer?</p>

<p>For some people, a physical class is better than an online class because you have greater incentives to not procrastinate or quit</p>

<p>I think being in class definitely works better… I spent a lot of years learning on my own or out of textbooks, and it was stressful. There were a lot of things that I used to do the long way, or simply didn’t understand why some methods were better than others. Having formal instruction means learning how to do things the right way. It also means you learn things beyond how to just hack code together. In 61C, you learn about how to access assembly from C to make your code run 10x faster. In 61B (and later 170) you get introduced to Big O notation, and what different measurements of efficiency mean and how to calculate them. Sometimes, when you’re learning on your own, you find something you don’t understand, so you can kinda just skip it and go do something else. Being in class forces you to learn things correctly and thoroughly. Also, especially at Berkeley, all the tricky projects and being surrounded by so many people who are smarter at you simply makes you a better programmer. </p>

<p>Can you learn to program on your own? Sure. Is it the same (or as good) as being a CS major? Not even close.</p>

<p>It depends.</p>

<p>For most people, taking CS courses is more effective at building up the foundational CS knowledge that will be helpful as a base for future self-education. But some people can effectively self-educate CS from the beginning.</p>

<p>Do you need to take CS classes to learn how to program? Of course not, just watch Coursera, Udacity, Code School, etc… </p>

<p>But can that replace getting a CS degree at Berkeley and get a job at a cutting-edge job at a tech company? Nope.</p>

<p>That being said, taking classes at Berkeley gives you a great foundation in your CS career. I’ve taken online classes and found it to be a lot easier with the knowledge I gained in the 61 series.</p>

<p>Now, is the DIY way a more ‘efficient’ way to get a job at Google (or any other big tech company)? No, it’s not. Google looks for generalists and for people who have a great grasp in their fundamentals (data structures, algos, etc.). They aren’t necessarily looking for students who know Rails inside and out. They’re looking for students who possess the talent to become great software engineers because of their thinking process which they acquired in taking rigorous classes in the University-- not in a 5 minute coding exercise in Code School. That being said, a CS student has more of a potential in the long run rather than the DIY hacker. And that is precisely why Google would rather invest in those kinds of people.</p>

<p>Of course you can learn programming on your own. There are many people who have become good programmers in high school, or even middle school. However, a degree in CS (at least from Berkeley) has very little to do with programming. Programming is only used as a <em>tool</em> to teach you the important concepts. How to use memory wisely, how to scale systems vertically and horizontally, which algorithms scale and why they do or do not, how to approach certain types of problems, etc. Companies are Google are looking for people with this knowledge, not people who are “good programmers”, because that’s a given.</p>

<p>Can you learn these concepts on your own? Sure you can, but it’s a bit more difficult. The material online is more limited (though Coursera already has a great selection). You could also read the relevant books and papers. However, in that way, you could learn any subject on your own. Unfortunately there isn’t (yet) a good way to “proof” that you have truly mastered the concepts, that’s what the CS degree is for.</p>

<p>Also (sorry for the double post), above all, top companies are looking for smart people that are able to pick up new concepts quickly. If you have done well in your classes at Berkeley there is a good chance that you are pretty smart. Both the material and the competition can be though. There isn’t really a way to prove the same using self-study. The only exception to that are extraordinary cases, for example if you have written a widely used software, started a famous company, etc.</p>

<p>Thank you everyone for the helpful replies. </p>

<p>@Thomas: what would you say the most important concepts are?</p>