Thank you for this.
Nothing more to say, just, "Thank you".
Java is horrible and I hate it. Good, now there's a strong intro: attention grabbing, and it gets the natives all riled up. Sadly, the extremist sentiment of my statement is not that far from the truth. Hating or loving a logical construction such as a programming language is irrational, illogical and otherwise nonsensical. As …
"I wrote a few crappy programs in Java that could do some basic things. After a year or so of this I then decided that I'd much rather do anything else other than be a developer for a living."
Yeah, so is Trevor even writing about this?
Next article: "I hate X not because there's anything inherently wrong with the X, but because of a decade's worth of people who still haven't figured out how to use it as designed."
Ok, so you hate Java. That's fine, but you don't then tell us what it is that you love. FAIL.
The problem isn't the language, it's the people doing the programming and deployment. Worrying about library/runtime versions is just part of the business and happens with every programming language I've worked with. I have to say that Java was no better or worse than the others in that respect.
I never said Python was the best; I lack the diversity of experience to reliably choose a "best" language. Of the dozen or so that I, personally code in - including Java - Python is the one I enjoy coding in. Mostly because I enjoy the diversity of use cases for the code. It compiles - so I don't need an interpreter - and yet I can also use it as web scripts, shell scripts, etc.
It is a simple language that is easy to learn, code in a maintainable fashion and addresses all of the use cases I run across on a regular basis.
It isn't "the best," but it is my favourite.
"Whitespace as syntax? "
I really like python as a language and given that its done a good job of taking over perls former niche of general purpose unix scripting language I'm not alone.
However.... I must agree that the forced indentation is a REALLY poor design decision. I know why Guido did it - to force a common format on everyones code. But what it has resulted in is people accidentally deleting some whitespace (easy if some idiot has only used 1 or 2 spaces) moving an end of block line outside of the block it was in but leaving a program that still apparently runs but now has a potentially serious bug. Also it makes it harder to spot the ends of intermediate blocks when looking at code.
Its not just Makefiles - Occam suffered from it to. Some lessons are never learnt.
However.... I must agree that the forced indentation is a REALLY poor design decision. I know why Guido did it - to force a common format on everyones code. But what it has resulted in is people accidentally deleting some whitespace (easy if some idiot has only used 1 or 2 spaces) moving an end of block line outside of the block it was in but leaving a program that still apparently runs but now has a potentially serious bug.
But it's just as easy to make mistakes with curly brackets or the dangling "else" in C or similar languages! And worse, you don't know where you should be looking for the bug. The curly brackets may not be where you expect them in your coding style. If it's an editor flub, they may not be where anyone expects them in any widely used coding style.
I didn't like Python indentation-as-syntax when I first met it. The dislike lasted for a few hours, acceptance lasted the next couple of days, and then it blossomed into love.
"But it's just as easy to make mistakes with curly brackets "
No it isn't. You delete a curly bracket from a C/C++ program and it won't compile (unless you've accidentaly inserted another elsewhere - and how likely is that?). With python you can accidentaly delete whitespace and quite often the script will still run. Except now it has a bug you don't know about and wasn't there before.
I'm sorry , but indentation as block qualifiers is a VERY bad idea.
One of the nicest things about curly braces for control in your code is that you can pretty print it automatically. Python is virtually impossible to refactor without extreme pain. For example, if I have a block of similar code at a couple of different places in a function and want to extract it in to another function, when I move the code I have to painstakingly make sure I get the indentation right. In C++ I can move the code and ask the editor to fix it (eg ctrl+meta+\ in emacs). If I've made a mistake in the process, the indentation will look off.
Personally, if I wanted to make whitespace a requirement in a language I would have whitespace AND control characters. I would be totally fine with a C++ or C compiler having a strict mode that failed on a syntax error if your indentation was inconsistent with the curly braces. That would have been the way I would have enforced whitespace requirements in Python.
On the other hand, as a rapid prototyping language it can be excellent. And I hate Python less than I hate Java (for all the reasons the article author said). For me, Java has failed the write once run anywhere maxim, but in trying to allow that it has crippled itself everywhere. I totally understand the reason why a lot of companies want to use a garbage collected language for general compute. Personally, I love C++ and if I'm going to write in a garbage collected language, I would probably pick C# ahead of Java. Unfortunately, I find both C# and Java limit me so much in the space of generic programming that I get frustrated with them.
The way python wants indentation done these days is just fine. The requirement in python is that your indentation is consistent. That is all. Originally python had a mandatory indentation style, but that is no longer true. And if you don't think consistent indentation of your code blocks should be mandatory, then you shouldn't be programming at all. Pick anything you want for indentation, but always use that within a given file.
If you want scary use of whitespace as syntax, have a look at perl. That's scary. <$foo> is not the same as <$foo >
If I had a penny for every time a Python fanboi criticized Perl when the conversation did not even involve it, I could retire :-)
In your example, the Perl scalar variable $foo is the same in both places, buy you just added an empty space after the second instance. What was your point actually?
I enjoy coding in Python too. Just wish it made it feasible to ship desktop apps built with it. WxPython was close to good enough for the GUI but the wrapping process was intensely painful (caveat, I haven't bothered looking for improvement in the last few years).
Exactly and I'll get hate for saying this but this reminds of all the hate VB 6 got. If you kept VB 6 targeted at its main purpose, writing front ends to local DBs then it was a perfect tool, in fact I've yet to see anything that ran as fast and used as little memory in that role.
The problem with it (and Java) is too many that didn't know what they were doing tried to use it for everything and made these big sprawling messes.
So its not the tool, its the programmer. I mean if you use a hammer wisely you can use it as part of a toolkit that will help you build a lovely home. if on the other hand you hand it to a chimp and let him loose in a bomb factory, should you blame the hammer when the whole place goes up?
the problem is the language, it's grown to be huge and far to complex with far far far to many bits to it. to a non java person it's practically impossible to trouble shoot. Yes runtime versions can be an issue but it seems to be a particular problem with java. I rarely have these sorts of problems with C and to a lesser effect in python
'Nothing more to say, just, "Thank you".'
I have to agree.
'Write once, run anywhere' was a ridiculous idea from the start. Instead of being all things to all platforms at all times as intended, it ended up as the software analogue of the adjustable spanner.
The only thing they're any good for is bashing people over the head with and even then there are other blunt instruments which are far better suited to the task.
I've see Python mentioned as an alternative but that suffers from the same disease. They both aim for universal portability without changes and there are a plethora of versions all in use concurrently.
In addition, Python also has another significant problem - the use of indentation level for block demarcation.
God only knows what the hell Guido van Rossum was smoking when he came up with *that* idea...
I certainly don't buy 'readability' for an instant. That sounds like an after the fact excuse rather than a conscious design decision.
There's a very good reason why C/C++ are so ubiquitous - A 'native' compiler suite and standard library specifically tailored to the target platform.
" 'Write once, run anywhere' was a ridiculous idea from the start. "
Indeed, I think these sorts of claims are one of the great myths of our times. I got bitten with the "portability" of C and learned quickly that not all ints are alike, and anything remotely OS-involving (which, let's face it, is pretty much anything beyond the remit of the standard libraries) is going to be "interesting" to program in such a way as to remain portable. It isn't impossible, but you have to be careful not to make too many system-specific assumptions.
Likewise, set your user agent string on Firefox to fake being the Android browser, and watch heaps of stuff fail (Google Maps, Google Groups, Flickr, Facebook, etc etc). Too many differences in the scripting.
You see, universal languages... there's the shiny theory and there's the dingy reality, the two are very much different.
I cannot see why indentation is harder to deal with than f.ex. squiggly-braces or ';'?
To me, C++ code looks like that pair of used knickers my dog ate and shat out three days later under great duress! Not something one wants to get involved with, even from a safe distance downwind.
Totally agree. Spring 3 three makes developing web applications a breeze. Innovations like Spring and Hibernate are starting to catch in in the .net world too. If you want to avoid reinventing the wheel, build your java projects with maven, it allows you to download thousands of free to use libraries to provide whatever functionality you can think of, including Spring and Hibernate. When combined with artifactory (a maven proxy) you can also create a library of your own reusable components. Using these tools can also encourage you to write code in a more reusable fashion. There have been some attempts to create a .net equivalent to maven, but I don't think that these have taken off, probably due to a lack of content. I can't think of another language that is so well provided for in terms of tools and libraries for avoiding reinventing the wheel!
Agree, but only about Applets, and the quality of your average graduate.
Disagree with AC above "Reinventing the wheel". Actually, that's C and C++ devs who are paranoid of using APIs (rightly so, no-one wants to core).
Disagree with the sentiment in general about Java. It's mature, it's fast, it has excellent APIs and I've worked on many a scalable, stable, ultra low-latency and high throughput algo trading system built on it.
Of course the admins don't agree. They have to guess which version of java needs to be installed to run the piece of crap, and try to make sure it doesn't conflict with the version of java needed by another piece of crap they already had to deploy. After all java developers don't ever tell you what environment they developed it for.
<rant> Lennart, Yes, yes, Yes!!! Have run 4 different versions of Java per server for each of the 4 security zones and all of them were memory hogs. The only fix for the regular crash, burn, recover and restart ? Shell scripts to monitor and restart when the crap died. Sure Java can run well and lightly, except the dumbing down of coding training means it never happens in the real world.
The idea of write once, run anywhere is complete fantasy, as M$ will find find out with Windows 8. On a super computer the OS is merely a way to run fortran/C code in parallel to solve a problem. User interface is nearly irrelevant. A consumer device is nearly the opposite. Any attempt to make make the code portable to a phone or tablet reeks of facist non-thinking. The nearest I have seen to write once, run anywhere that worked, was Cobol P compilers. This is a small defined space but it met a need and worked well. </rant>
The sooner the fantasy of one size fits all is dumped for a pragmatic approach applied to classes of machines' main use the better. Anything which increases security risks should be evaluated very caustically, like java. Disabling it on my browser because of crappy 3G network increased browsing speed significantly. In return security improved and annoying hanging applets vanished.
Well said, Trevor.
"...The idea of write once, run anywhere is complete fantasy,.."
I disagree. I'm a sysadmin, working for a softhouse. I remember a good case of "write once, run everywhere":
We (the company) were developing a system. The programmers were using (at the time, it's ancient history) W2K 32 bits. Some computers were 32 bits, another ones 64 - but the OS was always 32bit, with one exception: one programmer was using a 64bit Linux.
The test server was a 64 bit Linux. All of the machines above were x86.
The production hardware was a Sun machine, with a SPARC processor and running Solaris 64bits.
The code would run, without modification, in all machines. Yes, we compiled the code for the specific java version (even using 1.5 we made Eclipse compile to 1.4). And it worked, and worked well.
Now, I don't claim this code would run on a mobile - I'm not THAT insane. But it would run on Windows, Linux, Solaris...
"Write once, run anywhere" can indeed work. Assuming your programmers are hot shit and either A) restrict themselves to a very limited subset of the language or B) "Write once, debug everywhere."
It is possible to achieve the holy zen of “write once, run anywhere.” It is however enough work that you’re better of being a monk on a mountain for 40+ years. It’s more satisfying and less effort.
"""After all java developers don't ever tell you what environment they developed it for."""
The most commonly used Java programming idioms are:
#include <everything on developers machine>
#include <the internet>
Combined with run-time linking and automagick updates this diversity of libraries gives Java its "flavour"; The BOFH of course learns to sidesteps the issue by slapping the whole mess in a private VM and never touching it again once it runs.
At last a soul mate that shares my dread, not especially of the language, but of the write once run anywhere concept. It sounds fine on the face of it to say that we can write the app once and it will run just dandy on any platform but that has never worked in reality.
I love the move towards web based apps. It is almost done now, very seldom to we see job adds for desktop apps. However what is holding us back is that you cannot simply write a standard web app. Every web developer knows that the majority of his or her time is actually spent making sure it works on IE6 to the latest Chrome. So why do people imagine they can write one Java app and it will just work?
In all fairness, Java got closer to it (write once..) than many. Web based apps are just a whole world of pain, getting worse with the arrival of variously capable mobile devices.
Very rarely these days do I work for a client who has any illusions about '..run anywhere' - they have a list of target machines (usually wrong) and operating systems (outdated) and they'll fail to test across those combinations.
"Every web developer knows that the majority of his or her time is actually spent making sure it works on IE6 to the latest Chrome. So why do people imagine they can write one Java app and it will just work?"
To be fair, the cross browser problem has nothing to do with java in true web applictions (i.e. not applets), which generate HTML server side that is sent to the browser, but more due to the fact that browsers render HTML and CSS differently. Web applications developed in .net, perl, PHP etc will have exactly the same issue.
My experience of developing web applications, which I mainly deploy on Apache Tomcat, is that for the most part they do just work when deployed on JBoss or Glassfish, or indeed on Tomcat deployed on different OSes.
My exposure to write once run anywhere was relatively limited, but I did write a data distribution server using RMI and windows, and had no problems running it on Sun/Solaris without have to do *any* porting. Sure, I *tested* it, but only a complete tool wouldn't. Not only that, but the code worked across a mix of Solaris and Windows machines which could be updated from a single repository.
Frankly, if your developers don't adequately test their applications and do their version management, then perhaps you ought to be looking for better programmers...
Better programmers will cost more money, testing will cost more time - which is money! This is bad in a world where everything is transient and made after a competitive bidding process.
The users will not see any difference between the really good and the barely adequate code, it is generally an integrated part of the luser-experience for people to have web-thingies crash on them after spending 30 minutes entering the information. People do it again when they have to, or move on if they don't, new people come in to replace them. The web is evolving into one big drive-by business, you just have to capture enough of the "plankton" drifting past to survive, the artistic impression is irrelevant ;-)
How does one motivate management to spend from the $bonus$-cash coffer on better developers when a decent BOFH can hack around most issues using the free tools: Bash, VM's and an Apache load-balancer?
I would estimate that one decent BOFH can carry the can for a team of about 20 poor Java developers, the BOFH-pay is about the same salary as one developer, so the math is easy.
"The users will not see any difference between the really good and the barely adequate code"
Depends when it goes tits up. Just today I plugged my mobile into a photo-print booth. I had a couple of hundred digicam pictures (and associated thumbnails). What I forgot was the large pile of manga scans and the timed JPEGs for recording travel (a photo every few seconds with embedded GPS info). The machine tried to cope with ~8500 images, and after I selected about ten, the booth promptly crashed. The monitor program noticed and rebooted (was running XP!) and that took around ten minutes (my God, what ancient hardware takes that long?).
With it getting harder and harder to find 2Gb cards, and most worthy digital cameras being SDHC compatible, I suspect photos numbering thousands are going to be increasingly common. The software will need to be better than "barely adequate" for it can't crash just because it has too many thumbnails, and it sucks hard to be expected to navigate twenty photos at a time (that it insists on redrawing before it will permit you to tap on the 'next' button).
Which means ultimately this company will have to get somebody in to mod the software to do what it might have done in the first place had they had a better class of programmer from the start.
...that said, a regular feature on my blog is "nice hardware ruined by lame/crap/terrible firmware". It seems that all many manufacturers are interested in these days is the barest minimum that will fulfil the promises made on the packaging (um...mostly). Why make an awesome product when a mediocre one in half the time will do?
@Iggle Piggle: Surely you jest? Having done both (lots over years) Java Swing and (recently) Web App development (Tomcat/JSP with jQuery) I will take Swing anyday. Proper encapsulated, re-usable components, usable/simple layout containers, rich controls (tree's, tabs, data-grids anyone?). Commercially available components. Web-Apps don't come close.
As to Write Once, Run Anywhere? For client-side app's Swing mostly do the trick. If you delve into JNI then that's your own lookout, otherwise it pretty much does do what it says. I agree it has deployment and security issues though. But Web Apps? a complete PITA, you'll spend all your time getting it "just so" on the required list of browsers and platforms. Argghhh. jQuery, etc make it better but they are nowhere near perfect.
However, saying all that, Web App's are the future, for better or worse. The nascent Web Components work from Google (http://www.youtube.com/watch?v=2txPYQOWBtg) will, finally, allow grown up components (such as a tree - gasp) be a drop-in bit of markup not some cobbled together pile of junk.
Java Swing is on the way out, banks use it, but that's hardly bleeding edge. Shame. JavaFX (v2) also looks cool, but is probably too late.
I remember the good old days at Uni working on a Java applet game for my final year project. Back then (~1999) Microsoft were busy trying to sabotage Java by including their own Virtual Machine with Windows. Their Win 98 VM was an interesting beast in that it was much faster than the Sun VM but also much less compatible (for example Sun's VM would run the midi music in the game, the MS VM could only manage to play wav files IIRC).
Even better was Microsoft's VM on Win NT, which would randomly stop the for loops in my code whenever it felt like it, causing all sorts of odd bugs. Of course Microsoft's piece de resistance was J++. It allowed you to use all sorts of proprietary Windows components in your apps and applets to ensure they wouldn't run on anything other than Windows. An epic piece of evilness by MS. They just aren't as devious these days...
First off, I too detest Java. Anyone that says it is fast simply doesn't know how to write good C code. It does scale - the downloads of each patch or update are prime bloatware of even the sizes M$ would blush at. But, having said that, I do have some sympathy for Java coders as write-once-run-anywhere has never really worked, even back in the days of supposedly standard ANSI C.
what are the alternatives? There's a fairly clear need for a strong, static, explicitly typed manged-memory language with Algol-flavoured syntax, because you can be reasonably assured of finding some moderately priced coders to write in it and moderately competent managers who won't be horrified by it.
Stuff like Scala doesn't avoid all of the underlying JVM and Java library issues you mentioned. C# under Windows is nice enough, and even makes pretences to be multiplatform given the existence of Mono... but if you're not using the Windows version, Mono seems very much like a second class citizen.
And all you're left with after that is C++ (which I like, but it is too easy to do write unstable software full of security issues if you have to trust people to manage their own memory) and a plethora of rather nice dynamic languages which don't seem to have much business cachet because it is too easy to write dog slow unreadable code and you have to trust your devs to write test cases.
So Java may be awful, but is anything else really that much less awful?
Lazarus. Write once, compile anywhere ;) Just released version 1.0, too.
Runs on Windows, Linux, OSX, FreeBSD, perhaps even Solaris if you can persuade it to. I think it can create apps for Android, could be IOS as well.
Uses Qt, GTK2, Carbon or Win32... and switching between them could be just a recompile.
In my hobbyist eyes, reading/writing Object Pascal (more or less the dialect Delphi uses - there's even a Delphi compatibility mode in Lazarus) is much easier than C++.
I had to learn programming with Modula 2 while some courses inflicted the lecturer's pet language on top - Miranda, occam, Z notation, Dbase IV... It was a breath of fresh air when we were finally taught C which was actually useful for something.
If I were teaching a course on programming these days I would absolutely not use Javascript though. It's far too easy to abuse and doesn't impose any sort of discipline on new programmers. Python would be a far more suitable choice, though failing that maybe Java and definitely Java and C++ when they mastered the basics.
This post has been deleted by its author
The JVM was designed to make it possible for the owner of the target machine to trust arbitrary third-party software. That was the principal design objective and all other characteristics of the JVM and the Java language were (and ought still to be) subservient to that. To this end, the exact semantics of every instruction were nailed down with mathematical precision.
Given that detail of specification, which most language implementors would kill for, it must surely be regarded as hugely embarrassing that 20 years on we are still waiting for multiple implementations that are (i) provably secure, and (ii) semantically equivalent.
Personally I have more faith in the cross-platform and security of Javascript. It's a contemptible, filthy hack of a language, but it seems to get the programming effort needed to make it work, unlike its near-namesake. These days I hear far more calls to "disable Java" than "disable Javascript". That's quite different from 10-15 years ago. The world is moving on but the JVM is not.
Modula 2 is a very nice language.
If you want to not "get yourself started" maybe you should delete your compiler, then step away from your workstation.
Really, compare it to the stuff that was floating around when it was designed. There wasn't even a C++.
Why you would post "inflammatory messages" about Modula-2 is beyond me (except if you used the m2c translator, bletch!). We had a few self-styled "C hackers" patting themselves on the shoulder for having written incomprehensible garbage with all the stuff they mis-taught themselves during high school. Not one of them, perchance?
And not just the insufficiently expert technical people -- but the management who think that those insufficiently expert technical people are good value for money; that training and testing are unnecessary costs; and that all of the more expensive technicians are simply a waste of money.
Experienced Java devs can create very good Java. In fact experienced devs can, given a reasonable amount of time to get up to speed, create decent OO code in any OO language. I should imagine at least some of the reason for the continued vulnerability of the JVM is a continuing emphasis on "cost containment" on the teams responsible.
I hate {Java, C, Cobol, Apple, Linux, Windows, math, Starbucks, those little colored things you put in cupcakes} because I was forced to learn it while I wanted to learn {anything but Java, C, etc.}. Later I had to work with people that used {Java, C, etc.} and that didn't help with my personal hatred, so I got some links to websites of people that agree with me and the conclusion is that it must die an horrible death. Here's the article. When can I expect my check?
Next: 30 bazillion of posts in Facebook proves that teaching grammar is useless.
At university, Trevor was more interested in getting drunk and trying to get laid than learning stuff, so he blames Java.
Lots of developers don't know how to test their code properly, so Trevor blames Java.
There's a word for you, Trevor. It begins with "pill" and ends with "ock". Hint: there are no missing letters.
You trying to imply that David doesn't follow industry standard practice? Just because the author or this article appears to have only ever had dealings with software that is seems to have been developed by teams with significant QA issues doesn't mean he does.
WTF is this article? Language is shit because developers are shit?
I'm finding it hard to find anything Java-specific about your complaints. Old programs are hard to run on modern machines? Programs developed at different points in time cause dependency havoc? Are you living in some alternate reality where this kind of crap doesn't occur in every language?
If your argument is that shit developers are shit, then I can agree, however great a tautology that is. But shit developers exist everywhere. That no more makes Java bad than any of the horrendous code I see coming from college WYSIWYG berks used to thinking that Dreamweaver and Visual Studio's form maker is all there is to coding.
As for Uni indoctrination, we were forced to learn Python, rather than anything useful, because the lecturer wrote the textbook... Fortunately, by that point I already knew better languages.
Pyramid is quite neat, I think: http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/whatsnew-1.3.html
For "real" web development it is probably better to use something with <shudder> PHP-inside. F.ex. Joomla because there are so many 3-rd party applications available for it that one can (almost) avoid hacking PHP.
So summing up you hate Java because you were "abused" as a child into programming Java and now see only bad Java software around you. Well, I don't share your opinion -at all- because quite frankly Java is one of the few languages I still enjoy working with (note: I'm not a professional developer).
Even though I fear that Oracle doesn't bring it much good (Java 6 immune, Java 7 vulnerable to the latest exploits? go figure) I can't bring myself to ditch it. Heck; even though I kinda enjoy C# I feel that it doesn't manage to give me the same kind of continuity. I've been using NetBeans since version 4.1 (released May 2005) and even though there have been NetBeans versions which I didn't like (and skipped) the community has /always/ been very open minded towards criticism. I reported my share of bugs, I also saw most of this share of bugs vanish. Right now I'm on the latest version of NetBeans (7.2) and needless to say; but I like it.
Then again; I also like using UML's for my more complex programs (my UML tool of choice being Visual Paradigm UML) so maybe I'm just a bit twisted ;-)
Still, I can relate to your story to a certain degree. That's why you won't see me "attack" your opinion in any way. When I first started learning a programming language we worked with Turbo Pascal 6. Later I managed to get my hands on Borland Pascal 7 through "obscure channels" and up until now I've always enjoyed the language and the way it was build up (Turbo Vision to build GUI's in DOS; it was awesome!).
But for some reason I just couldn't bring myself around to liking Delphi. I don't know if its caused by playing with an older (maybe not fully matured) version, the changes in the language or the way their IDE used to work; I hated it. Still do to some degree. And just like you I can openly admit that there is no sane reason; no argumentable comments as to why I think it sucks. Its just that I got so used to TP6 that it felt as if the language was forced into some twisted OO (GUI-approaching) construction where it didn't really fit too well.
I've been following its development a little bit, todays options look quite impressive, but when I look at the current versions I see the entry fee starting at E 200,- which only gets you a limited version. I can pick up a decent Java IDE fully for free, I can even use the VP UML tool free of charge (non-commercial use only, as such I got myself a Modeler license).
So; you're not alone, sort off ;-)
It's been some week in the Delphi world with the pending release of the next version XE3.
XE2 (last version) included iOS support (which was very hacky and not so good) but now it's been completely dropped out of XE3, and will be available (hopefully) next year BUT as an additional purchase.
Then it came to light that due to MS restrictions it can't generate metro apps, well technically it can but these can't be sold thru' the Windows App store because of limitations on usage of certain core API calls. But it can do hacky look like metro apps - Metropolis
... and then when you're ready to spend your hard earned cash on the XE3 Pro version ( XE2 Pro priced at £636.86 (Ex. VAT) - Greymatter.com), the EULA has been changed to prohibit the use of client/server databases in your application UNLESS you BUY an additional client/server add on pack - WTF. Upgrading users are being granted a "godfather" license to continue as is but new users will have to fork out extra. Crazy stuff altogether...
Hang on, have they gone completely mad?
The whole point of Delphi was for making database-driven applications, that's why it's called Delphi!
(ref. "Oracle at Delphi". Yes, horrible pun but there you go.)
Castrating the database functionality is just killing the thing.
Shame really, I quite liked Delphi 6 and it made very small and reasonably fast applications. Upgrading the projects to later versions was deemed too much work though as they are legacy, so it's fallen by the wayside here.
(Moving projects between machines was hideously awful though. True dependency hell.)
I think you are aiming your hatred towards applet and Java Front end applications, to which I whole hearted agree, there are better ways to do these things now, they are inaccessible, mostly poorly written and are an admins nightmare, I know, I've been there too many times. The whole this Java app needs version x of java and this app needs version y oh but they need to run on the same clients' PC, oh gosh!
But after all that however I became a Java Programmer, no don't hate me just yet, I write 'back end' data applications that 'users' never really see, the apps just deliver data for clients to consume, for back end heavy lifting work I find it make sense to use Java.
However I would never consider using it for GUI or client facing apps, no we use Flex for that, there therein lies another can of worms!
Awww the joys of working in IT!
Java is a nice language. I have a soft spot for my childhood sweetheart C++ but Java is so much easier to work with (unless you're doing UI) and has such awesome libraries.
Probably C# is my favourite to code in since it makes GUI & DB fairly easy, has the nice stuff from Java as well as more of C++'s cool stuff AND all that functional type stuff.
Yes, some developers are shit, they are the ones writing the platform that gets owned weekly but seemingly updated a few times a year. I don't have a problem with most java apps, though there are still some pretty crappy dinosaurs hulking around. It's the write once, exploit anywhere that's pissed off every sysadmin out there.
See the article titled "Oracle knew about critical Java flaws since April" on this very site.
" I don't possess a rich enough vocabulary to adequately express the depth of the professional disillusionment, scorn and anger I feel for these individuals."
I think you do and I like your sense of humour.
To all the people saying "don't slag off the language, slag off the developers", here's a philosophical point to consider: "Languages get the developers they deserve" - discuss.
One of Java's goals was ubiquity and it was seized upon by those who wanted to a world in which there were millions of lines of code churned out by mediocre (i.e. cheap) programmers. With the benefit of hindsight, perhaps the results are entirely within spec.
I need to don some passive aggressive here.
To all the whigners bellyaching about my tearing the language up, how many of you read past the first sentance? Did I or did I not explain that hating a logical construct such as a language is irrational, that I recognise this, but hate the damned thing anyways? It is supposed to demonstrate that association of something inanimate or conceptual with a group of people you dislike can in fact cause the irrational response of hating the inanimate object (or concept.)
Which is a metaphor for every IT flamewar ever.
And I do hate Java. Not because the language is shite - it isn't...it's a language FFS - but because the end result of "Java" has been nothing but pain for over a decade. So instead of taking away "zomfgwtf he insulted the sacred!!!!", maybe folks should focuse on why I chose to do so. The lesson to be learned lies therein. :)
Granted that:
- Write once, run everywhere was always a delusion
- Installing it as a browser plugin was always going to be as bad as Active-X
- Apps should *always* include their own private java dir of the appropriate version
Apart from that, it's a decent little O-O language, which just needs to be used correctly to be quite ok.
Java is write once run anywhere. I quite frequently write code developed on a PC on Windows and deployed and running on Linux / Solaris under a different app server.
I'm sure this paradigm can be broken e.g. by hardcoding forward / back slashes. But in that case you spank the devs and ask them what the hell they're doing embedding Windows path separators for an app which is meant to run on Unix. They won't do it again. Likewise if they use the provided layout models properly in visual apps the app will run well on any OS under any look and feel.
It's certainly far easier to implement write once run anywhere than any other language I've come across. JavaScript is so broken between browsers that AJAX libs are forced to abstract away the differences. Python faces the same problems as Java. .NET is so tainted by Windows that virtually nothing is portable. And so on.
Java is a verbose language however, needlessly verbose and stewardship under Sun and Oracle has been complete arse. Look how long it's taken for Java to acquire stuff like closures - it still hasn't despite years of demands to fix the language.
It's also not "security swiss cheese" except in the context of running from a browser. In other regards it runs with exactly the same privileges of the uid the process is executing under. It's good security practice regardless of the language some executable is running under to grant it the minimum number of privileges necessary for it to complete its job. Thus you run the process with its own uid and use access control lists and whatever security enhancements the OS offers to lock it down.
Closures? really, when's the last time you didn't do a project in Java because it didn't hae closures? As for verbosity, compare to C++. I find Java quite nice and sometimes wished I developed in it, and it seems to be fairly common now for Java devs to use the sun.misc.Unsafe class to do C-style things in their code.
Who said I don't do projects in Java because it lacks closures? I didn't. What I said is the language is verbose and closures would be one way to give it some brevity that it so desperately lacks. There are many other things it could do too but I just highlighted that one.
Java programming often involves writing lots of anonymous inner classes, frequently where the class is just implementing a single method on an interface. What should take 1 line to express can actually take up many more because of how verbose it is. It adds noise to the code, increases the effort to understand and maintain it and is completely unnecessary.
Closures are allegedly part of Java 8 but that won't appear until next year. And they were supposed to be part of Java 7 until half of the features of that release were put on a long finger to get *something* out of the door. Compare and contrast with .NET where Microsoft has made radical changes to their languages in the same timeframe.
The arguments presented are risible. They would apply equally to any other programming language (C, C#, JavaScript, Perl, PHP, etc.). Guess what? Not everybody can develop great software, just as not everybody can be a premiership footballer or a Michelin-starred chef. The programming language itself does not matter.
Computers: a market research tool
unfortunately there are a lot of folks working with computers today that see computers as the ultimate market research and advertising tool. for this they assert their ability to run their programs on your computer.
preventing this means controlling what their programs are allowed to do -- on your computer. My suggestion is: switch to Linux. I have a Ubuntu box working now.
the interesting thing about Linux is: Security. You can create a user account just for e/mail and browsing. By default -- working from that logon -- you -- or any program you are running -- hence an intruder -- can only modify files in the home directory associated with that user.
you still need to take care however: If you share a directory out from your browser user account and then extract an html document from that shared directory -- you are pulling a copy of the intruders java with that document . You could of course open the document with LibreOffice and then save it as text -- before you remove it from the shared directory.
just depends on whether tin foil is enough or if you need a helmet
I know a sysadmin that hates "Java" too. I have a strong feeling that the fact he wasn't great at coding and that Java was the language we had to use for some uni project is the reason behind this. I'm pretty sure that if we had to do the same project in C his code would have segfaulted all the time and instead of ranting against Java he would be ranting against C without realising what the bulk of the systems he is administrating are written in.
It's like someone that go jilted by a girl that was way out of their league and then makes out that she's an awful person at every opportunity.
Kept tightly isolated in the sandbox of a web application server, Java is just about passable as you neatly sidestep all the versioning and administration headaches. This just leaves you having to suffer with the utter retardedness of the language itself.
Client applications written in Java are a whole different kettle of steaming poop. Every single one of them should be scorched from the face of the Earth with extreme predjudice.
"but because of a decade's worth of people who still haven't figured out how to use it as designed"
Perhaps if they'd stayed on at university to actually complete the course "to figure it out" they'd use it as designed? Now I've got to put up with "have a go coders" thinking they know Java and botching the job because they couldn't be bothered to learn enough.
Don't think "staying on at University" solves this; plenty of folks don't include the VM binaries with the application, still use applets or otherwise commit unpardonable sins. When I have to ship working Java code, these are not sins I commit...and I didn't finish University. It isn't the education; it's the asshat behind the keyboard.
Them folks with them fancy duh-grees still can't code for shit. The ability to pay attention to security, usability, lifecycle and maintenance isn't something that is easily taught. It's wrapped up in the deeper neuroses of "being able to think about people other than oneself." If you can't tear yourself away from the mitror for a moment, you never get time to think about the poor bastards that have to use your code.
Java amplifies douchebagitis because it's a secruity nightmare wrapped in a versioning problem.
And as a sys-admin, I hate that you need a degree from Oracle to have any hope of understanding the numbering system and exactly what needs to be installed. Is it the JDK, the JRE, the Java SE, the JERK...(may not have got the spelling of that last one right)
Oh, and the fact that Sun loved Java so much that they decided to name all of their products Java. Java the language, Java Desktop environment, Java Beans, Javascript, Java FX, HotJava the browser etc.
"For starters, this notion of "write once, run anywhere" never really worked. Junior developers don't test their apps for cross-platform functionality. .... "but it works on my computer", albeit with their specific version of a Java VM on a particular patch level of that operating system"
Every time I've posted this message, it's been down-voted. The reality is Java is a pain-in-the-ass from a desktop perspective. In an enterprise each java app needs its own special flavour of java revision and patch, and none of the java apps play nicely together.
>"requires Java version 6 update 24 or newer" would include version 7. Apparently not.
Another one that dislikes Java because of not reading.. update 24 or newer of Java 6.
And really this isn't different to any other language: Major releases break stuff .. some release of glibc broke a bunch of apps that were using memcpy or something incorrectly. Are all C/C++ applications bad now? are they bad languages? In the Ruby and Python world major updates seem to change the language enough to break a good percentage of the software written those language and Linux distros spend huge amounts of time transitioning versions of those languages/runtimes... If anything Java doesn't change enough.
It was not written as "update 24 or newer of Java 6."
It was written as "Java 6 Update 24 or newer."
No punctuation, nothing to indicate whether "or newer" applied to the major version or just to the update. At that time, Java 7 was over a year old, so it was a reasonable assumption that the developer would have at least checked the app with Java 7 and included a note that it did not work.
In fact, it turns out that this particular app wouldn't work with any Java 6 update past 26 either. If this were the only developer who'd done this, I'd chalk it up to a bad vendor and be done. But every "enterprise" Java app I've seen has a similarly narrow range of version/update parameters.
You claim that this happens with all languages/platforms (in fact you seem to conflate language and platform a lot), but I manage systems written in C, C++, C#, VB, PHP, JS, etc. on a variety of platforms and I rarely see this kind of problem with any other system. It seems endemic to Java.
If Java changed more frequently, as you'd apparently prefer, we'd probably have to ban it altogether in our organization as the proliferation of specific versions needed and the consequent rash of security holes would make it almost impossible to administer.
>It was written as "Java 6 Update 24 or newer."
Keep your pants on Steve. Surely as a "sys admin" it is your job to know this stuff? Not being involved in coding does not mean you are excused from knowing that Java 7 is incompatible with some stuff. If anything as a "sys admin" it's your job to know this stuff.. why do your machines have Java 7 on them when you have software that doesn't work with it? I think that fact is even mentioned in the bits of text on Oracles download sites. If I read "Java 6 Update 24" or newer I would take that as meaning Java 6 update ??
>reasonable assumption that the developer would have at least checked the app with
>Java 7 and included a note that it did not work.
Again, you're the sys admin.. it's your job to be managing applications.
>In fact, it turns out that this particular app wouldn't work with any Java 6 update past 26 either.
Sounds like a badly written app. Who's choice was it to use that app?
>If this were the only developer who'd done this, I'd chalk it up to a bad vendor and be done. But every >"enterprise" Java app I've seen has a similarly narrow range of version/update parameters.
Really? Can you name them? The only issues I've had with some Java apps in the last few years are issues with OpenJDK and some issues with the Android SDK not liking Java 7 ... There are some really old crufty apps from the Java 1.5 or 5 that are totally broken (mainly down to native code in DLLs that doesn't work anymore).
>You claim that this happens with all languages/platforms (in fact you seem to conflate language and >platform a lot), but I manage systems written in
Languages like PHP etc are a platform/runtime.. did you not notice that PHP doesn't generate standalone machine code?
>C, C++,
So you've never had an issue with really old legacy code built against really old versions of libraries that aren't installable on any sanely recent version of the OS you're deploying on? You should tell the glibc guys that they don't need to support workarounds for software that was linked against older versions and save them some work.
>PHP,
Yeah, the migration between php3 -> php4 didn't break any software at all did it? And what about php4->php5? Suhosin reveals a lot about how good PHP's runtime is..
>JS,
JS doesn't have all of those cross browser issues that libraries like jQuery aim to solve then?
>> It seems endemic to Java.
blah blah blah
>>If Java changed more frequently, as you'd apparently prefer,
>>we'd probably have to ban it altogether in our organization
>>as the proliferation of specific versions needed and the consequent
>>rash of security holes would make it almost impossible to administer.
You mean you blindly install the latest versions of stuff (like the fast moving version I would like) instead of "stable" versions.. do you have any policy on rolling out software? Most of the problems you have seem to be from not having a sane deployment procedure.
Daniel you must be a joy to work with. You are condescending and discount the possibility that others' experiences could have some real basis, putting it all down to their stupidity and incompetence. The typical arrogant zero social skills techie, best kept away from customers and preferably from the payroll.
My heart sinks when an app contains a JVM directory, or when I have to install an Oracle RPM just because it's the only Java version officially supported by the vendor - even if OpenJDK would work just as well. A bundled JVM is an admission of defeat in itself, for some reason I've never seen PHP, Perl or Python bundled with an application.
Java = "Have 12 gigs of RAM and don' run in a VM or suffer dreadful performance".
>Daniel you must be a joy to work with.
Well, I've actually done sys admin and if anything I was the person the common folk got on with the best so ner ner.
Being a sys admin doesn't mean you have an excuse not to know "techie" stuff. Is sys admin a non-techie job now? As a sys admin it's your job to know how software versions interact, keep tabs on what is installed, keep deployments in check.... did you by any chance end up and stay in sys admin because you didn't get on well with coding?
>My heart sinks when an app contains a JVM directory, or when I have to install an
> Oracle RPM just because it's the only Java version officially supported by the vendor
How are applications that ship with a JRE Java's fault? How is Oracle not supporting standard Java distributions Java's fault? Why doesn't your OS allow multiple JRE/JDKs like Debian does?
>even if OpenJDK would work just as well. A bundled JVM is an admission of
> defeat in itself, for some reason
Maybe developers don't trust sys admins? From the comments from other sys admins it's apparent that 1: you guys can't read enough to work out the difference between the JRE and JDK and 2: Don't keep good enough tabs on the release cycles of major software components to manage major version migrations... anyone would have thought that was your job!
>I've never seen PHP, Perl or Python bundled with an application.
I've seen old machines kept around to run some PHP4 thingy that doesn't work on PHP5.. I've seen containers and VMs with standalone Ruby installs because the stable versions package with the OS aren't new enough to run some app. Python has systems for creating containers to avoid runtime/library version mismash issues..
I almost took a job this week building a VM to house some legacy app that only runs on some crufy version of PHP on some stoneage version of Redhat. The client was prepared to go to the point of back porting vmware's video driver to the ancient kernel it was running rather than fix the app.. this shit is so common and there isn't a language/runtime/platform in the world that doesn't have these issues. As a sys admin it's your job to manage it. If you don't like that maybe you should do something else?
>Java = "Have 12 gigs of RAM and don' run in a VM or suffer dreadful performance".
And there you go showing your bias and ignorance.
> And there you go showing your bias and ignorance.
I'm biased because I've run into the same issue repeatedly in a short period of time. Application A is dog slow, vendor documentation says "don't run in a VM, it cannot perform well". Try out application B, it won't even run properly in the VM. Evaluate application C, requirements say 4-12G RAM needed. Competing application C2 runs on hundreds of megabytes of RAM. I guess seeing a pattern emerge makes me ignorant.
I've seen Java apps that run well, I've worked on developing "enterprisey" products that had a Java core. As an administrator I just find that deploying and maintaining Java apps is a pain in comparison. Yes it's my job and it's what I have to do, but the complaints are still valid. I'd complain if I had to work with Windows 3.11.
BTW, Python 2.x is always backward compatible - unlike Java judging from the comment above. You can install Python 2.7 and apps written for 2.2 will run perfectly well. Virtualenv is handy for developers but I wouldn't use it in production. You can easily have multiple Python installs in parallel, eg. Python 2.6 in addition to the default 2.4.
I find it extraordianry, as an ancient dev. engineer, that every new product installation seems to include â complete java as part of the kit, to be sure it's got the right version. I never recall, in C, FTN, C++ and others having to include the compiler or the runtime environment with the kit. In fact, at one place, we used to pass all our C through lint and three different C compilers. Strangely, most of that code, vast and complex as it was, ran on most UNIX platforms pretty much unchanged, like most of UNIX in fact.
However, when it really is across, say, Windows, Linux xyz, BSD, HP-UX and whatever, I can understand that doing your own sort algorithm may make more sense than hoping that the UNIX standard libraries have got their equivalents everywhere, though Perl seems to do rather a good job of hiding the nastiness.
I have programmed in Java; first off, found a couple of the Apache classes were broken and had to search the internet for either fixes or working versions - gave me a wonderful, warm feeling, especially when java "developers" insisted I must be wrong, till one, rather older and wiser, actually looked and proved it. Good old C experience paid off for me there as I kne what should happen in C, Perl and shell. Just Java people had never looked outside Eclipse or similar.
I think Python looks interesting. But since my first forays, it seems to be going the way of C++ and Java, getting bogged down with a thousand extra ways to do simple things and extra classes that make the Encylopaeida Brittanica look small.
>C, FTN, C++ and others having to include the compiler or the runtime environment with the kit.
Statically linked binaries are fairly common, especially for commercial software.
If you want an example of where C/C++ stuff breaks look at all of the Loki games for Linux.. they crash on recent versions of glibc and the workarounds have to be invoked. Is that an issue with glibc/C or closed software? You decide ;)
>In fact, at one place, we used to pass all our C through lint and three different C compilers.
I don't know what compiler you are using but issues with GCC changing behaviour or suddenly becoming stricter on syntax than it was previously do happen especially between major releases (3 series to 4 series caused some headache). I had some weird stack corruption because of a .01 version bump of binutils once.. turned out it was aligning the data section to 4 bytes instead of 2 for some reason.. G++ has ABI changes every so often that mean a ton of recompiling for OS vendors..
>I have programmed in Java; first off, found a couple of the Apache classes were broken
There is plenty of broken stuff in Java and the popular libraries like commons,.. there is a ton of broken stuff in Apache's harmony that creates wonderful bugs in Android that piss me off to no end but that is true of every language out there. It seems unfair to pick on Java here.
>especially when java "developers" insisted I must be wrong, till one,
>rather older and wiser, actually looked and proved it.
Every language has people that won't listen.. again that isn't a feature of Java. I know of an endian bug in gprof that no one seems to have noticed or care about but I haven't condemned the whole GNU suite out of spite.
>getting bogged down with a thousand extra ways to do simple things and extra classes
Again, you can code massive reams of code in any language you like.. the only language that has gotten upset with me due to a mistake class was actually JavaFX (the class it was generating from the JavaFX code was bigger that some limit the JVM imposes on classes).
>My heart sinks when an app contains a JVM directory,
Another point..
if that makes your hear sink you would literally shit your pants if you had to manage something like Xilinx's ISE. I think it has a JRE, TCL and C parts half ported from Windows with winelib. I think it's statically linked in places and ships with a complete set of all the runtime libraries it depends on... and even better it installs a complete 32bit and 64bit set of everything! Of course this is all Java's fault and has nothing to do with the TCL stuff or statically linked C stuff it's shipping with.
I hate Java because it inspired a generation of developers to believe that nothing's complete without a framework that uses at least three hundred levels of inheritance and produces stack traces that are incomprehensible to any sane mortal. Why write a function when you can write fifteen classes to do the same thing, eh?
But the VMs and general implementations are shockingly bad.
I've managed a fair few IT systems within schools in my time, and therefore have been introduced to "educational software". From what I gather, this term means "The developer is trying to educate himself in basic coding practice". And is usually sat at the back of the class with a dunce cap on his head.
Yes, you guessed it. Out of all the many appalling, steaming piles of useless code that crossed my desk, the worst examples always contained large chunks of Java. It doesn't even matter that much if the developer has some semi-decent skills, as Sun/Oracle will manage to screw it up with the next release.
I totally agree completely with foo_bar_baz. Because of its inevitable unreliability, java should always remain within static environments like a printer BIOS or on a server.
The VMs are one of the strongest aspects of the Java ecosystem. Performance is starting to approach that of native code generated by things like C++ compilers, and is in some cases better. There are many new languages that are gaining popularity that run in a JVM, like Groovy and Clojure, and they are, like Java, sometimes the best tool for the job.
"There are many new languages that are gaining popularity that run in a JVM, like Groovy and Clojure, and they are, like Java, sometimes the best tool for the job."
Sorry but in cases where Clojure seems to be the best tool for the job, Common Lisp is in fact the best tool for the job. Hands off my Lisp you Java inter-op hipsters!
I thought that this post from fellow Reg reader "colin the aardvark" was a sensible viewpoint in support of Java and is realistic about it's limitations but with a real world view of Java's technical competencies as well as the industries it can work within and the skillset issues too:
http://forums.theregister.co.uk/post/1191612
Like some janitors that loathe people some sysadmins hate anything that disturbs their neat and tidy little world. I do not dislike sysadmins but they are very much weak in seeing the big picture of things.
Agreeing java applets is a fail due to abandonment from Sun, web standards (in-)fighting (MS, Netscape java script, ...) Trevor fails to see that the java phenomenon is one of the big milestones on our road to a better computing model. Why, it is the Virtual Machine's ultimate comeback! The VM will rule our industry from now on and it does. I am not only talking about the JVM but all the others as well, CLR, and various VMs for perl, etc. It is factually wrong to say write once run everywhere failed, it did work wonderfully for server programs, and it continue to do that in tens of thousands installations every day. This is old news of course.
Bashing the Java Language is childish, and not very interesting. Yeah, there are incompetence everywhere, what's the news?? And, as the general consensus Java is a decent language for its age. Get over it, move forward!
"I do not dislike sysadmins but they are very much weak in seeing the big picture of things"
Hey, just because the author of this article is incapable of seeing the bigger picture, don't tar all of us sysadmins with the same brush please. >:(
" I eventually went into systems administration. The joke was on me with that choice; by becoming a sysadmin, I ended up just having to learn a greater diversity of languages. I did not escape software development."
That's an interesting statement, but having to learn lots of different languages shouldn't have surprised you really. As a Sys Admin you are categorically not doing development work. You are writing code. Same as I built myself a brick BBQ but I wouldn't consider myself a builder.
On my CV I include things like Perl, Python, Javascript, VBScript, Bash, ASP etc..etc.. but when it comes to interviews I have to state categorically that I am not a developer.
I am a Sys Admin, and IMHO a bloody good one. You need to be able to write or at least read in as many different languages as required in order to be a good Sys Admin.
You can't sit there doing the same 150 mouse clicks or whatever thousands of times over to do something. You script it, fire it off and go get coffee or go to the pub, or maybe do something else constructive.
I'm not saying that I am any good at writing code though. The code I write is for a purpose. Normally throw away stuff. The point is that it works and can be made to work quickly, not that it works well. I am NOT a developer.
Developers should write good optimised code in some specific languages. In my opinion, good Sys Admins should be expected to write some code in *any* language.
"You will spend you life coding scripts and apps in two dozen languages, but also dealing with whinging users" is not how anyone sells the career of systems administration. Why would a fresh-out-of-high-school kid with no experience in systems administration know that beforehand? After all, it's derided as "digital janitors" and nothing more. Taking care of hardware and operating systems. "Simple, easy, unworthy of real effort." Sounded fun to an 18 year old; make money during the day, do real work as a hobby!
Hah.
It sounds like you spoke to some kind of careers advisor or looked up what the job description was?
I didn't look up my job role. I didn't speak to a careers advisor. I didn't aim to become a Systems Administrator. I just wanted to work with computers - as sad as that sounds.
It was a natural progression for me to take my scripting and computing skills I learned as a kid into work with me. "Whinging users" always turned up at the helpdesk (I didn't go to Uni, started at the bottom) with the same problems, so I scripted the responses as far as possible.
I realised I could write scripts to do all sorts of stuff, if only I knew what language I needed to write in and what stuff I wanted to do what. No one told me I'd need to, or had to. I just did it. With a smile because I enjoy it.
Every time I changed job I learned a new way of doing things, new languages, new operating systems. I didn't care what the job was, or even what the role required me to do, it was how I did it that mattered.
The benefit is, as I had scripted most of my tasks, I could get on with the fun stuff.
Like playing with storage, or networking, or reading The Reg and talking to you.
I didn't want to be a "sysadmin" myself. I wanted to "make comptuers talk to eachother, and get them to do things in a coordinated fashion." (I later discovered that what I wanted to do with build beowulf clusters; sadly, I do not build beowulf clusters for a living.)
The rest just sort of...happened...
Any discussion of Java should separate out the language from the VM.
This article fails to do so, so immediately makes it bogus.
The Java language is used to write Android apps (does the author hate those?), it's used to write GWT apps like the the Adwords web interface (not trivial), which is all coded in native java (but compiled to javascript).
However, if he wants to poke fun at the VM, he should remember that the VM runs countless backend applications like Jira and Confluence (fantastic products) and modified VMs run Google Appengine alongside python.
If he wants to write about how the Java VM failed to be productive inside the browser, he can write an article about that... but that's not an argument about Java.. and really demonstrates the failure of Sun.. A knowledgeable sysadmin should know better...
You were spoilt. Modula 2? We dreamed of that when I was learning. Cheeky lecturers even let us read the white papers then went back to forcing us to use standard Pascal - a language designed to prevent anything but toy programs being written in it!
The most productive programmers in my entire years in university used BASIC or machine code. Both ran faster than Pascal did on the mainframe and imposed much less insane limits on what was expressable.
I know you can get Maven to convert “customer.ContactCount += 1” to “customer.setContactCount(customer.getContactCount()+1)”, but lack of property methods is the one area where VisualBasic4 is better than Java.. a hacky language that was already deprecated when Java was first written.
I waited six years for GJ to become Generics in Java; I’ll have to wait six years for lambda functions and six years for properties.. that’s a whole load of 6-6-6 when (as the author observed) there are more fun things to do than write boilerplate code.
The point of getters and setters is to provide encapsulation. If you decide to rename the internal field, it does not break every other class which uses and/or updates that value. They also control HOW you permit access to those fields, e.g., synchronisation can be handled in the class, invalid values can be overridden, related fields can be updated at the same time so as to keep the object internally consistent, changes can be logged in the one place.
Trying to write C-like code in Java will always be an exercise in frustration. Just as trying to write Java-like code in C is.
Rule number one of Object Orientated programming: You NEVER expose the internals of an object. Rather, you provide explicit methods to retrieve them and alter them. That way, it does not matter if -- or rather, when -- you subsequently alter the design of the object fundamentally, as long as your methods continue to behave the same way as they always did.
Sure, in Perl, you could do
$customer->{_contact_count} += 1; # leading underscore indicates private property
and it would work; but for the time it would take you to write some extra methods, you could better write
$customer->set_contact_count($customer->get_contact_count + 1);
or even, if you're going to write an awful lot of stuff things like this,
$customer->update_contact_count(+1); # unary + used to improve readability.
And when you re-design the object a few years down the line, eliminating the _contact_count internal property altogether because you don't need it, the code still works.
If you find yourself writing and rewriting the same "getting and setting" code over and over again, you're doing your inheritance wrong.
Most programming constructs are beyond peoples comprehension until used in anger and then a little light goes on and you realise you've written a thousand lines when ten minutes and ten lines would have done the job. Don't get me wrong C++ is a dogs dinner extension of cats vomit with a side dressing of hamster sauce but I'd rather force down a couple of chewy bits than have to eat two hundred and fifty big macs just to get my daily ration of vitamin result. And putting comments in does mean that young programmers don't sit there shaking when trying to understand it.
There is a good case for not using C++ due to unmaintainability but the 'scary' bits in it will probably crop up in any enterprise sized project so you'll have to learn them sometime one way or another.
I just missed out on the Java craze at University by a year or so. Our OO Professor was so old fashioned (he wanted to teach us OO concepts, not the Latest Thing) we did all of our OO in a language called Eiffel. Pity that didn't take off.
Anyway, as Win32/MFC/C++ and C#/.NET developer, my most recent experience of Java was trying to do something utterly banal involving generics. I was shocked to see that after over a decade of development, Java still does not properly/correctly support templates/generics. Or rather it tries to, but it's a cack-handed, awful implementation. C++ and C# blow it away.
Why would anyone want to use it?
So you found some stuff that's been written badly and it happened to be in Java.
You can do that with any language. If you can't, it's only because it hasn't been around long enough. The language in which it's impossible to write crap code hasn't been invented yet.
In other news, the same is true of human languages. You can write crap articles in English and it happens all the time, sometimes even on El Reg.
You sir are just ranting because some morons happened to chose to Java to cowboy code in, this can apply to numerous other language interpreters/VM including dot Net, Python, PHP etc.... Why not complain about these too, or would that make it too obvious that this is an excuse for an article which should not have got past the editor!
Java is not inherently insecure; however crackers are finding sneaky new software vulnerabilities all the time, which were unknown when the Java security model was developed/updated, so Java is bound to get hit by some of these new issues.
BTW: Flash is horribly insecure garbage, IMO as bad a security hole as Active-X, and regularly has MANY more security issues/patches than Java; I hope Adobe stops ALL updates to all OS's to force websites which use it to use better tech, like HTML 5.
I think what the author of the article and some posters may not realise, when they talk of mediocrity or worse among Java programmers (and perhaps those of other languages) is the trend of programming being part of another job. There are many jobs which involve programming but aren't purely software engineering or development roles. Much as a lot of software is found in machines and devices that aren't general purpose computers themselves but something that performs a specific task or tasks: TV, washing machine, car, etc. (However I would say that those who write software for embedded applications need a high level of discipline in memory and CPU usage, ensuring code executes when expected (real time constraints) and extensive testing.)
Would it not be a good thing for those whose job title is not 'programmer' but who can write programs to solve the problems in their field: empowering. This is a development of the trend whereby use of computers is no longer the preserve of computing professionals but for everyone. Further along, the trend suggests that just about *every* job will involve some kind of programming in the future.
Bill Gates was twenty years ahead of you. Visual Basic for Applications, the language used in a million Excel macros on Wall Street. Programming for the masses.
When the full story of the 2008 financial crash comes out, we'll probably learn that some intern at Lehman Brothers made a typo in a macro. It was only a matter of time in a language with ' as a comment marker...
Languages have baggage. Sometimes the baggage is overwhelming and the language dies, and sometimes it limps on. But this article does nothing to convince me that Java is inherently bad, only that bad developers are, well, bad.
At the risk of sounding like a pseud, languages also have baggage that comes from the time of their birth. C focused on lean resource usage because of the environment it was built in, and to hell with the consequences of a stray free(). Java was created in an environment where Microsoft's dominance of computing and history of locking out competition was a real threat, so they sacrificed everything to run anywhere.
The question of baggage is precisely why I believe that Computer Science courses should not try too hard to teach the language-du-jour to undergrads. Far better to teach them about good programming practice, user experience, algorithmic design and hardware than spend weeks on the wonders (or baggage) of Java, c++ etc. This was why Knuth invented MIX, though I freely admit that's a bit over the top for most. But modula-2 or C seem perfectly reasonable to me as teaching languages.
Most of the JAVA problems are JVM related - SUN did a piss-poor job with backwards compatibility and maintaining stable API.
And if you don't think so, here is an example - how can minor version upgrade (1.6.0.28 to .29) break and application? What was so f&%^$g important that had to change?
Maybe I'll get flamed for this, but last time we looked at run big server side apps in Java, we foundered on the fact that just as things were rolling along nicely, the app would run like molasses whilst Java did GC. We did various tricks with the GC (concurrentmarksweep, etc) but try as we might we just could not guarantee that GC would not kick in at the most inopportune moment.
Has the Java community solved this problem? Are there now best practices devs can follow?
Apologies if this is old news - we moved to C (don't laugh, it works) and never looked back, but there are some Real Nice Things in Java that we would love to have been able to use.
I don't think so.
Read this:
http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=5370764&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D5370764
It is the average java developer who is the problem; Java has allowed the development of a programming culture that leads to write inefficient and bloated software: As an example, In that article it is revealed that each instantiation of SimpleDateFormat requires more than 100 methods calls and 44 new objects. An App Server with one 1 GB of heap memory struggles to keep as little as 500 user sessions.
I teach in a technical school setting where we teach how to program. Theory is there but every course has a programming component supervised by the instructor and the quality of the code is as important as the correctness of the result. Unfortunately the university environment is so focused on theory and research that the details of programming are far too often left up to the individual students. That's why most of the code you have encountered is so poor. Its not the language but rather how it is (or is not) taught. I tell my students that if their code produces the correct result then that is usually worth only 20% of the grade.
Monopoly of CS education means we have a culture of people who learn Java and nothing else, leading to the 'language as a hammer' thing on an epidemic scale. Then we have a ludicrously popular language used at all sorts of standards in all sorts of places, leading to a poor general standard in the wild, a proportionately higher number of exploits, all sorts of regular patching leading inexorably to a degree of fragmentation… Then you get a feedback loop: Java is so ubiquitous that those learning its esoteric features learn to cherish those for whatever reasons apparent to them at the time rather than developing a more holistic approach to learning by going through the pain of learning other high level languages that might give them better insights into programming as general craft and a more objective view of language features for what they are. These are all problems to do with ubiquity and the monolithic culture of mass adoption.
And yes — as many other posters have noted — Python demands consistent indentation.
I am a fellow sysadmin, my hate for java is of both the bloated all the same but not quite, bloated JVM's, and Java developers (in my experience, even worse than perl developers)
I will never understand how anyone can write applications so bloated, whose idea of logging is throw unhandled exceptions to a log that grows a few mb per hour.
I hate the fact that I happen to know better than them what environment and dependencies their crappy code depends on.
I hate when they complain about an application that doesn't work on a target machine, and it has to be a sysadmin who finds out why, with no help from the developer, other with an: "there is something wrong on that computer, I do not have time for this" and suddenly is the sysadmins responsibility that the business can not go live.
> whose idea of logging is throw unhandled exceptions to a log that grows a few mb per hour.
Yes.. what they should do instead is not output the stack trace information that might help debug the issue and just output some random error number in octal.
>I hate the fact that I happen to know better than them what environment and
>dependencies their crappy code depends on.
If your devs don't know how to use maven etc doesn't that say more about your devs than Java really?
Java was only invented by Sun waste as much hardware ressources as possible for any simple job, so they can sell more hardware ...
I'm coding in any sort of languages since 25 years ... and hated Java right from the beginning.
Ah yes, just in case you're interested - I still love C ;-)
nuff said ...
It is hard not to take this as a vacuous article, one launched in an attempt to fill space and time within the context of riding the wave of a temporarily increased and slanted focus on this language - it seems to say a lot, but fundamentally it says nothing while it politically manouvres the writer in to a position where one can only feel there is an attempt to create a distance between the critic and the abstract (as in art) criticism...
I doubt (hopefully) that there are many who steer projects that look at any language as an eternal cure all - unless, that is, they are the type of people who are quite happy taking placebos' in place of apropriate medication... And I do doubt that there are any in the industry who have not had periods of dealing with all kinds of diverse issues and problems with every language - from Assembly all the way up to more abstract deliveries, or in fact any individual tool - from Databases to Graphics applications. (I remember a time when MySQL promoted the lack of transactions as a positive feature, and there are fundamental issues in the sector related to aspects like impedence mismatch, etc, etc, etc - What I am hinting at here is that all things in this industry are dynamic and progressive, even though at time many will only wrongly perceive regression).
There are a multitude of languages, meta languages, translators and various other tools with specific objectives, specific strengths and specific weaknesses - and these are deployed/integrated in appropriate environments with a great deal of due consideration. And with the dynamic divergence(s) in designs of underlying platforms - os', processors, network cards, disks, etc, and the requirements and demands of users, each language can only attempt to be as generic as possible, as safe as possible, and as applicable as possible with respect to framed/stated needs under specific conditions. (Hence the availability of things like RealTime facilities in Java... hmpf).
Even when dealing with something as fundamental as C, deploying to a heterogenous environment, ensures any producer would have to deal with comparatively the same fudamental cross platform issues - and difficulties met, that would appear unique and fresh to each individual team, are usually a lot greater than anything a language that is cross platform off the bat can give. Hence in cases of complex integration - languages/"pooled resources" like haXe/Java/etc exist to abstract such inescapable difficulties.
Why do you teach "da youf" with cross platform tools? - Because you are not only teaching them a programming language, you are also charged with introducing them to the various other aspects, the latter of which even slant towards philosophies, that are related to being in this industry. What they do with the information is up to their abilities, further training, their desires/focus and the problems they meet. You are also trying to get them productive in the safest and fastest possible way in the midst of a multitude of available choices. The slant is therefore towards the best solution/tool that is able to deal with a multitude of requirements under the above conditions. And I am not saying all of this as a Java fan, because I definitely am not.
Selecting any language as a solution - i.e., making statements such as Java has a problem - "Yeah, that is why I use Python! It rocks," does no more than display the naivity of the individual making the statement - when in fact we are all charged with dealing with ever growing systemic complexities.
One can only presume that what is inherently described in the article is less about the failure of Jave and more about a desire to ram square pegs in to round holes. Java is suitable for what Java is suitable for, under the conditions and the multitude of difficulties that institutions, companies and individuals, face daily in a collective quest to develop and integrate complex and growing heterogenous systems/requirements.
The reason why we are professionals is to navigate through such difficulties/problems while understanding the limitations related to doing so - that is where we gain a foothold in the industry as it is and are found to be necessary, and indeed it is from dealing with difficulties that we find our skills and are able to gain from discovered opportunities.
I'm not sure why as a sysadmin you seem to feel you posses the competency to criticize programmers or programming languages. If your coders say "but it runs on my machine" and your company is developing a cross-platform application in Java, perhaps they should have hired developers with the requisite experience. Management are a bunch of twats, your company is doomed. If you haven't run into a Java application that runs everywhere (Eclipse comes to mind) maybe its because you admin 4 computers with 2 applications. Its also good to know you feel Java is finally dying, we can all finally get rid of that crusty old Android thing.
P.S. If you personally use dozens of languages, why are you still a sysadmin and not a devloper? (by choice I'm sure), and why would you say Python compiles and doesn't require an interpreter? Of course you need a Python interpreter you silly twit. (barring 3rd party compiler). .PYC is byte code like Java . Your career prospects are limited, and I can't understand why El Reg actually publishes your nonsense,
P.P.S I have worked professionally as a sysadmin, and as a developer. (Including Java and Python)
I have never seen such an appalling, unfair article on Reg before, and I have seen many.
So, you couldn't learn to code in Java to save your life. Is that platform's problem? I hardly think so.
I have been working with Java for last 12 years, and my love and respect for the platform has only grown. From the very start, I have been using Windows as development & build platform, and Linux as the server (deployment) one. Write-Once-Run-Anywhere DOES WORK, unless the programmer is hell bent on not to let it. There is no other technology which provides such portability.
Yes, the browser based rich-client use-case of Java is not the best in comparison to other rich-client technologies. But, why is it expected out of a technology to be at the helm in every use-case? Java RULES on the server-side and there are very good reasons for that. Having said that, I still think Swing, as a desktop application technology, is amazingly flexible and portable, provided the programmer has enough skills with multi-threading.
The combination of amazing simplicity and enormous power of Java in the enterprise space makes me a big fan of the language. On top of that, the rich community of open-source frameworks make the development so much transparent, simple and fun.
Epic FAIL! Because the criticism is wrongly directed towards the technology.
THIRD SENTENCE:
"Hating or loving a logical construction such as a programming language is irrational, illogical and otherwise nonsensical. As a human being with an emotional reaction to the world around me, it is increasingly unavoidable."
LAST PARAGRAPH:
"It is possible to code Java applications that are excellent. The ubiquity of the language as a primary educational tool has unfortunately made these the exception rather than the rule. So I hate Java; not because there's anything inherently wrong with the language, but because of a decade's worth of people who still haven't figured out how to use it as designed."
Like so many others, you have completely failed to actually read the article. I explicitly state that technology is a logical construct for which it is irrational to "hate." I also explicitly state that java [i]can[/i] be used for good. I also – the article is right there, go read for yourself – explicitly state that my negative reaction to java is an irrational emotional reaction brought about by the totality of the extended universe of issues that surround it.
The article is not about “how terrible Java is.” Java is a tool. The article is about how “horrible abuse of this tool by our entire industry has meant that it is a significantly larger frustration – and even liability, from a security perspective! – than the marginal benefits it provides.
Bonus points for skimming through so fast that you assume the only Java I ever coded was the crap I had to do in my first year of university. The anecdote explains why I left university seeking something better. Is followed up immediately thereafter by a description of how that was a bad plan and I ended up developing applications anyways. Those applications include Java, which I am still forced to use to this day.
Perhaps you need to detach your personal sense of self worth form the language you program in. There is no need for a tribal reaction; criticism of Java) or the wider Java ecosystem) is not criticism of you. If the sub editor’s title, or the opening sentence of the article [i]which is immediately followed by an open admission of trolling commenttards for fun[/i] sets you up emotionally to skim through an article with a blinding rage, there are problems. If you skim so you can quickly get to the comments section and core dump some hatred, there are all sorts of questions about how you define yourself personally and professionally that need to be asked.
If you cannot acknowledge the issues surrounding your choice of language, why should anyone trust you as a developer? You need to know about – and acknowledge – the problems before you can adapt to and overcome them. Tribalism regarding technology is an indication of inadequate understanding of the role of that technology.
I am a regular user of the IT Reporting system which relies on Java. To be honest, this is very painful from the begining. Let me list down the pains -
1. It took ages to load the interface. I have seen reporting systems from outside our domain load much faster than this internal system.
2. I can't update Java. This is the point mentioned in the article. Whenever I update Java, the system broke down and my IT team screams at me not to update Java. I do not understand why things break down with every single update.
3. The system refused to load some "Unsecured" elments and I have to choose either to block the elements (God knows what I am blocking!) or allow them (God knows what I am allowing!).
The "Write Once, Run Anywhere" looks good on paper and gained hugely popularity in some circles. However, the user experience was always worse and will remain so against native code. Frankly speaking the age old truth - "One size does not fit all" still holds true.