Does an Open Java Really Matter?
snydeq writes "Fatal Exception's Neil McAllister questions the relevance of the recent opening of Java given the wealth of options open source developers enjoy today. Sure, as the first full-blooded Java implementation available under a 100 percent Free Software license, RedHat's IcedTea pushes aside open source objections to developing in Java. Yet, McAllister asks, if Java really were released today, brand-new, would it be a tool you'd choose? 'The problem, as I see it, is twofold,' he writes. 'First, as the Java platform has matured, it has become incredibly complex. Today it's possible to do anything with Java, but no one developer can do everything — there simply aren't enough hours in the day to learn it all. Second, and most important, even as Java has stretched outward to embrace more concepts and technologies — adding APIs and language features as it goes — newer, more lightweight tools have appeared that do most of what Java aims to do. And they often do it better.'" Since Java itself never mattered except to sell books, I still don't see why opening it matters.
Some would say the same about Slashdot.
"Since Java itself never mattered except to sell books, I still don't see why opening it matters."
What an ignorant and irresponsible editorial comment. Care to substantiate that claim, or even clarify what it means for a language to "matter?"
Really.
How many times have you been screwed over by a vendor who thinks they know best? (Symantec / L0phtcrack anyone?)
"It doesn't cost enough, and it makes too much sense."
I find it funny that we have statements like "Java never mattered except to sell books", while I distinctly remember hordes of posters on this very site only a few years ago, rabidly arguing that Java is the best thing ever and that nobody will be using anything but Java in the future. Now, we have hordes of Ruby, Python, and what-not advocates saying the same things. I guess it's their turn. I'll just keep my C++, thank you very much, which nobody advocates these days, and everyone says is obsolete, too complicated, and inherently broken. Go ahead, mod me as flamebait! I'm used to it.
Since Java itself never mattered except to sell books, I still don't see why opening it matters. For a system that does not matter except to sell books, it sure has a large install base.
If you've ever wanted to run a Java app on a debian box, you know why this matters.
The strictly FOSS distros have historically refused to include a Java package due to its non-Free license. There's some really good Java software out there, and without a pre-built java package, it was just that much harder to access them.
Maybe you're an older coder but I think that Java gets some of the nostalgia effect that BASIC use to since it seems to be the first programming course offered. At least from what I've seen it's one of the early languages taught now-a-days. But I really don't know for sure.
It certainly seems to be a fairly easy introduction to OOP.
Dedicated Cthulhu Cultist since 4523 BC.
I guess OpenOffice.org doesn't matter either then...
-1 Uncomfortable Truth
It's not about practicality or relevance, it's about Sun setting an example and living up to saying what it would do.
"Most people, I think, don't even know what a rootkit is, so why should they care about it?"
A "cludgey" app can be written in every language, Java is no exception.
Without getting in to a bunch of holy war things, here are some of the things that Slashdotters may like about Java:
1. You can get paid to write in it. A lot of us (myself included) are software developers who write stuff in primarily in Java. Sure, I know other languages like Ruby, but it's nowhere near as ubiquitous as Java. This makes employers like Java.
2. It's mature. It's been around for a long time, and the libraries are mostly stable and bug free. This is not true for some other languages. Also, the APIs for Java are huge and support everything, and the documentation is good.
3. It's fast(er). Older Java GUI stuff was not fast, and it gave people the impression that all of Java is not fast. Well, Java 1.6 is fast.
4. It's cross platform. This isn't a big deal for me so much, but it might be for some people.
if Java really were released today, brand-new, would it be a tool you'd choose
If Windows were released today, brand-new, would it be a tool you'd choose?
Who cares. It's not today that it's released, and the importance of availability, mind-share and already developed applications around it, gives it a clear importance, even if you have better hammers for your particular nail.
Rome taught me patience and assiduous application to detail. Virtues which temper the boldness of great, general views.
You need to know Java.
It's that simple. It doesn't seem to matter that the typical Java app is N times larger than it's c++ counterpart or that you need a 64bit box with NGb of RAM to make it run acceptably. Corporate IT are basically only interested in hiring Java developers.
Deleted
Isn't that a bit of a flamebait now...?
Java is hugely complex but saying it never mattered is a bit extreme methinks? There is, after all, a huge amount of Java software out there. And Java did do a hell of a lot to popularize virtual machines as well.
Never mattered? While we're at it we could add that the Amiga never mattered because it wasn't ultimately that successful, right?
.: Max Romantschuk
I am not a professional programmer, so I have the luxury of getting to choose my tools and switch whenever I want to. I have tried several times over the past to pick up Java, but each time I found it too heavy for what I intended to use it for. Kind of like hunting for deer with a M2 Browning. Personally, I use Python or Ruby for pretty much everything I do. Then again, the biggest project I've ever done was only about 1,000 lines of Python. It was a program for calculating trade between worlds in our http://www.sjgames.com/gurps/traveller/ game.
>>
Since Java itself never mattered except to sell books, I still don't see why opening it matters.
>>
The day job could buy an awful lot of books with the $X0 million worth of Big Freaking Enterprise Apps we have written in (mostly) Java. Its like any other tool: there are some places where it makes excellent sense, some where it does not, and I have my own personal tastes for when I would use it or not. (Cards on the table: I do proprietary desktop Java development in my spare time and BFEwebA at the day job, but have been mixing in a bit of Rails programming lately.)
At the end of the day, what matters is "Does Java help us make our customers happy?" It does. Despite how skull-crushingly boring writing CRUD apps can be, for our customers having the things available and working means the difference kissing their kids at 6 PM or being stuck at the office at 2 AM wondering if they will still have a job in 5 hours.
So how does opening Java matter? Well, even in an extraordinarily mature platform, you'll sometimes find weird, off the wall, how the heck did that happen issues with particular combinations of software. Enterprise Computing = combinitorially explosive numbers of possible adverse reactions. We've got at least 150 packages in the system, many of which have to interoperate with code which has not seen the light of day since the mid-90s.
You'd think the odds of actually having to touch stuff deep in the bowels of the infrastructure are pretty low, but believe it or not we have our own little fork of, e.g, Tomcat 4.1 in production use *to this day* to get around a particular classloader issue that got fixed in later releases. (We can't upgrade that particular customer at the moment. Its a long story and if you've ever worked in industry you've heard the basic gist before.) Java being open means there is one less place for issues to be totally inaccessible should we need to work around them.
Help poke pirates in the eyepatch, arr.
The concept matters, now java can be part of free solutions. As java being a programming language very complete and easy to learn, its a good way to put java to others uses. Making better compilers, or better tools to use java like a mono maybe.
Sun is loosing ground to .NET, so they have to regain developer. I have to admit that Open Java is very appealing to me, since I feel that the language/platform does have something unique to offer that is not available anywhere else.
Furthermore, I don't care what anyone says about .NET/Mono. It is a closed Microsoft technology that Mono will perpetually play catch-up to. It cannot replace what (Open) Java has to offer.
Goodbye Slashdot. You've changed.
I've considered spending time to learn java better, and knowing that the JVM is open sourced is a good thing, but Java as a whole would have benefitted from being open sourced a long time ago, when some of the community that uses it could have fed knowledge and information back into the language and VM design.
Now it's basically a niche product that's more or less complete, and we either have to accept it as is for use or break compatibility with existing code to make any major mods to it.
The major advantages java has always had are 1) Increased programmer productivity and 2) Code portability. Both of these are achieved by other platforms now in different ways, so Java is now one of many instead of the only solution.
Open sourcing it is more insurance for its users than anything else... it won't drive a Java renaissance any more than open source Solaris will, because there are already good alternatives.
Sun... producing good open source products that would have better been open sourced years ago.
Erik
We're a Python shop. It does everything Java does that we need it to do, but is actually fun to write. If Python disappeared tomorrow, though, Java would be a no-brainer. It's cross-platform and wouldn't leave us beholden to the good wishes of Redmond.
Dewey, what part of this looks like authorities should be involved?
Like it or not, Java is the no.1 language, at least claimed by an article referenced here: http://ask.slashdot.org/article.pl?sid=08/05/29/163253 The last line of the article pretty much gives an indication of the quality of the authors knowledge.
The real differences between an open java and the free java implementations maintained by companies like Sun and IBM are religious in nature. That is, they only matter to zealots obsessed with their own narrow interpretations. Most of us are moderates who only want to write great software. The different is moot to us moderates.
So, depending on who you talk to...
(C | C++ | Java) is the ultimate programming language.
Now we're being told that compiled languages are passe' and all you need is
(Perl | Python | AJAX).
In the meantime, the -art- and -science- of programming language design seems to have withered away due to lack of interest from the developer community.
From what I've seen over the last 30 years:
1. Programing Languages -DO- make a difference in both individual productivity and organizational effectiveness. And the latter is -much more important- than the former for anything bigger than a breadbox.
2. Management doesn't believe #1. In fact, management doesn't believe in software engineering. Instead, management wants to throw bodies at problems to make impossible schedules, with little concern for quality of the product. At best, managers throw process (and SEI CMM/CMM-I) at the hoards of programmers, believing that process is a substitute for
(a) developer talent
(b) product quality
So I guess ( 1 & 2) together explain the demise of programming language design. And all we can pray for is increases in second-order tools such as debuggers and, if we're really good, tools like static analyzers, to make up for the sh*tty set of current (popular) programming languages. And as end users, bugs and security holes will continue to be chronic results...
dave
Blackdown on Linux is the most compelling reason to OSS java.
Personally I'm very pleased that they opened it. I much prefer to write my code against the same runtime that will be used to run it.
Java doesn't matter in some small circles or groups. In some others, it does. There are many application that use Java in many ways and see a great benefit.
It matters to the people who use it to get their work done. They exist in significant numbers. Open Java matters only to the subset of people who need perfect openness and use Java.
This whole topic is wrapped up in the vain need some people have that their programming language choices (of all things) be validated by some sort of public acceptance. So your personal answer to this question might have more to do about your feelings about yourself than about the world at-large. See CmdrTaco for an example.
This is total bullcrap. /. editor have no clue at all & I can only pray they've never had any responsability in any project in whatever environment.
Both the article author &
I'd write a rebuttal but it's just not worth the effort
"Slow JVMs. More syntax than C. Lame." -- CmdrTaco
As copyright owner of this comment, I authorize everyone to defeat any technological measure which limits access to it.
I have written a few applications in Java.
I actually like it. If you want to write a database driven application that is also multi threaded I think it is just great.
If you need to be multi-platform it is the best solution that I have found. QT is close also.
The speed argument is old and should be tossed. Swing isn't slow or nasty anymore and is pretty speedy. SWT is also pretty nice.
Try Jedit, Netbeans, or Eclipse to see what a nice java application can feel like.
If you haven't used the latest version of Java I suggest you try it.
I have even found good uses for java appletts. Yes I know they got a bad name because way to many idiots "Microsoft I am looking right at you" used them for stupid things like hover buttons.
Java is a a good free as in beer and free now free as in GPL RAD system.
As far as it not mattering? Well a lot of people make a living writing Java. I just saw a Story on slashdot about a guy running java on a Cluster to do modeling.
As far as Java being to big for anybody to use it for anything practical...
Well JEdit, Netbeans, Eclipse, OpenOffice, and thousands of cell phone programs all say BALONEY.
See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
Javascript has a better object model?
You mean, a language without a basic stuff like namespaces (!!) has a better object model than Java?
Oh, and Java also has static typing. That's a great feature.
Coming from CmdrTaco, that's a tad harsh (flamebait?), especially in light of the fact that a LOT of Open Source activity these days centres around people building stuff in Java.
I'd go as far as to claim that a lot of know-how on how to design decent web frameworks, GUI toolkits happened in the Java world (well, TBH, there's Smalltalk too, but who, these days, is building anything substantial in Smalltalk?). The reason why we're not still stuck with crap like EJB 1.1, Topkink, etc, is because a huge army of very smart Open Source hackers are building excellent stuff, which in turn, have become defacto standards (to wit, Hibernate to EJB3, Spring, Struts 2, Seam, Tapestry).
Nine times out of ten, the Open Source alternative is faster, smaller, and more reliable. It'll be nice to finally see that happen to the JVM itself, once momentum builds behind IcedTea/ClassPath.
I work building proprietary, boring business apps in Java, however one of the big pleasures of my job is that there's just about always a very good Open Source implementation of any application server, database, library, GUI framework, whatever, that you can think of. The only missing piece that I can really see at this point standing in the way of making the entire stack 100% Open Source from top to bottom is the JVM. This is particularly important to the RMS long-hair crowd who've agonised for years about the Java Trap.
First, as the Java platform has matured, it has become incredibly complex. Today it's possible to do anything with Java, but no one developer can do everything
What developer has to do everything? We use Java to run our systems without using all the complex frameworks that you seem to be referring to. It does the job. Just because people have developed over-engineered frameworks with a language doesn't detract from the the value of that language.
There are 0x40000000 types of people: those who understand 32-bit IEEE 754 floating point, and those who don't.
1. Java, 2. C, 3. C++, 4. PHP, 5. VB. ("The ratings are based on the number of skilled engineers world-wide, courses and third party vendors.")
"It doesn't cost enough, and it makes too much sense."
"Since Java itself never mattered except to sell books..."
Wow...that has to be one of the most idiotic statements I've ever read from one of you guys.
I'm no Java evangelist, but saying Java itself never mattered is like saying C (or even C++) never mattered - it just smacks of total ignorance.
Java has had a HUGE impact on software development, especially in the enterprise. I won't say it's all been great...but it's certainly made a difference in a lot of areas.
If the language really never matter, there would not be such a large community of developers using Java, and Microsoft would not have bothered to change their entire development platform to be so much like it (i.e. C#/CLR/.NET).
I'd thought you Slashdot guys were smarter than this. I guess I was wrong.
> Since Java itself never mattered except to sell books, I still don't see why opening it matters. This is exactly what smileys are for! Anyways, I don't know what's up with all the Java hate seeing how most OSS uses it. Ruby doesn't have unicode support for christ sake! Flame that if you really need to ...
___
No power in the 'verse can stop me
...(the words slow and bloated come up often) and most apps written in Java I have used have felt half-hearted.Actually, I would guess that most apps written in Java that you've used have been quite responsive, but you weren't aware that you were using a Java app. This is because most Java apps that people use are server-side apps (eBay springs immediately to mind).
"You cannot simultaneously prevent and prepare for war." -- Albert Einstein
I don't mind fillers, but boring, repetitive fillers, on the other hand...
Fuck systemd. Fuck Redhat. Fuck Soylent, too. Wait, scratch the last one.
I am far more fearful of an open fragmented Java than I was of closed Java.
The fact that Java had a "Sugar Daddy" to regulate it and support it with strong standard libraries made it very appealing to Corp and Gov users. I don't mind an experimental open source implementation but there has to be a stable, commercially viable alternative around that companies can depend on (read hold liable) or the whole platform slowly losses its appeal.
The "Java never mattered" thing is flamebait . We all know that it is part of the backbone of many commercial web solutions. There are also many projects that just couldn't have existed with it. The argument of validity is pretty much over.
I primarily use C/C++ professionally but I have used Java in the past as well as C# and a few Scripting languages (Perl,Python). I can say that for certain software solutions there is no better alternative to Java. I can say the same for C++,C# and Perl.
That's where I'm at as well. For the 50/80/90/100% (usually 100%) of a program for which performance is not critical, Python just kills Java with respect to other factors. And for the 50/20/10% of the program for which performance is critical, Java is just too damn slow (even idiomatic C++ is often too slow). Plus, Java doesn't like to be called from other languages--it really wants to be "boss".
I've used Java from one of the first alpha releases, but it just hasn't panned out...
"Not an actor, but he plays one on TV."
It's fast(er). Older Java GUI stuff was not fast, and it gave people the impression that all of Java is not fast. Well, Java 1.6 is fast.
That is the first time I've seen that admitted onThe only java app I like is jEdit. But even its author, Slava Pestov, got very frustrated with java. He's developing on factor, another language.
"Piter, too, is dead."
This is a real common argument people make, however it's just not true anymore. There was a time when Java apsp were slow but improvements within the language and JVM have made its performance comparable to compiled C. As far as bloat goes, a poorly configured Java application or application container in the case of web apps will certainly make Java apps appear bloated but that's only because you allocate the JVM a certain amount of memory and Java will use every last byte you give it if it needs to. On the other side of that if you force a Java application to run very lean on memory the garbage collector will do a pretty impressive job keeping your application running efficiently. That's not to say that a C/C++ doesn't give the developer a better ability to optimize performance and footprint.
That being said, I don't think there is such a thing as the perfect language. They all need to be thought of as tools in a programmers tool box where you choose the right tool for the job.
Our bugs are smarter than your test scripts.
And just about every non-offical GTK+/Gnome application I've ever used. You can build crap in any language. The difference with Java is that the barrier is somewhat lower than with C/GTK+. Try downloading some earlier releases of GRIP and then watch your eyeballs bleed.
You can take this further and then look at all the pre-pubescent, putrefacting garbage out there written in PHP. The lower the technical barriers to entry, the more poorly-designed, awkward garbage gets written on it.
The truth is, most people know squat about writing reliable programs with decent, half usable UIs. Java/Swing and C/GTK+ have at least one thing in common: it's relatively easy for weekend hobby coders to push out crap, but it takes a lot more clue and skill to build stuff that's good looking and usable.
Java has its problems, but it's actually a great stable platform. I think people carp about Java's flaws because it is so popular, taking shots at the leader. In reality, Java is a huge and boring but effective ecosystem if you want to deliver a piece of software and have it just work.
It's not sexy, but jeez on linux, windows, and Mac, I've built java code and moved the .jars all all over the place, and darned if it doesn't do what it's supposed to, like an old truck that just works carts around all sorts of work.
With Java being open, we all benefit from its increased spread as an open and reliable platform -- like C. Depending on Java looked a more iffy when it was so tied to Sun. Your source code is such an expensive investment, you don't want to take weird risks (cough .net cough). With Java open ... well now it looks like a very safe, neutral choice.
You can write C code, and since it's open, you know your code would work all over. Java has a future that way too now.
C is still great for its niche, but (flame on) Java delivers 10x more capability in its libraries. C is a creature of the 1970's, so you don't get so much (I *love* C, but get a lot more done in Java). Also, the optimizations in HotSpot are awesome, making languages which run on the JVM look like the future. I hear if you want to see Java with the cruft stripped away, check out Scala.
Really. When version 1.4 came out it started to be usable. Contrary to the lore it was NOT ineffcient to use AWT. At least not if you wanted t opur a GUI to your PERL/Jython/etc whatever Program. And for the eas of installation under debian open source tools matter. I only use open source tools now for development and I am much happier because of reduced installation complexity
Javascript's object model is simpler, more flexible, and more consistant than Java's object model. Whether it's better depends on your point of view, but it has some advantages.
Static typing is nice when done properly, but Java doesn't do it properly. It manages to be both inflexible and restrictive, and prevents only relatively uncommon errors. I can't think of a single statically-typed language that has a worse type system than Java.
http://apple.slashdot.org/article.pl?sid=01/10/23/1816257&tid=107
I think I know what you're doing - purposely trolling in order to incite a flamewar, driving up hits and thus ad impressions.
It won't work though; surely the vast majority of your readership browses with Firefox and some sort of adblocking system.
I mean it can't be that you genuinely believe that arguably the most often-used language for enterprise and commercial web development work "doesn't matter"; a 30 second search on any popular job website would dissuade you of that infantile notion.
It's official. Most of you are morons.
I use Debian. And with Java to be able to go into main it makes for even less hassle with Debian. Even if you don't use Java there are many programs written for it.
*Sigh* Every now and then, we have proclamations about this [New Language] will totally replace [Old Language]. Yet almost 50 years after COBOL was first invented, it is still being used today. Why? Because it still works. Realize that businesses and people don't change for change's sake. There has to be a compelling reason to replace [Old Language] with [New Language]. Usually [New Language] has this X feature doesn't cut it. Most of the time, older code is replaced when the system is being replaced, i.e. hardware upgrades.
Well, there's spam egg sausage and spam, that's not got much spam in it.
Remember that Sun did not free their java applet plugin. Classpath/Icedtea folks are writing a replacement but last time I checked it lacked e.g. liveconnect support so I could not login to my bank. This means that java applets are still not completely usable with free software.
and I'm not an author.
A lot of the biggest kluges in early Java have fallen out of favor:
1. Struts 1.x is huge, but it isn't being used as much on new projects. Newer frameworks like Tapestry, Wicket, Struts 2/Webwork, and Spring are far easier to setup and use, more flexible, or both.
2. EJB2 was an overengineered mess. EJB3 is viewed as far superior, and many major sites aren't bothering with EJB at all.
3. A lot of Java tools like Hibernate have moved from checked exceptions (which must be caught or declared to be thrown in the method signature) to runtime exceptions (which do not need to be caught).
The language definitely has warts. But the common open source (and for that matter, commercial) tools are learning lessons in ease of setup and configuration from Ruby, Python, Perl, Ruby on Rails, Zope, and so forth. (I used web applications as the example domain because that's what I know a little about. I understand similar enhancements are happening elsewhere.)
On the other hand, the language standard library is big enough and has enough corner cases that the learning curve is enormous.
The banking industry is very sensitive about the software it allows on its computers due to security considerations. At least one large bank completely configures its PCs from a master CD-ROM, and then locks them down so tight they can't blink. Want to load an Active-X control or install a new executable? Fugeddaboutit! In such an environment, a "zero-footprint" application can be very attractive. If your software is packaged as a web portal with advanced user interaction done in an untrusted Java applet, then provided they have a usable JRE in their master image you can sell your software as not requiring any IT action at the client side. In 2003, when I started my current job, .NET was just getting started and AJAX wasn't really big either; I paid the mortgage for 4 years writing a Java applet that's in use by plenty of major and minor banks around the globe.
BTW, I wrote the applet in Java 1.1.7 so that it could run both on OS-2/Netscape and Windows/IE; one of our largest customers was still using OS/2 throughout its organization until 2004 or so.
I enjoy coding in both Java and C#/.NET; at home I use Java since it's free and there are great free development tools to use with it; at work I program in both environments.
-- Conserve binary trees; recycle your email. --
I think arevos has pretty much covered my reasons for preferring Javascript's object model. Complexity is a huge huge huge red flag for me. I also dislike bondage-and-discipline type structures, and prefer dynamic typing, but that's a whole other can of toxic waste I don't want to open.
This is one of the reasons that is keeping .NET from getting more share. Many companies run systems other than Windows. Also more software is moving away from the desktop. Although Google Apps isn't as fully featured as MS Office, it goes to show you that you don't necessarily need a desktop app for everything.
Well, there's spam egg sausage and spam, that's not got much spam in it.
"well, TBH, there's Smalltalk too, but who, these days, is building anything substantial in Smalltalk?)"
Perhaps http://www.seaside.st/ ? Financial industry? If anything, Smalltalk is picking up a lot more momentum and popularity recently. It's a great alternative if you're sick of Java or C# or don't buy into Rails hype. That said, I agree with everything else you said. I too work with Java (and C#) quite often and I have to say that Java has so many open source libraries and support it's amazing and makes up for many of the things I hate.
To ask if Java were new we would use it today, while valid as an abstract and absolute measure, is irrelevant in today's software world context.
Java is HUGELY entrenched in today's business software market, probably even more so if one weights by overall company valuation (i.e. Java's market share by company valuation is substantial, perhaps even dominant).
Open sourcing it matters since Java's growth and maintenance matter, as the investment in Java is substantial and unlikely to change any time soon.
Java's never gonna be the hot young thing in programming again (if it ever was), but that's irrelevant to the question of open sourcing it. Java has substantial value, and open sourcing software of value matters. Doing things that alter the growth and maintenance plans of a heavily vested technology matter.
Further, this:
is a tautology. No developer can do everything with C++ either, that doesn't lessen its value or relevance. Neither does Java's complexity or unwieldiness lessen the value gained in being able to learn from and modify how it has implemented things.
I personally don't get this constant desire on some people's part to denigrate Java. Some sort of Comp Sci elitism for the business language?
Claiming open sourcing Java doesn't matter is like claiming open sourcing windows wouldn't matter; the same arguments apply. Windows is unwieldy and complex, and competing software generally does things better than windows.
I made a hell of a lot more coding Java than writing books about it.
Slow news day, huh? What's next, what Lawrence Lessig had for lunch, followed by moral outrage over being charged cash money for a product or service?
Technical point: if you really want insight, you're not a troll.
Hard to give you an insight, since you're obviously not a programmer: your criticism of Java is based on bad experience using Java programs, not creating them. It would be like explaining the fine points of carpentry to somebody who's never picked up a saw or hammer.
That said, most GUI Java programs are pretty awful, and those are the programs somebody like you is going to base your judgment on. It's a lot harder than it should be to write a good GUI application in Java. Too many fundamental mistakes in the GUI libraries early on, and too many weird kludges created to fix them and still maintain backward compatibility.
But Java works much better on in other kinds of applications, and you've probably used such without realizing it. If you own a Blu Ray player, than you've used Java software. It's embedded in a lot of other devices. It's also moderately successful as a sever-side application, especially on the web. Ever browsed a web page that ended in ".jsp"? The page was generated by Java software.
So why is it "better"? It's not, really. No successful programming language is. They all have their strengths and weaknesses, and the argument really isn't between the languages, it's between the programmers who favor them. Java is popular with programmers who don't want to do their own memory management and who thank that deliberately restricting the idioms you can use makes for cleaner, more maintainable code. C++ is popular with exactly the opposite kind of programmer, who values both the ability to manage low-level details, and to use and create complex, often arcane idioms.
Small example: in C++, you can define what operators like "+" mean with any kind of object; Java also has the power to define what you can do with an object, but deliberate omits the ability to express complex actions with simple operators.
You can add, alter and remove methods from an object at runtime, including built-in objects like Array.
I work for hotels.com. The same build script and code is used on Windows, OS X, and Solaris. No changes needed. At all.
Java was a good idea, but there are lots of other languages that came before that had all the characteristics you describe. I would argue that most of those already did a better job than Java but were marketed or supported poorly at various stages.
I use .NET every day as well as Java and I agree MS did a better job. MSIL is a great concept, but unfortunately too much of the framework has deep hooks in windows to work in whole cross platform. Mono of course tries to solve this issue, but I wish MS would be a little more careful about how much they bake windows into everything.
I think the answer is to use the best language for the job and that means Java is long from being irrelevant given the wealth of functionality available to us today.
So you better have to explain yourself what's really wrong with the type handling in Java. Maybe you program in some more obscure language?
If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
I program in Java because both for it's platform independence and for the fact that if you sign a Java applet and embed it in a web page you are pretty much able to do whatever a fully-fledged Java application could do, like access the full file system.
I know of no other platform that allows you to write true "web apps" that can rival the stand-alone ones.
Share Files To Large To E-mail
Actually, Java has lots of data....
Seriously though, the applets point is a joke. Applets were dead well before Flash was anything more than an animation tool. Applets always have and always will suck, that's why we have so much shit DHTML to deal with; it was easier to hack it together with a document markup and some (at the time) piece of shit scripting language that had to run correctly on up to six disparate platforms at a time, because even THEN it was easier and better than applets. If you think applets ever had any real significance to Java's maturity, I'd guess you've been off coding .net for the last 7 years.
Java is entrenched in business server apps, and overall that's probably still growing. 20 years? Try 80.
It was a joke.
include $sig;
1;
Python has the Global Interpreter Lock, which means even though there are threads, they don't execute concurrently. Too bad if your server has several processors / cores.
That's what fork is for. I had my fill of "everything runs in the same address space" in my MSDOS days--threads are just a return to that nightmare."Not an actor, but he plays one on TV."
As a counterpoint, I have yet to see a Java app that wasn't cross-platform. We must be looking at different sets of apps.
True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
You are right, of course, that I am not a programmer. At least not quite. I have written more code than the average business employee, but I a actually work on the business side of systems implementations, and only resort to coding when a coder is making a mis-understanding in the implementations of the business logic that was decided upon. In that regard, I am very much platform/language agnostic.
Modding Trolls +1 inciteful since 1999
Either you are a terrible writer, or your understanding of what Java does is very bad.
1) Java CPU usage is actually quite good these days, with modern VM's the code is all compiled on the fly and can be faster than C++ or C, but with no worries like stack overflows (there are always , of course, other worries...).
2) "Flash has destroyed Java market share". What market share? Applets on the browser never took off, there was no market share there to steal. Where Java went on to be huge, and where it continues to grow, is in enterprise web applications/servers and to a lesser extent desktop applications.
You think it's going to take 20 years to die, but use of Java is still increasing - and because the language is future-proofed to a huge degree that many other languages are not (like full UTF and localization support baked into every corner of every library) it will probably be around quite a lot longer than you are thinking. Ruby and other languages like it are fun for smaller projects but simply do not have the depth and richness in libraries that you need if you are building something to take on a huge load, or be a truly world-wide application.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
It matters because you don't have to toss Java out if you want to move to a free platform. This is a reduction of friction that's good for everyone. The choice of one or the other no longer has to be made. The "write once run anywhere" language will finally be what it said it was.
Friends don't help friends install M$ junk.
You're only 5 years late with this criticism. You anti-Java trolls are catching up to the present!
The company I used to work for was hit badly by Microsoft dumping VB (VB.NET is not VB, and don't mention the upgrade wizard) and I'm sure it's only one of many. We were hoping for an improved version of VB6 but Microsoft decided to wreck the huge investment we had made in VB code. We had spent years and lots of money writing VB code for our apps because it was easy and convenient with lots of business components available which were simple to plug in. The company just didn't have the resources to rewrite everything in another language and it was a pretty big disaster really. I just couldn't believe that with so many millions of lines of code and so much investment in VB6 from industry that Microsoft would just dump it, but I was wrong.
.NET were nice of course, but after Microsoft dumping VB6 I was quite worried they would pull some similar devastating stunt in the future. Unfortunately my advice fell on deaf ears and the gravitational pull of Microsoft products was just too great. It's a shame because a lot of the customers are now moving over to Linux, Java and various Open Source technologies as a matter of company policy.
The bosses asked me my opinion on what we should do next. We didn't really have a solution to the enormous cost of rewriting everything, but we needed to decide on a new language to adopt. After being so horribly stung by Microsoft on VB I suggested that Java would be a safer direction to go in. C# and
After the VB saga, I am very dubious of using any language which is controlled by a company (particularly when it's Microsoft). Clearly Sun still has a lot of control, but now with Java being Open source, it won't matter so much if Sun dumps Java. We'll have the code after all.
P.S. Trying to upgrade component by component using interop was hell and not really a viable option.
I'll take java over javascript any day. Javascript just sucks, I haven't had a chance to play around with the newer implementations, but most of the interesting features were only implemented in 1 browser or were implemented in multiple browsers in different ways. And at that time, you couldn't even think about taking it outside of the browser. Far easier to put java into a browser than take javascript out.
Sometimes things that were standard to most other languages would require an unwieldy hack to get working.
That being said, I'd like to see both fixed up and polished up to be a bit less quirky at times. But it is kind of nice with Java that you can overload things if need be or just write your own thingy-mo-bobs where necessary.
Admittedly a lot of that has changed, but still I'm not particularly inclined to trust javascript until there's been significant progress in terms of standards and standards compliance.
If you find Java's static typing inflexible and restrictive, you're doing it wrong. The great advantage I find with the level of restriction that Java puts on your types is that it enables brilliant development tools. Refactoring support is paramount.
Having recently completed a major refactoring of a Ruby project with tens of thousands of lines of code, I can say from experience that refactoring of an app written in a dynamic language can be a colossal pain in the ass. Just finding everywhere that a particular class is being used can take hours or days. With a decent refactoring IDE and a Java 5/6 (with everything generified) such an operation takes a couple of seconds at most.
Why do we the /. crown love Sun/Java?
Many of us used Sun boxes at Uni (I did) then suffered IBM boxes (although SMIT was quite spiffy) in our jobs. Strangely we started to wish we had the old Sun boxes back. (Or is this just me?)
Many of us moved from C (and C++) to Java, see above.
We love Java because we know Java, it does everything, and if you've grown with it, then it's OK. Sure, coming to Java from cold today it seems really complex.
Is Java perfect? LOL! No, not even close. But Java is fun to program in. Java programs aren't wedded to any particular OS/Hardware combination (I'd admit they don't quite live up to the "write once/run everywhere" promise, but it's close enough). Java has proved amazingly adaptable - and speed isn't really as much of an issue as the haters claim, if it was we'd all write assembler. Java isn't really far off the speed of C++. As for no multiple inheritance - do you REALLY want that?! There is a reason pretty much every phone has Java on it (don't tell anyone - but I quite like playing Tetris on my phone, thanks Java).
As for Sun, well they do make some really nice boxes, and they are giving us some great stuff (DTrace anyone?)
Badass Resumes
A car analogy would be more appropriate. .Net is like an automatic car, while Java is a manual car.
The first is easier to learn, and easier to drive in optimal conditions.
The latter is cheaper, consumes less, is easier to fix when it breaks, and is safer on rough terrain.
Which then destroys any code that relies on others not screwing around with core classes. In your example, for (var i in array) is broken.
Actually, I am trying to understand the subject. Never said I was a programmer. :-)
That being said, my question still stands. Eclipse, JBoss and (most of) the apache projects are really not tailored towards end users.
Where are the office apps, games, browsers, IM clients, etc. written in java?
Help! I'm a slashdot refugee.
No, seriously, you're wrong. Just because you don't see that Java is being used for a web site's back end doesn't mean you haven't been using it. Personally, I like Eclipse, but then I'm a programmer. I used to use Azureus, but since I'm mostly on a Mac, I started using Bits on Wheels. Not a crack against Azureus from a functional or usability standpoint, I just preferred the "wheel" in BoW. Totally arbitrary eye candy.
The problem with Applets was that AWT was a GUI framework built on top of a web browser, which is already a (wait for it...) GUI framework. The only reason Flash succeeded was because web browsers didn't have vector graphic support ten years ago.
As for Sun, they have given far more to the open source community than most give them credit for. NFS anyone? There are more examples, but just for a moment wrap your head around the concept of what if Sun never released the specs to NFS. What would the BSDs and Linux use to map file shares? CIFS/SMB aka Samba?
So let's take a look at Win32 MFC. That was written in C/C++. So did that framework suck so much? Answer: good code can come from any language where the developer is sufficiently skilled. Bad code can come from any language despite any intrinsic qualities in that language.
- I don't need to go outside, my CRT tan'll do me just fine.
If you talk about developing a UI though, no matter if you're talking about light client (web) or heavy client, I personally like .NET better.
Ignoring the parent troll for a moment, can someone please show an example of where multiple implementation inheritance is superior (not just equivalent) to multiple interfaces and the composition design pattern?
I've really tried to find a case, but ultimately fail. I even tend to agree with Gosling that abstract classes were a bad idea. On the other hand, I can name innumerable cases where MI causes more problems than it solves.
- I don't need to go outside, my CRT tan'll do me just fine.
I have never had a problem driving my .Net roadster. I get in, turn the key, and get rolling. Java is like having to build a kit before I can drive it. Great fun if you're a gear head. Not so great if your goal is to meet a business objective and your wife for dinner all in the same day.
That was a joke. ;-)
- I don't need to go outside, my CRT tan'll do me just fine.
Modifiing the structure of your code is a bad thing that you learn at school very soon. Also if you do enable variable to be any type and let the structure of your code be modified at runtime in the client browser this a big hole to security for web 2.0 applications... To bad, it's already here...
Most of the perceived "slowness" of Java desktop apps was a combination of loading the contents of the JVM into memory, and GUI programmers putting long processes on the AWT update thread. Neither is necessarily the fault of Java, but it is somewhat responsible for making it hard to do things the right way.
http://www.mhall119.com
Does .Net run on Linux? Well sort of if your careful about what you use? The Mac?, BSD, Solaris?
I have not messed with .NET and it might be pretty nice but does that make Java irrelevant?
See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
In Java, you can do so at compile/design (most of the time, that's when you should be doing it). JavaScript's great for small projects, but if you have multiple people working on a codebase, swapping things out at runtime tends to get messy very quickly.
That is, unless each of your team members clearly and comprehensively documents everything they're doing. Then again, a coder that writes good documentation is more rare than a Windows developer who wishes they had fork().
Quick and dirty coding techniques work for quick and dirty projects, not much else.
- I don't need to go outside, my CRT tan'll do me just fine.
Can I get an amen?
It doesn't matter how super-zappo your favorite language is if it doesn't put food on the table. Your likes and dislikes don't figure into it when it comes to a job. See Maslow's hierarchy of needs for further clarification.
Go to Careerbuilder and look up Java jobs. And while you're there look up .NET (which is pretty much Microsoft's Java). The jobs run 60/40 in favor of .NET. But there's dozens of them. High paying, too.
I'm currently studying for my Java certification. Why? Because I love Java?
Nope. Because it's good to have something to fall back on. I'll get a .NET cert too, as icky as that sounds. I have a family and I have to think of them first.
Weaselmancer
rediculous.
Of COURSE it matters. It matters a whole lot. The thing works out of the box and has been doing so for years. Security issues in JVM's are well ironed out.
I do not like the language that much, but the fact is that you can build once, run anywhare and you can do it in GPL now.
I think this is one more nail in microsoft's coffin: they will NEVER dominate the future. There will not be a dominant figure like microsoft was.
This is a brave new day.
NO SIG
More like 1999. The Hotspot VM was introduced in 2000, and I consider that the real turning point for speed in the VM.
If you mean Swing, the date's closer to 2004 or even more recent than that with regard to real graphics acceleration.
- I don't need to go outside, my CRT tan'll do me just fine.
please move along.
BALONEY.
I am running a java applet right now CPU is at 3%. That is with Firefox and Thunderbird. That is on a pretty old P4 so that is just not true.
As to it being ugly. Not really. With Java 6 under Windows XP it is hard to tell the difference. So you speed with the assurance of someone that pretty much knows nothing.
See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
...if I had asked the question in a different manner (ac+troll warning), I would have been modded down for troll anyways, and I actually did care.Except if you deliberately post as AC, most people will just filter you out. I would have, except that the filtering in the new system seems to be broken.
Also, you seemed to be posing as somebody technically less clueful than you actually are. Or maybe I just stereotyped you. Either way, I wrote a response that was a little more patronizing than it should have been.
404555974007725459910684486621289147856453481154 in hex is "You sank my Battleship?"
[GPG key in journal]
LISP is cool because it uses parentheses; therefore, if a language uses parentheses, it is cool.
I agree that make is atrocious, but that has no bearing on any other technology just because it shares a single idiom.
Correlation does not equal causation.
- I don't need to go outside, my CRT tan'll do me just fine.
Earlier today I visited some website which had a cool applet. I'm on a 64-bit system, and Firefox 3 complained about not having the plug-in. Hmm, I vaguely remember installing it long long ago. I had to fire up Konqueror, which worked. Don't ask me why.
Now I could probably fix the problem with installing hte right package or doing 5-10 clicks in the right place, but I didn't have the time to bother.
The point of an open Java is that with an open implementation with open plug-ins, I wouldn't have to do anything at all. It would be already integrated and distributed to me as I install my OS.
One step further, web admins would know that it's integrated and working out of the box, so they wouldn't have to worry about it not being there. Ever. Such confidence in a technology (or lack thereof) can make it or break it in large numbers. This is why Flash is successful - because everyone knows you have it. (That is not strictly true, as it doesn't work in my Konqueror but does work in Firefox 3. Go figure.)
Use the language that best solves the problem at hand...and never trust anyone who only uses one programming language :-)
Would that be http://en.wikipedia.org/wiki/Closure_(computer_science)? Because they are thinking about putting it in Java 7 (http://en.wikipedia.org/wiki/Java_version_history) If you really want to do it now you can use reflection to make and load new classes on the fly, but it will be messy and a bit of work.
except for Python, since it does it all better.
But seriously, even C# is a better Java then itself. Java really pushed the whole language concept forwards, but i wouldnt consider it a modern language. But people have used Perl, PHP, etc. for all these years even though those are stupid languages as well.
In the end, everyone has to use the language they deserve. Those who don't know any better could choose worse than Java ...
If it weren't for Java I wouldn't have NeoOffice for my Mac. ;-)
ConsultingFair.com
I don't know jacks smirking reven, but I know people that do, and just about every one I have talked to systematically abhors the troll and affirms that there is the consumption of babies.
But then, I don't listen to hearsay. There's a reasonable possibility that jacks smirking reven is a pretty nice person, and I'll reserve judgment for when we actually meet.
- I don't need to go outside, my CRT tan'll do me just fine.
You wouldn't do this to Array, you'd do this to (for example) display widgets that you don't have the source to, so you can instrument or extend code in a library you don't have source to that uses the widgets you don't have source to...
all your points are much better applied to C++
-Kz-
And both are infiltraded by Microsoft now a days... Nice analogy :)
if you do enable variable to be any type and let the structure of your code be modified at runtime in the client browser this a big hole to security for web 2.0 applications
Javascript needs the ability to control secondary interpreters, like Tcl does, so you can create explicit sandboxes at the script level like SafeTcl does.
Seriously, when the editor of a site that bears advertising gratuitously trolls the readership (as opposed to raising legitimate alternate views, playing devil's advocate, suggesting topics for discussion) it does look like they're trying to generate more ad revenue through bad journalism. The editors aren't under any obligation to not submit trollish arcticles. The readers aren't under any obligation not to block ads when browsing those threads. Just a thought...
As for Sun, they have given far more to the open source community than most give them credit for. NFS anyone?
Sun didn't "give" NFS to the open source community. Rather, open source operating systems had to start re-implementing it from scratch. Sun only open sourced it after it stopped mattering. That's adding insult to injury, and it's a recurring pattern with Sun.
There are more examples, but just for a moment wrap your head around the concept of what if Sun never released the specs to NFS.
We'd be a whole lot better off: NFSv3 and earlier is a piece of shit: it's insecure, unsafe, unreliable, hard to manage, and inefficient.
And Sun certainly didn't release NFS in order for open source operating sytems to clone it.
What would the BSDs and Linux use to map file shares? CIFS/SMB aka Samba?
Even that would have been better. SMB actually works pretty well with Linux these days. Or we might be using AFS or any of a number of other network file systems. Actually, most likely, we'd probably be using WebDAV.
The debate over dynamic vs static typing has been going on for half a century, and there is no compelling evidence to support the position that static typing is better than dynamic typing. Furthermore, among static type systems, Java's is not particularly good.
And if code bases never changed, I might agree with you. However, what happens when a superclass is changed, e.g., a new method is added? Much of the time, nothing. But what happens with MI when one superclass adds a method that already exists by name in another superclass? You end up in exactly the same solution as with SI; you use composition to arbitrate the ambiguity.
When interfaces collide, there is no issue. If a method is added to a superclass in single-inheritance, it rarely affects the subclass unless that subclass is too tightly coupled with private variables (the implementation) of the superclass; you'd be hosed with any change in the superclass.
MI may result in slightly fewer lines of code, but it makes for code that's harder to understand and more brittle in the long run. In short, it's little more than syntactic sugar with no programmatic benefits but several drawbacks with regard to complexity.
- I don't need to go outside, my CRT tan'll do me just fine.
Furthermore, I don't care what anyone says about .NET/Mono. It is a closed Microsoft technology that Mono will perpetually play catch-up to. It cannot replace what (Open) Java has to offer. .NET is only a small part of Mono. Mono is no more a "closed Microsoft technology" because you can optionally install .NET compatible libraries on it, than Linux is a "closed Microsoft technology" because you can optionally install Wine on it.
most of the interesting features were only implemented in 1 browser or were implemented in multiple browsers in different ways.
Javascript's been unfairly tainted by the horrible class *libraries* thrown together for reasons both benign and malicious (or at least based on lock-in rather than portability) in browsers. The lack of a good standalone Javascript is a problem, but not a problem in the design of the language.
Ok, this seems a cool feature. From what you are saying, this seems to be the java sandbox for javascript.
That first complaint is nonsense, as it can equally be applied to ANY language. The same thing could be said of .Net or C or C++. No single programmer will ever learn to do everything in one language. Still, experts can learn how to do nearly everything in one language.
That second complaint is trickier: "Second, and most important, even as Java has stretched outward to embrace more concepts and technologies â" adding APIs and language features as it goes â" newer, more lightweight tools have appeared that do most of what Java aims to do. And they often do it better"
That is basically true.
burrocrisy
and that would be what? Ruling by jackasses? Never has a slashdot misspelling been more apropos
You have limits in any language whether they be the inclusion of a semicolon at the end of a statement, the enclosure of a conditional in parentheses, or curly braces to denote scope.
To say that those constructs built into languages are acceptable but enforced indentation is not is an arbitrary distinction. It has nothing to do with its worth or lack thereof. You have decided what you prefer and are fitting an argument to that conclusion. Philosophy does not enter into it.
A computer doesn't care whether your programming language enforces indentation. All the computer needs is an ordered sequence of bits and bytes in just the right combination to return a desired output. Computer languages were meant to be a human-readable alternative -- their sole reason for existence. If you don't think that the indentation makes the code readable, that's a valid argument though I would disagree with it.
However, I don't believe you have a "philosophical problem" with indentation on the basis of enforcement. Enforcement has nothing to do with readability, and readability is all that really matters with a language. Anything else is personal preference, which is perfectly valid, just don't frame it in the guise of a more noble cause.
- I don't need to go outside, my CRT tan'll do me just fine.
...
bloated in memory usage and CPU usage in comparison to cleaner C# or C++ ...
While I won't entirely deny that charge, I will say that Java's memory requirements have diminished (slightly) with improvements to the JVM. But more important than that, is the fact that most reasonably new desktop systems have 2-3 gigabytes worth of memory, and several hundred gigabytes of hd space. The extra memory overhead simply isn't a very convincing reason to avoid Java any longer.I was going to have a amazingly funny and clever sig, but I forgot, and failed miserably.
Nonsense. If you're wrapping an if() {...} around a region of code, you still have to know where to insert the curly brackets. Once you have the region marked out, most editors can indent that region for you. Even if the language is Python. For example, in Emacs, you select the region, then type C-x C-i to indent it. Simple.
I quite enjoy Java and find it to be a great language. My only complaint is that they fucked up java for web sites / apps.
Why does java have to be some complicated, delicate and have 6 millions different ways to do something where as you can get on with developing something in PHP quite easily? Sure to make something great you need to know the html to go with PHP and javascript but you need to know those with java plus decide if you you are using struts, spring, seam, groovy, JSF, etc and, while knowing one may make it easier to transition into another job using something similar, it's still a pain compared to moving between PHP based development jobs.
It is true that if you wanted to know everything about Java it would be impossible. You can't know it all and be excellent at it but there should only be three clear sides to it. The desktop app side, mobile and web.
The only one I can think of off the top of my head is azureus (now zune), which is not exactly known for it's small resource footprint. In the closed source freeware realm, jalbum is available and quite nice to use.
You mean, aside from major IDEs? NetBeans, Eclipse, and JEdit to name a few. Also, there are a considerable number of simulation libraries for various fields written in Java. I use Repast quite often, and for a while was using a particle physics system (the name of which escapes me at the moment), both of which are written in Java.I was going to have a amazingly funny and clever sig, but I forgot, and failed miserably.
Is there an article on /. that questions FLOSS?
Here be signatures
What kind of applications are you building? (it is an honest question, not out to get you)
Have done quite a bit of coding in java since -99 I think, mostly on win and linux on the pc, but also some hobby coding for mobiles later on. Apart from having to know your libaries (when a certain feature was introduced) I have had no problems of this kind. I do remember waiting "forever" for the linux version to go beyond 1.1.8 though
I've always felt that java was somehow ruined by version 1.5. Before that, although it may have lacked some nifty constructs, the basic syntax of the language always felt very coherent to me. If you look at the majority of the older API there was also a lot of thought going into how it was put together. ("Effective java", anyone?)
Although I've tried quite a few languages, java and in particular the jvm is what I like. There are a few others languages that where eye openers, but they where not created to keep simple things simple and complex things possible. In addition, just looking at some jvm assembler code is a good learning experience and can teach you quite a bit about java in particular and processors in general.
Instead of abandoning the jvm, how about getting your favourite language running on it instead?
She made the willows dance
``if Java really were released today, brand-new, would it be a tool you'd choose?''
No, I wouldn't. Back in the day, I did. I didn't know much yet and Java was pitched as being the great new thing that did things the best way. I bought into the religion.
Then I got disappointed. My programs were slow. The APIs didn't work the way I had expected them to work. It was needlessly verbose (Foo foo = new Foo()), needlessly ugly (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("something")))), and had sillyness like "Iterator iter = people.iterator(); while(iter.hasNext()) { Person person = (Person) iter.next(); ... }".
Java has since improved. Since 1.5, it has been a lot better. But I have learned a lot more, as well.
I now know that there are *lots* of programming languages. I now know that I like some of these languages much more than I do Java. I also know that for every shortcoming I percieve in Java, there is another language that does it better. And even things that Java does well are often matched or exceeded by other languages.
I also know that, for all Java was touted as the Great New Thing, none of the things it "introduced" were actually new. It had all been done before. Of course, what was new was Java itself; the whole package. It lacked many things that other languages already had, and since then, a lot of time and effort has gone in designing and building things for Java that already existed for other languages and platforms.
I feel bitter about Java. Not because I think it is absolutely terrible, because I think it is a fairly decent language with a lot of good ideas in it. But I feel bitter, because I feel it has wasted a lot of time and led us away from what could have been. We already had great languages, great platforms, and great tools. The hype around Java eclipsed (no pun intended) all that and got amazing numbers of talented people to write tools for Java, add great ideas from other languages to Java, etc. etc. I still don't think it's there yet, and that has everything to do with the shortcomings of Java as a language and misguided decisions by designers - in general, most things in the Javaverse are terribly over-engineered. So, instead of working with the great things we had and making them even better, we've spent our effort getting something mediocre on par with that. I feel Java has been a huge setback in that respect.
On the other hand, Java _was_ actually an improvement for many. In that sense, I feel it, and its evangelists, deserve credit for _improving_ the world.
It's really a mixed bag. But on the whole, I resent it. I'll work with it on ocacssion, but I won't choose it. Not if I have the freedom to choose something better suited to the task.
Please correct me if I got my facts wrong.
I remember when Java was a hot new language. Even then people had epithets for it. Microsoft and the open source community have always been the biggest Java haters. I think both groups hate it because Java wasn't theirs.
You obviously don't understand what interfaces are for.
Yes, defining the interface means only specifying method prototypes. That's the point. I can use (I'm a C# programmer, not a Java programmer, but the principle is the same) IDisposable, an interface to ensure cleanup of resources, regardless of what kind of object it is. Or I can use ICollection in order to guarantee that a wide variety of different data structures implement the same functions, though the underlying implementation obviously must differ.
The entire intent of interfaces is to provide a contract that can be effectively implemented by disparate object types. Nothing else.
If you need to write functions that must be able to interact with a set of classes that are similar, not inheriting them from a shared parent class in which the interface is implemented is stupid. If you need to write functions that must be able to interact with a set of classes that are not similar, then obviously the individual implementation of the programming interface for each class will have to be done anyway, so why are you complaining?
Static typing has warts. This is not one of them and your categorization of them as such belies your ignorance.
"You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
It's basically a marketing ploy. Who acually looks at the Java VMs source? ... Right. ... To a certain extent, no body cares about licences, unless the experience lock-in or Win XP / Windows Fister getting pissy over some hardware changes. In a sense, MS has been actually drawing attention to its own EULAs since Win2K. With mostly negative effects.
It takes open sourcing to reach opinion leaders. Java was taken for granted even before it went GPL, but now everybody know it will never go away. If Sun goes south, then IBM or some other company will pick it up without missing a step. It has fully moved from a product to being a technology.
But I don't think open sourcing Java or not makes that much of a difference for Sun business wise. That's why I think it was best for them to GPL it. They have little to lose and quite some attention to gain. And attention they did gain. Sun is on the radar of a whole new generation of admins once again. They'd be my first pick if industry strength servers where needed.
The industries opinion leaders all almost all Linux and OSS advocates. I actually don't know a single MS-oriented guy who has the last word in technology decisions. I *do* know MS people who admit that they don't know as much about computing as *nix people. The bottom line is: If nowadays you want to be taken for granted by developers that matter, you have to play ball with Open Source. Especially in technologies people are expected to develop against. Adobe, Sun, IBM, they all know this. MS is about to learn it. The hard way.
We suffer more in our imagination than in reality. - Seneca
Throughout my career, I've used a mix of dynamically and statically typed languages. In my current job, for instance, I've worked on programs in C#, and programs in Ruby. I get very few errors in Ruby that C#'s type system would have prevented, and those errors that occur are generally quickly apparent. It's pretty unusual to pass the wrong type of object to a function, but it is common (for instance) to have problems with nulls and nils.
Java's type system is geared to address errors that are relatively rare, and easy to catch. In order to achieve this rather unimpressive feat, it sacrifices a whole bunch of functionality that dynamic languages possess. To my mind, it's not worth the trade-off. I'd rather Java restrict nulls, or mutability, or race conditions, or something that results in a lot more errors that passing the wrong type into a function or data structure. Java sacrifices 80% of its functionality in order to catch 1% of programmer errors.
I suspect (or at least hope!) that Taco was being a bit tongue-in-cheek with this entire post. A Perl guy criticizing another language's learning curve?!?
Still, addressing the point at face-value, I fail to see how the large array of Java libraries and frameworks is a liability rather than an asset. Sure, nobody can learn ALL of them... but neither is anyone expected to. You learn the libraries and/or frameworks that are relevant to the task you are trying to accomplish. How is this worse (or even different) from the suggested alternative... learning entirely separately languages for each task? For all Java's issues with version compatibility, etc, at least learning that language gives you a common platform from which you can tackle almost any problem. You can pick and choose the libraries and frameworks that are best suited to the task at hand, and at least have the possible option of later integrating it with other Java code without having to go through pipes or services or some other loose-coupling technique.
For the problems that Java does have, pretty much the only reason why they aren't shared by "newer, more lightweight" technologies is because those haven't been around long enough yet for version compatibility to even be a concern. For any given example of technology, check back with me in 5-10 years and let me know how its maturity lifecycle has compared with Java's.
Parent's link is GP's post :P
Really? I see it in almost every story on Java (which, admittedly, are fairly few and far between) and on many stories about other programming languages (when someone will inevitably make a Java comparison, sparking off a long thread on its pros and cons.)
The threads almost always start with someone talking about how slow Java is, and then people will reply to explain that the newer versions of Java have really been tuned to be fast. That combined with JIT, they say, makes it nearly as fast as code compiled in C++.
Is it true? Who knows. I've never bothered to go find out because I simply don't code that much anymore. But it does get repeated quite a bit.
Since the OSS community now has a JRE which is certified for Java 6, a closed source Java is not worth nearly as much as it was. So now Sun isn't really losing much to make the real Java open sourced and they get to look like good guys in the OSS comunity.
-- Many men would appreciate a woman's mind more if they could fondle it
4. So is C++, your point?
You raise an interesting point. Cross platform compatibility is an area where the user has to research. However, with Java, no matter what the user does, the program will STILL be cross-platform, simply because it depends on a cross-platform runtime engine.However, with C++ you can make mistakes and link to a function that is not present on all platforms. You have to be much more careful with that. However, it's not C++ that is not cross-platform, but the application API's. Can we really complain about C++ portability problems when the main problem with portability is Microsoft Windows' undocumented functions and bad documentation?
It wont make it better for my Java exam tommorow :)
"ava isn't really far off the speed of C++"
That is only true if you compile it, effectively loosing all the other benefits you claim.
I don't think I claimed Java could actually live up to "write once run anywhere" - quite the reverse actually, I said it was close enough. Compiling it doesn't change that - it's still very portable. Might need compiling again. I don't understand the point your making. "(don't tell anyone - but I quite like playing Tetris on my phone, thanks Java)."so? I can play C# games on my phone, talk about logical fallacies, sheesh. Most phones run Java, in fact most everything runs Java - that's kind of the point. Would C# exist without Java? Seriously, would gaming on phones be the same without Java (I mean if Java had never existed)? I seriously doubt it, sure there would be games - but things would be quite different.
You go right ahead and sit there thinking that without Java there wouldn't be any applications on your phone.
Don't worry, I don't think that Trouble shooting any large Java application is a nightmare.Trouble shooting any large enough application is a nightmare. In my experience.
> The only reason Flash succeeded was because web browsers didn't have vector graphic support ten years ago.
Try drag and dropping an SVG file onto a Firefox 3 window. Browsers STILL don't support vector graphics.
(And, for some totally strange reason, you can't drag and drop an SVG onto Safari under Windows either; you can drop it onto the address bar, but not onto the window itself).
For 8 years of Java development these:
"how many times have you run into a NullPointerException in Java? Or ran into a race condition when dealing with threads? Or not properly sanitized user data? Data processing loops overrunning?"
Except for rare NullPointerExceptions, had little problems with any of those... if any at all.
In Ruby, you can construct methods that are more expressive, so the core architecture of your application should be relatively small. Everything else should be business logic and presentation, and separate as much as possible from the underlying architecture. If your application is "tens of thousands of lines of code", then presumably it's an application with dozens of separate chunks of functionality. Why not farm these out into self-contained gems? Then you wouldn't need to refactor the whole lot.
Hmm? Perhaps you intended to reply to somebody else? I didn't say anything about cpu consumption.
...and languages like SML or Haskell have this rigour within their type systems. Supposedly Scala (which uses the JVM) also has a rigorous type system but there's a language complexity price. Folks programming in Java can get around those problems by using "Good Engineering Principles" (see the "Static Typing's Paper Tigers" section) and if the Java folks don't need to go the whole hog on their type system...
"Where are the office apps, games, browsers, IM clients, etc. written in java"
Office apps? They tend to be in offices.
Games... Cell phones.
Browsers? Cell phones.
IM? Cell phones.
There is nothing stopping you from writing an IM client in java. Browsers? The truth is that there are very few of them at all.
If you mean mainstream on the desktop stuff? There are a very few real applications that people use that are mainstream desktop stuff. Most all of those are written in C or C++
See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
for (var i in array) is fragile anyway, and there's nothing that mandates you to override a core class, rather than a wrapper.
Static typing sucks. It might catch the 0.1% of use cases where a programmer confuses the types of arguments and calls (or tries to call) code with the wrong argument types. That kind of error is typically picked up during testing anyway.
Dynamic testing is far more flexible. I can write functions which accept objects of various types as function arguments without having to kludge up my class hierarchy to make them all inherit from some common parent class, or all provide some specific interface.
Interfaces is a really great idea implemented in a really lame manner in the language. As I understand it, defining the interface means only specifying prototypes for the methods and arguments within the interface. No functional code. So you have to write the code for the interface yourself (in your class, or a parent class). And because Java doesn't have multiple inheritance, you can't just write the code relating to the interface only once - unless you can add it to some common parent class. And if you _do_ have a common parent class, you don't need to use the interface mechanism!
in Java you can cast any type to another type (excluding the numbers int,long and stuff which can be cast to each other) e.g.typeA a = new typeA();
typeB b = (typeB) a;
null
Java's speed is equal to C++ using in many ways. And probably run faster without compiling it as it is optimised allot whilst running in the JVM.
null
Hah, at least you're honest...
90% of the stuff I use written in C++ and VB and Python is also kludgy and prone to failure.
It's not the language, it's the author.
Java epitomizes the whole write-once-run-anywhere wish all us developers wish were reality. It's pretty close, but implementation and platform differences still exist. The fact though is that writing file system and socket code and complicated DB-centric software is easy with Java, and it has a huge and robust toolset built around it.
It has it's failings, just like any other language...
Is it true? Who knows. I've never bothered to go find out because I simply don't code that much anymore. But it does get repeated quite a bit.
I haven't taken the time to look for studies or to do a scientific comparison myself, but I do know this: I haven't had a performance issue that was Java-related in quite a few years now. Even on my six-year-old notebook, a Fujitsu Lifebook P-2046 with a 800 mhz Transmeta Crusoe (it was slow even for 2002), Eclipse runs about as good as Firefox 3 does (translation: they both are barely usable). On any moderately decent hardware, Java apps run very well; even load times are no longer an issue.
The end result is that Java with Hotspot runs in the same order as C/C++, maybe a factor of 1.5/2 slower (if you're careful). Pure Python and Ruby will always run one order (factor 20 for Python, 40 for Ruby) slower because a function call is an expensive operation.
The only way to get speed out of the dynamic languages is to mix them with C. Python is pretty good at that, and I consider PythonWithEmbeddedC a reasonable language, yet a bit clumsy.
Kind of, though a restricted interpreter in Tcl is in some ways more secure than the Java sandbox because it doesn't just add checks blocking "dangerous" calls from the Safe interpreter. Instead it completely removes them from the interpreter's symbol table. Not only can't the interpreter "do" unsafe things, it can't even think about doing them. :)
Compiling java doesn't lose the benefits - I've heard this argument a few times and it's bizarre. You can compile it on any platform. You only need to write it once.
And as for troubleshooting, what makes Java any harder to debug than any other language?
is that it remains the language of choice for real complex scientific and engineering challenges, especially time-critical/real-time systems, which the newer languages typically don't address well.
I've been poking at the D programming language and started to wonder why it's not more widespread inside of this niche:
http://en.wikipedia.org/wiki/D_(programming_language)
Anyone know why?
Tweet, tweet.
The open-source crowd always plans the same cynical game: "I will boycott your product publicly until you open-source it. How *dare* you keep it closed-source?! ... what? You open-sourced it? ... hmm, well it doesn't really matter anymore, I'd rather use something else".
Do me a favor, stop telling the world that the only reason people don't use X is because it's not open-source. Open-source is only a tiny fragment of what matters. This melodramatic fan-boy attitude ensure no one takes open-source advocates seriously.
No. JavaScript is a scripting language, whereas Java is a full-fledged programming language.
I've never particularly understood this distinction. What's the line? Is it whether or not you can allocate raw memory? Is it whether or not you're writing primary constructs in the language instead of operating on API/library exposed constructs?
It can't be whether it's interpreted or not, because that has nothing to do with a language -- that's an implementation issue. Unless it's like Perl or D, where the language is defined by what's accepted by a given interpreter or compiler....
Tweet, tweet.
Nope I was replying to the AC. Just hit the Parent button on my post to see it.
See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
Javascript has a more consistent object model.
Quick, how do you get the length of an array in java? Now how do you get the length of a string?
array.getLength() and string.length()
Compare to javascript:
array.length and string.length
If I were to say what the #1 problem with java programmers (programmers mind you, not the language) it's their irrational fear of variables. Every damn thing is a method. Can't have a variable without do-nothing getter/setter methods wrapped around it.
The GIL does get released at certain strategic points: when Python does I/O (or rather, waits for its completion) and when calling an extension module that releases it. In both cases multiple threads *can* run concurrently. It's mainly when the interpreter is executing byte code that only one thread at a time is active.
Array length: arr.length
String length: str.length()
"If I were to say what the #1 problem with java programmers (programmers mind you, not the language) it's their irrational fear of variables. Every damn thing is a method. Can't have a variable without do-nothing getter/setter methods wrapped around it."
That's a good design. It'll look much better than properties will be added to the language later.
At work I write Java most of the day most days so take this with however much salt you do/don't want...
The issues I have with Java nowadays are memory (not using too much, but enabling the JVM to take advantage of the physical memory in the machine and not complain that it's out of memory when it's only used 30% of the RAM available. It's not such a huge problem but it's my annoyance:)
The JIT compiler is very impressive - it keeps basic profiling data when running the code as bytecode & compiles to native after 1000 executions of some code (that's configurable). This allows it to do some really cool jump rewriting, inlining, unravelling or simply optimising getters out of existance. There's a pretty cool debug jvm you can use to show the x86 asm generated from a class & if you call an empty method in a for loop the jit inlines it, then throws away a loop that doesn't change the program state. (spot the compiler geek)
Global symbol "$deity" requires explicit package name at line 2. - If only $scripture started "use strict;"
Code modification requires you to be a lot more carefull about what you are doing. It is very powerfull, yes, but needs to be done with care. I suppose this can be different for some languages. I do not pretend to know all.
This is sure that input validation is required. Web 2.0 or any remote application, requires remote validation on the server side. If you read old programming books, input validation is there. And if you follow web security course, they will repeat, first this to do, validate input, and secondly validate input... If I can give an advice to web developper, validate, we will have less security problems on web sites.
Many java server side librairies make this validation not so tought to do. Many other languages do also, I know...
I think your statement confirms the above analogy. Having developped Ks of lines of code in both languages, I can say that it's easy to prototype with Visual Studio 200(5|8). However, for serious enterprise stuff, .NET has a lot of catching up to do.
Java may have a steeper learning curve, but it's mighty powerful once you really get into it. I love JEE!
Oh, and have you tried to develop .NET stuff without Visual Studio or any another IDE?
Goodbye Slashdot. You've changed.
I saw this higher up in the comments and shrugged it off. But now I have to ask - huh?! Java is a compiled language. (are you confusing it with javascript, which is completely different and only shares the name?). Java's JIT works automatically, profiling bytecode as it executes and when it's ready, translating it into x86 instructions. By doing this it can do the sort of optimisations that C++ is incapable of doing - it can reorder an if condition or do some incredibly aggressive inlining (it'll even inline 3 method calls deep when its profiling indicates there'd be a performance advantage).
Troubleshooting a badly written application is always a nightmare, troubleshooting a large application can be a pain. You can do all sorts of nice things with debuggers, too, to figure out what's going on - and Java's definitely easier to debug than C or Perl
Global symbol "$deity" requires explicit package name at line 2. - If only $scripture started "use strict;"
I didn't realize that I LIKED programming until my OO class (taught in Java). Pascal was okay, I guess, and assembly was interesting but tedious and frustrating. Java brought back that kid who played with lego. I could build objects that did stuff in it, and I didn't get confused when the program got larger!
I'm sure there are better OO languages (i use C# mostly now. Don't judge! I'm working on ObjC/Cocoa.) but this was the one most of us learned on. For those who love OO programming, Java gets credit where credit is due. I'd call it the first successful OO language. C++ is used a lot, but it arguably isn't a succcessful language from an OO perspective - too complex, and there's too much procedural C++ code out there.
Jeremy
Why do we the /. crown love Sun/Java?
Isn't using the royal "we" in a programming discussion a little pretentious?
It would actually have some new features. Instead, Slashcode is just a clusterfuck to maintain and enhance. PERL has its uses, but you don't see many people writing content management systems in PERL anymore. Hmmm, I wonder why...
Yes, that was my point.
"Not an actor, but he plays one on TV."
Well, the elegance and simplicity of comprehensions comes to mind. Frequently one line of Python can be used instead of the equivalent half-page of Java...
"Not an actor, but he plays one on TV."
3. It's fast(er). Older Java GUI stuff was not fast, and it gave people the impression that all of Java is not fast. Well, Java 1.6 is fast.
4. It's cross platform. This isn't a big deal for me so much, but it might be for some people.
These two work for me. I'm implementing some data warehouse load and cleanse routines right now, using 1.5. I need them to work across windows and Linux. I need them to be fast on meager hardware. I benchmarked one of them at ~1200 records/sec today, which is nicely within what I need. This was running with a laptop as the load client, and a four year old AMD as the server. I know it's not going to spin any heads, but it's excellent for what I need. And it runs perfectly on Windows, Linux, and can be made to run under Z/os, which is a hurdle I need to jump for the MF bigots in the mother company.
I like Perl, I like Python, I like Ruby, but Java/JSP is what I turn to when I need to do real work.
I was taught to respect my elders. The trouble is, it's getting harder and harder to find some.
Under ordinary circumstances vertical monopolies tend to cause legal difficulties(Microsoft doesn't come close to having one, and they're horizontal monopoly is pretty much restricted to desktop computing and they've been sued a few times already). However if you open source your software then you can't possible be a monopoly because all your stuff is ideologically free.
There's also the added bonus that free as in beer software can be used by smaller businesses who will then already be using your infrastructure when they become big companies who pay for support.
Normally this would all just be a legal ploy, but Sun is also trying to play a game of catch up because despite being the authors of a lot of the standards that allow the other guys to play the game, their implementations have been pretty awful, so Sun needs to improve their software dramatically in a short period of time and they think that having open source developers will help them do that.
Sun probably thinks that open sourcing java might help them get the developers they need.
All that is fixed by having an architect in your team. Not all projects are single people projects, anyways. .aspx's look awful!
I have extensive experience both in Java, and MS platforms. I am working on C# right now. For me, barriers to entry mean nothing. You only need to configure Eclipse once, and build your foundation classes once.
I invested weeks of my life getting Java to work great. When I get to hire people to work with me, they won't have to.
Now I'm hired for a big ASP.NET project, and the environment was set up faster, but also we ended up with a design from the eighties, that gets in our way every time.
Lack of OR mapping is awful.
Lack of a fully implemented View layer makes me do all the presentation work myself, and makes me slower.
Two way binding doesn't work for nested objects!!! Give me a break!! This framework is BRAINDEAD I say. BRAINDEAD!!! I end up doing lots of casts in the PAGE!! My
And those Datasets, they are funny. Try to use some complex datatype like a Guid, and the Table Adapters start laughing behind your back, waiting for your reaction to their behaviour.
And don't get me started with the IDE. It feels like traveling back in time. Random lockups in a powerful machine, lack of search everywhere, braindead cursor navigation. I don't know how I put up with this.
It's ok if you want to do some fast prototyping, I give you that, but right after that, you have to fight your way through it.
(Sorry about the yelling and whining, I just had a "couple" of bad days at work!)
your criticism of Java is based on bad experience using Java programs, not creating them. It would be like explaining the fine points of carpentry to somebody who's never picked up a saw or hammer.
Actually, if I may riff on your metaphor, it's exactly related to carpentry. The question is, when one sees a poorly built cabinet, was it the fault of the carpenter, or did he not have the right/best tool. We're simply arguing over whether Java is a sufficient tool to build a quality cabinet. I think most would agree that it's sufficient.
As with carpentry, there are multiple preferences in tools, and a good carpenter can often do better work with poor tools, than a poorer carpenter with better gear.
Particularly in internal, IT developed apps, there are some atrocious apps out there. I'm not sure it's fair to blame the toolset. I've seen crap developed in C++, VB/.Net, c#, and Java, all in the last 6 months.
I was taught to respect my elders. The trouble is, it's getting harder and harder to find some.
Is it possible to store profiling information between runs? That's the big difference I see between in-house C++ and Java. Sure, after 1000 runs of any given function it may be optimal (and better than the equivalent statically-optimized C++)... but what about before then? For real speed, I find myself compiling C++ code with profiling enabled... then running a real-world load test... then recompiling with profile feedback, which can substantially improve code generation.
If the Java JIT could take optimizations from one run and apply them to the next, that would be awesome. But if it can't, then it's worthless (to me), because it means that restarting a latency-sensitive application means "forgetting" all of its optimizations.
What do namespaces have to do with object models? I've never seen an ad-hominem attack against a programming language before!
Well, if you talk in terms of OS, then the option is obviously dependent on what servers you have access to. UI though, including the web side, I find Java much less handy (or overly complex sometimes). But then I haven't use Java for UI for a while now. May be usability have improved since the introduction of JavaServer Face matured, or may be they now have better development tools. And, I never said Java is irrelevant in my last post. I use jEdit, Azureus, OpenOffice etc., and had also written some simple tools in Java. So I definitely won't say it's irrelevant. I'm only saying that I prefer .NET when programming UI, according to my own experience.
Is Java faster? Yes. But the first dynamic language (AFAICT) in this benchmark is only 18% slower (SBCL). Not exactly compelling evidence that all those obsessive-compulsive type annotations buy you much
And if Lisps make your eyes glaze over, Python (+ Psycho) is only 3.4 times slower than the fastest Java in that benchmark. Hardly an order of magnitude.
And dynamic languages can get much faster.
Open source Java does matter. We cannot rely on Sun to supply the JVM for all systems and I for one am sick of IBMs JDK, GNU's Java and Sun's Java each doing their own thing and fscking up the concept of portability.
I am however suprised at the speed of Python+Psycho though. It must have come a long way as last time I looked it was roughly twice as slow. One word of caution though with this combination: you need to refrain from using much of python's dynamicity to be able to let psycho do its job. Effectively psycho figures out type information at runtime to eliminate the overhead of dynamic dispatch.
Overall the score is: Java 2.64, Python + psyco 9.22 (factor 3), Python 26.66 (factor 10), Ruby 76.56 (factor 25).
"The great advantage I find with the level of restriction that Java puts on your types is that it enables brilliant development tools."
Brilliant development tools for dynamic languages were around long before Java appeared. LISP machines and Smalltalk's browsers and the old PARTS visual component wiring environment come to mind here. These notably sophisticated development environments ran in significantly less memory than a modern CPU has in its internal cache on processors clocking at a few MHz.
"I can say from experience that refactoring of an app written in a dynamic language can be a colossal pain in the ass. Just finding everywhere that a particular class is being used can take hours or days."
I suggest therefore that you explain how people managed to write first refactoring tool (the Refactoring Browser) in and for for Smalltalk, a dynamically typed language.
http://c2.com/cgi/wiki?HistoryOfRefactoring
Forth, an interactive non-typed language, has also used the term "factoring" to refer to what's now called refactoring since the early 1980s. It's something LISP programmers have also been doing since at least the 1960s, although the nature of LISP meant that no special tools were required.
I'm not going to change your sheets again, Mr. Hastings.
Maybe you should program in a dynamically typed language, then :)
For all the hype of Ruby on Rails, etc., the cold reality is that you would have to be a pretty foolhardy architect to recommend it for anything mission critical. Java might not be sexy but it does exactly what it says on the tin.
Its great news that its been open source, especially for Linux. But what it means in practice remains to be seen. I expect what it will mean is random bug fix submissions but little else but in practice Java is going to get governed the way it's always been governed. People will branch Java of course but just like Firefox, I doubt it means they can still call it Java.
No, they are only per-run - although just as in C++ you can attach a profiler and optimise in your code... I'm not a fan of Java for client apps or apps which restart frequently, though
Global symbol "$deity" requires explicit package name at line 2. - If only $scripture started "use strict;"
I don't really think the trade-off is in static typing and catching errors.
I'm not so sure. JIT compilation can do a lot to mitigate the performance impact of hash-lookups. The author of Psyco, for instance, holds that an expressive language like Python could theoretically run faster than C, because the compiler has access to more information with which to optimize the code.
My experience with Clojure seems to bear out this claim. Clojure is a dynamically typed language for the JVM, and uses reflection by default to access Java objects. However, you can supply functions with "type hints" that the Clojure compiler can use to optimize the code. With type hints, Clojure runs as fast as Java.
It seems to me that a clever enough compiler could make a good guess about what type a function would receive. If it was a JIT compiler, it could work it out through observation.
It's not fashion, it's practical experience. Perhaps you're a windows user? (They seem to get a much more performance-tuned Java, which is fair enough on sun's part really given the marketshare, but could account for the difference in opinion).
I am trolling
My word, what planet are you from? Never has there been a more hideous and uncomfortable language to write than Java.
I am trolling
Get it right, Sun own MySQL.
Java, Apache, MySQL, Solaris.
See opinion, you can argue the merits of this language or that language, but it still comes down to personal preference, opinion, or what your employer requires.
So to alot of people Java Matters.
I am one of those people, unfortunately ;-) ./peaCe
Awesome!
Java has certainly come along way since its start; however, it is still a slow beast. Though that is probably more due to its engineered/layering approach to programming than anything else any more but the bytecode nature doesn't help either - and never will. (I.e. the more layers you add the slower it goes, typically and irregardless of language.)
That's only true if it supports the platform you work on. For example, Sun's JVM is not very platform friendly at the moment. Sure it supports the native OS/processor sets for the standard proprietary OS's (Windows/x86, HP-UX, Solaris, etc.) - but once you run Linux, you're pretty much stuck to the x86 processor series in 32-bit mode. So for those of us running a 64-bit mode or other processors, the open sourcing of Java will make a great big difference. We can finally get native support.
Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
And why bother to develop .Net without Visual Studio? That's like saying you want to pound nails with a screwdriver. Use the right tool for the job.
Java's existence as an effective (if not always efficient) competitor to Microsoft is, in my opinion, the reason why both languages have matured as rapidly and as well as they have. I'm glad we have both.
You'd be surprised. The code I write processes files > 10GB in size. From 1.4.2 -> 1.5 we got an order of magnitude shift in speed. From 1.5->1.6 we'll another order of magnitude gain and cut the memory consumption for the entire Java process in half, and this is without any refactoring of our code, just because the JVM got better.
Sure, if we wrote the same code in C++ it'd probably be faster, but I'm not convinced the improvement would be worth the extra development time required.
I'm not sure what you're talking about here... there's an x86_64 JVM installed on my Kubuntu 8.04 machine right now.
Strip out J2EE (except the servlet engine) and you've got a much simpler language. J2EE was an evolution in a shit-ton of best-practices that really didn't seem to pan out very well. Software is still hard to write, hard to maintain, hard to build extensible, reusable engines...
I can't tell you the amount of C++ libraries that I've chewed through over the years and the horrible experiences I've had getting different mallocs to work together, debugging combination debug and release configurations...
Carpentry and software development are very different in this respect: carpentry is old (one carpenter better known for his religious teachings lived 20 centuries ago, and it was an old craft even then) and software development was invented within the memory of people still alive. Carpenters have had a long time to refine their toolset, whereas programming tools are very much a work in progress.
Also, "sufficient" is not a meaningful concept here. Any Turing-complete programming language is sufficient to write any program. There's a sort of quasi-sufficiency issue with low-level languages (doing a serious modern software project in machine language would consumer many lifetimes), but once you get past a certain point, all languages are sufficient, even the poorly designed ones. It's just a matter of whether the tool meets the particular programmer's needs.
An interview with Erich Gamma.
- I don't need to go outside, my CRT tan'll do me just fine.
Firefox requires a MIME type, which is not available when loading from the filesystem. Yes, it's lame, but that's the state of things.
- I don't need to go outside, my CRT tan'll do me just fine.
I suspect most of the time the problem is the developers themselves. Good developers will write good code in most any decent language; bad developers will write bad code in any language.
The problem is likely the team (including clueless management) who did the project, they would have likely created a mess in anything else too.
In a real emergency, we would have all fled in terror, and you would not have been notified.
The whole indentation thing is perfectly inline with the goals of Python. Programs are typically read far more than they are written. They are read every time you try to understand them, extend them or debug them.
One of Pythons goals was to be extremely useful, which means it is desirable to encourage easy-to-read even at the expense of easy-to-write. Programmers have a much easier time reading properly indented code. In Python all code is properly indented, all the time. If the indentation is wrong the code is wrong, so it is still properly indented.
Now these lofty ideals easily extend into elitism. If you can't write code that is properly indented then you can't write Python and it might be for the best if you don't even try. Some would argue that if you write code that is unclear even at the indentation level then what chance has the logic got, probably best if you don't write code at all. I would say that is going a bit far but then I'm not currently working with anyone who really should be banned from coding.
Keeping track of indentation isn't too hard so I don't mind. I use vim, and you said you did too. Yes, you can't autoindent, but manual indenting is as easy as hitting "V", selecting the relevant lines, and then hitting "<" or ">".
That said I do like autoindenting, which is one of the reasons why my language of choice is a lisp dialect. But even so I still keep a keen eye on indenting, the process is just reversed. When editing lisp I make my changes and run autoindent, looking for any movement that I wasn't expecting - which would indicate I had got my parentheses wrong.
When reading code I still prefer Python because I know I don't have to reindent it first.
By the way, your example of adding an if statement is a bit bogus. In a C like language you have to go to the start, add the statement, and the brace, go to the end, add the brace, then hit autoindent. There are no more steps in Python, you just start highlighting at the start, move to the end and hit manual indent. It is exactly no harder.
PHP has already come and gone with a major version incompatible change with the whole globals fiasco. Hindsight 20/20 and all that, it was still a major pain in the ass, having to have two versions of PHP installed to run my apps, simply because a language "allowed" developers to do poor, security-sacrificing things....
regards.
After some reflection on this issue (after submitting the post), I do concede that, theoretically, the author of Psyco has a point. However, in theory there's no difference between theory and practice. In practice, there is.