Java vs .NET
CHaN_316 writes "Yahoo is running a story called 'Is Java Finished?' It provides a brief overview of the strengths and weaknesses of J2EE and contrasts them with .NET. Classic arguments are brought up like Java being great for portability while .NET ties you down to Microsoft products, etc. It's interesting that they bring up the Java Community Process, and how it is a rather slow moving procedure that is causing Java to become stagnant."
Dot Net doesn't look like a developer panacea just yet. If Sun keeps the enhancements coming and works to bring the development environment up to Visual Studio's standards (Yes, VS has its problems, but it has a lot of unique tools, like compile-and-continue, which save hours!), Java may well survive.
Dot Net is also anything but small. It's possible to create ROMmable Java applications in just a couple megs of flash memory. On the other hand, there's no such thing as embedded dot Net just yet. And if they continue with the execution model they've currently got, any piece of code is going to net a ROM many times larger than what's possible with Java. Either way, I'll want $699 for my fp, beeyotch.
The ".Net only works on Microsoft" is more than just a classic arguement. In fact, I think it's the most important factor to take into account.
.Net will never take off. After all, it hasn't during the 3 years its been out.
If I want to make some simple embedded device, if I have to option to use Java instead of having to license Windows CE for my product, why would I ever choose MS over Java?
Having worked with both Java and .NET, I would say that things like C#'s foreach statement make for easier and cleaner code, but Java 1.5 will leapfrog C# when it introduces generics along with its own version of foreach, and other timesaving features. Java's big failing, IMHO, is Swing. It is too big and too clunky, Java is crying out for a stripped down GUI library that is part of the API spec that will be as easy to work wit
Just raise the taxes on crack.
When was the last time you used a .NET program? I know I can't remember. When was the last time you used a java program? Oh, just a few minutes ago myself. Besides, how can .NET ever really be a long term (it might be a short term) threat to java, since you'll never be able to use .NET on anything but Windows.
Good thing there isn't an "Ignorant" moderation title, I'd probably get it.
Dot Net is also anything but small. It's possible to create ROMmable Java applications in just a couple megs of flash memory. On the other hand, there's no such thing as embedded dot Net just yet.
.NET for enterprise/distributed computing.
Which sums up the whole apples vs oranges nature of this "debate" quite nicely. Java was developed for embedded systems,
Now Sun is trying to shoehorn Java into the enterprise world, and perhaps MSFT will try and do the opposite.
I don't need no instructions to know how to rock!!!!
.NET ? Blowing J2EE out of the water ?
.NET ?
Are you serious ? Then:
Where is the appserver that runs
Can you cluster that appserver like J2EE-appservers ?
From the article:
The slowness of the JCP holds up the creation of additional standards and services, he pointed out. In addition, standards proposals aimed at portability -- Java's strong suit -- are also stagnant.... "In the meantime, people want faster, easier development."
Golly, I like slow, careful, and secure development of my enterprise backbone software. People may want faster inclusion of features, but they need stability and security.
The latest flashy feature doesn't do shit if your enterprise backbone is crashing or being hacked into oblivion.
You would think that a language or API that doesn't change every day would be praised with words such as "standardized" "stable" and "established".
But in Bizarro World (where we all are apparently living), we criticize it as "stagnant" and "slow moving".
Compare with the OpenGL/Direct3D discussions.
Carpenters don't buy from hammer companies that change their hammers every "release".
Any article that asks that question is automatically crap. Period. End of discussion.
Business isn't willing to pay for products, innovation and careers, so we get brands, mortgage commercials and layoffs.
I'm very interested in seeing how Java implements generic programming (template programming). That's an area where it currently falls down.
Java originally promised to become a small, universal client-side platform for the delivery of applications to clients over the web. Java has almost completely failed in that mission: Flash is far more widely used, no browsers ship with the latest version of Java, and even if you stick to Java 1.1, there are numerous compatibility problems.
.NET will continue to exist in that space as well and probably take away market share. And because Sun's restrictive licenses on both the implementation and the specification of Java, I suspect Java has seen its best days in the open source world.
.NET, .NET is simply more of what Microsoft has always given us: a proprietary platform completely controlled by Microsoft. It's not primarily an alternative to Java, it's simply what Microsoft programmers will move to from MFC and Win32. Thankfully, it's at least a lot cleaner than Microsoft's previous APIs and systems.
What Java has become instead is a semi-open server-side platform. It's quite successful at that, but it is only one of many platforms in that space. PHP, Perl, Python, and
Now, about
So, Java has failed to become what it originally promised to become, but it is a fairly successful platform that won't disappear overnight. But Sun's dreams of industry domination are pipe dreams. Java could have become much bigger and more important than it has become, but Sun screwed up (and is continuing to screw up).
Since when has the development of the Java platform been 'stagnant' ??
.NET, and there are plenty of bad things you can come up with about the JCP, but... to say Java isn't advancing is pure and total bullshit.
That statement must be a troll of some kind. The number of new APIs included in each release of the JDK just keeps going up and up, adding some pretty major areas of functionality in doing so... and the number of rather fundamental additions to the language itself that are comming through the community process for the next release are pretty big.
In short, the notion that Java is somehow not advancing due to the JCP is utter bullshit. I'd link to java.sun.com stuff, but either you know I'm right, or you can find out yourself, or you don't care.
Hey, use whatever tool gets the job done- if you don't mind being locked into Microsoft, use
Personally, I actually think Java has if anything been growing *too* quickly in some ways, though it's not nearly as crazy as it was in the early days.
No Java has already been shoehorned in a long time ago. You just weren't paying attention. Also, just because the JCP goes slow, doesn't mean Java is stagnant. It means the JCP is slow. Trying look at jakarta.apache.org, and then tell me all this bs about stagnation and ill-suited purpose.
Occam's razor is the blind faith in the natural selection of least resistance and in universal oversimplification. -- EF
I run the same Java apps on Windows and FreeBSD all the time. Most good apps have no trouble crossing platforms. The only major sticking point is Swing or (especially) AWT, which are implemented with varying degrees of quality across platforms.
I read the internet for the articles.
People that argue that Java is stagnant mean that there are things the language needs, but it is taking too long to get them.
Sarcasm and hyperbole are the final refuges for weak minds
If it's UI-based, .NET blows the doors off of Java. The design tools are so much better and the UI objects actually work the way they're supposed to. Swing is one royal PITA if you ask me, with lots of bizarre implementations, bugs, and poor interoperability with the native windowing system in many if not most cases.
If it's server based then J2EE holds an upper hand in more than just portability. Most of the J2EE containers out there have application build environments that are at least as good as VS.NET and since they tend to run on more scalable hardware they're easier to deploy for large sites. Various mature application frameworks are available too.
The thing to remember about .NET is that it's really Microsoft's Java repackaged in a form that Sun can't sue them over. It has most of the JDK 1.1 libraries pretty much intact but with package and method names changed. But they did a very nice job in fixing a lot of issues that Java has.
In particular .NET's assembly management beats the heck out of collections of jar files.
YMMV, but if you're building a client and you don't absolutely need multi-OS support then you should really look at .NET. If you're building a small server it's probably worth a look too, ASP.NET forms are very easy to construct and they have decent tools for working with MSQL. But if you want a large-scale system I would not consider it, they need to work a lot harder on deployment issues and scalability of the base OS.
jim frost
jimf@frostbytes.com
and later,
Huh? So first this article complains that Java is too complicated and needs to be simpler. Then it complains that Sun makes it hard to add new features (i.e. complexity) to the platform.
I'll say it again...Huh?!?
I think the JCP moves at just the right speed. If you change a language too quickly, make it harder for everyone to keep up. If you move to slowly, the language/platform won't be able to keep up with current technology. It should be hard to add things to the Java platform. A lot of people have a lot of different ideas about what Java should be. Sun tries to make sure only the best of the best gets integrated into the core platform. Anything else can be left as a 3rd party library (like AspectJ for example).
A great man once said, "The Law should be stable but never stand still". Programming languages and platforms are the same way. Turning the JCP into a rubber stamp for new, unproven ideas isn't going to do anyone any good.
Actually
I mean GUI programs. "Windows Forms" is what I believe most Microsoft developers call them.
In other words, Visual Basic Applications. C++ Applications.
ASP.NET == Web Applications.
I mean c'mon, this idiot gets a 1 just because he's logged in? That is so unfair, he needs a -3 for being an idiot.
/. these days...
I've worked for the past 10 years at various companies where the same Java program runs on at _least_ Sun and Wintel machines, if not others. Good companies who market said Java-based products and are still in business after the dot-com buts. I know of hundreds of other developers ( counting some I know through mailing lists ) who work in similar situations.
I personally write Swing-based UI programs in Java... and why? So they run on both PC and Mac OS X machines, which they do beautifully. The OS X 1.4.1 JVM is still a bit immature, but it's definitely usable. Of course, no VMs are as good as the Windows and Solaris VMs, but that's because Sun writes them, and has been doing so for years, duh!
Seriously, the idiots on
The real world largely ignores the rambling of propeller-heads. There's more COBOL out in the wild than all of the Java ever written, and it isn't going anywhere.
Most people understand "if it ain't broke, don't fix it".
I don't need no instructions to know how to rock!!!!
It's not up to developers. Regardless of developer preferences or platform capabilities, when the right sales people talk to the right managers, the
lest we forget that microsoft did -not- shut down the open source .Net compatible project, i'll even grant a link.
.net hasn't taken off, I most strongly disagree. Any company whose business requirements have them developing more than a single application for windows have nearly all converted to .Net in my experience.
.Net framework. The problem with the perceived lack of adoption, is the broad branding of the development tools -and- the internet services as .Net.
.Net web services has hardly budged (aside from some passport authentication). However, the framework and the development advances are most certainly in use.
.Net only works on Microsoft - but the fact that it -does- work on 95% of business desktops (as opposed to Java which requires significant finicking to get going on those same desktops) is also a benefit for those who are dealing with business realities and not philosophical preferences.
Mono
As for a claim that
with finalization on install, there is absolutely no performance loss between straight-C and C#. in fact, depending on your straight-C compiler, the C# code can run better (finalization takes specific processor optimizations into account).
every coder i know that develops windows apps is working within the
True, widespread adoption of the
granted, this is based only on my own personal experience, but i deal with a number of vendors, and have a great number of contacts and coworkers whose experiences agree.
yes,
// "Can't clowns and pirates just -try- to get along?"
With that out of the way I looked up the Sun's pet shop program example in Java and then the MS version in C#.
Look at the lines of code in the MS version? The gui portition has an 8th of the code that the java version has. Also version 2 of Microsoft's
You can do alot of things with
I heard the libraries cover more areas then Java but they are thinner then the ones Java already covers. Also C# supports enumators, pointers ( yes they are evil), and cross language support and integration. Java 1.5 is playing catchup.
http://saveie6.com/
Java's philosophy of development is to expose low-level system interfaces to give developers greater control. Microsoft simplifies the development process; the developer has less control -- but the tools are easier to use.
.NET and Java and I've found Java's toolset to be much easier to use. This is simply due to the fact that there are many more vendors (open-source and commercial) that provide Java products. I can pick and choose which tools fit the particular project that I'm working on, and those tools will also run on any platform that Java runs on, so I'm not locked into a particular operating system while I'm doing development. I can decide to work in Linux one day and Windows the next, and use the exact same toolset for both.
.NET is simpler. But in that case I'll take complicated over simple any day of the week.
Says who?
I've developed applications in both
So I guess if your definition of simple is "you will use this tool and like it", then yeah,
Conclusion:MFC was 'rigged' to perform better with the MS ODBC DLL than a third party function call.
And I guess you could easily prove that to the man and his dog, since the Microsoft happens to provide complete MFC source with their development environments. Since you didn't bother to do that (at least I haven't seen this mentioned anywhere else before) I call your conclusion to be as big mistake as anything that Microsoft PR department can produce.
Anonymous Cowards Unite
Um, excuse me, but it's very possible to create full-featured applications in assembly in just a couple of kB of flash memory. And in case you hate assembly, you can do the same thing in C++ for around 500 kB, and it will run faster than Java. Remember, embedded devices don't have the screaming fast processors that are needed to make Java appear fast. And they're not likely to have the few hundred megs of RAM that a JVM seems to think it needs, either.
Yeah, Java's nice - for the web. But given that people hate to wait on embedded devices, I can see why it hasn't been widely adopted. And given that embedded devices are often used for critical infrastructure (i.e. utilities, aircraft, nuclear plants, etc...), I'm not sure if I'd trust someone who can't master assembly to write code that controlled a something that could get me killed if an unexpected Out of Memory Exception was raised.
Can't say that it will make a difference to me since I guess I'm the only person in the world who knows what platform they are devloping for up front.
While the rest of us aren't willing to make that restriction on ourselves.
Don't label something "offtopic" unless you know the topic well enough to tell what's on topic.
There are some good Java IDEs, no doubt, but none of them can touch Visual Studio for, well, any single thing you could possibly want to do with an IDE.
If you do any Java development try IntelliJ Idea.
Then come back and try saying that again.
-... ---
Um, excuse me, but it's very possible to create full-featured applications in assembly in just a couple of kB of flash memory. And in case you hate assembly, you can do the same thing in C++ for around 500 kB, and it will run faster than Java. Remember, embedded devices don't have the screaming fast processors that are needed to make Java appear fast. And they're not likely to have the few hundred megs of RAM that a JVM seems to think it needs, either.
Yeah, Java's nice - for the web. But given that people hate to wait on embedded devices, I can see why it hasn't been widely adopted. And given that embedded devices are often used for critical infrastructure (i.e. utilities, aircraft, nuclear plants, etc...), I'm not sure if I'd trust someone who can't master assembly to write code that controlled a something that could get me killed if an unexpected Out of Memory Exception was raised.
I do very little Microsoft development these days, but I have both VB3 as well as DevStudio6 installed in my Win4Lin Windows installation. When I need to crank out something real fast, I run VB3. When I need to qukckly reference the help files, I click on VB3's .HLP files which load immediately as opposed to the new stuff that takes quite awhile to bring up.
In my opinion, Microsoft's IDE was at its height at VB3 and VC1.51 which I think was about 1993. Ever since then it's become more and more bloated. Sure, it does stuff that the older versions didn't. But just because it does more doesn't mean it's better--it just means it's bigger.
The question shouldn't be "Should I be develping this on .net or J2EE?" It should be "Should I be developing this on the web at all?"
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
Except that assembly and C++ are not binary compatible across multiple embedded devices. Take cell phones for example Your choices are:
1. Port and compile a version of your program for every cell phone in existence (quite a few platforms).
2. Write a Java MIDP application that works on all MIDP enabled phones.
Hmm.... which to choose, which to choose...
Javascript + Nintendo DSi = DSiCade
As someone has mysteriously marked the parent as "interesting" it might be worthwhile to provoke a genuinely interesting debate below it so that readers are not too disappointed.
The parent insists that no Java IDE "can touch" VS for "any single thing you could possibly want to do", but a moment later admits that "VS.NET doesn't have as robust a feature set as some Java IDEs".
Features like refactoring, perhaps, as found on the free Eclipse IDE, or the modestly priced IDEA?
Or, looking a bit further afield, we could ask how one might develop a complete workflow system in VS, as you can in WebLogic Workshop?
My clients do these things all the time, but VS has a long way to go to offer a competitive alternative to the Java tools available now.
This is stupid. I make money writing software that is for sale. Openness does NOT sell software to our clients. Good software, and fair prices, sell software. Openness would actually be a major setback to writing good software.
Why? Because we would need to massively increase our testing staff, to test on a good number of different machines to ensure compatibility. Because we would have to train them. Because even among VIRTUAL machines, and systems that obey standards or even run the same exact code, there are differences which can easily become dealbreakers.
As an example: we designed our application from the ground up to allow the use of multiple database systems. Heavy abstraction, only SQL-97 compatible statements, no system specific datatypes, etc. We closely followed standards to ensure compatibility. Still, when it came time to test the first database, it didn't work. The compatibility layer was never fully implemented by the new server, as a result of a feud with the first server. We had to rework the database layer completely, and it set us back at least three months.
If we had just said "fuck agility," and designed for one system (and rigidly sold THAT system) we would have saved a lot of time and money -- enough money to discount our software for those people who needed to invest in the more costly database. We could have spent that time making great new features. That's what matters to our clients, none of whom have ever not will ever use Linux or any machine not running an x86 chip. There's too much investment in legacy software requiring archaic things like DOS, floppy diskettes, and daisy wheel parellel port printers.
Openness and portability are at best liberal afterthoughts, and are by no means "the most important things" outside of your junior year Operating Systems class. What matters is cost effectiveness. If your market is not already locked in to wintel, then by all means use Java, chances are you'll recoup the extra testing effort with your first big mainframe sale. Ours was so locked. Writing in Java would have been a foolish waste of effort.
Hey freaks: now you're ju
Maybe your developing for the school market where being able to run the same code on both a Mac and a Windows box is a great feature. Even linux is starting to come into schools. Guess what? Our products will already work with linux.
Sure, generally you know your target platform. But sometimes you don't. Also, since the toolset between unix and windows is very different, it is sometimes far easier to develop on one than the other.
With Java, you develop on whichever platform makes it easy. You test and deploy on the target platform.
I'm scared of the idea of one project written in many languages. The old web problem of HTML inside perl (or Java or any other language) should teach us that moving between languages on the fly requires a mental context switch that slows things down.
We have the server side of our client-server application running on the 1.1 Framework on XP Home using Sybase. Yeah, it would be "cheaper" under Linux, but then our clients would have to buy a new server. They already have windows for all their other apps, and buying new hardware comes from a different budget. No, I can't ask them make their own server out of tinfoil and LEDs.
.NET doesn't lock you in to anything other than the most basic OS that the Framework will run on, which is Windows 98. The whole bit about NEEDING a copy of Windows Server isn't even remotely true. Just more OSS FUD about how everything Microsoft is more expensive. Sure, it can be. So can a Ford Focus once you start bolting on turbochargers and sexy paintjobs.
We do have a solution for single machines that uses Microsoft SQL Desktop Engine. That's up to 5 machines for no cash at all. That's pretty good in my book.
In the end, unless you WANT it to,
Hey freaks: now you're ju
And if for some reason we want a different platform (which we don't and won't), we'll have to recompile. Oh, the horror.
And that's why we have so many
"just recompile" is a great solution IF you didn't use a development model that locks you in. I use "just recompile" all the time on C and C++ programs.
Don't label something "offtopic" unless you know the topic well enough to tell what's on topic.
Dot Net doesn't look like a developer panacea just yet. If Sun keeps the enhancements coming and works to bring the development environment up to Visual Studio's standards (Yes, VS has its problems, but it has a lot of unique tools, like compile-and-continue, which save hours!), Java may well survive.
Java IDEs are far beyond
Compile and Continue is state of the art in java since 2 years, minimum.
angel'o'sphere
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
Yeah, except that some people actually just, *gasp*, *like* to program in Java. It provides a nice, strongly typed, compiled, object oriented language (a niche none of those scripting languages fill) that's available almost anywhere while being FAR nicer to develop in than either C (too low-level and error-prone) or C++ (to damned friggin' ugly).
Moreover, Java provides a massive class library which makes it easy to write new applications without having to reinvent the wheel every time (and yes, I know about the STL, but it's still not entirely standard, it creates bloody HUGE application binaries, it takes FOREVER to compile, it's *impossible* to debug compile errors, and it isn't even as extensive as the Java APIs!)
Now, I would agree that Java is pretty well toast on the desktop, barring a toolkit revolution. I certainly wouldn't write an app using Swing. However, for other types of applications (like, say, Freenet), it can do an excellent job. And if you go with SWT, you can write some pretty damn nice GUI apps (just look at Eclipse, which is written entirely in Java).
But to dismiss Java out of hand because it doesn't mesh with your and some other zealots ideals is pretty narrow minded. Personally, I don't care if my app is somehow "tied" to Sun. As long as I can release my source code, who gives a damn if it runs on a proprietary substrate. That certainly didn't bother the KDE guys (or their users) back when Qt was non-free. Sure, there were people who complained, but there were also plenty of people who didn't give a damn (myself included).
Refactoring???
.NET code -- the #region tag is a prime example, as well as outlining -- so many that refactoring becomes unnecessary. Or at least, it becomes a waste of time.
You're complaining that VS.NET isn't as good an IDE because it doesn't offer a way to rewrite your code for you?
There's a lot of really nice ways to organize your
Secondly, if one were desinging a complete workflow system, one might think one would want to work in a system for designing such things, and not in ones' IDE. I mean, I don't want my mechanic designing my new car. Microsoft has an awesome tool for laying out workflow, database diagrams, etc, in Visio. Why do you want to integrate that with the tool you use for managing data, writing stored procedures and othewise doing grunt work? The tasks should remain separate, less you get so worked up in a particular design you start coding it prematurely...something I have DEFINITELY seen happen...
Hey freaks: now you're ju
Conversely, the ability to port easily (much easier in java than .net) to other platforms becomes a selling point down the road... but just becaue the abiilty/openness exists, doesn't mean you have to buy into it.
Make sure everyone's vote counts: Verified Voting
Openness and portability are at best liberal afterthoughts...
Hmmm... which is why many companies are having to essentially rewrite all their VB apps because their single-vendor locked-in language has no future. But hey, they were able to cut cost-to-market with VB5, so they saved a bundle, right?
My company chooses Microsoft. Instead of bitching and moaning about it like a good slashdotter, I point out the good, and that makes me a fanboy?
In that case, I am also a Maxwell House coffee fanboy, a Sanford pencils fanboy, a Novell Border Manager fanboy, and a Road Runner Business Class fanboy.
Hey freaks: now you're ju
What the fuck are you talking about?
.NET, not because the language "has no future," something our clients couldn't care less about anyway, but because the application is a clusterfuck which needs to be updated. Writing it in a faster, safer language like VB.NET is not be considered a liability by anyone in this company. In fact, the eventual rewrite has been used to tease the development staff..."After this, you guys can relax and do that rewrite!"
Since 2002 when Visual Studio.NET "dropped support" for VB6, there have been several service pack releases for VB6. Our company, which has a massive set of applications written in VB6, has released an update every month for our VB customers, written in VB.
We will eventually be rewriting in in
A lot of people complained about having to essentially rewrite all their Java 1 applications when Java 2 came out because 1 had no future. Those people are what we call LAZY.
Hey freaks: now you're ju
Also it means more stability in specs. Writing specs takes some time but it pays off when you need to implement the spec.
"I think this line is mostly filler"
How many IDE's are there to develop .net applications? One.
That's the problem here. VS might be better than most Java IDE's at most things, but that doesn't mean it's better than all Java IDE's at all things. If I want to develop servlets, I might want to use a different IDE than if I design applets.
Also, how much does VS cost? Netbeans: zero. Eclipse: zero. And if I want to pay some money there are java IDE's out there, and because they have to compete for my money they have greater incentive to provide useful features and responsive support.
This sig has been temporarily disconnected or is no longer in service
The comparison must be between .Net and J2EE, while J2ME and even J2SE are seriously lacking in component architecture and other features comparing to both .Net and J2EE.
So, once we make a comparison correctly (J2EE vs .Net) we can state: there is no such thing as embeddable J2EE just yet, while there is something like compact .Net framework.
Seems to me Java is anyhing but small, comparing to .Net - probably thanks to the way how .Net is based on XML.
Either way, I'll want $699 for my fp, beeyotch.
I think you've been in a serious rush with your fp, that's why you comment is so poor. I just wonder why is your comment so overrated? Is there such thing as FM (First Mod)?
Less is more !
Let's say I have a class in package A and I want to move it to package B (in dotNet parlance, packages are namespaces). In dotNet, I'd have to personally touch every piece of code accessing that class and redo the import statements (dotNet: using statements) to reflect the change. Same goes for method name changes, public member changes, method signatures (parameter order, adding parameters, etc.), etc.
Also, the good refactoring IDEs provide a lot of extras like generation of getters/setters (dotNet: properties) (also referred to as encapsulation), extracting interfaces and/or superclasses, replace inheritance with delegation, replace constructor with factory method, make method static, etc., etc., etc.
Note that most of the above refactorings not only change the class in question, but also all accessing classes and methods. This sometimes means you can make a significant change to a heavily used method or class and do NO WORK to the rest of you classes.
If you are interested in the power of IDE refactoring, check out the IDEA refactoring page. Here is a screenshot of the refactoring menu.
In short, refactoring is REALLY powerful and very, very useful. If you are saying otherwise, you probably haven't used it. Also, it should be noted that several companies are making refactoring plug-ins for Visual Studio. Obviously SOME people don't think that Visual Studio's features render refactoring "unnecessary" or a "waste of time." Myself included. (I'm a Java junky programming in a dotNet environment.)
Taft
Having had the misfortune of being stuck with a PICK BASIC application running inside Universe (GEAC Advance), I think the reason is that no one really writes software. Companies buy software and patch it ad infinitum. Think about why a crufty old property like WordPerfect was passed from hand to hand, when if you want a decent WP it was obvious it would be better to write one from scratch (something that's been done many times by others). Part of it is brand name, but you can retain that without having to taint yourself with code. The reason is that it's perceived as safer to buy something that works, or worked in the past - however badly - and patch it up. This is why software developers laugh at duct tape jokes.
At least Universe is generally sitting on some reasonable Unix box. Pity the people who ran PICK on native hardware.
So do dozens of other languages. Among them, Java is pretty mediocre and has numerous limitations and design flaws. For example, the array conformance is just broken, and so is the genericity implementation. The only thing Java has going for it over the competition is name recognition.
.NET, so given the choice, I'd select Java for cross-platform development.
... open source", and they had no problems using a closed toolkit. And their project is quite healthy, and I'd contend they'd still be doing just fine, even if Qt hadn't opened their toolkit...
And ubiquity. There are, IMHO, very few languages which fill the same niche as Java while still being common. And, no, I don't think Python, et al, fit the bill.
Besides, if you are willing to put up with the patent and intellectual property problems that Java has, why not simply use Mono?
Simple question: huh? I've *never* heard of these "patent and intellectual property problems" you're referring to. Ever.
Anyway, I don't use Mono because, again, it's not ubiquitous. Most people have a JVM on their boxes these days. Can you say the same about Mono? Hardly... and yes, I know you can compile to executable, but I'm unaware if those executables are standalone (versus requiring various runtime libraries to operate, ala VB). Other than that, the only reason I don't use Mono is purely philosophical. *shrug* And no, I don't have those problems with Sun.
You will give a damn, when Sun goes out of business, or when Sun does something stupid with Java2D (like basing it on OpenGL), or when they don't support your favorite operating system.
Please... it's not like people can't create their own competing version. GNU gcj, anyone? Kaffee, on the VM side? There's just been no push toward it, mostly because it's *hard*.
As for OS support, Java is still *far FAR* superior to
Yes, and there are lots of people who also write open source Windows software. But they don't represent the mainstream of open source, and as a general approach to open source, it's self-defeating in the long run.
Talk about a non-point. They don't represent the mainstream because it's not "cool" to develop OSS Windows apps. Moreover, the people who'd use your neato free Windows tool won't bother, since they're running a free OS. AND, Windows doesn't have as much room for new development, since there are a gazillion apps already available for the platform (hence no sense of a "niche" to fill).
Besides, KDE developers certainly represented a segment of "main stream
>> However, C# has a lot of other advantages over Java. C# can make use of pointers. Java has no option on parameter passing - Objects are passed by reference, value types are passed by value. While C# has the same limit on objects, you are able to use pointers and it also supports boxing. C# supports operator overloading as well
You mention three advantages there:
- pointer support
- boxing
- operator overloading
I'm sorry, but in the average commercial environment, churning out business logic to meet changing business requirements under tight deadlines, two of those three are very very bad.
Boxing is good. That's probably why it's in Java 1.5. I'd have liked to see it in 1.1, but that's another discussion.
Pointer handling: I've written code doing direct memory access via pointers. I've also written code in Java (and thus not had access to pointers). The Java code has been at least as easy to write, had far fewer bugs (invalid pointers? memory leaks? not in my code), and (most importantly) been immeasurably easier to maintain. You might have been programming for 20 years and never have a problem with pointers; most developers have been programming for 2-3 years, don't have a sodding clue about pointers, and will and do screw it up. Quite frankly, pointers are evil and unnecessary and if I do use C# in the future (as is likely) I'll be insisting on coding guidelines that preclude their use.
As for operator overloading: It's one of those things that makes C++ code so bloody impossible to maintain. Bit of code read x += y. Except it's doing a binary concatenation, or advancing the pointer reference, or updating Z instead. Because some idiot has overridden +=.
I appreciate that there are situations where operator overloading is useful, even some where it's sensible. Unfortunately, going back to the average developer: They don't know when to use these things, and even if they do, they often don't know how.
I love Java not because I'm a crap programmer (although I wont deny that) but because it makes my life much much easier. I can write code quicker, more efficiently, and more robustly. I can maintain code extremely easily, as the 'gotchas' that exist in many languages just aren't there in Java. And my boss loves the fact that he's getting new functionality so much quicker, because the whole team isn't spending their lives debugging a complex overloaded operator that's invalidated a pointer.
I'm not saying C# is a bad language. I am saying that operator overloading and direct memory access (through pointers) is unnecessary and evil in the average corporate development environment. And that's the target environment for
~Cederic
Hmmm... a few pages above there's a post consisting of the two phrases "You are an idiot" and "There is no IDE that comes even close to Visual Studio.NET" that's now Insightful.
And now here I'm obliged to repeat someone's useful response (that wasn't modded up) to an ignorant assertion (that was).
The practice of refactoring is well-established and reflects changes to the naming or structuring of the code that have occurred since it was created, so your comments about the initial organization of code are irrelevant. Apparently your beloved VS.Net is likely to offer some refactoring capability in a future release, which acknowleges the importance of this feature but puts it approximately 2.5 years behind Eclipse and IDEA.
A workflow system consists of process definitions with process steps that involve conventional programming, therefore if I'm developing a workflow system, I'm also doing conventional programming. An IDE allows me to deal with these aspects in one environment (hence "Integrated"), just as VS.NET allows me to develop GUI layouts and conventional programming in one environment. (Or are you suggesting that the GUI designer in VS should be a separate system?)
I fail to see the relevance of standalone diagramming tools in this context since their purpose is to produce diagrams (for people) rather than code (for computers) - something you are free to do regardless of your IDE. However, since you bring up the subject, I should point out that in Workshop the workflow diagrams ARE integrated and correspond exactly (via 2-way update) with the visible program code. Again, such features are light-years ahead of anything in VS.
I'm confused. You first deride my comment, and then you appear to agree with it.
My point is that by only looking at a language's version-1.0-time-to-market qualities, tradeoffs must be made. In the case of VB, the tradeoff is that VB is a closely guarded language by a single vendor, rather than the classical academically defined languages like C, C++, Fortran, etc. If Visual C++ goes away, there are other vendors who produce C++ compilers. If Microsoft stops producing VB compilers, there is no one to turn to. Since VB.Net is the next version of VB, and it requires a practical rewrite for large applications, then the previous language known as VB is dead, for all practical purposes. Few to no new applications will be written with the old language.
I don't care how bad your applications are written, odds are your mananagement would not rewrite the applications unless they were forced to by outside forces, because, as you said, the paying customers don't care about languages, they just want feature Y in product Z and they want it now. In this case, the outside force is the vendor who has essentially stopped advancing the compiler for the langauge your apps are written with, and you don't have another VB vendor to turn to.
And as far as developers enjoying the rewrite; beware of what you wish for. We are going through the same thing, and it has been almost two years of pain, beauracracy, and political wrangling. The Second System effect can easily take hold, since people are so afraid of making the mistakes of the old system that they overthink and over-engineer the new system until it collapses under its own weight.
Well, I suggest you actually read the licenses you agree to when you download Java and the Java specification from Sun. Both the language and its implementations are tightly controled, in a way that practically no other language or platform is.
In that you can't create an implementation and call it "Java" without Sun giving you the okay. BFD. I can understand why Sun would do this... look what happened with Microsoft and their "implementation" of Java. That doesn't stop anyone from creating their own, compatible language, VM, etc, and calling it Espresso or something. Again, gcj, GNU classpath, etc, proves this to be the case.
People can't. Read the licenses.
Tell that to the FSF... not to mention IBM.
You are damned right it's hard. But it's not technically hard, it's "hard" in the same sense that a Windows clone like Wine is hard: Java is a platform controled by a consortium, driven in such a way that people can't successfully create third party implementations.
No, WINE is hard because the APIs are a moving target and most of them are undocumented. Moreover, WINE is hard because the Win32 APIs are NOT controlled by a consortium! They're controlled by a single entity, and hence are subject to change, revision, addition, etc, without anyone knowing about it, making it even harder to write a compatible version.
Java, OTOH, is highly stable and moves slowly (as has been noted by many others in the comments for this article) which in fact makes it *easier* to create competing versions, since you don't have a rapidly changing platform to remain compatible with.
What planet are you from? Maybe there is some form of "JVM" on their machines, but it's completely unpredictable what version it is (1.1? Microsoft? 1.3? 1.4?). I used to be able to use Java applets on my site (for SSH and other services), but that's become pretty much pointless these days.
Okay, let me revise my statement a little. Most people who use free/OSS platforms have a reasonably modern JDK installed. OTOH, you're absolutely right, if you're attempting to target Windows (although you can blame Microsoft for that). If you can name another language that approaches Java's install base (particularly amongst OSS folks) but meets the same needs, I might conceed the point.
I'd select Java for cross-platform development as well. But most of my development is not cross-platform.
So then who cares about Java and it's platform support? That was, after all, one of your objections regarding Java (and, no, I highly doubt Sun would drop support for either Linux or Windows).
The KDE developers were headed for a legal disaster: they had created a desktop whose license was incompatible with the toolkit they were using. If Troll Tech hadn't changed their license to dual-license, KDE would have been dead, in particular because it's not clear they could have legally created an open-source version of Qt. The KDE project was oblivious and ignorant of the license problems they were getting themselves into. And so are many open source Java developers.
Heh, please... those licensing issues were purely philosophical. It certainly didn't stop MANY people from using the platform... after all, those issues were well known right from the beginning. As a result, I *highly* doubt the project would have died. Hell, they could have just changed to a BSD license and been done with it. *shrug*
However, that's completely irrelevant. Why? Because there are no "licensing problems" with Java. This is just something you seem to have invented! I can create all the Java apps I like... Sun's license on the JDK and their control of it plays no part in the license I choose for my software. Basically, it's a *completely* different issue. In this case, my project can be as "free" as I want... it's simply the platform which (arguably) isn't.
Now, to make the comparison more apt, let's say TrollTech's license was compatible, but
A portable VM for Pascal ... maybe you could call the machine language for that "pcode"...? Wow, I wonder why no one ever thought of doing something like that.
I am baffled by these conflicts.
... there seem to be 10 choices for nearly everything.
.bat vs. .sh - not too painful but even that's gone now that I'm on OS X)
.NET deployment? How much downtime saved from moving off wormy Windows servers and onto Linux? (100 user Linux license * 10 CPUs + 100 user postgres license = total of ZERO dollars.) (Don't give us that "only if you don't value your time" malarchy either - Windows eats far more of my time in 3 months than Linux does in 2 years.)
With Java I have a huge open source community as well as commerical vendors. I have upteen choices for object persistance, IDEs, distributed infrastructure, graphics toolkits, widget toolkits, web tools,
If I run into a problem with a java API - 98 times out of a 100 it's already fixed or a work around identitfied. If there's fundamental design error in the tool - I've got 10 other choices.
I can develop and deploy nearly transparently to Windows, Mac OS X, Linux, Sun, etc... I regularly develop on Mac OS X and deploy to Linux and Sun with no hassles - none. (Before the PowerBook it was develop on NT4/cygwin and deploy to Linux and Sun and I had to worry about backslashes vs forward slashes, semicolons vs colons, and
Why would you sacrafice all of these choices and options? (Read about "Real Options" to see how these choices have concrete dollar values - sacraficing options is just throwing money away.)
I hear arguments like "we've already got COM developers" - Is it really that hard for them to learn Java? How much would two weeks of downtime cost for a shop of 20 developers? Figure 75k/developer (with overhead), that's $1500 a week - times 20 - 30k/week - times 2 - $60k (4% of the annual salary budget). Add to it about 3 months of 75% productivity (25% in month 1, 50% month 2, 75% month 3, 100% month 4) - that's another $94k. So hand wave a little and say that switching to Java will cost $150-$200k for a development shop with $1.5-2 million/annum budget. (Maybe add another $100k for training and what ever.)
That's the same cost as being 4-7 weeks late on a project deadline. When's the last time you did that?
A "real options" analysis would likely show the choices available in the Java world are worth maybe ten times that. Figure a company with $2MM dev budget has a $20MM-$70MM annual revenue, there's a good chance the flexibility from choices can make a 3-10% difference in revenue - an even better chance of 1-3% increase per year over 3 years. (I know that's not discounted but it's a back of the envelope thing not a 10Q filing.)
How much would you save on VB Studio licenses?
How much might you save by leveraging amazing tools like those used in Garsomke's continuous integration environment (see http://www.sys-con.com/java/article.cfm?id=1945)? Apache's projects alone are worth a great deal of money to a development shop - add in Source Forge and the value is down right spooky.
What else I wonder? (Let's not forget the simple freedom from Microsoft lock-in.)
What's the counter argument - that there are some incremental IDE features in VS Studio?
It seems simple - black and white (and green).