
.NET Culture Shock: Why .NET Adoption Lags Among Startups - Aaronontheweb
http://www.aaronstannard.com/post/2010/07/03/NET-Culture-Shock-Why-NET-Adoption-Lags-Among-Startups.aspx
======
mattmanser
To be brutally honest about .Net, and I use it and like it myself, the reason
there's no startup market in it is because until MVC there was no point
developing in it.

ASP.Net controls, postbacks for everything, view state, a general hiding of
the actual power of ajax and an obsession with using tables made .Net a
terrible web development environment if you had any clue what you were doing.
The html it spat out was a bloated horrible mess, web services were anything
but unless you really slogged your way through some pain, ashx pages and the
directory structure just felt plain wrong.

That said I'd almost, almost, switched to using python/django and then I had a
look at MVC and it did everything I needed. Full control over html, nice code
separation, a nifty ORM for taking away the pain of basic crud. An alright
templating system easily extensible using extension methods. And 3.5 brought
some tricks using LINQ and anonymous methods.

I still know I need to learn a few more languages, but MVC has allowed me to
copy everything I felt was the 'right' way of developing webs apps from
rails/django without having to actually learn a new language and dev
environment.

If you weren't worried about performance and didn't want to learn how to
actually program, the old ASP.Net was ok for very quickly throwing out web
apps for the 10 people in HR. Much more than that required an in depth of
knowledge way beyond most .Net programmers, with most of those people being
multi-lingual anyway and tending to opt for the cleaner code the alternatives
offered.

I don't feel that's the case anymore, but it's way behind in adoption at the
moment.

You still hit the occasional WTF in MVC where if feels as if someone wrote a
part of the system without reading the memo about flexibility (the validation
solution in MVC, for example, is terrible, although not finished and LINQ to
entities can be frustrating).

tl;dr;? No startups because until recently good web development in .Net was
actually really hard. MVC's changed that.

~~~
barrkel
This is false because it relies on an incorrect assumption: that if you were
using .NET to do web development prior to MVC, you had to use ASP.NET.

When I was writing .NET web applications, the sum total of ASP.NET integration
was implementing IHttpHandler and friends - not much more than access to the
request and response streams. You can build your own lightweight framework,
which, being lightweight, isn't a big deal.

~~~
henrikschroder
+1 for this. We've been working in C#/ASP.Net for 7 years now, and we always
stayed as far away from ASP.Net controls and Web Forms as possible. Some
things we liked such as master pages and making a class hierarchy for the
pages to inherit, so we used that.

For the past two years we've been using our own light-weight MVC framework.

C# and IIS are very versatile technologies, you don't _have to_ buy into the
entire Microsoft tool chain to use it, you can use whatever parts you want.

~~~
swilliams
This is true, but it also reinforces the statement that WebForms suck. It was
so broken, that you had to write your own framework to deal with it.

~~~
henrikschroder
To be fair, ASP.Net was a better technology than JSP, which were the main
competitors back then. On top of ASP.Net, Microsoft built Web Forms, which is
really bad when it comes to building large, scalable web applications.
Unfortunately, Microsoft kinda stopped there, whereas the Java community
continued and made Struts and Spring and whatever else they do now.

And that highlights the other problem with using the Microsoft stack: There's
no community around popular frameworks, the absolute majority use only what
comes out of Redmond, and if nothing comes, then they're just stuck.

In the Java community, there were loads of MVC frameworks, people built it,
and the popular ones flourished, and people could move on. In the .Net
community, nothing really happened until Microsoft themselves made an MVC
framework.

So being on the Microsoft stack is more like a roller-coaster than a smooth
progression, and that is a problem, because it's not very startup-friendly.

------
bad_user
I've been to 2 dotNet local conferences already ... the presentations are
centered around Office / Sharepoint integration, plus company-sponsored
propaganda (also targeted at the enterprise) that made me wanna` puke out of
boredom. Even the presentation on Silverlight was focused on data-binding and
how easy it is to build boring forms out of clicky-clicky actions.

This is especially telling considering I did work for "the enterprise" and I'm
still doing it as a consultant.

Of course, personally I don't need more propaganda and advocacy.

Just last month I created an app for managing the webcams of a client. I used
Red5 (the open-source Flash streaming server), in combination with Apache /
Django + a MySql database. Besides my billing per hour, the extra cost to the
client for the licensing of this infrastructure was $0.

And for my app, while I would love some of the stuff in .NET, I don't want to
pay extra for those Windows servers, even if they provided extra-value over
Linux (which they don't).

Putting your business hat on ... as a startup or as a pragmatic consultant,
paying extra for Windows servers is not worth the price, unless the cost of
switching from .NET is big (and really ... which other technology has such a
big cost of switching?).

Sure ... it's easier to blame the lack of advocacy. The Perl community is also
doing it (and I would rather go with Perl apps hosted on Linux servers than
suffer the Windows licensing hell).

~~~
Cymen
Have you taken a look at Mono? The Windows servers aren't always required.
There are definitely some caveats but it might be an option.

~~~
jodrellblank
I was surprised to install PHDVirtual's backup software and it involves two
linux virtual machines which run a web interface based on .aspx.

I think it's the first time I've met Mono in a product.

------
VengefulCynic
As someone who has done both Enterprise .NET and startup work, I have to say
that the reason we didn't use .NET is much the same as the reason you don't
rent a 2-ton backhoe to dig up a flower bed: cost and overkill.

Yes, the backhoe might dig the flower bed faster, but it costs $5,000.00 to
rent, there's a one-week minimum rental, and its treads tear up your yard to
get to the flower bed. On the other hand the shovel may be slower, but you can
borrow one from a friend and it doesn't tear up your whole yard. Let's near in
mind these are start-ups with limited capital and no time to fill in the holes
that your treads tore up in your front yard.

~~~
henrikschroder
The only thing you really need to pay for is the actual Windows 2000-whatever
servers with IIS, everything else you can get for free. Visual Studio Express
Edition is free, the .Net framework is free, and you can integrate with all
sorts of popular open source products such as MySQL, Postgres, memcached,
Cassandra, etc.

~~~
Daishiman
My time doing deployments and dealing with Windows Server issues is not free.
Neither is the time lost using RDP instead of SSH, dealing with licenses,
requiring much more HD space than the alternatives, and lacking real scripting
solutions.

I have yet to hear anyone using LINQ on anything that's not SQL Server, and
considering the NIH syndrome in Microsoft, I wouldn't recommend it.

~~~
henrikschroder
_My time doing deployments and dealing with Windows Server issues is not
free._

We don't have any issues with our Windows servers, but I guess the number of
issues you run into is proportional to your experience. We would have a lot
more problems dealing with Linux servers. YMMV.

 _Neither is the time lost using RDP instead of SSH_

Practice makes perfect...

 _dealing with licenses_

What? You buy it, you install it, done?

 _requiring much more HD space than the alternatives_

Now you're just being silly. Are you worrying about HD space in this day and
age? Seriously?

 _and lacking real scripting solutions._

I'll give you this, but I've yet to see the need for such an environment.

 _I have yet to hear anyone using LINQ on anything that's not SQL Server_

Don't use it then? I think LINQ is a horrible idea, and horribly implemented,
so I'm staying far, far away from it. I would never use it or SQL Server in a
startup, that would be insane.

I see how you could accidentally recruit someone who thinks it's the best
thing EVER and starts using it all over, but recruiting people addicted to the
wrong bleeding-edge technologies is a hazard no matter which technology you
use.

~~~
epochwolf
Have you even looked at how much bandwidth RDP uses compared to SSH? I can
have 7 or 8 ssh connections open and monitoring files where windows can't get
one remote connection working properly.

As for installing, Debian/Ubuntu can't get any easier.

    
    
        apt-get install <package>
    

And if you need the very latest nginx?

    
    
        wget <url>
        tar -xzvf <tar.gz file>
        cd <folder>
        ./configure
        make
        make install
    

Even better, you can script this with bash with little effort. (Complex
scripting can be more difficult but that's not what we are doing here)

~~~
pbz
You're comparing apples to oranges. One is graphical while the other is text
based. I've personally never had issues with RDP and bandwidth. If you have
multiple connections open you can minimize the RDP window; the connection is
maintained but the window is not refreshed so it doesn't use your connection.

------
tmcw
By the same token, we should be amazed that most shops use Mac and Linux, even
though Windows has tremendous market share. Or why we aren't using Java.

> Enterprise and startups aren’t mutually exclusive – they’re just different
> stages in the evolution of software

I think that if you told most startups that 'Enterprise' was another stage, a
future stage in the 'evolution of software', they'd hang themselves.

------
melling
The author asserts that Visual Studio is a much better development platform
than everything else. I use IntelliJ, emacs, Unix cli, Perl, etc What am I
missing? I'm sure Visual Studio is good but even if it's better, how much
better is it?

~~~
nl
Do you like IntelliJ?

If so, Visual Studio isn't as good, but is kind of comparable. It's better
than Netbeans. Personally I prefer Eclipse, but I can see that others may
prefer VS.

~~~
melling
IntelliJ is great. They have a free version for people who want to try it.

<http://www.jetbrains.com/idea/index.html>

The same guys make Resharper for Visual Studio. I can't imagine that Visual
Studio is better if the Java guys are making a plugin for it. I have heard
that for C++, VS is hard to beat, but I haven't done that in a few years.

~~~
henrikschroder
For VS 2003 I had to use ReSharper to make it bearable. For VS 2005 it made it
better. For VS 2008 ReSharper didn't really add anything anymore, and VS 2010
has all the features of ReSharper and more.

VS has evolved quite a lot, and I don't acutely miss Eclipse anymore whenever
I'm in VS.

------
senthilnayagam
there is a whole generation of developers who came out of college with the
notion of Microsoft being evil.

also the trends setup by VC's like YCombinator, good college/university like
MIT is, you can make cool products with open source ecosystem.

not sure how much you would remember, about 15 years ago it used to cost a
large chunk of money to build scalable apps as 70% of the investment was sunk
into datacenter acquisition.

another cool aspect is lot of new popular apps like posterous, started out as
a single usable idea were implemented over a weekend and polished with
multiple iterations.

licensing cost is still a big negative for those have discovered the power of
open source technology, also the community is lot more evolved in sharing the
expertise.

application frameworks like Ruby on Rails played a big role in getting the
best practices like MVC Architecture, source code management, TDD/BDD, code
generation, reuse in open source web frameworks

cloud computing infrastructure like amazon web services and linode VPS maks
people experiment new projects at lot less cost.

Personally I have problems with many .Net developers who are "fish out of
water", when it comes to living without the Visual Studio IDE. standards and
features like XHTML, AJAX(prototype, jquery others ) came lot later in .Net
programmers toolset until Internet Explorer was the leading in developer
mindshare.

------
benologist
I'm using .NET ... most of the tools are provided free and the full versions
provided free by BizSpark, which I joined for free and now have a 3 year MSDN
subscription that entitles me to a load of stuff.

It was only very recently that I stopped running <http://www.swfstats.com/> on
SQL Server Express.

I think the real difference is it's just not front page news you're doing x
with .NET. The web just likes to amplify and exxagerate certain
'accomplishments' ... doing your job in C#, Java, MySQL etc aren't on that
list.

~~~
portlandFan12
BizSpark isn't really free, is it? You have to pay full price once you fail to
meet the eligibility requirements.

~~~
benologist
There's a $100 fee when you finish.

------
naz
Because like most enterprise software the people using it aren't the people
buying it. When they have a choice they go elsewhere.

~~~
TeHCrAzY
My real world experience with this is entirely different. Most .net devs are
doing what they do because they have the best job prospects in that slice of
the industry, especially in light of the overall skillset for the average .net
coder is 90% .net, and 10% in the other languages learnt during thier degree.

I personally enjoy working in .net; the entire development process is very
smooth and intergrated.

------
alttab
What sounds more attractive to a Hacker type looking to work on a startup?

"Come be an effective software engineer in today's new start up and use .NET
to change the internet!"

or

"Laid back atmosphere, free pizza, Ruby and text mate. Let's get at it."

MS is a tool set - not technology. Hackers are very opinionated and want to do
things their own way. In my experience, .NET, VB, Visual Studio (all while
great _tools_ ) require you to do things _one way_ , _their way_. That just
doesn't sit well.

Then of course there is cost, stigma, lock-in, etc. Start ups are the _anti-
Microsoft_ , using it as a platform to build their technology, from a very
_fundamental level_ , is dissonant.

It certainly is culture shock, and its not going to get any better for
Microsoft in these markets. But they don't care, their business isn't designed
for it. Microsoft doesn't do consumer products well. If you think about it,
the only reason DOS got in front of everyone is because they were able to sell
it to IBM.

~~~
DrJokepu
> In my experience, .NET, VB, Visual Studio (all while great tools) require
> you to do things one way, their way. That just doesn't sit well.

To be honest, that's not my experience. I've found that .NET gives you a lot
of freedom, however things can be indeed easier if you do things the
"recommended" way, but there's also an "if that's what you want, you can do it
if you think you know what you're doing" mentality as well in the design of
the framework. I mean, C# even has pointers which is quite uncommon in similar
high-level languages, albeit well hidden so you only get to use them if you
really want to.

Contrast that to Python's famous "there's only one way to do it" philosophy.
Don't get me wrong, I think Python is really great stuff but I think it's
unfair to say that .NET (as opposed to Ruby or Python) forces you to do things
"one way, their way". If you want to do web development, you can choose
between MVC and the (kind of) continuations of WebForms; imperative or
functional, direct SQL, LINQ or the Entity Framework etc. - there are a lot of
choices to be made.

------
Zak
_Visual Studio destroys [other environments] in any feature set-to-feature set
comparison._

sounds an awful lot like

 _No wireless. Less space than a nomad. Lame_

Even for the nerdy, a long feature list is not what actually makes people want
to use a tool. In the case of Emacs, it's the customizability. With Vim, it's
the simplicity, speed and focus on its purpose. Other environments have their
own advantages that don't fit neatly in to a feature list.

~~~
henrikschroder
There are addons to make Visual Studio editing just like vim. Or Emacs if you
prefer that.

~~~
Daishiman
And the Vim plugin is an absolute failure, and the development enviroment
takes 30 seconds to startup, 30 seconds to connect to a TFS server over the
Internet, and stutter every 20 seconds whenever you want to switch windows.
oh, and let's not forget the 15 second build time for debugging.

Vim is here, now, the very second you need it, over an SSH connection, and
far, far more customizable and with more useful plugins. The advantages of
Visual Studio (namely, integration of features and great code completion) are
lost when a framework fits in your head and you've automated most of your
tools.

I say this as a person that spends 50% of his time on VS, the rest on Vim.

~~~
kenjackson
First, VS shouldn't take 20s to switch windows. I just did it and it happened
instantly. And I have 60 open windows (not including tool windows).

Second, how is Vim more customizable than VS? I can't think of anything I
can't do in VS. There's plenty I can't do in Vim.

Vim does load faster. Although single file load with VS isn't too bad, but
certainly no Vim.

And don't use TFS... that's just bad mojo.

I say this as a person who spent 12 years of his life using Vi/Vim before
touching VS for the first time.

~~~
Daishiman
Have you tried using Silverlight for a RIA app? Rendering a XAML file takes at
least 5 seconds, and it's a process that's riddled with bugs and consumes at
least 1 gig of memory. I'm sure the WinForms designer is much faster (I've
never had any trouble with it in VS 2008), but the new toolkits with WPF and
XAML seem to consume all the resources of my dual-core laptop with 3 gigs or
RAM (a somewhat acceptable dev machine), the parser is horrendous and prone to
causing unexpected exceptions, and is generally not as nice.

------
barrydahlberg
I think a big difference is how we define small, e.g. Wikipedia tells me:

 _In the United States the Small Business Administration establishes small
business size standards on an industry-by-industry basis, but generally
specifies a small business as having fewer than 500 employees for
manufacturing businesses and less than $7 million in annual receipts for most
nonmanufacturing businesses._

When Microsoft makes something for small business, that's what they are
imagining. For a boot strapped hacker working on a website, 500 people and $7
million is a long long way away...

------
ihumanable
Why nit just know your place? Microsoft is fine (or at least was fine with)
targeting massive enterprises and signing lucrative contracts with lots and
lots of zeroes and lock-in. Why not adopt some unix philosophy into the ms
ecosystem and just do one thing well.

I was willing to sympathesize with this article until the visual studio
destroying everyone else feature set wise comment. Despite what you may think
you are about the topic, you are just inviting a holy war.

As someone who has used visual studio, eclipse, and text mate regularly I
would be hard pressed to say that visual studio destroys anything. I would
prefer eclipse since it can do things like "open type" and "organize imports"
natively. Things that come for free in the free and open source eclipse ide
require you to buy the $80 resharper plugin for your $400 ide.

~~~
Encosia
Everyone's going to have different favorite editors; nothing wrong with that.
However, the _free_ version of Visual Studio 2010 has both the features you
cited.

(and for what it's worth, I wasn't the one who downvoted your comment)

------
borisk
.NET FW is 1st class at tehnical level, but Microsoft platform around it is no
good for a startup. You want to write mobile apps - Windows Mobile/Phone is a
joke. Want cloud computing - Windows Azure is $100 per month for the simplest
web site, no matter how many requests served. There is no also no way to play
with the real thing for free.

Another problem is most MS internal developers still live in the 80s. You can
hear "Real man write C++" all the time. Just browse the source code, written
by MS employes, on Codeplex. They write C++ in C#. The APIs are out of this
world - 25 or 50 lines of code to use a simple feature is no problem.

------
etree
I did some .NET development in college and after years of Python and PHP
development, I finally started working on a Rails project about a month ago,
and a couple of weeks ago I had to do some .NET development for a client.
Obviously you can do anything in any of these environments, but I really did
find .NET to be the most difficult to work in.

My issue is mostly around tools, not any of the languages themselves. In my
ubuntu/rails environment i was up and running in 5 minutes with a text editor
and a couple of sudo aptitude commands. With .NET i had to spend hours
downloading and installing two different versions of the .NET framework, VS
2010, and SQL Server Management Studio. This was to say nothing of any
external libraries. Now that i am up and running and my environment is setup
its fine i suppose but frankly it took days just to be able to do hello world.
With Rails I was there in 5 min, and it scaled with me. It was proportionally
just as easy to get hello world going as something more complicated. The base
bar to getting moving in .NET by comparison was several days - and if i wasn't
being paid to do it, i never would have just for the sake of playing around.

------
iskander
I only programmed .NET in the days of 2.0, so my problems with it come from an
older less capable framework. Nonetheless, when your language of choice
requires you to distinguish between:

\- IComparable

\- IComparable(Of T)

\- IEquatable(Of T)

\- IStructuralEquatable

\- IStructuralComparable

\- IEqualityComparer

\- IEqualityComparer(Of T)

\- IComparer(Of T)

\- overriding Object.Equals

\- overriding operators <,>, <=, >=, =, <>

...it's time to find a new language.

edit: Just imagine you encounter a new collection BozBag(Of T) which has to
test your objects for equality. Without looking at documentation could you as
a coder possibly know if BozBag uses x.Equals(y), x = y, x.CompareTo(y) = 0?
Heck it could even use x.Equals(DirectCast(y,Object)) or
x.CompareTo(DirectCast(y,Object)). The only way to really know is to dig
through documentation.

~~~
snprbob86
Saying that you need to understand and differentiate between all of these is
disingenuous.

\- The "Structural*" types are new in .Net 4.0, you never had to understand
them before and you probably don't need to even know they exist now.

\- Many of these listed are just generic vs non-generic. The generic ones
subclass the non-generic ones, so contraviance eliminates the need to really
understand the distinction upfront.

\- Compare means Compare(a,b):int which returns -1, 0, 1.

\- Equals means Equals(a,b):bool

\- If it ends in "er" it is a functor which operates on two free objects
instead of "able" which means one subject of comparison is "this".

\- Overriding individual operators gives you more flexibility than
Compare(a,b):int because you can use specific algoritms for specific
comparisons.

Maybe it's time to find a new arbitrary reason to hate .NET?

~~~
iskander
>\- The "Structural*" types are new in .Net 4.0, you never had to understand
them before and you probably don't need to even know they exist now.

You're right, I scooped those off MSDN and never use them myself. All the
others, however, have made numerous appearances in my code. I think that the
preponderance of comparisons is a language smell-- it's not close to my only
problem with .NET development but I think it captures the essential headache-
inducing inelegance of C#/VB programming. That language-blob has little
regularity but much accretion. There are rarely sane defaults nor any
overarching design for your mind to latch onto. After time spent with saner
languages (Python, Haskell, Ruby, OCaml, etc...) coding in .NET feels
terrible.

~~~
snprbob86
Java also has Comparer and Comparator in both generic and non-generic flavors.
Java lacks Equatable, which is a problem. Haskell, for example, has both Eq
and Ord. It is frequently possible and convenient to be able to implement Eq
in terms of Ord and part of Ord in terms of Eq, but these are orthogonal
concepts.

As someone who has done _A LOT_ of professional C# development: I've found
that with only a few exceptions, the .NET base class libraries are very well
designed with entirely reasonable defaults. I use Python primarily now and, in
general, the core .NET libraries seem to be better designed than most of the
older Python libraries (many of which are getting properly cleaned up in
Python 3).

Every environment has its cruft.

------
S_A_P
You dont have to use webforms, and using ASP.NET can be quite pleasurable if
you dont use the "asp" controls and postbacks.

HOWEVER, the second that Sharepoint enters the equation, I turn, run, and dont
look back. What a horrendous kludgefest that is...

~~~
epochwolf
How do you use ASP.Net without webforms? I ask because I've only had a one
course introduction to ASP.Net Webforms in school.

~~~
squidsoup
<http://www.asp.net/mvc>

------
DjDarkman
Maybe the author should consider this possibility:

Startups don't use it, because: \- there may be other technologies that are
better for the job \- startups rarely care about Microsoft's heavy marketing
which alone can convince a lot of managers to use a technology just because
it's from Microsoft

And one of the worst things is that it's a Windows technology, say what you
will, but if you want .NET you need Windows, and pay a zillion $-es for
license. Yes I know there is Mono, it's very close, but no cigar, it's like
wine, it lags.

But in the end I want to ask a question too: What could .NET bring to startups
that other languages can't?

