Don't Embarass Me / Don't Embarass Yourself: Thinking in C and *nix

General Materials

Introduction - Introductory notes on these materials.

Sample problems - A series of problems to get you thinking about problem solving in C and *nix.

Thinking in *nix - A short guide to general principles that often guide *nix programmers.

Thinking in C - A short guide to general principles that often guide C programmers.

General Programming Issues

Programming foibles to avoid - Some approaches to program development that irritate this author.

Unit testing - Notes on ways to think about testing your programs.

Unix and Linux

Shell basics - Basic instructions for using the cell.

Basic *nix tools - Tools that every *nix programmer should know.

Shell scripting - Writing simple shell programs.

Regular expressions - Thinking about and writing the textual patterns used in sed, grep, and more.


Beginning Make - The basics of the Make system.

Variables in Make - How to define and use variables in Make. Automatic variables.

Generic Rules in Make - How to write generic rules in Make, rules that apply to all files that match certain patterns.


Compilation - Compiling C files.

CPP - Using the C preprocessor.

Headers - Why have header files and how to design files.

Macros - Using and abusing macros in C.

Libraries - Using and building libraries in C.

Other Basic Concepts

Static variables - The why and how of static variables.

Using typedef - A way to name types.

Thinking about Functions

Designing functions - Typical ways to organize the inputs to and outputs from functions, particularly in the presence of potential problems.

Variable-argument functions - Writing functions that can take different numbers and types of parameters.

Playing with Pointers

Function pointers - Creating and using pointers to functions.

Handles - Working with handles (pointers to pointers).

Other Concepts

Signals - Handling and sending signals, messages that follow a different execution path.

Useful Libraries

Command-line processing - Using and parsing parameters passed on the command line.

GLib - Using GLib, a convenient set of routines.


GDB - Debugging your programs with gdb, the GNU debugger.