CS 111: Introduction to Computer Science

Course Information

What is this course about?

In my view, computer science concerns two fundamental activities:

What kind of problems am I talking about? Here are a few I thought of while walking to the coffee shop this morning.

Those problems, though intellectually interesting, are a bit goofy. But if you reframe them just a little, they start to look more important in practice. For example, the car-parking problem is related to the problem of packing boxes efficiently into trucks. Solve that problem well, and you can significantly reduce the energy used for shipping. For another example, my walking-route-planning problem is similar to the problem of programming a robot to autonomously explore a fire or earthquake site in search of survivors. This is what I love about computer science. Abstract puzzles that are fascinating and fun in their own right can also be applied to solve important practical problems. It's a great combo.

In this course, you'll get lots of practice with both the reasoning-about-problems activity and the writing-software activity. We'll ask questions like: Given a computational problem, how do you devise and articulate a procedure for solving the problem? How quickly would you expect your procedure to run, and why? How can you be sure your procedure provides a correct solution to your problem? And once you have such a procedure, how do you turn it into running Python code?

Textbook

The textbook for this class is Python Programming: An Introduction to Computer Science, 3rd edition, by John Zelle.

Grading

Your grade in the course will be determined by your performance on one in-class midterm exam shortly before midterm break (25%), one takehome exam near the end of the term (25%), a final project due the last day of finals (25%), and homework (25%).

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 CS111? 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. Early in the term, we will use Moodle's file-submission process. You'll just login to Moodle, go to the CS111 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: Note that I will specify the program name I want you to use for each assignment. For example, your first programming assignment, due September 17, includes the statement "Hand in as counter.py." This means that you shouldn't name your program "assignment1.py" or "mycoolcounter.py" or anything else—just counter.py. If you all follow this rule, it makes the job of the grader a lot easier.

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.

One more homework note

For the first half of the term, you will have short assignments assignment due nearly every class day. In the second half, we will focus on more sophisticated programs, and the assignments will be less frequent.

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.