117 comments

[ 2.7 ms ] story [ 231 ms ] thread
I recently discovered about Microsoft's BizSpark program and I must say, I'm really tempted to try and build up a side project just so I can apply to BizSpark and have tons of free resources to build my side project. I love .Net and I think Azure is really good, even if the article says it's too cumbersome for a small project. I think the fact that developers can forget all about server configuration and implementation and just start a VM in one click is nice.
AppHarbor makes hosting projects of any size much easier than Azure, check it out: https://appharbor.com/
This seems really good. I might give it a try in the future. Their "add-on" services look really cool to use also.
I used to develop .Net applications and I love that platform. MSDN is awesome and Visual Studio is hands down the best IDE. I know at least two startups that participated in BizSpark and they get lots of free goodies from MSFT.
I have used several versions of Visual Studio, and while it's not Eclipse/slow/broken, I never really saw why everyone loves the hell out of VS's IDE. Can you show me a page highlighting why it's so good? (Not trolling, really trying to understand the love).
Eclipse is awesome for the record. Especially given that it's free.

Most people use VS.NET with Resharper while Eclipse has a few Resharper features built-in and more.

Eclipse + Maven = great deal.

Eclipse might not have any up-front monetary costs, but it has costs in lost productivity while waiting on it (which would arguably cost you more than a closed source license when applied to the value of a developer's time).

It's gotten better, but it still has a ways to go.

My machine is beefed up so I'm sure someone else's cost using less powerful machine (Intel P3 or something...) is more than mine. Ditto with VS.NET 2010 or future version of Microsoft IDE when used in older machines.

Shall we count the cost of using plugins as well? Including OS boot time and such and such?

Sorry, what I mean to say is that I don't know what you're talking about of this "waiting on it".

There's also IntelliJ, an IDE from the guys that make Resharper. We moved from Eclipse to IntelliJ a few years ago and aren't looking back. It "just works", has (had?) more reliable and advanced refactoring, and the support for other languages (like JavaScript, Python and Ruby refactoring and debugging) is/was far ahead of Eclipse.
What people like about VS is just how integrated everything is. You can replicate most of the functionality but there is a lot to be said for 'just works' when your in the middle of crunch time.

One of the great things Visual Studio has is the ability to set breakpoints in JavaScript code just like you can for C# code. Not that you can't do that in Eclipse, but it works out of the box vary easily. It's tightly integrated with TFS which let's you check in code resolve bugs in a single step. That way if a similar bug crops up later you can find what the problem was last time and how it was fixed vary quickly. It's also got a vary nice debugger that let's you do things like change values at run time.

I find modern VS very clunky, to the point that I avoid using it whenever I can.

In my opinion, the VS6 (for C/C++, released 1998) was excellent, and it's all been going downhill from there.

Yep, after they switched to a .NET version of VS it really got bad. I used VS6 as long as I could - and then bought a Mac :)
FWIW, Seamless.com is .net
But it's a festering pile of maverick.net :(
I believe ZocDoc is as well.
Yes. As others have mentioned BizSpark is a fantastic resource. As a developer mostly using the .NET and MS ecosystem it’s enabled me to build using tools and technologies I am familiar with. I use Amazon EC2 to host the applications as Azure seems a bit more expensive. If you are experienced in the .NET space definitely look at Bizspark, even the exit fee isn’t much when you factor in all the tools you get to use for YEARS.
Visual Studio, especially when paired with Resharper is a tremendously productive dev environment. C# is a fantastic language and it's got a host of new features that make it possible to write in a more functional style, stuff like lambdas, expressions, type inference, dynamic types, anonymous types.

The main problem is that people don't think about any of that when they think about .Net. They think about that festering bog of evil and spaghetti code that is WebForms.

What are the odds that people actually:

1) use the advanced features and not tripping themselves

2) use it frequently

3) and got a lot of productivity boost out of those features

I would imagine most people will download 3rd-party libraries (open source or not) and tools to become productive. Not so much on the C# advanced features.

Actually, the new features introduced in C# increases developer productivity quite a bit. More importantly they increase the readability of code by cutting down on the repetitive stuff. Once some one uses LINQ, lambdas and dynamics its hard to go back.
Can you explain how they can cut down lots of repetitive stuff?

Not to knock you down but my experience with Java is that libraries typically help a lot as opposed to syntax.

Go look at any documentation or discussion of any non-Java language, and see their examples of using their sequence abstractions, or generators (yield), or first-class functions. Those are not ideas which are unique to C#.

If you just want to see a piece of code in C# that would have to be written totally differently in Java to be readable (unless you use some quite abstract third-party libraries like Guava to help) I picked one of my Stack Overflow answers at random: http://stackoverflow.com/questions/2966592/how-to-refactor-t...

That example is definitely looks great.

... and yes, as a Java developer, I use Guava once in a while and I do JavaScript as part of my job as well and I do appreciate first-class function.

Typically the problems that functional features solve are filtering and transformation and yet most often than not I happen to solve them at the SQL layer (be it JPQL or straight up SQL).

Once you start thinking of your object model as data, you can do amazing things. Want to find all the types in your system that implement an interface and spin them up?

     var rules = 
		AppDomain.CurrentDomain.GetAssemblies
		.SelectMany(a => a.GetTypes())
   		.Where(t => typeof(ISecurityRule).IsAssignableFrom(t))
   		.Select(t => Activator.CreateInstance() as ISecurityRule)
   		.OrderBy(r => r.Priority);
You can then run a chain of responsibility by writing

    var allowed = rules.First(r => r.Check(someObject) != null);  
    //Check returns null when a rule isn't relevant to the object being checked
it's pretty sweet for metaprogramming when you can run queries against your codebase
That is definitely sweet.

Java has AOP and extensively use Annotations (Attributes in .NET) and the approach there is definitely heavier than what you wrote above.

LINQ + lambdas are great at this. Simple example: say you have a list of Car objects, and you want to get a new list comprising only the cars whose engines have greater than 300 horsepower, sort them in order of increasing price/horsepower ratio, and then take the top 20. In most languages, this requires a bunch of loops. In C#, it looks like this:

  cars.Where(x => x.Horsepower > 300).OrderBy(x => x.Price / x.Horsepower).Take(20);
This results in a lazy-evaluated evaluated expression that works exactly the same whether cars is an in-memory list, a SQL table, a RavenDB collection, or anything else that implements the right interface (IEnumerable). It's not only concise, but also self-documenting. The syntax implies the semantics.
I work in a Microsoft shop in a 6 person team of C# programmers. We follow the language closely, try to compete with each other keeping up with new language features (among other things!), and take whatever benefits we can from new stuff. When generics appeared in 2.0 it transformed our coding style. When LINQ (the language feature, not the LINQ to SQL ORM) was added it was transformed again. There hasn't been a major paradigm shift since but we've found handy places to use optional parameters, type covariance and contravariance, tried to handle the new dynamic keyword like dynamite, and we've definitely got plans for the new async features coming out in C# 4. I can tell you from attending technical conferences that we are not an atypical bunch.

So to answer your question, the odds are very good! :)

Of course you can. People spend far, far too much time worrying about what programming language they should use for their project. You should not spend your time learning Ruby/node.js/Scala, you should launch your MVP with what you know.

If you have to, you can change later- though from experience, there's little need to with .NET. I work for RecordSetter (http://www.recordsetter.com) and we use ASP.NET MVC- back in the early days of the company, the CTO knew .NET very well, so he just used his existing knowledge. C# is a great language, Visual Studio is a great IDE, MVC is a great framework. And so on and so on. We aren't really suffering any ill effects as a result of our choice, and as others have noted, BizSpark membership is actually a great bonus.

If anyone out there wants to play around with C# for the web but feels like the ASP.NET stack is too heavy (it can be), take a look at Nancy.FX (http://www.nancyfx.org/). It's super lightweight and allows you to keep most of .NET out of your way.

So is recordsetter still on ASP.Net MVC?

Regarding the language doesn't matter thing I think that's mostly true. If you're choosing between Ruby and ASP.Net MVC I don't think you can loose. But sometimes the framework does matter, like if you want to build a startup on webforms (don't).

Yep, we're still on MVC.

I think you're right about WebForms in the sense that I can't think of a single good reason to go with it over MVC. I maintain that it was never really intended for the web we use these days anyway.

I agree. I used to do classic ASP, which at the time was a great web dev platform. I really think Microsofts priority with Webforms was to convert all those VB6 programmers over to the new framework, not build a better web framework. I've hated webforms from day 1. I'll dance on it's grave.
> I maintain that it was never really intended > for the web we use these days anyway.

It was designed to make web development "simple" for the kind of people who built WinForms applications and were too lazy to learn how the web actually works.

Thankfully Microsoft have learnt from their errors so are now pushing these types towards making a mess of Javascript. Visual Basic types will be happy to learn that semicolons are optional.

I really love NancyFx. It's such a well thought out framework. If there is some feature missing, all you have to do is hook at the proper place. It really simplified building our startup (http://designduke.com). Best part is that using a REST framework encourages you to move out most of the logic and functionality to client and it scales pretty well.
Have you considered running on AppHarbor instead of raw EC2? Nancy works great on our platform.
Do you have any link that compares performance of workers to EC2 instance types (for a raw idea of how much power an existing app needs) ? Also, how does deployment to IIS server and running multiple custom executables for various other tasks workout on your platform.. I mean can a worker run multiple applications ?
We are a BizSpark startup using a combination of free tools and open source technology. Haven't spent a dime yet.
BTW, Azure is a nice scaling solution but it slows initial development way down, it's a pain to debug, and it locks you into a single hosting provider. Not a good solution for me and I think it's crazy that Microsoft keeps pushing it as a platform for early stage startups.
Would you be able to elaborate on how it slows initial development way down (and is a pain to debug!)?

I've only played with it a little but the deployment story seemed quite nice.

Have you considered AppHarbor as a faster-turnaround alternative to Azure? https://appharbor.com/
Just some friendly advice, the excessive self promotion is doing you more harm than good
Yeah I'd been looking at AppHarbor vs Amazon/RackSpace/Ninefold. I think this excessive value-less self promotion just ruled out one for me.
Microsoft does the right thing here to give licenses away to startups. However, I would try to stick to their mainstream products which are likely to survive a few years ahead and avoid the "to-new-unproven" ones, mainly to make sure the product is still developed and maintained 3+ years down the line.

I'd go for open source any day, but that brings other challenges instead. :)

Plenty of Fish runs on .NET. Marcus says it's more scalable than most of it's Open Source counterparts...
Plenty of Fish also store(d?) passwords in plaintext[1]. I wouldn’t particularly trust their technical decisions.

http://grumomedia.com/why-plenty-of-fish-stores-passwords-in...

didn't everyone store passwords in plaintext at some point of their career? your argument is pretty weak and didn't invalidate their claims that .NET is just as good as open source Linux stack when it comes to scalability.
>> didn't everyone store passwords in plaintext at some point of their career?

Never have, never will.

There are surprisingly few arguments about semicolons in the .Net community.
You've never seen a VB.NET vs. C# argument? Call yourself lucky.
last one I've seen was at least 5 years ago and even then it wasn't a big deal
(comment deleted)
a lot of that is because msft says it's a certain way and we all have to deal w/ it. not necessarily better.
You can absolutely build a startup in any language that has a capable framework for the web.

As mentioned in the article, StackOverflow is one prominent .net startup that comes to mind.

Generally, customers don't care what you code in. It might matter if your customers are developers, but even then, there's API's.

How well you code in your tool of choice may be relevant when you hit a million whatevers you want measure, but by then you'll probably be scaling anything you built.

The most important thing is to have great momentum and see it through to a real result. You'll always do that best with the tools you're most familiar with, with the caveats listed above.

Use decent habits to be friendly to your future self to keep the codebase reasonably something you want to keep working on. Don't strive for perfection, it never happens the first time.

Sometimes as developers becoming entrepreneurs we get a little too focused on making our tooling so great that the attention doesn't always end up on the user experience and getting rid of their pain-points. Instead we can fall prey to solving our own pain points and staying in analysis paralysis.

Listen to the middle days of the first StackOverflow podcast and you'll hear that for a long time they ran StackOverflow on a single server. They were serving a million uniques with the web app and database running on a single box! It wasn’t even a very big box.

As a former .NET guy, I think the hosting part of deploying .NET wasn't well addressed by this post.

Jeff Atwood built and colocated a dedicated 2 or 3U server to run Stack Overflow. I certainly wouldn't call that an easy or recommended thing to do for a startup, especially if none of the founders have enough hardware and system administration experience.

Compare this to signing up for EC2, Linode, or Rackspace and spinning up a Linux instance to run Rails, Django, or Node. Even easier to just spin something up for free on Heroku. These are mature, solid solutions being used by many startups today.

There are a few providers like AppHarbor that are trying to make .NET hosting a bit more startup friendly, but there weren't any mention of those in this post.

I'm not primarily a .NET guy (I have done a fair bit though), but why wouldn't it be possible or reasonable to spin up a VPS instance of Windows if it's a platform you're totally familiar with (much like someone being familiar with a linux instance?)

Firing up a linux instance does require more sysadmin skills from the command line (this can be non programmer skills to some), compared to a gui based OS.

Disclaimer: I use linux myself but have spent enough years in the professional world to know that there are things that windows can do equally well, just don't ask it to do everything. A basic startup stack of IIS (included), mysql, and a framework (download asp.net MVC) doesn't take much setup.

It's definitely possible to spin up a Windows instance on EC2 and get it running. Many startups built on .NET do that today.

As for the sysadmin on the software side, I agree most .NET devs that want to build something probably have those skills. It's the hardware aspect that I think needed to be addressed.

The OP espoused the easy scalability of .NET using the Stackoverflow example without mentioning that they colocated with dedicated hardware.

good point. StackOverflow used physical boxes not virtual servers and that certainly makes scaling a database easier. On the other hand I currently host HireFlo on a single Rackspace cloudserver. I have 3 web apps, a SQL server instance, and 2 processors hosted on the same VS and it's working well so far. I'll definitely move SQL Server off to it's own box at some point though.
Yes, you can spin an instance up and configure everything with Power Shell (if you have a lot of instances).

SQL Server's a little harder to setup but it scales really well vertically (unsurprising given its Enterprise origins). As with most databases it really needs to be installed on physical hardware for the best performance.

Running .NET is even simpler if you just use AppHarbor, no need to configure, update and maintain servers at all.
Jesus man, have some dignity. You're whoring that name around here like nobodies business.

Edit: Double-Jesus on a stick! I counted ~6 of YOUR references in this one thread. Pretty unimpressive.

You never had to get and configure/maintain dedicated servers to do .NET. The only two reasons that dictate dedicated or VPS hosting on .NET are the same as not .NET - you need more hardware or more privilege.

Deployment's always had a variety of simple-to-complex options just like everything else.

Spinning up a Linux instance does not require system administration experience?
But its equally simple to spin a windows server and even more simpler to setup (thanks to RDP). Amazon even offers a free microsoft micro instance (I even got a $50 windows credit for april month) :)
It's just as simple to spin up an EC2 Windows instance as it is for a Linux one. Just costs you a bit more, and as a .NET developer, the only thing that still bugs me about .NET are the licensing fees for Windows - but if my business isn't making enough to pay for that then I have bigger problems.

As for deployment, if your .NET app doesn't have highly specialised dependencies you're likely to get away with a simple file copy deployment. Even if you do need to install some frameworks/packages, offerings from e.g. ScaleXtreme (who allow you to manage both Windows and Linux servers from a single dashboard, private or in the cloud), make managing instances (via templates, scripts and integrated monitoring and patching) extremely simple.

This is great because I prefer writing my code in C# and running it under Windows but prefer Linux for the heavy-lifting (PostgreSQL, memcached, nginx for static content, etc.). I do accept that not everybody knows how to use both platforms or would like to learn, however that is a matter of preference not practicality. I'd say the two platforms are on par with practicality.

Have you considered running your apps on AppHarbor? That way, you wouldn't have to worry about servers at all. We also have many of the services you use as add-ons: https://appharbor.com/addons
I did and in principle it's a great idea but I can't wrap my head around the pricing - as a solo founder earning South African Rands with the requisite technical expertise to manage these things myself, I can't bring myself to pay more than I know I strictly need to until my business is profitable.
My impression is that the SO crew knew about running machines in front of them more than they knew about running cloudy things that depend on people they didn't hire. They like to reduce leaky abstractions, not add to them. So getting the biggest badass server and slapping SQL Server on it is exactly what I'd have expected them to do.
speaking technology wise, of course you can use .NET to build a startup product. C# is a very mature and nice language, Visual Studio is the best IDE out there, beating Eclipse, XCode and TextMate hands down.

Another issue is in what fields that these languages are used, what type of developer works there, and what kind of developer you need to hire next month to scale your products. Java is for banks, very big projects with integration with lots of legacy systems. .NET is more used inside of companies, integrating with Sharepoint, MS SQL server. Ruby on Rails is for hip independent developers that teach themselves and go for productivity. PHP is for easy web development.

All these fields have different kind of developers that work in it. Figure out what kind of company you are, and choose technology accordingly.

> Visual Studio is the best IDE out there, beating Eclipse, XCode and TextMate hands down

Well, that's a pretty bold statement. From my experience VS will beat the rest for .NET stuff - but C/C++ support is best with XCode.

I was at the Node meetup in San Fran and after hearing about the BizSpark opportunity, I am seriously contemplating building out a startup on Microsoft's platform.
agree with webform is death statement. MS should remove it from asp.net. it is drag and drop programming for another age and another generation of developers.
As Rails and Django become more complex, it's making more and more sense to give .NET and Java stacks a second look.
Just some quick numbers - in 1 week flat I've been able to create a working prototype for our start-up with the stack mentioned, coding in my spare time (after work and on the weekend). If you know your stuff you can get up and running in no time :) Our start-up (collectifly.com) is built exclusively on the .NET stack, with ASP.NET MVC as frontend and using a bunch of open source libraries like Twitter Bootstrap, jQuery, KnockoutJS and a few more. For the backend I'm currently experimenting with RavenDB not because I don't like SQL Server but because we're building a social graph, so a NOSQL database seems to fit better.
(comment deleted)
Just some quick numbers - in 1 week flat I've been able to create a working prototype for our start-up with the stack mentioned, coding in my spare time (after work and on the weekend). If you know your stuff you can get up and running in no time :) Our start-up (collectifly.com) is built exclusively on the .NET stack, with ASP.NET MVC as frontend and using a bunch of open source libraries like Twitter Bootstrap, jQuery, KnockoutJS and a few more. For the backend I'm currently experimenting with RavenDB not because I don't like SQL Server but because we're building a social graph, so a NOSQL database seems to fit better.
I'm pretty sure you can build a startup around almost any mature, real-world tech stack... so, basically, exclude "esoteric" programming languages like Brainfuck, Intercal, Whitespace, etc. Otherwise, I think you could - if you chose to - build a startup around RPG/400 on an IBM iSeries, Fortran, COBOL on MVS on an IBM zSeries, Ada, .Net, Prolog, Pascal, Perl or whatever floats your boat. It's a question of the tradeoffs and the economics of each decision. Can you hire programmers? What are the licensing costs? What about the "ilities," like scalability, interoperability, reliability, etc?

Maybe for some startups the right decision is .Net, or RPG, or Forth or Rexx or what-have-you. But I'm guessing for most startups, there are better choices. I'm also not sure that - even on a per startup basis - there is one ultimately right choice. More likely there are a handful of really good choices, a pile of so-so choices, and a long-tail of fairly ridiculous choices.

If you ask this question then the answer is no, however, you probably can't build a startup in any language as you're too worried about what everyone else is doing rather than what your customers want.

Seriously think about a young mark zuckerberg making facemash and worrying whether it could be a $100 billion dollar company if he wrote it in PHP.

If anyone worries about these things just change your server headers so it looks like you're developing in whatever language they want.

Its usually a good idea to change the headers anyway so that any automated attacks run the wrong scripts. Change your postfix to Exchange, change your nginx to IIS and vice versa.

(comment deleted)
"Bizspark is proof that Microsoft loves programmers and startups"

No, it isn't. Not anymore than MS giving away free licenses for Office, VS and Windows to college students is proof that they love college kids. Not anymore than giving poor schools in Africa free licenses for Office and Windows means they love African schoolchildren. And not anymore than the junky giving free dope samples to kids means that he loves kids.

It's just business.

Yes, it's just business. I agree that you shouldn't ascribe the emotion of "love" to Microsoft, or any large corporation. But in the same vein, I don't think it's fair to equate them with a "junky giving free dope samples to kids".
It may or not be as morally wrong, depending on your view of Microsoft and/or drug dealers. But the motivations are exactly the same.

This isn't just restaurants in the food court giving free samples to draw in more customers. They are deliberately building a dependence on their products and will reap the rewards later.