Topical Outline: | 1. Systems Programming Tools
a) Use emacs or vi to write programs in a Unix environment.
b) Use basic Unix commands including (but not limited to): cd, pwd, mkdir, ls, grep, man, apropos, ps, kill, top, less, more, chmod, cp, mv, rm, diff, sort, wc, and find.
c) Use the command line in a Unix environment to run processes and to pipe or redirect input or output.
d) Demonstrate an understanding of the Unix file system by changing file permissions to allow programs to open, close, read, and write files.
e) Use a Makefile to compile and run a program with more than one header file and more than one source code file.
f) Use GDB to debug programs with various errors.
g) Use Valgrind to find memory leaks in programs. Implement programs that use dynamic memory allocation and deallocation and have no memory leaks.
2. C Programming
a) Compile, link, and run programs via the command line.
b) Design and implement header files that use preprocessor directives.
c) Design and implement programs that use basic programming and flow of control structures such as (but not limited to) variables, operators, expressions, decision statements, loops, pointers, and functions (prototyping, calling, and passing arguments to functions).
d) Demonstrate knowledge of simple data structures (arrays, strings, structs, enums, unions) by writing out their memory maps and tracing through the output of source code.
e) Demonstrate knowledge of pointers and arrays by tracing through the output of source code containing pointers to 1D arrays, 2D arrays, and 3D arrays.
f) Design and implement programs that use command-line arguments.
g) Design and implement programs in a Unix environment that open, close, read, and write files.
h) Design and implement a program that uses pointers and dynamic memory allocation and deallocation.
3. C++ Programming
a) Design and implement basic object-oriented and structured programming concepts in C++.
b) Use simple data structures and classes in C++ such as string, vector, and list.
c) Design and implement a program that consists of more than one class, a constructor, a destructor, a pointer, and more than one object.
4. Process and Inter-process Communication
a) Design and implement programs that use system calls and signal handling (fork, exec, wait, etc.) and run concurrently.
b) Design and implement programs that use pipe and dup2 for input/output redirection and inter-process communication.
c) Design and implement a multithreaded program.
d) Design and implement client and server programs that communicate via a socket in a Unix environment.
5. Binary Representation
a) Understand how unsigned integers are represented and stored in memory by converting unsigned integers to and from base-10 to binary.
b) Understand how signed integers are represented and stored in memory using two’s complement representation by converting signed integers to and from base-10 to binary.
c) Design and implement a program that uses bitwise operators on unsigned integers.
6. Programming Paradigms
a) Explain some key differences between Java, C++, and C such as (but not limited to): object-oriented vs. procedural programming languages, lower-level vs. higher-level programming languages, dynamic memory allocation and deallocation, and pointers.
b) Compare and contrast generic models in C, C++, and Java (e.g. void pointers vs templates/generics, templates/generics vs macros). |