EECS 230: Programming for Engineers

Syllabus – Winter 2017

Tech M345, TuTh, 12:30–1:50 PM

Course staff & office hours

Instructor: Jesse Tov jesse@eecs Ford 2-215 Gladly by appointment
TAs: Huayi Zhan huayi.zhan@u Tech F313 W 9–11 AM
Libin Song LibinSong2020@u Ford 2-204 Th 3–5 PM

General information

EECS 230 teaches foundational programming skills with an emphasis on professionalism. In order to learn to program, we need a language; our language will be C++, but our focus will be on design and pragmatics, not the language itself. Topics include expressions, types, functions, branches and iteration, user-defined types, data hiding, source control, and testing.


This course assumes nothing beyond basic computer literacy.


We will have two in-class examinations:

There will be no final exam.



Required textbook:

Highly recommend optional book:


The course uses C++ 2014, the current 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.

If you are using windows, you need to install two other programs before CLion:

The first lab will guide you through this setup.

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.

Online resources

Class schedule

This table specifies the course schedule; topics are tentative.

4 Tool setup [lab] 5 Introduction [slides] “What Software Is Made Of”
10 Types, values & I/O [slides] PPP ch. 2–3 11 Small programs [lab] 12 Control statements and functions [slides, code] Homework 1
17 Errors, exceptions, & debugging tactics [slides, code] PPP ch. 4–5 18 Vectors, functions & debugging [lab] 19 How to design programs [slides, code] Homework 2
24 C++ semantics [slides] PPP ch. 6–7 25 Structs [lab] 26 Structs [code] Homework 3
31 Classes [code] PPP ch. 8–9
1 Classes [lab] 2 Exam review Homework 4
7 First exam PPP ch. 10–11 8 Simple CAESAR [lab] 9 Class abstraction [slides, code] Homework 5
14 Memory, pointers, and the free store [slides, code] PPP ch. 17 15 Pointers vs. references [lab] 16 Linked data structures [code] Homework 6
21 Binary search trees [code] PPP ch. 18 & 19 22 More pointers [lab] 23 Generics [slides, code] Homework 7
28 Inheritance and virtual functions [code] PPP ch. 20 & 21
1 Templates and inheritance [lab] 2 Object-oriented design [code] Homework 8
7 Second exam 8 No meeting 9 STL / Exam return [slides]

Course policies

Collaboration and academic integrity

You may not collaborate with anyone on any of the exams. 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.

Some homework assignments will be completed with an assigned partner or team. You must collaborate with your assigned partner or team, 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.

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.


You should submit your homework according to the instructions on the web page for the individual assignments. See here for general instructions.

Late work

Late work will not be accepted.


Your grade will be based on your performance on seven or eight programming assignments and two midterm exams. There will be no final exam.

Each exam counts for 15% of your grade. The balance is divided among the homework assignments, with the first four counting for somewhat less than the last four. Your least favorable homework score will not be counted.

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