Facts and Fallacies of Software Engineering
||Author: Robert L. Glass|
List Price: $29.99
Our Price: Click to see the latest and low price
Publisher: Addison-Wesley Pub Co (28 October, 2002)
Sales Rank: 11,645
Average Customer Rating: 5 out of 5
Customer ReviewsRating: 5 out of 5
On Computational Feasibility
I recommend this book to any software person who wants to find out why most software projects that fail, fail.
But my specific interest revolves around writing software in large engineering (hard engineering) companies, in that very peculiar environment. Specifically, the hard engineering environment in which knowledge of the programming language is considered the most advanced software theory needed to produce a product, and in which Electrical Engineers without any formal education in advanced data structures, algorithms to manipulate them, search strategies, and heuristics are writing most of the code.
I am seeing HUGE software projects fall FAR short of their schedulled goals, because those doing the coding have simply used up all their computational cycles (I'm talking about real-time software). In these situations, managers seem to imply
1. they were blindsided
2. there are no ways to forsee such computational box canyons
3. no one could have done better, anyway.
On all 3 points, managers are wrong. And the substance on which they are so badly wrong, would make for another 10 fallacies in Glass' book. For example:
Fallacy N: Hard engineers produce advanced software algorithms.
The average hard engineer is writing Freshman undergraduate code, and making basic errors in design.
Fallacy N+1: Simple code (meaning no Computer Science theory) is much more efficient than highly tailored software algorithms. Actually, it is often orders of magnitude less efficient.
Fallacy N+2: Analytical mathematical solutions are the only ones worthy of respect. Actually, with the incredibly complex problems in modern engineering, closed form mathematical solns may never be found. Many such solns are so computationally expensive, that they never could be practical solutions.
Fallacy N+3: There are no analytical methods for identifying algorithms with prohibitive computational complexity--you must just write the software and try it out. Actually, there is a whole field of C.S. that does this.
Fallacy N+4: Modern Engineering problems are unique. Actually, the tar pits of computational complexity remain pretty stable, and Artificial Intelligence has amply failed in most of them (such as the Frame problem, and Automated Reasoning). Managers are just ignorant of the tar pits.
Fallacy N+5: Next year we'll get a new processor which is 60% faster, and our problems will go away. Actually, the mathheads that keep saying this have still not figured out that the disastrous software algorithms have computational growth rates that are exponential, and linear growth in processor speed does not define a solution to this problem.
Fallacy N+6: We write modular software. Actually, "modular" to a hard engineer and "modular" to a software engineer are radically different things. I regularly see "modular" software that has no defined interface, and no behavioral contract, so does not meet even basic requirements for reuse. Glass does not address the radically different semantics given the same words, by software and hard engineers. "Algorithm" is another word with very different meanings.
Fallacy N+7: Rule-Based software will, of course, solve our problem. Actually, automated reasoning has large undecidable and intractable areas. Engineering companies are just beginning to step in this tar pit, 25 years behind Artificial Intelligence.
Fallacy N+8: Knowledge of the syntax of a computer language, is the most valuable asset in software design. Actually, this is a trivial skill, relatively. The ability to represent symbolically complex reality in code structures, and complex manipulations of those structures efficiently, is orders of magnitude more valuable. Knowledge of just language syntax leads to literalistic algorithms, which tend to be brute force.
To his credit, Glass did mention...
Fallacy: Real-time code optimizers will fix any slowness in execution. Actually, you may gain 10-18% in speed this way, but these failing projects are orders of magnitude slower then needed. Better get rid of the real-time optimizers, and hire highly educated software designers.
I REALLY, REALLY appreciate Glass. But someone with a modern Masters degree in C.S. would realize that there is no reason to be blind-sided by most of these software disasters, and there are proven ways of evaluating these risks of failure while still in the design stage. Most VERY VERY bright hard engineers don't have the basic theory to detect computational risk, and don't even know where they should acquire it, if they wanted to improve their software algorithm design ability.
The problem is not just that (as Glass mentions) managers of software projects are out of touch with the technical people who write software. The disconnect is rather worse: most of the people who write software in big engineering companies are hard engineers, with no theoretical background in software algorithm design. There is an unspoken "amateur ethic" which condemns formal design theory. Technical leads of these "programmers" are often as uneducated, and could not identify sound software designs if their career depended on it. (So they are continually promoting Public Relations designs, and being blind-sided by failures.)
The situation in software design in America remains "tragic," and anti-intellectual, and the amateur (KISS) ethic continues to produce software projects which are computationally orders of magnitude outside of feasibility. Process does not begin to address this problem (Glass alludes to this). Nor does the strategy to redouble expectations toward the 'amateur coding ethic' and stop being such a nay-sayer. The truth remains that most technical leads in engineering companies, cannot even recognize what a software design is, and have no theoretical tools to analyze computational feasibility.
I wish that someone would address this problem in basic "Facts and Fallacies" books.
Stephen Wuest, Raytheon, M.S. in C.S. and A.I., 1999.
Rating: 5 out of 5
Maybe the most important book you will ever read
Once again, Glass has proven that he belongs in the software engineering pantheon along with Tom DeMarco, Gerry Weinberg, and Steve McConnell.
This book will open your eyes. If you work in the field, you'll never think about your livelihood the same way again.
If you take only one thing away from this book, remember this: don't blindly trust what the advocates of the latest methodology are saying, whether it be OO, XP, RUP, or UML, without some substantive evaluative research backing them up. Glass makes compelling arguments as to why the software industry has fallen easy prey to the hucksters and snake-oil salesmen.
Rating: 5 out of 5
Insightful To The New Manager/Team Leader
The other reviewers have done a fine job of covering the content of the book. I will comment about its usefulness. In short, this book is truly valuable to the developer who has recently been promoted to team leader. While developers would benefit greatly from this book, the reality is that most developers would rather read books like "Effective C++", "Design Patterns", "Expert One on One Oracle", etc. To the new manager, though, this book is a gem. The book talks about specific management issues as well as the development life cycle and quality. In short, the book focuses exactly on what the team leader does and the team leader's team. In addition to the material presented in the book, the author gives a great number of sources and reference for further reading.
· Professional Software Development: Shorter Schedules, Higher Quality Products, More Successful Projects, Enhanced Careers
· Debugging: The Nine Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems
· Waltzing With Bears: Managing Risk on Software Projects
· In Search of Stupidity: Over 20 Years of High-Tech Marketing Disasters