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

 



Forgot your password?
typodupeerror
Java Programming

How Java Changed Programming Forever 382

snydeq writes: With Java hitting its 20th anniversary this week, Elliotte Rusty Harold discusses how the language changed the art and business of programming, turning on a generation of coders. Infoworld reports: "Java's core strength was that it was built to be a practical tool for getting work done. It popularized good ideas from earlier languages by repackaging them in a format that was familiar to the average C coder, though (unlike C++ and Objective-C) Java was not a strict superset of C. Indeed it was precisely this willingness to not only add but also remove features that made Java so much simpler and easier to learn than other object-oriented C descendants."
This discussion has been archived. No new comments can be posted.

How Java Changed Programming Forever

Comments Filter:
  • Plant? (Score:5, Interesting)

    by Anonymous Coward on Friday May 22, 2015 @08:16AM (#49749729)

    Why does it feel like Oracle is advertising Java with these stories...

    • Re:Plant? (Score:4, Interesting)

      by jellomizer ( 103300 ) on Friday May 22, 2015 @08:34AM (#49749817)

      Well Oracle killing off Java was one of the biggest fear after it acquired Sun Microsystems. MySql was open sourced so it could fork like it had. VirtualBox we more or less kinda allowed it to die. Star err Open err LibreOffice had forked so many times that people probably forgot the Sun Acquired it as StarWriter. The Sun Servers Sparc based were declining in popularity.

      But Java was the important thing we couldn't let die. And it isn't open source so the community couldn't steal it away from oracle.

      • by Anonymous Coward

        VirtualBox is far from dead.

        • Re: (Score:3, Funny)

          VirtualBox is far from dead.

          It is everytime I upgrade the kernel.

        • Re:Plant? (Score:5, Informative)

          by DickBreath ( 207180 ) on Friday May 22, 2015 @09:13AM (#49750029) Homepage
          VirtualBox keeps getting updated regularly. A new VirtualBox 5 is in beta even as version 4 upgrades come out regularly.
          • VirtualBox keeps getting updated regularly. A new VirtualBox 5 is in beta even as version 4 upgrades come out regularly.

            Don't worry; eventually they'll get it right, and then, like Mozilla, after it was finally able to be compiled and (limingly) run out side of company walls, it will be not dead again.

      • Re:Plant? (Score:5, Informative)

        by peppepz ( 1311345 ) on Friday May 22, 2015 @08:47AM (#49749897)
        The JDK had already been released under the GPL by Sun before the Oracle acquisition.
      • Re:Plant? (Score:5, Informative)

        by gstoddart ( 321705 ) on Friday May 22, 2015 @09:40AM (#49750249) Homepage

        VirtualBox we more or less kinda allowed it to die

        Ummm ... what the hell are you talking about? I use it daily, I get updates for it regularly, and it's anything but dead.

        VirtualBox is alive and well.

        • While true, features have become a little stagnant compared to VMware. Also, speed is also inferior as well.

          Let's hope version 5 makes Virtualbox a contender again

      • by Kunta Kinte ( 323399 ) on Friday May 22, 2015 @10:50AM (#49751013) Journal

        But Java was the important thing we couldn't let die. And it isn't open source so the community couldn't steal it away from oracle.

        Java is fully open-sourced and the most open-sourced programming language I know. OpenJDK [java.net] is the same source code Oracle uses for its JDK. It's easy to download and compile all Java executables. Here is a guide [gitbooks.io] and a Youtube video [youtube.com] detailing how to build the JDK.

        Java is defined and updated by the JSR [jcp.org] process, which resembles RFCs. And also by the JEP [java.net] process which tells you exactly what's being built into Java and when. You can also use their bugtrackers and mailing lists to track Oracle engineers' work.

        I've learnt a ton just by tracking those lists.

        • by Bengie ( 1121981 )
          Until Java tries to sue you, like they did Android.
  • 20 Years of write once and test everywhere! And now thanks to Android there are over 18000 distict Andoid platforms to test on too!! http://thenextweb.com/mobile/2... [thenextweb.com]

    I for one salute out software testing overlords :|

  • by aglider ( 2435074 ) on Friday May 22, 2015 @08:21AM (#49749759) Homepage
    While Objective C is. You insensitive programming clod.
  • Maybe it's the applications. As you note, we have proved, time and time again, that in contrived scenarios Java code can meet or even beat the performance of so-called "performant" languages like C, C++, Lisp, VB6, or JavaScript. And when presented with such evidence, most sane, open-minded opponents will hang their heads in shame and promise never again to spread such slander.

    ...but then, they fire up Eclipse, or NetBeans, or Guiffy, or enable the Java support in their browser, or try to run an app on their favorite feature phone. And they wait for it to become responsive...

    ...and wait...

    ...and wait...



    ...and wait...







    ...and wait...













    ...and...






    ...what did I promise never to do again? Sorry, must have dozed off...
    • On a slightly more serious sidenote, it's easy to see Java's popularity dropping, since Google seems to be dumping java for high performance javascript/dart development, as they have already been announcing for Android.
      http://arstechnica.com/civis/v... [arstechnica.com]

      Linus has actually stated it in a way that is frequently seen as toxic. But, while C++ is one of my favourite programming languages, certain language features tend indeed to "rotten" people's brains, just like pre-GIT CVS+derivatives did to source control habits. And I find that Java is actually the perfect representative of that nowadays, not C++ (and even Linus is now commiting patches in C++) I don't know what you guys people but when I have to traverse a tree of 10 folders, and files have 10 lines and exist only for a single abstraction's sake, I kinda feel OOP, though a powerful tool, has been overused. When everything has to be an object just for a paradigm's sake, things can get kinda distorted. One of the greatest programming innovations is, in my opinion, MVC (or even MVVC stuff like Angular) is one of the greatest things that have been getting popular lately. By separating logic from models and views people are encouraged not to create stupid abstractions and use procedural programming where it is adequate and avoid performance losses.

      (proof that torvalds actually uses C++ if anyone hasn't seen that: https://github.com/torvalds/su... [github.com])
      • by Luthair ( 847766 )
        I take it you haven't worked on a large scale software project? Abstraction exists for code re-use and to make parts pluggable, both of which are critical in reliable enterprise software.
    • by bws111 ( 1216812 )

      C is slower than shit too, if you launch a new VM every time you want to run a program. Of course in the real world nobody does that, just like, outside of desktop apps, nobody starts a new JVM every time they run some Java code.

    • Java code can meet or even beat the performance of so-called "performant" languages like C, C++, Lisp, VB6, or JavaScript.

      Since when are VB6 and JavaScript "performant" languages? I can't think of anything slower than JavaScript.

    • ...but then, they fire up Eclipse, or NetBeans, or Guiffy, or enable the Java support in their browser, or try to run an app on their favorite feature phone. And they wait for it to become responsive... ...and wait...

      Would be funny if it where true, but Netbeans on my computer loads faster than Visual Studio. And both runs equally as fast.

  • Forever is a bold claim. What about after the apocalypse? What about Planet of the Apes?

    Are we making the Java manuals out of IBM keyboards or something?

    • by fermion ( 181285 )
      Also think about Pascal. It too changed programming as it let a new generation of not very good coders generate applications. Who does Pascal now?

      Not sure if Java is better or worse than Pascal. A similarity is that part of it's popularity is that it is a teaching language, perhaps more than a production language.

      • Pascal, unlike Java, was not self-contained. The primary examples being functions like println. More importantly, it wasn't object-oriented (although some OO variants were experimented with). And like it or loathe it, when you have a really large project, having stuff compartmentalized into predictable objects has some major selling points.

      • In ways that affect most programmers, for most everyday purposes, Java is an advance over Pascal just as Pascal was an advance over earlier languages. Just as Pascal gave you new powerful tools (structured programming without GOTO, data structures, strong typing, recursion, etc), Java gives you more new tools (objects, inheritance, polymorphism, garbage collection, a very large standard library, object code portability across platforms), later on the JVM brought portable source level debugging, dynamic pro
  • The Betrayal (Score:3, Insightful)

    by tylikcat ( 1578365 ) on Friday May 22, 2015 @08:32AM (#49749809)

    "...turning on a generation of coders."

    I'm glad to hear someone finally having the courage to admit this. Especially considering how widely it has been adopted as an instructional language and how many young people were betrayed by their institutions and communities at the very start of their programming careers.

    But I'd also like to hear more from the many people who've risen above these challenges and gone on to become developers even so. It may be hard. It may be traumatic. But it's good to remember that it's possible to rise above it.

    • by Dunbal ( 464142 ) *

      and how many young people were betrayed by their institutions and communities at the very start of their programming careers.

      That knowledge of Pascal will last you a lifetime son.

      • Re:The Betrayal (Score:4, Interesting)

        by tylikcat ( 1578365 ) on Friday May 22, 2015 @08:56AM (#49749947)

        *grin* I weirdly managed to completely miss Pascal. Cut my teeth on Fortran* because it was what my father's grad students were using - though I then picked up Modula2, out of a book written in German, which I didn't speak because my father was convinced it was the Next Big Thing and figured if I learned it I could teach him (thanks, Dad). My undergrad institution was all about Ada ridiculously late, though... Picked up C++ at the beginning of my professional life, back in the mid-nineties, though these days I use more Python than anything else. I've written my share of Java. It wasn't horrible, I was more amazed that it kept being kind of subliminally annoying without being downright awful.

        * Which keeps still being relevant - okay, I'm in the sciences now - though I often deny knowing it. I think I took it off my resume in '96.

  • by Anonymous Coward on Friday May 22, 2015 @08:38AM (#49749837)

    Yeah. When I saw in which direction Java was going, I thought to me: "thanks, I've had COBOL once, Don't need a second serving"

  • by Anonymous Coward on Friday May 22, 2015 @08:41AM (#49749855)

    I don't have any philosophical issues with Java, but the "simplicity" of it has led to software vendors thinking they can hire simple people to write mission-critical software, with terrible results.

    At work, we have several pieces of server software written in Java, and they are just awful. The RSA server, an auth server from Cisco, and others. They crash when the wind blows the wrong way. They bloat and need to be restarted every few months. One executable starts multiple network services on multiple ports. They rely on using dozens of threads with dozens of queues, and there is no way to inspect them. Logs show high volumes of Java call traces and error messages, even when the software is running fine. Sometimes components just stop working, we call the vendor, and the vendor instructs us to restart and/or reboot.

    With the RSA server, we had a massive outage one time because an admin kicked off a few reports. It turns out the reports hung a few threads, and took down the service for the whole enterprise.

    The Cisco server has the same problems: dozens (hundreds?) of threads with dozens of queues, and the synchronization among the threads just doesn't work 10-20% of the time.

    It's not just these servers. In a previous role, we had some Java middleware that translated DIAMETER RADIUS in a service provider setting, and that was it. That software blew up every month or two, and we had to fail the service open for all our customers.

    Terrible, flaky, unreliable software. Again, I think it's probably not the language, it's the shitty, shitty programmers.

    But, hey, it's job security for me!

    • by DickBreath ( 207180 ) on Friday May 22, 2015 @09:48AM (#49750343) Homepage
      Don't blame Java for that. It is the fault of many managers. They want cheap, interchangeable droids to build their applications. Run them hard, burn them out, throw them away like a used spark plug. They're cheap to replace. So those managers want a language all these droids understand. So not only do you get experts, but hoards of below average drones who's main skill is interviewing and taking certification exams. (aka 'certified idiots')

      Any programming language could have stumbled into that phenomena. It just happened to be Java. That doesn't make Java itself bad. If anything, the huge community of wealthy enterprise Java users has benefited the Java ecosystem tremendously.

      The platform itself has its major strengths. For just one example, in 2012, Twitter switched from Ruby to Java because Java could scale. You need major scalability when you handle a billion tweets per day and must route each of them to many destinations and platforms. It doesn't matter how much cpu / memory the platform uses, it matters that you can scale it linearly by just adding more boxes. Java already has a lot of ecosystem and infrastructure that enables that kind of scalability. You can google for twitter's 2012 switch from Ruby to Java, and they also have (last time I looked a year or so ago) a lengthy YouTube video presentation discussing the benefits of the change after the fact.
      • by steelfood ( 895457 ) on Friday May 22, 2015 @11:46AM (#49751629)

        Any programming language could have stumbled into that phenomena. It just happened to be Java.

        If you threw a bunch of shitty programmers at something simple but low-level like C or complicated but high level like Haskell, these same programmers would turn out software that would completely fail to work. Java, by protecting the programmer from the internals of a system (memory management, pointer vs. value etc.), yet still being simple to write in, lowered the bar significantly for entry into programming as a profession. Anybody can write in Java because it's procedural and easy to think in, and most of the heavy lifting is done for them and it's a matter of stringing together the right libraries.

        You're right that it could've been another language besides Java, but said language would've had to have had the same intrinsic qualities as Java. I guess it could be worse and the defacto industry standard language could've gone to C#.

        It's both good and bad. As programmers, it makes our day-to-day job of writing and maintaining software easier. It also makes being a programmer easier, which is bad because shitty programmers will turn out shitty software, and will do it for cheap. It devalues our profession precisely because managers know they can hire shitty programmers that will churn out a working product. And by the time any maintenance is needed on it, neither they nor the original programmers would be around to deal with the mess, so it doesn't matter.

    • Crap programmers are cheap and plentiful and until customers demand the same levels of reliability from software that we routinely expect from hardware, crap software is what we're going to get and the software vendors are going to laugh at us all the way to the bank.

      You can program crap in any language, of course, but better Java than a late-binding scripting language. At least in Java a certain percentage of the bugs get winnowed out at compile time. Which is why scripting languages are the "in" thing. If

  • I've tried to get into Java on multiple occasions. Each time, I get thrown back by the amount of boilerplate necessary, and by missing features.

    - No operator overloading. As a result, every container type is accessed differently. Arrays use []. Lists use At(). Hashmaps use Get(). Matrices, vectors, and complex numbers are absurdly verbose, because I cannot overload addition and multiplication.
    - Type erasure for generics. As a result, I cannot define different function overloads for func(List) and
    • by peppepz ( 1311345 ) on Friday May 22, 2015 @09:19AM (#49750075)
      The basic idea is that in Java programs, you can understand what's going on by looking at a fragment of code. Therefore the code is easy to read and to maintain. With syntactic sugar such as properties, operator overload and closures, you can't know which statements will cause side effects without inspecting upstream definitions.

      Type erasure, on the other hand, is pure evil - to me, it's the representation of what happens when a pragmatic language ends up into the hands of computer scientists.

      By the way, in Java all lists have the get() method with no exceptions (this includes Lists, HashMaps, Vectors) and all collections have the iterator() method with no exceptions. The At() method doesn't exist.

      • Yeah my Java days are long behind me now, but the Collections framework is a thing of beauty. It's one of the first things that always comes to mind when thinking of a really well designed API.

    • For each one of you wanting operator overloading, there are 1000 other programmers dealing with large legacy codebases, happy Java DO NOT support operator overloading, functions outside classes, classes placed in different directory then they supposed to be, generics to the point of Obfuscated Code Contest everywhere, all the time.
    • While operator overloading can be used for good, it is far more often used to create huge messes. It makes the simplest expressions impossible to understand locally because now, everywhere there is an operator, you cannot be sure what is actually going on. IMO, operator overloading is evil, despite the good intentions.

      I hear you about type erasure for generics.

      Lambda statements in Java are a recent addition. But I hear you about first class functions. There are a lot of other languages that run on
    • - No operator overloading. As a result, every container type is accessed differently. Arrays use []. Lists use At(). Hashmaps use Get(). Matrices, vectors, and complex numbers are absurdly verbose, because I cannot overload addition and multiplication.

      Arrays are rarely used in Java these days. All the collections API (Bloch's work on this has made it one of the few elegant parts of Java) use .get(), which is perfectly reasonable. If you're doing extensive work with matrices, vectors, etc. then Java is not an ideal choice of language, but 95% of programming tasks don't need it. Java isn't aimed at developing low-level game engines or scientific modelling.

      - Type erasure for generics. As a result, I cannot define different function overloads for func(List) and func(List).

      At least Java has generics. Unlike some other popular languages I could name... type erasure is a genu

  • by jeffb (2.718) ( 1189693 ) on Friday May 22, 2015 @09:10AM (#49750003)

    But maybe I don't want a language that turns on me.

  • by pauljlucas ( 529435 ) on Friday May 22, 2015 @09:11AM (#49750013) Homepage Journal
    According to Joel [joelonsoftware.com], Java isn't hard enough to weed out mediocre programmers in college. (Great programmers can use any language well.)
    • by H0p313ss ( 811249 ) on Friday May 22, 2015 @09:22AM (#49750097)

      Despite Java being my bread and butter for a decade this is hard to disagree with, I've met lots of professional java "programmers" who don't understand the JVM at all. (And don't even get me started on system administrators for enterprise systems... Seriously you're admin of a linux box and you don't know what top is and you're uncomfortable at the command line? Really?)

      Even worse is the student world, just dip into the Java question stream on StackOverflow. 50% of the questions any first-year student C.S. would laugh at.

    • by prefec2 ( 875483 )

      You can get through university without learning any programming language. Java should allow students to learn OOP and functional programming, and all those nice pattern relevant for good coding. However, they don't because they do not practice. When other languages where taught things where not much different with one exception, in the past most people entering the university to study computer science already knew some languages, like basic, pascal, assembler etc. Nowadays many student can (if anything) HTM

    • Has it occured to you employers look at this as an advantage?

      Phb bosses want deliverables, etas, lower costs, etc. Not bugs.

  • by MikeRT ( 947531 ) on Friday May 22, 2015 @09:12AM (#49750021)

    In the years I've done Java development, the only times I've never had a problem building on Windows or OS X and deploying to Solaris or Linux was when someone used hard-coded paths or didn't make the program's deployment properly configurable for deployment to the target OS. Write once, run anywhere is more or less true with Java.

  • by Marginal Coward ( 3557951 ) on Friday May 22, 2015 @09:24AM (#49750115)

    I was struck by the statement that Java "changed the art and business of programming." While that's certainly true as a general statement, it hasn't been true for me personally. I've lived my recent adult programming life with a combination of C, C++, Python, and Matlab. I haven't so far had a need for Java because one of those languages does anything I need to do better than Java.

    I've studied Java (and C#) a little, and have generally been interested and see some value there. But I have never actually had an explicit need for Java, so I never stuck with it long enough to become proficient in it. In particular, mastering Java's libraries is a daunting task. So, if I can live my life without it, I wonder how much worse off the rest of the world would be if it had never been invented?

  • by ThePhilips ( 752041 ) on Friday May 22, 2015 @09:25AM (#49750117) Homepage Journal

    Java's core strength was that it was built to be a practical tool for getting work done.

    If only.

    I have abandoned Java shortly after Java 2 SDK release precisely because it was NOT anywhere near being a "practical tool for getting work done." Later encounters over the years only reinforced my opinion.

    As one Java developer described it, comparing Java to Python at task of using the proverbial "wheel" in your program. In Python, if you need the "wheel", you just "import wheel" and use it. Java too provides you with everything necessary: "import map.ore.iron", "import tools.pickaxe", "import fire.matches", plus a 3rd party class "recipe.smelt" and a measly 1-2K LOC - and voila! you have the "class Wheel" in Java too!

  • by msobkow ( 48369 ) on Friday May 22, 2015 @09:30AM (#49750165) Homepage Journal

    No language is inherently good or evil in and of itself (save for PHP, which is evil incarnate.)

    It is simply a tool for expressing logic. A means of structuring data.

    Some are elegant for certain classes of problems, some are abused to fit problem sets they aren't suited for.

    The sole benefit of Java to me is it's portability for core logic, even though I know that once you're dealing with user interfaces and heavy duty multi-threading, there are "write once, test everywhere" problems with the language.

    Java isn't even predictable on my Linux box. It randomly crashes for no apparent reason while running code that has run cleanly thousands upon thousands of times in the past. Yet after years and years of successful runs of my pet project (http://msscodefactory.sourceforge.net/ [sourceforge.net]), I had Java 7 on Ubuntu crash a couple weeks ago during a run. The compiler itself crashes on a regular basis; several times per week.

    As to why all the Java articles lately? Oracle's "Java World" conference is coming up, so it's time to beat the drums, sacrifice the sheep, and burn the entrails on the altar of the language. The high priests are out in droves preaching the gospel.

  • by should_be_linear ( 779431 ) on Friday May 22, 2015 @09:43AM (#49750283)
    Also, one of the main double-plus-good stuff in Java is concept of packages and jars. Anyone dealing with header files and libs (not to mention issues when libs are created by different compilers on different platforms) will know what I am talking about. If C++ in next iteration copy this concept and ditch header files, it will be greatest improvement in C++ ever.
  • by iamacat ( 583406 ) on Friday May 22, 2015 @09:58AM (#49750469)

    Latency and unpredictability of garbage collection is a severe problem for any UI, and even web/database backends. Your Cassandra node can run fine for a week and then fragment its heap and go into 20 second stop the world GC, causing user requests to time out. Silly things like allocating large byte arrays and dolling out offsets and length for individual uses are done to avoid big GC pauses. It still doesn't always work, because there are a lot of VM versions and user access patterns shift over time.

    For all that, memory leaks are no less common than in C++ and non-memory resource leaks are horrendous. In C++, your object's destructor is cleanly called when the object is deleted or goes out of scope. That will take care of also calling destructors on anything encapsulated, which can then close files and unregister listeners. In Java, the while 100MB object hierarchy will be still consuming heap because some leaf node's close method was not called and it's a button click listener with an indirect link back to root.

    A grown up language can support stack based and encapsulated object instances that don't have to be GCed and have predictable destruction time. Large and provably acyclical objects like bitmaps can also be reference counting. In practice, GC pauses are no better than crashes, so in real life even unsafe explicit delete makes sense in many cases.

  • by tlambert ( 566799 ) on Friday May 22, 2015 @10:09AM (#49750609)

    The absolute #1 contribution of Java: it has allowed colleges and universities to turn out a generation of coders who are incapable of dealing with pointers, explicit memory management, stack layout, static memory maps, etc., etc..

    In other words: a crapload of people with "Computer Science" degrees who could not write an OS or even a trivial part, like the C library signal trampoline, to save their ass, because they are in this walled garden/protected environment where they are "safe" from having to actually deal with real hardware.

    Ironically, all of their JVMs on which they are normally running this code are not written in Java, because it's not really practical to do that.

    • who could not write an OS or even a trivial part, like the C library signal trampoline, to save their ass, because they are in this walled garden/protected environment where they are "safe" from having to actually deal with real hardware.

      so you say that java creates an environment where you can hire developers that don't have MIT master's degrees and you can expect them to be able to do useful work?

  • by Sarusa ( 104047 ) on Friday May 22, 2015 @02:26PM (#49753223)

    Its greatest achievement was to be a C-like language in which legions of mediocre corporate coders can work on the same codebase without hurting each other too badly. This lets you replace COBOL.

    Then the whole bytecode on a virtual machine thing, which while it had been done before (UCSD Pascal), Java's VM really made practical. People complain about Java's slowness, but the VM is really quite speedy (and the sandboxing is amazing). You can write high frame rate FPSes in it (Quake!). It's usually bad coders and bad frameworks that cripple performance. And without the JVM we probably wouldn't have .NET, Mono, and the CIL. Certainly not as good - it really helps to have done a previous version.

PURGE COMPLETE.

Working...