CS 201: Data Structures

Course Information

Welcome to Data Structures. The material in this class is really interesting, and a ton of fun. (Sure, I'm biased. But really, this is great stuff.) I'm looking forward to working with you all.

What is this course about?

Textbook

Data Structures: Abstraction and Design Using Java, 3rd Edition by Elliott Koffman & Paul Wolfgang. (That link is to the publisher's official page for the book, but it's cheaper elsewhere.)

I think these authors are focused on the right themes (notably Abstract Data Types, the distinction between interfaces and implementations, and the mathematics of complexity analysis). They also have nicely detailed explanations and examples for all the data structures we'll study. Read the book, think about it, compare differences (if any) between their code and explanations and mine, ask questions, etc.

Grading

Your grade will be based on your performance on a variety of programming and problem-set assignments (35%), a midterm exam (25%) during week 5, a late-term exam (25%) during week 9 or 10, and a final project (15%) due on the last day of finals.

Getting help

Everybody gets stuck while learning to program. In fact, all experienced professional programmers also get stuck. Getting stuck and feeling some frustration is part of the creative process, and leads eventually to learning (which is exciting) and working code (even more exciting).

One of the things you'll want to learn for yourself is how long to try to answer your own questions, and when it's time to get some help. In this class, I want you to feel absolutely free to ask for help, early and often. You're just getting started in computer science and software development, so you're going to have a whole lot of questions. Keep asking them. (Note that there are many types of questions, all valid for the asking, including the one that goes "I don't even know what to ask—can you please help me?")

When you have questions, there are lots of places to go for help.

In brief: don't suffer needlessly when you're having trouble. Ask for help.

Collaboration

Working with your classmates has lots of benefits. Other people don't think exactly like you do, so when you read other people's code and hear their ideas, you can end up with a deeper understanding of the material than you would working only on your own. It's also less likely that you'll get stuck on a problem with two people than with one. And as a bonus, working with people can be lots of fun.

One danger of working together is that it's easy to let your collaborators do all the work, and thus all the learning (or, conversely, to do all the work yourself, thus preventing your collaborators from learning).

On balance, the benefits of working with a partner outweigh the risks, so I encourage you work together. In fact, for several assignments this term, I will require you to work with an assigned partner. For a few other assignments, you'll work on your own, and for others, including the final project, I'll give you the option of working alone or with a partner. I'll specify the partnership situation at the top of each assignment.

Before the first partner assignment, we'll talk in class about ways partnerships can go badly and techniques for making them go well.

Academic honesty

I expect you to do your work in accordance with Carleton's statement on Academic Integrity. This mostly concerns making sure you don't represent other people's work as your own. Citing other people's work is easy, so I will expect you to do so when appropriate.

Sometimes it's tricky to decide when to cite somebody else's work. What if you copy a couple lines of code from the textbook? Or from the official Python documentation pages? Or from Stack Overflow (a website that you will quickly encounter when you start trying to solve your own programming problems)? What if you talked with a friend who is not your current partner, and the friend gave you a good idea?

We will discuss some general principles in class. But if in doubt, don't hesitate to ask me for guidance on when citation is needed, and what constitutes acceptable collaboration. It's much, much better to ask for help early than to find yourself involved in an academic dishonesty investigation.

Working in our labs

All of the software required to do the assignments for this course is installed on the macOS computers found in Weitz 138 and CMC 102, 304, and 306. You can go to one of those labs, login using your usual Carleton user name and password, and get to work.

WARNING: When you work in Weitz 138, all your files will be deleted from the computer when you logout. So you should have a plan for saving your work when you work there (e.g. Dropbox, Google Drive, email to yourself, a thumb drive, etc.). By midterm, we'll have another way for you to save your work conveniently, but in the meantime, don't forget about this.

Using your own computer

Considering setting up your own computer with the software you need for CS201? Here's a little bit of guidance on how to proceed.

How to submit your homework

Most of your homework in this class will involve writing computer programs. We will use Moodle's file-submission process. You'll just login to Moodle, go to the CS201 class, go to the relevant assignment, and then use the homework-submission facilities you find there.

By the third week or so, we'll have a different hand-in mechanism, which we will discuss in detail in class.

IMPORTANT: I will specify the file names I want you to use for each assignment, and the graders will enforce this specification by making it worth a point or two on each assignment. For example, your first programming assignment, due January 13, will specify that your source files should be named Person.java and PeopleSorter.java. Don't name your files "people.java" or "Assignment1.java", etc. If you all follow this rule, it makes the job of the graders a lot easier. More important, it's essential practice for realistic software development, where file and class names are agreed upon ahead of time, and your team depends on you to follow the agreement to ensure that the resulting software works. Incorrect naming will be your files correctly will be

Late homework

Late homework will receive 50% reduction of score during the first 24 hours after the homework was due, and will receive a score of 0 after that. Consult me at least 24 hours before an assignment is due if you have extraordinary circumstances preventing you from handing in your work on time. In real emergencies, contact me as soon as you are able.

Rough Schedule

This schedule is only an approximation of the structure of the course, but it should be reasonably close to what actually happens. I have included chapter references from Zelle.