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