
An analysis of the C#/.NET platform - pauloortins
http://pauloortins.com/diving-into-csharp-dotnet-ecosystem/
======
keithwarren
There was no discussion of async/await in here which is one of the best things
C# has going for it.

When I meet other devs and tell them I work in lots of languages and platforms
but prefer c# they usually look at me like I have 3 heads.

I like to show them LINQ and Async as some things I really like about C#, then
I get into how rich the BCL itself is.

Devs are also pretty shocked when I tell them I can write truly 100% native
iOS and Android apps in C# (thank you Xamarin) and that one of the most
popular mobile game engines (Unity) uses C# and a version of the .NET
Framework under the hood.

~~~
nbevans
It's funny when you tell hipsters about .NET. They get really shocked at just
how good it is. A lot of people dismiss .NET because it's backed by Microsoft.
It really sucks that these people can't just look at the technology for what
it is rather than dismiss it based upon who created it.

As an aside... whilst C# takes a lot of the public .NET praise, F# is the real
hero in the making. When I show F# to some hipsters they get very unsettled
very quickly as suddenly they realise all that shitty Ruby and JavaScript
they've been writing for years is probably not going to be anywhere near as
employable in another 10 years, maybe, hopefully.

Interesting times indeed. And yes, Xamarin is awesome and Microsoft seriously
needs to bring that great firm under their wing. Writing your mobile apps per
platform is a major violation of DRY principles and is utterly ridiculous.

~~~
Mikeb85
> A lot of people dismiss .NET because it's backed by Microsoft. It really
> sucks that these people can't just look at the technology for what it is
> rather than dismiss it based upon who created it.

Since .NET isn't open-source, it doesn't come with the same guarantees as
something like Java, C++, OCaml, Haskell, etc... Microsoft could discontinue
it, make the terms of use more restrictive, etc...

Further, .NET applications only run (officially) on MS platforms, Mono isn't
the same, and due to legalities many people are hesitant to base their
business on Mono.

As far as hipsters and Javascript or Ruby, MS has fully embraced Javascript.
It's a first class language on VS, Windows 8 'modern' interface, etc... Ruby
is great within its domain, and even has a .NET implementation (though I don't
know how well supported IronRuby is anymore).

And funny you praise F#, because it's just a MS implementation of OCaml, with
a few small differences. Speaking of which, OCaml is pretty awesome, it
compiles down to pretty much anything, and is fast as hell...

~~~
MichaelGG
".NET applications only run (officially)" \-- what's that even mean? I can
rephrase it: "Mono applications only run (unofficially) on Microsoft's CLR".

The actual runtime is an ECMA spec (which has been unchanged since v2, as all
MS has added since are implementation changes and more libraries). C# and the
core parts of the runtime are under Microsoft's Community promise[1]. But
you're right that MS could try to assert copyright over parts of the extended
APIs, and some companies might be worried about that. OTOH the Oracle versus
Google thing should alleviate a lot of concerns.

As far as F#, it's quite a bit more than a few small changes.

1: Writeup by Xamarin here:
[http://tirania.org/blog/archive/2009/Jul-06.html](http://tirania.org/blog/archive/2009/Jul-06.html)

~~~
derleth
> ".NET applications only run (officially)" \-- what's that even mean?

If MS feels threatened by Mono, it changes its runtime and kills
interoperability. From that point on, Mono is playing catch-up and who knows
what happens to the users caught in the middle.

~~~
MichaelGG
That's one of the least-plausible Microsoft trickery ideas I've heard of.
Anything that makes Mono play catch-up also hurts every existing .NET program.

Even if they had some magical changes that kills interop (like, what, I don't
know), Mono still works with all current apps at that point, and only
developers adopting the new, not-compatible system (and thus discarding all
their old libraries) would be affected.

Microsoft sorta has done this, with Silverlight and WinRT. They required
different stdlibs and a bit of runtime tweaking, as I understand. Silverlight
was handled by Mono, and WinRT - not sure if anyone is interested, as it's
really for Windows Metro applications.

------
jeswin
The biggest problem with C# and .Net is the Windows platform; very little on
Windows can be automated. There is no sane shell. Everything assumes that
there's a user clicking the mouse. And since that's the direction MS took, 3rd
party devs followed suit. For anyone who has worked with another OS, Windows
is fundamentally broken.

Think about it. Setup, Administration or Programming can't use any of the
thousands of programs already written for the OS.

Most Microsoft-only developers don't get it. They usually say, "Oh, you should
try Powershell". Powershell is, to put it mildly, 'utter crap'. They might
have as well asked people to use a C# REPL with the .Net BCL.

Edit: I should explain a bit.

How do you zip a folder? via [http://stackoverflow.com/questions/1153126/how-
to-create-a-z...](http://stackoverflow.com/questions/1153126/how-to-create-a-
zip-archive-with-powershell)

    
    
      function ZipFiles( $zipfilename, $sourcedir )
      {
        [Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" )
        $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
        [System.IO.Compression.ZipFile]::CreateFromDirectory( $sourcedir, $zipfilename, $compressionLevel, $false )
      }
    
     -- or download an extension from CodePlex.
    

You see the problem?

~~~
Touche
Agree about PowerShell. It's not just that the scripting language sucks, which
as you show it does. But nearly everything about PowerShell is bad. For
example:

1) It takes a good 4 or 5 seconds to boot PowerShell. This is unacceptable, a
terminal emulator should boot near instantaneously.

2) Cmdlets are really freaking hard to write or use. It's hard for users to
enable them, it's hard for users to install them, and it's especially hard for
programmers to create them. Unix shells are much easier for all parties
involved.

~~~
venomsnake
Just checked on my machine. Powershell boots in less than a second. Same as
Konsole in kde.

The ISE takes maybe second and a half.

~~~
chadzawistowski
SSDs help tremendously with PS boot time, I've found.

------
300bps
Good write-up but the conclusion is completely wrong:

 _Costs Involved...This is the point where C# really sucks. Almost every tool,
OS, IDEs and plugins, are paid._

Anyone can download Visual Studio 2013 Express edition. The Express edition
has been free since Visual Studio 2005. Here's a download link:

[http://www.microsoft.com/visualstudio/eng/downloads](http://www.microsoft.com/visualstudio/eng/downloads)

Click on Visual Studio Express.

Of course, there are limitations but there are fantastic projects out there
that have been made with all free Microsoft development tools. Visual Studio
2013 Express is really an amazing, free development environment. Combine it
with SQL Server 2012 Express which is the free version of SQL Server that
works on databases up to 10 GB and you can see you can do a lot with free
Microsoft software.

See more info on Visual Studio Express here:

[http://en.wikipedia.org/wiki/Microsoft_Visual_Studio_Express](http://en.wikipedia.org/wiki/Microsoft_Visual_Studio_Express)

~~~
RyanZAG
Don't think you're being unbiased here. Using C# inevitably means you will be
shelling out for various tools along the way that you would never have paid
for if you went with something like Python. Granted, if your business is
making any money these costs are not going to have any real impact, but
passing it off as 'no costs' is silly.

~~~
Too
Funny you mention python as, until last month when PyCharm community edition
was released, there was no _decent_ and free IDE for python. :)

I can't think of any tools for .net that are really must-haves and that cost
money. Maybe resharper but you can survive without it. There are free
profilers, decompilers, analysis tools, SCMs, you name it. The only thing you
don't get with express is integration with plugins in the IDE. Using .NET with
free tools is also easy, connecting to MySQL is just as easy as to MS SQL
Server to give an example.

~~~
corysama
Meanwhile, _Python Tools for Visual Studio_ is a great IDE for Python, IMHO.
Of course, being a free plugin for VS, you need a paid license of VS to use
it.

~~~
anilmujagic
I think you just need VS shell, which is free.

------
moron4hire
<sarcasm>what's with all the Microsoft shills on HN lately?</sarcasm>

I love C#. I have a project right now built in it. Everybody talks async/await
--which is certainly great--but there is a lot to love in C# and .NET that
have been there for a long time. Real generics. The reflection libraries are
outstanding and extent easy to use. Dynamic assembly loading is just downright
awesome and also easy to implement. I could go on, but there is a beer in
front ooh me getting warm.

~~~
sz4kerto
Real generics are almost as addictive as C# templates - i.e. after going back
to Java, you feel the pain _every single day_.

~~~
jbrechtel
In what way, specifically, do you feel this pain?

~~~
alkonaut
Reflection showing erased types. Slow collections because internal arrays are
object[]. Various caveats with bridge methods/ClassCastExceptions. The list
goes on and on. Erasure isn't a pragmatic design decision, it's an utterly and
fundamentally broken design. Reified generics are both simpler to implement
AND more performant AND more powerful in terms of metaprogramming. I fail to
see the argument for erasure apart from backwards compatibility (which isn't
really an argument).

------
topbanana
This article makes no mention of Bizspark, free licenses for startups.

[http://www.microsoft.com/bizspark/](http://www.microsoft.com/bizspark/)

~~~
300bps
BizSpark is great for technology startups - free software and $150 per month
worth of Azure hosting for 3 years. That's enough to get a medium-sized VM or
a ton of SQL Server databases or a whole host of other hosting resources.

~~~
pauloortins
BizSpark is awesome but not all companies are startups, for those with more
than 3 years, the cost is still a problem.

~~~
_random_
Maybe they can start generating some profit / attract investors?

~~~
pauloortins
And spending money that could be used to attract more developers or be
invested in another way that not buying licenses.

~~~
300bps
Pretty much any software that you buy is going to be a rounding error in
comparison to hiring a developer.

Do you skimp on hardware too?

~~~
_random_
I hate the fact but C# might actually be cheaper to hire than e.g. Java devs.
Enough to pay for SQL :(.

------
patja
"Unlike Visual Studio, MonoDevelop is free and open source."

Probably many are aware, but there is a free Express version of Visual Studio.
I stopped paying for Visual Studio a couple releases ago and have been getting
by quite nicely with the free version.

~~~
__--__
MonoDevelop is free, but if you have a large code base, it's very slow. As in
"wait 30 minutes for MonoDevelop to start and analyze the entire project"
slow. And then the crashes...

Xamarin fixes all of these problems. But then, the free version is limited and
the paid version is very expensive. When it comes to IDEs, you really do get
what you pay for.

------
joshuaellinger
There seems to be a lot of attention on cost of the tools and almost nothing
on developer productivity.

Assume I have to buy the expensive $10K Visual Studio license then pay
$3K/year after that. Put developer cost at $100K per year. You need only a 10%
productivity gain to break even in year one.

My thoughts are that I'd get 10% just from the awesome Intellisense code
completion and navigation support or from the Entity framework.

...

My only reservation about C#/.Net is that all of my peers are in the Unix side
of the world. I feel like Microsoft has been losing mindshare among the top
tier of engineers. Oh, and it is really nice to be able to spin up 1000 VMs
without having to pay an OS tariff.

~~~
pauloortins
Joshua, a developer costs $100k per year in United States.

Now consider India, Latin America and other countries.

For example: I live in Salvador - Brazil here a developer costs $10k-$20k per
year.

In this scenario, this tools represent between 50%-100% of the developer cost.

I think that in India it's even worst.

~~~
taspeotis
The example was for the top tier VS Ultimate with MSDN. Depending on your
requirements Express might suit you.

Which is 0% of the developer cost.

~~~
pauloortins
Working without plugins support is not a option for me. We have to always try
use the most productive environment and if we can't do it due licenses cost,
it's time to analyze the platform.

~~~
taspeotis
So you need at least Professional, which is 1/10 the cost of Ultimate. Which
puts your percentages closer to 5-10%*

*Based off your claim that a developer is 10 to 20k and assuming USD I converted the prices from here: [http://msdn.microsoft.com/pt-br/subscriptions/buy.aspx](http://msdn.microsoft.com/pt-br/subscriptions/buy.aspx)

Note retail can be cheaper, but you don't get MSDN with it.

------
cpfohl
Just a quick comment about the C# community.

I've actually found it to be incredibly strong, but they've centralized around
StackOverflow rather than Microsoft's forums. There's not a _ton_ of activity
on Github, but it's by no means a small community; and as far as I've seen
most of the projects are quite collegial.

~~~
_random_
Github is not the only one. There is also Codeplex, Bitbucket. Some projects
are even on Google Code.

~~~
cpfohl
Great point.

------
jroseattle
An analysis of C#/dotnet should be much deeper than this to provide an
accurate picture. And, because of that fact, one can draw inferences about the
platform -- namely, that it's a rather sizable one.

Whether you love it, hate it, or simply have to live with it, the dotnet
platform is pretty robust -- you can create a LOT of different things with it.
Web, desktop, service, mobile -- it may not be the best in any or all of those
scenarios, but it's all very do-able with their toolset.

As with any technical platform, it's really best evaluated for depth in
specific scenarios.

------
dottrap
I was completely distracted by the use of Gartner's 2015 marketshare
predictions. They have a terrible track record.

[http://www.zdnet.com/why-does-the-it-industry-continue-to-
li...](http://www.zdnet.com/why-does-the-it-industry-continue-to-listen-to-
gartner-7000001394/)

[http://www.gsmdome.com/blackberry/gartner-predictions-not-
so...](http://www.gsmdome.com/blackberry/gartner-predictions-not-so-accurate-
especially-concerning-android-and-rim-market-share-evolution_23172)

[http://www.roughlydrafted.com/2012/10/21/three-years-ago-
gar...](http://www.roughlydrafted.com/2012/10/21/three-years-ago-gartner-
predicted-apple-would-go-nowhere-in-smartphones/)

[http://betanews.com/2010/09/13/are-idc-and-gartner-mobile-
os...](http://betanews.com/2010/09/13/are-idc-and-gartner-mobile-os-forecasts-
trustworthy/)

------
MichaelGG
" // use .Not(), for me, is more elegant than use the '!' operator "

That's like doing "#define BEGIN {" in C.

I'd also make a note that if you're considering .NET, F# is a better language
than C# in nearly every aspect. C#'s development is practically stagnated, at
least from an outsider's point of view.

As a comparison, the F# code of his example is just:

    
    
      type Student = { Age: int; Name: string }
      let student = { Age = 17; Name = "Paulo Ortins" }
      let PrintAdultStudent student = if student.Age > 18 then printfn "%s" student.Name
    

That's 176 significant chars versus 267, and as normally formatted, 3 lines
versus ~9. Once you start using F#, going back to C# is just painful due to
the incredible verbosity and lack of critical things like pattern matching
(active patterns are amazing) and good type inference.

~~~
pionar
I don't know how you can say the C#'s development is practically stagnated.
Evidence? Async/await was just added in C# 5.0.

~~~
MichaelGG
Because in _5_ years of development now, C# has only shipped two major
features: dynamic and async. Both of which F# has had since 2007 (maybe
dynamic was 2008). Both of which F# implemented better (as libraries, so you
don't need intrinsic compiler support). Async's design comes from F#'s design.

But without comparing it to F#, Microsoft has not polished the C# 3.0 design.
Expression trees are still half implemented (no way to call one exptree from
another). MS created anonymous types, but neglected to add simple types like
tuples (let alone anything more advanced). Type inference is still
ridiculously limited in scope:

    
    
      - Neither parameters nor members can be type inferred.
      - Local function vars can't be type inferred (because they chose identical syntax for expression trees).
      - Generic constraints can't be type inferred.
      - Generic parameters have limited inference. If one parameter can't be inferred, you _must_ specify all of them.
    

On one of the developer blogs, they noted that the reason fields couldn't be
inferred was really due to internal compiler codebase complexity. Yet 5 years
later, that's still not taken care of. Basically, they aimed for the LINQ
outcome, and implemented the required feature set only within the context of
LINQ, not for the language as a whole. Which is fine for V3. But then they
just left it at that.

~~~
kvb
I love F#, and greatly prefer it to C# for most tasks, but I think you're
overreaching a bit. C#'s dynamic feature is also extensible (via
IDynamicMetaObjectProvider) and much more complete than F#'s (e.g. F# probably
ought to have (?[]) and (?[]<-) operators for dynamic indexed properties).
Likewise, there are several real benefits to having built-in support for
async/await, such as the improved performance of a state-machine-based
approach and a far better debugging story (e.g. call stacks that are async-
aware).

C# is truly a great language; it was just created by people who have different
priorities than you (or I) do.

~~~
MichaelGG
You're right, you can implement interfaces for C# dynamic extension, but that
won't help against existing objects. But I'm out of my league here, because
every time I see an API that shows off dynamic, it boils down to saving a
handful of quotes. I get the feeling F# added it just to say "yeah, what's
your point?"

The benefits of built-in features you mention can be accomplished by special-
casing as an optimization. Zero downside language wise, only requires some
level of more resources for the compiler writers. For debugging, seems like
the same amount of work; either way it has to reconstruct the "async stack".
Best of both worlds, no downside.

C# is a great language, probably the best of the mainstream ones I'd say. But
I still find it severely lacking in some areas, with no justification other
than lack of desire/resources (type inference being the #1 case).

------
wrongc0ntinent
Maybe the lack of a strong community is because of Microsoft trying to build
it around itself, while always trying to push the new thing. WPF as an
example.

~~~
300bps
_lack of a strong community_

Ever hear of StackOverflow? There are thousands of tight-knit .NET and C#
based communities.

~~~
camus2
.net based communities =/= .net communities

just because a blog run on Wordpress , it doesnt have to talk about PHP...

~~~
300bps
You realize that there are millions of questions about .NET on StackOverflow,
right?

------
wavesounds
"some people are already betting that,in the next years, Windows Phone will
beat iOS as the second biggest player in the market."

I hope nobody is seriously putting money on the windows phone passing ios by
2015. The odds have got to be at least 500 to 1 it doesn't happen.

~~~
profquail
WP may not pass iOS's market share in the US market by 2015, but it is growing
by leaps and bounds in many of the other major markets (e.g., Europe, Russia).
A large part of this success is thanks to the lower-end Nokia Lumia models
like the 521, which are competitive with lower-end Android phones on price
while being generally higher in quality.

~~~
pauloortins
In Latin America, Windows Phone's sales are already bigger than iOS's sales.
In Europe, WP is also advancing more than iOS.

------
cognivore
Wow, that was strangely lacking in hyperbole for Hacker News.

I've used C#/.NET for years now, and it's been quite good - no real complaints
and a lot of enjoyment. Also, you don't have to worry about expense when
you're company buys the tools, and I believe there are some good discounts if
you have Microsoft Certified type people on your staff.

------
sker
What would it take for MS to make C# fully open source with no threat
whatsoever of patent or copyright litigation? Is it really a strong selling
point keeping companies using Windows? Now that MS is the underdog in the
mobile wars, wouldn't it benefit them if developers of other platforms adopted
C#?

They already gave F# away to the community. I don't see why they can't do the
same thing with C# and hopefully all of .NET. Maybe the post-Ballmer MS will
do it.

~~~
keithwarren
Not sure what you are looking for or mean by 'fully open source'. The .NET
Framework libraries are open source, ASP.NET is open source, the C# compiler
itself is closed is closed but it is an ECMA standard and there are open
source implementations of it.

~~~
camus2
Can you show me the last C# ecma spec?

~~~
artmageddon
As far as I can see, the ECMA spec only goes to 2.0:

[http://csharpindepth.com/articles/chapter1/Specifications.as...](http://csharpindepth.com/articles/chapter1/Specifications.aspx)

------
gesman
Agree with all. In fact features of C# are very close to what Scala offers.
.NET performance improvement in last couple years is impressive enough for me
to stop recommending any interpreted language based frameworks to my clients.

.NET/C# + cloud all the way.

~~~
pauloortins
For me, C# still lacks a bootstrap project like Rails to boost the team
productivity. I always have the feeling that the ruby/python teams are more
productive cause they have Rails/Django.

~~~
_random_
Which code would you rather refactor in 5 years? Make no assumptions about
willingness to unit test.

~~~
pauloortins
C# no doubt. But sometimes you just want to put some idea online, fast, a MVP
for example. In this case, C# is more burocratic than Ruby/Python.

------
wavesounds
I've worked with the C#/.NET platform for a number of years. As OP points out
it has a lot of cool features. But this can also be part of the problem. When
you have a big team working on an Enterprise project (which is probably this
stacks main audience) you always seem to end up with people who love certain
parts of the language and hate others and as a result it makes it difficult
for people to work on each others code because theres so many features and not
everyone wants to take the time to learn everything when they already have
their core set of features that work for them.

It is great that it improved upon what Java was lacking, but I think the C#
team is starting to go too far adding too much.

~~~
MichaelGG
What exactly seems too much? C#'s feature set doesn't seem that expansive. I'd
be upset to be forced to deal with a least-common-denominator subset because
someone doesn't understand, say, closures.

But I've not worked on an "Enterprise" project, and I assume the main goal
there is making sure you can hire anyone and make sure they can understand how
to add a new rule for e.g. Alaska sales tax.

------
hershel
Paulo ,good article.

BTW, there's also lightswitch , which offers really simple development for
database apps.

And there's .netmf , which lets you use modern ,memory managed language to
develop some types of microcontroller systems.

~~~
rocky1138
Slightly OT but while the article was well-written I found the red text with
the outline hard to read.

~~~
pauloortins
Really ? I found it cool. Are more people with the same feeling ?

------
_random_
Of course C# supports dynamic programming. It has a keyword "dynamic". It's
good for integration.

------
senthil_rajasek
I skimmed through the article...

While referring to a xamarin app there is a screenshot of a sample app with a
caption "The same application with native controls and sharing almost 75% of
the code base."

Is this xamarin code base shared somewhere?

Also, if there is a significant growth in the share of Windows phone ? Would
you use still use Xamarin to develop for Windows phone or would you use Visual
Studio?

~~~
profquail
AFAIK Xamarin doesn't support Windows Phone right now, but I'd imagine they'll
do so in the future as WP's market share grows; given that Windows Phone
already supports .NET, that's a huge chunk of work they'll be able to skip
if/when they do decide to add WP support to their products.

~~~
nbevans
They don't need to support Windows Phone because it already runs .NET CLR
code. MvvmCross enables you to target iOS, Android, Windows Phone, Windows 8
Metro/Modern, WPF, OSX Mac from a single code base.

Xamarin only needs to fill in the gaps, which are iOS, Mac and Android.

------
alkonaut
I think the analysis leaves out the most important aspects for non-C#/.NET
developers. My analysis:

C#, the language:

Pros:

* The most elegant of this family of languages (statically typed curly bracket imperative).

* If you are coming from C++: C# is Feature rich but still not too large to make it "choose your own sublanguage" like C++ (yet). You can actually learn this language from the inside out. There are few undefined implementation details and quite few quirks.

* The tooling is fantastic if you can agree to using windows and shell out some money.

Cons:

* It was designed to rival C++ and Java with a nice learning curve for C++/Java devs. If it was designed today, I think it would have a lot more modern/functional features built in such as tuple deconstruction, algebraic data types/pattern matching (instead of Null) and so on. Now when you use F#, C# feels old with its only half-decent type inference, null keyword and so on.

* Performance (This is actually more .NET than C#): While it _can_ be quite performant, _idiomatic_ C# is still often quite slow. Especially in the hands of non experienced developers. There are often hidden allocations and boxing calls that are hidden behind syntax sugar, that end up taxing the garbage collector (example: A simple foreach call often allocates an object which later gets eligible for GC). So writing high performance code is _possible_ in C# but still very hard. You'll find yourself either making the code look like C (for example: arrays of structs rather than lists of objects which was the idiomatic solution), or simply calling to C/C++ for performance sensitive bits. In comparison to C++ for high performance code, I'd say C# offers free reliability/conciseness etc., and you have to struggle with perf. With C++ you'd get a lot of perf for free because idiomatic C++ is fast (array of structs may well be an idiomatic solution!), but instead you may struggle with leaks, overruns, token salad... Bottom line: C# can often be as fast as C++ but when it is, it's no easier than just using C++ because you have to make allocation free code basically (which is HARD, especially as an afterthougt).

.NET, the platform:

Pros:

* It feels like they looked at java and just corrected a lot of the problems. Sane dependency/versioning is just one example.

* The community is very much alive. Stackoverflow has become the center of it in later years.

* Frameworks evolve at a stunning pace. If you blink you missed two versions of ASP.NET MVC.

Cons:

* Same as above. Hard to keep up with things if you aren't working full time on it. The webpage you did last week is now two frameworks away from the latest version. You spend a lot of time upgrading code to newer frameworks.

* The GAC is a horrible implementation of a good idea. The fact that you can't really use signing in a useful way without it also feels like a mistake.

* The free versions of everything (compiler, IDE, servers..) feel like second class citizens. You can't code up a prototype webpage in the latest framework and expect it to run on an OSS server under linux. It's hard to know _what_ subset of language/tools/frameworks actually work under e.g. Apache+Mono. A clear disadvantage compared to Node/Python etc.

* It feels like Microsoft has a bit of a weird relationship with .NET, or rather, it feels like the OS division of microsoft never really accepted .NET while it has stayed the pet of DevDiv. The worse examples has been the slow death of Silverlight (I can see how it should die, but the silence from microsoft has been remarkable). Now it also seems that MS don't really have a plan for how .NET should be a first class citizen for both desktop and "modern" application development under Win8, instead pushing C++. That to me is extremely worrying.

------
foohbarbaz
There's one fatal problem with .NET platform: it only (usefully) available for
Windows. Who can afford to ignore other platforms these days? Windows,
especially on the server side is on the decline. In mobile it never took off.
The rest is not really relevant.

~~~
itsboring
I agree with you about windows, but I've been doing C# development on mac and
linux for the past year. I don't even call myself a .NET developer anymore, I
just say Mono or C#.

------
malkia
I find .NET confusing when comes to packaging - Assemblies, netmodules, gacs,
etc. Something written in the same way might be a package, or object. Also
tons of methods, for which you have to rely on IDE that guides you all the
time. I consider this a bit of bad thing - all it means is that I can really
only think of what could be done in front of the IDE - by discovering
functions by their names that sound like the task I want to accomplish. Then
moving from 2.0 or other version to newer, comes with surpires - the guy that
previously coded something left his assemblies that he downloaded from
whoknows where, and these are no longer supported, or there is no x64 version,
and they were somehow 32 bit only.

~~~
gecko
I'm not sure what language you're used to, but the .NET package system isn't
that hard to work with.

Assemblies: think JAR files, Python eggs, Ruby gems. They're collection of
classes, which can be grouped into modules.

Modules: a collection of classes. 99% of the time, there is one module in an
assembly. Modules are effectively invisible for developers in all contexts;
they really come up when you combine a pile of existing assemblies into one
big master assembly for distribution, in which case that master assembly will
have multiple modules, but as a developer, the main way that this would show
up is that the things that were _previously_ their own assemblies still _act_
as if they're all in separate assemblies.

The GAC: This is what it sounds like: the global assembly cache. It allows
multiple programs to safely use the same DLL, so that you only need to have
one copy on your machine.

I've not actually heard of people getting totally lost in the .NET 2 to 4
transition, but I'm sure it's happened. That said, that's also happened in the
Go world (especially due to their lack of versioning), in the Python world
(especially as 2 to 3 starts actually happening), in the Java world (where
someone didn't specify full versions for what JARs they were using, and the
new ones conflict), and a bunch of other environments. I don't consider that
.NET-specific.

------
spo81rty
Yeah and the costs are more like $1000 a year vs 10, 000 so it only takes a 1
percent improvement. I don't know the exact numbers. But I know your example
is an order of magnitude off.

------
emadb
I wrote few days ago about .net and web development. Here is my opinion:
[http://ema.codiceplastico.com/blog/2013/10/24/web-
developers...](http://ema.codiceplastico.com/blog/2013/10/24/web-developers-
should-stay-away-from-windows/)

------
platz
C# and Java are similar enough, I wonder if it would be good to show a few
comparisons between syntax of those two languages, if most of his peers in
fact knew Java well.

~~~
clubhi
If you are proficient in C# and have to switch to Java for a while you will be
pretty frustrated.

~~~
pauloortins
Totally agree. Show some C# code to a Java dev and he will be fascinated.

~~~
_random_
And a Scala dev will find it strangely familiar :).

~~~
pauloortins
Agree. When I tried to learn Scala I found it very similar to C#, only changes
the name map -> select, filter -> where and so on.

------
eliben
Wasn't there a notice a while ago that MS is dropping .NET in favor of HTML5
for its new OSes? Or has this decision been reversed at some point?

~~~
profquail
No, that was just a big scare. Microsoft dropped Silverlight (browser plugin
to run sandboxed .NET apps in the browser) in favor of HTML5+JS, but I think
that was an eventuality anyway as Silverlight never really seemed to gain
enough momentum to stand on it's own merits.

~~~
eliben
So as far as MS is concerned, .NET/C# is still the officially sanctioned way
to develop apps for their new "tablet-age" Windows 8+? [not desktop apps]

~~~
shanselman
In fact, MOST apps in the store are C# and XAML. It's the best way to make an
app that runs anywhere, using xamarin for other platforms.

------
pauloortins
Updated to cover async/await and function programming support.

