The real answer is just as much about our industry’s culture as it is about technology.
No, it's entirely about our industry's culture. Which is a shame. It's a fantastic framework that should and could supplant the JVM. It never will though, thanks to Microsoft's boneheaded choices and the blog posts like 'Why I don't hire .Net developers'.
Mono lets you run some .NET code on Linux/Mac OS X. Some of my favourite pieces of Microsoft technology are missing or too broken to use - for example WPF is an excellent tool for building desktop applications but it doesn't work on Mono, F# sort of works until you try doing recursion with abstract data types.
IMHO it's kind of silly to expect things like WPF to run on multiple platforms - and I'm actually glad it does not.
The world doesn't need more apps with lowest-common-denominator UI. Ugly, kludgy, doesn't work well on any of its platforms because it cannot leverage any platform-specific UI strengths. If anything, the last decade of desktop and mobile computing has shown beyond a doubt that a highly refined user experience is paramount for anything that faces general users. In fact, an app with fewer features, but a superb user experience, will trounce a more capable app with terrible UI (see: Apple).
This is also why I dislike apps that use the UI components from Java - they don't look, feel, or work like native UI widgets. Their layout is often confusing, since they are trying to appease the learned design patterns of multiple disparate OSes with a single design. They end up being awkward, frustrating, and a very poor experience. I have never met a Java-UI app that even reached an acceptable level of usability.
For me, having Mono run well with the obvious cross-platform bits (threading? file system access? etc etc) is enough. I for one really like C#, and would much rather write it than Java.
Eh, I'm going to disagree with you there. Qt on OS X still produces dramatically non-standard looking UIs.
I don't think papering over the significant differences in UI paradigms between Windows and OS X is something that is fundamentally solvable by a widget toolkit. You can make a toolbar full of buttons work on both platforms, but you can't solve the fact that cramming 40 buttons onto a toolbar feels completely non-native under OS X.
> It's a fantastic framework that should and could supplant the JVM.
What makes you feel that .NET is so superior to the JVM? The JVM itself seems like a solid, performant VM platform, and there is a broad selection of languages in Scala, Groovy, Clojure, JRuby, Jython and friends.
Disclaimer: I'm platform agnostic and don't currently develop on the JVM or the .NET CLR, so I have no horse in this race. I'm genuinely curious.
Visual Studio .Net (huge), C# vs Java (C# has WAY more features), SQL Server integration (if you are using it), IIS is pretty much painless to configure and works really well with .Net, LINQ which is a pretty good ORM.
Funny, I'm currently in a mode of development where I switch daily between Eclipse/Java and Visual Studio / C#, and as far as I'm concerned Eclipse is the best thing Java has going for it. The refactoring and code navigation are miles ahead of what seems to come with Visual Studio. I find myself renaming methods and classes almost indulgently - just to see if I feel better about the name a different way. Having errors instantly highlighted across the whole build tree every time I save is awesome as well. Visual Studio seems quite primitive by comparison in a lot of respects.
My frustrations with Java are much more about the language and how it hasn't really progressed at all in 5 years.
NB: I am using Visual Studio 2008, perhaps 2010 advanced a lot.
It hasn't changed much. some syntactic sugar and influence from functional languages has helped C# but the IDE is not as good as eclipse IMO. You can however add a lot of the refactorings and features from eclipse by using jetbrains ReSharper. (I believe they also make a Java IDE too).
1. JVM cannot do unsafe code. In the CLR, you can create unverifiable IL and do pointer manipulation, etc. Raw memory can be free accessed however you like. That's a handy interop and performance feature.
2. JVM doesn't support structs. Again, performance difference. (Although, sometimes the CLR's JIT hasn't emitted the best code for structs.)
3. The CLR has generics. In Java, generics are implemented via erasure. This has an impact on performance and reflection.
In addition, the JVM is just that--a VM. The platforms that run .NET with a JIT compile the IL down to optimized native code. This is similary to the way many Lisps work. Although the JVM is highly optimized and runs faster than Mono in many tests, it will always have an inherent performance disadvantage.
Ah, things have obviously moved on since I left the Java world years ago. In any event, the VM is still specified at the bytecode level. The JITs are optimizations that are outside of the standard. The .NET ECMA standard specifies an IL that is designed to be JITed to native code.
To the parent question, the performance is very close on the two platforms. The point I was trying to make is that the .NET platform does have some things in it's favor at the IL/VM level.
The problem is Microsoft. .Net would be a perfect thing if it wasn't fully owned my MS, in which case it probably won't be far as perfect.
However, you have to use MS OS, MS development tools, MS deployment - and it's pretty painful especially because you can't use shiny macbooks any longer :)
If you try to replace any element of that chain, you're on your own entirely.
On other hand, MS ecosystem is smaller than non-MS. For example, what does it have for non-relational storages?
Stack Overflow started from pure-MS infrastructure and it's 50/50% already - redis, linux frontend proxies.
However, you have to use MS OS, MS development tools, MS deployment
You can use Mono tools if you'd like. For deployment, AppHarbor is just awesome.
...you can't use shiny macbooks any longer
I'm on a brand new Macbook Pro right now and I just pushed to AppHarbor. Bootcamp is great.
For example, what does it have for non-relational storages?
MongoDB works great with .NET. I'm actually about to switch my .NET-based startup[1] over to it from SQL Server.
Stack Overflow started from pure-MS infrastructure and it's 50/50% already - redis, linux frontend proxies.
Everything breaks at scale. This is the same kind of argument people used against Ruby on Rails regarding Twitter. No matter what technology you use, if you reach the massive scale that StackExchange has, you'll delve into optimization voodoo as well. It's one of those good problems.
I believe that if you would have a problem with some third-party library and mono, you have good chances to be replied with "just drop mono and use real .net"
I would glad to be wrong. But with Mono, you would always have slower, less reliable and less supported platform. Would not you?
It might be no big deal for some developers, but the difference between java and c# might be no big deal, too, for some developers.
At least when I have my Eclipse on kubuntu with clojure code inside, I know that
1) Eclipse on linux is a supported, solid configuration.
2) clojure is experimental, and it's experimental for everybody, not just me.
On other hand, mono is wonderful if you like tinkering (dotgnu probably is even funnier), but if you like tinkering you might as well take factor, common lisp or dozens of other fun platforms.
Eh, I was just pointing it out. Sometimes you need windows even if you prefer non-windows tech (I personally prefer the Mac ecosystem). For instance, my local iOS dev group has be atwitter about installing windows to do windows 7 phone development.
But the culture is a direct result of the Microsoft brand.
Many of us have been at this long enough to at least dimly remember Microsoft's antics in the 90s. Others of us are still dealing with other aspects of the Microsoft technology stack, and hating it.
For instance, I've spent most of a full work-week with a client recently because their SBS 2008 AD server went haywire. We've been troubleshooting ridiculous network issues ever since. We've had to deal with cryptic error messages, software that takes forever to do simple things, software that doesn't do what it tells you it's doing.
And the thing is, this feels normal for anything that comes with the Microsoft brand.
I'm sure there are exceptions. .NET may well be one of them -- I'm totally unfamiliar with it. But, if I'm building a startup, and I already know PHP (or Ruby, or Python...), and I've got all of these bad experiences behind me with Microsoft products, why would I even consider learning .NET?
What would you think if I told you I had issues with Linux, drivers crashing, kernel panics, programs not integrating nicely, and for these reasons I choose not to use Ruby?
For one, I don't mind if you don't use Ruby -- I'm not out to evangelize, I'm just responding to one person's response to a simple question: why don't more startups use .NET? I barely care at all what language I use; I have absolutely no interest in what somebody else uses.
But, if I asked you why you don't use Ruby, and you said, "because I have to use Linux and I have all these issues with it", and Linux was developed and supported by the same people that developed and supported Ruby, I'd say, "Fair enough."
I was just pointing out that there's a certain guilt-by-association. I mean, this happens all the time in business. When someone talks about a brand, that brand can bring up certain positive or negative connotations in your mind. If someone were to ask me, "Why aren't you spending any time looking into buying a new GM car", I would say, "Well, for one, because my Honda works just fine, and besides, GM makes crap." Now, GM probably makes at least one really great car -- it's just that I can't be bothered to spend much effort trying to figure out which car that might be.
Branding is really something that all business owners should think about often. When people hear your name or see your brand, what do they associate with it? If you go out of your way to lie, cheat, steal, or screw over your customers now, and you put your brand behind that, what is that going to mean for your business tomorrow? Is anybody going to care if you do an about-face and produce a really great product once they get sick of your brand?
I think Microsoft's brand is irreparably tarnished among the exact crowd that's most likely to launch tech startups, and since most of that crowd already has a language and set of tools that they like, there's literally a negative incentive for most of them when it comes to considering building on the Microsoft platform.
It's not about engaging and surpassing the capabilities of the JVM. The CLR has some very cool features. It's not quite as portable, but it's pretty neat.
It's currently lacking the community and corpus that Java, Ruby, Python, and almost everything else have. It surely has an active community, but it's just not as substantial. There's a Java library to do almost any esoteric equation, handle any ambiguous file formats, integrate with some bastardized SSO scheme...
I've worked at a lot a Microsoft shops. I'd bring in .Net any day to one of them. It's fantastic if you're already in the club. I've never started anything new, though. The article states that different platforms have equal tooling (I don't agree; VS is pretty slick and hard to beat, if you're into that kinda thing), so then cost certainly plays, and Microsoft's not making it compelling on the front.
As much as we like to think of ourselves as cold and calculated, able to cut through emotions when making decisions, more often than not we're just like everybody else.
Another answer is it's because most startups are consumer web-focused and MS traditionally hasn't been.
ASP.NET was traditionally an enterprise framework. Which got long in the tooth. ASP.NET MVC is quite good, but probably just caught up with the leading FOSS with MVC 3. Give it a year. And in general people aren't doing startups for desktops anymore, although they're still huge in the enterprise, which is why .NET is bigger in the enterprise than for startups.
The other big space for startups is mobile, but MS isn't big here at the moment. Why are startups using Cocoa now? Well because iOS is huge. If WP7 becomes huge, guess what happens? C# becomes a hot language for startups.
The author of the referenced blog (not the Piehead one) clearly doesn't understand that domains tend to dominate language. And further doesn't seem to understand that you try to pick the best tool for the job. A manager begrudging you for selecting the best tool for the job is not someone you'd want to work for.
Agreed. Distribution is the primary concern of most software vendors (big or small), so mobile developers are going to target Android, iPhone, and in some cases BlackBerry. Microsoft's mobile market share today resembles Apple's desktop market share back in the 1990s.
There is a strong perception (whether accurate or not--and I honestly don't know the answer) that it's the same old story with Microsoft: if you go the .NET route, you've gotta buy into the entire Microsoft ecosystem. It's not just .NET that you're choosing; you're also choosing Windows servers, IIS, Visual Studio, etc.
If that perception is accurate, it's entirely reasonable to say, "Despite liking a lot of what .NET has to offer, we don't want to buy into one specific company's ecosystem that deeply."
If that perception is inaccurate, then there should be some serious marketing around changing that perception (and not just from MS--but more like this type of grass-roots post).
I'm working on a startup with .NET, and while I do use some parts of the MS Ecosystem (Visual Studio, C#, ASP.NET MVC, SQL Server, IIS) I use plenty of tools that aren't from Microsoft (NUnit, JQuery, Github, ReSharper, TeamCity, DotTrace, DotCover, Selenium).
Any good technologist mixes and matches the things that work best for their solution, right?
Yes, there's definitely a split. Core infrastructure like the CLR, OS, and IDE greatly benefit coming from MS (although none are requirements, as Mono demonstrates). But anyone who does serious .NET dev work knows that tons of third-party tools are used.
One big difference I notice in .NET shops is that they seem a lot more willing to pay for the best solution. Whereas for FOSS shops they seem more likely to get an adequate solution for free.
FOSS is adequate and .NET is the best solution, huh?
Sigh. No. But .NET shops seem more willing to pay for a solution if it is the best one for their task. But if a free solution is the best, then everyone is happy.
They're both implementations of the MVC pattern, but short of that there seem to be very few similarities between them. Admittedly, I've only built one project in RoR, but the framework itself required much less configuration and Ruby is a huge departure from the Java/C# coding style.
The MVC design pattern has been in use since 1979; it's nothing new. It's also worth noting that Java devs and Microsoft devs were building MVP (a modified version of MVC) based apps in the 90's.
I'm not trying to dis RoR, because it seems like a pretty solid framework and nobody can deny that the 37signals guys were the motivating force behind the current wave of MVC development. However, what they created was a better web implementation of an existing pattern and I honestly think Django and CakePHP are much more obvious imitations.
Finally, it's worth noting that the ASP.NET MVC framework is open source and has similar license to RoR.
ASP.NET MVC is a far closer imitation of Ruby on Rails than either CakePHP or even Groovy on Grails. Django isn't even an imitation, by any stretch of the imagination.
The similarities between ASP.NET MVC and Rails aren't just that they both use MVC, that's shallow. ASP.NET MVC is blushingly similar, nothing else comes even close, not even those who claim to try to imitate Rails.
I'm not saying ASP.NET MVC is bad, in fact it seems pretty good. But anyone using and liking it really ought to have a look at the original, from where Microsoft lifted it wholesale. Those guys must be doing something right.
although none are requirements,
as Mono demonstrates
Not to bash on Mono, as Miguel and the Mono team did a fantastic job, but Mono has been more focused on client apps (like for embedding in games).
Another reason for why hosting ASP.NET projects on Linux is awful is because ASP.NET was built for Windows. Things like async operations are built for the Windows kernel, having architecture decisions that have a negative impact on Linux. Last time I tried it, it also leaked memory, heavily.
Nobody sane uses it, unless they made a bad decision to build on ASP.NET at the beginning and it is cheaper to just try using Mono.
tons of third-party tools are used
But only tools that are replaceable, used mostly in development mode.
How many .NET shops are using MySQL or PostgreSQL? How many of them are using NGinx or Varnish? How many are using CouchDB or MongoDB?
.NET shops ... seem a lot more willing
to pay for the best solution
This is wrong on so many levels I can't even begin to comment on it.
First of all, .NET shops are digging themselves in a hole by using .NET in the first place.
Of course the best solution is SQL Server, because stuff like LINQ doesn't work reliably for PostgreSQL and because the performance of the PostgreSQL client is awful and because the reliable way of designing a database is through Visual Studio, which again, doesn't work so well for PostgreSQL. You would be mad to choose PostgreSQL if working with .NET
That's the whole point - Microsoft doesn't care to have interoperability with third-parties. Microsoft wants you to buy Window Server licenses that are limited in the number of CPUs you can use and it wants you to use nothing less than SQL Server, even though for the same money you can buy multiple kick-ass servers and use PostgreSQL for free.
This isn't about cheapness, it's about the value provided (i.e. being frugal). Running a business should be done frugally, since you're only in business as long as the money supply doesn't run out. Paying more money than you should is irresponsible.
But only tools that are replaceable, used mostly in development mode.
I'm not sure what "tools that are replaceable" means (because to me everything is replaceable), but the comment about mostly in dev mode is just not correct.
There are tons of uses of Oracle. In that 25%, it's probably 75%. Tons of MS shops use Flash. Tons of MS shops use EC2. Tons of MS shops use SQLLite. Tons of shops use nHibernate. Tons of MS shops use components from Telerik, Infragistics, Actipro, Component Source, ESRI.
Those are all things deployed with the application and not made by MS. Again, the characterization you made is just false.
Microsoft has been collaborating with Oracle for the integration provided. It's the only third-party database with that privilege.
Tons of MS shops use Flash
What's more interesting to me is that tons of MS shops are using Silverlight, even though it isn't the best solution by any stretch of imagination, having the extra handicap that its reach is at most half than the reach of Flash, even inside an intranet environment.
Those are all things deployed with the
application and not made by MS
When you have to choose between software STACKS, you don't decide on the availability of a Hibernate clone, or on the availability of payed ASP.NET components that you wouldn't need if you weren't using ASP.NET in the first place.
You decide based on the 5 biggies - OS, database server, web server, application server, caching layer.
And nothing replaces SQL Server, Windows Server and IIS. And if .NET shops have been using Memcached, that's because no alternative was available from MS.
Microsoft has been collaborating with Oracle for the integration provided. It's the only third-party database with that privilege.
Doesn't explain the use of MySql, DB2, Teradata, etc... I don't know who MS works with, but I do know that there are shops that use a wide range of database solutions.
What's more interesting to me is that tons of MS shops are using Silverlight, even though it isn't the best solution by any stretch of imagination, having the extra handicap that its reach is at most half than the reach of Flash, even inside an intranet environment.
Kind of like HTML5 features right? :-)
You decide based on the 5 biggies - OS, database server, web server, application server, caching layer.
And nothing replaces SQL Server, Windows Server and IIS. And if .NET shops have been using Memcached, that's because no alternative was available from MS.
You make it sound like there are a million OSes the FOSS community chooses from. It's Linux. Done. Some random bloke uses BSD, but really it's Linux.
And half the time ppl in FOSS talk about databases its key/value dbs, and there are tons on Windows too. Plus they're often written from scratch. Apache works if you use ASP.NET MVC. Memcached, as you note, also works.
My point, virtually everything you mentioned can swapped out. And even the OS can be, with Mono. With that said the MS implementations tend to work well together. But I conceeded that in the very first line of my original post.
<i>Another reason for why hosting ASP.NET projects on Linux is awful is because ASP.NET was built for Windows.</i>
For some reason I'm reminded of Chilisoft ASP. I know it's not the same, but there was quite a market for catering to people who wanted to run ASP on non-Windows servers all those years ago. I guess it never went away.
That's not really saying much. You just mentioned a Microsoft stack with a few client-side or third-party libraries. How easy is it to, say, use Eclipse with C#, nginx and postgres?
The pieces you mentioned are either all on the Microsoft stack or irrelevant to it. jQuery and github, for example, have nothing to do with your backend's stack.
You do realize that C# in VS is just a compiler? It's csc.exe. There's no reason you can't host it in Eclipse. In fact there are several 3rd party components that allow you to host a C# editor anywhere you like.
The problem, in this case at least, is that the C# experience is so solid that the motivation to create an Eclipse one is pretty low. Maybe the Mono folks have something for it. But the amount of work that MS has done for the C# experience is truly impressive. I can, and have, written C# programs in vim, but it's not something I'd like to do on a regular basis.
I do realise this, I just added eclipse as an afterthought, as it's arguably as irrelevant as jQuery. The main focus was on the webserver/database, I just didn't expect someone to single the IDE out.
Database isn't relevant, there are .Net drivers for pretty much every popular database. Loads of .Net devs use MySql and Postgres, and using document databases like MongoDB is also an option now
Webserver might be true. But database is not. SQL Server probably has 75% share from what I've seen. But 25% is a pretty large market, and you see everything under the sun there. You'll see Oracle, DB2, MySql, Teradata, and other stuff that I'd never heard of.
I used MonoDevelop to write a WebForms-based ASP.NET 2.0 site last year. It was relatively pleasant, had most of the niceties one would have expected out of Visual Studio. I usually development on a Linux stack, so maybe I'm just not enough of a VS power user, but MonoDevelop was fine for me. :)
My point is that lots of people buy into the popular story that in order to use any tools from Microsoft, you have to use all of them. That's just not true.
Microsoft has tools for test automation, but many people use nUnit because it's better. Microsoft has automated refactoring tools, but many people use ReSharper because it's better. Microsoft has source control tools, but many people use git/hg because they're better.
I've known people who do C# development with Eclipse. It's not as nicely integrated, but whatever. Nothing in the backend stack enforces your IDE tools.
It's the same with postgres or MySql. I personally don't use them because I prefer SQL Server. But I'm not tied to SQL Server by anything but affection for it because it works really really well for what I need.
I can't speak to nginx as I have no experience with it.
Not so sure that's the driver here. Many devs have bought into the iOS ecosystem. This certainly isn't cheap: macbooks, imacs, iphones, ipod touches, ipads. It's also a pretty deep dive to get into.
On the web side, I really think cost is the driving factor more than anything. As long as there's a free (open source) solution to MS's framework that is on par (we can argue either way which frameworks/platforms are better) there's little incentive for startups to go .NET. If a LAMP stack started costing as much as a .NET stack the landscape would be very different. .NET faces the problems going against the Java stack.
In the end, it's about the money. Which platform can I make more money on and does it more than pay for the costs to be on the platform? Right now on mobile it's iOS and on the web it's typically LAMP or lately a Ruby on Rails stack.
>> Many devs have bought into the iOS ecosystem. This certainly isn't cheap: macbooks, imacs, iphones, ipod touches, ipads.
It is a mobile tool chain. You don't need to use Macs for servers... (And the cost of an iPad, iPhone and iPod touch isn't high. You will need a phone anyway. And iPad is the only real game in town for pads, so you'll probably buy one anyway.)
The laptop I was already using for Rails development.
The notion that every dev getting into the iOS space was converting from Windows at an enormous upfront cost seems rather daft. OS X had a lot of dev traction before iOS existed.
I obviously don't have hard numbers on this but I can say from my own experience we purchased macs exclusively to build iOS apps for clients. We run a pretty lean shop so we viewed buying macs just for web dev a luxury item. We spent the money early-on on bigger monitors and beefy PCs for less than getting some MB Pros. However with iOS apps being something clients now want, we had to spend the money and of course buy the devices to test. The money spent upfront certainly wasn't trivial. But I admit we could be the anomaly; maybe we were the last shop on earth still coding on PCs. :)
"Not so sure that's the driver here. Many devs have bought into the iOS ecosystem. This certainly isn't cheap: macbooks, imacs, iphones, ipod touches, ipads. It's also a pretty deep dive to get into."
There's a pretty big difference here: lack of choice. If you want to deploy native apps to iOS, you literally have no choice but to get into that world. If you want to deploy web applications (as many startups, especially HN startups do) there are dozens of options to choose from aside from buying into a single vendor's full stack.
True. The point I was trying to get across is that lock-in doesn't necessarily stop devs or people from jumping in. The potential to save or make money is to me the more powerful driver.
The first time I had to re-buy something because I had invested time in a project and could not do without a certain vendors product I looked for (and then used) a freely installable tool that offered the same functionality. I suspect all people of common sense do this. People do "vendor lock-in" as a last resort, and the reason people don't use the MS stack is because they never figured a out a way to stop piracy without stopping (or negatively effecting) honest production. That and not allowing their products to be used as independent pieces. IMHO.
Microsoft has tried time and time again (with their various .Net initiatives explicitly!) to lock the web into their platforms, because they saw back then (and are blinded by the fact now) that the web is the new platform and pretty soon nobody is going to need Windows anymore.
Just look at Silverlight. Who wants to install that on their Apple or Google device? Flash is bad enough. And yet it's what Microsoft wants you to use to make your ASP.Net app have fancy graphs. L-L-L-lock-in.
Even iOS and Android wouldn't be as powerful as they are had fully-interoperable webservices not come first (killer apps like Gmail, Twitter, Facebook, and Dropbox are webservices first, apps second. You can't compete with them by making an app first, they're platform agnostic.)
So yeah, given the chance Microsoft will try and make Windows 7 running IE accessing a Windows 2008 Server running a .Net app on IIS with a MS-SQL Enterprise backend the only option. It's a testament to the fierceness of the FOSS and LAMP communities that Microsoft is losing this battle (and the world is better off because of it.)
When you buy apple related products to develop for their mobile platform you are buying the tool chain required to develop for that platform. This is very much different when compared to purchasing sofware for the servers for back end development and deployment. Its like you purchase the iOS toolchain(hardware and software) and sell the app to the user. The user purchases is own iPhone and runs that on it. You don't buy iPhones for the users do you?
As far as backend development is concerned. You have to buy the tool chain as well as the software(read OS, SQL Server, IIS etc etc) for the servers that your developed software runs on. Now the problem comes when you need scalability. Adding more servers to your stack means not just spending money on hardware but on the software stack as well.
So now it all boils down to buying real large and powerful servers since scaling out is not cheap. This has added risks like on issues like replication, back up etc etc.
No one wants to be caught up in this sort of a situation. Especially start ups.
Currently the same applies to every known service. You have developed using AWS or App Engine and try to migrate to other systems without changing a line of code?
I'd buy your argument if Ruby on Rails only worked on Amazon servers, or if by using Ruby you could only use nginx and not Apache.
The fact is when writing a .Net web app, if you don't like the way IIS or Windows Server or their providers are handling things, you're out of options. Oh and if you want those nice features that make the ecosystem usable, you get to upgrade everybody to the Pro version (not just the people who need the features.) Remember to buy the next version, too, so you don't fall behind on updates and enhancements. And the next version.
That's not really true. The providers in .NET are similar to the convention over config philosophy present in RoR. IIS and ASP.NET provide a lot of features in what they consider the "most common" manner. However, almost every one of the built-in providers can be overridden with a custom provider. In fact, I've set Wordpress up on IIS a few times and used a custom ISAPI module to allow mod_rewite like functionality to create friendly URLS.
You don't have to rely on the built-in providers any more than and RoR app has to use only the scaffolded views.
Also, the Mono project has made it possible to run almost any .NET app on Linux. There are a handful of projects at Novell that are written in C#, but are served via Apache on a Linux box.
I think it really is just a perception. I use .NET for developing Windows desktop applications. Visual Studio and .NET's basic framework are the only things I consistently use. By choice. In my experience, there's many open-source options for everything else I've needed.
What's interesting is this perception is exactly why the medium-sized company I work for uses .NET. They pay big money for the MS support. So they are reluctant to use other non-MS product because of the cost and risk of introducing another place to go to for support. The other big issue for them is licensing.
I don't think this perception applies to Windows desktop applications; but I also don't think there's a large contingent of startups (the focus of the original article) building Windows Desktop Applications.
I have both a .Net start-up which is a Bizspark member and a non-.Net start-up.
It's not the software costs for me it's the development costs of using .Net that make it tough.
.Net developers get paid a lot which means it's expensive to quit your .Net job and form a start-up and it's expensive to hire people to work on your project.
I'm glad someone got it! You wouldn't believe the number of people who spell the company name as iActionable. How dare they turn it into an Apple product!
> It's not just .NET that you're choosing; you're also choosing Windows servers, IIS, Visual Studio, etc.
That's accurate as far as Microsoft has every incentive for it to be true. Microsoft developed .NET to promote the future of Windows and to compete with the JVM and other cross-platform VMs. As far as I know, they are competing with Mono.
That's the thing about Microsoft. It's lack of compatibility with the non-Microsoft world means that if you just "want it to work" you have to go all Microsoft.
The side effect of just wanting it to work is that eventually the whole infrastructure of the company gets dragged into the Microsoft nickel-and-diming machine and the relentless upgrade treadmill. They make you pay license fees every year for unnecessary upgrades that just move the menus around and often break applications.
You can get a windows VPS for 30$ with 1 gig memory that will perform quite well. Ofcourse Linux is cheaper but a licence to Windows Web Server edtion is 15$ a month on most hosting companies. You also have the BizSpark and WebSpark programs where you get it for free (for 3 years). Dont think the hosting cost is going to matter much in most cases.
SQL server is expensive but who says you have to use it...
I'm using rails for my company but ruby is definitely not my preferred language. Blocks/Procs/Lambdas (why are there three almost identical constructs?) definitely don't compare to function application / currying. I'd much rather write in F# but I'm worried about all the nice to haves that come with the rails stack, like capistrano or the plugins to serve/upload your assets to S3. (e.g. ASP.NET has HAML but not sass)
I definitely foresee at some point switching to ASP.NET in a similar manner as twitter is moving over to the JVM / Scala, but rails still has a lot of legs in it for us.
Our startup is based on .Net and hosted on Azure. I don't think I realized just how uncommon this was until we were invited to Microsoft in Redmond and saw the excitement from the developers when they learned that we were a startup.
We love the framework. But its definitely not the only stack we use. I also agree that there are bad .Net developers that spoil it for the rest of us. In my opinion, most of the issues seem to be associated with ASP.Net and claiming to be a web developer without understanding how the web actually works. Many of them are so into just using the tools that they never bother to learn Javascript and instead insist on doing Postbacks for everything.
I feel that we're starting to see a new side of Microsoft when it comes to the web and startups.
Things like ASP.Net MVC, Azure and BizSpark give me hope.
I think the issue is with Webforms specifically. Webforms abstracts away so much of the way the web works that developers who have spent their careers developing on it never actually understand how the web really works. Concepts like Viewstate hide the realities of web development. The fact that almost all processing takes place on the server-side means they are weak at client-side debugging, etc.
That said, I don't think it's fair to hold the same opinion of ASP.NET MVC developers - as it's essentially the same level of abstraction as Rails.
Having just spent the past couple of months learning webforms ASP.NET coming from a PHP/RoR background what you said is exactly what frustrated me.
Knowing how webforms tried to warp how the web actually works was truly annoying. I understand why they did it, but it really does not help a web programmer in the long run.
And if .NET 4.0 didn't allow you to use ClientIDMode to set your own element IDs I'd have lost it entirely.
Lots of people pick up a bit of .NET in business school - just enough to get hired for an entry-level programming position. They don't teach any programming fundamentals in those classes.
After they're hired at a bigcorp, the devs get by through cargo-culting and leaning on the GUI, so they never learn to actually program. Visual Studio is a great IDE, but it's too helpful for the beginning programmer. 5-10 years later, they've got enough "programming experience" on their resumes to get hired as "senior" devs.
That was written in 2004, when Python was nowhere near as popular as it is now. Ruby is also really popular today too, and thus fits in the category that PG was lumping Java in.
If you want a comparatively esoteric language today, try ML or Haskell.
"Genius" may be overstating things a bit especially now that Rails has gotten pretty popular. You do find some people in the Rails world who are a lot like PHP programmers[0] these days, and you do need to take care to weed those out. That said, you'll probably have to do a lot less weeding out to find somebody to work on a Ruby project than a .NET, Java or PHP project.
[0] In this context, a "PHP programmer" is not simply a programmer who uses PHP, but a programmer who uses only PHP and is almost certainly clueless about CS fundamentals.
I agree. Our company builds products for many startups on top of ASP.NET MVC and it can be EXTREMELY difficult wading through the terrible webforms developers to find the developers with a strong core understanding of how the web works. For us we actually focus much of our attention on developers from outside the .NET world, as we've found they are able to wrap their heads around low level javascript much faster, and relatively speaking picking up C# syntax is relatively trivial.
The developer issue is the thorniest issue with choosing the .NET ecosystem. It's easier to find a .NET developer than a Ruby/Python/what have you, but it's harder to find a good .NET developer.
What I like to do is advertise for Python and .NET skills. That weeds a lot of bad ones out.
Its working well for us. Its been interesting growing our company along side Azure. My company http://IActionable.com launched around the same time that Azure went RTM. So we've been through almost every bump and challenge together. I definitely have my list of things I wish they would change though. I consider myself one of the more squeaky members on the Azure Forums. Most of my issues are with deployment speed and Azure Table Storage features.
Our company is part of an early adopter program which is the reason they invited us to Redmond. We got to meet the Azure teams and really drill them with questions. I came back with a better appreciation for what they're trying to pull off. It feels like they're trying to build an race car and drive it at the same time. Microsoft wants to be attractive to the corporate world and smaller businesses at the same time. That's though.
The documentation isn't fantastic but I blame it on the speed that they are moving. Luckily there are some pretty smart and available developers that contribute to the community. Guys like Steve Marx (http://blog.smarx.com) and Wade Wegner (http://www.wadewegner.com) really know their stuff. I met them on my last visit. We've actually been invited up for another round of Azure 'sneak peeks' in June.
There are definitely 2 distinct cultures of developers using the MS Web Stack. Webforms (what most people typically think of when they thing of .NET) is an attempt to get desktop developers on the web. While it's possible to get good markup out of Webforms, most of the default features are a table-based, inline styled abomination. Until MVC came out, I actually worked on an open source project that focused on fixing the markup generated by ASP.NET.
That being said, the new generation of ASP.NET MVC devs is top notch. People like Scott Hanselman and Phill Haack have helped make some vast improvements in the stack.
My startup uses .Net which I chose for the basic reason that I know it very well and I didn't have time to go learn something else while I was trying to get work done. Any server I add is in response to more paying customers so the cost doesn't matter at all. It cuts into the margin a little but I only add new servers when we add a lot of new business. The initial cost of VS.Net was annoying but it wasn't bad and I was able to run off of SQL Server 2008 Express for a very long time.
That biz sparks program is like a drug dealer giving free samples... yeh u get a free copy of visual studio, but then you got to pay if you exceed any of these requirements...
I think your opinions are based on out of date info.
There are no real "cross-browser pains" when developing ASP.NET. I think you'd really have to go out of your way today to develop something that "works better" in IE than other browsers.
MS contributes to and supports Jquery and includes it by default in new projects.
Silverlight isn't really being pushed at all except on WP7. It was more of a flash competitor anyway and never was meant to compete with HTML5.
There are quite a number of FOSS tools for .NET development, and incredible amount of 3rd party support that's not FOSS.
Granted, most of their stuff isn't being released as OSS. I believe some of their newer tech is releasing source through codeplex.
Overall, most of the complaints I've seen in this thread about Microsoft are better directed at the Microsoft of the 90's and early 2000's than the Microsoft of today.
At Busfeed.com all our systems and App are build on Microsoft platform and .Net framework. The MS BizSpark program is a winner for us and many startups we know. The icing on the cake: it’s waaaaay easier to hire Microsoft professionals on the east coast than for any other platform out there.
I think the ability to find and hire good developers is the most underrated factor in tools for startups.
With rails or php, developers can use the editor and the OS they want. With .net, you're "forced" to use Visual Studio and Windows.
Also, I feel like .net teams are a bit closed to the rest of the programming community. Lots of C#/C++ programmers think that everything that is not C#/C++ is a joke or a little scripting language. "Omg, I would never build my 2D game on Python and save 100 hours" - says the C++ developer.
Also, startups and big companies think and act really differently. The mentality of a startup is: "Go faster!!" while the big company is: "Don't screw up or you're out". I know it's not that black and white, that's just a simple way to say it. But basically, the python philosophy is "Programmers are smart and they'll do their best to use the library correctly" while the C++/C# mentality is: "Imagine that an idiot will use your library so play it as safe and defensive as possible".
Finally, I feel like C# is like a big package deal. Maybe I'm wrong, but I feel like it'd be hard to use CoffeeScript or Compass (for instance) with a C# project. And, it's not that much about the technology, but the mentality of the big company. From my experience, I know that had I told my boss: "I'll use CoffeeScript", he wouldn't have understood why.
>while the C++/C# mentality is: "Imagine that an idiot will use your library so play it as safe and defensive as possible".
That may be the C# mentality, but the C++ mentality is generally speaking "We'll have some guys on the team build the tools of gods, then everyone else will use their classes following their coding standard".
Or the mentality is "wtf are all these bugs"
C++ is only possible really in environments with strict standards and the ability to fire those who don't or can't follow them.
To your last point, with the nuget package manager it's becoming easier to integrate the latest and greatest into your projects. For example, here's a nuget package that makes sass and coffescript a 'one click install' in your asp.net project: http://blog.paulbetts.org/index.php/2011/05/16/announcing-sa...
But like you mentioned, being easy to integrate isn't enough, you'd still have to justify it, which in a big company is more difficult than a start up.
Closed source. If it breaks (really breaks) I (or anyone without a Microsoft badge) can't fix it. And if they do fix it, it will take a while for the patch to get to me. Pretty simple if you ask me.
Well, the number of engineers that can actually patch something, in say, the JVM, are rather limited. So I'm not sure open source is nearly as big a deal as it's made out to be, as far as patching goes.
You do have a point on release cycles, but that's not inherently about being closed source.
>Well, the number of engineers that can actually patch something, in say, the JVM, are rather limited. So I'm not sure open source is nearly as big a deal as it's made out to be, as far as patching goes.
Rather limited? Thats just not a good excuse where I'm coming from. If I need a bug fixed, it doesn't matter I don't know jack about the JVM today, if the cheapest way for me to fix the bug is to jump in myself, I'm going to become a member of that very limited group that can patch the JVM.
It would be nice if we were developing in an environment that we could throw our hands up and walk away, but in the project I'm working on, we've already had to dig very deep into opensource components of our stack to fix their bugs that would have blocked us from shipping.
This argument is broken because the open source-ness of the ecosystem bleeds all the way up the stack. In Java, you get the source of the JVM, of course, but also the Java frameworks and, generally speaking, most Java projects out there are open source.
On the .NET side, which is a closed source culture, you'll not be able to fix issues with the core framework nor the array of other closed source, commercial frameworks that exist due to this cultural difference.
Actually, the full source of the ASP.NET stack is now available from Microsoft and you can easily get decompiled source from .NET framework classes. I would agree that fixing a bug (if found) would be difficult but at least you could understand the behavior and code a work around or substitute.
I use both .NET and the LAMP stack everyday. I love .NET and C# is a beautiful language. But I have to use Windows to use .NET. There is nothing wrong with Windows, except it doesn't have a very good shell; it doesn't come with the GNU user land; I can't just grep and sed and awk on one line to solve problems and answer questions; when I google for help with stuff like mysql I don't find near as many answers that would apply to windows; I can't just type "apt-get install ..." somewhere to try out a new programming language or other large program for free; I can't solve problems with SSH. All of these problems can be solved to a large extent, but not in a well known, well documented and Free way. Maybe that's just a matter of culture, but until the not-artificially-limited version of Windows can be downloaded for free, I can't give it a fair try.
I wish there was a better way for us to meet other .Net startups. I usually try to send an email to any companies I discover are .Net based here on HN.
Even if you're not ready to show, I still want to meet everyone!
What about the reputation of MS amongst the developer community? Eg. Stability of Windows (reboots over weekends to free up memory), countless hours spent cursing MS for IE6 etc. IMHO that's also a major factor.
I've done development with ASP.Net on Windows/Windows Server/IIS/etc., and I just simply don't prefer it to Python/Django/Linux.
C# is a great language, but I find the point and click/cmd.exe solution to not be as robust and quick as a *nix command line.
Visual Studio is a great tool but it has its quirks, complexities, and bugs.
The .NET stack has a lot of potential for web development (MVC being the shining example), but there are so many technologies that make up the stack that it can be overwhelming. It also doesn't help that they are all sold as being equal but that developers in the know would tell you to avoid most of them (WCF/Web Methods/Web Service files/Web Forms/etc).
I don't know about startups. I work for a mid-sized company.
I consider open source to be a better choice in my discussions for these reasons:
* Vendor lock-in avoidance. This can induce some pretty harsh long-term effects, especially with maintenance fees, inflexible users, and data isolation.
* Code escrow. If your customers are relying on a particular component being available for you, it's not a really good thing if that component is 'disappeared' by an API rev. Open source provides trivial code escrow facilities.
* Speed of development. Open source projects seem to move faster than enterprise-level software.
* Company risk: there's no risk of the source code simply going away because the company folded or was bought out. If needed, we can maintain an open-source component if it's that critical.
* Standards-compliance: most open source seems to think about standards more.
* 'Wave of The Future': many novel developments are in open source. If we make sure to ride that wave, we won't obsolete ourselves by locking to a single company.
These reasons all relate to software maintenance and agility in some fashion. Being able to maintain software and to shift platforms (when appropriate) is important. Open source allows those qualities to be there more than non-open source, in my opinion.
I have seen enough Java/MS revs pass through that I don't think it would be professional to recommend solutions based on those platforms, in general.
Best wishes to those those do venture out onto the churny waters, though.
> [...] don’t look for PHP programmers or .NET programmers, look for programmers with experience on a variety of platforms.
This isn't mutually exclusive.
.NET is just a tool. Perhaps it should instead be rephrased and generalized: don't look for programmers who only have experience with X. But that's still a different argument.
I'd love to use C# or F# for development: they're in my opinion, superior languages to Java and Scala (respectively) -- although Scala has several salient and interesting points (implicits, traits) that F# doesn't.
However, I am fairly well wed to Linux/OS X, and don't see myself being productive with Windows (whenever I used Windows, the first application I'd install is Cygwin), nor (having never done Windows Systems Engineering) do I know how to find a great SRE/operations engineer for a Windows system (or how to train a great Linux SRE to be a great Windows SRE). Nor can I legally setup a small cluster of Windows Server machines in my apartment (or on Ec2) to prototype the application _before_ I officially start a company (and qualify for bizpark) without paying extra costs. Ditto for setting up a developer desktop with MS Visual Studio.
I am watching Mono seriously, but for now I'd stick to C++, Erlang/OTP, OCaml, and Java/Scala as my choices (with Python or Ruby for scripting) were I to start a new project.
Addendum:
Microsoft: if you're reading this, buy Miguel De Icaza's startup. Make Linux and OS X a first class side deployment platform. Market SQL Server (which, from what I recall is superior to it's primary competitor, which is Oracle) as a way to "upsell" customers using Mono on Linux to use Windows Server (if it makes business sense for them).
If you haven't looked at it yet, you may also like Nemerle - http://nemerle.org
You don't really need Windows to write C#, F#, etc. There are emacs modes for them if you like emacs. I'm pretty sure there's an F# module for Monodevelop available.
It doesn't help you with the OS situation at all, but Visual Studio express is free from Microsoft should you find yourself on Windows.
I know C# better than most of the other languages in my toolkit, and it's pretty great, but I don't think that Windows is very enjoyable to use when compared to an OS with unixy underpinnings. Should you decide to check out C# or F# in more depth, I'd recommend staying on the OS you prefer.
Mono is production quality today, you don't have to wait for it.
> Mono is production quality today, you don't have to wait for it.
Having looked at it myself, it just doesn't seem to the case: the only recently got support for generational garbage collection and only plan to support tail call optimization (for F#) in an upcoming release. It's still a technical risk to "bet" on Mono, much more so than on JVM or Erlang/OTP.
"They don’t tell you this in school, but there’s a certain organizational personality connected to each language... It’s not a matter of the powers of the languages themselves but how they are used and who uses them and what kind of projects will you be doing with the language."
It's just a perception. Use whatever tool/framework/service that work for your situation.
My latest project was a Windows Phone 7 app with a backend written in Python, hosted on Google AppEngine and using Google's Bigtable database.
A few years ago, for my startup, I used asp.net mvc for the web app and joomla (php) for the website because they had great themes.
So, open your mind and try different things, you will be surprised how much you will learn. But honestly, there is NOTHING that can't be done in either platforms. Technology is really irrelevant. Look at wordpress and facebook. Look at basecamp, look at office live and google office... Look at the crappy objective-c ecosystem and the awesome apps that were built with it.
It all goes back to everything Microsoft offers is tightly coupled to Microsoft's ecosystem, and frankly I've played in that space for years and just got bored of it, plus I got tired of investing in learning Microsoft-specific APIs that Microsoft itself kept obsoleting.
Nothing really new or interesting is happening in Microsoftland. Instead every new offering is just an incompatible counter-offer to some other established technology (eg. Silverlight vs. Flash, .NET vs. Java, Windows Passport vs. OAuth, and so on). Boring.
Perhaps the only area Microsoft has truly offered anything new and interesting is DirectX but I'm not a game developer so I don't have any use for it.
I'm not really trying to refute the broader point you're making, but Passport existed long before OAuth. Late 90s I think.
They're only trying to do the same thing in the most superficial way. Passport was Microsoft's attempt to do single sign-on across the internet by centralizing authentication. It never really caught on. The only place I saw it was on eBay for a few years, nowadays I think it's mostly for MS properties.
* Unix is more elegant as a headless networked server, as it was designed that way since the early 70's.
* Researching bizspark will never beat the efficiency of:
sudo apt-get install postgres
* AKA, time spent worrying about licensing, product codes, and activation is time wasted.
* EC2 (for example) charges ~25% more for Windows thanks to license fees.
The choice between (free, freedom, and elegant), almost always beats (cheap, restricted, and (at times) clumsy)). If there is an aspect to your startup that makes .net a better fit, by all means. But to act as if it is a good solution for the average startup (that intends to grow rapidly) does the community a disservice.
I'd go so far as to say that the "Web 2.0" boom owes its existence to the combination of the floss stack and cheap commodity hardware. In the 90's it took millions to do what today takes thousands (or even hundreds).
The writer of this awful article obviously has not done much web development programming, because if he had, he'd know that microsoft is atrocious in every respect.
Microsoft has its own standards, its own way of doing things. Microsoft does not "play nice". When I code a site that needs to be compatable with all browsers, I need seperate code for ie6, ie7, and ie8. They all interpret code and standards a bit differently, leading to page inconsistancies.
And now, this jerk says we are supposed to embrace microsoft and program in .net? Is this guy out of his fucking mind? Simply program anything thats actually going to be useful and require cross compatability, and you will quickly see why microsoft is looked down upon by ACTUAL developers, hated, and is known across the lands as a large piece of garbage.
For how little microsoft has done for the open source community, for how long it takes for microsoft to issue simple updates, for how many years certain browser bugs were hanging around; I would never, ever, ever, support that company.
The mere thought of a startup company using .net is laughable. Anytime I hear any company using .net, all I can think of is some high up executive got schwindled, and it is up to the low level developers to turn a massive pile of shit, into something useful.
First off, I've been doing web development for about 8 years and I've been using both PHP and .NET for most of that time.
Based on your clear bias, I'm guessing you're basing your opinions of Microsoft's development tools solely based on your experience with older versions of IE. This isn't really a valid way to judge technology, any more than it's valid to judge the quality of Google Maps based on experiences with Google Wave. IE and .NET are two completely separate entities. It's also worth noting that we all have to deal with cross-browser issues regardless of what server side tools we use.
You clearly have some dislike for Microsoft as an organization, but most of your statements here are unsubstantiated and completely irrelevant to .NET. An actual developer knows how to choose technologies based on what best fits the project, not based on personal opinions.
> As a result, programmers start to choose technologies based on that cultural perception, rather than focusing on the best approach for the kinds software they want to build.
This seems to imply that cultural issues don't affect the way the software is built. In my mind it's the #1 factor.
PHP and ruby are simpler and easier to use for non-enterprise webapps (particularly with RoR, and Sinatra being simpler again).
Like JSON being favoured for simpler uses where XML is not required (it lacks schema, references and namespaces).
The usual trajectory is for technology to improve. PHP and ruby and JSON are becoming better at meeting the needs of their specific users. It's harder for a highly sophisticated technology, like .NET, to become simpler (though they've been much better at this than Java).
I think the Achilles Heel for .NET is Windows - the only way using .NET to develop makes any sense is to use Visual Studio, and to use Visual Studio, you need to use Windows. And that's a hard sell for a lot of people - most people in the startup scene use Mac OS X or Linux, and one of the reasons why is contempt of Windows. In many ways, .NET is better than Java, but I can't seriously consider using it if it's tied to Windows.
As a Microsoft developer for more than a decade I can say without a doubt the biggest complaint is that you operate on Microsoft's schedule. If they say LINQ to SQL is dead. It's dead. If they say, you must build Windows apps using XAML, you have to use XAML. I've had to learn at least 5 different data access frameworks over the years.
What I've learned is that core functionality (like arrays, strings, math libraries, etc.) are great but when you adopt higher level Microsoft frameworks (like authentication in ASP.NET) you have to be prepared that at some future point MS will pull the plug.
Open source projects can integrate very well with .NET but if you're starting from scratch at a startup I don't think there is a huge value in the tool chain the Microsoft offers v. OSS tool chain.
I think it's a community problem. Stackoverflow is the closest thing to a vibrant .NET community that I've ever seen, and that's not saying much. Despite the massive enterprise buy-in, it's very lonely place to be sometimes.
IMO, Open Source is what is going to save the .NET as a startup option, things like Nancy, OWIN, Kayak, SimpleData, Dapper are building an entire web stack without any Microsoft owned product.
A couple years ago when I was working for a mostly rails shop, We built a medium sized e-commerce system in .NET MVC.
It was our first C# project (though we'd done java before). It was actually quite nice.
.NET MVC is, as some others have mentioned, a rather shameless rip off of Rails-style mvc, but they did a good job, and they published the source, which is handy.
C# is pretty nice, after working with it I actually prefer it to Java.
When we finished the project we were so pleased with the .NET MVC stack that we tried to see how we could make it work for other projects, but it came down to tools and platform:
We had to run windows for development and deployment if we wanted to run Visual Studio and IIS. VS is a decent IDE, but having a *nix system is necessary for literally every other thing we do, which meant we were either running windows in virtualization or dual booting (we have no desire to run linux virtualized for development).
We looked into the mono tools, but trying to get our code running there was an exercise in translation: all the tutorials and documentation are focused on the windows world, so it's difficult to find resources for working with .NET on mono for web development.
In the end, .NET MVC is nice, but it's not such a game-changer that we were willing to put up with the windows-centric toolchain and, just as importantly, the windows-centric culture surrounding it. Unfortunately I can't see Microsoft making the effort to push it to a wider audience.
I dunno. I get confused, easily. Every few weeks something like this kicks around, I get tricked into saying something unfortunate (but true) about the MS development community, no one changes their mind and the process repeats.
I guess what I keep forgetting to ask is why should I ever consider using .NET for a server side application? I'm totally boggled as to why it's not just a redundant, expensive, risky idea compared to the legions of alternatives. That's very different than suggesting the language or platform is bad... They're not at all. In fact, I think they're great. I just don't understand what makes them worth the trade-offs that come along with signing up.
However, Microsoft has been running their
Bizspark program for a few years, which
eliminates most of the startup costs normally
associated with employing a .NET framework.
The problem with BizSpark is that it is a ticking time bomb.
When starting a business, you don't really know what will happen in 3 years, but only one thing is certain -- the path to success usually takes more than 3 years.
And unless you've got VC money to burn irresponsibly, why build on top of a stack that you'll probably have to replace? Does it provide more value than the alternatives? When it comes to web services, all evidence is to the contrary.
At Piehead, we build web applications on a faster
pace than almost any startup
This is an unsupported anecdotal evidence.
It also seems incorrect based on the sheer number of businesses I've seen doing kick-ass work with non-MS technologies.
programmers start to choose technologies based
on that cultural perception, rather than focusing
on the best approach for the kinds software they
want to build
This implies that .NET is the best approach for certain kinds of software - the article does nothing to name them. Which is IMHO, not the best way to advocate for the usage of .NET.
And again, all evidence is to the contrary - most popular web-services online are not built with MS technologies, with a few exceptions that you could count by using the fingers on one hand. And what else, other than ASP.NET-powered web applications? For client-apps targeted to consumers? For mobile apps? Again, all evidence is to the contrary.
Besides the price and the interoperability story - another reason would be that Microsoft is currently a follower.
Besides a couple of exceptions, which are small in scope, Microsoft currently does nothing but to copy ideas taken from (shock and horror) open-source projects. Sorry, but innovation happens somewhere else.
I also like being able to be in control. Even if I don't know the internals of some component I'm using, I like being able getting in touch with the core developers of that component and ask them nicely or pay them directly to fix it for me. And if that component is valuable to me, I also like being able to improve it myself.
Open-source gives you that, Microsoft software doesn't.
I've worked with 2 start-ups. Both had a major feature release every 4-6 months with minor releases every month or two. At Piehead, most of our projects are less than 2 months from client sign-off to launch. Based on talking with other developers in the Boston area, these timeframes seemed pretty similar to what they were seeing at start-ups and agencies.
I didn't list a huge number of start-ups because I felt the post was getting a bit long and didn't want to jam a bulleted list of start-up names in the middle of the article. There are about 20,000 start-ups listed in the BizSpark directory. Granted, they aren't all web start-ups, but I've only got 5 fingers on one hand and I bet there are more than that in the directory. If you want to see a bit about running a web startup on .NET, the guys at http://www.stackoverflow.com have posted lots of articles outlining the pros and cons they've encountered.
It's also worth noting that almost everybody is a follower in the tech world. PHP and Ruby both evolved from Perl. MVC was in use before half of us were even born. In the end, these are just tools and the power comes from what we build with them.
You use the phrase "all evidence is to the contrary" a lot. If you only see evidence supporting open source tools, you're likely not looking too hard. There are pros and cons to both ecosystems and blindly tying yourself to either one will only hurt you in the long run. My main point was that many developers make decisions based on opinions not facts, and your comments seem to re-enforce that. If PHP, RoR, Django or some other platform is best for your project, use it, but don't hide behind hyperbolic psudeo-facts.
I've worked with 2 start-ups. Both had a major
feature release every 4-6 months with minor
releases every month or two.
Great, so you've extrapolated your experience to the whole ecosystem. I'm not saying that at Piehead you don't build websites at a faster pace than others, but even if you do, it's a selection bias, since you're only comparing others that are similar to yourself.
Here, I'll give you an example - suppose you want to do natural language parsing, a fairly hot topic these days. Try finding me supporting libs that would do that and that are better documented or mature than NLTK (the Python library), which doesn't work on IronPython btw.
didn't want to jam a bulleted list of start-up
names in the middle of the article
That's too bad, as it would have done more for the point you were trying to make than all the other blabering you wrote.
almost everybody is a follower in the tech world
Yes, but most valuable projects also add things of value that the original projects didn't.
How's the deployment story these days for .NET? Does it have something like Capistrano yet? Why should I use a half-baked clone of Ruby on Rails, when I can go for the real deal and have thousands of cool plugins to choose from? Why should I use NuGet when you can have the really mature Debian repository and rubygems.org/CPAN/PyPi?
PHP and Ruby both evolved from Perl
Both innovated in certain ways over Perl, I'm not advocating for revolutions. In both cases you can see clear benefits that those languages / ecosystems provide over Perl.
That's not the case with .NET - it's a proprietary technology, having all the cruft of Java, while not having all the benefits of Java - like a strong community or integration with anything under the sun.
MVC was in use before half of us were even born
Funny you mention that, because ASP.NET is not MVC. It also makes you jump through hoops to have MVC, mostly because of that braindead postback mechanism.
And not all MVC frameworks are created equal. If you can't see the benefits introduced in ASP.NET MVC that were copied from others and that weren't in existence when half of us were even born, then there's no point in debating any further.
There are about 20,000 start-ups listed
in the BizSpark directory
Then what was your blog post about?
There are pros and cons to both ecosystems
You aren't showing me any pros of .NET, and that was my whole point. Article is vague and filled with hyperbole.
If PHP, RoR, Django or some other platform is best for
your project, use it, but don't hide behind hyperbolic
psudeo-facts.
Well, hyperbolic pseudo-facts are countered best with hyperbolic pseudo-facts. Am I right or what?
As an enterprise software stack, .NET may be fine and competitive. However, the reasons that make it a good enterprise stack work against it in the startup space.
Take the example of a web page returning JSON. In Rails there's a prescribed way to do this. It is generally straight forward and one gets it done literally after 5 minutes of tutorials.
In .NET, you have to install the WCF REST stack, learn about endpoints, bindings, the difference between Raw, and wrapped formats, then there are authorization behaviors (tokens, windows integrated etc etc). Mess around with service hosts in IIS and then pray it works. With everything being pluggable, there is no simple prescriptive method to get code working and moving on to the next feature. The stack is so complicated that blog posts even by MS employees contain errors which stay uncorrected. I have spent two days trying to figure out what is the best practice for uploading a large file to a web service and the combination of options are simply bewildering and with so many parts one wonders if it is going to work at all.
Now imagine this struggle being repeated in every aspect of your development. You will spend the day stepping through Factories and Hosts and Locators using Reflector.exe before finding the little bit of code that does what you want. Then you swear at MS because it is marked "internal" and you can't monkey patch it.
This syndrome is in part due to the size of Microsoft. MS would never dare release software that wasn't pluggable because it has a big audience and big audiences want a clear delineation between what is their code and what is maintained by Microsoft. The startup ecosystem just wants to hack code until it works and get things done. No startup developer can really devote the necessary time to the study of large software stacks before sending out a piece of string.
MS has done an outstanding back-to-basics job with WebMatrix and its PHP-like simplicity. However, it is still a long way behind in other respect.
For example, MS doesn't cultivate a community the way open source projects do. There is no central place to find able consultants, or centralized Planet-style feeds, or given provide a site where users can contribute tutorials. The employees are answering forums in their free time (I saw some post at midnight, and this is devotion, but the msdn forums are literary broken - you can see the answers being doubled up in the rendered page but no one fixes them). The experience simply reeks of helplessness on the poor MS-employees' part because someone else in the company has created such a shitty place for developer interaction.
Well you don't have to. If I was just writing services to only return JSON to a web-page, I would just use ASP.NET MVC which has good built in support for this, e.g.
public class MyController : Controller {
public ActionResult MyJsonAction(){
return Json(new {
Id = 1,
Name = "MyName"
});
}
}
Now you have a url /MyController/MyJsonAction which will return the JSON string { Id: 1, Name: "MyName" }, no stress.
WCF is complicated, but it is powerful too, especially if you need to support multiple bindings (e.g. REST and SOAP endpoints for the same service). Also, if you need to support the SOAP WS-* standards, it's a life-saver.
I am a knee-jerk Microsoft hater (with reasons I won't bore you with). Last fall I saw a bank developer giving a demo of how to build a system using F# and accessing the the windows GUIs library on .Net. I have to say it was very, very nice and powerful. I was half tempted...
In my experience Windows ops/admins don't have anywhere near the depth nor breadth of infrastructure knowledge that *nix ppl do, and I have yet to meet a .NET web developer who knew anything about OS internals.
I'm not ragging on MS devs, just an observation from personal experience. The well-roundedness of the FOSS based software engineers makes them a much better suit for startups than MS people. I don't believe technology superiority really comes into it.
Is there a way to learn .NET stack without downloading lots of stuff/having a student license/licensing things?
I do like C# and have used it for Uni projects in the past, but I've done much more work in Python because starting out in it was as simple as typing "python", or making webapps is as simple as apt-getting or easy_installing a framework and doing a simple tutorial. What is the equivalent of, say, the Flask tutorial, for .NET?
I'm not familiar with the Flask tutorial. But usually when you create a new Web or Windows project in Visual Studio you just hit F5 and you're already running a basic "hello world" app.
Hey all,
I'm the original author and I saw this popup, so I figured I post a quick comment.
A lot of people have pointed out that I didn't really include and example of a start-up using, which is a legit point. If you're interested in seeing a good example, check out http://stackoverflow.com They're a great example of a company that's very open about their experiences with .NET (both good and bad) and they generally post them on their blog at http://blog.stackoverflow.com/category/aspnet/
If you have specific questions, feel free to reply and I will do my best to answer them.
Why wouldn't a startup that I start use .NET? Because it's too late. The time to catch me was 5-10 years ago - when I was a middle school/high school code monkey playing with the Linux/GNU/gcc stack.
Now it's simply too late. Sure, I could and would invest time and money if your stack was orders of magnitude better. And I often do learn and use new stacks (the ML family; common Lisp) if they happen to be by far the right environment for the problem at hand. But if .NET is just "Java, but a little better", it's really not worth my time.
This is very true. Microsoft has not done a good job reaching out to younger developers, which probably hurts them far more than they realize. While I like working with .NET now, I was 100% PHP & Perl dev through high school and college. When I graduated I was hired at a company that built CMS products and needed me to know PHP, ASP.NET and ColdFusion. I realized pretty quickly that my PHP and Perl skills translated pretty well. The hardest thing for me was getting used to writing real apps in an object oriented language.
I've been a .NET developer for close to 10 years. Our last product (UsabilityHub.com) was written in .NET simply because it is what I know.
In reality it doesn't matter how good .NET is, there are two reasons why we didn't use it for our latest venture (BugHerd.com).
1) .NET is always one step behind. When people say .NET for web apps, they really mean MVC. I love it, but the reality is that it's a .NET implementation of what was long since done elsewhere. .NET will always be a step behind. Although I must say, sometimes being the second to implement something is a good thing for stability.
2) Hiring .NET developers means hiring enterprise developers. A huge generalisation here, but that means engineers that have worked in big teams under constant direction. They don't do open source, they don't read other people's code and they aren't used to working autonomously.
Totally agree on the commitment to the whole .Net ecosystem, but that is a feature, not a problem, because for the most part the various places play very nice together - so nice in fact that we have time to actually COMPLAIN about this integration :)
Another minor point is that yes, MS has higher licence costs for sure, but the other expense for a business is the development time themselves. A .Net developer can quickly switch between WinForms/Web/Mobile/Silverlight(for what it's worth) with very little learning curve and all within the same IDE. I believe it gives a business many more options without needing to bring in and train specialists.
To be honest, I think one of the biggest problems with using a Microsoft stack is licensing. With Linux/OSS infrastructure the only limit in terms of flexibility is your imagination. Want a server? All you need to buy is the hardware. Want to change the OS on a server? Just takes time and effort. Want to change your infrastructure from a few big iron boxes to 10x as many smaller boxes? Again, just time and effort and hardware costs.
In contrast, with an MS stack you have licensing and purchasing friction at every step. You get mired with infrastructure inertia, you don't want to waste the money you've spent on buying OS/database licenses, you don't want to spend new money on new licenses. Even when the money isn't very consequential (and in most operations it's not) the mere fact that budgeting has to be involved in so many technical changes often reduces flexibility and development velocity. For example, what if you want to merely investigate a potential new server configuration? With Linux you can perhaps find some older hardware and spend some time prototyping a new system, and if it doesn't work you've wasted time but you've at least learned something. With Windows you have to commit money before you've completed your test.
Lock-in is a bit of a myth, or more precisely, everything "locks you in". If you start with a LAMP stack, or Rails, or .Net it's going to be very expensive to change that once your business is off the ground. This is because the main costs are developer time and time-to-market/opportunity costs.
Regardless of platform, a wholesale rewrite is rarely viable. Facebook is still on PHP, and have had to take heroic measures to avoid moving to another language.
In the local Twin Cities startup scene I have seen several .NET startups. But rather than make me question my feelings about .NET it has made me question the local tech scene. (FWIW a lot of these are around medicine, which may be a healthcare IT culture instead of an internet culture)
No, it's entirely about our industry's culture. Which is a shame. It's a fantastic framework that should and could supplant the JVM. It never will though, thanks to Microsoft's boneheaded choices and the blog posts like 'Why I don't hire .Net developers'.
reply