The Art Of Unix Programming

Preface

Why this book? Who should read this book. How to use this book. Related references.

Chapter 1: Philosophy Matters

The durability of Unix. Why learn Unix's culture? What Unix does right. Basics of the Unix philosophy. Applying the Unix philosophy. Our major case studies.

Chapter 2: On Not Reinventing The Wheel

Laziness is an economic virtue. Taoist programming. Leveraging open-source software. Open-source resources. Open-source licensing and its consequences.

Chapter 3: To C Or Not To C

How to choose a language for your application. C versus C++. The memory-management problem and its consequences. The argument for interpretive languages. Mixed-language strategies. Perl. Python. Shell. Tcl/Tk. Java. Emacs Lisp.

Chapter 4: The Tactics of Development

The essential Unix development tools. Leveraging the compiler. Editors. Make. Design for transparency. Run-time debugging. Profiling. Version-control systems. Emacs as the universal front-end.

Chapter 5: As Simple As Possible, But No Simpler

Application partitioning. Avoiding the monolith. The implications of cheap process spawning. Classical filters and redirection. Shellouts, wrappers, and plugins. Pipes, messages, shared memory, signals. Client/server partitioning as a complexity-control tactic. Beware of threads.

Chapter 6: The Well-Tempered Application

Unix conventions and the Rule of Least Surprise. How run-control files should look. What to make configurable. Conventions for command-line options. Environment variables.

Chapter 7: Showing Your Best Face

History of interface design under Unix. Tradeoffs between CLI and GUI Don't give it a GUI if it doesn't need one. Separating the GUI from the back end. Dual-mode interfaces. The Web browser as universal front end.

Chapter 8: Program Generation

Leveraging YACC and LEX for applications. Interface builders for GUIs. The uses and abuses of macroexpansion. Glade.

Chapter 9: Designing for Portability

Unix standards: which ones matter, which ones don't. ANSI/POSIX. Tools for portability -- Imake, autoconf, custom shell configurators. GCC as a portability lever.

Chapter 10: A KISS And A Handshake

The importance of readability. False economy of binary protocols. Classical Internet protocols and the Internet meta-protocol. HTTP as universal application protocol.

Chapter 11: Documenting With Less Pain

Unix documentation styles. Man pages. HTML. Texinfo. Sgml-tools. POD. Javadoc. DocBook. Mixing styles. Unsolved problems.

Chapter 12: The Open-Source Development Model

Why does open-source software work? Open development. Scaling effects. Capturing the advantages of open development in commercial projects. RFCs and the open standards process. Standards as DNA, programs as RNA.

Other topics to be included:


Eric S. Raymond <esr@snark.thyrsus.com>