Tuesday, April 12, 2011

The Mythical Man Month

Reference:
The Mythical Man Month
Frederick P. Brooks, Jr.
1995 Addison-Wesley

Summary:
Ch. 13 - A fair portion of bugs can be eliminated through the correct implementation of a design.  A top-down design can reduce the temptation to apply a cosmetic fix to a faulty design instead of scrapping it and starting anew.  Additionally, the control structures of a program need to be seen as such, and not as individual branch statements.  Methods for debugging components has evolved over the years.  Debugging the entire system goes faster when debugged components and test scaffolding are used.

Ch. 14 - Enough little delays in the production of a system can lead to big problems.  Concrete milestones provide a way to track real progress and determine how that progress relates to the schedule.  Bosses must know when to let a manager handle an issue and when to become personally involved.  An accurate PERT chart can help the boss determine which action to take.

Ch. 15 - Documentation is a key component of system design.  There needs to be documentation for the casual user of a system, the user who depends on a system, and the user who modifies a system.  A flow chart can act as an effective representation of program structure, but should not exceed one page in length.  An effective method in improving program documentation is to merge the program and the documentation together.  Symbolic names, labels, and statements should convey as much information as possible to the reader.  The formatting of code can improve readability, and comments in the code can be used as a vehicle for better documentation.

Discussion:
Ch. 13 - Debugging is one of the most important parts of programming a system, yet it is one of the most difficult to perfect.  There are so many things that can go wrong in a system, and any number of tests will not be able to prove the absence of bugs.  Indeed, all testing can do is prove the presence of bugs, so we must do the best we can to ensure the system has high reliability.

Ch. 14 - Now that I think about it, little delays do have a tendency to add up quickly.  It is truly better to have  'hustle' and perform better than necessary, so that when a small delay does occur it has little effect on the production schedule.

Ch. 15 - Proper documentation is vital to the programmer.  Code that is poorly documented will often make sense to the coder while it is being written, yet seem like a foreign language if the same coder opens it up two weeks later to do some editing.  The disconnect is even greater when another programmer has to perform maintenance on poorly documented code.  I remember a story when one such programmer found a comment that simply read "RIP LVB."  This programmer had no idea what this meant, so spent much time and effort in tracking down the original author of the code to see if the comment contained important information.  It turned out that the author was a classical music buff, and had happened to write that particular bloc of code on the anniversary of Beethoven's death.  In short, an unrelated and unimportant comment resulted in a significant amount of wasted time.  

Tuesday, April 5, 2011

The Mythical Man Month

Reference:
The Mythical Man Month
Frederick P. Brooks, Jr.
1995 Addison-Wesley

Summary:
Ch. 10 - The critical documents for a computer product are objectives, specifications, schedule, budget, organizational chart, space allocations, estimate, forecast, and prices.  These last three are linked together, and create a spiral that can be beneficial or disastrous to the product.  No matter the product size, a manager is wise to have the necessary project documents.  

Ch. 11 - When building a pilot system, the product manager must accept that the first version, or the pilot system, will be scrapped in favor of a redesigned version with new ideas implemented.  As such, the system need to be designed to be tolerant to change.  Even after the product is delivered, changes will be made.


Ch. 12 - People like to use personalized tools, but from a programming perspective this is not conducive to good communication.  The programmer needs appropriate simulators, compiler and assembly vehicles, program libraries and accounting, program tools, documentation systems, and performance simulators.  High level languages provide increased productivity and debugging speed. 


Discussion:
Ch. 10 - As a project grows, documentation is critical to keep track of what is where, and even what is what.  There are few things worse than having to figure out how a piece of code works because its author did not sufficiently describe it.

Ch. 11 - One of the most stressed concepts in Software Engineering was having a high threshold for change.  Possible changes need to be kept in mind throughout the development cycle, or else you end up with a monolithic program in which any minor change will cause disaster.

Ch. 12 - Having a good toolkit is a essential for the programmer.  It can make complex tasks simple, and it makes the act of programming more accessible and easy to pick up.