Prerequisite (if any): Introduction to Programming or programming background which will be assessed by an entry test

Course Content

Linux Fundamentals - linux file system, absolute and relative file paths, pseudo files, Linux terminal, navigation and simple commands, version control (1 lecture + 3 hours lab)

Basic structure of a computer: processor, memory, secondary storage and I/O peripherals; mapping of programming constructs to hardware elements variables and its addresses, data types and its representation, ranges and overflow (1 lecture + 3 hours lab)

C/C++ programming: Arrays, Array indexing, memory view of (multi-dimensional) arrays, functions, pointers, dereferencing and address operators, pass-by-value and pass-by-reference mechanisms in function calls, pointer arithmetic, array manipulation using pointers, user-defined/abstract data types, file operations (5 lectures + 9 hours lab)

Debugger, Coding across multiple files, Coding conventions, Stages of compilation (preprocessor, compiler, assembler, linker, loader), Static and Dynamic libraries (2 lectures + 6 hours lab)

Makefile, make variables, pattern substitutions and wildcards, Organizing code into multiple folders, order-only prerequisites of Makefiles (2 lectures + 6 hours lab)

Shell scripting, I/O redirection, UNIX pipe ( | ) and command pipelines (2 lectures + 6 hours lab)

Multi-threaded programs (using libraries), multi-process programs and inter-process communication (including sockets) (1 lecture + 3 hours lab)

Learning Outcomes

  1. Prepare students to write performant C/C++ programs

  2. Equip students with tools that improve their software development productivity

  3. Give them hands-on experience on advanced programming constructs

Text Books

  1. Harvey M. Deitel, and Paul J. Deitel, C How to Program, Published by Pearson, ISBN: 978-0132261197

  2. Richard Blum, Linux Command Line and Shell Scripting Bible. Publisher: Wiley Publishing. ISBN-10: 111898384X, ISBN-13: 978-1118983843

References

  1. The Unix Programming Environment, Authors: Brian W Kernighan and Rob Pike. Publisher: Pearson. ISBN-10: 9332550255, ISBN-13: 978-9332550254.

  2. Randal E. Bryant, and David R. O'Hallaron, Computer Systems: A Programmer's Perspective, Published by Pearson Education India, ISBN-10: 9332573905, ISBN-13: 978-9332573901

  3. Blogs and other materials available on the internet (as prescribed by the instructors)