20 Jul 2010

The Core of Software Development

In the context of this article a computer program is a function and a "description" means "function description". The computer program as a function gets some input, from wherever, and it produces some output, to wherever in whatever form. So, practically all of the time that software developers spend, is spent on the name of creating that function description.

Summary of the previous section: software is a function description, being a productive software developer means minimizing the time spent on creating the function description. That's the reason, why I speak of functions in this post. :-)

A function can contain a mixture of calls to other functions and to oneself. To minimize the time spent on the assembly of the function description(read: to be a more productive software developer), one aims to minimize the following parameters:

A) number of functions to describe;
B) "mean" number of function calls within a single function;

The point B also covers "simple things" like assignment operators, multiplications, additions, etc.

As we do not live in the world of infinitely fast Turing Machines, additional conditions of memory usage patterns, bandwidth usage patterns, "outer memory" access patterns,  algorithm complexity, hardware speed, energy consumption, sizes of various memories, etc. apply, but as of summer 2010 I believe that it really helps to keep the points A and B in mind while doing practical software development. Software design patterns, which in the end migrate from "pattern" status to programming language specification, are just fine-grained, time-dependent, details of the craft.


No comments: