Intensive Program Design

Syllabus – Fall 2019

Tech F281, TuTh, 12:00–2:50 PM

Course staff & office hours

Instructors: Robby Findler robby@cs Gladly by appointment
Jesse Tov jesse@cs Tu/Th 3–4:30 PM, Mudd 3510

General information

The goal of Intensive Program Design is to make you a better programmer. We will ask you to forget everything you know about programming and then help build you up again, stronger than before. If you work hard, you will learn to apply a rational design process, to think more clearly about code, and to present your work effectively to others. You should expect to spend a significant amount of time programming outside of class. Topics include data design, structure-oriented programming, testing and coverage, data structures and their analysis, systems programming, and resource management.

Prerequisites

None.

Exams

We will have one in-class midterm exam on Tuesday, 5 November.

Materials

Online

Books

Required textbook:

Suggested books:

Software

In the first half of the course, we will be programming in several teaching languages that are part of the DrRacket programming environment. You can find setup instructions on GitHub.

The second half of the course uses C++ 2014, a recent version of the C++ programming language. More details will be posted when the time comes.

Lectures

Lecture notes are on GitHub.

Here is a tentative schedule of topics:

September
TuTh
24 welcome; the algebras of images and strings; big bang; exercise; some Git HtDP/2e, Prologue 26 enumerations; structures; itemizations of every kind; more Git HtDP/2e, Part I
October
TuTh
1 count-down timer; linked lists; sorting by struct. decomp. HtDP/2e, Intermezzo I–II & Part II 3 abstracting functions; asymptotic analysis; abstracting data definitions; higher-order list abstractions HtDP/2e, Intermezzo II–III
8 family trees; invariants; AVL trees (also the AVL implementation and worst case AVL trees) HtDP/2e, Part III 10 ADTs (stacks and queues) [md]; banker’s queues [md]; random binary search trees [pdf, rkt] HtDP/2e, Intermezzo III–IV & Part IV
15 binomial heap (full code); generative recursion; sorting HtDP/2e, Intermezzo IV–V 17 accumulators (and an accumulator version of binomial heaps); natural numbers; graph representations HtDP/2e, Part V
22 streams; state; using state HtDP/2e, Part VI 24 Exam HtDP/2e, Epilogue
29 welcome to C; union-find even more welcome to C 31
November
TuTh
5 dynamic sequences and I/O in C 7 graph abstraction and representation in C
12 welcome to C++ 14 model–view–controller
19 Huffman coding; DLL deque 21 hashing; hash tables; Bloom filter
26 binomial heap 28 – Thanksgiving —
December
TuTh
3 final project presentations 5 final project presentations

Homework

Homework will usually be assigned weekly and due at several points throughout the week, as follows:

Day Time Stage
Sunday 23:59 pull requests due
Tuesday 23:59 submit revised code
Wednesday mid-day TBD* code walks
Thursday 23:59 resubmit PRs

* Code walks are performed in person with your partner. They’ll be scheduled during class each Tuesday based on both partners’ availability.

# Topic Out Walk
1 Fixed-Sized Data Thu, Sep 26 Wed, Oct 2
2 Sequential Data Tue, Oct 8 Wed, Oct 9
3 Trees Tue, Oct 15 Wed, Oct 16
4 Your Own Data Tue, Oct 22 Wed, Oct 23
5 Tr Tue, Oct 29 Wed, Nov 6
6 Kruskal Tue, Nov 5 Wed, Nov 13
7 Hexapawn Tue, Nov 12 Wed, Nov 20
8 Huffman Tue, Nov 19 Wed, Dec 4
9 Your Own Idea TBD Mon, Dec 9

Final Project

Deliverable Due date
Proposal Mon, Nov 11
Specification Fri, Nov 15
First code review Fri, Nov 22
Second code review Fri, Nov 29
Presentation Mon, Dec 9
Final code review Wed, Dec 11

General homework policies are here.

Course policies

Collaboration and academic integrity

You may not collaborate with anyone on the exam. You may not use any electronic tools, including phones, tablets, netbooks, laptops, desktop computers, etc. If in doubt, ask a member of the course staff.

Most homework assignments will be completed with an assigned partner. You must pair program with your assigned partner, as specified, on homework assignments. You may request help from any staff member on homework. (When you are working with a partner, we strongly recommend that you request help with your partner.) You may use the Campuswire discussion board to ask questions regarding assignments, so long as your questions (and answers) do not reveal information regarding solutions. You may not get any help from anyone else on a homework assignment; all material submitted must be your own. If in doubt, ask a member of the course staff.

Providing illicit help to another student is also cheating, and will be punished the same as receiving illicit help. It is your responsibility to safeguard your own work.

If you read any actual code online that solves the same or a similar problem to the one we are asking you to solve, you must include a link to that code (or a citation of the publication you found it in) together with your homework submission. Reading prose that describes the algorithm is fine; any and all code you read, however, must be documented. Failure to disclose the link (or citation) is considered cheating.

Students who cheat will be reported to the appropriate dean.

If you are unclear on any of these policies, please ask a member of the course staff.

Homework

In general, you should submit your homework according to the instructions on the web page for the individual assignments.

Late work

Late work is not accepted.

Grades

[This is still subject to change.] Your grade will be based on codewalks of your homework assignments (70%) and the midterm exam (30%). There will be no final exam.