Every line of code adds spec inertia. Java makes you write a lot of code, which makes it super hard to redesign your project when you pivot on features.
Java works fine in enterprise software written against a strong spec. But wave never had a strong spec - It was an experiment. Inevitably, we spent a lot of time making the wrong thing.
We needed to be able to change wildly based on user feedback. We needed a light, nimbler language which would let us pivot easily and throw away code. ... And you optimise for a changing spec with a small team and a terse codebase.
Today I would recommend Coffeescript, Rails or Scala. Maybe even Go. A few years ago, Ruby, python or C++. Erlang, clojure or haskell would probably work too, depending on the team.
I'm just really surprised about one suggestion: C++. Even if I used it extensively and with great satisfaction back in the day, and even if I personally don't like Java, I'd like to know what would have made C++ a better choice than Java for terseness etc.
I would think if a service-oriented-architecture (SOA) were used as much as possible to modularize a project such as this to make it easier to change functionality, was a modularized approach taken or was this just one big codebase that was essentially all lumped into one big "application"? I work on a legacy Java project that has something like 1M lines of code and its a nightmare, the team I work with is finding that modularizing pieces of it into essentially individual projects (which is seamless to the end user) helps with keeping the complexity down, just curious about this as I think the Google employee who did that rant online the other day mentioned something along these lines.
I don't think the use of Java would necessarily lead to a project's downfall, I mean how are you going to scale something like this in Python if its already slow in Java?
Interesting, these are the exact reasons I have trouble using anything but Java. I don't work off specs anymore, and I can pivot/refactor in Java like nothing else I've yet used or seen. Scala might contend with this eventually but the toolset is still not quite there yet. Can you mention a few specific areas/choices where you feel it held you back?
Wave is probably extremely connection and packet-heavy, so likely something evented, continuation-based or otherwise able to handle a large number of connections on little memory. Erlang, Twisted, Go, stackless, Racket WS, Seaside, Tir, ... potentially behind some sort of load balancer for the evented ones (and the non-multithreaded continuation-based ones) or they're going to block other requests.
I would probably implement business logic in Lua and do routing/messaging/connection handling with Erlang.
Stackless might work, it would be great for a prototype. Too bad there isn't a Python on Lua or a Python to Lua translator. The Lua runtime is soo much better and less resource intensive.
Could you recommend a good alternative?
Also, could you elaborate a bit as to why not?