CS Upper Divs

<p>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..</p>

<p>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)?</p>

<p>I will be joining Berkeley in the Fall and I'm thinking of taking CS170 then, so I'd also like to hear your experiences.</p>

<p>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).</p>

<p>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.</p>

<p>CS 170 is a very, very interesting class; I'm not sure if you necessarily need to take it first, though.</p>

<p>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.</p>

<p>I advise against taking CS 160 as your first upper division class, because it's more of a humanities class.</p>

<p>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.</p>

<p>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.</p>

<p>I've taken: CS 150, CS 160, CS 170, CS 186</p>

<p>CS 170 has been my favorite, by far. And I thought I'd hate it...</p>

<p>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.</p>

<p>sakky:</p>

<p>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.</p>

<p>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.</p>

<p>
[quote]
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.</p>

<p>

[/quote]
</p>

<p>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. </p>

<p>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. </p>

<p>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. </p>

<p>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.</p>

<p>sakky:</p>

<p>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.</p>

<p>I was responding to: "getting a part-time job doing IT or programming"</p>

<p>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).</p>

<p>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.</p>

<p>Is what sakky says true? The best way to prepare to industry (which is what 90% of EECS/L&S is here for) is not from the classes, but working? Meaning I should just drop out if I found a reasonable tech job and start working from there?</p>

<p>Personally, I think a degree helps. It shows that you’re serious, and that you know what you’re doing. You didn’t just follow a couple tutorials online to learn programming, you’ve been through all the theory and understand the concepts. A couple classes here are things you wouldn’t pick up on your own… specifically something like algorithms is good for interviews. Software engineering might also interest you, it’s kind of an internship class. Especially with Fox/Patterson, you get paired with non-profit clients to build software for, and they focus on topics like patterns, agile/waterfall cycles, dealing with legacy code, etc. Also, any CS class you take here is going to throw you head first into new topics and expect you to teach yourself, so you’ll get good experience with adapting to whatever situation you’re in and picking up new tools/concepts fast.</p>

<p>CS at Berkeley also gets you lots of connections… so many companies recruit on campus. Internships and career fairs can help you get where you want, or at least help you meet employers.</p>

<p>Either way, not having a degree can close doors… find something part time, get involved in research on campus or something, find an internship, I dunno. But I think a degree is still a good idea in the long run.</p>

<p>

</p>

<p>Some people become effective software developers through self-education. Indeed, self-education on a continuing basis is essential for software developers.</p>

<p>However, many people are not self-motivated enough to efficiently self-educate the base principles that are taught in CS courses. Completing a CS major bachelor’s degree including courses like 161, 162, 169, 170, 186, EE 122 will give you a good head start on knowledge that will be helpful in continuing self-education in a software career.</p>

<p>I want to give you the most comprehensive answer I can so forgive me if I stray off topic a bit into a related topic.</p>

<p>I want to first start by giving you my CS background. I think people’s opinions on the upper divs differ depending on their CS background so it’s something to keep in mind when considering someones opinion. For me, I never programmed in my life before 61A, which I took summer 2012. Since then I’ve been taking as many CS classes I can to complete a minor before I graduate (would get the major but I have too many units). Basically the point I want to get across is that I have only programmed in classes and haven’t had much time to look into things on my own (only a bit but I’ll get to that later).</p>

<p>The CS classes I’ve taken or am currently taking are: </p>

<p>CS61ABC
CS70
CS188
CS170
CS169</p>

<p>For classes like 188 and 170, you learn different algorithms that you’d be able to apply in code if you want to solve a problem. I can say for sure that both classes help for interviews. 170 more so, but 188 is helpful because you deal with graphs a lot, which can come up in interviews. 170 also deals with graphs a good amount, but 188 spends a lot of time on graphs so you get more familiar with them. With that being said, 188 is a really fun class and its cool to see your algorithms at work in the pacman games. 170 is really interesting to me but the class is quite difficult (maybe partly because I do all assignments solo too). I have a love hate feeling about 170.</p>

<p>Bottom line: I recommend both classes. 188 is fun and can help on interviews (a company asked me about some search algorithms we learned about in that class). It’s also known as one of the “easier” upper divs. 170 is very useful for interviews and aside from that it’s interesting and will make you a better problem solver. I’ve applied an algorithm I used in that class to match my friends up for Secret Santa while obeying constraints of who cannot get who, so it is a practical class too.</p>

<p>For classes like 169, you get to work on a group project to essentially make a website for a real world client. Who wouldn’t want to learn to make software? While being in this class currently, I feel like I can definitely make my own website now if I wanted to, which is pretty awesome. You don’t technically learn CS concepts, but you do learn good CS practicing and software development practices. You also learn how creating websites is actually done (if that makes any sense), which is the cool part. </p>

<p>Bottom line: 169 is a good class to teach you good coding practice and how to develop software and make websites. Definitely can come in handy to list a website you’ve made on your resume.</p>

<p>With my CS knowledge coming from mainly classes, I can say I’ve noticed something about the upper divs. With the lower divs, you learn to code and you can edit code to change a program like for example, Ants vs Some Bees. But the thing you don’t learn in the lower divs is how to apply the code to create something of your own that you can share withe people. That is, yes after 61ABC you can make something that you can run on your terminal, but people without tech knowledge can’t really use it. Classes like 169 (and I suspect 160) teach you how to apply your code to actually make something when you start from nothing. This is definitely valuable if you want to work on your own projects. Over the past summer I watched the Stanford lectures on ios app making and I feel confident I can make an app after watching those lectures and working on an app currently. Again this is an example of a class that taught me to apply my lower div skills to build something from the ground up that non-technical people can use. Classes like 188 and 170 on the other hand teach you how to solve problems efficiently (or you might be just using for loops all your life). So all in all the different upper divs accomplish different things but they all have value so I’d take any class that seems interesting to you. </p>

<p>In regards to getting a job vs classes, the problem for me is the one of, “you need experience to get experience.” The upper divs like 169 provide me a way to “get experience” without having experience. That is, I’m getting to make a real website for a real client that I can put on my resume. I can also now branch off and make other websites for any idea I might have. The other upper divs also allow me to become a more efficient programmer.</p>

<p>I guess overall I am a big supporter of classes because that’s the only way I’ve learned (in lecture type learning) but I feel like I can do a lot now just from those classes. If I tried to learn these things on my own, could I? Yes, probably. But I would have taken a lot longer to learn as much as I have without the support of assignments or GSIs. Classes are designed for you to learn as much as you can in as little time as possible with the best quality of learning, so why not? You are definitely getting some of the top classes at Cal. Now, I may also be biased because I haven’t had real work experience in CS. But I think I’m safe in saying that you can’t go wrong taking the upper divs. It’s not like you are going to choose working > classes (you still need classes to graduate after all)</p>