Welcome to CSC212: Data Structures! 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.

Course Format

This is a programming-intensive course, designed to help early-stage programmers make the transition into developing software engineers. While programming can be a truly interesting, challenging and rewarding intellectual activity, it is almost impossible to learn it without a lot of practice. This takes time, especially for debugging a troublesome program that isn’t quite working right yet.

For this reason, we have decided to experiment with teaching this course as a FLIPPED CLASSROOM. This means that we’ll ask you to watch short prerecorded lectures and complete some activities before class, and we’ll spend our time together in class doing activities, writing code, starting assignments, and applying the concepts from lecture in real-world contexts. However: this model only works if you commit to the process… and if this is your first experience in a flipped classroom, it might feel a little overwhelming. Here are some useful tips to help orient you to this model (adapted from UC Boulder’s Succeeding in a Flipped Classroom:

  1. Expect work to be continuous Rather than cramming for large exams that happen after classes, flipped classes require you to keep up with frequent assignments, readings, videos and quizzes that are due before class. One way to set yourself up for success is to get into the habit of completing your pre-class tasks at the beginning of the semester. Keep up with Slack and Moodle for updates and assignments.

  2. Show up present and prepared Be present in class, physically and mentally, to the best of your ability. Be ready engage in class discussions and activities. Ask questions to clarify your understanding of concepts, offer your own perspective, and try not to be afraid of giving “wrong” answers – misconceptions and false starts are a normal, healthy part of learning (and we professors guarantee we’ll make plenty of our own mistakes for you to catch!)

  3. Use prerecorded lectures and readings to your advantage While watching recorded lectures may seem like a pain (especially in the context of COVID-19), they provide opportunities to learn at your own pace. If you benefit from rewatching videos or pausing to try something out on your own, please do! Many students find it helpful to take notes while watching prerecorded lectures, just like they would in a traditional class.

  4. Your education is everyone’s priority If you find yourself spending inordinate time debugging your programs without really making progress, it’s time to reach out – before you fall behind, or it affects your work in other courses. Your professors and TAs are eager to help you find strategies that work for you, and that enable you to reach your goals in the course. In addition to us, the college has many resources for academic success, all available at no cost.

  5. Give honest feedback This course is an experiment, and as such we will ask for feedback often. We want to know what is going well for you and what is tough. Being open and constructive will help us to improve the class, both for future students and for you.

Course Materials

There is no required textbook for this course: all required readings will be made available through Moodle, and primary content delivery will come via recorded videos. However, there are a few recommended textbooks for those who find them useful as references. None of these textbooks are a perfect fit for the class, but we have drawn material from many of them and all are available for free online, or you can purchase a hard copy from your favorite bookstore:

If you need help covering the cost of textbooks or other academic supplies (for this or any of your courses!) please fill out the Academic Funding Application found at socialnetwork.smith.edu/forms.


What We Will Cover

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 first course in 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:


What We WON’T Cover

This course assumes that you have a solid foundation in programming, either through successful completion of CSC111, high school curriculum at at AP or IB level, or dedicated self-study. 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:

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):


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:

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:


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 checkpoint grades to encourage full, timely completion. There is one cumulative checkpoint grade per assignment, with two possible outcomes:

Your checkpoint 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:

  1. The names of all collaborating students be listed at the top of the submission. If you worked alone, please state: “I did not collaborate with anyone on this assignment.
  2. 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.

Grading

Category Percentage
Coding/Written Assignments and Checkpoint Grades 60%
Exams 20%
Final Project 15%
Participation and Engagement 5%

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.