ECE 551: Programming, Data Structures, and Algorithms in C++

This class is aimed at MS/MEng students who want to focus on Computer Engineering, but whose undergraduate degree is in an area other than Computer Engineernig. This course will bring students up to speed on programming, data structures, and algorithms. C++ is the language of choice in this class because C and C++ are very commonly used by Computer Engineers.

Background, Preparation, and Difficulty

This class requires no previous background in programming, as we start from the beginning, however, students without any prior programming experience must work quite hard to keep up with the rapid pace of the class.    Some students think they have had prior experience as they have had courses which focused on memorizing syntax and library functions.  Such students quickly find that this style of background does little to prepare them for serious programming.  

Students who have some background in programming are strongly advised to focus deeply and carefully on the material from the start.  These fundementals form the foundation for more complex material later on, and thus are critical to success in more advanced content. Students who have matery of the first month's worth of material (Chapters 1-13) should take ECE 751 instead.

The pace of this course is quite aggressive: we cover more material in one semester than most undergraduate curriculums do in two semesters.  This pace is required for all Masters students to be "up to speed" for programming in the Spring semester, regardless of the background they came in with.  Accordingly, the workload is high, but not impossible.  Many students have become proficient programmers, even with no prior background.   However, such success requires hard work, discipline, and focus. 

For students who are concerned about their lack of background, and wish to gain some familiarity with programming prior to taking this course, we have a 4 course Coursera specialization which covers the first month of material in this course.  The courses are

  1. Programming Fundementals
  2. Writing, Running, and Fixing Code in C
  3. Pointers, Arrays, and Recursion 
  4. Interacting with the System and Managing Memory

We expect to have an honors section of 551 starting Fall 2019 which will start after the material in this specialization.  If you take these and master this material, the honors section is likely appropriate for you.  

We also have a Coursera specialization in Java for those who are interested in learning that. 

Flipped Classroom and Mastery Learning

In this course, we use a flipped classroom approach: students read All of Programming and watch the videos in it outside of class.  During classtime, students ask the instructor questions, and work on programming assignments.  Working on programming assignments in class ensures that help is readily available, as the instructor is on hand to answer questions immediately.   The expectation is that students will not be stuck for long due to this rapid availability of help.  

The assignments in this class follow a "mastery learning" model, meaning that a student must demonstrate mastery of one assignment by scoring sufficiently highly before the student may start on the next assignment.   Students are allowed to resubmit their assignment multiple times, fixing their mistakes, and learning from them each time.


Reading Schedule 

Day Of Week Date Required Optional
Monday 8/26 Appendices A; B.1–B.5, B.12; C.1–C.3  
Wednesday 8/28 Chapter 1; Appx C.4–C.7  
Friday 8/30 Chapter 2; Appx D.4 Appx E.1
Monday 9/2 Chapter 3 Appx E.2
Wednesday 9/4 Chapter 4; Appx B.6–B.8  
Friday 9/6 Chapter 5; Appx C.8–C.10; D.1 Appx C.11–C.12; E.3
Monday 9/9 Chapter 6; Appx B.9–B.11; D.2  
Wednesday 9/11 Chapter 7  
Friday 9/13 Chapter 8  
Monday 9/16 Chapter 9; Appx D.3.1–D.3.3  
Wednesday 9/18 Chapter 10  
Monday 9/23 Chapter 11  
Wednesday 9/25 Chapter 12; Appx D.3.4–D.3.6, D.5  
Monday 9/30 Chapter 13  
Wednesday 10/2    
Friday 10/4 Midterm Exam
Monday 10/7 Fall Break
Wednesday 10/9 Chapter 14 Appx E.6.1
Monday 10/14 Chapter 15 Appx E.6.4–E.6.5
Wednesday 10/16 Chapter 16  
Monday 10/21 Chapter 17 Appx E.6.3, E.6.6–E.6.7, 6.11
Wednesday 10/23 Chapter 18 Appx E.4, E.6.8
Friday 10/25 Chapter 20  
Monday 10/28 Chapter 19  Appx E.6.2, E.6.9
Wednesday 10/30 Chapter 21  
Monday 11/4 Chapter 22  
Wednesday 11/6    
Monday 11/11 Chapter 23  
Wednesday 11/13 Chapter 24  
Monday 11/18 Chapters 25 and 26  
Wednesday 11/20 Chapter 27  
Friday 11/22 Chapter 28  
Monday 11/25 Chapter 29  
Wednesday 11/27 Thanksgiving Break
Monday 12/2 Chapters 30 and 34  Chapters 31, 32, and 33