Java and C# are almost identical programming languages. Boring repetition that lacks innovation. Where is the revolutionary programming language that will stop the redundancy?
The industry is spinning in circles inventing one "curly brace" language after another - C++, Java, C#, ... The popular object-oriented programming languages of today fatally remind us of the heyday of procedural languages: in the 60ies, a cluster of very similar languages (Fortran, PL/I, COBOL, Algol) dominated the IT business, until the advent of C changed the world. Finally, a language invented by programmers for programmers! C was a revolution; Java and C# are just evolution. Where is the C language of our times?
Hardly anybody will claim that Java or C# are revolutionary programming languages that changed the way we write programs. Especially the new kid on the block - C# - is so extremely redundant that one wonders why both Java and C# are in existence. Do we really need yet another curly brace language? Why would anybody want to explore a "novel" language that offers the old set of language features? Yes, there are some minor differences between C# and Java: C# does not have an equivalent to Java's nonstatic inner classes; Java does not treat events and delegates as first-class members of a type; C# has user-defined value types. Fine! But the list of commonalities is significantly longer than the list of differences. C# borrowed a lot from Java - and vice versa. Now that C# supports boxing and unboxing, we'll have a very similar feature in Java. Have we desperately been waiting for autoboxing in Java? Certainly not. Perhaps, we've been eagerly awaiting Java generics, which - surprise, surprise - look pretty much like generics in C#. Alas, if at least they were the same! But no, every language designer can't resist and must do a little different in order to demonstrate that his language feature is more convenient, more effecient, more powerful, ... well, just better ... than the corresponding one in the "other" language.
Is the existence of redundant languages any good? Does it help programmers in any way? Do we profit from having a choice between Java and C#? In contrast to the respective language designers we do not believe that one language is superior to the other. The fact that Java and C# are so similar is tiring and the fact that they are different makes it even worse.
Why is it that such redundant languages are invented and promoted? Is it because Java and C# are corporate languages? Okay, both respective comporations will instantly deny that their languages are proprietary. After all C# is an ECMA standard and Java is enhanced through its community process. Yet, without Sun and Microsoft neither language would exist.
Corporate languages are often developed under the pressure of competition, at the risk of throwing out a new feature although it's still immature. Corporate languages carry around a lot of baggage because they must be backward, forward, or otherwise compatible to some piece of legacy code. Deficiencies once introduced can never be taken back. Think of the miserable Cloneable interface in Java that does not allow you to call a clone() method; it's the standing joke in every Java class and the example for a highly debatable interface. Or take the inconsistency between comparison and equality: we can support several sorting orders via comparators, but we can only have one notion of equality via equals(). Why? This is painfully inconsistent, causes quite a bit of headache at times and will never be repaired, because it is so for "historical reasons". Such a tribute to its legacy is typical for corporate languages; they grow and grow and become more and more unwieldy. Is C# any different? Slightly, but not fundamentally.
In essence, Java and C# feel like PL/I and consorts: PL/I was an attempt to combine the best features of Fortran, COBOL and ALGOL and was developed by George Radin of IBM in 1964. Java was an attempt to combine the best features of C++ and Smalltalk and was developed by James Gosling of Sun Microsystems in 1995. C# is an attempt to combine the best features of C++, Visual Basic and Java and was developed by Anders Hejlsberg of Microsoft in 2000. Will the next language be an attempt to combine ... ?
In the early '70ies the dominance of PL/I and its look-alikes ended with the advent of C. The C programming language was everything but a deliberately invented corporate language based on combinations of existing ideas. Quite the converse. C was a by-product of the Unix development and was created on a tiny machine as a tool to improve a meager programming environment. Seemingly it covered the essential needs of many programmers at that time without trying to supply too much. It was successful to an extent far surpassing any expectations and changed the way programs were written.
Will there be a revolutionary language like C again - invented by programmers rather than corporations? A language that will be fun and exciting to use - free of baggage, convenient, consistent, comprehesible? What would it look like? Do we need such an innovation, or are we happy anyway and cannot even think of a language better than Java or C#?
|Klaus Kreft has been developing software solutions for almost 20 years in domains ranging from embedded systems programming for the telecommunications industry to web-based business applications in the banking and insurance sector. He served as a systems architect on several successful large-scale projects. His passion is building solutions in time that work reliably and meet the customer's needs. He currently works as a Senior Consultant at Siemens Business Services in Germany.|
|Angelika Langer works as an independent freelance trainer, mentor, and consultant with a course curriculum of her own and conducts seminars in Europe and Northern America. Her current work is backed by more than a decade of experience as a software engineer working for German and US companies, among them sevaral years in telecommunications and later in compiler construction at Siemens and 1.5 year in library development at Rogue Wave Software. Compiler construction got her involved into the standardization of C++ and in 1993 she joined the standards committee. When Java appeared in 1995 she immediately pounced on the new language. Since then she is truly bilingual, using both languages in parallel, and inevitably mixing up the syntax at times, naturally looking forward to adding a third curly brace language to the skill set, just to increase the confusion. In 1997 she decided that 13 years of sitting in front of a computer day in and day out were enough (at least for her taste) and she shifted her focus to training, coaching, and mentoring.|