CMSC132, or Object-Oriented Programming II, is one of the most fundamental courses for a computer science student here at Maryland.
This essential course continues with more advanced Java constructs like abstract classes, enums, and inner classes, but also addresses canonical topics like asymptotic complexity, recursion, graphs, and threads. The course’s instructors have noted that the course “covers a ton of material”, but you don’t have to stress because, aside from a few OOP concepts in the first few weeks of classes, nothing is gone into with overwhelming depth.
Background
Unlike its second-year counterparts (CMSC216, CMSC330, and CMSC351), CMSC132 isn’t meant to be a weed-out course. Instead, the class continues with the same format established in CMSC131, at a slightly faster pace. Everything is still taught in Java, there are still weekly projects that need to be submitted through Eclipse to the UMD CS submit server, and traditional homework is scarce (might vary by instructor).
If you performed decently well in CMSC131 or received an exemption, you should have no problem with the slightly faster pace of CMSC132, as long as you prepare and know what to expect.
Preparation
If you want to get ahead before the semester starts, read up on the lecture slides UMD has available from previous offerings of the course. Summer 2014 Slides. It’s also good to take a look over the lecture material a few minutes before class each day.
Some of the slides can be dry, so for a quick introduction to hashing, traversals, shortest-path algorithms, and sorting algorithms— which encompass a huge chunk of the course— check out these algorithm visualizations.
On exams, some topics are treated more importantly than others. Here is a listing of topics that tend to require more focus, along with a set of mini-projects if you have the free time.
- Generics: Implement a box class that can be instantiated with any type of object, and has a method that returns the textual representation of the object in the box with toString().
- Iterator: Create a class that contains a hardcoded int array and extends iterable. No generics. Test it with an enhanced for loop.
- Inheritance: Create a grandparent, parent, and child class. Give them different methods and play around with inheritance.
- Tree: Implement a binary tree using nodes with just an addNode and an in-order traversal method
- Graph: Create a very simple graph class using an adjacency list. An addNode, an addEdge, a getNeighbors, and a getVertices method.
It can also useful to know the similarities/differences between sorting algorithms, which is why I compiled this table back when I was studying for finals: Table of Sorting Algorithms. Please note that the in-place and stable columns depend on how you implement the sorting algorithm, and depending on what your professor taught, it may differ for you. In the world of exam scores, professors’ words reign king.
Studying all of this obsessively before the class even starts is going to be overkill for most students. If you’re looking for an A, you’ll be fine spending a week or so getting an intuition for the material, and spending a few weekends during the semester reviewing/getting ahead on any tougher topics.
Studying tips
- Don’t buy the textbook unless your professor tells you to during the first day of classes. Your notes should be all you need.
- When you’re studying: Class Notes > Practice Exams > Labs > Practice Questions > Projects. Practice exams are secondary to notes because the content of this course is so frequently reorganized.
- If you’re struggling with a topic, you can talk with the professor after class or during office hours, talking with your TA, or searching on StackOverflow. The content of this course is pretty universal, and nearly any question you could have is only a few clicks away.
Other tips
- Don’t share any code (unless instructions say otherwise). The UMD CS department can be strict about this.
- Start the projects early! Can you finish that project in one night? Probably. But if you have an error, you won’t have time to ask your TA for help!
- Pick a lecturer that fits your learning style. For example, while Fawzi and Nelson are both widely regarded as good lecturers, Fawzi is more straight-to-business whereas Nelson prefers to incorporate more jokes in his lecture. Check out Rate My Professors, OurUMD, and the UMD subreddit for more reviews.
A final word
Avoid talking about how “easy” the last midterm or project was. If you understand the material well, help a classmate out by pointing them in the right direction.