In the last post we have seen that it will take me years to finish this project. The question is, what can I rely on, what can I build upon. What are the tools that I can use, without worrying that they are obsolete before my own tool even becomes usable?
Programming Language
In the case of RPCmagiX I have made a bad choice. I used Itcl 2.2 for implementing the GUI, and as soon as I had finished it, ITcl 3 came out and it was incompatible in some subtle but crucial ways. But even if it had not been so obvious, today Tcl is mostly dead.
Perl was my choice for WADL, and although Perl is still much more alive than Tcl ever was, it is not really dominant any more. Perl 6 has taken too much time, there was a lot of FUD about Perl’s imminent death, and at the moment Python is king and Ruby the fashionable contender.
I really hate Python. It’s personal, probably nothing that you’ll understand, but a language that relies on indentation for structure, c’mon! That’s nothing but a bad, tasteless joke. So Python can’t be it.
Ruby seems to be OK as a language, but I have no idea how it will fare. It could easily be the next Tcl. Remember: we are talking about at least three years before the shelf life of my program even begins!
COBOL would be a good candidate for a language that is guaranteed to never die. But who would want to work in COBOL? Nope, not even joking
And then there is another thing: I would like to use one language for the tool and for the code it creates.
Currently I work with Java. It took me a time to like it, but now I do. Yes, it’s a big ecosystem, yes it suffers from the fact that they had to reinvent the wheel and everything else that already was there, but now it is pretty mature and complete. And it has Eclipse. Working with Perl I never missed an IDE. A lot of Emacs windows on a big virtual desktop, some teminal windows, that’s all I ever needed.
Not so with Java. Java is pretty unusable without an IDE. But when you have something like Eclipse, when you have an integrated, incremental compiler, when you don’t write texts but actually manipulate parse trees, then all sorts of funny things are possible. Think of the refactoring support, and suddenly Java is a very flexible and dynamic language.
And Java has some other advantages: It won’t go away. Too much important code depends on it. Java is like Cobol, only a much more likeable language, and one with absolutely superior tools. Java is such an important language, because so much code for banks and insurances is written in it. There is a reason why there is a Java Enterprise Edition.
And for all that reasons my potential users are very, very likely to use Java. When I want to maximize the impact of my tool, Java is an ideal language.
But then, very similar things could be said about C#. Same category of language, same capabilities. A year ago I have written a nice mult-threaded system in it, and as a language I like it. Why not, it’s Java, deliberately disguised in an incompatible syntax, but there is no essential difference, and some solutions they have come up with, are really, really clever. For instance I like partial classes and miss them in Java.
On the other hand, it’s a matter of principle. I don’t like a language that is so tightly controlled by an entity like Microsoft. I don’t like working on Windows either. Yes, there is Mono, but when you go the Microsoft way, you really want Visual Studio.
Apart from that, it can have actual advantages when your tools are open source. Remember my ill-inspired decision for Itcl? Well, it is open source after all. For more than 10 years we have compiled Itcl 2.2 on all our AIX and Linux systems, and I see no reason why this can’t go on. A closed source core component would long since have been unsupported. Think of Visual Basic. Sure, Microsoft offered a migration path into .NET, but that’s only the core language. People often had augmented it with third-party components, and they often were not ported. We sure do have some of those cases.
Libraries And Frameworks
And then there’s all the stuff other people do. After all, what I’ll do is basically Model Driven Design. Eclipse has a whole big group of projects under that title. Shall I use them. Can I?
They play a different game. They play a numbers game. The Eclipse Modeling Project has seven people only on its Project Management Council. Look at the list of projects on that page. Everything on that list looks interesting and like something that I could need, but I would have to spend all my time, work, free, sleeping, just to follow all that.
And then think of all that constantly changing. Try imagining the hassle with keeping all that in sync. It’s impossible, and even if I could do that, it would not help me, it would only slow me down.
No. I won’t do it. It may be possible to catch up with these things later though, for instance at a time when I have some people helping me. If they are interested in the field at all, they would probably have worked with those tools and frameworks. They would probably know how to bridge the gap between EMF and my own core abstractions. After all, whatever I come up with, it must be semantically equivalent to EMF, because if it were not, it couldn’t be as expressive.
Yes, I know, in a way it’s a waste of time to re-invent such things, but I simply can’t tie my own core abstractions to something that is completely out of my control. This would be irresponsible. On the other hand, when my own modeling structures are largely equivalent, when they simply have to, we can always bridge that single gap later, and by doing so, we will gain access to the whole infrastructure. At least that’s the theory
So What’s Left?
I consider Java to be a good choice as a language, and I consider the Enterprise Edition in release 6 sufficiently mature. I will use all of that (well, probably not JSF, but who knows), and I won’t use any other framework.
The whole design will be very abstract, most of it completely oblivious of the environment it runs in. In the end there will be some channels where input comes from, the models will have to be stored, there will be code generators, but all that can be abstracted away, done by primitive stubs in the beginning, done by plugins later. The only things that I have to worry about now are my code abstractions and how expressive they are.
I can and should program away in my simple sandbox, not caring about slick user interfaces and high performance. While I do that, all sorts of things will happen. Computers will get faster, new frameworks, new GUI systems may come up and get mature, and I’ll connect to them when I need to. Doing it from the beginning would only be a waste of time.

This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
I realize it is just your personal bias, but IMO you are missing a very powerful option by ignoring or not learning python. I’ve written professional code in probably about 20 different languages over the last 19 years that I’ve been paid to create software, and toyed with about another 15 different languages. Python is my go-to language for all my personal projects and any small to medium programming tasks that I have. It is incredibly productive and intuative, far beyond any other language I’ve used.
Well, I was forced to be part of a pretty ugly Python project for six month, so it’s not that I don’t know the language. Well, it’s more that I knew it, haven’t looked into it in four or five years. So, yes, it’s personal
It’s interesting that you dislike Python and are interested in Ruby. I started to look into Ruby (because or Ruby on Rails) and disliked the language. Which is why I invested time and effort into Python and Django. For an enterprise architect and developer, Java is an unfortunate fact of life, but I’m still not certain if I like the language or not. Or maybe it’s just all that JEE bloat that I don’t like.
But there is one good thing about Python’s indenting requirement. Agreeing about coding style with respect to indenting and brace placements gets a lot easier
Interested in Ruby would be too much. I have looked into it years ago and my impression was that of a sane language. But then, Perl, Python, Tcl, Ruby, Lua and how they all are called, all that is mostly the same. It’s the same power, the same complexity, the same effort needed, just like C# and Java are the same. Some like vanilla, some like strawberry, some like chocolate.
It’s the environment that makes the difference. Perl was fine. A solution to every conceivable problem in one place, CPAN, all nicely named, because they have good coventions. Compare this with Java: a Tomcat is kind of a webserver, so is a Jetty, Spring is a framework that can instantiate your Beans, an Axis is a SOAP toolkit, so is Metro, it’s a weird, confusing and badly interconnected ecosystem.
But then, once you work with Eclipse and ever go back to a normal editor, oh my! And Java has pretty matured as well. Basically it has soaked up all that came from the scripting languages. You now have Groovy, Grails, Jython, whatever you want or need. And the core has also gone into the right direction. Normally as languages get older, they put on fat. Just the contrary with Java. The Enterprise Editions 5/6 are free of bloat. This is as DRY as you could want. J2EE applications are still supported, still run, but you don’t write that way any more. You’ll see
I use PyDev in Eclipse for python editing. and DVT in Eclipse for chip design, so yes, I’m sold on the Eclipse front. But java was an ugly mess of a language. Ruby is nice, only for the ‘Rails’ framework, it doesn’t have the maturity of perl or python.
It was this quote that brought me back to comment again ”Java has evolved from a groundbreaking, revolutionary language platform to something closer to a modern-day version of Cobol.”
http://developers.slashdot.org/story/10/04/03/0147255/The-Struggle-To-Keep-Java-Relevant
Interesting. I’ve just read the article, and while I agree with some of it, I see the situation in a completely different light. As a language, Java looks lean to me. It’s easy to learn, it’s powerful and expressive. What’s hard to get into first, that is the enormous amount of library code. It’s not that those libraries were not documented, to the contrary, JavaDoc is doing a great job, even when the programmer does not much to help it along, but what’s poorly documented, that are the patterns.
At the moment I write kind of a tutorial to JEE application and project patterns as applied to Eclipse and the GlassFish v3 application server, and I will blog it here as well. Basically it’s what I have found out the last months. Not a comprehensive reference, just a set of things that work for me and that take you a long way. I guess that is the kind of introductive tutorials that Java needs and still does not have.
Don’t get me wrong, I’m not trying to evangelize, I am simply interested. What does it mean for you when you say “java was an ugly mess of a language”? What kind of ugliness do you see where I see elegance? I’d really be glad to learn what your personal objections are. It would be of enormous help for me, also when I soon train our own programmers, who are going to use Java to create backends for Flash applications.
I’m still at the Perl stage with Emacs windows! (grin). Works for me.
It perfectly worked for me as well. A bash window for quickly trying things with ‘perl -e’, a window with perldoc, 10 or 20 emacs windows on a 6×5 virtual desktop. Great
It only does not work for Java. There’s simply so much writing that the IDE can do for you, once you see that, you never go back. And it’s not only the additional complexity of Java (there’s not so much of it), it’s that Java as a compiled, statically typed language can be supported so much better by an IDE. You can do things in a Java IDE that you couldn’t do for most other languages and certainly not for scripting languages. And Eclipse does them all