Course information
Class meets during 1A in Olin 310
Goals
I have three main goals for you in this class:
- improve your independence as a programmer
- improve your ability to write high quality code
- improve your ability and inclination to place the human beings affected by your software at the center of your design and implementation work
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 software affects a variety of people, and on the techniques and habits that best serve the production of good code. We will also use discussion time for code reviews (see below) to help you revise your work to improve it.
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 doing the work 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 for the course.
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.
Class time during a lingering pandemic
Barring a new surge in the pandemic, we'll be back pretty close to normal this term (though I understand that there really is no "normal" for a 20-year-old college student in 2022). My default expectation is that you will attend class and I will not make special arrangements for remote instruction. If you want to learn what's going on in class, you should come to class.
However, there may be times when one or more of you will have to isolate for COVID. On such days, I will fire up Zoom and constrain my visual aids to the screens in Olin 310 so I can share the screen with anybody coming in via Zoom. The Zoom link for those days will be the one posted on my office hours page.
If you need to Zoom for class, please let me know ahead of time. I won't set up the remote class infrastructure unless I'm aware of a student who needs it.
Masking in Olin 310
For now, the CS department has decided to continue last year's masking policies in the various rooms on 3rd Olin. In particular, the department has designated Olin 310 (our classroom) as a masks-required space.
Course structures
For the most part, here are the main things you can expect in the way of course structure.
- Video lectures. I developed a sizable library of recorded lectures over the past couple years, and students have told me they were helpful. I will assign some of these. Please watch each video before class on the day for which it is posted. I will expect you to know the material presented in these videos. I think that they mostly work pretty well at 1.5x or 2.0x; so don't feel bad speeding me up a bit.
- Readings. Most readings will be from a variety of online sources. Several will be from the book I asked you to buy, Steve Krug's Don't Make Me Think, Revisited, 3e.
- Homework assignments. These will include programming assignments, design exercises, planning documents, feedback on your classmates' code, etc.
- Class time: discussions, labs, Q&A, code reviews, etc.. Occasionally I will just tell you stuff in class, but mostly, I'll leave the straight lecturing to the videos. Instead, we'll use class for the kinds of things that require or benefit from more interaction. Since I'll ask you to talk to each other pretty often, make sure to grab that coffee or do whatever else you need to do to be awake at 8:30.
- Working teams. For assignments, you will work in a team consisting of you and either one or two partners. Using surveys about your preferences, I will assign the teams. It will be up to you to coordinate times to work together.
- Office hours. See below.
- Asynchronous conversation via Slack. We'll use a Slack workspace for posting questions, answers, interesting techniques or tools you've encountered, programming news, or whatever you want to talk about. I'll also post late-breaking announcements on both the website and Slack. (Sometimes, despite my best efforts, I have to make adjustments to an assignment or alert people to something I forgot to tell them. Slack is good for that.)
Computers in class
Feel free to either bring your own laptop to class or use the computers in Olin 310. This will be most relevant during lab exercises and code reviews.
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 new & 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'm going hold office hours by sitting in my office (Olin 301A) and also firing up Zoom, which will enable you to choose whether you want to talk to me in person or online.
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.
- Ask your partner
- Post on our Slack #questions channel. Making your question public to your classmates will help other students, since if you have a question X, you can be guaranteed that some of your classmates are confused about X too. Addressing your question to the whole class will also maximize your chances of getting a quick response. I monitor Slack closely and often answer questions myself, but it's also common for some other student to provide an answer before I can get to it.
- Send me a question via Slack direct message. For the vast majority of questions, I prefer that you post in #questions, but occasionally a question is private or so idiosyncratic to your personal code that it's not suitable for a public forum, in which case DM is fine.
- Office hours and in-class questions
- Talk to a lab assistant in the Olin 3rd-floor labs.
- Take a break, get some sleep, eat, take a walk. Coming back to a problem fresh often helps you solve it on your own.
- Last choice: email me. I respond to Slack more quickly, and it helps me to manage my workflow if you use Slack instead.
Code reviews
For several programming and design assignments during this term, we will have code reviews. You will study each other's code and designs ahead of time, and then spend a small-group meeting talking about the strengths and weaknesses of what the teams have done, as well as alternative ways they might better achieve their goals.
Code reviews are one of the most efficient and powerful tools I know of for improving your software, but of course most people feel a fair amount of apprehension at the idea of discussing their code in detail in front of other people. Thus, it's essential that each participant in a code review show respect, prepare thoroughly, and offer both praise and constructive criticism. Code reviews get easier over time, so we'll do a lot of them.
Grading
Your grade will be based on your performance on a variety of assignments, and and on your participation in the code reviews. The assignments will include some writing and several programming assignments. There will be no exams.
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:
- Week 1: Setting up your work environment. Version control with git and GitHub. Unix basics.
- Weeks 2-3: Design and implementation of command-line interfaces. Miscellaneous code quality topics. Test-driven development.
- Weeks 4-5: HTTP-based API design and implementation. Intro to database design and SQL.
- Weeks 6-7: Requirements analysis and tools for understanding the need of the people using your software. Web page design. Web page implementation with HTML and CSS. Web page interactivity with Javascript.
- Weeks 8-9: Web application wrap-up. Miscellaneous topics depending on the time we have left: software development processes, design patterns, automated software improvement aids like static analyzers and profilers, etc.
- Week 9.5: Looking back and forward