Week 1: How to get started making a high-quality program.
To exercise the first ideas we talk about, you'll write a simple Python command-line application.
Weeks 2-5: Developing the "high-quality software" theme. We'll have lots of discussions of tools, habits, and techniques you'll need to make good software.
In the context of those discussions, you'll be developing a database-driven web application using Python, HTML, CSS, and Javascript. Most likely, there will also be one or two other short programming exercises during this time to get you familiar with some tricky ideas that every programmer crashes into at one time or another.
Readings during this period will include a variety of snippets from various books and web essays by some great writers about software.
We will also start having code reviews during this period. See below for more information.
Weeks 6-7: An introduction to Design Patterns. DP's form an essential vocabulary and set of building blocks for working programmers. (I also find them a great abstraction for thinking about design problems in a wide range of fields unrelated to programming (to the extent that anything is unrelated to programming (I mean, really!)).)
To practice some of the elementary design patterns, you'll develop a GUI application in Java.
Readings during this
Weeks 8-9: An introduction to the principles of user interface design. We'll revisit your earlier work in the context of the ideas in Steve Krug's Don't Make Me Think.
During this time, you'll be working on a final project.
Week 10: Catch-up. There's way too much cool stuff to talk about and practice during the early portions of the course. We'll certainly want an extra few days.
At various times during the course, we will use Python, Java, and Javascript. We'll also use tools that aren't strictly programming languages, like HTML, CSS, and Postgresql. For the final project, you will be free to use the tools of your choice, within reason.
This course focuses on ways to make each of you a better software designer and developer. If you learn most effectively by tackling a problem on your own, then you should work alone. If you gain more by bouncing ideas off another person, you may work with a partner on any assignment (but no groups of three or larger).
For some programming assignments during this term, we will have code reviews. For our purposes, a code review will be a meeting of the students at one of the tables in Weitz 235, with drop-in interruptions by me. The goal of each code review will be to will discuss the strengths, weaknesses, and other interesting features of each student's solution of a particular programming problem. 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 prepare thoroughly by studying everybody else's code, and by preparing positive comments, constructive criticism, and plenty of questions. We'll discuss the details of our code review process before the first code review.
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 a little bit of writing, several programming assignments, and at least one revision of a programming assignment. There will be no exams in this class.