Syllabus

The Essentials

Course Details:CS 257 (Software Design), Spring 2015, Carleton College.
Meetings: 3a (MW 11:10am–12:20pm, F 12:00pm–1:00pm) in CMC 209.
Instructor: Jadrian Miles; CMC 327, x4976, jadrian
Office Hours: M 3pm–4pm; W 8:30am–9:30am; Th 10:30am–12:00pm; F 9:30am–10:30am.
Graders: Gustav Danielsson and Thor Laack-Veeder.
Deadlines: 10:45am on the day specified, unless a different time is given.
Links:

Course Goals & Content

The goal of this class is for you to become a better software developer. But what does that mean? Good software developers make software that will help its users, and they develop the software in such a way that others can keep it living, growing, and changing even when they're out of the picture. Both of these require a broader perspective than just writing code; here we're talking about designing software, hence the course title.

A class like this can feel like it's got no factual content; we're learning social conventions, best practices, and interpersonal stuff, not theorems. But remember: stacks and queues are just ideas that stuck around because computer scientists found them useful; same thing (in a different way) with Dijkstra's algorithm; same thing with high-level programming languages. This course covers yet another class of ideas that have stood the test of time: the result of years of programmers screwing up (individually or collectively), figuring things out, and writing down what they learned.

We're going to approach this task of becoming a better developer by learning some of the ideas these people wrote down, and putting them into practice. The ideas we'll cover include:

The “putting them into practice” part is you and your teammates spending a whole lot of time planning, designing, and coding up software.

Along the way, you'll use Python, Javascript, and Java, as well as some languages that aren't actually programming languages, like HTML, CSS, and SQL. You'll also use some important development tools, including a couple Integrated Development Environments (IDEs: IntelliJ and PyCharm) and a Version Control System (VCS: Git).

Course Components

There are no exams or quizzes in this course.

Who (and How) to Ask for Help

If you need help with anything, you can post to Piazza, consult with other students, consult with a teddy bear (really! It works!), search online, ask a lab assistant (in CMC 102 or 306, evenings and weekends), or come to me.

If you'd like help from me, please come see me! In particular, many questions are easier to answer as a back-and-forth discussion in person. I also try to answer questions promptly on Piazza. Generally I don't answer questions late in the evening or on weekends.

If you have a question or concern about grading, please talk to me first rather than going to the graders.

In this class, as with all classes at Carleton, there are a number of college-wide resources that can be of help: the library, the Write Place, the department's online resources. Finally, the college has a tutoring program available too.

Attendance

I expect that you will attend every class meeting possible. Since our class time is mostly about doing things together, you really miss out if you're not here. If you miss class, no explanation is necessary or desired; I trust you'll do your best to be here and that you have a good reason if you're not. If you're sick on a particular day, please stay home; it's important that you take care of yourself.

I won't always take roll, but I reserve the right to do so during any class. You may be absent up to twice when I take roll without it affecting your grade. Unless you've made formal arrangements with me in advance*, there are no excused absences beyond this; the two-absence budget given above is designed to accommodate sicknesses or other everyday things that come up.

Grading

Your grade will be computed as follows:

Component% of Overall Grade
Participation & Reading Responses15%
Project 115%
Project 240%
Project 330%

Late Policy

Given the collaborative nature of our class, no late work will be accepted. If a deadline is imminent, submit what you've got; the feedback you get on incomplete work (through a grade, my comments, or code review) can still be very valuable. To be clear: you will receive a 0 for anything turned in late.

Unless stated otherwise, everything is due at 10:45am on the due date specified.

Working Together

Learning and coding are both collaborative arts, and in this class you will do a lot of the work in pairs or small groups. You probably already have experience with pair programming, but if not you'll get plenty here! Regardless of the size of your group, all partners must actively collaborate in generating ideas and thinking through problems. In pair programming, you work side-by-side at a single machine. At any given time, one person is typing and the other is observing, making suggestions and pointing out bugs. You should switch roles frequently, and make sure to keep a 50/50 balance of who serves what role.

The work that you create with your partners is a joint effort and you will all receive the same grade. It is your responsibility to contribute fully to the final product, and to let your partners contribute fully too.

Any work you turn in must be your own work (or the work of you and your partners together). You are free to consult with any of the resources mentioned above, but you are required to credit any assistance you receive, in writing, in what you turn in. You should be prepared to explain any part of anything you submit, without the assistance of your partners. It is your responsibility to make sure that you fully understand the work that you create in your team.

Collaboration and Plagiarism

There are two kinds of working together: Collaboration and Plagiarism. The former is encouraged; the latter is forbidden. But when you're starting out, it can be hard to tell the difference between them. The two essential distinctions have to do with transformation and attribution — the artifact (writing or code) that you submit must be entirely your own work (every last word of it), and if any ideas embodied in your work were provided or inspired by someone or something other than yourself (or your team), you must cite this source.

Plagiarism is the process of (intentionally or unintentionally) presenting the work of someone else in such a way that a reader might assume it was your own. Here are some examples — note that this list is non-exhaustive:

If you have any uncertainty about a particular instance of working together, make sure to check with me first.

Academic Honesty Policy

I am obligated by Carleton policy to report to the Dean of Students any suspected plagiarism or violations of the College's academic integrity policy. The Dean, in turn, brings it to the Academic Standing Committee. The academic penalty for a finding of responsibility can range from a grade of zero in the specific assignment to an F for the course. Please familiarize yourself, if you haven't already, with the Dean of the College's detailed guide to academic integrity.

* With few exceptions, “in advance” means “before the beginning of the term”. I am willing to be flexible about attendance in truly exceptional cases involving serious illnesses, serious injuries, or other unforeseeable, truly disruptive circumstances. Job interviews, extended vacations, political protests, etc. don't count, even as much as I support all those things.