Thursday, June 30, 2005

Teaching calculus in pseudo-code

For almost three decades I taught calculus semester after semester. Here and there I would draw some graphs. Nevertheless, the actual solutions were presented in correct mathematical statements. Imagine teaching the techniques of transformation in symbolic integration using pseudo-code of some sort.

Any actual software development language is considered a medium for encoding the abstractions presented in pseudo-code, quite justifiably so. However, in other articles I have argued that there is a big difference between programming a device and developing application software. An application is specified in terms of its functionality rather than its dependence upon the platforms on which it will run. It is therefore possible to achieve an abstract language for developing application software.

The shortcomings in expressiveness of recent platform independent languages have brought along more dismay towards the likelihood of a future abstract language. The progress feels like less than moving up to Roman numerals, with no sign of positional notation.

The generally accepted view is that there will never be an abstract programming language. In this view, one assumes the coexistence of many languages with some gluing technology such as those based on XML. As one can imagine, this view is quite convenient for technology leaders.

We have reached the point in history where we have all the needed experience and knowledge to elevate software development to a state similar to positional notation for numerals. In particular, the problems and shortcomings have been known for a long time. The only hurdle is the belief that only a technology leader can introduce a language. If we relax this superstitious requirement, the solution is at our fingertips.

However, if the language being introduced is actually a new one its adoption will depend on full support by the technology leader that introduces it. Obviously, the purpose of such language is marketing in favor of the company introducing the language. The scientific aspects of the language are of least interest to the company, if any.

The language C++ is in fact a good starting point borrowing from its predecessors, and with a few ideas of its own. However, mapping C++ into an abstract language with necessary expressiveness poses serious difficulties that take years of research and experimentation to resolve. The design should only require a small learning curve without any sacrifice of desired scientific features.

Including C++ as a subset has the advantage of not having to learn new semantics for already familiar syntax. It is the difference in semantics that creates long learning curves and results in the production of software with many obscure defects.

Z++ is an abstract language independent of any platform. Z++ corrects the syntactic defects of C++ and then improves on its expressiveness in all areas of software development. Nevertheless, the coherent design of Z++ poses a minimal learning curve.

Z++ demonstrates that there is an abstract language for software development after all. Instead of pseudo code, one can write actual statements in presenting examples to students of software engineering. Obviously, we can be less precise when scribbling statements on the board in response to a question. But the actual examples and the solutions provided by the students do not have to be in pseudo code.

Z++ is freely available from ZH Micro.