Course Basics

Lecture: Tuesday, Thursday 11:20AM-12:35PM, Science Center 199
Lab A: Monday 1:15PM - 2:45PM, Science Center 256
Lab B: Monday 3:00PM - 4:30PM, Science Center 256
Instructor: Adam Lammert
Email: lastname at cs.swarthmore.edu
Office: Science Center 270
Office Hours: Tuesday 2-4PM, or by appointment
Lab Assignments: Assigned in Lab on Monday
Due Sunday 11:59PM, unless otherwise stated
Ninjas: Brandon Chow
Klarissa Khor
Sophia O'Malley-Krohn
Michael Piazza
Allison Ryder
Ravenna Thielstrom
Ninja Sessions: Thursday 7-11PM
Saturday 2-4PM

Welcome to CS35. This course continues the broad introduction to Computer Science begun in CS21, providing a general background for further study in the field. By concentrating on data structures and algorithms, you will obtain the basic building blocks by which all large software are built. These topics are central to every sub-discipline in Computer Science, and also connect to central concepts across the sciences. Topics to be covered include object-oriented programming (in C++), advanced data structures (e.g., priority queues, trees, hash tables, and graphs), advanced algorithms, as well as software design and verification. At the end of this course, you will have obtained the ability to successfully analyze problems in the discipline. You will also take your first steps towards developing the skills necessary to synthesize and evaluate the most fundamental questions in the field.

To enroll in this course you must have completed CPSC 21 or obtain permission from the instructor. This course is designated as a natural sciences and engineering practicum.

Course Textbook

Data Structures and Algorithms in C++, 2nd edition by Goodrich, Tamassia, and Mount. I plan on using this book when I design lectures, but I will not necessarily follow the style of C++ coding from the book. Reading this book will be helpful for coming at material from a different view point than lecture. Some students find this confusing, others find it useful. There are also several problems at the end of each chapter for studying.

A Transition Guide from Python 2.x to C++ by Michael Goldwasser and David Letscher. You will need to read from this resource in the first week or two. Readings from this guide are intended to be helpful for students who have taken CPSC 21, and are familiar with the Python programming language. Students entering CS35 with different backgrounds may also find this guide to be useful. However, familiarity with Python is not required in CS35.

Debugging references

Learning how to debug code efficiently is an important part of this course. Many of the lab assignments in this course will be more involved than what you may have seen in CS21. It is fundamentally important that you make a serious effort to debug your code before asking for help. We are certainly willing to help if you are quite blocked, but good debugging skills are best learned through practice. Here are some references for debugging tools that may be helpful:

Additional references

This course provides an introduction to object oriented programming as well as the C++ program language. Each could warrant their own course of study and I highly recommend you study them further. Some references of use: