I remember we started a thread on CS upper div classes but it never flushed out into anything.. so I'll start it back up.. Basically any info you can give about the specific CS upper div classes or CS upper divs in general would be appreciated..
And more specifically for myself, what would be a good first CS upper div class to take? I'll be done with all the lower div prereqs and I'm majoring in CS and Econ. Do most people take CS170 first because it's the only required upper div (for L+S CS)?
If you're planning on leaving academia, it's probably best to take the classes that will look good for summer internships; namely, classes, that have substantial group projects (i.e. CS 162 looks really good).
CS 186 looks excellent on your resume ("Ooh, they know databases well!"), even though it's a pretty worthless class. You learn how databases are made, which is quite tedious; of course, they also throw in SQL into 3 weeks of the course.
CS 170 is a very, very interesting class; I'm not sure if you necessarily need to take it first, though.
CS 150 is a good idea to take if you have an interest in hardware. It also has a substantial (in this case, quite the understatement) partner project.
I advise against taking CS 160 as your first upper division class, because it's more of a humanities class.
CS 169 looks good on your resume because it has a very large, real-world CS project, but you don't learn any core CS principles. So that's your call if something like that interests you.
By the time you're done with Berkeley, it's probably a good idea to have at least taken CS 162 (group project, many important topics covered), CS 170 (it's important to understand algorithms), and CS 186 (for your resume). Of course, that's completely up to debate.
I've taken: CS 150, CS 160, CS 170, CS 186
CS 170 has been my favorite, by far. And I thought I'd hate it...
Personally, I would say that if what you're worried about employment, then no classes will help you as much as just getting a part-time job doing IT or programming, even if it's a grunt job (which is not that hard to get these days, even if you have no experience). Hence, the "optimal" strategy would be then to just take the easiest possible CS classes you can find, and then just spend your spare time working.
That strategy really burns bridges for students who might later discover that they love research, as I did. I am very intererested in going into industry, but at the same time, am excited about getting my MS. If I followed your advice, that would never happen.
I agree that your strategy might make some sense for students who are absolutely sure that they want to go into industry without any further schooling, and are not interested in learning material for its own sake.
That strategy really burns bridges for students who might later discover that they love research, as I did. I am very intererested in going into industry, but at the same time, am excited about getting my MS. If I followed your advice, that would never happen.
I'm afraid that's dubious. The truth is, if you want to get into research, then far and away the most straightforward to do so is to simply get a research job, preferably one in which you will obtain a publication or patent. Classes are, frankly, only a minor factor.
Look. The truth of the matter is this. If you actually plan to become a researcher/academic, then you're going to have to learn a lot of things by yourself. This is especially so for true cutting-edge research for which, by definition, there is no established class, and probably not even a textbook, and hence you will have to teach yourself what you need to know. That's the lifestyle of a researcher.
Hence, I woud say that if you want to be a researcher, then my advice still applies, in that if you find that you need to know a particular topic from a class that you never took, then you can just get the textbook for that class and just read it yourself on your own time. Like I said, if you're really going to be a researcher, you're going to be spending your whole life teaching yourself things, so you might as well learn how to do so now.
Look, the truth of the matter is that a lot of engineering classes, whether at Berkeley or elsewhere, are just not well taught - such that, frankly, you don't learn that much more than you would if you just read the textbook and completed the assignments by yourself. Employers care far more about what work experience you have (i.e. summer work, co-ops, internships, etc.) than about your classes. Heck, many employers won't even bother to look at your transcript to see what classes you took. If you want to get into graduate school, then the best thing you can have is either a top prof rec, or a top publication.
I've been through the graduate admissions process to some extent, and I absolutely agree that if you're interested in doing research, classes are not enough.
I was responding to: "getting a part-time job doing IT or programming"
If you're interested in academia, that type of job won't help in the same way that research would (unless your research is programming).
And I was responding to your comment of 'if you're leaving academia'. If you're leaving academia, then it, frankly, doesn't really matter which classes you take, as long as you graduate with decent-enough grades to overcome whatever GPA cutoffs the employers are using. In such a situation you really should just get a part-time job doing programming or IT.