<p>I'm currently a soph at Cal pursuing a physics and nuclear engineering path, but lately I've been thinking about switching to Computer Science. I've gotten interested in business and entrepreneurship lately and it seems that everyone wants programmers/computer people, while the demand for straight engineers like MechE, etc...is less. CS skills seem to be so versatile, I mean, every company is going to need skilled CS people regardless of what its doing, while not everyone needs mech/nuc/civ/w.e engineers. </p>
<p>When I was younger I was very interested in computer science and spent my free time learning all about it. I thought about become a specialist in the computer/network security field. Later on I became fascinated with physics and decided I really loved the pure, theoretical science more. However, since I am at Berkeley I figure I'd do myself a service by getting a "fallback" degree in case I'm not as brilliant in physics as I think I am. Honestly, it seems like CS-oriented engineering has more opportunities/money involved with it than if I stick with nucE. And although money is a factor, I DO believe that if I were to get back into CS as when I was younger I would enjoy it as well. </p>
<p>Opinions/thoughts from anyone in the know? Are there advisers I could talk to about this on campus?</p>
<p>well Berkeley is ranked very high for comp sci (for usnews it’s ranked number 1 tied with like 3 other schools) and its graduates make loads of money. Now is an especially good time to get into comp sci because it’s been ‘uncapped’ as people said, although that also implies a drop in salary in the near future for the graduates.</p>
<p>CS is an unforgiving field. It’s a unique field in that there is little barrier to becoming an expert; a university education in it is not correlated to success in it by any means. It’s also unique in that veterancy does not garner you job safety; an old programmer is worth much less than say, an old doctor or even physicist.</p>
<p>I guess my main point is it’s no cake to succeed in CS at Cal, nor is success in CS theory at Cal (or any university) much correlated to success in real programming. That’s my main warning.</p>
<p>Yea, thats another thing I am worried about. I feel like I’m so behind. When I was younger I remember thinking how easy it was to learn about computers on your own, with the internet and all, and I know lots of people who have been programming and such since the same age, without having stopped like I did. I know a lot of people who don’t even do that well in school (math/sci even) but are amazing programmers and know so much more about computers than most adults I know. Anyway, I don’t know how much that will affect my ability and performance if I decide to switch…</p>
<p>I agree that you should definitely take some prereq classes and try it out. CS 61 series is where to start. Many CS people love their jobs. Lots of software-engineering jobs provide great work environments, stimulation for creativity, and great pay. Society is growing increasingly dependent on technology-- computers in particular-- and the trend doesn’t seem like its going to slow at all. And that is the very nice thing about CS. It’s pretty much applicable in every industry. Just think about the role computers play in your field of nuclear engineering…</p>
<p>Well, difficulty isn’t so much what I’m wondering as the opportunities I would have with the different degrees. I’m sure NucE and physics are just as hard at Berkeley.</p>
<p>I think the CS education on campus is pretty useless. It’s very theoretical, focused on teaching algorithms, ideas, and abstractions than on actually practice with writing code. Unless you go into academia or private research, solid experience with large team projects will be more attractive and valuable.</p>
<p>In my working experience, I find those who’ve never had a proper CS education in college and who instead spent time developing an open-source application to be far more skilled at a programming job. However, they were far less likely to be hired than someone who managed to get a CS degree.</p>
<p>Also know that CS as a field won’t be too attractive for much longer. My coworkers at large firms have reported very low job satisfaction, salary stagnation, eroding skill-set, and age discrimination.</p>
<p>^^^^but isnt also better to understand the bigger picture rather than just the smaller one that involves simply programming. having both real experience and theory is better but if one had to choose i would think that theory would be better</p>
<p>crumja, your comments are a bit naive. CS is not about coding. If you don’t think that algorithms and abstractions are useful, you are highly mistaken. Saying the CS major is useless because it does not focus solely on coding is like saying architecture and civil engineering are totally useless because they don’t focus on just using hammers. Do you think that microsoft’s products are built solely by people who just picked up coding on the side? Complexity theory, algorithms, the discrete math, data structures, and so many other things are essential. A civil engineer doesn’t have to do go physically hammer and pour the cement. In the same way, a CS major doesn’t have to spend all his time coding.</p>
<p>If you want to write code, Berkeley offers myriad courses on different programming languages that you can take as a supplement to the “theoretical” classes.</p>
<p>CS is not about coding solely, or about computers necessarily. It’s about the information and computation.</p>
<p>
</p>
<p>Yes, because that’s representative of the whole, right?</p>
<p>I have to say that I somewhat sympathize with crumja’s position. The truth is, a lot of the Berkeley CS curriculum really isn’t very useful. There really are a lot of topics and classes regarding subjects that most practicing computer scientists don’t really need to know. </p>
<p>Now, I do agree that not all computer jobs are coding/programming jobs. But let’s face it. Most of them are. Most Berkeley CS grads are going to end up as developers writing lots of code. And that code will probably be conceptually simple, relative to what you will be forced to learn in Berkeley CS. </p>
<p>As a case in point, I know a highly successful software developer who graduated from Berkeley many years ago who said that he hasn’t used recursion in any of the code he’s ever written for his job, not even once. This guy isn’t some scrub; has been a key contributor on numerous successful software projects for a famous software company. Yet the vast majority of what he learned in the CS program at Berkeley is not used. </p>
<p>Now, in Berkeley’s (partial) defense, I should point out that I don’t think that Berkeley CS is any less applicable than CS at Stanford, MIT, CMU or any of the other top ranked schools. That’s just how CS is taught at the university level, especially the major research universities. The truth of the matter is, most CS departments, historically speaking, are outgrowths of the university math department, and many CS courses and hence taught in a manner analogous to math courses. Heck, at MIT (and other schools), many CS courses are math courses in the sense that they are cross-listed in both departments. But the truth is, unless you are actually going to be in that tiny minority of developers that are writing mathematics applications, you don’t really need to know that much math. For example, if your goal is to create the next Facebook or YouTube, you don’t really need to know a whole lot of math to do it. Granted, that math knowledge is useful, but you don’t really need it for most developer jobs</p>
<p>Furthermore, I don’t think Berkeley CS is significantly less practical than most other Berkeley majors (or majors at other research universities). Take engineering. The truth is, a lot of what is taught in the various engineering majors is also not very practical. In fact, when you think about it, you would be amazed if it were any other way. Many (probably most) engineering professors at the top schools have never actually worked as engineers in a full-time setting (that is to say, not just a summer internship or co-op, but an actual full-time, fully employed engineer). Hence, they don’t really know what skills are really required to become a successful engineer. Inevitably, they then force you to learn things that you don’t really need to know. </p>
<p>What I would say is this. If you actually have in mind a specific software project that you want to write, or especially if you want to start a company to launch such a project, you may well be better off just withdrawing from school and pursuing that project. If it fails, so what? You can just return to school. Yeah, you’ll be a year older and broke, but the fact is, most people of that age are broke anyway. But at the very least, you will have learned useful skills in both software development and entrepreneurship and you will have had a very interesting life experience, for at the very least, you will be able to tell yourself that you tried, as opposed to spending the rest of your life wondering ‘What if?’. </p>
<p>But then there is the chance that you will make it big. Like Bill Gates. Like Mark Zuckerberg. If these guys had failed, big deal. They would have just gone back to college. </p>
<p>Consider what Paul Graham said regarding Gates:</p>
<p>*I’d like to conclude with a joint message from me and your parents. Don’t drop out of college to start a startup. There’s no rush. There will be plenty of time to start companies after you graduate. In fact, it may be just as well to go work for an existing company for a couple years after you graduate, to learn how companies work.</p>
<p>And yet, when I think about it, I can’t imagine telling Bill Gates at 19 that he should wait till he graduated to start a company. He’d have told me to get lost. And could I have honestly claimed that he was harming his future-- that he was learning less by working at ground zero of the microcomputer revolution than he would have if he’d been taking classes back at Harvard? No, probably not.</p>
<p>And yes, while it is probably true that you’ll learn some valuable things by going to work for an existing company for a couple years before starting your own, you’d learn a thing or two running your own company during that time too.</p>
<p>The advice about going to work for someone else would get an even colder reception from the 19 year old Bill Gates. So I’m supposed to finish college, then go work for another company for two years, and then I can start my own? I have to wait till I’m 23? That’s four years. That’s more than twenty percent of my life so far. Plus in four years it will be way too late to make money writing a Basic interpreter for the Altair.</p>
<p>And he’d be right. The Apple II was launched just two years later. In fact, if Bill had finished college and gone to work for another company as we’re suggesting, he might well have gone to work for Apple. And while that would probably have been better for all of us, it wouldn’t have been better for him.</p>
<p>So while I stand by our responsible advice to finish college and then go work for a while before starting a startup, I have to admit it’s one of those things the old tell the young, but don’t expect them to listen to. We say this sort of thing mainly so we can claim we warned you. So don’t say I didn’t warn you.*</p>
<p>I tend to agree that Berkeley’s CS curriculum is pretty theoretical in nature. However, I don’t see that as a significant weakness, primarily because learning the latest fad is easy. If you just went through standard courses at Cal, you probably wouldn’t know anything about web programming, which is a pretty big deal nowadays. However, learning PHP, RoR, or whatever fad language is out there is easy to do. Having the foundation to do the hard stuff, however, is valuable in case you ever want to do something not so easy.</p>
<p>That’s how it’s going to be in many disciplines, in any school. There are going to be courses that you don’t really need for the job. How many engineers actually use multivar calc? Not many. How many linguists need to know about head-driven phrase structure? Not many. But knowing the theory is part of the field.</p>
<p>
</p>
<p>What’s your source on this? I really don’t think that most of Berkeley CS grads are going to end up doing the grunt work of coding. Sure, they might do some light coding to test out designs and such, but the real grunt work is going to be shoved on newbies, etc. Of course, Berkeley grads will be newbs at some point, but I’d say it’s likely that many of them move up. (I have no source for this speculation, though, except perhaps the career data collected from seniors.)</p>
<p>I’m not disputing that the education has value in terms of actually developing your ability to think.</p>
<p>What I am saying is that you can offer an education that is both ‘faddish’ (as you call it, although I would prefer the word ‘topical’) AND also difficult and hence mind-expanding. That way, you can have the best of both worlds. You will have developed rigorous method of thinking AND you will also be immediately employable at a very high salary, or be immediately able to launch your own startup company. </p>
<p>The point is, not all faddish/topical subjects are easy. Some are immensely difficult. Search engine algorithms like the Google algorithm are both highly topical and immensely complex. Berkeley or other CS schools could design courses that revolve around teaching those kinds of algorithms. I am quite sure that such a course would be immensely popular with many undergrads who are looking for jobs, and would also be quite rigorous.</p>
<p>Uh, I believe I made precisely this point in my post. A lot of what you learn in college, you will never use.</p>
<p>But I dispute that knowing the theory is necessarily part of the field. I suppose it all depends on what you mean by ‘the field’. I would daresay that most chemical engineers who’ve been in industry for years don’t remember how to calculate thermodynamic enthalpies or chemical fugacities. Sure, they knew it back when they were students, but they never use that knowledge on their job and that’s why they don’t remember how to do it anymore. Yet I don’t think anybody would dispute that these guys aren’t part of ‘the field’ of chemical engineering. Heck, you said it yourself: most practicing engineers never really use multivariable calculus. </p>
<p>Look, the point is, the definition of what is ‘the field’ changes all the time. For example, it wasn’t that long ago when the field of economics was just a a hybrid of philosophy and political science, with some sociology thrown in. Hayek, who won one of the early the Nobel Prizes in Economics, was basically a political philosopher with relatively little quantitative training (and in fact, many of his most famous works don’t contain a single mathematical equation). Herbert Simon, despite being a stellar quantitative thinker, won another early Nobel not for his quantitative pieces but rather for his entirely qualitative works on the sociology of organizations. His book Administrative Behavior, which was his UChicago doctoral thesis and became the basis of his Nobel Prize winning work, doesn’t have a single equation in it. Not even one.</p>
<p>Nowadays, the field of economics has become so quantitative that it has basically become a sub-branch of applied mathematics and applied statistics. For example, 2005 winner Robert Aumann is basically a mathematician (he earned his PhD in mathematics) and his Nobel was awarded for his highly mathematical work on game theory. The 2003 and 2000 awards were given to guys who are basically statisticians. Things have reached the point where, as former Chair of the CEA Greg Mankiw has pointed out, it’s extremely difficult to even get admitted into a top Econ PhD program without an excellent background in mathematics/statistics. Former Secretary of the Treasury Robert Rubin, who graduated summa cum laude in economics as an undergrad from Harvard and was admitted to the Harvard econ PhD program freely admits in his autobiography that he probably wouldn’t be able to get into any of the top Econ PhD programs if he had been born even just a few years after he was, because that’s when the economics discipline started to become highly quantitative. </p>
<p>The takehome point is, the definition of ‘the field’ changes all the time. For example, lately, there has been a strong pushback within economics because a lot of people feel that the field has simply become too quantitative. Similarly, I am quite sure that what you need to know within the ‘field’ of computer science can and will change over time. As well it should. </p>
<p>
</p>
<p>My source is simple: it is precisely that career data that you mentioned. Look at it: most of them are jobs that involve significant coding. </p>
<p>Now, I agree with you that many Berkeley grads won’t remain as newbie coders. But you said it yourself: Berkeley grads will be newbies at some point. Hence, they will end up as coders doing the grunt work of coding, at least initially. And of course, logically speaking, those who do well at that initial coding job will be the ones who will tend to be promoted upwards. But those who don’t do well will tend not to be promoted and in fact will probably be fired.</p>
<p>I don’t disagree with this, although I do think it’s a bad idea to design core courses around topical subjects (I’ll use your terminology). It’d be dumb to teach CS61A in the “latest” language because then we’d have to change the course every few years to adapt to the new “topical” language. That would be completely needless, since we could instead just offer some electives (e.g., the CS198 RoR course and the CS9H Python course) that hit that area for interested students (though in reality, learning it on their own in a week would be no problem if they understood the core curriculum).</p>
<p>
</p>
<p>That sounds much, much more like a graduate level course than an undergraduate level course. A very specific, highly complex topic meant for students interested in that area? That’s how I view grad classes, not undergrad classes (such as CS298-11, though there’s nothing wrong with an advanced undergrad taking that class). I think it would be fine to have a nice, comprehensive algorithms course in the undergraduate realm (e.g., CS170) that could use Internet search algorithms as a specific example. I don’t see a place for a course on Internet search algorithms in the undergraduate curriculum, though.</p>
<p>I think we’re getting a bit too much into the philosophical question of what the purpose of a college education should be. Is it to best prepare students to get a job in the industry, ignoring theory in favor of practice? Is it to teach a balance of theory and practice? Or is it to focus on theory only and let students figure out how to code themselves? It’s a pretty subjective choice.</p>
<p>I agree that the courses at a university should reflect current technology. For example, the EE series of courses shifted focus heavily from BJT to MOS technology over the last decade or so as industry shifted similarly. But I don’t see that as justification for scratching theory from the CS curriculum or adding needlessly specific or advanced courses to the undergraduate curriculum (unless you subscribe to the idea that the sole purpose of college is job preparation), especially since learning to be a code monkey is really easy (you don’t even need a textbook, just some free time).</p>