Recently came to know from an entry in Erwin's blog that Ateji has ceased to exist. I was aware of this company, and its technology, but I would not say that I was a close follower, mainly because I work in .NET domain. I also liked the OptimJ GUI. Regarding technology, as I understand it, Ateji introduced a language-based extension to Java, to express optimization problems (like objective functions, constraints etc.) more succinctly. They also had language extensions (and library support, again in Java) for easily implementing parallelism. This can possibly be compared to the availability of TPL (Task Parallel Library) in .NET (starting from 4.0). Please correct me if my understanding here is flawed.
One thing of mutual importance was (and is) the multi-core execution of optimization solvers, or injecting parallelism easily in mathematical optimization problems. From that perspective, the closing post from Ateji is interesting. Here is a verbatim excerpt from that post on the issues the company (and the technology) faced regarding adoption:
We did anticipate that introducing a new language-based technology and getting it adopted would take a long time. The truth is, it takes much longer than anticipated. Many “new” languages that are coming into fashion now were first introduced 10 or 20 years ago.
There are however examples of companies that successfully built a business on a language. Think of Oracle and SQL. They had a strong business case: suddenly, all software developers became able to access databases in a simple and intuitive way. We thought we had a similar strong business case with Ateji PX and parallel programming: suddenly, all Java developers became able to write parallel code for multicore processors in a simple and intuitive way.
Our largest mistake has probably been to surf on the popularity of the Java language and on the hype of the “multicore crisis” (all software has to be adapted for the coming generation of new hardware) without developing a fine enough understanding of the market. We discovered the hard way that Java developers just don’t want to hear about parallel programming, regardless of how easy we made it. They’d rather use only one core out of their expensive 16-core server than write parallel code (we’ve seen the case). They long for solutions that hide parallelism. This may change when 1000′s of cores become the norm, future will tell.
At the other end of the spectrum, developers that do parallel programming just don’t want to hear about Java, because 10 years ago it used to be slower than C++.
I guess, the key take away here is that although people (more specifically, developers who consume APIs) understand and appreciate the value of multi-core execution, it is not mainstream yet, and there is still a large inhibition from actually using it. I am reasonably sure that things will change, but it will take time. We are already seeing a proliferation of languages supporting parallelism constructs out-of-the-box, but it still puts the onus on the developers to use them. In the mean time, the best way to go, if one is into the business of developing computing libraries, is to incorporate multi-core execution in the library itself and make it completely transparent to these users. In other words, the only way to achieve developer adoption, is to have a no-brainer drop-in type solution. As Erwin puts it in his post, the target audience for Ateji's technology was too niche to support the company.
Best wishes to the talent pool for their future endeavors.