Course information

Class meets during 1A in Anderson 329

Goals

I have three main goals for you in this class:

Pursuing these goals involves the usual academic emphasis on concepts and vocabulary that you need to learn through study and experimentation. But it also involves lots of practice with the tools of the trade and lots of effort to develop good habits and discard bad ones. Therefore, our in-class discussions will focus on the nature of high-quality code, on how our development process can and should center around an understanding of our audience and their needs, on how our software affects a variety of people (including but not limited to our intended audience), and on the techniques and habits that best serve the production of good code. We will also use discussion time for code reviews to help you revise and improve your work.

Your working computer

I recommend that you do the up-front work required (with guidance from some first-week lab exercises) to set up your own computer for this class. Working on your own computer is convenient, of course, but it also gives you the experience of setting up, customizing, and maintaining your own development environment. This experience is empowering, and will give you an important skill set for future professional software development you may do. That said, you are also always welcome to work on the computers in the labs on the third floor of Olin.

Your first task for the term is to make sure your computer is ready to support your CS257 work. See the Week 1 list of tasks and assignments.

Windows, macOS, and Linux computers are all fine for the work we're going to be doing.

If you have any concerns about what computer you plan to use for this class, please contact me early in the term so we can discuss your thoughts.

Course structures

For the most part, here are the main things you can expect in the way of course structure.

Computers in class

I strongly encourage you to bring your laptop to class. We'll do a lot of lab exercises during class, and I'll often give you time to work with your team on your projects. If you don't have a laptop or it doesn't work for you to bring it to class, you'll want to identify some people in class to work with.

I prefer not to make rules about your use of electronic devices during class. But keep in mind that if you're distracting other people during class, I will ask you to stop. Messing with your computer while discussion is happening is almost certain to be distracting to your classmates.

Office hours

(Here are the times and Zoom link.)

I love talking with you, whether it’s about class content or life as a programmer or tech news & ethics or your personal programming project or your search for internships or Carleton history or a good movie you saw recently or whatever. Really. Conversations with you are the main reason I keep doing this job instead of going out into the software industry.

This thing called "office hours" should probably be called "Jeff's personal invitation to you to come talk". I set aside a few hours per week when I promise to be available for conversation. I'm often available at other times, too, but it depends on what meetings I have to go to, what deadlines I'm working under, etc. So my official office hours are a way for me to clear my schedule for you.

During 2020-2021, Zoom office hours worked really well. They enabled students to get quick answers conveniently, and I saw a larger number of students in office hours than I would normally see in person. So I hold office hours sitting in my office (Olin 301A), but I'm also happy to fire up Zoom if you can't make it to my office in person. If you want to zoom, just send me a Slack DM.

How to get questions answered

If you’re stuck or confused or just have a question you’re having trouble answering via the internet or experimentation, here are some things you can do.

Grading

Your grade will be based on your performance on a variety of assignments, and and on your participation in the code reviews. I will give you more specific gradeline information around midterm break. There will be no exams. Your final submission for your team project will be due the last day of finals.

One type of assignment will be labeled [LAB] on the course website. Each lab will be intended to introduce you to the basics of a new idea, and will involve simple prompts plus a short-answer worksheet in the form of a Google survey. Each lab will be worth 3 points (compared to typical [ASSIGNMENT] scores in the range 10-15 points). It will be possible for you to get fewer than 3 points on a lab, but for the most part, a good-faith effort on all questions will earn you the full 3 points. The labs are intended to introduce you to the basics of new ideas rather than to ask you to think deeply.

Your grade will also include a component based on the feedback of your project partners. We'll talk quite a bit about how to be effective teammates, and I'll give you more details about this portion of your grade later in the term.

Late homework will receive 25% 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.

Academic honesty

Please read my document: Other People's Code.

Rough schedule

I may reorder some things along the way, but the schedule will look more or less like this: