Dieses Buch soll demonstrieren, wie man Programme schreibt, die sich gut als Werkzeuge eignen. Dazu stellen wir eine umfassende Sammlung von Programmen vor, jedes davon ein Lehrbeispiel flir Entwurf und Implementierung. Die Programme sind nicht klinstlich konstruiert, sie haben sich vielmehr selbst als Werkzeuge bei der Konstruktion von Programmen bewahrt. Wir selbst benutzen die meisten dieser Werkzeuge taglich, ja sie Machen sogar den groBten Anteil unserer Rechneranwendungen aus. Die Programme bestehen nicht nur aus Algorithmen und Konzepten: sie sind vollstandig und wurden alle in der in diesem Buch abgedruckten Form getestet. Lesbarkeit wurde durch die Verwendung einer strukturierten Sprache, namlich Ratfor (Abklirzung flir "Rational Fortran") erzielt. Diese Sprache ist leicht verstandlich flir jeden, der mit Fortran, PL/I, Cobol, Algol, Pascal oder einer ahnlichen Sprache vertraut ist. (Ratfor laBt sich ohne Schwierigkeiten in Fortran oder PL/I umwandeln - eines der vorgestellten Werkzeuge ist ein Vorlibersetzer, der Ratfor automatisch in Fortran libersetzt). Wfchtigstes Merkmal ist jedoch, daB die Programme benutzerfreundlich und aufeinander abgestimmt sind; auf diese Weise werden sie eher als Werkzeuge angenommen. Der Charakter dieses Buches ist pragmatisch in dem Sinn, daB wir dem Leser den 'top-down'-Entwurf vermitteln, indem wir systematisch alle Stufen eines Entwurfes durchlaufen. Strukturiertes Programmieren demonstrieren wir anhand strukturierter Programme. Effizienz und Zuverlassigkeit werden auf der Grundlage tatsachlich durchgeflihrter Tests besprochen.
Brian Wilson Kernighan is a computer scientist who worked at Bell Labs alongside Unix creators Ken Thompson and Dennis Ritchie and contributed greatly to Unix and its school of thought.
I read Software Tools, by Brian W. Kernighan and P. J. Plauger (henceforth K&P) around 1978. This was the first edition, which came out in 1976. I was a grad student in Biochemistry. Software Tools was one of three books that came out of Bell Labs in the seventies and eighties: Software Tools by K&P in 1976, The C Programming Language by Brian W. Kernighan and Dennis M. Ritchie in 1978, and The UNIX Programming Environment by Kernighan and Pike in 1983. My graduate mentor, who was one of those remarkable people who knows everything but is somehow not a know-it-all, pointed me to them. (He was not a computer guy -- I think he may have had a brother who worked at Bell Labs.) I have little formal education in programming, and these remarkable books were invaluable.
I began programming seriously in 1973 when I started my freshman year at Cornell University -- the first time I had access to a computer. Software Tools was perhaps the first book I ever read that convincingly addressed the question of how one should design software. The answer presented is not one everyone agrees on. (Microsoft regularly flings to the ground and dances upon every principle here presented.) But I found it congenial.
K&P argue that one way to design good software is to build a toolkit. Each command in the toolkit should accomplish a single, easily stated purpose. When possible, they should be simple -- if you can build a useful and versatile tool with just a few lines of code, you should. And the tools should be designed to work well together.
But K&P are not sterile theorists! Software Tools describes just such a toolkit, with complete working code available for download. Indeed, most of these tools are still in use today, in the form of the basic (and, alas, opaquely named) commands in any Unix-like operating system. I'm including GNU/linux in that group, even though GNU stands for Gnu's Not Unix.
Simplicity and clarity of purpose are good things in engineering! I still use in 2023 tools of my own that I designed back in the 70's after reading Software Tools.
This book was published in 1976. It is classic and a great read. Lots of common sense and I'll go ahead and say that this was one of the first books written showing good patterns and good design.
Oh, and the examples are presented in Ratfor (Rational Fortran)