

Building a Startup - Defending .NET - tansey
http://www.nashcoding.com/2011/04/10/building-a-startup-part-2-defending-net/

======
jschrf
.NET is great. It's fast, clean, and the framework libs are incredibly good.
C#, IronPython, and F# are amazing.

I still haven't found an IDE that compares to VS in terms of productivity and
usability.

Despite all the things going for it, it's decidely un-trendy and people hate
on it. I'm guessing it's primarily because it's from Microsoft.

Software trends are silly.

~~~
charlieflowers
It's true. .NET, and C# especially, is one of the few things Microsoft really
got right. Anders H is a genius -- he showed it when he did Turbo Pascal, he
showed it with Delphi, and he continues to show it with every new release of
C#.

Did you know that C# has: lambdas, closures, optional duck typing, first-class
functions, better generics than Java, and type inference that is sometimes
spooky?

Really, the only flaw I see in C# (and clearly this is my own subjective
opinion) is that I now believe dynamically (duck) typed languages are so much
more empowering than strongly typed ones. To me, it seems you can get so much
more done, faster, and _you_ choose where to expend your energy to get
"automated correctness". But even there, C# has the new "dynamic" keyword that
allows for duck typing, so it is moving in the right direction.

~~~
jschrf
"Did you know that C# has: lambdas, closures, optional duck typing, first-
class functions, better generics than Java, and type inference that is
sometimes spooky?"

I did know that, and these things heavily factor into why I default to C# for
most projects these days! .NET 4 is awesome.

C# is an excellent language. It has all these great things, yet doesn't feel
polluted or bloated at all. I absolutely love lambdas, closures, and generics.
They help write concise and clear code. Generic support in C# and F# and the
CLR itself is brilliant.

Writing event-driven, asynchronous IO code in .NET code is a breeze. It seems
like the current programming trend around these parts is focused on "iterating
fast" and having async IO. C# gives me both of these things, with the bonus of
having the compiler catch most of my errors.

I disagree with the general notion that duck-typed languages are more
empowering or let you iterate faster than strongly typed languages.

If you think that a language that is lazy (or worse, unspecific) about types
lets you write code faster, I think that you have some fundamental problems
with how you approach development.

The whole dynamic languages = faster code production is an unsettling school
of thought, in my opinion.

~~~
charlieflowers
"If you think that a language that is lazy (or worse, unspecific) about types
lets you write code faster, I think that you have some fundamental problems
with how you approach development.

The whole dynamic languages = faster code production is an unsettling school
of thought, in my opinion."

Well, that's what I used to think too. The million dollar question is ... have
you _tried_ it?

I did a heavy Javascript project recently, and I was amazed at how much faster
I could go from a vision of a complex solution to having that solution
implemented.

------
nickbp
As far as I can tell the author's reasons for deciding to use C# can be summed
up as "I'm used to it from previous work, and some useful libraries related to
my project are available."

Those are perfectly valid reasons, but they aren't really much use to anyone
who doesn't share those circumstances, and don't really have anything to do
with upsides and downsides of the language itself. That would have been far
more relevant to us outsiders.

Also, "I'm buying a MBP" translates to "I'm serious about startups"? Who says
image isn't everything? Besides, everyone knows serious hackers use IBM-era
Thinkpads!

~~~
tansey
> Also, "I'm buying a MBP" translates to "I'm serious about startups"?

Well, that was tongue in cheek.

But really, just the opposite-- I'm saying that I'm a total tool who's caved
in to the trendy peer pressure of the startup culture. That culture shuns .NET
on principal and there's lots of pressure to never use it for a startup.

And if you don't believe there's peer pressure to use a MBP, try going to Red
Rock or the Dojo with an Acer laptop. You can just feel people judging you. ;)

~~~
mindcrime
_And if you don't believe there's peer pressure to use a MBP, try going to Red
Rock or the Dojo with an Acer laptop. You can just feel people judging you._

And? Unless you're trying to sell them something, who gives a rats-ass what
they think? :-)

~~~
tansey
Again, tongue in cheek. :)

Though I am really buying a MBP tomorrow. I'm doing it because I need a new
laptop and I like the new MBP-- but you can be sure I'll have it setup to do
Windows 7 in dual boot from day 1.

~~~
mindcrime
_but you can be sure I'll have it setup to do Windows 7_

Eeeeeewwwwwwwwwwwww..... boo, hiss. Windows?!??

Sorry, when you mentioned a PC based laptop, I assumed it would have been
running Linux (or BSD or Plan9 or Minix or some other proper operating
system.) :-)

~~~
shadowfox
So his point about people judging him was not way off the mark ;)

~~~
mindcrime
Not at all... my point isn't that people won't be judging him, my point is
that it doesn't matter. And my previous response was intended to be thoroughly
TIC as well, FWIW.

------
Hominem
I see some of the .net hate starting to seep into the corporate world as well.
I work as a .net developer for a very large corporation and there is more and
more talk of re-implementing production applications in Python. The perceived
problem is poor code quality. It is an uphill battle to convince people that
this problem is not going to be fixed by switching to Ruby if we continue to
produce code by lowest bid.

I think there is a difference in .net developers and Ruby or Python
developers. There is a much higher demand for .net developers so many people
who had some aptitude for computers picked it up to get a job. Seems to me,
people who went through the effort and sought out Ruby or Python take extra
pride in the craft of programming. I would say there are just as many .net
developers who care about the code they produce, but they are background noise
in the sea of mediocre talents. The prospect of finding them in that sea is
pretty daunting.

~~~
tansey
If both of those are true, then doesn't that mean a whole wave of sub-par Ruby
and Python developers are coming our way in the next few years?

~~~
Hominem
Yes, I'm pretty sure I will see the staffing firms send me back the same
developers, but now they will be Ruby experts.

Maybe this is less about .net/other languages and more about what makes
development so terrible in large corporations. But keep in mind most .net
developers, of which I am one, are products or large corporate development .

------
wriq
_Existing expertise_

If the goal is to get to a minimum viable product quickly (like most startups)
then existing knowledge is a pretty good reason to go with a certain stack. He
even mentions having the main algorithm already implemented in C# so at that
point it's pretty much no contest. He can always go the route similar to
StackExchange in using Linux & Open Source on utility servers (Caching/Load
Balancing) and keeping the MS-centric App/Database server.

~~~
eneveu
That's an interesting dilemna. I'm a Java web developer, I know the platform /
libraries / tools really well, and know how to get things done with it. I've
dabbled with more powerful languages in my spare time, but I've been using
Java 8+ hours a day for the last 3 years.

If I were to launch a startup, should I go with the "cool shiny powerful"
language, or should I stay with the boring verbose language that I know well?
Would the fun factor of using Clojure / Scala / Ruby / Python / Blub++ be
worth it? Would the language "power" offset the time "lost" gaining experience
with a new platform? What about hiring? Hackers love powerful languages.

So many tradeoffs.

~~~
Chris_Newton
> If I were to launch a startup, should I go with the "cool shiny powerful"
> language, or should I stay with the boring verbose language that I know
> well?

I think the danger with this decision is that we tend to get a "grass is
always greener across the street" mentality. I have yet to find a programming
language that has no serious warts.

Certainly different languages have different warts, and thus suit different
jobs better. However, just because we haven't used a language enough to
appreciate its warts, that does not mean we will not discover them to our cost
at exactly the wrong moment in our new project.

Moreover, with newer or more recently popularised languages, there is
sometimes a tendency for the community to bury its head in the sand. Some
defenders might claim that we "just don't understand" if we identify a serious
shortcoming. Sometimes the individual or group that defines/specifies a
language will have a blind spot and make seemingly arbitrary decisions that we
don't agree with. In contrast, with longer-established languages, the
shortcomings tend to be well-known and acknowledged, and the emphasis in the
community is often on sharing the most effective workarounds or alternative
techniques.

Obviously these generalisations aren't necessarily universal. We find helpful
people in otherwise intransigent communities and awkward people in otherwise
helpful communities. Still, I have seen the pattern repeat over the years for
many different languages as they evolve from the Newer And Better Thing to a
mainstream tool and ultimately to an older tool that is superceded by the next
newer and better thing.

When I'm choosing the tools for a project, I usually favour the middle of that
spectrum over either extreme. Out-of-date and underpowered is bad, but tried-
and-tested is good. YMMV.

~~~
eneveu
Very good points.

 _In contrast, with longer-established languages, the shortcomings tend to be
well-known and acknowledged, and the emphasis in the community is often on
sharing the most effective workarounds or alternative techniques._

Exactly. A good example of this is dependency injection. In Java, it was hard
to mock dependencies, like you would do in a dynamic language. This forced the
Java community to look into dependency injection / interface programming, to
make the code testable. Dependency injection then lead to better
componentization / modularity (some could say that one _shouldn't_ have to use
dependency injection if one were using a "better" language, though ;) ).

I also like established languages, because there are also established best
practices. You don't have to reinvent the wheel.

 _Certainly different languages have different warts, and thus suit different
jobs better. However, just because we haven't used a language enough to
appreciate its warts, that does not mean we will not discover them to our cost
at exactly the wrong moment in our new project._

That's the reason why I'm leaning on using a JVM language. I know the platform
and the tools, and I can always "fall back" to Java if needed (for performance
critical code or whatever).

Maturity is important, but I don't want to miss out on the power and
expressiveness of higher level languages (
<http://www.paulgraham.com/avg.html> ). Using powerful languages is also
useful when hiring good hackers ( <http://www.paulgraham.com/pypar.html> ).

------
vyrotek
We've had our share of surprised faces when we told people our company is
based on .Net as well. There were a lot of reasons for us to use the Microsoft
stack. One of them was also _existing expertise_. My CoFounder and I
previously worked as C# developers for years before working on IActionable.com
full-time. And yes, Visual Studio is that awesome.

 _"AppHarbor - It's Heroku for .NET. You simply can't beat it."_

I agree with most things in the article except for this. Its definitely my
personal opinion, but I don't think AppHarbor is quite 'there' yet for a lot
of companies. At least it wasn't for our company's specific needs. The .Net
community is very unique and has very different expectations from other
service providers. We typically eat what Microsoft feeds us and trust it.
Microsoft is definitely putting a lot of weight behind Azure and it made sense
for us to use their platform. I saw the level of support behind Azure first
hand when our company was invited to Redmond to meet the dev teams as part of
an early adopter program.

~~~
tansey
> was invited to Redmond to meet the dev teams as part of an early adopter
> program.

I think that's the problem I see with Azure. AppHarbor needs no early adopter
program. It's great for the same reason that Heroku and Rails were great for
people: if you want to get an MVP up and running, it's almost instantaneous. I
want to focus on my core product first and delay thinking about seriously
scaling and the other major benefits of Azure over AppHarbor.

~~~
vyrotek
In their defense, Azure's target is not startups or 'hackers' with a toy app.
In fact, it makes no sense at all pricing-wise if you only run a single
webserver and database. Their pricing covers a large and growing set of
features.

Microsoft's programs exist because of the insane amount of features and
support that have to go into their products for their enterprise customers.
And its those features that really make us stick with Azure for now.
Specifically, I'm talking about TableStorage, Queues and AppFabric's
Distributed Cache Service. I've already had a small chat with the AppHarbor
guys before. I'd definitely love to move if it made sense.

Don't get me wrong though. I definitely have my gripes with Azure too.

~~~
bkaid
Azure can make sense pricing wise for startups that have been accepted into
their Bizspark program (which doesn't take much). Bizspark gives basically a
single web server and database free and you can easily scale from there if you
are willing to pay.

On the downside, deploying to Azure is a bit of a pain and its 15-20 minutes
per deployment gets old, especially early on when you are deploying more
often.

------
_debug_
I do not even see the need for justification : After LINQ and Rx and the
maturing of Mono, .NET is now far ahead of the Java ecosystem, even including
Scala 2.9, in terms of developer productivity. The only reason I am having to
learn Scala is that I am already quite familiar with the Java ecosystem
(having used it at work for many years before I started doing something on my
own) and do not wish to start from scratch in the .NET world.

~~~
plastics
I am also quite familiar with the Java (and Ruby and pre iPhone Objective-C)
ecosystem and invested quite a lot time in getting proficient with Scala since
2007 but recently got hooked on F#.

My experience has been, that the available documentation on .Net (and F#) is
so much better compared to the other stacks I know, that after three months or
so of dabbling in my free time with .Net I already feel like having a much
more solid base in .Net than the other platforms (where I have 4, 3 and 6
years experience).

Granted this might be due to me either suck at Java, Ruby and Objective-C or
me not yet having real world experience with .Net and being oblivious to ugly
corner cases, warts etc. you only come across on a big real world project.

But honestly my first contact with some of the books and online resources
available for the .Net ecosystem and comparing that with what I was accustomed
to was shocking.

------
afsina
I object the "VS" is the best IDE statement. For C#, maybe that is true. But I
used Intellij IDEA and VS. VS still looks like glorified notepad against IDEA.
I think most developers are living under their language bubble. Also, unlike
ruby-python, C# and Java are IDE languages. You cannot program without one.

~~~
martinp
So very true, IntelliJ IDEA is miles ahead of any other IDE I've ever used
(including VS). For Java development, I started out with NetBeans, then
switched to Eclipse and finally to IntelliJ.

Recentely JetBrains has also released IDEs for Ruby/Rails (RubyMine) and
Python/Django (PyCharm). It will be interesting to see if they gain any
momentum within their respective communties.

------
denysonique
ASP.net MVC is maybe quite similar to Rails (it actually is 'inspired by it'
i.e. a rip off). But the difference between .NET and Ruby is that Ruby has a
culture of hackers, and most of the innovative things re web dev are born in
Ruby e.g. Haml, Capistrano etc,and then get ported to other langs e.g. { :Haml
=> 'PHaml', :Rails => ['many PHP frameworks', 'ASP.net MVC'], :Capistrano =>
'Fabric' }

~~~
mgutz
As a long time .NET developer converted to Ruby and Node.js, you hit the nail
on the head. The innovators and creative types are on the open source side.

That is not to say I have not worked with talented .NET developers but for the
most part the culture of .NET developers is to find a corporate job and wallow
in an enterprise process. Don't do anything outside of Visual Studio and
heaven forbid use anything not built by MS.

The same can be said about Java which needs to be redefined in the dictionary
as THE language of over-engineering.

------
jasonkester
I think it's safe to say that .NET doesn't need defending. People who use it
tend to continue using it whenever they have a choice in the matter, and
quietly get good results from it every time.

It doesn't need defense because it's not being attacked. It's not being
attacked because it just plain works. Granted it's a bit boring, but really
that's one of its advantages.

------
sajidnizami
I don't think this should even be a discussion. If it covers costs well and
your solutions work, discussing this doesn't matter.

I started with using .Net for a startup four years ago. Back then there were
no Redis, NoSQL wasn't even a invented as a term, cloud servers were just a
concept and scaling wasn't anybody's primary concern. In four years the only
optimizations I ever did were done via SQL Server profiling or just by
modifying a bit of code. I pretty much learnt .Net during this time and the
sites I work for get pretty hammered at their peak times and handle well.

So yes from experience .Net is a good starting point. If you know the
internals you can probably write and architect code that scales well too
without falling back on NoSQL services. You won't need to go looking for
complicated PHP cache solutions etc, you won't need to get in the trouble of
selecting complicated frameworks. The whole setup gives you ease of mind.

No arguments against LAMP or other environments. Just that I always found .Net
to be easier to work with!

------
callumjones
I don't think many people actually dislike the .Net family but it's more the
parent company of .Net that causes a lot of dislike to filter down onto
ASP.Net and C#.

I have this weird twisted hatred with Microsoft. I think .Net is great but as
an iOS dev working inside a Microsoft based team I've founded solutions such
as TFS to be just terrible lock ins.

I'd probably love Microsoft more if just this once they would of assessed the
current source control versions, chosen a popular standard (Git) and then
deeply integrated it into VS. What they instead did was give you TFS with a
lack of client end Rest API documentation and wrote a terrible cross platform
command line tool. You didn't see Apple creating XSourceControl.

~~~
StrawberryFrog
_a Microsoft based team I've founded solutions such as TFS to be just terrible
lock ins._

The majority of .net development that I have seen is not done on TFS. I've
used many source control sustems for .Net code.

SVN is far more common. a ".Net dev shop" is far from being the same thing as
"a Microsoft only" shop. Typically you see software in use like NUnut, SVN,
jQuery, Castle Windsor, TeamCity, Resharper, etc. If you're lucky, you may
even get Git or Mercurual.

MS could not have standardised on Git even if they'd wanted to - TFS pre-dates
Git by a few years. The driver for MS making TFS was two-fold:

1) get people off MS's previous source control system, SourceSafe, which dates
back to about 1995. And it shows. SourceSafe is one of the few version control
systems that I do not hesitate to say "avoid! Run! Use anything else!" about.
TFS is actually a large improvement.

2) To try to prevent them from going to SVN instead, which was the new thing
then. Since SVN is lightweight and free, so TFS took the opposite route of
being heavyweight, kitchen-sink, ALM, etc.

------
latch
Same as most other posts defending one technology choice versus others. It's
what I know best...I like the tools...can't we all get along...

The only interesting point is also the vaguest...The AI that's already
available in .NET (and, by the way it's stated, apparently not in others).

I also have to counterpoint that ASP.NET MVC is "conceptually" the same as
Rails/Django. Conceptual similarities are pretty meaningless. My RC plane is
conceptually similar to a fighter jet because it relies on the same four
forces. Actual coding-wise, ASP.NET MVC is closer to WebForms than Rails.

~~~
tansey
> Actual coding-wise, ASP.NET MVC is closer to WebForms than Rails.

How so?

I've never worked with WebForms, but I have done a few Rails projects. I don't
see any real differences except for ActiveRecord, which does have a .NET port:
<http://www.castleproject.org/activerecord/>

Also, I wasn't trying to start a fight (really!). I just think that more .NET
hackers should be motivated to do startups. IMHO, I think this is the year
that .NET startups begin to take off. All the pieces are in place, it's just
about motivating the community.

~~~
bdclimber14
I have no problem with .net, but what od you mean about "all the pieces are in
place"?

~~~
tansey
I mean the barrier to entry has been lowered drastically. I used to do my
projects in Rails because I didn't want to go through the hell of renting and
setting up a server for ASP.NET. Also, MVC 3 has really flattened the learning
curve and the expert community is finally putting together seriously good OSS
and tutorials. Finally, MVC 3 development is also highly decoupled from a lot
of the uglier MS attempts at making a totally proprietary stack (MS AJAX ->
jQuery, Codeplex -> Github, Azure -> AppHarbor).

~~~
bdclimber14
It's certainly much better than a few years ago, and an order of magnitude
improved over webforms. In some respects, I think the OSS ecosystem has much
room to grow to catch up with Rails and Django. Although Rails and Django
could also learn some tricks from Microsoft.

------
latch
When did hacker become a synonym for programmer?

~~~
tansey
Fair enough. I changed the link to the "don't hire .NET programmers" article.

I stand by the rest of the references, though. All the guys I mention in my
last point are as much hackers as anyone I've ever met or worked with.

~~~
jschrf
Wow, that article is full of all sorts of stupid. Someone should tell the
author that .NET is not a language (not that it'll make a difference).

I find this part particularly hilarious:

"However, if you need to make a 1.7 oz burger, you simply can’t. There’s no
button for it. The patties are pre-formed in the wrong size. They start out
frozen so they can’t be smushed up and reformed, and the thawing machine is so
tightly integrated with the cooking machine that there’s no way to intercept
it between the two."

Pure silliness. Perfect example of an irrational language bias.

~~~
Hominem
I had a lot of problems with that article as well. But I'd still like the give
the author the benefit of the doubt. I assume he has very narrow experience
with some framework like webforms or ran into some developers who did. With a
lot of microsoft's frameworks it is easy to get stuck at a simple problem with
no obvious solution, and conclude that there is no possible way to do it
within that framework. Most of the time if you keep digging , you will find
that there usually is a simple, elegant way to solve your problem but many
people just give up, and decide that Microsoft just sucks.

~~~
notJim
I've had a lot of the problems of the sort that you describe (particularly
with ASP.Net MVC), and I've found that while there are always solutions, the
solutions are often very difficult to find. And even harder to find (at least
for my company) are people who have the experience to already know what those
solutions are.

------
synnik
The problem with the Microsoft stack is not technical -- it is financial. Why
pay M$ license fees when other platforms are free? Especially as you scale?

~~~
johns
Please grow up and stop using 'M$'. It's not cool or clever anymore (if it
ever was) and it undermines any good points you might be making.

~~~
synnik
Noted. Consider my point undermined.

------
fmavituna
"Can't we all just get along?"

Beauty of it, you don't need to get along with anyone. People will remember
your product not your technology stack.

------
thespace
Ex .net dev here, keep learning python brother, the promised land is close!

------
chopsueyar
Do you need help picking up all those names you dropped?

