60 karma · joined June 30, 2010
Personal suggestions would be:
- Get one of the major open source IDEs. I personally recommend Eclipse (http://www.eclipse.org/)
- Learn some Java first. Since it's the Ligua France on the JVM, you'll want to know it if only so you can read code. If you like your more modern languages you can always switch to Scala/Clojure later once you are familiar with the Java ecosystem.
- Play (http://www.playframework.org/) is a great framework for your web app. Give it a try.
- Netty is a great IO framework (http://netty.io/). If you really care about IO performance, you will probably want to use Netty (or something based on Netty). I've used Netty for low-latency game servers, for example.
In particular, even if absolute material wealth does have some positive impact on quality of life, a culture that optimises solely for efficiency is almost certainly sub-optimal for quality of life.
I bet if you search your own experience you will find times when you did something that you weren't good at (and could easily have been done better by someone else more specialised) and found that you enjoyed it. The feeling of achieving something new and different and surprising? That's called quality of life my friend..... and many nomads a few thousand years ago probably had just as much of it as we do today
- Explicit model of time (http://www.infoq.com/presentations/Value-Identity-State-Rich...) - Homoiconic / Extensible syntax (shared by most Lisps) - Math-oriented numeric types (Clojure maths is arbitrary precision by default, and it has nice things like rational types) - Immutable (Clojure data structures are all immutable) - Garbage collection (inherited from the JVM) - String manipulation (Regular expressions are a built-in type)
Most of the other features actually seem more like libraries than language features, but given that Clojure can access the entire Java ecosystem I think you can do all of it from Clojure with relatively little pain.
* Compatibility with installed base of existing code - Java is so prevalent on the server side that this is often a critical requirement
* Performance - The JVM is an amazing platform with excellent JIT compilation, very efficient garbage collection, great for concurrency etc.
* Huge library ecosystem, second to none. Most of the ecosystem is open source and if you choose your libraries and frameworks appropriately (i.e. anything but J2EE!) then you can be pretty much as agile as any other language.
* Major corporate backing (IBM, Oracle, Google, Red Hat). There's enough diversity in the supplier ecosystem that you don't need to worry about vendor lock-in too much (e.g. competing app servers).
* Java is more open and cross platform than the only credible alternative (.Net) - From a CIO perspective .Net is effectively vendor lock-in to a Microsoft stack.
* Great availability of "good enough" developers. There are also plenty of rockstars in the Java world if you look hard enough.
* Maintainable code. Java's relatively simple and concise syntax actually makes it quite easy to maintain with the medium-skill developers that most corporates have.
* It's not Java per se., but the innovation happening in the new JVM languages (especially Scala and Clojure) actually puts the JVM pretty right at the cutting edge of language development.
Note that a lot of the above reasons make Java a good choice for startup companies too, especially if you pick one of the new languages and go for "Java the platform" rather than "Java the language".