The Shoreline'14 April, 2014 | Page 57

To top it off, pretty much everything in Unix is a file: terminals, standard input, standard error, standard output, random number generators, audio devices, and even power switches manifest as files5. Having composable programs that deal with contents of files puts the problem, the data, and the tools to realize solutions in the same dimension. To build systems, programmers must first create modules and tools that they can themselves use with tranquility. I think the Unix philosophy can be generalized to apply to modules inside a program. It teaches us to 1) Design modules that do one thing and do it extremely well, in isolation. Modules that are simple, general, minimal, robust, and parsimonious with resources6. 2) Allow for simple but powerful ways to combine these modules so that you can compose complex systems easily with your simple modules, i.e., strive for composablility. This involves creating uniform input and output formats, and making use of polymorphic functions7,8. Following these principles will let you build systems that you can easily modify, debug and maintain. It will take you one step closer to being at peace with what