Trouble Ahead for Java
Jeremy Geelan writes "The editor-in-chief of the world's largest journal devoted to Java wonders whether, with the arrival of Microsoft's C# programming language on the scene, Java perhaps has only 5 years or so left to live. Javaland has erupted! This is a little like Bill Gates wondering out loud whether to send Scott McNealy a Christmas card. But is Alan Williamson right? Read this short article and decide for yourself."
Perhaps it's time that Sun stopped being such control freaks. IMHO, they've been the biggest problem with Java. They're at a severe disadvantage on the client now that MSFT no longer ship it with the OS, but will have the .Net runtime... most people don't want to download and install Sun's JRE.
I keep hearing about how Java is going to change the world, but all the apps (Linux apps especially) seem to be written in C & C++. If I were planning a new commercial application I wouldnt even consider Java. Perhaps if I was replacing some legacy Cobol mainframe system I'd look at it, but C++, Posix, and Unix look like the best bet for enterprises systems. I think Java is probably an artifact of the internet bubble where everyone was trying to hack up a portal and look like they had the latest tech. Now, Im not saying that Java was a bad idea, but why is it any better than C#? At least with C++ you know what you are getting... fast code, experienced developers, good tools, and no surprises.
flame away
There are so many Java programmers and so much Java code being produced that it will last a lot longer than five years. People still need Cobol programmers, ok so not mainstream but look how long ago that was designed and despite being crappy it is still here.
But as the article says it really doesn't help when people who should know better say "Java? No one is doing that now. Microsoft is no longer supporting it."
Gates has a lot to answer for.
Kevin
"It's not the cough that carries you off, it's the coffin they carry you off in" O. Nash
This article is really light on details, and frankly useless. It seems more like a call-to-arms for Java developers, but it certainly lacks the power of Mel Gibson's speech in Braveheart.
.NET and C# do not - it's more mature, has a large developer base, and it's APIs and technologies are well thought out, spec'ed and documented.
.NET doesn't have anything that comes close.
.NET has going for it is Visual Studio.NET. Like it or not, it's a great development environment, and one that most Windows developers are already familiar with.
It basically is saying that since Microsoft doesn't support Java, Java will die. I'd like to hope that's not the case. Java has some things
As an example, I just started working with JavaMail a few days ago. Within 20 minutes I was reading emails and sending them. Talk about productive!
The only thing for me that
I don't think you realize that there are broader uses for Java (or C#) than embedded scripting in browsers.
... it wont affect a single thing that the majority of people using those languages care about anyway.
I'm a Java developer, and I know quite a few other Java developers and none of us develop applets. It's all server-side application programming or desktop application programming.
Both these languages are nice general purpose tools for getting all sorts of things done, not just doing lame Javaduke animations in your browser.
So, fine, turn it off in your browser
It seems like we here this a lot. Now that we have language X, no one will program in language Y anymore. Time after time, this proves to be incorrect. There are many reasons to stay with an old language, even if a better one has come along. This includes finding programmers who have the requisite years of experience, the added development cost of doing multi-language development, programmer preference, etc.
C# will definitely become a major player in the field. Both due to the fact that it is a well reasonably well designed language (Anders Hejlsberg did a good job) and that Microsoft is going to put its weight behind it. But just because C# becomes big, doesn't mean that Java will disappear.
I think the author has several good points, especially in pointing out some key shortcomings of Java (java on the client, Swing). Also, the .NET toolkit looks very competent and building and deploying .asp's is quite simple as compared to deploying a java solution.
.NET instead of Java in their tools. More important, when IBM and MS are talking to each other and making standards for web services, it is more likely than not that both Java and C# will coexist.
But the key thing not mentioned is the fact that Big Blue and the rest of the industry is quite determined on Java. Sure, IBM and Microsoft are working together on Web Services, but I think IBM is unlikely to start supporting
Java has shortcomings, but it has become a success despite this, and due to a vast support from professionals ranging from programmers to computer scientists. To say that all this will be gone in 5 years is more than bold, when in fact the amount of existing Java code are probably more than can be replaced in 5 years.
Of course, languages and platforms come and go, but since C# doesn't drastically change the way application development is done - which is what Java did, in several ways - I don't think it'll start a revolution in the way that the article suggests.
Oh, I can't help quoting you because everything that you said rings true
There are couple of key points that are interesting about this.
C# really is a standard. Microsoft's decision to go the standards route really validates the competitive advantage true open standards generate.
The HUGE question is if Microsoft will try and pull some patent / IP protection / royalty stunt with C#. We need to have some lawyer go over the C# license, standards doc, patent agreement to see if Microsoft has given up it's rights to sue for patent infrignment if people develop competing implementations.
My feeling is that if it becomes clear that C# is a truely open standard, that it will be suprisingly succesfull. Despite what Java zealots like to claim, the underlying technology is good. And while I initially was a member of the Java lobby, their eternal harping on the "eventual" standardization of Java turned me off. Java is not an open standard, and for an underlying technology that every company can feel comfortable going with (including Microsoft) that fact is problamatic. And Sun has already pulled a couple of students with Java and royalties on the enterprise level etc. We're getting competing implementations already with go-mono.net for C#.
The problem Microsoft faces is that they really need to totally convince folks (aka with binding legal agreements) that they are making this a real open standard and aren't going to pull a patent protection bogosity on anyone. They face in this case the facts of their history, which is horrible. I'm frankly concerned a bit less about the embrace and extend side of things, though it would be nice if they didn't pull stunts in that area either.
Anyways, if Microsoft does it well, C# could really take off. The key is schools. Java is the it language now, and that matters more than people think. If you start with java you become familiar with Java IDE's, you become familiar with other Java projects, and when the time comes to whip up your first website you'll pick java which means when you deceide to make a big website, you'll probably choose Java as well. People will choose whats comfortable, not what is necessarily technically superior and the decisive moment for comfort is what you are forced to learn in high school and college.
Pure OO was thought up by the creators of smalltalk, like Alan Kay. Java isn't even pure OO in the same sense that smalltalk is.
What?
"Microsoft has successfully planted and nurtured the seed in people's heads that just because it isn't supporting Java in Windows XP, Java is dead"
I don't think MS had much to do with it. Sun and a seemingly large segment of the Java community and many industry pundits made a big stink about XP not including Java. I don't recall MS saying much one way or the other except saying you could download a JVM from their site. The Java community themselves planted this seed of doubt.
"As you know, Java has not made any significant headway in this space due mainly to its awfully slow Swing implementation. While the recent release of JDK1.4 has brought significant performance gains, it's still nowhere near the speed of its native Windows applications with respect to fast, snappy responses"
I'm not going to say Sun should open source Java, but for heaven's sake, make a GUI toolkit that doesn't suck. You can't cite Java's 'newness' as an excuse anymore.
However little you think of VB (especially VBScript) MS has provided a huge number of tools to make development easy and painless - and the results are often decent. I remember being able to put together *simple* VB data collection forms back in 94-95 without having too much idea what the hell I was actually doing. There STILL nothing like that for Java. - Go ahead, flame away. I'm not a hardcore Java guy, but someone else here at the office is, and we constantly see shortcomings. That's not to say there's not strengths too, but still shortcomings. Open sourcing Java *MIGHT* help overcome many of those shortcomings (especially in the GUI toolkit area).
I keep repeating this on various boards - if Sun was serious about getting Java to the masses, they'd carpet bomb the hell out of the US with CDs ala AOL with the latest JVM for multiple platforms. That they DON'T do this speaks volumes. Better yet - get AOL to bundle it on their CDs and have an installer with lots of nice Java packages - an 'intro to Java' for the common man. Explain the cross-platform benefits, etc. - something my mom could understand.
creation science book
"cash in on Java's popularity."
HUH? Sun has put a TON of resources into Java, gives it away freely ("costless"), provides *extensive* docs, and even lets you look at the full source. Java is an immense and diverse platform. Sun sells hardly *any* Java-based products (the only thing that comes to mind is the HotJava Bean which has been discontinued, and Forte, which there is already a free edition!)
Sun has no "services" they are trying to shove on people. They define everything as open specs, and then simply create a reference implementation that you can *choose* to use - next to being fully open source (and they've been making strides trying to be more open), there really isn't much *more* they could do for developers. I'm actually surprised that Sun is devoting this much energy to Java when there isn't much profit to be made from it, but it sure is great.
I don't see C# having anywhere near the community that Java has. Typically Microsoft communities are people who have comradery in being serfs. It's a lot different with Java.
It's 10 PM. Do you know if you're un-American?
Same here.
I really don't like MS more than anyone else but my limited knowledge of c# vs. java really seems to tell me that java programmers who decide for whatever reason to give c# an honest shot are going to love it.
I really like Java as a language but I never use it because it gives me no practical advanatage. I'm quite willing to spend lots of resources porting my c/c++ code to a million different platforms and testing it on those platforms if it means it's going to be really fast and my user's won't have to worry about installing and configuring Java and then having a program that runs slow as tar.
I'm really starting to hate Sun lately actually. I don't see them as any better than MS. They're just a big corporation trying to make their big cheif richer than he already is.
Java is an excellent language but since the actually design Sun has yet to produce anything of value.
They haven't done anything to help open source or any communities. They announced that Solaris was going to be open source (big deal. It's widely used but I don't know anyone who actually likes it). But they dropped that plan anyway.
They sure seem to be making good use of gnome but AFAIK they haven't made any contributions to the code (please correct me if I'm wrong).
And as you stated Java is getting more and more proprietary.
What we need is an open language that matches up to java and c#. Something free of patents and IP.
So hopefully MS will cause Sun to smarten up and loosen up Java a little. Then we may actually be able to see what it's really capable of.
--
Garett
You're right! The painless integration with COM and otherwise native code. (you can do inline C inside of C#)
Also people are saying 'When Microsoft's API is as big as Javas...etc.'
The size of the API doesn't matter as much as you think. Microsoft achieves the same stuff, from j2ee capabilities down through graphics, mathematics, etc on a full api. It also supports checked and unchecked arithmetic, as well as automatic marshalling between primitive and object types (no more of that Double() and Integer() bullcrap)
Thats why Java should be scared, and that's why Java really needs to update their bytecode to make it more optimizable from an algorithims standpoint. If they dont they will be hurting.
Microsoft software usually doesn't start to be good/stable until version 3.0. They may not be giving Java a run for it's money now but how about 5 years from now when C# has the same number of API's as Java?
In five years from now java will still be five years ahead of C#. In five years Java is going to have even more APIs and the existing ones are gonna be even better(more powerful, easier), to work with.
.NET platforms will win over from java because .NET compilers to .EXE and .DLL files which look and seem to work just like the ones you are used to.
Of course they are completely and utterly different behind the scenes, but that one simple fact makes .NET seem familier but new and exciting, and not at all like all those scary java .class files.
Ok, so I exagerate, but I think that having .EXE and .DLL files really WILL make a lot of difference to how people percieve this platform.
Sig is taking a break!
In 1995 Java had substantial advantages over the then-dominant languages. Today I see no compelling reasons for Java developers to jump ship to C#/.NET (and one big reason not to).
How to solve most of our problems: 1.Lots of nuclear plants. 2.Cure aging.
Java is a good language, but starting to show some of the wear all languages do as they age. C# and up coming J# are new languages and like all new languages build on the past with new features, requirements, and libraries. Java did the same thing when it came out, building on C++, Smalltalk, and other languages.
Bottom line Java isn't going to go away, if you like it keep using it. You will have plenty of work for years to come. C#/J# (they all compile down to CRL anyway) are new and cool and people will use them.
Be happy, you got Java because Sun thought they had a better tool than C++ with MFC or OWL or whatever library. MS has upped the ante in order to compete and came out with the CLR and C# and other languages CLR will support. Now its Sun's or anyone elses turn to come out with something better. It called evolution and we all benefit from it.
There is one good reason that Java will never go away, JAVA Rules!
I notice that you only compare Java to C and C++..
Sure, it's better than Stroustrup's train wreck in a lot of ways, but I notice very little enthusiasm for Java among people who already knew a superior OO language, such as Smalltalk.
What you say about OO is true, but Java isn't a very good example.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
Mono will outlive Java on Linux because all the source code is freely available to anyone for any use - commercial or otherwise. This is opposite to the Sun "look, but don't touch" Java policy.
Halcyon's solution which you brag about will never fly because no one will pay for something when there is a free beer/or/speech substitute available. Besides, Mono's speed would destroy the emulated Halcyon approach any day since many C# constructs such as delegates and enums cannot be easily or efficiently emulated in Java.
popular software ported to C# in less than a month:
JUnit -> NUnit
Ant -> Nant
Log4J -> Log4N
As you were saying?
News for Geeks in Austin, TX
I seriously doubt it. All major metrics such as adoption in companies, teaching in education, and adoption by programmers suggests it is continuously growing. Furthermore, the only potential competitor on the market is C# which, while not an inferior clone, is a clone. Jumping languages is a hard task. C# will capture the windows client development market and the microsoft people who never adopted Java in the first place. It is hard to see what will compell people already in the Java camp to move to C#.
The language is awkward and unexpressive; its main appeal seems to be in preventing stupid programmers from doing things their brains can't understand (like multiple inheritance). But we all know that you cannot prevent the programmer from writing bad code. OK, pointer safety and garbage collection is useful, but c'mon, practically every other language apart from C and C++ has this too, and C++ is pretty safe if you program it carefully and use the STL.
You can succesfully prevent coders from being stupid. The difference between C and Java is that you have to be an expert to write good C code; you have to be an expert to write bad Java code. What you want from a language is a language that maps well to architectural models so that your architects are making the decisions, not your immature and inexperienced code monkeys. Java is that language. C# is almost that language.
And the libraries: urgh. They all seem to be designed by committee and make QBASIC look elegant. The standard date library for example, or database access.
The libraries, in general, are actually quite well designed. Especially the database access API. The problem is, novice coders don't generally understand that there are things like non-western calendaring systems, multi-byte character sets, and alternate forms for displaying dates. These libraries make sure such novice programmers do not code a company into a box.
Java claims to be cross-platform, but it only does this by creating a whole new platform on top which has to be installed first. And the JDK is one of the least portable programs you'll find on a modern system. As for being vendor independent: don't make me laugh. Java is just as dependent on Sun as Windows is on Microsoft
There is no way to get cross-platform behavior without installing a virtual machine. Whether you call that VM a browser, an emulator, or a VM is irrelevant. And Java really has no dependence on Sun. It is much more dependent on IBM than Sun.
Java has succeeded because it solves real programming issues for large-scale software development.
Simple: don't slap the word 'Java' on it. No fees, no trademark hassles from sun. Open source java.
Its not like
You are moderated as TROLL.
... unfortunatly the moderation system has no option: WRONG or a option BULLSHIT.
...
...
.NET?
... err ... Java, I guess.
... Oracle 9i ... well there are hundrets of implementations of SUNs APIs.
.NET is running ... I give you 50% of my SUN shares.
If I would metamoderate you I would say: unfair.
But the bullshit you wrote deserves a TROLL rating
I agree that Java is on the way out. The language is awkward and unexpressive;
As unexpressive as you can be with out templates (fixed in the next java releas, 1.5 will have templates) and without operator overloading(like using * for dereferencing iterators in STL).
the rest is C or C++, so why is it not expressive?
its main appeal seems to be in preventing stupid programmers from doing things their brains can't understand (like multiple inheritance).
a) how often did you use multiple inheritance?
b) are you sure it was the right thing to do in more than 50% of the cases?
c) you ever had a memory leak in C++?
d) you ever had a dangling pointer in C++?
Oh, I'm just asking, 4 things in Java can not happen
But we all know that you cannot prevent the programmer from writing bad code.
And what do you want to say with that? When you started programming you wrote perfect code from your first day I asume.
OK, pointer safety and garbage collection is useful, but c'mon, practically every other language apart from C and C++ has this too, and C++ is pretty safe if you program it carefully and use the STL.
So STL has a garbage collector? As well as Pascal has(other languages)?
But now it comes, the above is only sarcasm
And the libraries: urgh. They all seem to be designed by committee and make QBASIC look elegant. The standard date library for example, or database access.
Seems you have in depth Java programming experiance. And also QBASIC experiance. So in QBASIC it is more easy to acces a ODBC/JDBC/SQL data base than in Java JDBC(a API/library you claim is designed by commitee)?
I think only PHP and Perl are easyer in data base accessing than Java. Oops, I forgott SQL.
Java claims to be cross-platform, but it only does this by creating a whole new platform on top which has to be installed first.
And? is that a drawback or what? What does
What did the UCSD P-system? But more interesting: what would be your approach?
And the JDK is one of the least portable programs you'll find on a modern system.
This claim is very interesting as the only part of the JDK which is vendor or platform specific is the VM. The compiler and all tools are written in
As for being vendor independent: don't make me laugh. Java is just as dependent on Sun as Windows is on Microsoft. Even other people like IBM who have their own JVMs have to license the code from Sun.
What a laugh. IBM has licensed NOTHING from Sun, why should they?
Probably they have licensed the SUN standard libraries, why not? Much easyer then writing 32MB source code for your self.
The licence for J2EE seems to forbid using it for any purpose whatsoever: I don't know whether you have to 'purchase' the commercial version from Sun, but it can't be cheap.
I suggest two things:
a) reading the SUN licenses
b) downloading the stuff, its for free, as in beer.
Your customer can download it as well. And most stuff like JRE can be redistributed with your own stuff, for FREE. No special license required.
In fact Java is less vendor-neutral than Windows, since the Wine project seems to have done a better job of cloning the Win32 API than the various free Java projects have with the JDK and libraries. (Not to diss the work these projects have done: but there's just so much of it.
Well, you gave the reasons why FREE solutions failed so far. The point is: FREE is a political or ideological term. The free as in libre is simply not interesting for 90% of the java users. They only need free as in beer or free as in java community lisence.
And every new release brings another set of 'standard' APIs for which the only existing implementation is Sun's.)
Plain wrong: tomcat, JBoss, Jetty, Orion, BEA Web Logic, WebSphere, HPs XYZ, Sonys XYZ, Soniq MQ
Java has succeeded by marketing and not for technical reasons. Microsoft is better than Sun at marketing, so C# will win.
-- Ed Avis epa98@doc.ic.ac.uk
I disagree. As soon as you can call me with a mobile phone on which C# and
Regards,
angel'o'sphere
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
"but Java even has reflection that beats everyone's pants off when it comes to enterprise solutions."
It worries me that (presumably) professional programmers are so inexperienced with langauges that they think Java's reflection API is anything other than a bag hung on the side (note: you could implement a similar bag on the side of C++, using the FFCALL library and debug symbols).
Reflection/Introspection really just covers up for the lack of a metaobject protocol, which is a characteristic of a real (not C++ derived) OO language.
Try writing dynamic code in a real OO language (like smalltalk, for example) and see how incredibly easy and powerful it is.
Note to programmers: Learn more than one or two languages. If you don't see that Java and C++ are almost identical both syntactically and in terms of their respective object models, you need to learn some more.
(* What we need is an open language that matches up to java and c#. Something free of patents and IP. *)
Heck no!
There are already PLENTY of open languages. What is needed is open API's.
Why should I have to use language "X" in order to use API "Y" ??????
Sun is trying to turn Java into a fricken OS. It is like Emacs: "It is not just an editor, its an OS". Java: "It is not just a language, it is an OS".
Table-ized A.I.
There is one big compelling reason - people who want to develop Windows client apps will move to C# and .Net.
Then, one day, they'll want to write an app that runs on the server and spits out HTML pages. Guess what? They'll be writing it in C# and .Net ...
Simple.
Java is Java. You cannot plug any other language into the VM. The VM is Java, and Java is the VM. This means that you have all the good and bad associated with this language (more in a minute).
With .NET, and C#, C# is not .NET. The CLR allows you to plug in other languages. See ActiveState
for details. You can plug in Perl, Python, Tcl, etc. And it works.
Why this is important (and it is): No one language is suitable to all tasks. Things which are trivially expressible in Perl or Python are non-trivial in Java. Things you might be better suited to use Fortran or C++ for (for speed or other reasons) are best left in those languages.
Java makes the fundamental mistake of attempting to be all things to all people. It really isnt as good as the hype surrounding it makes it out to be. And the hype has been shrill as of late.
What is Java to do? Well, it can shrivel up and go away, or adapt. This means that it would need to open its VM up to other languages. It is not C# vs Java that is the problem for Java, it is J2EE vs .NET. J2EE suffers from all the problems that Java suffers from (it has to). .NET has its own issues, but Mono is coming along nicely, and it runs nicely.
My best guess is Java will probably continue to win designs for another year or two as this technology (.NET and Mono) firm up. Microsoft is smart enough to know that Linux is its strongest and fastest growing threat in server-land, so if they can give the Linux world something they can deal with (by allowing Mono to continue and interoperate), they get to kill off J2EE by sucking the oxygen out of it.
And that is exactly what they are doing.
Java and J2EE are "dead languages/environments walking" for a few more years, unless they can open up the VM and interoperate like Mono, .NET, and the CLR allow them to. Check out the articles on perl.com about using Perl with the CLR and .NET.
So, when MS announces that Java is no longer supported on their OS, the message people hear is, "Java doesn't work". This includes ordinary users and clueless CTOs; the techies know better, but no one listens to them.
In addition, "everyone knows" that .NET is built into every computer in the world, for free (well, there is that MS tax, but you need to pay it anyway, right ?). If you were developing a new server-side application from scratch right now, what would you use - a framework which is already built into every computer on the planet, or some dubious 3rd-party software that you have to download and learn ? Plus, it might be un-american to boot, who knows... better stay away from it.
You might think that the level of ignorance I described above is excessive, but I do not believe it is. As a comparison, consider this: recently, I advised my friend (who doesn't have much cash) to install Linux on his old PC, and he said, "No, that's too expensive". Can you expect people who ask questions like this to understand what a "Java library" is ?
In conclusion, I give Java about 3 more years (I think 5 years is optimistic). It's sad, but .NET is the future. MS simply has better marketing.
>|<*:=
What has Sun delivered? Well, they have been doing a good job on the JIT. But beyond that, the Java APIs have become huge, there is no new support for numerical computations, the genericity support is flaky, VM sharing and fast startup are missing, and Sun is suing or picking a fight with whoever shows any initiative in the Java space.
C# isn't a lot better than Java, although it has a few important additional features. But, amazingly, Microsoft has been doing a much better job opening up C# in the form of ECMA C# than Sun. Maybe, in the long run, we may just have to thank Sun for providing the competition that caused Sun to open up.
K. Whats next? Going to compare Java to Assembly? You get an F, go back to studying.
Portability of code to many platforms is a major consideration at the server level, particularly if you can only have one server at a time. If it runs right on one standards-conforming server, it should also run right on another standards-conforming server, with no nasty surprises. The realistic choices are COBOL, PL/I, ADA, and Java provided Sun can keep everybody from screwing up the language. That's of course assuming that the stuff on the server is actually important.
I don't recall MS saying much one way or the other except saying you could download a JVM from their site. The Java community themselves planted this seed of doubt.
Yeah, but the friggen Java download is 6 MB's! (So I've heard.) That's nothing for corporate users on broadband connections, but when you're trying to appeal to Joe Consumer surfing the web with his modem at home, with an attention span of maybe 20 seconds, he's not going to be patient enough to sit through a 30 minute download just so he can view your site. More than likely, he's gonna keep on surfing.
If broadband had 80% saturation with consumers, then maybe it wouldn't be a big deal. But I'd bet large amounts of money that this is Micros~1's plan, to push Java into irrelevancy by making it difficult to use. They couldn't own it via their embrace and extend strategy, so they're attacking it by slieghting it.
Maybe you should take a peek into the corporate world. Want to add SNMP functionality to your Java product? J. Random Hacker doesn't, but Q. Big Corporation often will, and the only way to do this is to fork out the moolah for Sun's JDMK. The cost? $10000 for one (1) developer seat and 50 runtime licenses.
But Sun's basic strategy is to popularize Java (at a loss) and then sell Sun hardware for it (at a profit). The company I work for is almost entirely a Java shop. We make carrier-grade applications, and whenever possible we ask our customers to use Sun hardware, because that's what Java works best on. This is not a coincidence.
Cheers,
-j.
Okay, so maybe Microsoft isn't the most cooperative when it comes to defining standards, given its preference to embrace and extend. But, seriously, learn to dissociate C# from Microsoft's overall .NET strategy. Perhaps many Java brewers are not trying out C# because of the MS barrier.
.NET IDE.
C# is a language very similar to Java, but is an improvement upon it in many ways. Many desirable features absent in Java are present in C#, such as operator overloading, unified type system that permits universal indirection of objects and the all-powerful attributes that permit code to be decorated with metadata inline. Having worked with C#, I think it improves programmer productivity quite a bit, especially when coupled with the Visual Studio
I think one way to combat apprehensions about C# is to encourage the independent development of ECMA-C#. That way we get to use a language as good as Java without having to deal with the tactics of the software big brother. Once ECMA-C# is dissociated from the flavor MS sells, Java and C# will be in a situation where programmers, and not business contingencies, decide who survives.