<p>CS 31, 32 and 33 are considered “weeder” classes (Sort of like the LS 1/2/3 bio classes). They throw a lot of basic concepts at you and you do a bunch of non-related exercises with completely fake languages (fake assembly, fake database, etc), operating systems, and etc. Do you still have to construct a turing machine by hand? I remember I hated that… a lot of it seems like unnecessary busy work as well. </p>
<p>Once you get through that mess and hit the upper divs, it’s much easier and interesting in my opinion. </p>
<p>Hard/Easy really depends on the professor teaching the class, how well you grasp the concepts, how well you keep up with the reading, and how good you are at debugging. </p>
<p>Here’s a quick rundown of most upper div CS classes, it’s been a while though.
The classes pretty much break up into theory heavy vs programming heavy courses. Also how hard/easy you find a class will depend on your interest in the subject, time available and whether you lean a bit more towards theory or programming.</p>
<p>Theory heavy -
CS111 - OS, heavy on concepts, but can also be heavy on programming as well. We had to modify/reprogram a minimal unix kernel. Not too hard of a class if you are decent at programming
CS112 - Math, math and more math! Heavy on the stats. Reading the terms “Bayes theorem, Markov chains” still sends shivers down my spine. Had a really hard time in this class and it didn’t help that it was 4-6pm. There is some hard core math and stats in this class. It’s math, with a twist (the horrible gut wrenching kind).
CS118 - With the advent of the internet, I’m not sure how this has changed. A lot of theory, network layers, packets, memorization of different protocols, etc. Exams were tough only because there was a lot of memorization involved. A lot of theory, and minimal network related programming projects. Theory fairly easy.
CS143 - Primarily theory and more theory. Some database programming.
CS151B - Sit in class, listen to prof drone on and on. All theory about logic design, fairly interesting if you’re interested in that sort of stuff. Otherwise it can be a big snore. Often the best solution to a problem in this class is the simplest solution. Not to difficult once you grasp the basic concepts.
CS180 - Theory, theory and more theory. I don’t recall if there was any programming in this class. I just remember the textbook cost an arm a leg. Quite a bit of math as well. A lot of running through algorithms by hand. Course can be tough, but there are also some students who thrive on this stuff.
CS181 - Oh boy, I nearly fell asleep every day in this class. My prof was a well aged woman who actually had many theories named after her which appeared in the ancient textbook reader itself! All lecture and all theory, but material is not all that hard. Can be very, very boring though. It’s the type of class where you emulate a computer by paper and pencil =)</p>
<p>Programming Heavy -
CS131 - Heavy, heavy programming. Mostly OOP. We used Ada when I took it, don’t ask me why. Also some C++ I believe. Spend a lot of time debugging data structures, classes, etc. I’m guessing Java is the language of choice now?
CS132 - This one is quite heavy on the programming as well, very little theory. It’s pretty interesting if you’re decent at debugging. When I took the course, each week’s assignment depended on the previous one as you slowly built your compiler from the ground up. TA’s finally gave up and started providing “solutions” to the previous week’s so you’d have something to work off of for the next assignment. Can be a tough class if you can’t keep up w/ the workload or have a hard time with implementing the concepts.
CS152B - This isn’t really a programming course, but it involves a lot of lab work and implementing circuit designs. It’s not quite theory, and feels more like programming does to me. We used the crappiest program for circuit design, I hope they have something better now.
CS161 - Depends on prof. My experience was about 50/50 programming/theory. We had to use LISP (Lots of InSignificant Parenthesis). Others have used C. Can be a pain of a class as you spend each week solving “puzzles” programming. Very basic puzzles though, you’re not going to be programming pathfinding AI or any higher level stuff.<br>
CS174A - Depends on prof. Very programming intensive and projects can vary. We did quite a bit of interactive 2D interface programming, then progressed to raytracers, a/z-buffer rendering and texture mapping. Being CG, involves quite a bit of math in the programming as well.</p>
<p>The programming languages and the “fake” software they use with funny gimmicky names have probably changed since I took these classes, but reading the current catalog descriptions, the content and approach has pretty much remained the same. </p>
<p>good luck!</p>