Distilling the principles of software design

How do I make sure I am reading enough, or have a good set of working principles to be able to apply to my software design / coding ?

Most people come to this by experience. Experience and interaction with other software developers. Ideas (or memes) spread by word of mouth, more specifically the internet.

Something the scientific community often publishes are review papers. These take a particular field and summarise the findings, providing a massive list of references at the end.

These are extremely useful if you want to then work in that area. Because it has been peer reviewed, there is a certain amount of confidence that crucial works (at least until the date of publication) have been included.

We almost have this in software, but people tend to write books, or blogs about things. These tend to be written by people who have gained a reputation in the field for collating ideas, for example Martin Fowler. Maybe its the same thing, and you get a word of mouth gain in respect for these people.

Perhaps a more formal peer-reviewed process could be realised for software design principles. As a local alternative, I have created a page called ‘Essential Reading’ where I am going to begin to collate such references. Works which I believe contain valuable principles, and which everyone should be aware. I’ll see if it is possible to get something like a review paper going.

I think the goal is that you should be able to communicate about any of these concepts amongst developers and they should be able to understand what your talking about. Its a bit like patterns, but with a wider context, they are principles.

I was inspired to write this after finding Neal Ford‘s book which is a book that I had thinking would be great to write. Neal has been working on it for a couple of years and I am looking forward to reading it.

Non-randomly enough, I just found this from Joel which is all about Unicode, but is entitled “The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)” maybe what I’m looking for is a similar article about design principles. Infact, Joel has a list of articles by job role which he has written which is close to what I’m looking for. Also, he co-founded Stack Overflow which is a way forward.

I would also like to start ‘canigrokit.org’ which would be a similar idea but allows you to post snippets of code and people can vote on wether they are readable or not. I have the domain name already.


2 thoughts on “Distilling the principles of software design

  1. Principles are fine, but should be judged by the usefulness to which they give rise. So when someone says, “The law of demeter is a good principle,” then without an objective measure of the success of the software to which it gives rise, this remains just an opinion.

    Also, by far the best objective measure is mathematics. There’s just too little mathematically proven opinion floating around. That’s one reason why the relational model is so good: you can objectively prove your point. Nothing cuts through useless opinion like a mathematically proven theorem.

    Where is your, “Essential Reading,” page by the way?


  2. Thanks for the comment Ed, its a good point; the idea of having objective measures is powerful. I have been thinking a little about objective code measurements, it would be great if there were more scientific methods for measuring effectiveness of design!

    The essential reading link is here thanks for highlighting it. There’s not much there yet though!

    I have just had a quick look at your page, some interesting stuff there, one of my favourite words is encapsulation:).

    I’ll add it to the reading link.

Comments are closed.