Pompous Statement
On twitter I posted the following tweet:
Quote me on this “Erlang will replace Java in the next 2 years as the standard for Enterprise Applications.”
A fair number of people were either outraged or excited by this statement, but one thing is sure people wanted to know my justification for this statement. I feel that it was deserving of a full blog post rather than a random assembly of 140 character messages.
A little background first, I have built many applications in a wide range of disciplines from Security Policy Management products to project management web applications and have coded in nearly all the “standard” set of languages. Programmers and their language selection is little more than a tool for management types to tout, blame, or confuse based on the situation and as such my statement is indeed controversial, especially since most programmers rarely get to pick the tool for the task, let alone the right tool.
I have been on both successful and unsuccessful projects and one thing is true, developers have a short period of time to accomplish something great before managers apply their “business savvy” to the mix and it all goes sour. This is why Ruby is seeing such a limelight at this point, because you can quickly get something out before the “others” have a chance to fark it up (trying to be PG). So without question, the quickness to a win is the key to success within the development community especially when you have any layer of management. Java, .Net, and even Ruby take a long time to develop an Enterprise solution because they are not designed for the inherent concepts of distributed computing, messaging, and even data persistence. They all farm out some other solution for these problems. If you code in Rails or merb, how often to you fire off a background process to do something that “needs special care”? If you code Java or .Net how many times are you dealing with an ORM because you need an enterprise database (SQL Server, Oracle, DB2)? Most of the time in Enterprise development is spent tricking the language into being enterprisy and globbing on often times incompatible technologies (relational != object) just because “it has to be that way”. When you break down Enterprise development, the key factors to it are:
- High Availability
- High Performance
- High Scalability
- Robustness of operation
- Perform a business function
Humorous Note – Check the wikipedia definition through the link and notice the foreboding message about the cost of development and the recommendation not to do it — awesome.
Java and .Net have been quibbling over the enterprise development stack for years decades and they were highly reliant on two basic assumption – processors in computers would continually get faster and memory would be abundant. Since 2002, individual processors have not improved at any rate to speak of so applications have gotten slower, not faster. It is important to note that due to the way threading and concurrency are handled in both languages, the application will only utilize a single processor, so even if there are eight (8) cores on the server, the “enterprise” application will only be using one of them, not exactly high performance. The other assumption about memory has been stifled due to the addressing constraints of a 32bit processor stack and the slow adoption of 64bit operating platforms that could facilitate higher memory utilization. Furthermore since the processors now have multiple cores, the are each assigned portions of the local and RAM cache banks, splitting the available address space reserved for any individual processing unit and reduce the overall available memory space for applications. Put on top of this that every enterprise application not only requires memory for itself but for an application container (tomcat, JBOSS, IIS, mongrel) and memory quickly becomes a contrained resource, despite its “commodization”.
So what is a programmer to do? Well if you follow the trends, you are probably hearing good things about “cloud computing” and the glorious abstractions that it provides you in order to work across an array of cheap computers that most times you never even see using some form of virtualization. This doesn’t solve the problem it just pushes the maintenance task to someone else and to be honest its a band-aid on the real problems. Cloud computing will not work in the long term because the systems inherently carry the problems with them because they are not addressed, they are “virtualized”. Yes the cost of setting up and tearing down an infrastructure is reduced, but to what gain? Are we programming better systems because of it? Are we producing faster, more efficient results? The answer is a dismal no. You are just adding an increased level of complexity that you do not have to understand in order to use and you are setting yourself up for a storm.
Note: In case its not obvious I do not recommend cloud computing solutions for a variety of reasons, not the least of which is the problematic security issues that never get resolved within the “cloud” where your information is available for anyone — umm yea, can you say honeypot?
So back to me being a pompous statement maker. In the next two years, you are going to see those “managers” start asking why these solutions are working, looking for the next buzzword. I say fark them. Developers need to make this next big change, it needs to be for the right reasons. We need to move to something like Erlang which uses a database, in Erlang, and a message queue, in Erlang, and a webserver, in Erlang, so we aren’t constantly looking for people to hire with an alphabet soup of qualifications. Enterprise software does not have to be complex. I repeat, enterprise software does not have to be complex it just requires doing it right. Going full circle on how to sell this to your organization is simple – make big wins fast. Erlang, Haskell, Clojure, and Lisp all allow you to do that, it just takes you being at least semi-knowledge about it. You can build a fully-distributed, blazing fast, fault tolerant processing engine that can be hot-updated in the field in an evening, that sure as hell beats a blog in ten (10) minutes in my book. This shift will allow software developers to finally utilize and maybe catch up to the advancements that hardware developers have been making. It will allow us to leverage computers in a way that we could never have imagined before due to remedial constraints from failed assumptions. Look you don’t have to believe me, Kevin Smith posted in his blog that “Erlang reminds me of Ruby during its early days” and then goes on to reference several enormous projects using Erlang with great success. Erlang has arguably already penetrated the enterprise and those companies using it have resoundingly had success with the language.
As for my statement, time will tell, but I am going to my darndest to make it happen.
Is being a prominent language selection for new Enterprise projects in 2 years enough to “replace [Java] as the standard”, though? Even granting all these other points, most elephants don’t actually dance.
Jim Van Fleet
September 9, 2008 at 9:58 pm
An ambitious prediction to make indeed! I agree with you to a certain extent. I believe that Erlang will see its face more and more in enterprise in the coming years, but I’m not ready to make the statement that it will replace Java in two years. (But then again, I’m one of those who is afraid of making absolute statements)
The one thing that really stands out about Erlang is that it was built _for enterprise_ BY enterprise. Ericcson built it to solve a problem and they did a fine job.
I think the biggest thing that Java has that Erlang does not is that Java has the big marketing behind it. Sun is dedicated to marketing Java to large corporations as “the” enterprise solution. They have a large support service. Thinking back to the 70′s (when I wasn’t alive, as a disclaimer), Java and Sun is to programming languages what IBM was to computers. If an enterprise is using Java, calls Sun for support, and says “Such and such is not working” then the response by Sun is “We’ll have four developers out there to help you in 30 minutes.”
Erlang will need to step up its marketing game to enterprise if they wish to compete with Java. That being said, there are some strong case studies that are backing Erlang, and creating a strong force in the market would be made much easier because of this.
But… will anyone step up? Now that, that, is the question.
Mitchell Hashimoto
September 10, 2008 at 12:42 pm
2 years? I don’t buy that. It would require something to Erlang like what Ruby is to Smalltalk.
Erlang is far to exotic.
This is an ex Prologist writing. I know the value of immutability.
But 2 years?
JeanHuguesRobert
September 10, 2008 at 2:18 pm
Just as an FYI this article was posted over at YCombinator Hacker News, at the link http://news.ycombinator.com/item?id=300485 there are a lot of comments about the article over there. I will be posting a longer response in a couple hours because I am in a meeting right now, but wanted to record the link somewhere.
voodootikigod
September 10, 2008 at 2:19 pm
If Erlang was positioned so, why did Java, which is much newer than Erlang, get the position it did?
Don’t get me wrong – I hate java, and I love erlang – but this is in no way realistic. Even if you had a magic bullet that proved conclusively that Java was evil and Erlang was superior, it’d take a lot more than two years to make the transition, and that’s *after* people were convinced.
Quote me on this: you’re wrong.
StoneCypher
September 10, 2008 at 7:26 pm
I think that you are absolutely wrong and Erlang won’t be much farther along in Enterprise adoption than it is today. Some but not a lot.
Robert
September 10, 2008 at 8:19 pm
I heard the same of Ruby, Python, etc… and what happened, nothing.
schizoid
September 11, 2008 at 12:27 am
I kinda hope this prediction comes true, but i’m not so optimistic to assume this might happen. I have seen first hand the complexity java stacks bring in and only one part of it seems to be related to threading and scaling. Definitely they are important but its a stretch to think that programmers / software houses would dump all that code just so that they get transparent threading and messaging for free.
Rather, i feel it would be much more useful if Erlang becomes a Vm for Java or C# that provides the solutions for the areas that they have truly fixed.
computinglife
September 12, 2008 at 9:51 am
I would love to agree with you, but with global warming and all, I don’t think hell will be freezing over within the next two years.
But I do think we will see a lot more Erlang used to solve web scaleability problems and will see more great projects like CouchDB.
As far as Java and .Net, they will implement some form of concurrent processing that will be marketed and pushed on to the Enterprise with enough effort to make them appear to be a perfectly acceptable solution.
CitizenCult
September 12, 2008 at 8:14 pm
No matter how wonderful erlang may be, it lacks one single feature that is essential to be considered an “enterprise” language:
After a 3 week part time course, any random college dropout can know enough to be a replacable cog in a machine that’s going to be outsourced to India next week anyway.
In order to replace Java it’s not enough to be the best language ever, you also have to have a million cut-rate budget developers and hordes of middle management who’ld rather stick with what they know is acceptable with upper management.
Also, its an advantage if your language has a history of budget overruns, because apparantly a hundred million dollar failure gets golden parachutes for the manager and a thousand dollar failure gets pink slips for teh developers.
Bob
September 28, 2008 at 4:17 pm