"Reading this book has filled a gap in my education. I feel a sense of completion, understand that UNIX is really a style of community. Now I get it, at least I get it one level deeper than I ever did before. This book came at a perfect moment for me, a moment when I shifted from visualizing programs as things to programs as the shadows cast by communities. From this perspective, Eric makes UNIX make perfect sense." --Kent Beck, author of Extreme Programming Explained, Test Driven Development, and Contributing to Eclipse"A delightful, fascinating read, and the lessons in problem-solvng are essential to every programmer, on any OS." --Bruce Eckel, author of Thinking in Java and Thinking in C++Writing better software: 30 years of UNIX development wisdomIn this book, five years in the making, the author encapsulates three decades of unwritten, hard-won software engineering wisdom. Raymond brings together for the first time the philosophy, design patterns, tools, culture, and traditions that make UNIX home to the world's best and most innovative software, and shows how these are carried forward in Linux and today's open-source movement. Using examples from leading open-source projects, he shows UNIX and Linux programmers how to apply this wisdom in building software that's more elegant, more portable, more reusable, and longer-lived.Raymond incorporates commentary from thirteen UNIX pioneers: Ken Thompson, the inventor of UNIX. Ken Arnold, part of the group that created the 4BSD UNIX releases and co-author of The Java Programming Language. Steven M. Bellovin, co-creator of Usenet and co-author of Firewalls and Internet Security. Stuart Feldman, a member of the Bell Labs UNIX development group and the author of make and f77. Jim Gettys and Keith Packard, principal architects of the X windowing system. Steve Johnson, author of yacc and of the Portable C Compiler. Brian Kernighan, co-author of The C Programming Language, The UNIX Programming Environment, The Practice of Programming, and of the awk programming language. David Korn, creator of the korn shell and author of The New Korn Shell Command and Programming Language. Mike Lesk, a member of the Bell Labs development group and author of the ms macro package, the tbl and refer tools,lex and UUCP. Doug McIlroy, Director of the Bell Labs research group where UNIX was born and inventor of the UNIX pipe. Marshall Kirk McKusick, developer of the 4.2BSD fast filesystem and a leader of the 4.3BSD and 4.4BSD teams. Henry Spencer, a leader among early UNIX developers, who created getopt, the first open-source string library, and a regular-expression engine used in 4.4BSD.
Cited By
- Ma Z, Detor S and Zhong L Offloading Operating System Functions to the Cloud Proceedings of the 25th International Workshop on Mobile Computing Systems and Applications, (40-46)
- Taeumel M and Hirschfeld R Relentless Repairability or Reckless Reuse: Whether or Not to Rebuild a Concern with Your Familiar Tools and Materials Proceedings of the 2022 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software, (185-194)
- Wang J, Jiang Y, Su T, Li S, Xu C, Lu J and Su Z Detecting non-crashing functional bugs in Android apps via deep-state differential analysis Proceedings of the 30th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering, (434-446)
- Wu R, Chen M, Wang C, Fan G, Qiu J and Zhang C Accelerating Build Dependency Error Detection via Virtual Build Proceedings of the 37th IEEE/ACM International Conference on Automated Software Engineering, (1-12)
- MacInnis M, Baysal O and Lanza M Terminals all the way down Proceedings of the ACM/IEEE 44th International Conference on Software Engineering: New Ideas and Emerging Results, (86-90)
- Paradis C and Kazman R Building the MSR Tool Kaiaulu: Design Principles and Experiences Software Architecture, (107-129)
- Hollerweger F Streaaam: A fully automated experimental audio streaming server Proceedings of the 16th International Audio Mostly Conference, (161-168)
- Hüls J, Niehaus H and Remke A hpnmg: A C++ Tool for Model Checking Hybrid Petri Nets with General Transitions NASA Formal Methods, (369-378)
- van den Burg G, Nazábal A and Sutton C (2022). Wrangling messy CSV files by detecting row and type patterns, Data Mining and Knowledge Discovery, 33:6, (1799-1820), Online publication date: 1-Nov-2019.
- Schmidt A and Scholz S Powerful Data Analysis and Composition with the UNIX-Shell Web Engineering, (582-585)
- Seyedtalebi N Algorithms for Provisioning Edge Computing Resources to Minimize Data Transport Costs 2019 16th Annual IEEE International Conference on Sensing, Communication, and Networking (SECON), (1-9)
- Licker N and Rice A Detecting incorrect build rules Proceedings of the 41st International Conference on Software Engineering, (1234-1244)
- Schütz F, Fabro J, Ronszcka A, Stadzisz P and Simão J (2018). Proposal of a declarative and parallelizable artificial neural network using the notification-oriented paradigm, Neural Computing and Applications, 30:6, (1715-1731), Online publication date: 1-Sep-2018.
- Celińska D Coding together in a social network Proceedings of the 9th International Conference on Social Media and Society, (31-40)
- Padilha B, Roberto R, Schwerz A, Pu C and Ferreira J WED-SQL: An Intermediate Declarative Language for PAIS Execution Web Services – ICWS 2018, (407-421)
- Schmidts O, Kraft B, Schreiber M and Zündorf A Continuously evaluated research projects in collaborative decoupled environments Proceedings of the 5th International Workshop on Software Engineering Research and Industrial Practice, (2-9)
- Conte de Leon D, Goes C, Haney M and Krings A (2018). ADLES, Computers and Security, 74:C, (12-40), Online publication date: 1-May-2018.
- Utsumi M, Tazaki H and Esaki H /dev/stdpkt Proceedings of the 13th Asian Internet Engineering Conference, (8-15)
- Kjolstad F, Chou S, Lugato D, Kamil S and Amarasinghe S taco: a tool to generate tensor algebra kernels Proceedings of the 32nd IEEE/ACM International Conference on Automated Software Engineering, (943-948)
- Krisper M, Iber J, Rauter T and Kreiner C Physical Quantity Proceedings of the 22nd European Conference on Pattern Languages of Programs, (1-20)
- Spinellis D, Louridas P and Kechagia M The evolution of C programming practices Proceedings of the 38th International Conference on Software Engineering, (748-759)
- Yalcin M, Elmqvist N and Bederson B (2015). AggreSet: Rich and Scalable Set Exploration using Visualizations of Element Aggregations, IEEE Transactions on Visualization and Computer Graphics, 22:1, (688-697), Online publication date: 31-Jan-2016.
- Hall C Rethinking the human-readability infrastructure Proceedings of the Workshop on Future Programming, (1-6)
- Soriano-Salvador E, Muzquiz G and Ballesteros F (2015). Optimistic semaphores with non-deterministic choice operation for heterogeneous manycore systems, Concurrency and Computation: Practice & Experience, 27:14, (3676-3701), Online publication date: 25-Sep-2015.
- Spinellis D A repository with 44 years of Unix evolution Proceedings of the 12th Working Conference on Mining Software Repositories, (462-465)
- Nanz S and Furia C A comparative study of programming languages in Rosetta code Proceedings of the 37th International Conference on Software Engineering - Volume 1, (778-788)
- Taeumel M, Perscheid M, Steinert B, Lincke J and Hirschfeld R Interleaving of Modification and Use in Data-driven Tool Development Proceedings of the 2014 ACM International Symposium on New Ideas, New Paradigms, and Reflections on Programming & Software, (185-200)
- Hall C HCI metacomputing Proceedings of the companion publication of the 2014 ACM SIGPLAN conference on Systems, Programming, and Applications: Software for Humanity, (21-24)
- Gardner A and Unger J Depends Proceedings of the Fourth Symposium on Digital Production, (19-24)
- Yuan P, Guo Y and Chen X Towards an operating system for the campus Proceedings of the 5th Asia-Pacific Symposium on Internetware, (1-4)
- Rakić P, Stričević L and Rakić Z Statically typed matrix Proceedings of the Fifth Balkan Conference in Informatics, (217-222)
- Ziegler J, Hussein T, Münter D, Hofmann J and Linder T Generating route instructions with varying levels of detail Proceedings of the 3rd International Conference on Automotive User Interfaces and Interactive Vehicular Applications, (31-38)
- Eilers D and Koskinen T Adapting ACATS to the Ahven testing framework Proceedings of the 16th Ada-Europe international conference on Reliable software technologies, (75-88)
- West R Distributed creativity within a community of student instructional designers Proceedings of the 9th International Conference of the Learning Sciences - Volume 1, (341-348)
- Capra E, Francalanci C and Merlo F (2010). The economics of community open source software projects, Advances in Software Engineering, 2010, (1-17), Online publication date: 1-Jan-2010.
- Treinen R and Zacchiroli S Expressing advanced user preferences in component installation Proceedings of the 1st international workshop on Open component ecosystems, (31-40)
- Cafer F and Misra S Effective Project Leadership in Computer Science and Engineering Proceedings of the International Conference on Computational Science and Its Applications: Part II, (59-69)
- Ye Y, Yamamoto Y, Nakakoji K, Nishinaka Y and Asada M Searching the library and asking the peers Proceedings of the 5th international symposium on Principles and practice of programming in Java, (41-50)
- Lim S and Lucas P JDA Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications, (586-601)
- Bachmann P Static and metaprogramming patterns and static frameworks Proceedings of the 2006 conference on Pattern languages of programs, (1-33)
- Johnson T and Eigenmann R Context-sensitive domain-independent algorithm composition and selection Proceedings of the 27th ACM SIGPLAN Conference on Programming Language Design and Implementation, (181-192)
- Johnson T and Eigenmann R (2006). Context-sensitive domain-independent algorithm composition and selection, ACM SIGPLAN Notices, 41:6, (181-192), Online publication date: 11-Jun-2006.
- Winikoff M Towards Making Agent UML Practical Proceedings of the Fifth International Conference on Quality Software, (401-412)
- Theunissen W, Boake A and Kourie D In search of the sweet spot Proceedings of the 2005 annual research conference of the South African institute of computer scientists and information technologists on IT research in developing countries, (268-277)
- Nelson J Structured programming using processes Proceedings of the 2004 ACM SIGPLAN workshop on Erlang, (54-64)
Index Terms
- The Art of UNIX Programming