Monday, June 12, 2006

Only software can become multi-domain expert

In order to gain a better understanding of our human capabilities for engaging in software development, we need to look back at our individual accomplishments in arts and science. There is no reason to believe that software engineers possess more mental abilities than previous generations of artists and scientists.

Consider some of the greatest composers. You will notice that some of them could play several instruments. Nevertheless, you will find every composer had master-level of expertise in a single instrument. Some poets could speak a few languages, but none wrote poetry in more than one language.

A mathematician knows a great deal about many branches of mathematics but is capable of conducting research only in a narrow area. Most computer scientists are familiar with one programming language. Generally, engineers and physicians are specialized professionals.

A simple and obvious common-sense conclusion from the above observations is that the majority of us can attain master-level expertise in a single area. Some of us can achieve a few proficiencies, at different times in our lifetime. Nevertheless, a great deal of knowledge and skills is only necessary but not sufficient for master-level expertise.

In all areas of engineering, except software engineering, graduates leave college as an inexperienced expert. In contrast, software engineers leave college with a lot of scattered information about many different products as a basis for their expertise. In most cases their expertise does not match any job because there are more products involved in developing any reasonable software. Frequently, loss of job for a software engineer is equivalent to looking for a job as a new graduate.

In defense of software engineering, one may think of playing musical instruments as an analogy, in that some orchestras play wind instruments, and others specialize in string instruments. The analogy is applicable so long as we confine our view to system programming. An application developer is a composer who writes notes for system programs to play. Furthermore, application developers should know something about the domain of application, whereas system programmers need to understand the system.

The diversity of hardware is quite desirable. However, each manufacturer having its own army of specialized developers is only useful in the war of market shares. For instance, consider an insurance company that wishes to support online activities for its customers. When it comes to PC they will probably choose Windows first, with the possibility of supporting other desktop platforms in the future.

In the preceding scenario, the situation gets much worse when a company decides to support PDA. This same phenomenon is also the cause of specialized software development companies. Generally, companies develop software for a specific platform and sometimes port their applications to another platform.

In essence, a human cannot become an expert system-level developer in multiple platforms. Each platform has its own SDK, specialized libraries, system calls, tools and culture. On the other hand, an engineer can in fact develop applications for all platforms, because Z++ is the multi-domain expert for application software. Only software can become multi-domain expert. Until this is comprehended, chaos and confusion will reign.

Z++ formalism demonstrates that the process of developing application software is reducible to an activity similar to the way a composer writes music for an orchestra. A developer need not know anything about system tools of a platform just as a composer need not know how to play the instrument that will turn his/her notes into sounds.

Z++ is freely available from ZHMicro.