I may reorder some things along the way, but the schedule will look more or less like this:
Weeks 1-2: How to get started making a high-quality program.
To exercise the first ideas we talk about, you'll write a Java utility and start working with a version control system (git in the context of Bitbucket) and an Integrated Development Environment (IDE) (IntelliJ).
Weeks 3-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, and possibly jquery. 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 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.
Weeks 8-9: 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 period will be from Design Patterns: Elements of Reusable Object-Oriented Software, by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. This book is a classic, and is often referred to as the "Gang of Four" book, which is a weirdly inappropriate historical reference made simply because the book has four authors.
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.
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.