Welcome to CSC210: Data Structures! We hope you will have fun in
this course while learning a ton about programming. Below is some
important information about how the course will run, as well as some
specific “expectation-setting” details about what we will (and won’t!)
cover.
In this course, we will explore elementary data structures (arrays,
sequences, linked lists, stacks, queues, trees, graphs) and algorithms
(searching, sorting) in a variety of contexts, including event-driven
applications with a graphical user interface. This course employs
object-oriented programming throughout, using the Java programming
language. Prerequisites: CSC120 or equivalent experience.
This course is designed to help you develop a robust toolbox for
solving computational problems, and to approach programming with
flexibility and resilience. We organize this study around three main
themes. Upon successful completion of this course, students will be
able to:
Theme 3: Algorithms and Programming
- Write clear, well-documented, and effective programs using techniques such as recursion, object-oriented design, and functional programming.
- Demonstrate comprehension of written code (e.g. tracing execution, debugging, etc.).
- Implement a variety of algorithms for solving computational problems (e.g. sorting, search, etc.), and articulate the pros and cons of different methods.
Course Materials
A range of good computer science content is available for free on the internet. The primary text for this course will be the OpenDSA Data Structures and Algorithms Modules Collection. This online resource includes units on all the material we will cover, plus many additional topics. For alternative perspectives, you are also welcome to consult other books on data structures; there are many in the library.
It is also useful to have a Java reference available for consultation. We recommend Java: The Complete Reference by Herbert Schildt. If you want something a little more introductiory, consider Introduction to Programming Using Java by David J. Eck.
What We Will Learn
This course will provide a thorough overview of the foundations of data structures, and is scoped to a target audience of CSC majors who have completed a course in object-oriented programming. If this isn’t you, don’t worry! You’re still very much welcome in this course. Just be mindful that some self-study before the course starts may be necessary (see What We WON’T Cover).
Here’s a selection of topics we will cover:
- Theory and usage of fundamental abstract data types:
- Arrays
- Sequences
- Linked Lists
- Stacks
- Queues
- Hash Tables
- Heaps
- Trees
- Graphs
- Searching and Sorting Algorithms
- Recursion
Throughout the course we will reinforce skills you should have
learned in previous courses, such as object-oriented programming in
Java. We will make a particular study of pointers, references and
indirection.
What We WON’T Cover
This course assumes that you have a solid foundation in
object-oriented programming, either through successful completion of
CSC120, multiple courses at the high school level, or dedicated
self-study. If you have never programmed in Java before, you should
spend time on your own learning the basics of the language and how it
may differ from others you have learned. Proficiency with various
computer environments and infrastructure will also come in
handy. Because folks are coming to this class from a variety of
backgrounds, we strongly recommend paging through The Missing Semester of Your CS
Education to familiarize yourself with topics such as:
- Shell Tools and Scripting
- Editors (Vim)
- Command-line Environment
- Version Control (Git)
- Debugging and Profiling
Additonally, knowledge of the following will likely prove useful in this class, but due to time constraints we will unfortunately not be covering the following topics (links to supplemental online courses through LinkedIn Learning are provided, which are available for free to all members of the Smith community):
- Programming Foundations: Fundamentals (Been awhile since you took 111? This 2hr crash course will remind you of the key points. Taught in Python.)
- Learning Java (Worried about making the leap from python to Java? This course is essentially a do-over of 111, but in Java instead of python.)
- Java Code Challenges (Partway through the semester and you still feel like you just don’t quite “get” Java? Try these challenges to build your confidence!)
Communication expectations
All written communication regarding this course will take place via Slack (a cloud-based communcation platform that supports text, voice, and video). This includes:
- announcements (in the #general channel)
- questions about the material (in the #questions channel)
- messages between individual students and the instructor
Even if you’re not used to Slack at first, it’s not too hard to learn. The advantages of having all course communications in one place are compelling. Use Slack!
Assessment
There are five forms of assessment in this course:
- Weekly programming homework assignments
- Regular written commentary and reflection
- Video responses and in-class activities (both assessed for completion only)
- Two written examinations (one midterm, one final)
- One final programming project
Homework, Labs, and Lateness Policy
Weekly programming assignments will be introduced in class on Wednesdays, and we will work together to get started on them during class time. To help us maintain healthy coding practices, we will begin each Friday class session with a peer code review: you’ll bring your started-but-not-yet-finished code, lay out your plans for making progress, and talk through any bugs that have you stuck. Final submissions will be due Tuesdays at 11:59PM EST.
Keeping up with the assignments is crucial to success in this class. Because of this, we will utilize progress grades to encourage full, timely completion. There is one cumulative progress grade per assignment, with two possible outcomes:
- 100% credit if all assignments to date have been submitted
- 0% credit if any assignments due have not yet been submitted
Your progress average counts for 20% of the overall homework grade, and the remaining 80% of your homework grade is based on quality of work, regardless of when it was submitted.
Because we all have outside lives that sometimes intervene, every student will also have a self-managed budget of extension days. Use it wisely! Read details on how to secure an extension here.
In-class lab activities are designed to be completed during the scheduled class time in which they are assigned. Students present in class receive full credit for the work. If you miss a day, you are responsible for making up any missed activities within one week, preferably before the next class. Bear in mind that the lab is often a warmup for an upcoming assignent; labs should not interfere with beginning your work on the programming assignment.
Collaboration and Academic Integrity
Programming is more fun in groups! Students are strongly encouraged to form study groups and to collaborate in solving the assignments. Please ensure that all work you submit is ultimately the product of your own understanding rather than anyone else’s. You may consult online or print references on all assignments and labs. Standard language references showing syntax, usage, class javadoc, etc. need not be cited; nor does the course textbook. All other resources must be cited as described below.
The following information is required for all submitted work:
- The names of all collaborating students be listed at the top of
the submission (in your README file). If you worked alone, please
state: “I did not collaborate with anyone on this
assignment.”
- A “References” section, with in-line citations to
any external resources you used. Citations should include page numbers
(if a printed resource) or a direct URL (if an online resource). If
you did not use any resources in completing the assignment, please
state: “I did not utilize any external resources in completing
this assignment.” If you include a fragment of code from any
source, you should also credit that source with a comment directly in
the code.
- If you use any AI programming assistants, you should also cite
this at the top of your README file, along with details of the type of
assistance provided. Please keep in mind that using AI help is
similar to copying someone else's code or asking another person for
help: you may achieve more, yet learn less. We hope that you are in
this course for the learning, and thus discourage use of AI prompting.
Your grade will be based upon the value that you add, not on content
from any other sources.
-
Grading
| Coding/Written Assignments |
65% |
| Exams |
25% |
| Participation and Engagement |
10% |
Note that the final grade is based on our evaluation of your work, and every effort will be made to communicate expectations in advance through detailed rubrics. Although the grade will be largely based on the percentages shown above, we reserve the right to award extra credit for excellent work and out-of-the-box thinking. For example, while “Participation and Engagement” will look primarily at day-to-day engagement, we will also take note of contributions both in and out of class which demonstrate intellectual curisoity or clear understanding of a topic, as well as comments which help others to learn a difficult concept.
Accessibility
We aim to make this course accessible and welcoming to all. Please let us know if there are changes we can make towards meeting this goal. Smith College can also help facilitate support services and accommodations to all students with disabilities. To request an accommodation, please register with the Disability Services Office.
Acknowledgement
Some of the materials used in this course are derived from
lectures, notes, or similar courses taught at other
institutions. Appropriate references will be included on all such
material.