Unix software development: - Where I came from, there was a class on this - You can piece it together from 228 and 430 - At some point, we'll move toward CS253 Systems Programming Pieces that you'll need: - compiler (examples: gcc, clang) - text editor (examples: vim, nano) - documentation (examples: man) - build system (examples: make, maven) - shell (examples: bash, csh) - (optional) versioning system (examples: git, cvs) - (optional) debugger (examples: gdb, various frontends) - (optional) IDE (examples: eclipse, kdevelop) What language? - Traditional: C - Slightly less traditional: C++ - High level: Python - If Unix = OSX: Objective C or swift - If Unix = Android: Java - Up and coming: Go - New from Apple: Swift - Memory safety for C/C++: Rust - Functional choice: LISP or Scheme - Most of the others work too. Would you like a recommendation? - You'll learn Python, C++, and some C here - Learn Go, Swift, Java, or Objective C - Write a significant program in Scheme General process to build a program that somebody else wrote: - Acquire program - Resolve dependencies - Build with build system Example: Let's build the game engine design example from last term Example: Let's build vim from source configure, fix dependencies, make, make install A brief primer on unix programming using C: Manual section 2 vs. 3 vs. 7 - man man You'll have to learn to program in C to do this - CS430 if not sooner - Sometimes in CS250 or CS312 Python generally has wrappers for library functions, system calls, etc Ok, the goal: Add up all the numbers in an input stream (stream_adder) Adding an argument to set the operator Calculate total bogomips Calculate the number of interrupts handled by each processor