The Second Coming of Java
wired.com
wired.com
It's without doubt not programmers, as the article tries to explain what a programming language is "...It’s a programming language, a way of writing software code..."
And also, who is going to be interested in a story about java if they aren't programmers or in the IT business?
The author seems to not even know what a JVM language is. "...Originally, the Java virtual machine — aka the JVM — only ran code built with the Java programming language, but today, it runs all sorts of other languages..."
Another example where the author is not being consistent "...language called Clojure to a new and increasingly popular invention known as Scala...Lisp, a way of quickly scripting code"
So now clojure is a language, Scala an invention and Lisp, a way of quickly scripting code.
This article is making noise without talking to anybody.
It's part of Wired's "Enterprise Technology" blog[1] so it's for CIO/CTO and other IT consultant types who don't write any code themselves, but make "best practice"[sic] recommendations.
I guess the audience is whoever gets to see the ads.
I'm confused what your main problem here is, besides it's almost lifted straight from Wikipedia. From Wikipedia: "Although the JVM was primarily aimed at running compiled Java programs, many other languages can now run on top of it." So, as far as I can tell from what's quoted, there's not much wrong with what was said. Please clarify.
Also, isn't Clojure a programming language? Does Wikipedia also lie here? If it's not, then what is it?
However Java-the-language has been stagnant since Java 1.5 in September 2004. The Java API has had some changes but the language has remained mostly unchanged. The 1.8 version promises some nice improvements inspired by FP languages. Unfortunately, 1.8 has been continuously delayed with a current release date of sometime in early 2014. For JVM developers who care about their productivity, moving over to languages such as Scala, Groovy, and Clojure is the only sane choice.
Groovy is slow as a 1-legged dog. (we use it to fill the shell/perl niche a lot but it is slow, effectively you're doing reflection lookups every time you call a method in Groovy). The dynamicness makes it better for scripting or web programming, though, where you don't care as much about performance.
Scala is the JVM's C++, a giant pile of overlapping features, supported by an advanced and very slow compiler that yields fast bytecode. Case classes, funny operator overloading, lots of additional syntax for collection manipulation. They're giving you more expressiveness at a cost of readability and language complexity. (This is an opinion, some may disagree).
Clojure is really awesome but most dev shops will have an easier time with imperative programming models.
Ultimately, not changing in 8 years isn't fundamentally bad, and Java isn't that bad at all as a language if you avoid things like EJB and Hibernate, and if you're not looking for a dynamic language like Ruby and dissapointed by Java not being Ruby. You might just disagree with the tradeoffs.
Just because Java requires explicit typing all over the place does not make it easy to read, especially when I'm trying to decipher what the ResourceBuilderFactoryFactory class is doing in my enterprise grade codebase. There is cognitive load in parsing tons of text to express simple concepts, just as there is cognitive load in deciphering a bunch of random symbols doing something complex. Scala with discipline lets you choose somewhere in between; Java gives no choice.
As far as the rest, we'll just have to disagree, I stated up front that it was an opinion :)
If code is becoming unmaintainable because of outsourced development, does that not have more to do with how we communicate to these external developers? Bad code is bad code in any language.
That has nothing to do with language; Java for which development is outsourced and maintenance goes in house is pretty much a nightmare, too.
But that's pretty much a "myopic development practices -- including outsourcing development of code you are going to need to end up supporting in house -- will blow up in your face problem", and not an issue relating to any particular language or platform.
Chances are, if you have the authority to make enterprise-level language/platform policies, you also have the authority to make enterprise-level decisions on whether and when to outsource development of software, so it makes sense to just do the latter right than to make an otherwise second-rate choice on the former to make up for doing the latter poorly.
Thats what I've been thinking (and posting) since some time now, nice to see I'm not the only one. I know some Startups regretted choosing Scala.
I think Java suffers from too many search results (yes thats a thing). I suppose if you want to learn Java today you simply google it, and find tons of people trying to solve the N+1 hibernate problem on stackoverflow, or some other common annoying enterprisey issue, and so you start reading up on JCPs and EE apis. If that is your introduction, I can understand why people end up going "what is this shit?". The reality of course is that there are many subcultures within the Java community and that many of them are anti cruft api as well which is how innovation comes to the Java world.
For example, if someone put as much effort in .Net's original collections API as they did with Java JCF, many a facepalm would have been avoided.
To be honest the whole JSR process is usually hindered by shoddy implementations rather than fundamental problems.
No one uses the strict mode stuff except those unwittingly beta testing it for Grails. It was written by one lone programmer and is still buggy.
So, there's consensus that this feature is not ready for prime time? (I don't want an answer from people who hate Groovy in general)
Best wait till Grails trusts the static enough to use it before you do.
> I don't want an answer from people who hate Groovy in general
I love the Groovy Language, but the current PM made some bad decisions after taking over, e.g. removing Poirier's Heredocs, disabling Scala-like catchless try statements, laundering Tkachman's Groovy++ static-typing plugin, stonewalling on Wilson's MOP upgrade, scuttling any attempt to spec the language, the horrible paren-less DSL syntax for multi-arg function calls, removing Closure Lists just before an RC release without any public discussion, how Strachan the founder was knifed over dynamically-scoped closure syntax at Devcon 2, how Java 8 lambda retrofit hasn't even been begun on, instead the PM is wasting time on non-Java compatible traits to Groovy, etc.
I still love the essence of the Groovy Language, tho, that's why I'm rebuilding it atop Clojure.
You don't have to use funny operator overloads if you use scala! Making your code readable in that language is definitely up to the developer.
> lots of additional syntax for collection manipulation
Actually using collections in Scala is far more easier than in Java
And i'm not even talking about XML parsing... where you would write 30 lines in java you'll write one liners in Scala. Guess which one is easier to read...
Scala promotes immutability that make code sane.
Scala promotes recursion over loops that makes the code elegant.
Scala promotes experimentation through its REPL.
Scala saves you writing 75% of the java boilerplate, thus promotes maintainable applications.
Scala looking much like Java is a deception but also an necessity for compatibility which Java libs. but the syntax has a total different meaning . That's the genius of Scala. Scala is the guy looking outside the box when Java is trapped in Cargo Culting.
Scala is the future of the JVM.
The fact that Scala can look a lot like Java is more for compatibility with Java devs; the code could look a lot different (and idiomatic Scala does) and still be compatible with Scala libs, but supporting code that is familiar to Java devs eases the learning process and encourages adoption.
Specifically, the point about encouraging recursion for more 'elegance' kinda bugs me there. Recursion is more of a natural fit than loops when walking a tree or graph, and is less so when iterating a list, set or map. It's about practicality.
If you're very interested in aesthetics, you'll never like java or even not-hate it. And that's ok.
As for clojure, how does its performance compare to groovy?
Really interested to know more!
That said, an idiomatic system in Clojure will likely have a very different design than it would in Groovy or Java. Using Clojure's built-in immutable data structures, it's cheap in terms of CPU and memory to make a large number of modified copies or to concurrently access data compared to the standard collections in Java and Groovy. Single-threaded reading and writing are, however somewhat more expensive.
My prediction is that it's easier to get good performance out of a system with a lot of concurrency using Clojure than it is with Groovy or Java, though with careful design, it's possible to get better performance with Java.
It's still unbelievable to me that so many shops drank that Kool-Aid.
I'm a bit skeptical of this claim. While Java does remove many of the opportunities other languages provide for making a small piece of code do something unexpected, I've found that Java's verbosity makes it hard to see the big picture.
Of course, good programmers manage in spite of any limitations of the language, and bad programmers manage to write incomprehensible code no matter how much a given tool tries to guide them in the right direction. I suspect it will always be this way, and that's not a bad thing.
I use Eclipse for all of them Counterclockwise, ScalaIDE and JDT. Counterclockwise is actually really nice. Selecting forms is super simple and makes the parenthesis "issue" not a thing.
The JVM has an exquisitely tuned GC, but any GC still comes with a cost. But do I have to use a language with no safety features at all if I opt for other non-GC languages?
(I'm of course thinking of something like FreePascal, but there must be a number of good middle-ground alternatives that are being ignored in the work-place, which would easily write less hardware-hogging code)
My hammer rocks!!!
Anyone who mentions these three languages in the same breath is regurgitating the marketing talk for one of them. The article doesn't make that mistake, so could actually be genuine research rather than some PR drivel from some corporate Product Manager.
This article is a little strange in general. The idea that Java was ever dead seems to be from the perspective of those who thought it was only for applets or devices. But the author acknowledges his awareness that this is not all Java ever was. So, to make the case that it died, he holds out a few examples of companies that tried something else, but couldn't scale until they went to the JVM. He simultaneously ignores the entire Enterprise Java world.
Odd.
I mean, it's a bit outdated as a language, definitely showing some signs of strain, but it's still not dead - for better or worse. I've yet to come across a more human-readable language, barring COBOL.
For readability, structured/OO/etc. languages that don't use particular terse basic constructs (e.g., idiomatic Pascal, Python, or Ruby, but generally not C/C++) beat BASIC hands down; structured and OO descendants of BASIC are pretty much in the same readability level as other mainstream non-terse structured and OO langauges.
By "invisible", do you mean that webapps that use JSP typically use URL mapping so that you never see the .jsp extension? If not, then I'm not sure I get your meaning.
>I've yet to come across a more human-readable language...
Yeah, I think its readability leads to a verbosity that is, ironically, the source of some complaints about Java. But, Java kind of embraces that verbosity to some extent. I've even seen style "standards" that discourage the use of language "shortcuts" because they are believed to decrease readability.
Oh, I just meant that JSP is never, ever mentioned in any mainstream web development magazine - it's absent from discussion, not practice.
Back-end programming seems to be exclusively PHP/ROR if I go from what I read on web dev blogs, forums and news sources. I may simply be reading the wrong sources, of course.
Java on the server never died or even coughed. It's huge. It's a very rich ecosystem and performs very well at scale.
Java for apps is IMHO underrated. The biggest foot-shooting decision Sun made was to bundle shitware like the ask.com toolbar with the JRE, and never to solve the JRE deploy/update problem that requires that every Java app bundle its own JRE. Solve that and java apps on desktop computers will make a comeback.
I think Microsoft killed the applets when it stopped upgrading the java plugin in IE. Applets were challenging MS dominance on the desktop. They kept it that way until java script came along.
Of course, if your site becomes popular, performance matters later.
Its good that it mentions the JVM-based languages though. I know many "Java" programmers who hate Java proper but love languages like Groovy, Scala, etc...
What about C#?
Kudos on the proof reading.
(And yes, obviously Ruby != Rails.)
Node sucks at database interaction, sucks at performance(computation) , the only thing that nodejs does well is concurrency ( handling concurrent connections ) but it doesnt make the js code running inside nodejs fast(computation).
In fact it is not. Your server wont die fast because Nodejs can handle a lot of connections , but the end users will wait a very very long time for a response. that's the truth about NodeJS.
The point about tail call optimization is interesting though. I wonder what it would take to implement that on a JVM.
I believe that Rich Hickey said that having special notation for vectors (and for maps, I remember now) was about, basically, yes, that syntactic sugar. He was specifically comparing to lists in () which are somewhat indistinguishable from function calls in (), hence an example of overloaded parentheses.
I'll bet he wouldn't make that same announcement today.