Syllabus

Course Objectvies
The primary objective of this course is to become familiar with practical software design and programming activities in a C/C++ and Unix environment. The course does not assume any previous experience with C/C++, but does assume programming experience in other languages. Familiarity with data structures and object oriented programming is assumed. In addition to learning many aspects of the C and C++ languages, we will focus on good programming practices and tools that support them, such as revision control and shell scripting. We will also cover topics in systems, parallel programming, and simple linear algebra. Throughout the course, we will focus on issues of good programming style and practices. The assignments and project will be done in a Unix environment and we will learn about various Unix tools along the way.

Schedule

Week Date Topic Reading Code
1 Mar. 28 Introduction to Unix vim, grep, C and Data Structures Chapter 2
Mar. 30 Introduction to C git, C and Data Structures Chapter 3, 4.3, 4.4, 4.7, and 4.8, scanf
2 Apr. 4 Memory and Pointers I C Pointers, C and Data Structures Chapter 4.6
Apr. 6 Memory and pointers II
3 Apr. 11 Debugging, compiling and linking C and Data Structures 4.10 ~ 4.11, gdb cheatsheet, Valgrind Quick Start, Linking
Apr. 13 C - ELF, Libraries, and BFS ELF Part 1~2, Library, Makefile
4 Apr. 18 Midterm review Midterm solution
Apr. 20 Midterm
5 Apr. 25 Intro to C++ and Classes and Objects Thinking in C++ Chapters 1 ~ 4
Apr. 27 Classes and Objects Midterm
6 May 2 Initialization, Cleanup, and Access Control; Cryptography Thinking in C++ Chapter 5 ~ 6; Ciphers
May 4 Initialization and Cleanup II
7 May 9 Constants I Thinking in C++ Chapter 8
May 11 Constants II, BST
8 May 16 Copy Constructors Thinking in C++ Chapter 11
May 18 Namespace, HPC Thinking in C++ Chapter 10
9 May 23 Operator Overloading; Thinking in C++ Chapter 12
May 25 Dynamic Object Creation; RBT ; Final Exam Sample Thinking in C++ Chapter 13
10 May 30 Memorial Day holiday
Jun. 1 Inheritance; Templates Thinking in C++ Chapter 14 - 16

Final Exam: Friday, Jun. 10 10:15 AM - 12:15 PM (2 hours)