Post a Comment
Its been almost a DECADE SINCE Microsoft announced they were going to stop trying to pretend like they were going to use any standard version of Java, and moved to their own proprietary copy of the java concepts.
And yet..in all that time very little is actually using it in the Windows OS.
Makes you go hmmmm.
The language is good, but the runtime won't work for low-level Windows components for a couple of reasons (many improvements were made too late in the game for inclusion into Vista). Singularity uses a totally different runtime system that doesn't do any jitting and requires that the entire system be compiled with a single compiler. That's not exactly in line with the Windows way of doing things.
And some Windows apps are written in .NET. Media Center is a big standout that ships in the box for many editions of Vista. It's not exactly a small or crappy app.
There isn't even a great deal of that going on. Most of the business code that has been written on desktops over the years has been mainly C++ and Visual Basic, and there is simply zero business case for anyone to rewrite code just so they can run .Net and program in C# and get applications that are functionally equivalent.
Anybody who has moved to something new over the years has moved to web based applications, mainly because they don't need to faff about with the client and all the costs and administrative pain that entails. MSDN magazine comes up with ever more creative ways of pulling in dependencies that will blow your foot off once you try and deploy it to users. At least web applications have had some return on investment.
Then why should anyone else use it?
Who is claiming that cloning your existing programs with C# is a good idea? You now have .NET and C# as an superior alternative to C++ and VB, simply use it if you want.
Such broad claims will always prove false. Anyway, web applications may very well mean ASP.NET and C#.
Then why should anyone else use it? "
What's the deal if not someone else is not using C# to program core parts of Windows?
If you just don't like this programming language or the company behind it, just say so. Less noise.
There isn't even a great deal of that going on. Most of the business code that has been written on desktops over the years has been mainly C++ and Visual Basic, and there is simply zero business case for anyone to rewrite code just so they can run .Net and program in C# and get applications that are functionally equivalent. "
Also gotta love the marketer's summary
Well, kind-of, but quite a small proportion of the development market actually (a smidgen over 4%).
If we're gonna be talking about averages here, Java is the thing that is used the most, about five(!) times more on average than C#.
Source:
http://www.tiobe.com/index.php/content/paperinfo/tpci/
Java is mostly used for the back end of webapps, but there are large number of Swing apps out in business-land (although there are negligible shrink-wrapped comsumer-level apps).
One reason for this disparity is developers asking themselves why they would use C# to get mostly equivalent functionality but limit themselves to only one server O/S? (Mono doesn't have all the newest stuff, but it is good project). Sure there are a few nice language tidbits in C# but they don't outweigh platform- and vendor-dependence, and in fact these extra language features don't constitute the bulk of most development code (they might affect a few percent of your codebase at most).
Funny how I have managed to stay employed for the past 7 years writing nothing but C# code in IT. Along with the hundreds of developers I've worked with. Along with the hundreds of developers they have worked with. Ad nauseam. No one is rewriting anything, but do you not think that IT departments are constantly writing new applications? And guess what they are doing it in...either .Net or Java. Your comment is just way off base.
Sorry, but you are completely wrong. I've worked for a number of major companies where their entire in-house system was written from scratch in .Net languages. A lot was written in VB.Net, which is an absolutely different ball game to traditional VB6, but most is written in C#. I know of very little business software written in VC++ since the advent of .Net, but then maybe you travel in different circles.
I have also seen a lot of software written in managed code that is sold to other parties, be it ASP.NET or desktop apps. In fact, i *work* on a product that is sold to third parties and is extensively written in C# and VB.NET. There's no native code what so ever.
Why not?
Look at SharpOS:
http://en.wikipedia.org/wiki/SharpOS_(operating_system)
The lack of usage of java in the OS has nothing to do with the quality of the dev environment on their client and server systems.
This is getting away from C# but:
Java was never designed to be a multi-language run time framework that was set to be the central framework used to develop applications for the Solaris ecosystem.
.net is set to be the central framework used to develop applications for the Windows ecosystem. it is more cohesive than Java's mess of a framework and a lot more developer friendly.
Almost every business product MS has uses .net in some way, and almost every new product they make is done in .net. There is no real business case in re-writing most of their software from the ground up in .net for no other reason then maintainability and futureproofing, for them or for anyone else.
Then why can't Microsoft's customers take a classic VB project, or a VC++ 5 or 6 application, open it up in Visual Studio 2008 and get it to compile and run in a .Net environment with very little, if any, code changes? Why is Microsoft asking their customers to do something that they themselves admit is a waste of time and money and is not backwards compatible?
I don't think anyone is asking people to do that. MS released a new version of the WTL awhile back that had vista bits that only got into .net natively a few weeks ago when 3.5SP1 came out. There is still a large amount of legacy VB/C++ apps out there, and a large community of people around them. .Net is for new development. I wouldn't doubt you if you said you saw some marketing schlock that said otherwise, but nobody with any sense would take that seriously, even microsoft itself.
C# seems like such a poorly chosen name.
Microsoft should have just called it what it REALLY IS, having failed to corrupt the Java marketplace with proprietary extensions and strategic omissions in their horrible J++ product, Microsoft has simply created a copy of Java, threw in some features borrowed from Delphi, and came out with a new name and a familiar marketing approach.
It would seem like something along the lines of: "Microsoft Cafe", "Microsoft Brew", "Ground Rounds", "Strange Brew", "We have a java too neeiner neeiner", etc.
Edited 2008-10-01 16:42 UTC
I disagree with you.
I am not a Microsoft fan and I am actually a Java developer, but I consider C# a good evolution over Java, improving in several aspects, from small to larger ones:
1. Though I do not like the idea of "properties", they improve the developer productivity and the program readibility.
2. Primitive types autoboxing is far better than the Java's, you can create a List<int> in C#, but in Java you must to create a List<Integer> using the wrapper class.
3. The type erasure is a big mistake on the generics implementation on Java. C# implements generics support from the CLR and that's nice.
4. The C interoperability mechanism in C# [PInvoke] is better than Java, it is easier to use and you do not need to create a wrapper DLL around the C functions you must to use.
5. Support for enumerated types and custom properties [annotations] is built from C# 1.0; in Java they added such feature since Java 5 due to hardly competition with .NET.
And about the name... is just great!! C is the language, C is the musical note; C++ is an "increment" to C... and C# is a semitone upper to C... really nice.
Do not read me wrong, I am not a C# advocate, and I like Java, but we cannot speculate saying Java is better for the simple fact of being.
Of course there were improvements over Java. Microsoft could look at Java, copy it, and make improvements where necessary. It wasn't like they came up with the improvement by themselves either. There was a lot of talk at the time of things Java could have done better and many of those things made it into C#. I don't mean to say that C# is worthless (I don't particularly like it or Java, but I think both have some value), but it isn't anywhere near the greatest advance in software development.
I worked with many of the very early versions of C# prior to its first release, it was embarrassing how exactly like Java C# was. I remember the first time I reviewed some preliminary documentation for C# thinking to myself, "Wow Microsoft, you changed 'main' to 'Main'. Way to make it your own..."
I like the parent poster's names for Microsoft Java, but I always thought Microsoft should have called it "Me2".
Well it's not so bad.
C# is more like C++ than Java. It's C++ with a managed VM and ideas culled from Delphi. C# shares a lot less common syntax with Java than it does with C++ really. It just implements a lot of the borrowed Delphi ideas in more of a C++/Java fashion.
Having said all that, C# is actually a pleasant and productive language. It isn't crippled as Java is with its obsession with try/catch and odd MVC based GUI nonsense. C# lets you do all that if you *want* to, not because you **have** to.
Then again, my personal pref, YMMV.
No, I worked with several UI frameworks including System.Windows.Forms, Qt and GTK+, and in my humble opinion, the way Swing was modelled is pretty good and far better than their competition.
Ah! I worked also with MFC, and it really sucks!
Edited 2008-10-02 14:45 UTC
Umm, how can you say Swing sucks when Swing is closer to the design spirit of OWL than almost any other toolkit out there. OWL rocked compared to MFC, unfortunately Microsoft delayed licensing Win32 to Borland which destroyed Borland's chances of competing - nothing new here, that's always the way MS rolls (and we're seeing glimpses of it from Apple as well).
Qt and wxWindows are hideous in that that use preprocessor cruft to get stuff done, so I can't see how they could possibly be superior from a design point of view. Especially now that Java2D (and Swing as a consequence) is completely hardware accelerated with pixel shaders (and no change required to the source- or byte-code of any application!).
Incidentally, C# was originally a project called "Cool" and came directlyu from Microsoft's Java implementation, though they don't want to mention it since they lost a court battle with Sun over use of the term Java.
4. The C interoperability mechanism in C# [PInvoke] is better than Java, it is easier to use and you do not need to create a wrapper DLL around the C functions you must to use.
It might be the case for clients, but in my experience writing native DLLS to be wrapped I've found C++ -> C# far more fraught with pitfalls (pinning nonsense and all the non-standard C++ macros required) than the equivalent JNI (Java Native Interface) -> Java coding (which initially looks daunting but is actually very straightforward and relatively simple).
I won't start on about wrapping .so/.jnilib since MS C# can't do it but Java can (important with the 20% computer sales that Apple are surging to).
Edited 2008-10-02 06:44 UTC
Politics aside, J++ was not a horrible product. Those extensions were sorely needed advances that couldn't happen in the glacial JCP, it was the best IDE for years, and it was faster.
You could say the same thing to sun, why call it java when the differences with C++ are more stylistic and omissions then anything else?
And C# borrows features from all over, python features being far more notable then those brought over from Delphi.
I beg to differ. I remember when Visual J++ came out. One of the "highlights" of J++ was the WFC - the Windows Foundation Classes. Basically, WFC was an MFC for Java. It allowed J++ developers to develop Windows-only applications in an MFC fashion. As an MFC developer, I thought that was amazingly foolish. If I wanted to develop MFC applications, I was going to use MFC, not some wierd Java/MFC kludge. And if I was a java developer, there was no way I was going to give up the platform-neutral appeal of java to start creating Windows-only apps. To me, it looked like a total dead end - and I was right. Visual J++ started down a bad road, that fortunately dead-ended very quickly.
"I definitely think that there is a space for functional programming today, and F# is unique in being the first industrial strength functional programming language with an industrial strength tooling language behind it, and an industrial strength platform underneath it."
Have this guy ever heard of... Erlang ? Hard to make more "industrial strength functional programming language with an industrial strength tooling language behind it"... I bet Joe Armstrong at Ericson would love this quote
Kochise
Did you create a compiler for Pascal and call it TurboPascal?
Did you create J++ [no politics, please] or C#?
Were you the main architect of Delphi early versions?
Anders Hejlsberg is a very respectful guy, and if you read the article, you can see the personal quality he has... He is a personality, but he is happy "because Microsoft confided in him and gave him the opportunity"...
Anders Hejlsberg is a wise guy, at least I bet so. Yet I find 'strange' that he 'missed' a concurrent language (to say the least about Erlang) that exists for 20 years now !
Would F# be able to run a complex engine such like the Ericsson AXD301 ATM switch with industrial real-time performance, fault tolerancy, hot code swaping like Erlang currently does ? After all, Anders states that F# is the "first industrial strength functional programming language"...
Kochise
When asked for his opinion on standards, Hejlsberg replied:
It's nice the hear support for mono from inside Microsoft.
Edited 2008-10-01 19:56 UTC
I liked the tone of the article. Anders seems like a nice guy. It almost made me feel sorry for my diatribe against C# ( http://www.curly-brace.com/favorite.html )...
You sir, are nothing but a misinformed troll. Virtually everything you've mentioned in your last few posts is just flat out wrong. It would take me an hour just to correct all the factual inaccuracies you're giving. I honestly don't know where you are getting your information from, but I'm inclined to think you're just making it up.
FACT: COM is dead in IT. Legacy components exist, but the majority of companies have long since moved on to newer technologies. COM is ANCIENT history. Components have indeed either been rewritten, or have been wrapped. I'd like to know where you get the notion that deploying COM interop is anywhere even close the nightmare that was COM deployment? You deploy the interop assemblies, and you're basically done. All of the COM registration information is embedded in the manifests themselves. You simply deploy the assemblies and are done with it. I've done this literally hundreds of times, and so long as the COM components followed MS guidelines, there have been no major issues.
FACT: People DO want interop, for all of the reasons that you yourself have mentioned. Had .Net been released without interop, that would have been the nail in the coffin right there. MS has always bent over backwards to provide backwards compatibility, and interop is no different. No one wants to 'open their code in a new version of Visual Studio and compile it'...perhaps you've never heard of black box development? There is no reason to even mess with older code if it was written correctly to begin with.
You misquoted me again. The correct quote should be that only 2% of IT departments are maintaining existing COM components. As for suggesting that I work for a living, are you kidding me? I've got a decade in the software industry, and 8 of those years have been 95% .Net development (and 2 of those actually working for Microsoft). I have written and deployed more production code than you've probably even read as is oh so evident by your complete lack of knowledge of how IT really works.
Yes. Several times. I've never outright asked him for permission to directly quote him, but maybe I will.
You're wrong again. They do not compile down to the same IL. In many cases, the IL is actually quite different. VB has plenty of different features that lend itself to more RAD style development. The two languages have diverged quite a bit over the years actually.
Seriously? Classic (not classical) VB was never designed to be OO. It didn't support inheritance for crying out loud, which is the core tenet of OOP. It was an event driven language largely built to provide a simplified model for programming against COM. And that's it.
You're asking the wrong question. The real question is, why would they want to? MS has gone through great pains to ensure that this very scenario never has to happen. And it rarely does, so long as the legacy component adheres to MS guidelines.
There is nothing I hate more than people who state factually incorrect information as if it is fact. Perhaps most people around here can't see through your bullshit, but anyone with any real world IT experience can smell it from a mile away.
Another fact is that a lot of software-producing companies have their main focus somewhere else. For instance, they are delivering software to operate a piece of hardware, or they have algorithms for analyzing certain data which are packed up in some nice GUI app.
These are usually not the kind of companies who write stories in .NET magazine, or post on OSNews. Each time they grudgingly send their software team on a course to learn about the latest tricks in "software deployment" or "advanced .NET interop" only to find out that this info is outdated less than a year later, that's a major PITA.
Keep in mind that where you may think "this technology is already half a year old - I can't imagine there's anyone left _not_ using it", there are companies who make stuff which is supposed to last for 15 years or so. If they jump on everything which is "hip" now, you can bet that they can't find anyone remembering how to fix it ten years from now.
COM is far from dead in those areas.
I am not the only one pissed off at MS complicating things "for my own good". Recently I tried installing a simple COM DLL on a new machine. To my utter surprise, a simple regsvr32 didn't work anymore. Google for "manifest hell" for more information.







