The fact that he grouped Java with Ruby/Python shows how much he has to learn. If anything I regard Java and C#(.NET) as roughly equivalent in my mind. Both can be used by good programmers to do neat things, but the vast majority of the time they are by-words for overly specified inflexible crap code.
I don't think it's necessarily the language (although both seem way too verbose for my tastes --- and a little too focused on nouns), but more a factor of industry acceptance. As soon as Java became the industry standard successor to Cobol, they started tacking on all this formal-robust-enterprisey crap that just made the code require a heavy duty IDE to deal with. It stopped looking elegant and fun and started looking like the schematic to build the HVAC system for a skyscraper. Ditto for C#.
I would argue the main problem with the Microsoft ecosystem in general is that everything costs money. Development tools cost money, libraries cost money, even the freaking support of experts-exchange costs money. Why pay for all this stuff when the rest of the programming world already thrives on freely exchanging information. It makes learning cheaper and faster, and probably leads to more rapid development, since new stuff is easier to learn about. When I wanted to figure out how bittorrent works, I just went and read the spec published by Bram Cohen. I didn't have to call up his company and ask for a Certified Bittorrent Engineer to come out and train me onsite in a three day session that costs $8000. The whole ecosystem is focused on making a buck off the developer, instead of helping the developer make a buck off his customers. (That said, the .NET ecosystem seems moderately better about this, from my limited experience with it.)
Convoluting C# and .NET is a bad idea. C# is a programming language and .NET is a platform. If someone writes a compiler that translates your favorite language into CIL, your language can then be used to create .NET assemblies (modules) and interface with every other .NET assembly. In other words, write your program using any syntax you like and use any library you want. Someone even wrote a LOLCode .NET compiler ( http://code.google.com/p/lolcode-dot-net/ ).
It stopped looking elegant and fun and started looking like the schematic to build the HVAC system for a skyscraper. Ditto for C#.
Are you referring to the C# programming language or the .NET platform? C# 3.0 includes implicit typing and lambda functions ( http://download.microsoft.com/download/4/7/0/4703eba2-78c4-4... ), which are both elegant and fun. .NET 3.0 still includes every bit of functionality from .NET 1.1, so at what point did the platform become inelegant?
When I wanted to figure out how bittorrent works, I just went and read the spec published by Bram Cohen. I didn't have to call up his company and ask for a Certified Bittorrent Engineer to come out and train me onsite in a three day session that costs $8000.
When I wanted to figure out how .NET worked, I just read its free and extremely comprehensive documentation ( http://msdn2.microsoft.com/en-us/library/a4t23ktk.aspx ). Also, high-quality documentation is one area where Microsoft whips almost everyone in, and documentation is really important for popularity. Apple has also nailed it with their iPhone SDK docs ( http://developer.apple.com/iphone/ ). If you're trying to grow a platform, you'll want to take notes.
Garbage collected languages can sometimes outperform other languages (read: C++) because of the design of a moving garbage collector. Every .NET language uses a moving garbage collector.
That said, it does have many flaws. The biggest one is probably the Windows lock-in. Mono is nice, but not quite complete.
I specifically used C# so as not to convolute things. I couldn't very well compare .NET with Java/Ruby/Python, since that would be like comparing 'car' to 'blue/red/orange'. I put .NET in parens next to it so someone that didn't know the distinction would realize why the heck I was suddenly talking about C#, when the article had .NET in the title.
I honestly can't speak to C# 3.0, because the little bit I did with C# was at an old job and we were using 2.0. I guess I would clarify that coming from C++, Java once seemed elegant and fun, but no longer does. C# never seemed elegant or fun to me, because I had already worked in a dozen other languages by the time I got to it, and frankly, it (2.0) seemed like a Java wannabe. (And I'm not exactly a Java fan either.)
As for garbage collection... not even sure what in my post made you mention that, but I wouldn't exactly consider a garbage collector to be an earth shattering feature. Many languages have had them for years.
I can't claim to be a .NET expert by any means, and, as I pointed out in my last sentence (and you pointed out with your links), the .NET ecosystem seems better than one would expect. I was trying to point out the problems as I saw them in the traditional Microsoft ecosystem (and the modern day Java one)... namely, the accumulation of cruft (Java) and the cost of tools/libraries/software (MS).
I had a relatively strong reaction to you grouping C# (and .NET) with Java (and Java's libraries). :)
Why did you say that it costs $8,000 to be trained in... something? (A language feature? A library? A development tool?) Anything you need to learn can be found in the free MSDN docs or by using Google. A developer that needs an $8,000 training session may not be worth his $60k salary.
Why did you say that it costs $8,000 to be trained in... something?
Haha, at my last job, when the company decided to switch to .NET and C#, they ordered this hilarious three day training course that ended up costing about $30k (four people went). The guy doing the training knew his stuff, but I don't think I'm alone thinking this a bit ridiculous. Obviously this isn't .NET's fault, or C#'s, or even Microsoft's. It just comes to mind when I hear the term 'dot net' ... as it was a major sign that I should be leaving that job soon (which I did).
A developer that needs an $8,000 training session may not be worth his $60k salary.
100% agree. Like I said in my OP, I think C# (and .NET) and Java (with it's libraries) can be used for wonderful things by wonderful people... the problem is, being the industry standard, there are a lot of very unwonderful people in the way.
I just feel sorry for Microsoft developers. As a Windows app developer I felt Microsoft was deliberately trying to waste my time. Rather than adding useful functionality to their frameworks that would make it easier to do the common tasks that most apps need, such as better rich edit controls, syntax highlighting, and practical APIs to manipulate images, videos, and mp3, etc. There are plenty of individual 3rd parties libraries that do these things, if you want to spend the money to license each one and they will only work in Windows version X and Y but not version XY. Why the hell can't Microsoft invest some time into making exciting and useful features built into their framework? Developers would flock to Windows development if it were actually easy to do cool things, but it's not. Instead Microsoft pushes all Windows developers to waste time adding support for their new pet features of the season that no one asked for. I got tired of it and finally realized web applications are much easier to develop and have a much greater growth potential than Windows apps.
The MS-centric press does seem a little insular sometimes -- more Mount Athos than United States in some occasions. All the recent Silverlight hype ("the Internet has just been rebooted by Microsoft!"). Or the articles trying to convince people to upgrade their PCs to MS's latest OS -- I have been reading those since Windows 95.
(I'm sure there were magazine articles pushing DOS v5.1 back in the day, but I didn't have money to buy computer magazines at the time.)
I'd agree about the insularity of the press and community around the MS ecosystem.
I got a job programming blub in VB.Net straight out of college and am writing C# at the moment. I don't have anything to back it up but I have always found a general suspicion of anything that didn't come from MS or an related source. The obvious example would be formerly non-mainstream programming features which are now getting very popular with C# 3.
It reminds me of Joel Spolskys' idea about the 'Five Worlds' - MS stuff, Java stuff, Unix etc - that they all come with fairly distinct cultures.
So true, it made me smile because just recently I had a great discussion with a very smart .NET programmer who truly believed that Microsoft's LINQ is a revolution in programming languages. When I explained to him that a similarly weak DSL serves as an example in the introductory chapter to Lisp macros (Practical Common Lisp), he looked at me like I was an idiot, and when I showed him traditional Rubbyish 2.times { puts "Hello" } he said "yes, but where is the IDE? where is an integrated debugger and MSDN-like 2GB of documentation?"
Funny thing is that he DID find a Lisp book (which one he did not explain) and proclaimed that there is nothing in Lisp that beats C# 3.0, and "3.0" part was dropped with an authoritarian tone.
He hasn't programmed in anything but "Visual Blah" since college graduation in 98.
As a .NET developer, I can confirm that the grand majority of .NET developers are ignorant of anything that doesn't come from the mouths of Microsoft evangelists.
I think the difference is between people who consider themselves "Microsoft developers" and those who consider themselves ".NET developers". I never quite understood the former; it's sort of like Java developers calling themselves "Sun developers". Microsoft developers don't bother to learn anything unless it's branded with the Microsoft logo, whereas .NET developers recognize that the .NET framework and the associated languages are simply tools in the toolbox. Sometimes it's the right tool for the job, sometimes not.
There is a small but growing minority of .NET developers that are interested in open source. In fact, I've now incorporated questions about open source into my questioning when we interview new developers. Just because someone has an MCPD doesn't mean they can code their way out of a paper bag. A bunch of commits to an open source project does, though.
being a .net contractor myself I have to agree and then disagree.
The most day coders I have come across are in the .net field but as I work in this field I don't know if this is true. I suspect java has its fair share of day coders.
However I have met a lot of really good coders who use .net as a tool that has been given to them to use.
I don't want to get into a flamewar but the article did make me wonder if most developers view .net developers as lesser developers because of their chosen toolset. Does this have more to do with the hate of MS or do they really believe it.
From a knowledge point of view .net requries a lot more traditional programming skills than ruby ever does. I bet .net developers don't look down on ruby developers in the same way.
My vote goes to most day coders being Java people.
My coworker across the hall can't see why anybody would write Python if Java is an option. "Ooh yeah, let me at it in Java... I'll have a JSR-4567-compliant Bean to drop into a custom container in no time!"
You have to ask ask yourself, "why's that so" ? Why the so called day coders do Java, C# or COBOL and not Smalltalk, LISP or Ruby ? There's a reason for everything and in programming the reason to use language a instead of language b in a software "factory" is definitely effectivity. That is, how fast a product can be done using Java/C# or lisp ? How much is it gonna cost to maintain that product and add features ? How much is it going to cost to train new people ? And so on.
Those economists in management surely don't wake up one day and announce : "We will use C#".
The day coders pick Java/C#/Cobol because that's where the jobs are. Companies might have chosen them for sound technical reasons (or not), but day coders won't learn languages/tools that don't pay the bills.
For reference, a Monster search for .net jobs in Chicago gives 266 results. Java gives 403. Lisp gives 22 for the entire country. Not something to learn if you just want a job to fund your real life.
Management is persuaded by smooth-talking consultants looking to win more project hours, not by measured effectiveness. (I'm talking about industry overall, not anybody in particular.)
You can figure this out yourself by comparing C# to ruby
I was hoping for more specific examples, as I gathered the parent was. It's still not clear to me what "more traditional programming skills" means, or why it's a good thing, or why (C# - Ruby) yields traditional programming, while (Ruby - C#) should be... non-traditional programming?
Its an untyped, interpreted and does not have any heritage with the likes of C or even basic.
I guess it's heritage is smalltalk which I did enjoy when I studied.
Don't get me wrong it has its place but I think of it as a language that is like basic used to be. extremely easy to program in but if you learn just ruby you would have a hard time jumping to another programming langunage than if you had come from C#, C/C++ etc
Only when faced with jargon from non-Microsoft devs that isn't on the Microsoft Certified Terminology sheet they got in their last overpriced training session.
If you say it loud enough, the words will magically translate themselves.
I don't think it's necessarily the language (although both seem way too verbose for my tastes --- and a little too focused on nouns), but more a factor of industry acceptance. As soon as Java became the industry standard successor to Cobol, they started tacking on all this formal-robust-enterprisey crap that just made the code require a heavy duty IDE to deal with. It stopped looking elegant and fun and started looking like the schematic to build the HVAC system for a skyscraper. Ditto for C#.
I would argue the main problem with the Microsoft ecosystem in general is that everything costs money. Development tools cost money, libraries cost money, even the freaking support of experts-exchange costs money. Why pay for all this stuff when the rest of the programming world already thrives on freely exchanging information. It makes learning cheaper and faster, and probably leads to more rapid development, since new stuff is easier to learn about. When I wanted to figure out how bittorrent works, I just went and read the spec published by Bram Cohen. I didn't have to call up his company and ask for a Certified Bittorrent Engineer to come out and train me onsite in a three day session that costs $8000. The whole ecosystem is focused on making a buck off the developer, instead of helping the developer make a buck off his customers. (That said, the .NET ecosystem seems moderately better about this, from my limited experience with it.)