What if Microsof used it?
Oh dear! The main complaint about Vista was performance, and you're wondering what would happen if they did it with an interpreted language? No thanks, I love .NET but C++ still has its place.
Microsoft closes The Noughties by trying to keep up with competitors and to remain a top destination for developers by embracing cloud computing and open source. It opened the decade with another massive platform shift, though: the introduction of .NET. .NET was announced at the first TechEd of decade in Amsterdam in the year …
Someone with a bit of sense to back me up on the 30th Feb point. So many pendants talking about weak and strong typing - I prefer weak typing as it means the keyboard lasts longer. I'm thinking of starting a blog to highlight all these issues with the DateTime functions and bring them to the attention of Microsoft. Also, not being able to insert the same key into a hashtable multiple times is a ridiculous constraint but I'm sure all you .net pendants out there will come up with some other excuse.
I have to agree, that dates should roll over,
So in the same way 30 Feb is just the same as 02 Mar,
33 Dec 2010 would be the same as 02 Jan 2011, they are of course only relative values from a previously specified starting point, we could say 100202020 days AD, instead of grouping date into in silly years, months and days,
I would second a metric system, where 10 days is equivalent to 1 month. And 10 months the same as 1 year.
I think everyone was quite buzzed by the proposals for Longhorn and .net looked like the right thing at the right time. The engineers had delivered the plans for a magnificent cathedral but as usual the assorted managers, strategist, accounts and executives all chipped away until it was reduced to a municipal bus station. It started off looking powerful, elegant and expandable. In the end it hardly fit for purpose.
It's my belief that .net has had the success it has despite Microsoft not because of it. Everything they put out has a smell of 'we can dominate the market' about it. Every decision is not about improving products and services but side-swiping competitors and creating lock in.
Municipal bus stations tend to be small, busy and reasonably efficient in the delivery of its services. There is also no reason why it shouldn't make money.
On the other hand, cathedrals don't make money. They suck money out of the public purse while inspiring the Awe of God (and consequently his Officials on Earth) upon the Great Unwashed.
I would rather that an OS would be a municipal bus station than a cathedral. It should be small, unobtrusive, efficient and productive.
Besides, Apple are the people to talk to about cathedrals. They tend to go in for beauty, awe, religious devotion and Big Projects.
The ones I've used tend to be inefficient, ugly and seemed to be designed for the benefit of the operator not the end user. Generally speaking not a nice place to be.
As for making money, 'municipal' suggests council owned to me, as in tax funded, as in 'how can we dish out the contracts on this to gain the most personal benefit'.
My opinion of it went up when I was able to take something I'd put together on a Windows machine and run it under Mono on Linux. I would think that if MS devoted some energy to helping clear up incompatibilities (instead of encouraging them) and keeping Mono capabilities up to date with current .NET then it will flourish.
.Net is over complicated, over engineeded and with the latest "upgrade" provides even more barrier to entry.
But there's enough code deployed that sustained engineering roles will be around for decades.
If Office or other major Microsoft apps used it (apart from the Expression suite from the same team) it might have some credibility but that's lacking.
As a web developer the move from Classic ASP to ASP.NET was the reason I gave up ... why lock me into Visual Studio when I can use Textmate for PHP development and deploy changes faster? Ironically, with ASP.NET MVC they seem to be going back to an replica of the old Classic ASP model (just with more layers of cruft)
Lock in to VS?
There are a number of IDEs out there that allow you to work with .net
You can even use notepad and compile with CSC.exe from the command line if you feel like it... the only lock in is that VS is so good (and has free editions) that there is no reason to use anything else.... thats not lock it, you do have a choice.
And I fail to see how MVC.net (Which is an extension of the web forms development model) is anything like classic asp? Enlighten me please.
A problem with .NET -, as with all systems based on huge class libraries - is that there are dozens of different ways of achieving the same ends, all of which rather bury what they are doing, from view, by design. The result of this hidden execution, however, is that - far from abstracting you from the underlying mechanics of what is going on - coding properly in .NET often means you need a much deeper understanding of the underlying mechanisms, if you are to avoid a lot of the problems I am seeing with failed or failing .NET projects right now.
It's not the technology that's bad: it's just that far too many of the people working in it are woefully under-qualified to be doing what they are doing, or earning what they are being paid, to do it. All those guys who recently stopped producing the really dreadful PHP applications? Well, they're now hard at it, cranking out .NET (and with an IDE that does intellisense, by default, they can crank out bad code at a rate they could only dream about, hitherto; and since their manager measures his e-peen by how many lines of code his underlings can produce in a day, that's just fine and dandy until the entire project hits the rocks).
If your developers think 'code reuse' is something you do with the cut&paste keys, it really doesn't matter what technologies you use, but if a lot of high-profile projects - like the recent NHS ones - tend to die horribly, people will tend to attribute this to the fact that they were .NET projects, and won't stop to ask whether was just because the same bunch of overpaid drongos were being employed on each failed project.
I spent much of the decade, that is now closing, looking at really really bad PHP. I now suspect I will spend much of the coming decade, looking at really really bad .NET. But Hell, who cares? I get paid to do this, and I'm not about to advocate people start doing things properly, if it means they stop needing people like me around (the fact that I get paid around a quarter, the money, of the guys who produced these clusterfucks in the first place, is by-the-by - it take four times as many people to actually support one of these creeping horrors, as it does to write it in the first place, so I guess that's only fair).
Personally I hate languages like Java which try to hide what the machine is doing so as to be more friendly, or somehow 'safer'. The price is all to often huge code bloat as inexperienced users throw code together and leave it to the machine to manage it all. I'd love to ask some of today's code whizkids to develope meaningful code on a 32K PDP-11 with overlays. They'd never get past "Hello World" :)
Sure, modern machines give much more scope for more sophisticated systems, but that's no excuse for being lazy. Or for being plain incompetent, far too much of the Java code I see today has been written in "C"...
Using Lejos you can run meaningful bodies of Java code on a Lego NXT (64k RAM, 256k flash - with only a small fraction of the flash being used). Indeed, Lejos would even run on the Lego RCX with 32kB of ram and only a boot flash.
But, I agree with your sentiments. Excessive platform wrapping does kill performance.
Hey there, I'm a Java programmer now, but I was brought up on PDP-11 using RSTS/RSX 11 M Plus/Vax, System 38, AS/400 etc etc. I've done C/C++ and know about writing performant code.
Any one can write really bad code in any language. I've seen some dreadful COBOL, C/C++, JCL in my time.
I've even done VB. Hmm, maybe I should not have owned up to that. I do agree though that .NET allows you to write very bad code very easily.
What Java does is provide a consistent interface to the underlying OS and hardware. I'd dispute the word 'hide' - Java is supposed to be cross-platform, so you don't want to expose the platform-specific stuff when allows people to inadvertently tie their code to a platform. I spent the first ten years of my career coding in mainly C for Unix platforms and VMS, getting low-level code to work consistently across multiple version of Unix was a nightmare. It takes little or no effort to do this in Java, which was the whole point of the language.
Granted there can be occasional issues moving from platform to platform because garbage collection and thread management strategies can change between VM implementations, but the argument that Java is bloaty because it abstracts out platform issues is, frankly, bollocks.
Inexperienced users will always write too much code, regardless of the language/platform, because they are inexperienced. I used to see assembly language programs that were twice the size they needed to be because people didn't understand which instructions set which processor flags.
I agree a lot of Java code looks and feels like C - that is because companies don't train, and staff don't have the time to learn the right way on the job. You can mentor people and improve their coding style that way quite successfully though - trying to use an OO language in a non-OO way is difficult and creates bloat of its own.
It's interesting to note that whilst Java the language has continued to grow through the decade, one of Sun's current development areas for the JVM is... better support for other languages on the JVM.
So while Microsoft responded to Sun with .Net and the common language runtime, Sun is now responding to Microsoft by getting all JVM languages to the point where they are all equal in the eye of the JVM.
In hindsight, both companies can chalk up a victory. Sun for cross-platform equality, Microsoft for cross-language inside a VM. Sun is now incorporating both ideas into its runtime (we all know where Microsoft stands with respect to running .Net on non-Windows platforms).
As an architect I will acknowledge that both platforms are suitable for enterprise development, one will always suit a given scenario better than the other, but I will continue to lean towards the JVM as a platform even if my team isn't writing Java - because not being tied to a given OS or machine architecture carries less risk.
.Net - ah yes I remember. Announced in 2000. Not shipped in XP, so you had to force users to install it to run any app.
There was no .net equivalent to the webbrowser com object - so you had to roll your own. This hand built com object wrapper for the web browser had lots of bugs and was lacking lots of features/api. Then came .net 2: it did ship with a webbrowser part, but it seemed that all they did was wrap the com object in .net, just like I had hand done 3 years earlier. In fact many .net objects are nothing more than com objects wrapped up. Which is ok for some stuff, but come on - the needs of programmers change over the years.
I can't believe all the money they spent on developing .net - and what did they get - shallow wrappers of buggy circa 1997 com objects. C# may be a nice language - but its still not clear how to actually program on Windows, so not many people do. Just try and find out how you build something simple like a button that looks like it belongs in Windows. Not an easy task.
The initial releases were also incapable of hosting out-of-process OLE objects, of the sort that Microsoft had been trying to get us to write for the previous ten years. Maybe it works now. I lost interest after a few years.
I think the moral of the story is that if you want the entire world to re-write everything they've done to your brand new platform, for no immediate end-user (ie, customer) benefit, it helps if it is actually technologically possible to do so. Even then, mind, it's a hard sell.
Yes, it is a kind review, but that is because mere words cannot describe what an utter failure .NET was.
Diversity is generally regarded as a good thing, but not when it applies to a single company's products, and that has always been the Microsoft Achilles Heel: they do love to provide at least three different ways of doing anything, and this results in inherent complexity.
On the other hand, Java has the good kind of complexity - developers have the choice of whether to write tiny little applets, or huge multi-tiered apps, all with essentially the same language. If Microsoft understand this, then they are showing no real sign of doing anything about it.
I moved from 100% C++ to 75% C# over the last three years. C# is nice but it's mainly because of the integration with the IDE (and Borland's Builder was nearly as good at that) and the power of the provided assemblies (which Borland was pretty good at and could be achieved in any language if the developer knows what they are doing).
Garbage collection is very meh. If you use RAII in C++ then resource allocation is dealt with far more efficiently and requires [i]less[/i] thought. MS have published a guide to their garbage collector and it's a stupefyingly long document full of does and don'ts.
By contrast I can teach someone about RAII in C++ in an hour and give them a 'cheat sheet' on copy constructors that is half a page long. Their programmes will run in a far more predictable manner making resource planning a lot easier.
The biggest issue with C++ is that programmers often don't break algorithms down far enough. It's as if they think that calling a function or a method is an expensive operation. My rule is simple - if starts to feel complicated spin it off into a new function or method.
Oh and all programmers should learn to name their identifiers properly. Say what they bloody do - don't use some half arsed mnemonic.
It's fashionable to hate on Java but the reality is that versions of Java run on anything from phones all the way up to big iron. Not just one implementation but many, supporting virtually every hardware architecture and OS. JVMs are compliant with various Java standards and therefore largely interchangeable. There are even multiple open source and clean room implementations of Java. And of course Java drives a huge chunk of application servers in every conceivable way. Using Java really is a no brainer if you want hardware / OS neutrality.
.NET has tried to ape Java and has succeeded in some ways but failed dismally in others. The C# language is a lot nicer than Java, and support for (Windows) native look and feel is vastly superior. If I was writing a Windows only app I would choose C# & .NET over Java any day. On the back end things aren't so clear cut. I don't see much reason at all to use ASP.NET and .NET on servers unless I was interacting with Microsoft products. The reality is that Java offers a vast selection of solutions compared to pretty much one on .NET. There are literally dozens of MVC frameworks for example. I think .NET's future is largely in the front end with some middle tier stuff. Silverlight is very interesting technology but strictly speaking its not .NET.
Part of the issue is that .NET is not write once, run anywhere. If it had been I think Java would be long gone. But its ability to run anywhere is a massive strength. .NET just runs on Windows with Microsoft's .NET runtime. If you're lucky it *might* run on Mono, but largely Mono seems to exist as a sop to people complaining about cross-platform support. Nobody seriously considers Mono as witnessed by the large number of NET apps polluted with Win32 calls, or that make bad assumptions about the operating environment.
So I think Java still wins. It's biggest problem is definitely the language and its UI support. I hope with Java 7 that Java the VM and and Java the language will become a little less intertwined. It is quite possible that languages like Groovy represent the future of the language in much the same way as C++ overtook C back in the day.
When it was announced, the people at MS had a .NET label on everything, up to and possibly including the toilet brushes in the executive WC. This lead to a lot of confusion about just what the heck .NET is and isn't, what it does and doesn't, and so on. It gave a lot of people a bad taste, and that hasn't completely gone away, either.
Then again, it's like a lot of things MS: sounds good on paper and seems intriguing, but when it comes time to ship, it's as interesting and useful as a wet cardboard box. In off-white.
It all boils down to choice, if you want to only use Windows you use .Net, if you want to choose the platform best suited to your application, be it linux or various unix systems or Windows, you go with Java.
If you only know Windows its a really simple choice .net and c#. If you're a bit more broad based certainly on the server side, you can write it in Java and run it pretty much anywhere. Another win for Java is the large amount of open source libraries from people like the apache foundatation. Another nice thing about is the source code is easy to come by, helping debugging and general understanding ... not sure if that's the case with .net.
There is no doubt that .net provides a first class environment for programming Windows Enterprise systems, trouble is time spent learning it is effectively time spent tying yourself to Microsoft and their products... which is fine if you don't mind. For people like myself who've been in the industry quite a while and seen and taken part in the various 'Microsoft Wars' being tied to Microsoft isn't one of our favorite past times.
I am fortunate enough to have programmed in both Java and .net.
I do like both and it is not a matter of which one is better, they are both good under different situations.
The important thing to consider is developer(s) writing the code. A competent developer can write great, manageable, efficient code in either of them. And if you are one of those who read a couple of articles and can produce "Hello World" and start writing serious application then...
I loathe .NET.
Unlike many of the Reg Readers, I am not a developer, and I have no idea what it means to developers. I know very well what it means to me as a customer and a user: Long, long downloads of stuff I have no idea what I need, followed by install times that vastly exceed the download times. Why? WHY?
"Requires .NET Framework V.n.m.i" --- enough to put me off any software, especially the fact that its requirement is likley to be very version dependent, and one ends up going through this .NET crap download install yet again. I try to avoid software that requires it, even if I have already got the required version.
I also hate that they stole the name. .net meant, and still does mean, something else entirely, but Microsoft doesn't own the internet, so they won't worry about that. How much more effort would have taken to come up with something slightly, vaguely, original? None, probably.
They could have called it revolting long wait. "This Software requires Revolting Long Wait, and will now ensure you have one..."
When it asks you to update to a point release and after "the revolting long wait" the update did not work, and leave you with a machine in an inconsistent state.
Then you have to dig on Google and follow arcane procedures to remove the thing and reinstall it again.
Had a few of those on servers specifically installing BackupExec v11 which requires .NOT for god knows for what reason.
.NET really has worked. You've summed it up with the job vacancy bit. People are pursuing it in preference to Java. Microsoft have of course made gambles and lost over the course of 10 years. If you can point out a company that has not lost a business bet in 10 years I will happily retract this comment.
.NET has not destroyed java, nor would it have done regardless of how great it could have been. It has done the best thing possible - promote competition. Java had to pull its finger out and get its version of Generics in, it had to keep innovating (not as well as .NET) to keep up with a rival language, which until then there wasn't one.
So to summarise - I view Java as the IE6 of programming, and .NET as the firefox. It's a funny role reversal, but actually it's really been a good thing for the industry.
In those years I have never ever seen a screen shot of what a .net desktop would have looked like.
Maybe perhaps this was due to other court room litigation that peopel still wanted IE stripped 100% from the OS and this was proven with thin version of windows 98 and was also shown
that the process to strip IE was the same and workable to do on Windows 2000 and XP.
Microsoft still has not learned.
During the "Bet the Company" event in 2003, they showed us all these Director Show...er, "live code demos" of the Longhorn interface, and did all their coding on XAML.
It was the Language of the Future™.
So far, this comment is the first mention of this Magic Language, in either the review or the comments...
... as a developer platform, the integration with the IDE is terrifice, c# is a fine knockoff of Java. Beyond that, nothing ever came of the plans to re-do Windows itself as a set of .NET APIs so as other posters have pointed out, we're still building on top of layers of wrappers around the old Win32 oand COM interfaces.
The developer tools group at MS did what they set out to do with .NET and delivered the goods. I think the platform group faces problems so large and so intractible that forward motion at this point is measured in inches.
As always, the discussion comes down to: when are they just going to START OVER and rebuild Windows from the ground up? Don't hold your breath.