Intensive Program Design

Syllabus – Fall 2018

Mudd 3501, TuTh, 12:00–2:50 PM

Course staff & office hours

Instructors: Robby Findler robby@eecs Gladly by appointment
Jesse Tov jesse@eecs Gladly by appointment
TA: TBD TBD

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 Thursday, 8 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

programming environment.

The second half of the course uses C++ 2014, a recent version of the C++ programming language; earlier versions of C++ may not work for all the code we write. The instructor will be using

a cross-platform IDE, and we recommend that you use it as well. CLion ordinarily costs money, but student licenses are available for free.

You will also need to have Git, a C++ compiler, and the SDL2 libraries installed. See the installation instructions here.

If you don’t like CLion, you may use any conforming C++ compiler (GCC, Clang, MSVC) you wish with any programming environment (XCode, Visual Studio, Emacs, Vim, Sublime Text, etc.). Homework assignments will build using the CMake build system, which supports a variety of programming environments and probably isn’t very difficult to get to work with yours. However, CLion is the only supported option—with anything else, you’re on your own.

Lectures

Lecture notes are on GitHub.

Here is a tentative schedule of topics:

September
Tu Th
27 welcome; the algebras of images and strings; big bang HtDP/2e, Prologue
October
Tu Th
2 structures; enumerations; itemizations of every kind HtDP/2e, Part I 4 linked lists; asymptotic analysis HtDP/2e, Intermezzo I–II & Part II
9 abstracting functions; list abstractions; abstracting data definitions HtDP/2e, Intermezzo II–III 11 filesystem trees; invariants; AVL trees HtDP/2e, Part III
16 ADTs (stacks and queues); banker’s queues; random binary search trees HtDP/2e, Intermezzo III–IV & Part IV 18 binomial heap; generative recursion; sorting HtDP/2e, Intermezzo IV–V
23 accumulators; natural numbers; graph representations HtDP/2e, Part V 25 laziness and streams; state and vectors
30 graph search; Bellman–Ford algorithm; Dijkstra’s algorithm HtDP/2e, Part VI
November
TuTh
1 union-find; Kruskal’s algorithm; slack HtDP/2e, Epilogue
6 welcome to C++; structs and functions; vectors 8 Exam
13 class abstraction and data hiding; union-find, again; a graph class 15 binary heap; making the heap generic; model–view–controller
20 more MVC; memory & pointers; linked data structures 22 – Thanksgiving —
27 Huffman coding; hashing; final project discussion 29 hash tables Bloom filter doubly-linked list dequeue
December
TuTh
4 binomial heap 6 TBD

Homework

Homework will be assigned every week and due Tuesday evenings at 11:59 PM. General homework policies are here.

Homework assignments may be found on GitHub.

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 Piazza bulletin 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.

The mapping of raw point totals to letter grades is at the discretion of the instructor.