Instructors: Sam Tobin-Hochstadt.
AIs: Pavan Venkatramanachar.
Use Indiana University email (@indiana.edu) to reach any of the course staff; usernames are given above.
We have set up a course mailing list, which you must subscribe to.
We also maintain a course blog which we will update regularly. You must check the blog daily.
Monday and Wednesday 7:15-8:30pm in Ballantine 305.
The course is a "studio" course, a concept that originated in art schools. In a studio course, the instructor presents basic techniques, discusses domain knowledge for specific projects, and then teaches with the help of student presentations.
The purpose of student presentations is for everyone to learn to reason about problem analysis, interface and component designs, and code. The presenter will learn to present products to a team, to defend the product’s design, and to take note of weak spots. Conversely, the listener will learn to analyze and to critique a product, helping the presenter uncover flaws.
In lieu of a final, we will conduct final code walks. If the course progresses on schedule, the final code walks will be held during the finals examination period.
The final grades are based on three factors: your project points (50%), your active presentations (20%), your panel participation (20%), your lab book (9%), and the whim of the instructor (1%).
Late policy: there is no late policy; solutions to assignments as they exist at the time of the deadline will be graded.
Academic honesty: we will strictly enforce the university’s academic integrity policy. All programs must be completed strictly by you and your partner. You are free to discuss the problem sets with others, so long as you acknowledge discussants. However, you may not share code in any way. Submitting code that is not your own will be considered a violation of the University’s Code. Violations of academic integrity will be reported to Office of Student Ethics and will have a negative impact on your grade.
You will use Git to work on your homework sets, to keep track of revisions, and to submit your homework.
The course will mainly consist of the development of a single software system. There will be weekly or bi-weekly assignments as you develop this system.
You must work on your project in pairs. You will be assigned a partner, although you can help choose. Halfway through the course, you will switch partners.
Pair programming means that you and your partner work on the problem sets jointly. You read them together and you work on the solutions together. Pairs are provably more effective than individuals in programming. The rough idea is this: One of you plays pilot, the other co-pilot. The pilot works on the keyboard and explains aloud what is going on; it is the co-pilot’s responsibility to question everything. After a problem is solved to the satisfaction of both, you must switch roles.