|Home||Switchboard||Unix Administration||Red Hat||TCP/IP Networks||Neoliberalism||Toxic Managers|
May the source be with you, but remember the KISS principle ;-)
Skepticism and critical thinking is not panacea, but can help to understand the world better
|How to Solve It||
|Programming Pearls||AWK book||Lions' Commentary on Unix||K&R Book||Rapid Development||The Elements of Programming Style||Tao of programming|
|The Power Elite||The Irony of American History||
Who Rules America Power and Politics in the Year 2000 by G. William Domhoff
|The Jargon file||Military Incompetence||Alice's Adventures in Wonderland and Through the Looking Glass||Animal Farm||The Good Soldier Svejk||Humor||Etc|
Classic books are just this. Classic. And to be a classic computer science book, the book is not necessary should be about IT. Nineteen Eighty-Four is not. The Peter Principle is not. But both are extremely important for any IT specialist to read and comprehend. They just provide a wider picture. Take for example The Good Soldier Svejk or Military Incompetence
The army reflects the society as a very sharp mirror that reflects that processes in large organizations, especially multinational corporations. Gabriel argues that 3 issues produce American military failures:
- Size of the officer corps (it is too big).
- Rapid reassignment of officers (no one learns their job).
- Self-promotion ( and self-serving bureaucracies).
- Amateurism of leadership.
Cynics would say that classic book are to be admired but they never meant to be read ;-). And it's true that some of them may look boring. It is difficult to read The Good Soldier Svejk to the end. You are tied after approximately one-third. Some of them, for example TAOCP, may look too complex, too mathematical. Some like Lions' Commentary on Unix way to detailed to the extent that can't see forest behind the trees. Still you can grow on those books as they preserve their value with time and that's a big difference with mainstream IT pulp stream.
The value of great book is not fully evident during the first or second reading. You just need to reread them periodically. Each of them was/is a tremendous achievement. I cannot say more than that. Anybody who is serious about becoming a real professional should read those books. For example, if your intellectual curiosity extends beyond the O'Reilly cook books and you love programming, you should try to read volume 1 of The Art of Computer Programming (TAOCP). Yes, it's difficult, yes some parts are outdated (it was written 30 years ago) especially the assembler (MIX) that is used in the book, but still there is no other book like this one to present key issues related to system programming in such a great style and with such great depth. You really can grow with this book as you learn the techniques discussed. This is not fundamentalist OO junk that so mach distorts the course Data Structures and Algorithms in major universities those days. This is what real programming is about: the race to provide the cleanest and fastest code possible under particular time constraints and hardware circumstances. IMHO it is often better to combine C with a scripting language interpreter (for example TCL if you have enough memory or AWK if you don't) then to use OO-language as OO does not provide a clean distinction between programming in the small and programming in the large.
Similar if you love Unix and understand C then in addition to TAOCP you may benefit from trying to read (yes, it's difficult, sometimes very difficult) or at least to browse:
Advanced Programming in the UNIX Environment,
The design and implementation of the Unix Operating system
Lion's Commentary on Unix.
Like three volumes of TAoCP these three books are not for beginners as they deal with the inner workings and principles involved in the design of a complex and powerful OS. They needs a lot of work to understand them even partially, but you might be rewarded with much deeper understanding of the OS architecture and compromises in its construction, if you try.
In any case UNIX is today's monster that started as a tiny system. It's amazing that so much of modern Unix functionality already existed in the mid-70s and ran in only 32 kbytes (this is not a typo, yes, kilobytes not megabytes ;-) of RAM.
Version 6 of the UNIX Operating System described in Leon's book gives the reader a unique opportunity to see the real masters at work! John Lions believed strongly that code is a literature, and that a reader can read and analyze great works. He might be wrong, but he made a great attempt: with some effort you might even achieve that elusive feeling of enlightenment. He chose 6th edition, running on the PDP-11 and analyzed a subset of the kernel sources. This book provides an interesting historical perspective that you can never obtain elsewhere: Unix at one time was an elegant small OS that grow into a huge monster, but somewhere under this tremendous complexity of the contemporary Unixes, there are still elegant solutions of the initial versions. Otherwise one can be lost in the complexity of the contemporary monsters like Linux (which was a tiny Os in 1991 but with IBM's help now more resembles MS Windows then its first version ;-) or Solaris.
You can see yourself why Unix stood the test of time: it was designed with a simple philosophy: to give the user the ability to create his own tools to solve problems. The book stresses the issues that we know, but all too often forget: small is beautiful, every program should do one thing well. There is something magical about the power and elegance of early UNIX systems. After it you can read more advanced books like Advanced Programming in the UNIX(R) Environment or if at this point you are still exited about Unix ;-), you may try to learn internals using The Design of the UNIX Operating System
You do not need to agree with me on the selection, but disagreement counts only after you read each of the proposed books ;-). Please note that some of them are even available in HTML format.
Here is the List as of December 2012
Sociology of programming and system administration
Dr. Nikolai Bezroukov
Fashioning complex conceptual constructs is the essence; accidental tasks arise in representing the constructs in language. Past progress has so reduced the accidental tasks that future progress now depends upon addressing the essence.
Of all the monsters that fill the nightmares of our folklore, none terrify more than werewolves, because they transform unexpectedly from the familiar into horrors. For these, one seeks bullets of silver that can magically lay them to rest.
The familiar software project, at least as seen by the non-technical manager, has something of this character; it is usually innocent and straightforward, but is capable of becoming a monster of missed schedules, blown budgets, and flawed products. So we hear desperate cries for a silver bullet--something to make software costs drop as rapidly as computer hardware costs do.
But, as we look to the horizon of a decade hence, we see no silver bullet. There is no single development, in either technology or in management technique, that by itself promises even one order-of-magnitude improvement in productivity, in reliability, in simplicity. In this article, I shall try to show why, by examining both the nature of the software problem and the properties of the bullets proposed.
Skepticism is not pessimism, however. Although we see no startling breakthroughs--and indeed, I believe such to be inconsistent with the nature of software--many encouraging innovations are under way. A disciplined, consistent effort to develop, propagate, and exploit these innovations should indeed yield an order of-magnitude improvement. There is no royal road, but there is a road.
The first step toward the management of disease was replacement of demon theories and numerous theories by the germ theory. That very step, the beginning of hope, in itself dashed all hopes of magical solutions. It told workers that progress would be made stepwise, at great effort, and that a persistent, unremitting care would have to be paid to a discipline of cleanliness. So it is with software engineering today.
Does it have to be hard? --Essential difficulties
Not only are there no silver bullets now in view, the very nature of software makes it unlikely that there will be any--no inventions that will do for software productivity, reliability, and simplicity what electronics, transistors, and large-scale integration did for computer hardware.
We cannot expect ever to see two fold gains every two years.
First, one must observe that the anomaly is not that software progress is so slow, but that computer hardware progress is so fast. No other technology since civilization began has seen six orders of magnitude in performance-price gain in 30 years. In no other technology can one choose to take the gain in either improved performance or in reduced costs. These gains flow from the transformation of computer manufacture from an assembly industry into a process industry.
Second, to see what rate of progress one can expect in software technology, let us examine the difficulties of that technology. Following Aristotle, I divide them into essence, the difficulties inherent in the nature of software, and accidents, those difficulties that today attend its production but are not inherent.
The essence of a software entity is a construct of interlocking concepts: data sets, relationships among data items, algorithms, and invocations of functions. This essence is abstract in that such a conceptual construct is the same under many different representations. It is nonetheless highly precise and richly detailed.
I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation. We still make syntax errors, to be sure; but they are fuzz compared with the conceptual errors in most systems.
If this is true, building software will always be hard. There is inherently no silver bullet.
Let us consider the inherent properties of this irreducible essence of modern software systems: complexity, conformity, changeability, and invisibility.
Complexity. Software entities are more complex for their size than perhaps any other human construct because no two parts are alike (at least above the statement level). If they are, we make the two similar parts into a subroutine--open or closed. In this respect, software systems differ profoundly from computers, buildings, or automobiles, where repeated elements abound.
Digital computers are themselves more complex than most things people build: They have very large numbers of states. This makes conceiving, describing, and testing them hard. Software systems have orders-of-magnitude more states than computers do.
Likewise, a scaling-up of a software entity is not merely a repetition of the same elements in larger sizes; it is necessarily an increase in the number of different elements. In most cases, the elements interact with each other in some nonlinear fashion, and the complexity of the whole increases much more than linearly.
The complexity of software is an essential property, not an accidental one. Hence, descriptions of a software entity that abstract away its complexity often abstract away its essence. For three centuries, mathematics and the physical sciences made great strides by constructing simplified models of complex phenomena, deriving properties from the models, and verifying those properties by experiment. This paradigm worked because the complexities ignored in the models were not the essential properties of the phenomena. It does not work when the complexities are the essence.
Many of the classic problems of developing software products derive from this essential complexity and its nonlinear increases with size. From the complexity comes the difficulty of communication among team members, which leads to product flaws, cost overruns, and schedule delays. From the complexity comes the difficulty of enumerating, much less understanding, all the possible states of the program, and from that comes the unreliability. From complexity of function comes the difficulty of invoking function, which makes programs hard to use. From complexity of structure comes the difficulty of extending programs to new functions without creating side effects. From complexity of structure come the unvisualized states that constitute security trapdoors.
Not only technical problems, but management problems as well come from the complexity. It makes overview hard, thus impeding conceptual integrity. It makes it hard to find and control all the loose ends. It creates the tremendous learning and understanding burden that makes personnel turnover a disaster.
Conformity. Software people are not alone in facing complexity. Physics deals with terribly complex objects even at the "fundamental" level [BJC:]. The physicist labors on, however, in a firm faith that there are unifying principles to be found, whether in quarks or in unified field theory. Einstein argued that there must be simplified [BJC: undecipherable] of nature, because God is not capricious or arbitrary.
No such faith comforts the software engineer. Much of the complexity that he must master is arbitrary complexity, forced without rhyme or reason by the many human institutions and systems to which his interfaces must conform. These differ from interface to interface, and from time to time, not because of necessity but only because they were designed by different people, rather than by God.
In many cases, the software must conform because it is the most recent arrival on the scene. In others, it must conform because it is perceived as the most conformable. But in all cases, much complexity comes from conformation to other interfaces; this complexity cannot be simplified out by any redesign of the software alone.
The Art of Computer Programming
The Mythical Man-Month
The AWK Programming Language
The C Programming Language : ANSI C Version (K&R Book)
Lions' Commentary on Unix
The Elements of Programming Style
How to Solve It by George Polya
The Peter Principle
The True Believer
ACM Turing Award Lectures list of Turing Award lectures
ACM Classic of the Month (it's really unfortunate that ACM stop publishing this series :-(, but still it's better than nothing)...
The Last but not Least Technology is dominated by two types of people: those who understand what they do not manage and those who manage what they do not understand ~Archibald Putt. Ph.D
Copyright © 1996-2018 by Dr. Nikolai Bezroukov. www.softpanorama.org was initially created as a service to the (now defunct) UN Sustainable Development Networking Programme (SDNP) in the author free time and without any remuneration. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License. Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine.
FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available to advance understanding of computer science, IT technology, economic, scientific, and social issues. We believe this constitutes a 'fair use' of any such copyrighted material as provided by section 107 of the US Copyright Law according to which such material can be distributed without profit exclusively for research and educational purposes.
This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree...
|You can use PayPal to make a contribution, supporting development of this site and speed up access. In case softpanorama.org is down you can use the at softpanorama.info|
The statements, views and opinions presented on this web page are those of the author (or referenced source) and are not endorsed by, nor do they necessarily reflect, the opinions of the author present and former employers, SDNP or any other organization the author may be associated with. We do not warrant the correctness of the information provided or its fitness for any purpose.
Last modified: March 12, 2019