I recently attented three keynotes: Alan Kay and Andreas Kuehlmann at TOOLS and Jeff Kramer at ICSE. Keynotes are great moments: unlike talks during sessions, keynotes do not need to depitc rosy pictures; a good keynote connects ideas, concepts, raise challenges, is critical about the state of the art, and inspiring.
At TOOLS, Alan Kay shared with us his thoughts about development, and how to scale software development — in team size, in line of code, in core utilization. Andreas Kuehlman convincly argueed that the adoption of automated testing depends on how well it integrates in developper workflow and on the amount of false positives it generates.
At ICSE, I enjoyed the keynote of Jeff Kramer on software architecture. Jeff Kramer provided a restrospective of software architecture description languages and hypothesis to explain the lack of adoption in industry. One of which seems to be that they can not cope with the complexity of industrial software.
Hearing these talks, the software industry seems to be stuck: we don’t know how to move beyond manual development and testing of fine-grained software artefacts. However, as software engineering matures over time, a body of best practices emerges that increases quality of development. For instance, Jeff Kramer showed that certain ideas from the architecture community had indirectly made their way to industry under another form, e.g. dependency injection.
Andreas Kuehlmann used the word hygienic to refer to teams with sound engineering practices. The wikipedia definition of hygiene is a “set of practices employed as preventative measures to reduce the incidence and spreading of disease”. High hygiene standards favor clean code. Assertions, contracts, refactoring are examples of hygienic practices. Hygienic practices lower the risk that your software become a drity pile of code. I like this analogy with health.
Progress in health promotion didn’t happen in one day. Medical and everyday practices such as sterilization, quarantine, treatment of wastes, dental care take took time to be established. Next to these practices, the healthcare industry enjoyed several breakthrough such as the creation of vaccines, or organ transplants that enabled this remarkable progress. Progress in development is similar to progress in healthcare.
- Testing hygiene. Unit testing is similar to the daily routine of brushing ones teeth after each meal. It’s a defacto standard practice. Testing hygiene prevents bugs.
- Code quality hygiene. IDE with code styling enforcement prevent unreadable code from spreading.
- Modularity hygiene. A vast set of principles help keep software modular and prevent coupling and big balls of mud.
- I/O hygiene. Sanitize your inputs and protect yourself from a malicious external environment. Don’t disclose sensitive information to the outside.
- Monitoring hygiene. The first step to stay healthy is to identify problems and remedy before it’s too late. Yearly check-ups are becoming more and more common to detect symptoms of diseases. The same is true for applications, with monitoring, stress tests, and periodic reviews.
Hygiene refers to daily common pratices. Healthcare directly improves with improvement in hygiene, but also needs expert at time. When somebody is sick, he is sent to the hospital to follow a cure. For software, when an unreliable component is detected, it is put in quarantine, then analyzed and fixed with proper tools and techniques. Expert troubleshooting is the equivalent of surgery.
Finally, what makes software remarkable is that similarly to organisms, software is grown, not built. Also, organisms and software are highly dynamic systems. This makes the analogy even stronger.
Hygienic programmers grow clean code and run healthy software.
- Software security is like medicine
- http://m.ustream.tv/recorded/61492206 (Second half)