This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
Ulf Dittmer wrote:Am I the only one who interprets what william said to mean that he is wondering the same thing, i.e. who those people are? In other words, the question Jesper and Bear are asking of william should instead be asked of the original poster.
If that's the case, then I think it was established earlier that the OP was listening to a small circle of people who think of the Java ecosystem only in terms of Applets, which yeah, is a technology that "no one" wants to use.
(I quoted "no one" because obviously there are a small number of people still working in Applets, but it is generally considered a dead technology.)
But those set of circumstances are quite restrictive. Once you're in your late 20's or early 30's and need some ecosystem to be the backbone to your career, you turn to Java. The only other alternative even worth thinking about is .NET. And of course once startups mature, they inevitably move to Java. It has only been in the past two or three years that it's been possible to consider anything else because big names like Intel (Intel XDK) or Adobe (Phonegap) have thrown in their hat. And all these alternatives are untested. Intel could decide to abandon HTML5 tomorrow and you would be left in the lurch. But good old dependable Java would still be there.
Joined: Feb 01, 2014
Philip Perry wrote:You want my honest opinion of why so many young guys are complaining about Java and singing the praises of things like Ruby and Python? Here it is:
Java is a really, really BIG language. Oh, the core language is very small, and easy to learn, but knowing the core language is just the beginning. You've seen the want ads for Java programmers... A Java programmer is expected to know a whole lot of stuff. Core Java, NetBeans and/or Eclipse, how to write and use servlets, JSPs, probably taglibs, you're expected to know at least one or two frameworks, and when you get to your technical interview if you don't at least know a few design patterns and how to write a sort routine on demand; the alpha geek running the interview will give you the stink-eye. Also, Java's used in a lot of companies, and they tend to be demanding about experience. They want four years of this, four years of that... It's hard to break into this particular career.
Worse, most companies don't want to train anybody; they expect you to know everything on day 1 these days. How's a college kid going to get his foot in the door? He's got no experience, nothing really to put on his resume to get it past the H.R. drone scanning the resume pile on autopilot... I've been doing Java for seven years, and I feel locked out because I've always written my own JDBC at work and now I find out everyone's using Hibernate and employers want you to have four years' experience in it. D'oh! Why is it always "four years"? Seriously.
Anyway, all these young guys are looking up at this big mountain, this big, freaky mountain with sharp crags sticking out and vultures circling around it, and maybe even a yeti looking down at them and licking its lips. Way up at the top, there's a castle, and it looks great, but dang. All the way up there? Past the yeti?
Then they look over to their left, and there's this grassy little hill with a little cobblestone path on it leading up to a simple little house. They look at the castle; they look at the house. They look at one, then the other, then back again. Finally they say "Nope! Nuh-uh. I'm going to go climb that little hill over there and call it a day." So instead of trying to learn how to do large-scale enterprise development, they settle for the scripting languages and do web pages. It's a living, and they're happy, and there's nothing wrong with that.
But what's *really* going on is they're taking the easy path instead of the hard one, and telling everyone the easy path is soooooo much better. They weren't scared of the yeti, no way, they just like cottages.
Or it could be they don't want to lie. You can hardly blame them for not wanting to play a rigged game. Who would know better if you said you had those four years Hibernate experience? Absolutely nobody would question it if you knew your stuff and had at least five years of Java work. Meanwhile other stacks are proven by github, a pure meritocracy. It's not a castle and a cottage, it's a castle and a city. Who wants to live in an old stinking castle when there's a modern city?
I'm using Java for my own purposes but I'm not going to and likely never will play the game for a Java job. I don't want to play the game but doesn't mean I couldn't play it well and win at it if I tried.
Brian Lim wrote: And of course once startups mature, they inevitably move to Java.
Actually, a fair number of successful start-ups have moved to Scala rather than Java. Thus they get to use the wonderful, fast and proven JVM and avoid a fair number of the problems (boilerplate, multi-thread problems, etc.) that show Java's age.
Many of the folks posting anti-Java positions in this thread seem to focus on what will get you a job, especially when you have little or no experience. That is a valid thing to focus on when you have little to no experience, but its really not consistent with the premise of this thread. That discussion belongs in a thread with a subject more on the lines of "Is Java the best language to learn first?" That is quite a different topic than "millions of Java users don't want to do it anymore"
Jay Orsaw wrote:.... and most programs are written in C. People hate on Java because of the JVM
I completely reject your first assertion. Last time I checked, most programs were still written in Fortran, because it has a 30 year head start over even C.
People who "hate on" java because of the JVM are, at best, uninformed. The JVM is the best thing about Java, and will long out live Java the language. The JVM lets folks write clear, simple code that performs as well as the best, hand optimized C -- which can't be read or understood by anyone because its so optimized.
I don't know what archives you are checking, but I'm afraid I can't believe that, and FORTRAN was my first programming language. It certainly isn't used in the bulk of my inventory.
There are I think a lot more business computing facilities than scientific ones, and though I have used Fortran more than once in business, the majority of the apps in the shops I've worked in was COBOL or assembler.
But I'd wager that the number of apps written since PCs came out dwarfs even that, and most of them were written in C/C++, BASIC, Java, Pascal, or one of the scripting languages.
An IDE is no substitute for an Intelligent Developer.
whenever python fanboys start lecturing about how python is better, challenge them to a contest where they are not allowed to use any java APIs and, more quickly than I with Java, create an Enterprise-level N-Tier web application (or thin client app / RIA for that matter) which is transactional, secure, performant, stable, uses several different resource managers and a complicated DB backend schema. I'm not saying it can't be done in python, but... Oh wait, that's exactly what I'm saying. In enterprise projects, there is no valuable alternative.
And talking about value, where do you think the money lies? The nth Paint clone or real enterprise level applications?
Client side apps is pretty much a thing of the past. Even if you code a non-trivial client-side app, unless it has a requirement not to use any network, you're looking at a thin client in any language you would like connecting to a Java Application Server's Web or Business Components.
Dieter Quickfend wrote:whenever python fanboys start lecturing about how python is better, challenge them to a contest ...
Well, I'm not especially a "fanboy" of Python or Java although both have their merits, and language flame wars are a waste of time, but I think you're challenging people to compare apples and oranges there, Dieter. You're right, I wouldn't be too keen to build "an Enterprise-level N-Tier web application (or thin client app / RIA for that matter) which is transactional, secure, performant, stable, uses several different resource managers and a complicated DB backend schema" in Python, partly because I don't know enough Python in the first place. Right now, there is a large class of enterprise applications where Java (or at least the JVM) often seems like the most pragmatic choice. But so what? There are lots of other ways to use computers that aren't in that class.
In my workplace, we are strongly "encouraged" to use Java EE for pretty much every application. Whatever the question, Java EE is supposed to be the answer, and we can't even look at other JVM-based alternatives like Grails etc. But many of our users need smaller and more flexible applications that could really help them get their jobs done, without necessarily having to drown in full-scale Java EE "enterprise" bloatware. Unfortunately, the sheer amount of work it takes to achieve anything in Java EE means that there are many applications that don't get built because we simply can't afford to do it, so users have to struggle on with inadequate tools instead. Those are the opportunity costs of the "one size fits all" Java EE mentality around here.
Luckily for me, I'm now working on a kind of "skunkworks" project prototyping various small-scale applications, where the usual restrictions have been lifted temporarily. Last week I built a first pass at one of these apps in 4 days using Python. If I'd used Grails, it might have been a bit longer because I'm using some nice Python libraries that suit this particular task very well, and I might have needed a bit more time to find JVM equivalents. If I'd tried to do it with Java EE, I'd still be fighting POMs and JAR versions and server configurations etc, and would have learned very little about the intrinsic challenges of the task, because I'd have been too mired in the incidental complexities of dear old Java EE.
Sure, these are just prototypes, and it may be that we decide to take some of them further as JVM-based applications instead. But some of them will be fine as Python applications - with appropriate work to turn them into production-ready code of course - because they do the job, are easy to maintain and there is no need to integrate them into a monolithic Java EE environment anyway. And plenty of people seem to use Python very successfully for all kinds of tasks, even if it wouldn't be the first choice for a big n-tier "enterprise" application. In the meantime, we are free to focus on exploring and dealing with the far more interesting challenges of the task itself, which is the entire purpose of our current project.
FWIW I think recommending Java EE as a golden hammer is just as pointless as declaring "nobody wants to use Java". Surely it's far better to just use the right tool for the job?
It brings up a personal issue though. Sometimes I find it very hard to strike a balance between my application being extensible, and being specialized. I like to write my programs in such a way that users can easily change some behaviour without having to muck with my code, but I still want them to recognize what the program was there to do in the first place. Sometimes *I* lose track of what it was there to do in the first place.
I'm currently using NetBeans Platform to write a client application. First of all, I really like the way NetBeans looks, and how you can drag all the windows around and stuff, and I wanted that for my own application. After starting writing some Swing stuff (which I really don't mind), it started appearing as an almost insurmountable task. Joy! NetBeans Platform can do all that crap for me! (Apparently OSGi as well, but I don't like Eclipse).
So, after a long frustrating journey trying to learn how the platform works, I'm starting to make progress. And as a beginner in any topic, I'm getting overzealous with the tricks I'm learning. I'm loving how you can plug modules in at runtime, so I want the same for my own application. All of a sudden, my code is full of interfaces and factories and stuff, so people can drop in extensions that they will probably never write.
I had the same problem when I first learned of inheritance. Suddenly everything had to be in some kind of hierarchy, and I saw connections where there were none.