Thursday, February 23, 2006

What is Software?

Quoting What is Software? in the Google search widget gives 130,000 or more hits. Most append another word such as Design, Assurance, Piracy and so on. I found no satisfactory answer to the basic question.

I program embedded systems using 'C' with a bit of Java and Perl on the side. My job title says 'Software Designer' but my duties include poking bits and bytes into registers of custom hardware. This certainly is programming but is it really software design? We know that software requires programming but does it follow that programming results in something called software? If so, consider FPGAs and CPLDs found in modern embedded systems. They are programmed by an engineer using a description language. They effect system functions but are not software or the result of software design. So it seems that programming, or giving instructions to a machine does not always result in software.

I think that abstraction is the most important property of software. For example, Java has a virtual machine to separate the hardware and computer operating system from the application. It provides an abstraction boundary. An email client program can be made to run on any computer or OS while being designed with almost any scripting or compiled language. So an email client is software. Scheme, Lisp, Eiffel, and others have some form of Foreign Function Interface to support an abstraction boundary. C/C++ does not so more designer diligence is required to maintain a clean abstraction.

Jack Reeves at DeveloperDotStar came to an interesting conclusion.

* Ultimately, real advances in software development depend upon advances in programming techniques, which in turn mean advances in programming languages. C++ is such an advance. It has exploded in popularity because it is a mainstream programming language that directly supports better software design.
* C++ is a step in the right direction, but still more advances are needed.

Apparently, he was not aware of dynamic languages such as Scheme.