When one hears of disastrous schedule slippage in a project, he imagines that a series of major calamities must have befallen it. Usually, however, the disaster is due to termites, not tornadoes; and the schedule has slipped imperceptibly but inexorably.
There are some really good nuggets of information in this book, and there are also some things that still hold true to this day. I'm not a software engineer, so a good portion of the content was pure drudgery for me. However, I'm not sure if I should fault the book for that. Maybe it's just because I don't have the background knowledge in software engineering. Overall, I would rate this book a 3.7 out of 5. It has its strengths and weaknesses, but it's still a valuable read for those who are interested in the field of software engineering.
I recently re-read this book after recommending it to a colleague. It was mainly out of nostalgia, and I initially planned to just read a few of the more popular essays, such as "The Tar Pit." However, I ended up reading the entire book again and was still amazed by how fresh and insightful it remained, even after over 40 years since its publication. The prose is dense with ideas, yet it is brilliantly clear and often witty. As I now read contemporary writing, whether it's blogs or even books, I deeply lament the loss of this art.
Apart from his bold statements, most notably Brooks' Law, which has been cited to the point of becoming a cliché, what struck me the most this time around was the extent to which his enthusiasm for building systems and leading teams came through. You might expect a grizzled veteran of massive IBM projects to be somewhat jaded, but I personally found his descriptions of what builders love about building to be quite beautiful. If I can be half as enamored with my craft at his age, I'll consider myself lucky.
In my humble opinion, this book ranks right up there with Peopleware and Psychology of Computer Programming as absolutely essential reading for technical leaders. The specific references, even from the 20th anniversary section, are dated (anyone out there a fan of MS Works?). However, 80% of the points made are still as relevant as ever. In fact, the obsolete sections serve as a sobering reminder that your Macbook is essentially a supercomputer that you can bring on the train for your own exclusive use. I'm so grateful that I no longer have to worry about the size of my functions in memory and can use beautiful, interpreted languages like Ruby at web scale, for example, to run this website ;-)
Some reviewers have pointed out the use of only male pronouns, which can be exclusionary. Interestingly, there were actually far more women programmers in 1975 (before the PC era), so I have to assume that this is simply a stodgy style convention (and it was not used in the 1995 add-on chapters). Additionally, there are some religious undertones scattered throughout the book, but they didn't detract from the ideas for me.
Highly, highly recommended. It's a great book to read with your team to share war stories and gain valuable insights into the world of building systems and leading teams.
Why is programming fun? What delights can its practitioner expect as a reward? First is the sheer joy of making things. Just as a child takes delight in his mud pie, so does an adult enjoy building things, especially those of his own design. I believe this delight must be an image of God's delight in creating things, as seen in the distinctness and newness of each leaf and each snowflake. The programmer, like the poet, works only slightly removed from pure thought-stuff. He constructs his castles in the air, from air, creating through the exertion of the imagination. The computer also resembles the magic of legend in this regard. If even one character or one pause in the incantation is not strictly in the proper form, the magic simply doesn't work. Human beings are not accustomed to being perfect, and few areas of human activity demand it. Adjusting to the requirement for perfection is, I think, the most challenging part of learning to program.
I like the advice given by P. Fagg, an experienced hardware engineer: "Take no small slips." That is, allow sufficient time in the new schedule to ensure that the work can be done carefully and thoroughly, and that rescheduling will not have to be done again."If a 200-man project has 25 managers who are the most competent and experienced programmers, fire the 175 troops and put the managers back to programming." The surgeon model of software development: "A proposal by Harlan Mills offers a fresh and creative solution. Mills suggests that each segment of a large job be tackled by a team, but that the team be organized like a surgical team rather than a hog-butchering team. That is, instead of each member hacking away at the problem, one does the cutting and the others provide him with every support that will enhance his effectiveness and productivity." A team could consist of: - the surgeon - the copilot: does work delegated by the surgeon - the administrator: interfaces with clients and management, handles the bills, etc. - the editor: polishes the documentation by the surgeon - the clerk: maintains records - the toolsmith: provides file-editing, text-editing, and interactive debugging services, etc. - the tester: does the testing - the language lawyer: consultant for the deep lore of a programming language "The second system effect": for your first major project, you'll play it safe to ensure you can do it. For your second major project, you'll have an inflated sense of confidence and numerous ideas for thrills that you passed over for your first project. Of all the projects you'll undertake, this second one is the most perilous. Excerpt from The Man Who Sold the Moon:
Coster buried his face in his hands and then looked up. "I know it. I know what needs to be done—but every time I attempt to tackle a technical problem, some bloody fool wants me to make a decision about trucks—or telephones—or some damn thing. I'm sorry, Mr. Harriman. I thought I could do it." Harriman said very gently, "Don't let it throw you, Bob. You haven't had much sleep lately, have you? Here's what we'll do—we'll pull a fast one on Ferguson. I'll take that desk you're at for a few days and set up something to protect you from such things. I want that brain of yours focused on reaction vectors, fuel efficiencies, and design stresses, not on contracts for trucks." Harriman stepped to the door, looked around the outer office, and spotted a man who might or might not be the office's chief clerk. "Hey you! Come here." The man looked startled, got up, came to the door, and said, "Yes?" "I want that desk in the corner and all the stuff on it moved to an empty office on this floor, right away." He oversaw getting Coster and his other desk moved into another office, made sure the phone in the new office was disconnected, and, as an afterthought, had a couch moved in there too. "We'll install a projector, a drafting machine, bookcases, and other junk like that tonight," he told Coster. "Just make a list of anything you need—to work on engineering." He went back to the nominal chief-engineer's office and happily got to work trying to figure out where the organization stood and what was wrong with it. Some four hours later, he took Berkeley in to meet Coster. The chief engineer was asleep at his desk, his head cradled on his arms. Harriman started to back out, but Coster roused. "Oh! Sorry," he said, blushing. "I must have dozed off." "That's why I brought you the couch," said Harriman. "It's more restful. Bob, meet Jock Berkeley. He's your new slave. You remain chief engineer and the top, undisputed boss. Jock is Lord High Everything Else. From now on, you've got absolutely nothing to worry about—except for the little detail of building a Moon ship." They shook hands. "Just one thing I ask, Mr. Coster," Berkeley said seriously. "Bypass me all you want to—you'll have to run the technical show—but for God's sake, record it so I'll know what's going on. I'm going to have a switch placed on your desk that will operate a sealed recorder at my desk." "Fine!" Coster was looking, Harriman thought, younger already. "And if you want something that is not technical, don't do it yourself. Just flip a switch and whistle; it'll get done!" Berkeley glanced at Harriman. "The Boss says he wants to talk with you about the real job. I'll leave you and get busy." He left. Harriman sat down; Coster followed suit and said, "Whew!" "Feel better?" "I like the looks of that fellow Berkeley." "That's good; he's your twin brother from now on. Stop worrying; I've used him before. You'll think you're living in a well-run hospital.""On a large project, the manager needs to keep two or three top programmers as a technical cavalry that can ride to the rescue wherever the battle is fiercest." Sometimes the top talent is best utilized as coders rather than managers, so it's crucial to make coding just as attractive as management. Therefore, have equivalent rungs in the hierarchy for coders and management, with equal pay, office space, and support staff. Movement from coding to management is not "promotion" but "transference." There could still be a prestige element, so transferring from a management rung to an equivalent coder rung might need to come with a pay raise. "How does a project get to be a year late? One day at a time." "What we do not understand we do not possess." - Goethe "The programming project converges more slowly the closer one gets to the end, whereas one expects it to converge faster as one approaches the end." "Partitioning a task among multiple people requires additional communication effort—training and intercommunication." Thus, if you add more people to a team, the benefit of a greater rate of progress will be offset by the new work created by training the new people and redividing the workload. "My rule of thumb is 1/3 of the schedule for design, 1/6 for coding, 1/4 for component testing, and 1/4 for system testing." "Brooks's Law: Adding manpower to a late software project makes it even later." "Fixing a defect has a substantial (20 to 50 percent) chance of introducing another." "System debugging, like astronomy, has always been done mainly at night."