Table of Contents

Syllabus (Spring 2020)

If you have any questions not addressed in this syllabus, don’t hesitate to ask in person or electronically!

Course Details

Tentative Schedule

For ease of reading and updating, this exists as a separate document: Schedule.

Office Hours

TA Hours

The departmental TA page is here: Feel free to ask on Piazza about TA hour changes.

The department provides TA support. Every TA has taken Data Structures in the past. Although I am doing some things differently, I expect that everyone in the class will be able to learn something from the TAs – they are all fantastic older Smithies who are happy to discuss the assignments and the material with you – during their hours.

The value of the TA hours is to have someone with some experience to help you discuss issues and deal with software issues. Their goal is to help you understand, and only secondarily to help you complete assignments.

Lecture: (Ford Hall 240) Mondays & Wednesdays 9:25am - 10:40am

Lecture is an important part of the course. I will do my best to make the lecture interesting and interactive.

We have been scheduled fairly early in the morning. Attendance counts through the participation section of the grade.

Lab: (Ford Hall 342) Fridays 1:20-3:10pm or 3:20-5:10pm

Lab is a designated time for hands-on exercises. I hope to give time during each of the labs for you to work on your assignments with my supervision, but we will additionally have short exercises.


This course is intended to be accessible to all students. If you have questions or requests for accommodations, feel free to reach out to me or the Office of Disability Services. For accomodation letters you can email me or deliver them to my office hours so we can construct a plan together. Please let me know as soon as possible how I can best support your learning.


In order that all forms of self-identity can be honored, students who prefer specific pronouns are encouraged to inform the instructor. I have created a Google Form to get to know you all better.

Computer / Workspace Access

This course will be hands-on, and if anyone is unsure of where or how they will complete their assignments, they are encouraged to contact the instructor. Smith College has resources for students in need of computers including labs, rentals and grants (e.g., money).

The instructor would be quite happy to help a student looking for a quiet place or a laptop to do the assignments.

About this Course

CSC212 serves many purposes: an second course in programming (focusing on larger challenges), an introduction to data structures and algorithms, and an introduction to the Java Programming language.


Normally, students are required to take CSC111 before taking this course. Students who have taken a prior CS1 course or have other circumstances are encouraged to consult the instructor. Many comparisons to Python programming will be made in the beginning of this course (while learning Java). This will be less helpful for you if you’ve not taken a course with python, but don’t hesitate to ask clarification questions if you don’t understand references :)

Course Challenges

This is a programming-intensive course that has a reputation for being one of the most difficult Computer Science courses at Smith. Everyone can be successful in this course, but everything we learn will build on itself, particularly our knowledge of Java as the course progresses. Don’t hesitate to bring questions to me or the TAs early in the course (even if you’re not sure what your question is!)

Please plan to work a little on this course every day. Think about the assignments and the material, and discuss them with your classmates. It is normal to have questions and to feel overwhelmed in the beginning of this course. If you start working early, we will have time to help you be successful in your assignments and your understanding of the material.

Course Outlook

In CSC111, you studied programming and computer concepts with Python. In this course, we will introduce a more explicit and more powerful language that will enable us to write more complex programs with more safety. Java is widely used in industry for interviews and real products – many web pages you interact with (e.g., Google) are written partially or fully in Java.

We will continue honing our skills as Computer Scientists as we observe and study “phenomena” in Computer Science. By studying data structures, we study the tools humans have developed based on the nature of computers and data. This is a programming intensive course so that we can merge our learning of Java and our learning of Data Structures to better prepare you for future CS classes and your careers.

Course Outline

I organize the CSC212 into two distinct parts: learning about data structures in an abstract way, and studying implementations in a hands-on way. We will have a Part 1, the first third or so of the class, followed by a midterm exam, and then a longer Part 2, followed by the final exam.

Part 1: Abstract Data Structures & Java

In the first part, we will get up to speed with Java and introduce abstract data types – which are much like how we used lists and variables in python – we know how they behave but we don’t know how they work. Java separates this nicely. We will also introduce a theoretical topic: how do we know a program is faster than another program? How do we know if a program will ever finish?

  • Java and Object Oriented Programming
  • Abstract Data Types
  • Basic Complexity (or which program is faster? why? how?)

Part 2: Data Structure Implementation

In the second part of this course, we will look at concrete implementations of the data types we’ve introduced in the first part and more real-world use-cases for each.

  • Lists, Grids, and Memory
  • Pointers, References, Linked Lists and Graphs
  • Recursion & Stacks
  • Sorting and Complexity Theory Revisited
  • Association, Trees and Hashmaps

Grading Overview

Your course grade will be a weighted average of your projects (the assignments), your exams, and the final project. I am always happy to discuss feedback and grading with you.

  • Projects (Assignments): 55%
  • Exams (Midterm & Final): 25%
  • Final Project: 15%
  • Participation: 5%

Projects are our weekly assignments. Exams cover the content in the course (practice exams will be available). The Final Project is self-designed (more detail will be available later in the course).

Participation will be an evaluation of attendance, completion of lecture quizzes, and usage of Piazza.

If you believe something has been marked in error or you do not understand why a certain grade was given, please talk to the instructor during office hours or an appointment. I will be happy to explain my thinking and/or correct my mistake!

Attendance Policy

I will schedule content in lectures and labs to best support your work in CSC212, and I will track attendance (likely via a sign-in sheet). Attendance is one part of our participation policy, and you may miss lectures due to illness or other unforeseen circumstances.

I encourage you to visit my office hours or consult with your classmates if you have questions reviewing any material you have missed.

Assignment Schedule

Assignments will be assigned in advance of lab on Thursdays, and due the following Thursday at midnight. Since we have labs on Friday, this means that we will use the labs as an introduction and support for the new assignments, but that all assignments will be due the midnight before the next new lab, ensuring that: (1) we all start new assignments together, and (2) there are TA hours the night the assignments are due (Thursday nights).

Extension Policy

Since we have weekly assignments and every assignment is important, there are no extensions in this class. A one day extension means that the next assignment must be completed in six days. It is in the student’s best interest to submit partial assignments on time rather than any assignments late.

Extensions will be granted in extenuating circumstances, but only after a discussion with me. I will still ask you to submit partial work on time in the event of any extensions. In such circumstances, I strongly suggest students contact the Dean of Students’ office so that they may take advantage of Smith’s support resources.

Please talk to me if you have any sort of emergency arise during the semester. We can make a plan for your success in the class based on the specifics of the assignment and our schedules at that time.

Students with accommodations through the Office of Disability Services are encouraged to contact me so we can work out a plan together. See Accessibility.

Academic Honesty & Collaboration Policy

Smith College expects all students to be honest and committed to the principles of academic and intellectual integrity in their preparation and submission of course work and examinations. All submitted work of any kind must be the original work of the student who must cite all the sources used in its preparation.

Smith Honor Code, Student Handbook, retrieved from

Group work policy:

Students are encouraged to discuss assignments in groups, to discuss error messages, to “Google” questions together and in general to pursue becoming better Computer Scientists as a community. Students are not allowed to write code together without the explicit permission of the instructor. Working together without permission or using code without properly sourcing it will result in a report to the honor board.

A good rule of thumb is this: when working as a group, do not write any code. Discuss the assignments, plan strategies, draw pictures, but write your code independently. Use your peers to solve the problem and build your understanding and then demonstrate that individually – there is enough creativity in the assignments chosen for this class that your solution will be different from your group members’ if you follow this rule.

Course Citation Policy

Since it is often encouraged to use external resources to bolster your knowledge and to solve particular problems, that means you must acknowledge these resources. A formal citation format, e.g., MLA or APA is to be used for any printed resources you access during this course. For electronic resources, i.e., web pages, the URL will suffice.

You do not need to formally cite my slides, my readings, or my starter-code, unless the resources in questions say that you should.

Your work must be your own: the goal is understanding

It is unacceptable to adapt work you do not understand, whether it is pseudocode or exact Java code. It is better to submit a blank section of an assignment than to present a solution you have found that you do not understand.

No assignment or part of an assignment will have a dramatic effect on your overall grade if you cannot figure it out, and assignment grades provide me with an accurate understanding of where students are struggling.

Self-Plagiarism and Past Assignments

Students often come in with prior programming experience, whether it is CSC111, AP Computer Science, or courses at other institutions. If you are ever assigned work that overlaps with assignments you have completed in the past, you must disclose this to the instructor so that we can work out an alternate part of the assignment, or I can be aware of the additional resources that you have available.