CSC212: Programming with Data Structures


I am John or JJ Foley. My office and hours are kept up to date on my main website:

Course Difficulty

CSC212 has a fearsome reputation. This course covers a lot of topics and a new programming language. We have weekly assignments. As a result, you will develop quickly as a programmer and computer scientist. At the end of this course, you will be qualified to take almost any CS elective at Smith College.

This course is challenging, but those who come to class, attend lab, and ask questions as they work on their weekly programming assignments will find that Java quickly becomes a new tool for them to create new and interesting things.

Since the content of this course builds upon CSC111, the more recently you have taken CSC111, the more easily you will adapt to the challenges of this course. However, even students who have not programmed in a while (especially those willing to revise their notes and read from recommended texts) can succeed.

I encourage any prospective students concerned about workload to have a conversation with me. Come to office hours or contact me by email if you have further questions.

Q: What can I do to prepare for this course?

A: Read and work on exercises from ThinkJava -- it is a free textbook for a course like Smith's CSC111 but taught in Java, rather than Python. We will learn some additional Java in the beginning, but more practice can help.

Software Used

Lab Time in 212

CSC212 is a laboratory course. In addition to lecture, we have 2 hours of lab time together each week. I will use lab time to introduce new projects and to jump start our understanding of the starter code. To encourage attendance and participation there are bonus portions of assignments only available during Lab.

Supplementary Videos

Whenever I do a coding workshop in class, or create an activity to better understand an assignment outside of Lab, it will be presented as a video screencast. I may implement some feature similar to parts of an assignment and post it as a YouTube video. These are kept private and distributed through Moodle.

I may distribute videos of programming topics that I want you to watch in advance of a lecture. I use videos to give you the chance to pause, rewind and spend one-on-one time with a version of me explaining details. I expect active viewing of these videos, where you create questions on Piazza if anything remains unclear.

Typical Schedule & Assignments

In this course, we have the challenge of introducing Java, object-oriented programming, and formally looking at data structures. Therefore, I partition the class into these two challenges.

Part 1: Java, OOP & Using Data Structures

In the first week of class, we get working with Java in Eclipse and work on a very simple program. In the next week, we dive into object oriented programming by making an Aquarium with Fish, Snail, Bubble, Wave, Submarine, and Shark objects. P2 turns the focus to lists, where game state is tracked through missing, following, and fish returned home on a grid. P3 is an application of data science, introducing classic counting challenges. P4 is a Text Adventure game where Places are nodes in a graph and Exits are edges. By playing the game and designing improvements we see how graphs can represent nearly any problem.

The midterm evaluation in the course is tied between a small self-proposed project and a formal written evaluation of our knowledge of Java before we focus on Data Structure implementation in the second half.

Part 2: Data Structures and Applications

We begin Data Structure implementation by looking at reductions between the List, Set and Map data structures we studied in the first part of the course. Then we introduce testing as a way to verify our implementations and study LinkedLists, ArrayLists, sorting, Trees, HashMaps, heaps, and other data structures (time-permitting).