Please create an account to participate in the Slashdot moderation system

 



Forgot your password?
typodupeerror
×
Microsoft Programming

Has a Decade of .NET Delivered On Microsoft's Promises? 558

cyclocommuter writes with this snippet from The Register's assessment of whether Microsoft's .NET framework has been a success: "If the goal of .NET was to see off Java, it was at least partially successful. Java did not die, but enterprise Java became mired in complexity, making .NET an easy sell as a more productive alternative. C# has steadily grown in popularity, and is now the first choice for most Windows development. ASP.NET has been a popular business web framework. The common language runtime has proved robust and flexible. ... Job trend figures here show steadily increasing demand for C#, which is now mentioned in around 32 per cent of UK IT programming vacancies, ahead of Java at 26 per cent."
This discussion has been archived. No new comments can be posted.

Has a Decade of .NET Delivered On Microsoft's Promises?

Comments Filter:
  • .Not (Score:5, Informative)

    by should_be_linear ( 779431 ) on Friday December 18, 2009 @09:18AM (#30486006)
    Joking aside, Java is multiplatform in practice and .Net is only in theory.
  • by wiredog ( 43288 ) on Friday December 18, 2009 @09:22AM (#30486048) Journal

    Is that so much of it wraps, and hides the complexity of, COM. I haven't had to deal with COM programming in 5 years now.

  • Re:Java too complex (Score:4, Informative)

    by thetoadwarrior ( 1268702 ) on Friday December 18, 2009 @09:26AM (#30486082) Homepage
    That's the idea behind JavaFX.
  • Re:.Not (Score:4, Informative)

    by ByOhTek ( 1181381 ) on Friday December 18, 2009 @09:26AM (#30486094) Journal

    Actually, I'd argue Java is also only in theory.

    I've had to re-write too much stuff because a java built in function relied on native libraries, which did not act the same (regular expression handling in 1.4 and earlier, is a good example - go betweeen HPUX, Linux and Windows, and there can be serious issues). A lot of the UI stuff doesn't work well between versions either.

    It's gotten better, but on a similar note, anything I've used from .NET in VS 2003 and earlier, and quite a bit of later stuff, works just fine on Windows, Linux and FreeBSD.

    Each has their flaws in cross platform use - .NET's issues tend to arise when using newer APIs, and Java tend to have small gotchas, which in most cases are rare, scattered throughout the code.

  • Re:.Not (Score:1, Informative)

    by Anonymous Coward on Friday December 18, 2009 @09:44AM (#30486300)

    As I said, rare and scattered. Chances are, you won't hit them, but when you do, they are a pain in the ass, especially if you are the type of programmer to assume that the language/VM itself won't have problems, and the error is with your coding or logic.

  • Re:.Not (Score:3, Informative)

    by minginqunt ( 225413 ) on Friday December 18, 2009 @09:45AM (#30486310) Homepage Journal

    Then you are fortunate. The JVM is a good abstraction, but it is a leaky one. The point is that you can't just *assume* it will work on any platform that runs a JVM, which was the original (I would claim largely irrelevant) point behind WORA.

  • Re:.Not (Score:3, Informative)

    by Mr2001 ( 90979 ) on Friday December 18, 2009 @09:54AM (#30486448) Homepage Journal

    The CLI is, of course, both multi-platform and multi-language. So is the JVM, even though it was designed around the Java language.

  • Re:"mentioned" (Score:5, Informative)

    by dragonxtc ( 1344101 ) on Friday December 18, 2009 @10:02AM (#30486548)
    Ironically did you know the guy that designed Delphi also designed C#?
  • Re:.Not (Score:2, Informative)

    by @madeus ( 24818 ) <slashdot_24818@mac.com> on Friday December 18, 2009 @10:05AM (#30486602)

    I don't agree with that, I really think it's very good in practice. I write C# software for both .Net and Mono on my Mac, with Windows and Linux my primary target platforms. It's really highly portable, and with very low resource impact requirements to boot (far, far lower than Java out of the box IME).

    You can use C# w/ Mono to create games games for X-Box 360, the Wii and even the iPhone (see Unity3D), as well as Windows. The Apache module mod_mono makes it a snip to deploy, and it's just drag and drop to deploy the same websites or web services under IIS, nothing platform dependant about it.

    Certainly, Windows and Linux are the environments which enjoy the best support for desktop applications (on Mac OS X you have to use an ObjC bridge, because of the proprietary UI), but in practice it's not any more abstraction than is need to create a decent UI in Java (arguably less, though it's probably fair to say that pretty simple cross platform UI's are easier to implement in Java, anything remotely sophisticated requires pretty much the same effort in either).

    It's worth nothing that porting FROM something like Mono or DotGNU to .NET is far easier than the other way round, as the Microsoft tools tend to embrace Microsoft's own extensions which are not covered by the C#language specification, of which all the commonly used methods seem to implemented fully by the Mono team, but P/Invoke calls to native Windows DLL's obviously cause issues when porting - and that's almost always where the gripes come from.

    If you start out with Mono then you won't have that problem. The Mono team have actually done a better job than MS in providing a wide range of libraries for platform abstraction and to implement common functions, and if you start out with Mono, there is no reason not to just bundle the Mono libraries you use with your app, regardless of platform it's run on.

  • by Mr2001 ( 90979 ) on Friday December 18, 2009 @10:13AM (#30486676) Homepage Journal

    You realize the "point and click" stuff is for laying out dialog boxes, right?

    Writing boilerplate code to lay out controls and handle window messages wasn't some noble art that's been lost. It was low level tedium that distracted from real programming. I remember opening Petzold's Windows programming book and being horrified that the code for "Hello World" spanned several pages.

    I don't know about your wages, but I get paid a fair amount for my time to write C#, and that time is a lot more productive and enjoyable thanks to such things as IDEs and component libraries.

  • by CritterNYC ( 190163 ) on Friday December 18, 2009 @10:13AM (#30486680) Homepage

    I thought the article may be overstating .NET's popularity, so let's take a quick look at listings on monster.com. Here are the results of a US-wide search for each of the terms (at 9am on 2009-12-18):

    C#: 2,920
    (Just) .NET: 3,632
    ASP.NET: 1,714
    Java: 5,000+

    If we narrow it to posts in the last 7 days:

    C#: 971
    (Just) .NET: 1,095
    ASP.NET: 524
    Java: 1,608

    Or if I select my location, New York City, over the last 60 days:

    C#: 223
    (Just) .NET: 239
    ASP.NET: 91
    Java: 591

    As expected, there is a lot more demand for Java developers than C#, ASP.NET or even .NET framework itself.

    (Note: I added the prefix (Just) to the .NET line as otherwise SourceForge won't let it be separated onto a new line)

  • by CaymanIslandCarpedie ( 868408 ) on Friday December 18, 2009 @10:18AM (#30486734) Journal
    Dear Sir, I've done exactly as you suggested and search for those exact term on Monster and Dice. Moster (on a nation wide search in the US) returned 4 hits for "Java/J2EE/JEE" and 323 hits for ".NET/C#". On Dice.com "Java/J2EE/JEE" returned 6 hits while ".NET/C#" returned 644 hits. Is there some other search criteria I should try to see the advantage JAVA has?
  • by Saint Gerbil ( 1155665 ) on Friday December 18, 2009 @10:26AM (#30486852)

    From the same source as the article it adds 7-8% which is down from a few years ago with a high of 10%

    http://www.itjobswatch.co.uk/jobs/uk/vb.net.do [itjobswatch.co.uk]

  • "The Register" (Score:1, Informative)

    by Anonymous Coward on Friday December 18, 2009 @10:33AM (#30486930)

    The Register is probably the most unreliable site in the tech world. I would take anything these guys publish as highly suspect.

  • by Anonymous Coward on Friday December 18, 2009 @10:38AM (#30486978)

    please dont bullcrap if you are not in industry. i am one of the web developers who specializes in ecommerce web development. and the current situation is, nothing is able to come close to php+mysql for developing ecommerce/business websites.

    I'm not familiar with what smaller ecommerce sites are running on, but the two biggest players in the e-commerce space, IBM WebSphere Commerce and ATG, are both running on the J2EE stack. In fact, most of the eCommerce products that you'll see mentioned in trade mags and Gartner reports are running on Java; not PHP or .NET.

  • by trboyden ( 465969 ) on Friday December 18, 2009 @10:44AM (#30487030)
    Well according to Dice.com... "Java" has about 3,203 job opportunities... and "C#" and "VB" combined have about 1,066 job opportunities... I would say Java isn't anywhere close to dying anytime soon and is still very popular with businesses willing to hire. As an aside, Flex has about 268 job opportunities which is roughly equal to 25% of the number of Microsoft based development jobs. With the turn from traditional desktop application programming to web-based applications, I'm left to wonder whether Microsoft will catch up with the demand of Java developers before Flex grows to overtake the demand for Microsoft developers?
  • Re:.Not (Score:3, Informative)

    by FatSean ( 18753 ) on Friday December 18, 2009 @10:47AM (#30487064) Homepage Journal

    I develop J2EE applications on a Windows machine as I prefer the snappier UI to X. My code runs, with no modifications, on Windows (duh), AIX, Linux and Linux running on zSeries platform. We have never needed to call platform-specific functions for our work as these are business applications. There is something really cool about using the development tool to push the same EAR to applications servers on several different platforms all from within the dev tool. Now the dev tool itself is a resource hog but my boss doesn't mind spending a few hundred dollars to max out memory and ensure we have speedy processors in our dev machines.

    I used VB.NET in a few classes I took last year for my Masters degree. It is a nice environment to work in, even the 'free' student-grade version. It may even be better than the eclipse-based environment I use at work. My only complaint was that we had to use VB as I dislike BASIC syntax.

  • Re:.Not (Score:2, Informative)

    by @madeus ( 24818 ) <slashdot_24818@mac.com> on Friday December 18, 2009 @11:16AM (#30487458)

    Compare with C# where your typical app, whether a GUI app or a server app, can't be ported to work with Mono without reworking loads of things. Or what about the other way? Can you take things built with the Mono toolset on Unix and run it with the Microsoft VM on Windows

    Hey that's not my experience at all!

    I write apps in a mixture .NET/Mono on my Mac and deploy them on Windows (desktop software) and Linux (typically server side). I do use Visual Studio in VMWare for applications that are exclusively for Windows, but that's just because VS is so good it's expedient in the short term.

    I have had zero cross platform porting issues (of course Mac OS X GUI aside, as with Java).

    It's just drag and drop the DLL or source between Windows, Linux and Mac. It works between Apache/mod_mono or Windows Server with IIS/.NET and with desktop applications (or self contained server software). Due to unrelated network issues I've switched server platforms at the last minute (in one day) from Mono my Mac (where I'd built everything) to a FreeBSD box, to a Solaris Box to a Windows IIS box with .NET and the software itself was fine, without any prior testing on the alternative platforms with no recompiling.

    Even the more complicated multithreading stuff and network stuff works just fine. The only problems are the ones I create, like if I know I need to hook into Windows specific platform libraries - but that's exactly the same as the situation with Java (you know it's quicker to implement, but screws portability and sometimes you just have to make a judgement call based on your situtation). Of course if you use something like one of the (many) Mono libraries for abstraction / convenience you can bundle the ones you use with your app, even if it's to be deployed on .Net.

  • Re:Java too complex (Score:5, Informative)

    by rabbit994 ( 686936 ) on Friday December 18, 2009 @11:18AM (#30487488)

    Powershell was never designed to be used by day to day admins in general administration tasks. GUI for many things allows you to look up data or make one off changes much quicker. Powershell is designed to be used by admins to script common tasks they do daily. I have a Powershell script that will parse a comma delimited text file and add every line in there as Active Directory user with Exchange Mailbox. When we get 30 new employees at work, I modify some parameters on Powershell script, take list from HR and bam, in 15 minutes, I've added 30 new users with Exchange mailboxes. That's purpose of Powershell.

  • Re:Java too complex (Score:3, Informative)

    by binarylarry ( 1338699 ) on Friday December 18, 2009 @11:21AM (#30487524)

    The JVM has outperformed .NET by a large margin since .NET was created. It's somewhat of a myth, probably perpetrated by Microsoft.

    Java's WORA selling point has worked extremely well overall, stop spreading uninformed FUD.

  • by Anonymous Coward on Friday December 18, 2009 @11:34AM (#30487736)

    Adding extension properties is a feature that would be rife with problems. The first extension prop that you add then increases processor time significantly - you have to allocate memory associated with each object, keep hash tables or some such to manage that allocation. Making the decision to implement extension methods before extension properties was a good one.

    Adding type inference for class method return types is not a good idea. This means that you have to infer return types for the same method across assemblies, some of which may be compiled, some of which may not, i.e. method x in source code module A returns int, method x in assembly B returns float, therefore the inferred return type returns float. You may not even be linking to an assembly that would, in the end, participate in the process of inferring return types. Overloading by return type is super-problematic.

    > Microsoft simply doesn't have the discipline to finish any feature addition to the language before moving to the next

    Actually, to the contrary, Microsoft has the foresight to see what's next, and the discipline to tackle managable chunks in each release cycle.

  • Statistics (Score:2, Informative)

    by volkram ( 1283062 ) on Friday December 18, 2009 @11:39AM (#30487830)
    http://www.langpop.com/ [langpop.com] begs to differ.
  • Re:Java too complex (Score:4, Informative)

    by WinterSolstice ( 223271 ) on Friday December 18, 2009 @11:57AM (#30488082)

    You may be right here. I have, on many occasions, had to program reasonable size DB apps in both.

    Java.makes.me.want.to.claw.my.eyes.out() .NET may only be truly on windows, but it's actually not so bad to code in. I wrote a DB reporting and maint. app in C# in roughly 2 weeks, the previous version of which in Java took almost 2 months.

    Major things, IME that made the difference?
    Crazy easy remote DB access (sure, neither are exactly rocket science, but .net was quicker and more flexible)
    Easy installs - this had me from the start. I wasn't writing a web app, but a desktop app. The C# one was a breeze, the Java one a major headache
    Attractive frontends - this will probably start yet another flamewar, but many of the java frontends are HIDEOUS
    Performance when doing large dataset manipulations - for example, determining which server had the least free space, or which one had the most obsolete users. These are fairly trivial sorting tasks, but the java version took probably twice as long and more memory (in my implementation, which may well have sucked to be frank).
    Support for dumping data into Excel and Word - this was a killer feature. I was able to generate SOX and sizing reports on the fly with C#. Java? No such luck. I never did get it working quickly and properly.

  • Re:Java too complex (Score:5, Informative)

    by adonoman ( 624929 ) on Friday December 18, 2009 @12:26PM (#30488526)
    Have you actually used powershell? They've predefined common aliases for most of the command (ls, cd, del - just type get-alias (or gal) to get the full list). All the parameters can be used both positionally, or as named parameters where you only need to provide enough of the name that it's unambiguous (usually one or two characters is enough). On top of all that, there is tab-completion for object members and such. The purpose of the long, descriptive names is for writing scripts. I can use the abbreviated aliases and shorthands when I'm at the command line, and yet still write scripts that are legible, without having to look up whether -r means recurse or revision in a given context when I'm debugging a script a year later.
  • Re:Java too complex (Score:3, Informative)

    by buddyglass ( 925859 ) on Friday December 18, 2009 @12:31PM (#30488608)

    I guess I should have been more specific on the performance thing. Mostly I was referring to two things: GUI performance, since Swing has traditionally been pretty turgid, and the ability to easily link with native libraries, which I have always assumed C# handles more elegantly than Java+JNI. As for general purpose performance, the jury's still out on that:

    C# beats Java (most of the time): http://reverseblade.blogspot.com/2009/02/c-versus-c-versus-java-performance.html [blogspot.com]

    C# beats Java: http://www.bentuser.com/article.aspx?ID=323&AspxAutoDetectCookieSupport=1 [bentuser.com]

    Java beats C#: http://blogs.sun.com/dagastine/entry/sun_java_is_faster_than1 [sun.com]

    When it comes to WORA, again it depends on what you're doing. Recently I had to write an app to do serial port communication on Windows. Unless I missed something, that's only achievable in Java land by using a native library via JNI, meaning my code won't run elsewhere. Another example is when I used to work at IBM about seven years ago. We frequently had UI or I18N issues with our Java code that only cropped up on certain platforms (e.g. AIX) but not others (Windows).

    That said, the non-graphical server code I write using Java runs pretty much everywhere. So for that class of application WORA really works.

  • by CritterNYC ( 190163 ) on Friday December 18, 2009 @12:45PM (#30488798) Homepage

    You're duplicating results in your calculations because most .NET job listings include 2 and often 3 of those terms.

    For US-wise listings:
    C#: 2,920
    (Just) .NET: 3,632
    ASP.NET: 1,714
    Java: 5,000+

    You'll find that:
    C# + .NET: 1,905
    C# + ASP.NET: 1,183 .NET + ASP.NET: 1,120
    C# + .NET + ASP.NET: 859

    So we get:
    C# + .NET (no ASP.NET): 1,046
    C# + ASP.NET (no .NET): 324 .NET + ASP.NET (no C#): 261

    So, your total is actually more like:
    Your total: 8266
    Subtract out the 2x the 859 listings that you counted 3 times: 6548
    Subtract out 1x the 3 double listings referenced above that you counted twice: 4917

    So even if you add them all together, you get 4,917. Which is still less than the 5,000+ Java listings... and we don't know how many over 5,000 that number is.

    If we're comparing platforms, it's Java vs .NET, which is 5000+ vs 3,623. If we're comparing languages, it's C# vs Java, which is 5,000+ to 2,920.

    Any way you slice it, Java is more popular.

  • It's not about religious language wars. It's just that VB is an oddball subset of C#.

    There's not really much point to it unless you're transitioning from an existing Basic, and even then, if you're that badly locked into the Microsoft ecosystem, you'd be better just learning C# anyway.

  • by Vancorps ( 746090 ) on Friday December 18, 2009 @01:16PM (#30489304)
    VB.net is also used in web development, same with C#
  • Re:Java too complex (Score:4, Informative)

    by shutdown -p now ( 807394 ) on Friday December 18, 2009 @01:23PM (#30489392) Journal

    One thing I've noticed with generics as a "Java-by-profession, C#-by-hobby" developer is that I prefer many parts of the Java implementation. Having access to the generic parameter type in C# is useful, but it is far more likely that I need the "PARAM_TYPE extends SomeClassOrInterface" method rather than C#'s fixed generic parameters (at least in C# 2.0, which is what I target since Mono has good support and it isn't too huge a download for WinXP users if they don't have it).

    C# 2.0 has constraints on generic type parameters of classes and methods, which are exactly equivalent (albeit more verbose) than Java "extends". E.g. you can write:

    void Sort(T[] a) where T: IComparable<T>

    It doesn't have wildcards, though those can always be replaced by named parameters in generic declaration context.

    There are two things missing. First, you cannot write anything equivalent to this Java code:

    List<? extends Foo> list;

    Again, this is because wildcards aren't supported, and it's not a generic declaration, so there's no way to introduce a named type parameter.

    The other thing that's missing is "super" constraint. For example, this cannot be rewritten in C# while preserving full genericity of the method:

    <T> void add(List<? super T> xs, T x) {
        xs.add(x);
    }

    because "add" is contravariant, this needs the corresponding supertype constraint if we want this to work on any compatible list, but there is none in C#.

    On the other hand, C# generics are fully reified - so you can have T[], and new T(), and x is T.

    Also, in C# 4, a new feature is declaration-site covariance and contravariance of classes. For example, IEnumerable - which is the .NET counterpart of Java Iterable - is now declared thus:

    interface IEnumerable<out T /* covariant*/> { ... }

    which means that you can write:

    IEnumerable<Derived> xs;
    IEnumerable<Base> ys = xs; // implicit upcast

    In Java, you'd have to use "? extends Base" on the second line above, and in any similar context.

    Unfortunately, this doesn't help with classes for which some operations are covariant, and some are contravariant, like List. For those, Java wildcards and constraints (which are effectively use-site variance declarations) do better.

  • Re:Java too complex (Score:3, Informative)

    by TheRaven64 ( 641858 ) on Friday December 18, 2009 @01:54PM (#30489992) Journal
    I think you transposed some digits. Java's object model is based on Smalltalk, which was first released in 1976. The syntax comes from C, which was first created in 1972. A number of language features (the type system, interfaces, and addition of primitives as well as Smalltalk-style objects) come from Objective-C, which was created in 1986. The generics come from category theory, and apparently someone thought that was a good idea.
  • by beuges ( 613130 ) on Friday December 18, 2009 @01:56PM (#30490026)

    A common trend I've noticed amongst the vast (99%) majority of PHP developers is that they are almost guaranteed to be
    a) completely devoted to PHP
    b) incredibly arrogant
    c) mediocre developers at best

  • by Anonymous Coward on Friday December 18, 2009 @03:43PM (#30491816)

    How did this get modded insightful? All the issues he lists are either fixed in the next release or have no relevance to anyone because they can be had by manual programming. You don't always have to rely on language developers to supply your need when you are using low-level constructs found in C/C++/C#. Everything you mention can be done by you with a little finesse, and probably more efficiently than if it were incorporated in the language itself.
    Stop bitching daddy didn't buy you the new toy and make yourself one. At least you can make one in C#, whereas Java just says you need to live without it because you might choke on the toy or eat its lead paint.

To the systems programmer, users and applications serve only to provide a test load.

Working...