Students in this course will learn to build medium size, multiple source file software tools in the programming languages C and Python. This course is for students with a solid understanding of Java. Students will learn and use standard tools for compiling (gcc), debugging (gdb), installing (make), profiling (gprof). Programming topics include data types, arithmetic, flow of control, arrays, functions, structs, pointers, bit-level operations, the standard C library, etc. For the first 2/3 of the course students program in C; in the final 1/3, programs are written in Python.