Updated 2011.12.11 01:43 +0100 |
Last month I wrote a blogpost about the importance of white space in program source code. During my day to day work I've experienced that good consistent layout of source code can help and improve the understanding and maintainability of the program code. For new software developers it even help to avoid pitfals caused by bad layout practices.
I make a clear distinction between layout style and program style. Layout style is such things as proper use of white space, indentation, placement of brackets and parenthesis, file header comments, file footer comments, class comment headers, etc. Where the layout style ease the way you read the program, the programming style extends this with also giving best practices that affects the program and helps you to avoid pitfals - usually by avoiding certain syntactic constructs that may give cause to uncertainties. The source code must be easy to read and understand. Otherwise it is difficult to maintain. And 80% of all programming is maintenance programming - fixing bugs in or extending existing code. 
Maintenance programmers spend 50 to 60 percent of their time trying to understand the code they have to maintain, and they appreciate the time you put into documenting it. Parikh and Zvegintzov 1983
With this blogpost I intend to start a series of blogposts about the elements of layout style. I will take offset in C++ as this is my preferred language but naturally some of the best practices may be relevant in other programming languages as well. If I can I will attempt to back up the suggested practices by quoting facts from evidence findings as documented in papers, so that the recommendations are as objective as possible. If evidence can show why one layout style should be prefered over another, then I will back that up, rather than use my own gut and subjective feelings. I already know that it is difficult to find objective studies as very little has been done in this area. Some stuff may come from studies made in other fields than software development.
Below is a list of some of the topics that I intend to bring up - not necessarily in that order: