Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Java Open Source Oracle Programming

If Java Wasn't Cool 10 Years Ago, What About Now? 511

10 years ago today on this site, readers answered the question "Why is Java considered un-cool?" 10 years later, Java might not be hip, but it's certainly stuck around. (For slightly more than 10 years, it's been the basis of the Advanced Placement test for computer science, too, which means that lots of American students are exposed to Java as their first formally taught language.) And for most of that time, it's been (almost entirely) Free, open source software, despite some grumbling from Oracle. How do you see Java in 2014? Are the pessimists right?
This discussion has been archived. No new comments can be posted.

If Java Wasn't Cool 10 Years Ago, What About Now?

Comments Filter:
  • What's the point? (Score:2, Insightful)

    by jeff4747 ( 256583 ) on Sunday August 24, 2014 @02:22PM (#47742651)

    The problem is what's the point of Java?

    If speed is absolutely critical, you're going to go with C/C++/ASM/whatever native-compiled-language works well for your problem.

    If speed is not absolutely critical, there's plenty of "scripting" languages that get the job done more easily with less code. And if you're talking about something cloud-based, you can probably handle the lower speed of these options by adding another server node.

    Java seems to be in the middle ground where it's more cumbersome than the "scripting" options, yet slower than the "native" options. Leaving not much of a reason to choose it in the vast majority of cases.

    Java just doesn't seem to have much a a role today beyond "Google decided to use it for Android apps".

  • Re:I hope not (Score:5, Insightful)

    by Pino Grigio ( 2232472 ) on Sunday August 24, 2014 @02:26PM (#47742679)
    It was just coming into favour when I left. When I was around it was Modula-2 and Eiffel (for OOP) at University. I have always found Java to be absolutely horrific in practice, being pretty much the worst of all worlds. Today C# is far superior, whatever you think about Microsoft, and it's a real shame that .NET was mishandled at birth in the way that it was.
  • Re: I hope not (Score:5, Insightful)

    by bugnuts ( 94678 ) on Sunday August 24, 2014 @02:26PM (#47742683) Journal

    You only need to learn one oo procedure based language. All others are just a book exercise.

    One assembly language and how compilers translate stuff.

    And then you should also learn scheme.

    That will handle basically everything, reducing it to a book learning experiment.

  • by MythMoth ( 73648 ) on Sunday August 24, 2014 @02:36PM (#47742737) Homepage

    It's a compromise language. Compromises are, in fact, a good thing but purists hate them. Of course. That's what purism *is*. But really, who cares if it's cool? We're geeks, I thought we were supposed to be opposed to "cool" anyway?

    It's a known quantity and before you dismiss it you should consider the truly vast amount of software that's been successfully implemented in Java.

    Personally I like it. It has it's niggles (if I were king I'd change oh so many things) but it keeps on succeeding like most good compromises.

  • by DoofusOfDeath ( 636671 ) on Sunday August 24, 2014 @02:41PM (#47742755)

    What good engineer gives a f**k about what language "cool", aside from considering his/her ability to hire hipsters to staff the project?

    If you're worried about the "coolness" of a language when doing your day job, you're almost certainly doing your job poorly.

  • by BitterOak ( 537666 ) on Sunday August 24, 2014 @02:44PM (#47742771)

    One of the main reasons Java may be "cooler" today than when it was first introduced is performance.

    In the early days of Java, it's VM architecture meant that it was significantly behind fully compiled languages like C/C++ in terms of performance. People were supposed to sacrifice speed for portability. Even for non-speed critical applications, slower languages were thought to be "less cool". Real men used C, and real, real men still coded in assembly language.

    But the VM technology in Java has gotten so sophisticated that it isn't significantly behind languages like C/C++ in terms of performance, and that can't be ignored. This is allowing some of the advantages of Java over C/C++ such as garbage collection, dynamic class loading, a certain degree of reflection, various safety systems, etc., to win over some programmers. Java may well be cooler today than it was 10 years ago, because it's really grown up and become a fairly useful language.

  • by bill_mcgonigle ( 4333 ) * on Sunday August 24, 2014 @02:52PM (#47742811) Homepage Journal

    If speed is absolutely critical, you're going to go with C/C++/ASM/whatever native-compiled-language works well for your problem.

    If speed is not absolutely critical, there's plenty of "scripting" languages that get the job done more easily with less code.

    Yeah, this is how most 2+-sigma programmers on the right side of the standard distribution of programmers approach problems.

    All the rest (the vast majority) need languages with good error messages, good error landing, decent garbage collection, a lack of value/reference handling, etc., and frankly being more procedural than functional is an asset to a below-average programmer.

    Code density is not the criterion most mid-level enterprise IT managers need to deal with. Even with a complex project and a team, you can take one guy and have him write the JNI bits in C++ for performance (BTDTGTTS) while the rest of the team handles other parts and they don't have to know as much. It's actually really bad economics to have all top-notch programmers on your team if your project does not require that.

    And before all you kids who got trophies for losing a soccer game get into a snit - by mathematical definition, half of all programmers are below-average.

    And Java works pretty well for them, and there are stable and scalable deployment platforms for their code. Expect the "cool kids" to be wondering about Java in 2024 - even if there were a better replacement available today (there isn't), the extant code bases would not get replaced in one decade.

  • by zieroh ( 307208 ) on Sunday August 24, 2014 @02:53PM (#47742813)

    I'm in the process of hiring software engineers right now, so I've been exposed to a lot of resumes and had the opportunity to talk to a lot of people on the phone (standard phone screen). Invariably, all recent CS graduates list C on their resume as one of their languages. One of the things I ask every candidate to do on the phone is to describe how C strings work. This is my "marker", the test of how much time they've spent in C (vs Java, or ObjC, or whatever). If you're a serious C programmer, you know how C strings work. No exceptions. If you've spent your entire time in college (or even professionally) programming within an environment where strings are handled by object abstraction, you've probably never had to deal with C strings directly. A suitable answer to the question is as simple as "A C string is an array of chars with a null termination at the end".

    You'd be surprised at how many people fail the screening process (and thus are rejected) based on this single question. Probably close to 75%, and every single one of them has a CS degree.

  • Re:I hope not (Score:3, Insightful)

    by Anonymous Coward on Sunday August 24, 2014 @03:28PM (#47743019)

    I wrote compilers for Modula-2 in University, and was minimally exposed to Java (thank God). I have seen fans of it, but my own experience is that Java is a narcoticized slug. Its bloated (worse than COBOL), and has a learning curve steeper than a cow's face. Worse, unlike C, which is a compact language (you can learn all of the data structures can be easily described in 2-3 pages of any textbook or manual), Java goes on and on and on (the smallest book I've seen is 850 pages). There are 10,000,000,000,000 libraries, with that number being modified every year, and offers by exponents of the language to offer another 3-5 libraries for every one available already. In order to be productive in any way (eg: Hello World), you need to call in at least half of all available libraries (each, seperately, and in the correct sequence), and then hope that all of your current libraries are up to date and work with each other. Then you run the program, and wait, and finally it gives you your output: "Hello World".

  • Re:I hope not (Score:4, Insightful)

    by Anonymous Coward on Sunday August 24, 2014 @03:32PM (#47743041)

    I wouldn't state that C# is superior to Java from a language perspective, both are essentially derived from Ada and C with influences from C++.

    Haven't used C# that much myself (and am totally out of touch with Java these days) but when I first used it just over ten years ago C# *did* strike me as very obviously a Java workalike, albeit one with a few nice improvements. Of course, it had quite obviously enjoyed the benefit of hindsight over Java, picking and choosing the aspects which worked and being able to ignore the dead-ends and mistakes, as well as the legacy library cruft which- even by the early-2000s- Java already had quite a lot of (mainly stuff from the early versions which was later deprecated).

  • by narcc ( 412956 ) on Sunday August 24, 2014 @03:35PM (#47743057) Journal

    Yeah, I'll agree with that. I think you're simply too dazzled by the "coolness" of python to see it's many, many, terrible warts.

  • by buddyglass ( 925859 ) on Sunday August 24, 2014 @03:54PM (#47743147)

    Java is moving into archaic irrelevance faster than ever.

    This seems like it should be quantifiable. That is, you seem to be saying that the rate of decrease in Java's popularity is at an all time high. The slope of its decline is steeper than its ever been, so to speak. Do the popularity metrics bear out that claim? After some cursory googling, the TIOBE rankings are the only one I could find online that has historical data. If you look at their chart [tiobe.com] it looks like Java's rate of decline in market share is approximately linear, with a fair amount of fluctuation. If you focus only on the period from April 2014 to August 2014 then the decline is indeed rather steep, but it's no steeper than, say, the period from February 2013 to July 2013. So while Java may indeed be waning (gradually) I'm calling B.S. on the claim that it's "moving into archaic irrelevance faster than ever".

  • What is cool? (Score:4, Insightful)

    by lophophore ( 4087 ) on Sunday August 24, 2014 @03:56PM (#47743165) Homepage

    What is cool? Programming isn't cool. Programmers aren't cool. Being a guitar player in a great band is probably cool. Being a chick magnet might be cool. When has being a Java dev gotten anybody laid?

    The only people who care about how "cool" a language is are posers. A professional developer is going to choose the tool that is going to let him/her build what he/she wants with the least fuss. For a lot of today's applications, that tool may well be Java.

    What's uncool is a skill that won't get you a job. Java can get you a job, help you buy a car, a house, live your life.

  • Re:I hope not (Score:5, Insightful)

    by Aighearach ( 97333 ) on Sunday August 24, 2014 @04:02PM (#47743199)

    Jeebus people, just open the story from 10 years and press "reload." There you go, you asked again and got the answers again.

    It might be that there are real pros and cons for languages. It might be that the reasons languages are "un-cool" are because they address the needs of the pointy-haired, and don't support pocket protectors.

    And it does make perfect sense for Java to be the 1 required language in a CS course; it might be the only way to get kids to learn it, since it is so un-cool, lame, and inefficient for the small projects that students are working on. In a well designed CS course, very few problems have a required language past the basic algorithms classes. (Where standardization allows for a higher quality class when the teachers are grad students)

    Anyways, it makes sense to teach Java, because the best use case for Java is to be able to use massive teams of low quality developers, potentially with high turnover, and still make working software. These are the people most in need of the job training type of education. People who are going to work in almost any other area are going to have to be able to learn new tools quickly based on the manuals, and it won't matter what they studied.

  • Re: I hope not (Score:5, Insightful)

    by Aighearach ( 97333 ) on Sunday August 24, 2014 @04:08PM (#47743229)

    You don't need an "OO... language" because OO is a methodology. You can learn pure, real OOP using almost any language. Plain C works fine.

    You can also write bad procedural code in an "OO language" because that is also a methodology. I see that crap all the time; giant 50+ line methods that do a bunch of things and all the utility functions are procedural-style class methods. Lots of Rubyists don't have any idea even what the difference between OOP and Procedural is, they just assume they must be doing OOP since they're using an "OO language."

    Same thing with learning scheme; when you associate functional programming with a language instead of a methodology, the first thing new people do is try to find a way to fake some state and they end up with spaghetti procedural instead of functional.

  • by Anonymous Coward on Sunday August 24, 2014 @04:08PM (#47743233)

    What do you mean by "cross-platform"? Java isn't available on iOS, it isn't really available on Android, OSX comes (used to come?) with outdated versions where a lot of Java programs don't run properly, Linux comes with OpenJDK which doesn't run quite a lot of Java programs either (try using the typical Java-based VPN solutions for example).
    It's "cross platform" only if your definition is "it's a huge pain and doesn't work properly on any platform without extensive workarounds", which is a step below e.g. C++ with Qt source code (empasis on source code though).

  • Re: I hope not (Score:4, Insightful)

    by WarJolt ( 990309 ) on Sunday August 24, 2014 @04:12PM (#47743261)

    You only need to learn one oo procedure based language. All others are just a book exercise.

    The problem with that is most people think because they can program in that language they understand the paradigm.

    There are tons of c++ and c# programmers out there who think object orientation is only about turning UI controls into objects. All other code is more of a mix of bad OO and imperative programming.

    I would revise your original statement to you only need to learn one oo language well. Same for functional languages. You are have to know a language well to understand the paradigm.

  • Re:Nope (Score:5, Insightful)

    by NotInHere ( 3654617 ) on Sunday August 24, 2014 @04:31PM (#47743381)

    All browser plugins are unmitigated disasters.

  • by Giant Electronic Bra ( 1229876 ) on Sunday August 24, 2014 @05:13PM (#47743595)

    Yeah, sorry, I maintain LARGE complex code bases. There's zero chance that's going to be easier using a loosely typed language with porous ideas of module boundaries, etc. I've been there, and a well-architected system built with a classic OO language like Java is just a lot more manageable. Also a lot of the advantages in brevity of things like Python or Perl evaporate when you try to apply some sanity to their use, but the disadvantages are still there to bite you. A 500 line Perl script is undoubtedly a LOT more compact and succinct than some java app built to do the same thing, which will be 2-3 thousand lines long probably. But when you start building well-designed class hierarchies in Perl? You're code will rapidly become just as large and verbose as its Java counterpart. Python and Ruby aren't better, in fact no scripting language will improve on this because all that stuff is NEEDED at scale. I'm an exceedingly accomplished Perl programmer and I can certainly code in other 'P languages' perfectly well, but they aren't the same thing. Each tool to its place.

  • by afgam28 ( 48611 ) on Sunday August 24, 2014 @06:34PM (#47743987)

    As mentioned in the summary this has been discussed a few times on Slashdot, and the original discussion was kicked off by Paul Graham's assertion that the cool hacker kids were into Python and the only people using Java were boring corporate types who had no passion for their jobs and were often mediocre programmers. In this sense, "coolness" does matter a little bit - if you're starting a new project, you don't want to choose a language where the labor pool that you're recruiting from is full of crappy programmers.

    And yes, I know good programmers can pick up new languages quickly. But it can take months or sometimes years to master all the libraries and frameworks around the language. Someone with relevant experience can hit the ground running and have a shorter ramp-up period than someone without. I'm not saying that this is more important than general coding ability - it's not - but this is valuable to a lot of smaller companies and startups who don't have lots of time to train up new hires.

    What makes Java uncool isn't so much the language itself, but rather the community around it. I actually like Java as a language better than Python, but there's a real culture of overengineering in the Java community, and people there really value convoluted architectures that are (ostensibly) maintainable and extensible. In the Python community, people value simplicity and hackability, and you can see it when you do things like file I/O or compare popular frameworks from both languages.

    Not directly related to Java, but a while ago the tech lead for OAuth 2.0 resigned citing cultural differences [hueniverse.com] between the "web" and "enterprise" communities. The "cool" languages are definitely the ones that are favoured by the web community, and the uncool ones favoured by the enterprise community.

    So as much as people might think that it's just language syntax, it's not - it's also about communities, culture and different ways of thinking.

  • Re:I hope not (Score:4, Insightful)

    by Wootery ( 1087023 ) on Sunday August 24, 2014 @09:08PM (#47744725)

    C# never enjoyed that confidence, which is why there's precious little C# work done on the non-Windows OS's.

    Well, let's be clear: it's not just because Sun had more goodwill than Microsoft.

    For a start, Sun made JVMs for all major platforms. Microsoft made .Net for Windows only. They made Silverlight for Windows and Mac, granted, but never even a nod to Linux. Mono had to make its own way.

  • Re:I hope not (Score:5, Insightful)

    by Wootery ( 1087023 ) on Sunday August 24, 2014 @09:11PM (#47744739)

    Oh, and that in Java, the 'culture' is to deliberately avoid anything non-standard or specific to any JVM. In the C# world, though, there are things like WinForms [wikipedia.org]: vital parts of the 'ecosystem' which are platform-specific and non-standard.

  • Re: I hope not (Score:2, Insightful)

    by Wootery ( 1087023 ) on Sunday August 24, 2014 @09:18PM (#47744783)

    You only need to learn one oo procedure based language. All others are just a book exercise.

    I guess C++ doesn't count as an 'OO language', then, because you sure as hell can't take a Java programmer and turn them into a competent C++ programmer overnight.

    This whole idea of programming languages share the same basic concepts, so once you can program in one language, it's easy to learn new languages needs to die. You cannot take a Java or PHP programmer and have them learn to make proper use of C++, or Lisp, or Haskell, or assembler, or even C, without considerable effort. Even just the compile/link model of C takes some real work to get used to.

  • Re:Nope (Score:5, Insightful)

    by Pseudonym ( 62607 ) on Monday August 25, 2014 @12:00AM (#47745395)

    Almost. It was designed for running untrusted code delivered via the network to set top boxes and consumer electronics. There are many things that can be said about this, and how well it translated into the world of the web, but consider what Java gave us.

    The JVM is a clean bytecode virtual machine, which can be implemented in hardware and reasonably compiled to native machine code. An implementation can statically verify that the code will not misbehave in certain ways. It scales on platforms varying in size from a 1990s-era smart card to a modern cluster.

    It gave us the first garbage collected language that the commercial world could handle. It gave us the first programming language which the open source world took seriously and wasn't C. It sparked a new world of research into previously neglected areas, such as JIT compilation, concurrent garbage collection, and so on. It gave us the notion of an "app" and an idea of apps could achieve in the Internet era.

    Java may never have been cool, but it deserves an honoured place in the history of computer science and software engineering.

  • Sun's slogan for Java used to be, "Write once, run anywhere." Remember that? Sun didn't make JVMs for many platforms, and didn't even have an official JVM for GNU/Linux for ages. Add to that the fact that each major version of the JVM deprecated features and introduced incompatible ways to do things previously done other ways, and it's no wonder it has become the case that we (meaning IT folks) have to keep around an older (perhaps virtual) machine which has an older and certainly insecure JVM to talk to some hardware device or application which requires older Java. Qlogic switches come to mind.

    Since the JVM isn't portable, Java isn't portable. Since software written for one JVM version can't necessarily run on another version, it's not very backwards compatible. Since it has so many security issues, you either have to hope that whoever makes your JVM keeps it up to date or that you're very careful about how it's deployed.

    I can't personally think of anything more precarious than trying to deploy real software using Java.

  • by julesh ( 229690 ) on Monday August 25, 2014 @02:42AM (#47745829)

    Java isn't available on iOS

    Yes, it is. [robovm.org]

    it isn't really available on Android

    Bullshit. Android's implementation may not be completely up-to-date, but it is absolutely a version of Java. Only trademark and licensing issues prevent Google from claiming that it is.

    OSX comes (used to come?) with outdated versions where a lot of Java programs don't run properly

    Who cares what version is installed by default? OSX can be upgraded to the latest version, and any application that needs it ought to provide an installation package that does precisely that, or at least clear instructions to the user on how to do it.

    Linux comes with OpenJDK which doesn't run quite a lot of Java programs either

    As of version 8, OpenJDK is the reference implementation. Any Java program that doesn't run on OpenJDK is not a conforming pure Java application. Besides, it is perfectly possible to install Oracle Java on a Linux system if you prefer it. Depending on your distribution, it may be as simple as a single command, or you may need to add an update source first (which turns it into 3 commands on Ubuntu, for instance).

    It's "cross platform" only if your definition is "it's a huge pain and doesn't work properly on any platform without extensive workarounds"

    I'd hardly call any of these "extensive workarounds". Yes, you may have to refrain from using the latest APIs if you want to target certain platforms. Or you may have to have the end user install an upgrade to their preinstalled Java system. Neither of these is actually that hard.

  • by julesh ( 229690 ) on Monday August 25, 2014 @02:45AM (#47745837)

    If you're done everything on Sun Java 1.5, and suddenly Oracle changes it to "Oracle Java" 1.6, you're SOL.

    ??? I've been writing Java applications since 1.1 was the current version, and I've never had one stop working with a version update.

    The only experience I've had with such failures are 3rd party applications where the developer has used the deprecated com.sun.* APIs. The guidelines on using these have been quite clear from the very beginning, though: don't, unless you want to create compatibility problems for your users.

Always draw your curves, then plot your reading.

Working...