Java is becoming the new Cobol
infoworld.com
infoworld.com
"One bit of good news: developers and analysts agree that Java is alive and well for internally developed enterprise apps." Has Java ever been alive for anything else?
Java's big problem is incompatibility across platforms?
Ruby gaining popularity because of built-in shopping carts?
And what's the connection between losing marketshare and becoming the new Cobol? I mean, Perl is losing marketshare...
This article is utterly clueless.
When people decide to end a relationship, they often start to think of all the ways they have been wronged to justify it. I always think, eh, maybe "that man" was fine, you just got tired of him. You don't need to justify a break-up to me - feel free to go.
Personally, I don't feel as aggrieved by Java as some people do. It was certainly better than working in C++. It certainly made web programming easier. Tomcat was simple to install and configure. Ant was a good build too (but I did start to wonder why all the XML configuration for something that could probably be standardized). Struts was heavy and cumbersome. Hibernate got on my nerves - why do I have to deal with all this XML. Spring was an improvement, but I broke up with Java when I started reading about Inversion of Control and all the design patterns. Why am I doing this when the actual code I care about is going to be, oh, maybe a thousand lines, tops?
"Well Oprah, Java is no good, let me tell you about what he did, in the beginning he was so nice, always bringing me flowers, but now he just sits on the sofa an plays video games, why even last week, when I got home, working hard to pay the bills, he's just sitting there..."
Eh, my take on it is that technologies and programming frameworks move on (often by finding something that was done better in the past and modernizing it, or even just dressing it up). Many if not most of the "breakthroughs" in rails were already present in other languages.
There's really no need to hate Java or decide it's a foul language that has wronged you. Maybe you're just ready to move on. Nothing wrong with that.
(of course, if you're a Lisper who suspected Java was stupid from the very beginning, I suppose you are entitled to your victory fist pump when everyone starts to wake up and get it).
I'm sick of programming in Java now. I'm not sure what's next, but Ruby and Rails certainly opened my eyes to how much more pleasant and productive other frameworks and languages can be. I just don't feel any real need to hate Java, because it did make my life a little better (almost) a decade ago.
As for me - I'd disagree that I'm forced to use java, but I am definitely under pressure (financial and otherwise) to do so. For instance, I use an API for a mathematical engine (ILOG) that is available in java, C#, or C - and everyone around me at work uses Java. Technically, I could write an extension for ruby in C (maybe there's already one out there?) But I have a feeling this wouldn't fly with my company. I could also quit and find a new job - there are plenty of good projects in Ruby out there. So to some extent I am "forced" to use Java, but if I'm totally honest with myself, I have to admit that there's more than a small element of personal compromise (as opposed to pure coersion) in the language I use at work.
I read an interview with David Heinemeier-Hansson where the interviewer repeatedly asked him about "why not use X for reason Y" (X= Java, .NET, etc, Y=performance, availability of programmers, scalability, etc)... and his response was something like "previously I was direct, now let me be blunt: I don't care about you."
That's what I'm getting at with the "well, oprah" analogy. At some point, you just have to decide what you're going to with. Keeping an open mind is extremely important, but it's equally important to remember that you don't need to convince anyone other than yourself. If you find yourself justifying things too often to other people, maybe you need to restructure your life a bit (not meant as a criticism: I know I do).
(I tried the upside down exclamation point and the accent mark, but apparently that gives YC News indigestion. You'll have to settle for gender agreement.)
Cobol didn't convince pointy-haired bosses that technology which only 10-15 years before was considered an academic curiosity ought to be standard for business application development.
Consider an example from the programming language shootout:
Java:
public static void main(String[] args) throws Exception{
int sum = 0;
StreamTokenizer lineTokenizer = new StreamTokenizer(System.in);
while (lineTokenizer.nextToken() != StreamTokenizer.TT_EOF) {
sum += lineTokenizer.nval;
}
System.out.println(Integer.toString(sum));
}
Ruby: count = 0
l=""
STDIN.each{ |l|
count += l.to_i
}
puts countI often see people demonstrating their point with line input or regexes, both of which are misused 90% of the time.
I'm convinced that ruby leads to shorter code at equivalent behavior; however I'm far from convinced that size is everything, because of various remarks of Donald Norman in his excellent book "the design of everyday things". For example: "place constraints in the world and not in the head", so if the constraint exists, it should be visible (which doesn't imply java type system, we can imagine something shown by the IDE that would not be code).
Apart from the language war, there is a community war. I don't use many "normal" java tools, because I feel they are dumb. But I feel there is a strong base of low-educated people in the new java-critics community, people that can only count lines, repeat the leader, cannot create new thinking by their own. And this is not new, a few well-intentioned leader get spoiled by dumb masses is common thing everywhere. But this is tragic, because where java (and C#/.net) represented a progress hover the mainstream C and C++ by using explicit typing and collection the last technology in interpretation and GC in a single product, and removing explicit pointer manipulation, python or ruby are nothing new, they are basically old tech languages, with old tech (if not dumb) interpretation. O'caml and Haskell (and the "new" bunch of logic/functional language like clean, curry etc.) did propose some innovation. O'caml did propose a new balance for generics and side effects ("weak types"), an interesting GC, some new type systems, Haskell proposed some interesting optimizations (massive rewriting thanks to laziness) a new compromise for mixing laziness and side effects, Concurrent Clean too, with its "unique" types.
The main problem with languages is people, and it has nothing to do with the line count. Because if you count the lines to make your language choice, then you can't criticize your boss when he manages by headcount chopping, when he imposes the new fad of the moment in the project etc. because you entered his system.
In my last job we divided the codebase by 5 without changing the language, we mainly trained people (management and ourselves the "newly hired" included) and removed stuff (because shit does not only come from development). Doing shit is not a language problem, it's a people problem.
Like that?
(For the love of god, how do I get that in a pre tag?)
it will look like this
as you would expect from
a <pre> tag def return_three_values
"1,2,3".split(',')
end
a, b, c = return_three_valuesFirst, in order to get an objective comparison of code length you should at least use the same (length) variable names. You used "lineTokenizer" in your Java example and "l" in your Ruby example!
Second, you could have just written System.out.println(sum) in Java. The fact that you had to write System.out.println(Integer.toString(sum)) shows your lack of basic Java knowledge.
Lastly, the brackets around your one-line while loop in Java are unnecessary, unlike the brackets around your closure in Ruby.
Also, the Java main method declaration is irrelevant to your point, since it's written only once per program, and is automatically created by any IDE.
How about this equivalent Java code to match your Ruby example:
int count = 0;
Scanner s = new Scanner(System.in);
while (s.hasNextInt())
count += s.nextInt();
System.out.println(count);
Not so different now, is it? You can write concise code in any language if you know how to use it.The developer of the Java solution posted something I'd consider reasonably representative of the Java I would likely encounter from most Java programmers and I while I have almost no personal experience with Ruby, I have the feeling the Ruby solution is reasonably close to what Ruby programmers write.
While you can write concise code in any language, it seems few Java programmers bother to.
Perhaps you should submit your solution to the original site: http://shootout.alioth.debian.org/
Sorry for initially assuming that you wrote the code. I wasn't familiar with that site, so I didn't register your original allusion to it.
Also, I think your statement that conciseness is inversely proportional to speed is rarely true. It certainly doesn't hold for the programming examples at the shootout site.
puts STDIN.inject {|sum, next_number| sum.to_i + next_number.to_i}
. . . or something.
(apply + (read))I know that was vague, but I just get the feeling I'm often doing something semi-manually in Emacs that my code should be doing for me.
code as data wins again ! (but with great power, comes great responsibility).
If you write the kind of Java that other Java programmers appreciate, you'll soon end up with lots of files full of long lines.
Ruby seems to encourage brevity everywhere.
I say seems because apart from a few Capistrano configurations I haven't done any practical Ruby programming. I have however written more lines of Java than I want to admit.
With Rails I had a similar problem, basically I stopped trying it when I hit the ActiveRecords part, because I thought configuring the OR mapping through the hasmap sucked big time: I had to look up everything in the ebook (PDF sucks), whereas Java+Hibernate+Annotations is just a breeze in Eclipse. I am still tired of Java, but as I said in another post, I am not yet sure how to best replace it.
Also, I have seen a lot of very bad Java Code. Maybe it is also the new Cobol in that respect, too many not so good programmers have been let loose on Java and give it a bad name.
I personally don't think that verbosity is an aim of Java. What I usually aim for, though, is understandable code.
puts STDIN.inject(0) {|sum,line| sum + 1}
Ronen says Ruby offers pre-built structures -- say, a shopping cart for an e-commerce site -- that you'd have to code from the ground up using Java.
Fact-checking 101:
http://www.google.com/search?hl=en&q=%22java+shopping+ca...
http://www.infoworld.com/article/02/03/22/020325fejavastrat_...
Can't seem to access the website right now, though. Google cache at http://64.233.167.104/search?q=cache:UmQdAoYGKp0J:www.infowo...
Also, "Java Web Services High in Potential" at http://www.infoworld.com/article/02/02/22/020225feweb_1.html , but the website isn't responding right now.
What I mean is the rising population of unskilled so-called programmers who have no business programming entering into the marketplace. I've already seen crap Ruby code floating around, including ones that were "ported" (I use the word lightly) from PHP or Perl. (They copied-pasted the code and change things here and there to make it Ruby-like ... doing things like retaining the $ in front of variables, or ...)
The DailyWTF is a monument to these pseudo-programmers.
When a language is sufficiently popular enough that pseudo-programmers perceive it as a way of getting secure income ... without having to expend skull sweat ... that language is flooded with utter crap. The result? COBOL.
People have said you want the top n-th percent of the programmers. For me, I just want to work with programmers that don't suck.
I understand the concern for mobile/embedded stuff and don't know much about how well Java does there.
However, when a half gig of RAM for a server costs well under $100, it just doesn't matter much for regular 'ol server apps. Even a "bloated" J2EE app doesn't usually require more than a gig of heap (unless you're doing massive, in-memory caching). Yeah, it's nice to use less memory, but there are 50 other things I'd give equal weight to (the availability of libraries being about 25 of those 50).
As I write this comment, I am tuning a Java rules (rete) app that is using an 11 gig heap :)
I'm not about to defend Java, but what a lot of the Ruby newbies are too young to know is that we had a dynamic language in the enterprise. It was called Visual Basic - you just declared everything "Variant". The result was a bunch of god-awful messes.
Personally, I like flavors of Lisp. But I don't know that I'd prescribe it for the IT department at Wells Fargo.
Ideally the classes are trying to teach language agnostic principles and techniques.
We did research into Ruby/Python/PHP and none could help us more than Java.
You know, Rails/CakePHP/Django/TurboGears are not silver bullet.
If the dynamic languages fail me, I guess Scala might be worth a look.
This is the same kind of relation between C, java and C#, the basic type system and grammar are cousin.
I won't answer to the "static typing is inflexible", but you should check the type system itself, and its genericity system and modularity system.