Review of "the mythical man month" chapter 1

Programming is fun and interesting. A lot of people can build functional programs, but only few of them can convert a program into a product or system. Why?

The joys of programming

  • Joy of building things
  • Fascination of watching complex system running
  • Delight to build thing without limitation
  • Excitement to learn new things
  • Pleasure to build useful tool for others

The joy of programming comes from the nature of a software. Software is abstract. You can build anything that you can imagine. You can build a complex software with no limitation, as long as it does not against logic. As the nature the programming is to automate repeated task, in other words, programming task are never repeat. The most excitement on programming is what comes from your imagination can produce visible output and become a useful tool for others.

The woes of programming

  • Even the smallest mistake can break the whole system
  • Dependency on maldesigned, poorly implemented libraries
  • Frustrating to get stuck on a bug
  • The last bug take much more time to find than the first
  • Good idea is already implemented, better idea require too much cost to implement

Debugging is an essential skill for programmers. Programming is a language of logic, any minor mistake can crash the whole system. Top engineers can find out the bug quickly by reducing the scope of problem and prevent bugs be introduced again by improving system design.

Programmers become more frustrated when the bug is not come from their code, but the third party library they are using. This kind of bugs are inevitable. To fix or having workaround on this kind of bugs require programmer to dig deep into the abstraction layers. It require programmer to read others’ code and learn quick.

Debugging skill can be trained and practised. It helps to ease the pain of debugging.

However, the last point is more related to software engineering skills than programming, such as system design and project management. It requires the skills of convert idea into a feasible feature under limited resources, breaking big problems into tractable sub-problmes and engineer team management. The nature of software make software industry different. Software engineering skills can only be learnt from real world industry experience.

From programming to software engineering

Programming alone is fun, but when it comes to the industry world, it becomes woes. Why? What make the difference? We will see after classifying software into 4 types.

Program

It is complete in itself, ready to be run by the author in a specific environment.

Programming Product

A programming product is a program can be run, tested, repaired and extended by anyone. It is generalized to be reuse in different environment with different data set.

It takes 3 times effort to convert a program to programming product.

Programming System

Programming system is a set of interacting programs following the same standard on information exchange. These programs are integrated to complete large tasks with prescribed budget of resources. The underlying infrastructure is included in programming system. A programming system is not only code, but also take the memory space, computation time and infrastructure into consideration.

It takes 3 times effort to build program system from programs.

Programming Systems Product

It have all characteristic of programming product and system. It is what a tech company want to build. It cost nine times as much to build a single program.

Many programmers oversimplified software. The cost of building software not only come from codes, but also infrastructure, long term maintenances and support. Many programmers fail to build a software from a program because they underestimate the cost on software projects and lack project management skills.

Conclusion

  • Enjoy the joy of programming
  • Learn to debug
  • Pay more attention on software engineering skills, not only programming skills
    • It is impossible to build a great product without a team. When there is a team, you need project management.

Reference

The Mythical man-month (anniversary edition) chapter one