Wednesday, July 13, 2005

Design, or not design

An architect designs buildings by using his acquired academic skills of solving problems in his domain of expertise. He may look up formulas, such as the volume of a sphere. But he is quite familiar with the language of mathematics that he is using. After all he spent years under intrusive observation of experts in his field.

Designing software requires complete command of the programming language to be used, and its distinct and peculiar techniques. The engineer must also be intimately familiar with the libraries needed with regard to the problem domain. Last but not the least is detailed knowledge of the platform idiosyncrasies, so called certification. For designing an application, as opposed to a system program, the engineer needs the assistance of experts in the field as well.

A team of engineers crafting a system program for a particular device will probably use assembly language, definitely C and at higher levels C++, while working closely with hardware engineers. Many of their initial attempts will probably be no more than throw away prototypes until they understand the nature of their invention.

An application is also prototyped. However, there are no hardware engineers involved, nor even it matters on which platform the prototype is attempted. This is analogous to the prototype model of a building produced by an architect.

A C++ expert can only speak of designing a product on a single platform with which he is intimately familiar as for system calls and other platform peculiarities. Otherwise put, one cannot design an abstract application in C++ because C++ is not an abstract language. As a matter of fact, direct support for interaction with platform is a major feature of C++.

Nevertheless, the actual popularity of C++ was fueled by its expressiveness in the design phase. The direct linguistic support of C++ for the design phase of software greatly reduces the size of ever-changing comments. After all, the compiler is oblivious of comments.

Applications are inherently independent of platform idiosyncrasies. An abstract language is the most suitable medium for designing and implementing an application. Z++ retains the C and C++ heritage with no loss of continuity of any form, whatsoever. Z++ is simply a superset of C++ with corrections. Every bit of experience in C++ is directly usable in Z++.

Libraries common to C++ and Z++ are the same for all purposes. However, Z++ provides high-level libraries specific to the spectrum of application software. For instance, client-server model is presented in a manner similar to file streams. Furthermore, Z++ coherently extends the C++ expressiveness with regard to design phase, to the domain of application software.

An experienced software engineer equipped with Z++ can claim to design a distributed multi-platform application with the help of experts in the problem domain. For instance, if the problem domain is insurance, an engineer needs the assistance of insurance business experts.

Z++ is freely available from ZH Micro.

Labels: , ,