NOTE: this is a tentative syllabus.
Students who successfully complete this course will be able to
ICSI/ICEN 333 or equivalent with a grade of at least C.
You are expected to have a good knowledge of programming basics, C and Assembly programming.
There is no single textbook that covers everything discussed in this course. Therefore, we rely on multiple online resources (books, articles, and tutorials) which are available publicly or via the University’s network. You are required to read each session’s readings listed on the schedule before attending the class.
The course syllabus and schedule is available on the course webpage. Most of the tasks in this class will be handled via GitHub including distribution of notes and homework assignments, assignment submission, and feedback. We will also use Blackboard for communication and for your grades.
The following schedule is tentative and will be regularly updated. It is your responsibility to check the schedule regularly.
means required reading. means optional reading.
|Module #0: Introduction|
|Jan 24||Course Overview, Required Setup for Assignments|
|Module #1: Shell/Bash|
|Feb 05||Using the Shell|
|Feb 07||Scripting the Shell|
|Feb 12||Filtering Text|
|Feb 14||Exam #1|
|Module #2: C Programming|
|Feb 19||Basics: Types, Operations, Control Structures. Complex Data Types: Strings, Arrays, Pointers, etc. Functions|
|Feb 21||Basics (cont.)|
|Feb 26||Multi-File Programs, GCC & Make|
|Mar 05||Memory, Valgrind|
|Mar 07||Exam #2|
|Module #3: POSIX/Linux Programming|
|Mar 12||System Calls|
|Mar 14||Files, I/O|
|Mar 19||Spring Break|
|Mar 21||Spring Break|
|Mar 26||Files, I/O (cont.)|
|Mar 28||Processes & IPC|
|Apr 02||Processes & IPC (cont.)|
|Apr 04||Processes & IPC (cont.)|
|Apr 11||Networking (cont.)|
|Apr 16||Exam #3|
|Module #4: Some Fundamental System Programs|
|Apr 25||Linkers & Loaders|
|Apr 30||Exam #4|
|Module #5: Misc./Advanced Topics|
For all assignments and papers, make sure to do your own work, except where collaboration is explicitly permitted or required. Also, make sure that you properly cite any resource from which you borrow ideas and that you clearly distinguish them from your contributions.