After a lifetime of playing with computers—starting with writing games in BASIC on the BBC computer and going on to such diverse elements as pascal, Mathematica, and using Labview to process hand-rolled databases made of raw text data files from experiments held together with sticky tape—Sam Gardiner stumbled into professional software development. He has been working in the software industry for six years.
REAL-WORLD PROGRAMMING is not about solving the problem that someone gives to you. In the computer science classroom, you must solve the binary-sort problem given to you. In the real world, the best architects don't solve hard problems, they work around them. The skill is in drawing boundaries around diffuse and diverse software problems so that they are stable and self-contained.
An architect should be able to look at a whole mess of concepts and data and process and separate them into smaller pieces or "chunks." The important thing about those problem chunks is that they are stable, allowing them to be solved by a system chunk that is finite and stable in scope. The problem chunks should be:
Internally cohesive: the chunk is conceptually unified, so all of the tasks, data, and features are related
Well separated from other chunks: the chunks are conceptually normalized; there is little or no overlap between them ...