Introduction to Computer Science II

Lecture, four hours; discussion, two hours; outside study, six hours. Enforced requisite: course 31. Object-oriented software development. Abstract data type definition and use. Overloading, inheritance, polymorphism. Object-oriented view of data structures: stacks, queues, lists. Algorithm analysis. Trees, graphs, and associated algorithms. Searching and sorting. Case studies and exercises from computer science applications. Letter grading.

Review Summary

Clarity
8.3 / 10
Organization
8.3 / 10
Time
15-20 hrs/week
Overall
8.3 / 10

Reviews

    Quarter Taken: Winter 2020 In-Person
    Grade: A

    Legend professor in a legend class.

    Quarter Taken: Spring 2021 Online
    Grade: B

    Huge difficulty spike from CS31. Knowledgeable professor, but depends on if you can stomach 2 hour lectures about how to code twice a week. Start your projects early and leave a lot of time for them

    Quarter Taken: Spring 2020 In-Person
    Grade: A

    This class was a big step up difficulty-wise from CS 31, but Smallberg is a really good instructor. He is so good at explaining. Everything is graded on correctness.

    Quarter Taken: Winter 2022 In-Person
    Grade: A

    I'm writing this review for winter '22. I found CS 32 to be much, much harder than CS 31, both in terms of content and workload. Before taking the class, I had been coding for five years and had done a coding internship, yet it was still difficult for me. Unlike CS 31, where it's possible to just cruise through and put in minimal effort and still get an A (if you know coding already), in CS 32, a lot more effort is needed.

    This class had a flipped classroom format. Smallberg's prerecorded lectures were kind of boring but he was quite clear and explained the concepts well, for the most part. The only topic in which his lectures were lacking was recursion. For recursion, I would strongly suggest using Nachenburg's slides, as in my opinion he explained it much better. Smallberg only gave about 3 examples in his recursion lecture whereas Nachenburg gave a lot more. I only truly got the grasp of recursion when I saw Nachenburg's slides. For the other topics though, Smallberg's lectures were pretty good.

    The projects and homeworks were much more time-consuming and complicated than CS 31's. Unlike CS 31, where each homework was just some ZyBook problems, most of the CS 32 homeworks were similar difficulty/time involvement as CS 31 projects and were graded on accuracy rather than completion. My ranking of the homeworks, from hardest to easiest, is hw 3, hw 1, hw 2, hw 4, hw 5. It was a bit annoying to have a hw due two days before the final but luckily it was the easiest one by far and took under an hour to complete. As for the projects, my ranking from hardest to easiest is project 4, project 3, project 2, project 1. Basically, the projects got exponentially harder as the course went on. Initially, I was really scared for project 3 since it had a 60 page spec and seemed very complicated. However, it wasn't actually super conceptually difficult, it was just very time-consuming. The spec was quite clear and basically told you what to do so there wasn't much hard thinking. If you start project 3 on time, it should be fine. I think about 45% of students got 100% on it. Personally, I spent about a week on it and treated it kind of like a full-time job lol. It took me 45 hours. I actually found it super fun though! It's my favorite memory of the course. Project 4 was a different story though. It was time-consuming AND super difficult. At first glance, it appeared simpler than project 3 since its spec was only a third of the length of project 3's spec. But that was because it didn't tell you what to do -- you had to think things through. It required a lot of critical thinking and it literally fried my brain lol. I spent 45 hours on it and was not able to come up with a working solution, as my code failed more complicated test cases. A lot of other students struggled as well and many submitted a dummy implementation. My general advice for projects 3 and 4 is to start early and to use resources for help. I'd highly recommend UPE's project 3 and 4 hacks, as they really came in clutch. Ask questions to Smallberg/your TA if you're unclear about something in the spec or requirements. Put effort into writing good test cases for your code, as testing your code thoroughly can make a big difference in your score. Smallberg is right when he emphasizes using an incremental approach to programming. Definitely do not code everything all at once -- break the project up into chunks and make sure each chunk works properly before moving onto the next. Also, the debugger is your best friend!

    Both of the midterms were online. The first one was super easy and most people got 100. The second one was very difficult though and one of the questions was on a concept we hadn't covered yet. There isn't much leeway in the online exams, as the code is graded entirely on performance, so even if you have the right thought process and logic, if you make a small error that causes your code to fail test cases, you're screwed. I totally failed the second midterm and was so stressed that I almost dropped the course. However, Smallberg encouraged me not to drop, so I stayed. Fortunately, the midterm was curved, so even though I only got 1 out of 3 questions right, I got 60%. The final was in-person and it was very hard too. Smallberg still hasn't released our scores for the final exam (and for project 4), so I'm not sure exactly how I did, but I probably got a C at best. The format of the in-person exam was very different from the online tests. The online tests purely involve coding, but the in-person ones are mostly multiple choice with some short answers. A couple of the short answers involve handwriting code. Some of the multiple choice questions had over 20 answer choices each!! The multiple choice section was the craziest I'd ever seen in my life. Definitely be sure to study hard for the final, as you definitely won't be able to get lucky with guessing. In general, I'd highly recommend going over (and printing out) Nachenburg's slides before each exam, as they are good for reviewing and they are an excellent supplement to Smallberg's lectures. Also, don't rely on the open-note format of the tests, as you need to understand the topics on a conceptual level.

    Overall, the course is hard but totally doable if you're diligent, put in the effort, start projects early, and get help when you need it. Do keep in mind that the difficulty gets much harder towards the end of the quarter, especially after week 6. For some perspective, a whopping 43% of the overall grade relies on things that are due in the last week of the course (hw 5 - 5%, project 4 - 13%, final exam - 25%). If a binary search tree was that unbalanced it would be O(N)! (You'll get the joke at the end of the course). Whatever happens, don't give up. Despite the difficulty, the curve is very generous, so there is definitely room to make mistakes and you don't need to be perfect to get an A. I failed midterm 2, did poorly on the final, and didn't do so well on project 4, yet I still somehow got an A. If I can do it, anyone can!

    Quarter Taken: Winter 2022 In-Person
    Grade: A

    Pros:
    Lectures: Efficient, dense. Cuts 110-min schedule to ~90 mins. Pre-recorded and uploaded, uses class time for OH.
    Teaching: Engaging, breaks down complex topics well.
    Homework: Relevant, prepares for real-world scenarios.

    Cons:
    Final: Tougher than expected.
    Style: Technical to the point of being dry; risk of zoning out.

    Verdict:
    Useful for upper-divs. Recommended if you can handle the dry, technical style.

    Quarter Taken: Spring 2022 In-Person
    Grade: A

    Grading for assignments was relatively slow and scores for projects 3 and 4 (which contribute to a good chunk of this class's work) weren't even sent out until halfway through summer, so they didn't contribute to our grade. That being said, Smallberg is an amazing professor and is incredibly knowledgeable in C++. Though I still recommend taking the class with Nachenberg if you have the chance, Smallberg's class is still a good option.

    Quarter Taken: Spring 2022 In-Person
    Grade: B-

    Projects are long but doable. I got the grade I expected, but the grades came out slowly.

    Quarter Taken: Winter 2023 In-Person
    Grade: N/A

    Start the projects early they can sometimes take really long (especially project 3). Go to office hours if you're stuck instead of wasting hours trying to figure it out yourself. I found it really helpful to work w friends on the projects, so y'all can help each other debug and you just have someone to bounce ideas off of. I preferred having recorded lectures I could watch at any time so I took the class w smallberg but nachenbergs slides are really helpful so make sure to go through them.

    Quarter Taken: Winter 2023 In-Person
    Grade: A

    Smallberg organized the class extremely well, watching his recorded lecture really grounded me in CS fundamentals. Projects can take a long time (larger scale projects than CS 31), make sure you don't get stuck chasing down a single bug for hours. Midterm and final are graded fairly and are average difficulty. Recommand taking with Smallberg or Nachenberg, both will teach you the fundamentals well and use the same exams.

    Quarter Taken: Winter 2023 In-Person
    Grade: A+

    Smallberg's lectures are very insightful and teach the class really well. It is async online though, so you have to make sure you stay at least decently caught up. Our year the projects appeared to be easier than normal for CS 32, but they still required a decent amount of time.

Course

Instructor
David A. Smallberg
Previously taught
24S 24W 23S 23W 22S 22W 21S 21W 20S 20W 19S 19W 18S 18W 17S 17W 16S 16W 15S 15W 14S 14W 13S 13W 12S 12W 11S 11W 10S 10W 09S 09W 08S 08W 07S 07W 06W 05W 04W 03W 02W

Grading Information

  • No group projects

  • Attendance not required

  • 2 midterms

  • 10th week final

  • 6% recommend the textbook