Most of us have done rather well with a single spoken and written language, English, the most powerful and useful tool ever created by humanity. But, not so with programming languages. Literally thousands of different languages exist, and, by some estimates, six to eight hundred of them remain in active commercial use today.
The ep5BAS project has specific and distinctive requirements, and our choice of programming language is directed by these necessities.
Given these requirements, we must select from numerous alternatives a language that satisfies several critical criteria:
First — It must be easy to learn. It cannot rely upon excessively cryptic expression and should be at least moderately readable. Forget Lisp...or, for those with a keen sense of the grotesque, Malbolge and INTERCAL.
Second — It must be usable as a general-purpose tool. For sheer power, you cannot beat machine code. It enables the programmer to bring into play every single feature designed into the CPU. Machine code programmers are rare; they can be recognized by the fact that their feet do not touch the floor when they walk across the server room.
Assembly language has almost the same power and is far more human-friendly, but not quite enough. Worse, it is CPU-specific and the very epitome of non-portability. Forget that.
We need a language with sufficient abstraction to insulate the novice programmer from the vicissitudes of coding close to the metal while not boxing him into a narrow range of capabilities. A database language such as SQL, for instance, might have impressive power but only within its specialty. Not for us.
The language needs to suit the class of application. For some, using the browser makes sense; for others, it does not. Our target audience will less likely be creating browser-centric applications for world-wide distribution and more likely developing application-specific programs that run in a single local instance.
Third — It must be popular enough to be both well-supported and in demand commercially. A language used by a large percentage of active programmers will benefit from ample resources readily available via the ubiquity of the Internet. This seemingly modest characteristic can easily spell the difference between success and failure for the new programmer.
Fourth — Our choice should be reasonably up-to-date but not obsessively so. The computer science student at university has no choice but to learn OOP. The casual amateur can choose to avoid OOP complexity and remain comfortably within the gentle arms of conventional procedural coding.
Fifth — A very low price of admission matters greatly. The need to install complex toolsets won’t dissuade a full-time programmer from considering a language to work with, any more than a carpenter refusing to build a house because it means buying a hammer and saw. For this project, however, the game must be played under different rules. Ideally, even less skilled programmers can benefit from ep5BAS without buying anything. A computer and an Internet connection will suffice.
The ep5BAS user must be able to take full advantage of the software without needing to purchase any extra development software.
Sixth — A complete library of functions, including mathematics, collections, security, audio, video, images, regular expressions, strings and text, dates and times, scripting, networking, cryptography, databases, graphics, and printing.
Seventh — Interoperability with a reasonable subset of the software biosphere always defines the scope and usefulness of every programming language. It’s a given that low-level or system languages, such as C and C++, can do anything and connect with anything. High-level toy languages have only those capabilities designed into them, and these languages are by their very nature limited to narrower ranges of application. In selecting a language, the programmer must know clearly which functionalities the application will need and ensure that the language used will be able to provide them.
The real interoperability issue, however, is the ability to execute, on as close as possible to an inline basis, device drivers and functions written in assembly language, C, and C++. As the very nature of ep5BAS necessitates utilization of proprietary industrial I/O hardware, each device sometimes requiring its own closed-source driver, our language must call external modules meant to be used in C and C++ code.
Eighth — Can it readily be used by amateurs for creating reliable applications which do useful things in that part of the real world in which the amateur programmer lives and works?
What, then, is our choice of language?
At the end of the day, after all the investigation, analysis, and discussion, a decision must be made. Our choice is C#, and we see this as the optimal resolution of all the factors bearing on the selection of a programming language for less-experienced programmers writing general-purpose automation software.
Web-site by Dreadnaught Steam Traction & Electric Broadcasting Works, Ltd