Wednesday, July 13, 2005

An abstract language is indispensable for educating engineers

Many, if not most of us have to learn advanced scientific subjects for earning our living in a different language. We have no time for reading the great thoughts in our familiar native language. On the other hand, we hardly ever understand the second language much beyond the ability to read reference manuals.

It takes many years of serious study of literature before one can make meaningful statements that are also correctly expressed, as clearly demonstrated by President Bush. Simply referring to the process of software development as engineering does not degenerate the nature of writing programs to mere lookups in reference manuals. Furthermore, a reference manual is only useful in the hands of an expert.

Spoken language is the mechanism for passing ideas, knowledge, poetry and science. Likewise, a programming language passes on its libraries and techniques to the next generation of engineers. Thus, learning a new programming language is not equivalent to learning its syntax and using our experience from another language. For what it’s worth, learning a new language is very much the same as starting from scratch.

A software engineer at best may have a college degree in computer science. His curriculum probably included the entire calculus sequence and what not among the courses taken. He has seen a lot of pseudo code examples, and a few algorithm correctness proofs. He has also taken a semester or two in some programming language. What is the expectation from this person? In most cases this person will introduce dirty bugs in expensive software and move on to another company to infect their product, as well. In doing so, he will learn a few things, some right and some wrong.

An educated engineer, who has designed and implemented a reasonable number of applications in an abstract language, is well prepared to take on serious challenges. The more important fact is that the new experience is gained in the same familiar context and is therefore cumulative. Switching languages is worse than an electric engineer switching to fixing TVs for a few years, and then going back to his original expertise. This engineer will learn very little that pertains to his expertise at the high cost of forgetting a lot.

As things are, the excellent academic knowledge of a new graduate is not compatible with the software written in several languages, and with dependencies to a variety of platforms. The new engineer simply discards his scientific preparation and turns into yet another uneducated hacker. After all, he needs a job to survive.

The availability of an abstract language facilitates the preparation of engineers by replacing the pseudo-code examples with actual abstract design and implementation of a large number of typical applications. Ideally, the sample applications emphasize general techniques. This will reduce the risk of picking up obscure coding tricks from ATL, STL and books on COM technology and Aspect-oriented programming.

The abstract language Z++ is a superset of the indispensable system programming language C++. Thus, a student does not need to learn a set of new languages in order to cope with multi-platform distributed applications that may also need to interact with pre-existing C++ code.

The implementation of the Z47 processor is not within the reach of technology leaders. But it is freely available from ZH Micro.

Labels: , ,