Derrick Stolee, Assistant Professor
Department of Mathematics
Department of Computer Science
Iowa State University

COM S 229 - Advanced Programming Techniques
Course Information
Lecture Office Hours
Time: MWF 12:10-1:00pm Time: M 1:10-2:30pm
W 11:00-11:50am
F 10:00-10:50am
(Or by appointment)
Room:205 Carver Hall. Office:416 Carver
Teaching Assistants: (Office Hours in Pearson 0145)
Yalin Ke Office Hours: TR 1:00-3:00pm
Jucheol Moon Office Hours: MW 11:00am-12:00pm, TR 11:30am-12:30pm
Priyangika Piyasinghe Office Hours: T 9:30-10:30, F 11:00-12:00
Guolei Yang Office Hours: TR 4:00-5:00pm
Course Goals

This course will guide students to build fluency in a new programming language and expand their understanding of a computer's inner workings. At the end of the course, students should be able to

Students will plan an implement significant software projects from basic requirements.

Course Topics

Object-oriented programming experience using a language suitable for exploring advanced topics in programming. Topics include memory management, parameter passing, inheritance, compiling, debugging, and maintaining programs. Significant programming projects.

The first half of the course will cover the C programming language and the second half will cover C++.

Laptop Policy

During lecture, we will be writing example code together. It is expected that you bring a laptop or other computer device to class in order to follow along.

A laptop with full keyboard would be most appropriate, but if you have a tablet (such as an iPad) you can download an SSH app and use that to log in to and do development on that machine.


There will be two projects in this course, one in C and one in C++.

Project 1: Project 1 Web Page Project 1.A Specification Project 2: Project 2 Web Page Project 2 Specification

These are individual projects spanning several weeks. Start Early! Starting on a project the weekend before the due date is a common way to fail (or drop) this course.

Your code will be tested on one of the department's Linux machines, probably Your code must compile and run correctly on this machine. Code that does not compile may receive a grade of zero points! The projects will require one or two thousand of lines of code to implement (give or take; your mileage may vary). These should be organized into more than one source file, with the appropriate supporting documentation (a README file). Part of your grade will be on programming style: code should be legible and well-documented.

You must use a Makefile, so that all your executables may be built by simply typing make in the shell.

You are responsible for understanding the project specifications. These are written in natural language (English), and may be vague or contradictory (it is not easy to describe what a thousand lines of code should do). There will be an online discussion forum for the course, where students may clarify any questions about the specifications. (This is another reason to start early.)

All exams will be held in the usual classroom.

Exam 1: Friday, February 14th, 12:10-1:00pm.
Exam 2: Friday, March 14th, 12:10-1:00pm. Exam 2 Topics
Exam 3: Friday, April 18th, 12:10-1:00pm. Exam 3 Topics
Final Exam: Thursday, May 8, 12:00-2:00pm.


Grade Breakdown The course grade will be based on two projects, one in C and one in C++ (25% each), three in-class exams (10% each) and the final exam (20%). Your final exam score can replace your lowest in-class exam score (and hence no make-up exams will be allowed).

Letter Grades The overall letter grade for the course is assigned based on the weighted total score, and a curve decided at the end of the semester. The classic ten-point scale gives you a lower bound on your grade: if your overall score is 0.90 or above, then you are guaranteed a grade of A- or higher; if your overall score is 0.80 or above, then you are guaranteed a grade of B- or higher; etc. Historically, letter grades have been shifted in favor of the students.

Late Policy Items turned in within 24 hours of due date will receive 75% credit. Items turned in within 24 and 48 hours will receive 50% credit. Items turned in later than 48 hours after the deadline will receive no credit.

Topic List
Here is a short list of the topics covered in each lecture. See the Lecture Notes for more information on these topics.
M 01/13Course Syllabus, Introduction to Unix, The Unix Command Line.
W 01/15Unix shell redirection and pipes. Getting started with C, Hello World!, Basic Input/Output.
hello.c fibonacci.c
F 01/17Slightly less basic C, structs, functions, prototypes.
M 01/20Holiday: MKLjr. Day.
W 01/22The History, Philosophy, and Features of C. Comparisons to Java.
F 01/24Stages of the compiler, organizing source code files, Makefiles.
tttboard.h tictactoe.h tictactoe.c ttt.c Makefile
M 01/27Project 1.A, Command-Line Arguments.
W 01/29 File I/O, Types.
copy.c filetest.c.txt (NOT COMPILABLE!)
New: types.c (See this link for more information)
F 01/31Arrays, malloc and free.
M 02/03realloc, Memory management for structs, pass-by-value, -reference, and -pointer.
real.c stringstruct.h string.c
W 02/05Project QA, C Programming QA, Arrays of structs.
structarrays.c Makefile
F 02/07Debugging with valgrind and gdb.
Buggy Code: knapsack.tar.gz
Corrected Code: knapsack-fixed.tar.gz
M 02/10Header file best practices, operators in C.
Buggy Code: people.tar.gz freeerror.c
Fixed Code: people-fixed.tar.gz operators.c
W 02/12Bit-wise Operators, C String Library
Incomplete Code: optest.c
Finished Code: optest-finished.c increment.c
F 02/14Exam 1
M 02/17Project 1B discussion, string manipulation with pointer arithmetic.
Code: words.c
W 02/19Exam 1 returned. Exercise: parens.
F 02/21Extras from C.
Code: pixeltest.c
M 02/24Self-referential structs, linked list.
Code: linkedlist.h linkedlist.c
W 02/26Linked lists with void* values, Function pointers.
Code: linkedlist.h linkedlist.c
F 02/28More on function pointers, super-awesome Makefile.
Code: error.c fibonacci.c linkedlist.c linkedlist.h matrices.c
Code: A Generic Makefile
M 03/03C++ : History, Philosophy, Features, Non-Features. A basic "Hello, World!"
W 03/05C++ Object-Oriented I/O. Pass-By-Reference.
Code: hello.cpp copy.cpp testoutput.cpp sort.cpp reftest.cpp
F 03/07C++ Class by example: String.
Code: String.hpp String.cpp Makefile (Makefile is for 03/10 lecture)
M 03/10C++ Using classes, new, delete, copy constructors, operator overloading.
Code: String.hpp String.cpp stringtest.cpp Makefile
W 03/12Project 1B Questions, Exam 2 Review, Project 2 Sneak-Peek.
F 03/14Exam 2.
M 03/24Project 2 discussion, Graphs, Directed Graphs, Paths, and Breadth-First Search.
W 03/26Inheritance and polymorphism in C++, the virtual keyword, multiple inheritance.
Code: Tarball
F 03/28Project 1B grades, Exam 2 grades, Group Discussion.
M 03/31A very brief intro to the Standard Template Library
Code: Tarball
W 04/02Interfaces and Abstract Classes in C++, const functions.
Code: interfacefail.tar.gz abstract.tar.gz
F 04/04Template Classes.
Code: 0404.tar.gz
M 04/07Template Functions.
Code: 0407.tar.gz
W 04/09Lab Day for Project 2A.
F 04/11Exceptions, try, catch.
Code: 0411.tar.gz
M 04/14Project 2A Post-Mortem.
W 04/16Namespaces, Nested Classes, and Friends.
F 04/18Exam 3
M 04/21Snapshot of the Future: Design Patterns.
W 04/23Snapshot of the Future: Algorithms and Complexity.
F 04/25Snapshot of the Future: Applications of Reachability.
M 04/28Lab Day. Work on Project 2B.
W 04/30Project 2B Due. Snapshot of the Future: Algorithms and Complexity.
F 05/02Project 2B Post-Mortem.
Contact Information and Email Policy

To reach the instructor, send an email to dstolee [at] iastate [dot] edu with "229" somewhere in the subject heading. By placing 229 in the subject heading, it helps me organize the emails so that I can be sure to respond within 2 business days.

Email is a professional, written communication medium and thus what you write in an email is part of the official record. Please treat every email as if it were a graded assignment.

Programming Skills Builder

If you are looking to gain more practice in the art of computer programming, then you can start exploring the wide open world of programming! By fulfilling quests, you can build your skills in the necessary areas for becoming a great warrior programmer.

Visit the Programming Skills Builder webpage for more details.

Follow @proskillbuilder for updates.

Other Resources

valgrind Quick Start
gdb Tutorial
Debugging with gdb

Printf Reference

C Programming Tutorials
C Types on Pyrite
C Tutorial from
C Tutorial from B. W. Kernighan

ISU Computer Science Technology Services
Pyrite Account Request Form
Frequently Asked Questions: Account Information
SSH Tutorial (for accessing
X Forwarding Tutorial (for using X windows on your computer)
Tech Support Main Page (for any other questions)

Unix Commands
Unix Tutorial
Linux Command Reference (ISU)
VI tutorial
Emacs Tutorial
Pico commands

University Policies

Academic Dishonesty The class will follow Iowa State University's policy on academic dishonesty. Anyone suspected of academic dishonesty will be reported to the Dean of Students Office.

Disability Accommodation Iowa State University complies with the Americans with Disabilities Act and Sect 504 of the Rehabilitation Act. If you have a disability and anticipate needing accommodations in this course, please contact (instructor name) to set up a meeting within the first two weeks of the semester or as soon as you become aware of your need. Before meeting with (instructor name), you will need to obtain a SAAR form with recommendations for accommodations from the Disability Resources Office, located in Room 1076 on the main floor of the Student Services Building. Their telephone number is 515-294-7220 or email . Retroactive requests for accommodations will not be honored.

Dead Week This class follows the Iowa State University Dead Week policy as noted in section 10.6.4 of the Faculty Handbook.

Harassment and Discrimination Iowa State University strives to maintain our campus as a place of work and study for faculty, staff, and students that is free of all forms of prohibited discrimination and harassment based upon race, ethnicity, sex (including sexual assault), pregnancy, color, religion, national origin, physical or mental disability, age, marital status, sexual orientation, gender identity, genetic information, or status as a U.S. veteran. Any student who has concerns about such behavior should contact his/her instructor, Student Assistance at 515-294-1020 or email, or the Office of Equal Opportunity and Compliance at 515-294-7612.

Religious Accommodation If an academic or work requirement conflicts with your religious practices and/or observances, you may request reasonable accommodations. Your request must be in writing, and your instructor or supervisor will review the request. You or your instructor may also seek assistance from the Dean of Students Office or the Office of Equal Opportunity and Compliance.

Contact Information If you are experiencing, or have experienced, a problem with any of the above issues, email