My real world experience with this is entirely different. Most .net devs are doing what they do because they have the best job prospects in that slice of the industry, especially in light of the overall skillset for the average .net coder is 90% .net, and 10% in the other languages learnt during thier degree.
I personally enjoy working in .net; the entire development process is very smooth and intergrated.
By the same token, we should be amazed that most shops use Mac and Linux, even though Windows has tremendous market share. Or why we aren't using Java.
> Enterprise and startups aren’t mutually exclusive – they’re just different stages in the evolution of software
I think that if you told most startups that 'Enterprise' was another stage, a future stage in the 'evolution of software', they'd hang themselves.
The author asserts that Visual Studio is a much better development platform than everything else. I use IntelliJ, emacs, Unix cli, Perl, etc What am I missing? I'm sure Visual Studio is good but even if it's better, how much better is it?
If so, Visual Studio isn't as good, but is kind of comparable. It's better than Netbeans. Personally I prefer Eclipse, but I can see that others may prefer VS.
The same guys make Resharper for Visual Studio. I can't imagine that Visual Studio is better if the Java guys are making a plugin for it. I have heard that for C++, VS is hard to beat, but I haven't done that in a few years.
For VS 2003 I had to use ReSharper to make it bearable. For VS 2005 it made it better. For VS 2008 ReSharper didn't really add anything anymore, and VS 2010 has all the features of ReSharper and more.
VS has evolved quite a lot, and I don't acutely miss Eclipse anymore whenever I'm in VS.
There are a ton of designers in VS. You can drag and drop database tables to create ORM classes(in 3 different ORM's out of the box). Designers for asp.net web apps, drop controls like tables, textboxes, etc. Designers for win forms, WPF, Silverlight apps.
There are a lot features related ot other MS products - SQL server, TFS (source code control, bugs tracking), Active Directory, etc.
The ultimate edition comes with web/load test tools. You can record some actions in Internet Explorer, than VS can create a coded test perfroming all the requests and testing the responses.
VS has a historical debugger, called InteliTrace. It can show you the state of an app at any previous point of execution.
As someone who has done both Enterprise .NET and startup work, I have to say that the reason we didn't use .NET is much the same as the reason you don't rent a 2-ton backhoe to dig up a flower bed: cost and overkill.
Yes, the backhoe might dig the flower bed faster, but it costs $5,000.00 to rent, there's a one-week minimum rental, and its treads tear up your yard to get to the flower bed. On the other hand the shovel may be slower, but you can borrow one from a friend and it doesn't tear up your whole yard.
Let's near in mind these are start-ups with limited capital and no time to fill in the holes that your treads tore up in your front yard.
The only thing you really need to pay for is the actual Windows 2000-whatever servers with IIS, everything else you can get for free. Visual Studio Express Edition is free, the .Net framework is free, and you can integrate with all sorts of popular open source products such as MySQL, Postgres, memcached, Cassandra, etc.
My time doing deployments and dealing with Windows Server issues is not free. Neither is the time lost using RDP instead of SSH, dealing with licenses, requiring much more HD space than the alternatives, and lacking real scripting solutions.
I have yet to hear anyone using LINQ on anything that's not SQL Server, and considering the NIH syndrome in Microsoft, I wouldn't recommend it.
My time doing deployments and dealing with Windows Server issues is not free.
We don't have any issues with our Windows servers, but I guess the number of issues you run into is proportional to your experience. We would have a lot more problems dealing with Linux servers. YMMV.
Neither is the time lost using RDP instead of SSH
Practice makes perfect...
dealing with licenses
What? You buy it, you install it, done?
requiring much more HD space than the alternatives
Now you're just being silly. Are you worrying about HD space in this day and age? Seriously?
and lacking real scripting solutions.
I'll give you this, but I've yet to see the need for such an environment.
I have yet to hear anyone using LINQ on anything that's not SQL Server
Don't use it then? I think LINQ is a horrible idea, and horribly implemented, so I'm staying far, far away from it. I would never use it or SQL Server in a startup, that would be insane.
I see how you could accidentally recruit someone who thinks it's the best thing EVER and starts using it all over, but recruiting people addicted to the wrong bleeding-edge technologies is a hazard no matter which technology you use.
Have you even looked at how much bandwidth RDP uses compared to SSH? I can have 7 or 8 ssh connections open and monitoring files where windows can't get one remote connection working properly.
As for installing, Debian/Ubuntu can't get any easier.
apt-get install <package>
And if you need the very latest nginx?
wget <url>
tar -xzvf <tar.gz file>
cd <folder>
./configure
make
make install
Even better, you can script this with bash with little effort. (Complex scripting can be more difficult but that's not what we are doing here)
You're comparing apples to oranges. One is graphical while the other is text based. I've personally never had issues with RDP and bandwidth. If you have multiple connections open you can minimize the RDP window; the connection is maintained but the window is not refreshed so it doesn't use your connection.
Deploying a Linux server on my environments takes exactly 5 minutes. Most Windows Server installations run over half an hour, require babysitting, and quite a bit of time previous to that if I want to make a custom image, a process which I can't really automate.
Using SSH is a much, much better solution for administration. I don't depend on having a large screen or fast connection. Believe, when you're managing servers 8000 miles away it makes you want to tear your eye sockets out.
Licensing. You must be kidding. Keeping track of license numbers, WGA validation, and being artificially limited in how I can move OS images around is nothing pleasant. I don't want to depend on anyone's approval for purchasing licenses; I need to download, burn, and deploy.
> I'll give you this, but I've yet to see the need for such an environment.
I've been a UNIX sysadmin, I've seen my Windows counterparts. Please do take the opportunity, if you have the chance, to learn about shell scripting on Unix. It's incredible.
> Don't use it then? I think LINQ is a horrible idea, and horribly implemented
Alternatives? I don't know of comparable alternatives. I don't think NHibernate would be right, neither do I want to go back to validating raw SQL.
Haha, LINQ is the best part of the framework. It was in part designed by Erik Meijer and Don Syme(who are big names in functional languages community). LINQ to objects and to XML are widely used. There are hundreds of non-Microsoft LINQ providers, like LINQ to Amazon.
Generally LINQ is about higher order functions, monad pattern, map-reduce. Have you tried it? It's fantastic.
Of course I have. It's great, but it's only marginally better than other ORMs for my use cases (I know it's technically much more than an ORM). The time I gain writing LINQ queries is lost trying to deploy that solution, or attempting to debug marginally complex queries, something that's generally easier on dynamic languages. SQLAlchemy is still my favorite ORM around.
On the same vein, while C# is an excellent language, there's too many sections of .NET and Silverlight that depend on type casting to the point where there's no advantage to using a statically typed language. And unfortunately neither IronPython nor IronRuby are used in the mainstream.
If you are only using VS Express you are working with one hand tied behind your back.
If you go for .NET development, at least do it properly. The up front costs really are an issue, though.
Also, while it is true you can integrate with all sorts of popular open source products such as MySQL, Postgres, memcached, Cassandra, etc you'd have to ask yourself why not just use the environments they are supposed to work with?
Using them with .NET is like doing Windows thick client development in Java - possible, but a horrible experience. It's always the details that kill you. I don't know if you ever had to do Java<->COM integration, but doing that for a while taught me that all platforms have their specialities, and it's a lot easier if you don't fight them.
I think a big difference is how we define small, e.g. Wikipedia tells me:
In the United States the Small Business Administration establishes small business size standards on an industry-by-industry basis, but generally specifies a small business as having fewer than 500 employees for manufacturing businesses and less than $7 million in annual receipts for most nonmanufacturing businesses.
When Microsoft makes something for small business, that's what they are imagining. For a boot strapped hacker working on a website, 500 people and $7 million is a long long way away...
I'm using .NET ... most of the tools are provided free and the full versions provided free by BizSpark, which I joined for free and now have a 3 year MSDN subscription that entitles me to a load of stuff.
It was only very recently that I stopped running http://www.swfstats.com/ on SQL Server Express.
I think the real difference is it's just not front page news you're doing x with .NET. The web just likes to amplify and exxagerate certain 'accomplishments' ... doing your job in C#, Java, MySQL etc aren't on that list.
To be brutally honest about .Net, and I use it and like it myself, the reason there's no startup market in it is because until MVC there was no point developing in it.
ASP.Net controls, postbacks for everything, view state, a general hiding of the actual power of ajax and an obsession with using tables made .Net a terrible web development environment if you had any clue what you were doing. The html it spat out was a bloated horrible mess, web services were anything but unless you really slogged your way through some pain, ashx pages and the directory structure just felt plain wrong.
That said I'd almost, almost, switched to using python/django and then I had a look at MVC and it did everything I needed. Full control over html, nice code separation, a nifty ORM for taking away the pain of basic crud. An alright templating system easily extensible using extension methods. And 3.5 brought some tricks using LINQ and anonymous methods.
I still know I need to learn a few more languages, but MVC has allowed me to copy everything I felt was the 'right' way of developing webs apps from rails/django without having to actually learn a new language and dev environment.
If you weren't worried about performance and didn't want to learn how to actually program, the old ASP.Net was ok for very quickly throwing out web apps for the 10 people in HR. Much more than that required an in depth of knowledge way beyond most .Net programmers, with most of those people being multi-lingual anyway and tending to opt for the cleaner code the alternatives offered.
I don't feel that's the case anymore, but it's way behind in adoption at the moment.
You still hit the occasional WTF in MVC where if feels as if someone wrote a part of the system without reading the memo about flexibility (the validation solution in MVC, for example, is terrible, although not finished and LINQ to entities can be frustrating).
tl;dr;? No startups because until recently good web development in .Net was actually really hard. MVC's changed that.
This is false because it relies on an incorrect assumption: that if you were using .NET to do web development prior to MVC, you had to use ASP.NET.
When I was writing .NET web applications, the sum total of ASP.NET integration was implementing IHttpHandler and friends - not much more than access to the request and response streams. You can build your own lightweight framework, which, being lightweight, isn't a big deal.
+1 for this. We've been working in C#/ASP.Net for 7 years now, and we always stayed as far away from ASP.Net controls and Web Forms as possible. Some things we liked such as master pages and making a class hierarchy for the pages to inherit, so we used that.
For the past two years we've been using our own light-weight MVC framework.
C# and IIS are very versatile technologies, you don't have to buy into the entire Microsoft tool chain to use it, you can use whatever parts you want.
To be fair, ASP.Net was a better technology than JSP, which were the main competitors back then. On top of ASP.Net, Microsoft built Web Forms, which is really bad when it comes to building large, scalable web applications. Unfortunately, Microsoft kinda stopped there, whereas the Java community continued and made Struts and Spring and whatever else they do now.
And that highlights the other problem with using the Microsoft stack: There's no community around popular frameworks, the absolute majority use only what comes out of Redmond, and if nothing comes, then they're just stuck.
In the Java community, there were loads of MVC frameworks, people built it, and the popular ones flourished, and people could move on. In the .Net community, nothing really happened until Microsoft themselves made an MVC framework.
So being on the Microsoft stack is more like a roller-coaster than a smooth progression, and that is a problem, because it's not very startup-friendly.
I use a similar strategy, avoiding the .Net web controls and viewstate entirely, instead opting for open standards on the front-end such as jQuery + html/css. I use c# for the plumbing and web-services to feed/consume from the Ui. Also makes it easier to create different Ui's depending on web or mobile, which is a big part of why I moved to this strategy.
You're totally correct, but if you do that: you are an outlier. Most Microsoft shops stick as close to the neatly groomed path as possible. There is nothing wrong with being an outlier generally, but it can bite you if you find a nitch bug that only affects you; it may never be fixed and you won't have the power to fix it yourself.
This is why I hate .Net, it hides everything, changes the normal pages work. I guess it does this to make it easier for people who don't understand what is going on, but it just frustrates me. I understand the way POST and servers work, I don't feel the need to have to unlearn that and learn Microsoft twisted version of the web. And the horrible code and javascript it puts on a page is just ugly.
No, he's completely right. Regardless of what the framework may or may not allow, the fact of the matter is that most .NET web applications are using the full ASP.NET stack, which means that it's the place where most of the mindshare is, so for all practical purposes it would be more difficult to find people who aren't using it, and if you aren't using it then you're probably using another technology stack.
For that matter, when using just the base .NET framework for web development, I fail to see any advantage over Python or Rails beyond familiarity, and many disadvantages.
Regardless of what the framework may or may not allow, the fact of the matter is that most .NET web applications are using the full ASP.NET stack
Yes, but that is not what he said. That the majority of .Net developers are completely hooked on the entire stack is a problem when it comes to recruiting people. That is not the same thing as claiming the .Net stack is rigid and inflexible.
That said I'd almost, almost, switched to using python/django and then I had a look at MVC and it did everything I needed.
I had almost convinced one of my ASP.Net developer friends who was well fed up with web forms to jump ship to Ruby and Rails with me when .Net MVC came out. After that, there wasn't a whole lot of a compelling reasons for him to start on a whole new language and framework anymore. If only they'd waited a few more weeks! Curse you Microsoft!
Why nit just know your place? Microsoft is fine (or at least was fine with) targeting massive enterprises and signing lucrative contracts with lots and lots of zeroes and lock-in. Why not adopt some unix philosophy into the ms ecosystem and just do one thing well.
I was willing to sympathesize with this article until the visual studio destroying everyone else feature set wise comment. Despite what you may think you are about the topic, you are just inviting a holy war.
As someone who has used visual studio, eclipse, and text mate regularly I would be hard pressed to say that visual studio destroys anything. I would prefer eclipse since it can do things like "open type" and "organize imports" natively. Things that come for free in the free and open source eclipse ide require you to buy the $80 resharper plugin for your $400 ide.
Everyone's going to have different favorite editors; nothing wrong with that. However, the free version of Visual Studio 2010 has both the features you cited.
(and for what it's worth, I wasn't the one who downvoted your comment)
The main problem with Visual Studio is the "soft" vendor lock-in problem: if I want to use VS.NET with SVN (via AnkhSVN), the experience sucks compare to Eclipse and Subclipse.
Basically, VS.NET wants you to use other MS products as well such as MTM, TFS, to be very very productive in MS environment. Using VS.NET, SVN, TeamCity and a mixed bags of other software will not give a smooth experience compare to using all-MS or go with Open Source.
I've been to 2 dotNet local conferences already ... the presentations are centered around Office / Sharepoint integration, plus company-sponsored propaganda (also targeted at the enterprise) that made me wanna` puke out of boredom. Even the presentation on Silverlight was focused on data-binding and how easy it is to build boring forms out of clicky-clicky actions.
This is especially telling considering I did work for "the enterprise" and I'm still doing it as a consultant.
Of course, personally I don't need more propaganda and advocacy.
Just last month I created an app for managing the webcams of a client. I used Red5 (the open-source Flash streaming server), in combination with Apache / Django + a MySql database. Besides my billing per hour, the extra cost to the client for the licensing of this infrastructure was $0.
And for my app, while I would love some of the stuff in .NET, I don't want to pay extra for those Windows servers, even if they provided extra-value over Linux (which they don't).
Putting your business hat on ... as a startup or as a pragmatic consultant, paying extra for Windows servers is not worth the price, unless the cost of switching from .NET is big (and really ... which other technology has such a big cost of switching?).
Sure ... it's easier to blame the lack of advocacy. The Perl community is also doing it (and I would rather go with Perl apps hosted on Linux servers than suffer the Windows licensing hell).
BizSpark/WebSpark blow away any complaints or concerns, valid or not, of server or hosting costs as almost any valid, new/new-ish software startup should qualify.
On the other side of that, MySQL enterprise licensing is only marginally cheaper than SQL Server, and one might argue lacks features and rich toolsets to work with in the enterprise. And in the end, most web-based startups are really SaaS so yes, you really do need to be thinking in terms of enterprise, and minimizing annual cost of delivery and ownership/subscriber.
First, the example I've chosen was on purpose ... like if you enroll in WebSpark, that's useless if you need the IIS Media Services. Also, you can't have more than 4 processors serving your app.
It also doesn't spare your costumer (in the case of consultancy services) to buy licenses.
Second ... not everybody can enroll. The company I'm working for has 12 members ... some of them are field engineers that aren't doing programming (I mentioned we do consulting). WebSpark at least is out of the picture.
Third ... these programs are ticking time-bombs. I've worked on and off on several personal projects for the last 5 years (I'm doing it part time). 3 years is not enough, unless you have a good idea that you're sure it's going to work (and this doesn't happen that often).
> MySQL enterprise licensing is only marginally cheaper than SQL Server
A startup-founder would be too dumb to pay for MySql support.
HINT: you get all the support you need from its community, especially if you attend conferences and buy a round of beer to its core devs ;)
there is a whole generation of developers who came out of college with the notion of Microsoft being evil.
also the trends setup by VC's like YCombinator, good college/university like MIT is, you can make cool products with open source ecosystem.
not sure how much you would remember, about 15 years ago it used to cost a large chunk of money to build scalable apps as 70% of the investment was sunk into datacenter acquisition.
another cool aspect is lot of new popular apps like posterous, started out as a single usable idea were implemented over a weekend and polished with multiple iterations.
licensing cost is still a big negative for those have discovered the power of open source technology, also the community is lot more evolved in sharing the expertise.
application frameworks like Ruby on Rails played a big role in getting the best practices like MVC Architecture, source code management, TDD/BDD, code generation, reuse in open source web frameworks
cloud computing infrastructure like amazon web services and linode VPS maks people experiment new projects at lot less cost.
Personally I have problems with many .Net developers who are "fish out of water", when it comes to living without the Visual Studio IDE. standards and features like XHTML, AJAX(prototype, jquery others ) came lot later in .Net programmers toolset until Internet Explorer was the leading in developer mindshare.
What sounds more attractive to a Hacker type looking to work on a startup?
"Come be an effective software engineer in today's new start up and use .NET to change the internet!"
or
"Laid back atmosphere, free pizza, Ruby and text mate. Let's get at it."
MS is a tool set - not technology. Hackers are very opinionated and want to do things their own way. In my experience, .NET, VB, Visual Studio (all while great tools) require you to do things one way, their way. That just doesn't sit well.
Then of course there is cost, stigma, lock-in, etc. Start ups are the anti-Microsoft, using it as a platform to build their technology, from a very fundamental level, is dissonant.
It certainly is culture shock, and its not going to get any better for Microsoft in these markets. But they don't care, their business isn't designed for it. Microsoft doesn't do consumer products well. If you think about it, the only reason DOS got in front of everyone is because they were able to sell it to IBM.
In my experience, .NET, VB, Visual Studio (all while great tools) require you to do things one way, their way.
That is simply not true. However, I agree that breaking out of the MS mold requires more effort than it does for other technologies, and if you couple that with the fact that the overwhelming majority of .Net developers available are unable to do so, then you get a major reason not to do a startup using .Net technologies, it's simply extremely hard to recruit the right people.
> In my experience, .NET, VB, Visual Studio (all while great tools) require you to do things one way, their way. That just doesn't sit well.
To be honest, that's not my experience. I've found that .NET gives you a lot of freedom, however things can be indeed easier if you do things the "recommended" way, but there's also an "if that's what you want, you can do it if you think you know what you're doing" mentality as well in the design of the framework. I mean, C# even has pointers which is quite uncommon in similar high-level languages, albeit well hidden so you only get to use them if you really want to.
Contrast that to Python's famous "there's only one way to do it" philosophy. Don't get me wrong, I think Python is really great stuff but I think it's unfair to say that .NET (as opposed to Ruby or Python) forces you to do things "one way, their way". If you want to do web development, you can choose between MVC and the (kind of) continuations of WebForms; imperative or functional, direct SQL, LINQ or the Entity Framework etc. - there are a lot of choices to be made.
Visual Studio destroys [other environments] in any feature set-to-feature set comparison.
sounds an awful lot like
No wireless. Less space than a nomad. Lame
Even for the nerdy, a long feature list is not what actually makes people want to use a tool. In the case of Emacs, it's the customizability. With Vim, it's the simplicity, speed and focus on its purpose. Other environments have their own advantages that don't fit neatly in to a feature list.
Most people don't use Emacs just for the editing, and a big part of the point of Vim is that it's a simple tool that does one thing and does it well. Almost any serious development environment (editor and development tools, integrated or not) can be made to do most of the stuff that any other can do. Tool preferences are about how the tool fits with the user's personal style, not specific checkboxes on a feature list, even if it's something like "customizability".
And the Vim plugin is an absolute failure, and the development enviroment takes 30 seconds to startup, 30 seconds to connect to a TFS server over the Internet, and stutter every 20 seconds whenever you want to switch windows. oh, and let's not forget the 15 second build time for debugging.
Vim is here, now, the very second you need it, over an SSH connection, and far, far more customizable and with more useful plugins. The advantages of Visual Studio (namely, integration of features and great code completion) are lost when a framework fits in your head and you've automated most of your tools.
I say this as a person that spends 50% of his time on VS, the rest on Vim.
Are you using msbuild to build your project? I've figured that out and some of msdeploy so it seems like making the jump out of Visual Studio/Express should be straight forward (I came from Vim with PHP/Perl and often find Visual Studio/Express getting in the way more than it helps).
Have you tried using Silverlight for a RIA app? Rendering a XAML file takes at least 5 seconds, and it's a process that's riddled with bugs and consumes at least 1 gig of memory.
I'm sure the WinForms designer is much faster (I've never had any trouble with it in VS 2008), but the new toolkits with WPF and XAML seem to consume all the resources of my dual-core laptop with 3 gigs or RAM (a somewhat acceptable dev machine), the parser is horrendous and prone to causing unexpected exceptions, and is generally not as nice.
.NET FW is 1st class at tehnical level, but Microsoft platform around it is no good for a startup. You want to write mobile apps - Windows Mobile/Phone is a joke. Want cloud computing - Windows Azure is $100 per month for the simplest web site, no matter how many requests served. There is no also no way to play with the real thing for free.
Another problem is most MS internal developers still live in the 80s. You can hear "Real man write C++" all the time. Just browse the source code, written by MS employes, on Codeplex. They write C++ in C#. The APIs are out of this world - 25 or 50 lines of code to use a simple feature is no problem.
I only programmed .NET in the days of 2.0, so my problems with it come from an older less capable framework. Nonetheless, when your language of choice requires you to distinguish between:
- IComparable
- IComparable(Of T)
- IEquatable(Of T)
- IStructuralEquatable
- IStructuralComparable
- IEqualityComparer
- IEqualityComparer(Of T)
- IComparer(Of T)
- overriding Object.Equals
- overriding operators <,>, <=, >=, =, <>
...it's time to find a new language.
edit: Just imagine you encounter a new collection BozBag(Of T) which has to test your objects for equality. Without looking at documentation could you as a coder possibly know if BozBag uses x.Equals(y), x = y, x.CompareTo(y) = 0? Heck it could even use x.Equals(DirectCast(y,Object)) or x.CompareTo(DirectCast(y,Object)). The only way to really know is to dig through documentation.
Saying that you need to understand and differentiate between all of these is disingenuous.
- The "Structural*" types are new in .Net 4.0, you never had to understand them before and you probably don't need to even know they exist now.
- Many of these listed are just generic vs non-generic. The generic ones subclass the non-generic ones, so contraviance eliminates the need to really understand the distinction upfront.
- Compare means Compare(a,b):int which returns -1, 0, 1.
- Equals means Equals(a,b):bool
- If it ends in "er" it is a functor which operates on two free objects instead of "able" which means one subject of comparison is "this".
- Overriding individual operators gives you more flexibility than Compare(a,b):int because you can use specific algoritms for specific comparisons.
Maybe it's time to find a new arbitrary reason to hate .NET?
>- The "Structural*" types are new in .Net 4.0, you never had to understand them before and you probably don't need to even know they exist now.
You're right, I scooped those off MSDN and never use them myself. All the others, however, have made numerous appearances in my code. I think that the preponderance of comparisons is a language smell-- it's not close to my only problem with .NET development but I think it captures the essential headache-inducing inelegance of C#/VB programming. That language-blob has little regularity but much accretion. There are rarely sane defaults nor any overarching design for your mind to latch onto. After time spent with saner languages (Python, Haskell, Ruby, OCaml, etc...) coding in .NET feels terrible.
Java also has Comparer and Comparator in both generic and non-generic flavors. Java lacks Equatable, which is a problem. Haskell, for example, has both Eq and Ord. It is frequently possible and convenient to be able to implement Eq in terms of Ord and part of Ord in terms of Eq, but these are orthogonal concepts.
As someone who has done A LOT of professional C# development: I've found that with only a few exceptions, the .NET base class libraries are very well designed with entirely reasonable defaults. I use Python primarily now and, in general, the core .NET libraries seem to be better designed than most of the older Python libraries (many of which are getting properly cleaned up in Python 3).
I did some .NET development in college and after years of Python and PHP development, I finally started working on a Rails project about a month ago, and a couple of weeks ago I had to do some .NET development for a client. Obviously you can do anything in any of these environments, but I really did find .NET to be the most difficult to work in.
My issue is mostly around tools, not any of the languages themselves. In my ubuntu/rails environment i was up and running in 5 minutes with a text editor and a couple of sudo aptitude commands. With .NET i had to spend hours downloading and installing two different versions of the .NET framework, VS 2010, and SQL Server Management Studio. This was to say nothing of any external libraries. Now that i am up and running and my environment is setup its fine i suppose but frankly it took days just to be able to do hello world. With Rails I was there in 5 min, and it scaled with me. It was proportionally just as easy to get hello world going as something more complicated. The base bar to getting moving in .NET by comparison was several days - and if i wasn't being paid to do it, i never would have just for the sake of playing around.
Maybe the author should consider this possibility:
Startups don't use it, because:
- there may be other technologies that are better for the job
- startups rarely care about Microsoft's heavy marketing which alone can convince a lot of managers to use a technology just because it's from Microsoft
And one of the worst things is that it's a Windows technology, say what you will, but if you want .NET you need Windows, and pay a zillion $-es for license. Yes I know there is Mono, it's very close, but no cigar, it's like wine, it lags.
But in the end I want to ask a question too:
What could .NET bring to startups that other languages can't?
70 comments
[ 2.5 ms ] story [ 108 ms ] threadI personally enjoy working in .net; the entire development process is very smooth and intergrated.
> Enterprise and startups aren’t mutually exclusive – they’re just different stages in the evolution of software
I think that if you told most startups that 'Enterprise' was another stage, a future stage in the 'evolution of software', they'd hang themselves.
If so, Visual Studio isn't as good, but is kind of comparable. It's better than Netbeans. Personally I prefer Eclipse, but I can see that others may prefer VS.
http://www.jetbrains.com/idea/index.html
The same guys make Resharper for Visual Studio. I can't imagine that Visual Studio is better if the Java guys are making a plugin for it. I have heard that for C++, VS is hard to beat, but I haven't done that in a few years.
VS has evolved quite a lot, and I don't acutely miss Eclipse anymore whenever I'm in VS.
There are a lot features related ot other MS products - SQL server, TFS (source code control, bugs tracking), Active Directory, etc.
The ultimate edition comes with web/load test tools. You can record some actions in Internet Explorer, than VS can create a coded test perfroming all the requests and testing the responses.
VS has a historical debugger, called InteliTrace. It can show you the state of an app at any previous point of execution.
Yes, the backhoe might dig the flower bed faster, but it costs $5,000.00 to rent, there's a one-week minimum rental, and its treads tear up your yard to get to the flower bed. On the other hand the shovel may be slower, but you can borrow one from a friend and it doesn't tear up your whole yard. Let's near in mind these are start-ups with limited capital and no time to fill in the holes that your treads tore up in your front yard.
I have yet to hear anyone using LINQ on anything that's not SQL Server, and considering the NIH syndrome in Microsoft, I wouldn't recommend it.
We don't have any issues with our Windows servers, but I guess the number of issues you run into is proportional to your experience. We would have a lot more problems dealing with Linux servers. YMMV.
Neither is the time lost using RDP instead of SSH
Practice makes perfect...
dealing with licenses
What? You buy it, you install it, done?
requiring much more HD space than the alternatives
Now you're just being silly. Are you worrying about HD space in this day and age? Seriously?
and lacking real scripting solutions.
I'll give you this, but I've yet to see the need for such an environment.
I have yet to hear anyone using LINQ on anything that's not SQL Server
Don't use it then? I think LINQ is a horrible idea, and horribly implemented, so I'm staying far, far away from it. I would never use it or SQL Server in a startup, that would be insane.
I see how you could accidentally recruit someone who thinks it's the best thing EVER and starts using it all over, but recruiting people addicted to the wrong bleeding-edge technologies is a hazard no matter which technology you use.
As for installing, Debian/Ubuntu can't get any easier.
And if you need the very latest nginx? Even better, you can script this with bash with little effort. (Complex scripting can be more difficult but that's not what we are doing here)Using SSH is a much, much better solution for administration. I don't depend on having a large screen or fast connection. Believe, when you're managing servers 8000 miles away it makes you want to tear your eye sockets out.
Licensing. You must be kidding. Keeping track of license numbers, WGA validation, and being artificially limited in how I can move OS images around is nothing pleasant. I don't want to depend on anyone's approval for purchasing licenses; I need to download, burn, and deploy.
> I'll give you this, but I've yet to see the need for such an environment. I've been a UNIX sysadmin, I've seen my Windows counterparts. Please do take the opportunity, if you have the chance, to learn about shell scripting on Unix. It's incredible.
> Don't use it then? I think LINQ is a horrible idea, and horribly implemented Alternatives? I don't know of comparable alternatives. I don't think NHibernate would be right, neither do I want to go back to validating raw SQL.
On the same vein, while C# is an excellent language, there's too many sections of .NET and Silverlight that depend on type casting to the point where there's no advantage to using a statically typed language. And unfortunately neither IronPython nor IronRuby are used in the mainstream.
If you go for .NET development, at least do it properly. The up front costs really are an issue, though.
Also, while it is true you can integrate with all sorts of popular open source products such as MySQL, Postgres, memcached, Cassandra, etc you'd have to ask yourself why not just use the environments they are supposed to work with?
Using them with .NET is like doing Windows thick client development in Java - possible, but a horrible experience. It's always the details that kill you. I don't know if you ever had to do Java<->COM integration, but doing that for a while taught me that all platforms have their specialities, and it's a lot easier if you don't fight them.
In the United States the Small Business Administration establishes small business size standards on an industry-by-industry basis, but generally specifies a small business as having fewer than 500 employees for manufacturing businesses and less than $7 million in annual receipts for most nonmanufacturing businesses.
When Microsoft makes something for small business, that's what they are imagining. For a boot strapped hacker working on a website, 500 people and $7 million is a long long way away...
It was only very recently that I stopped running http://www.swfstats.com/ on SQL Server Express.
I think the real difference is it's just not front page news you're doing x with .NET. The web just likes to amplify and exxagerate certain 'accomplishments' ... doing your job in C#, Java, MySQL etc aren't on that list.
ASP.Net controls, postbacks for everything, view state, a general hiding of the actual power of ajax and an obsession with using tables made .Net a terrible web development environment if you had any clue what you were doing. The html it spat out was a bloated horrible mess, web services were anything but unless you really slogged your way through some pain, ashx pages and the directory structure just felt plain wrong.
That said I'd almost, almost, switched to using python/django and then I had a look at MVC and it did everything I needed. Full control over html, nice code separation, a nifty ORM for taking away the pain of basic crud. An alright templating system easily extensible using extension methods. And 3.5 brought some tricks using LINQ and anonymous methods.
I still know I need to learn a few more languages, but MVC has allowed me to copy everything I felt was the 'right' way of developing webs apps from rails/django without having to actually learn a new language and dev environment.
If you weren't worried about performance and didn't want to learn how to actually program, the old ASP.Net was ok for very quickly throwing out web apps for the 10 people in HR. Much more than that required an in depth of knowledge way beyond most .Net programmers, with most of those people being multi-lingual anyway and tending to opt for the cleaner code the alternatives offered.
I don't feel that's the case anymore, but it's way behind in adoption at the moment.
You still hit the occasional WTF in MVC where if feels as if someone wrote a part of the system without reading the memo about flexibility (the validation solution in MVC, for example, is terrible, although not finished and LINQ to entities can be frustrating).
tl;dr;? No startups because until recently good web development in .Net was actually really hard. MVC's changed that.
When I was writing .NET web applications, the sum total of ASP.NET integration was implementing IHttpHandler and friends - not much more than access to the request and response streams. You can build your own lightweight framework, which, being lightweight, isn't a big deal.
For the past two years we've been using our own light-weight MVC framework.
C# and IIS are very versatile technologies, you don't have to buy into the entire Microsoft tool chain to use it, you can use whatever parts you want.
And that highlights the other problem with using the Microsoft stack: There's no community around popular frameworks, the absolute majority use only what comes out of Redmond, and if nothing comes, then they're just stuck.
In the Java community, there were loads of MVC frameworks, people built it, and the popular ones flourished, and people could move on. In the .Net community, nothing really happened until Microsoft themselves made an MVC framework.
So being on the Microsoft stack is more like a roller-coaster than a smooth progression, and that is a problem, because it's not very startup-friendly.
.Net is a set of class libraries and a virtual machine, your rant would carry a bit more weight if you at least got the basic terminology right.
(Although it has to be said that even Microsoft can't get it straight all the time either)
For that matter, when using just the base .NET framework for web development, I fail to see any advantage over Python or Rails beyond familiarity, and many disadvantages.
Yes, but that is not what he said. That the majority of .Net developers are completely hooked on the entire stack is a problem when it comes to recruiting people. That is not the same thing as claiming the .Net stack is rigid and inflexible.
I have only looked at web forms, I guess. Never actually formally been taught anything to do with .net. That was enough to turn me off.
I had almost convinced one of my ASP.Net developer friends who was well fed up with web forms to jump ship to Ruby and Rails with me when .Net MVC came out. After that, there wasn't a whole lot of a compelling reasons for him to start on a whole new language and framework anymore. If only they'd waited a few more weeks! Curse you Microsoft!
I was willing to sympathesize with this article until the visual studio destroying everyone else feature set wise comment. Despite what you may think you are about the topic, you are just inviting a holy war.
As someone who has used visual studio, eclipse, and text mate regularly I would be hard pressed to say that visual studio destroys anything. I would prefer eclipse since it can do things like "open type" and "organize imports" natively. Things that come for free in the free and open source eclipse ide require you to buy the $80 resharper plugin for your $400 ide.
(and for what it's worth, I wasn't the one who downvoted your comment)
Basically, VS.NET wants you to use other MS products as well such as MTM, TFS, to be very very productive in MS environment. Using VS.NET, SVN, TeamCity and a mixed bags of other software will not give a smooth experience compare to using all-MS or go with Open Source.
This is especially telling considering I did work for "the enterprise" and I'm still doing it as a consultant.
Of course, personally I don't need more propaganda and advocacy.
Just last month I created an app for managing the webcams of a client. I used Red5 (the open-source Flash streaming server), in combination with Apache / Django + a MySql database. Besides my billing per hour, the extra cost to the client for the licensing of this infrastructure was $0.
And for my app, while I would love some of the stuff in .NET, I don't want to pay extra for those Windows servers, even if they provided extra-value over Linux (which they don't).
Putting your business hat on ... as a startup or as a pragmatic consultant, paying extra for Windows servers is not worth the price, unless the cost of switching from .NET is big (and really ... which other technology has such a big cost of switching?).
Sure ... it's easier to blame the lack of advocacy. The Perl community is also doing it (and I would rather go with Perl apps hosted on Linux servers than suffer the Windows licensing hell).
I think it's the first time I've met Mono in a product.
On the other side of that, MySQL enterprise licensing is only marginally cheaper than SQL Server, and one might argue lacks features and rich toolsets to work with in the enterprise. And in the end, most web-based startups are really SaaS so yes, you really do need to be thinking in terms of enterprise, and minimizing annual cost of delivery and ownership/subscriber.
It also doesn't spare your costumer (in the case of consultancy services) to buy licenses.
Second ... not everybody can enroll. The company I'm working for has 12 members ... some of them are field engineers that aren't doing programming (I mentioned we do consulting). WebSpark at least is out of the picture.
Third ... these programs are ticking time-bombs. I've worked on and off on several personal projects for the last 5 years (I'm doing it part time). 3 years is not enough, unless you have a good idea that you're sure it's going to work (and this doesn't happen that often).
> MySQL enterprise licensing is only marginally cheaper than SQL Server
A startup-founder would be too dumb to pay for MySql support.
HINT: you get all the support you need from its community, especially if you attend conferences and buy a round of beer to its core devs ;)
also the trends setup by VC's like YCombinator, good college/university like MIT is, you can make cool products with open source ecosystem.
not sure how much you would remember, about 15 years ago it used to cost a large chunk of money to build scalable apps as 70% of the investment was sunk into datacenter acquisition.
another cool aspect is lot of new popular apps like posterous, started out as a single usable idea were implemented over a weekend and polished with multiple iterations.
licensing cost is still a big negative for those have discovered the power of open source technology, also the community is lot more evolved in sharing the expertise.
application frameworks like Ruby on Rails played a big role in getting the best practices like MVC Architecture, source code management, TDD/BDD, code generation, reuse in open source web frameworks
cloud computing infrastructure like amazon web services and linode VPS maks people experiment new projects at lot less cost.
Personally I have problems with many .Net developers who are "fish out of water", when it comes to living without the Visual Studio IDE. standards and features like XHTML, AJAX(prototype, jquery others ) came lot later in .Net programmers toolset until Internet Explorer was the leading in developer mindshare.
"Come be an effective software engineer in today's new start up and use .NET to change the internet!"
or
"Laid back atmosphere, free pizza, Ruby and text mate. Let's get at it."
MS is a tool set - not technology. Hackers are very opinionated and want to do things their own way. In my experience, .NET, VB, Visual Studio (all while great tools) require you to do things one way, their way. That just doesn't sit well.
Then of course there is cost, stigma, lock-in, etc. Start ups are the anti-Microsoft, using it as a platform to build their technology, from a very fundamental level, is dissonant.
It certainly is culture shock, and its not going to get any better for Microsoft in these markets. But they don't care, their business isn't designed for it. Microsoft doesn't do consumer products well. If you think about it, the only reason DOS got in front of everyone is because they were able to sell it to IBM.
That is simply not true. However, I agree that breaking out of the MS mold requires more effort than it does for other technologies, and if you couple that with the fact that the overwhelming majority of .Net developers available are unable to do so, then you get a major reason not to do a startup using .Net technologies, it's simply extremely hard to recruit the right people.
Now Visual Studio is a tool. But not fundamentally different than a tool like Vi or Emacs. And csc is not fundamentally different than gcc.
To be honest, that's not my experience. I've found that .NET gives you a lot of freedom, however things can be indeed easier if you do things the "recommended" way, but there's also an "if that's what you want, you can do it if you think you know what you're doing" mentality as well in the design of the framework. I mean, C# even has pointers which is quite uncommon in similar high-level languages, albeit well hidden so you only get to use them if you really want to.
Contrast that to Python's famous "there's only one way to do it" philosophy. Don't get me wrong, I think Python is really great stuff but I think it's unfair to say that .NET (as opposed to Ruby or Python) forces you to do things "one way, their way". If you want to do web development, you can choose between MVC and the (kind of) continuations of WebForms; imperative or functional, direct SQL, LINQ or the Entity Framework etc. - there are a lot of choices to be made.
sounds an awful lot like
No wireless. Less space than a nomad. Lame
Even for the nerdy, a long feature list is not what actually makes people want to use a tool. In the case of Emacs, it's the customizability. With Vim, it's the simplicity, speed and focus on its purpose. Other environments have their own advantages that don't fit neatly in to a feature list.
Vim is here, now, the very second you need it, over an SSH connection, and far, far more customizable and with more useful plugins. The advantages of Visual Studio (namely, integration of features and great code completion) are lost when a framework fits in your head and you've automated most of your tools.
I say this as a person that spends 50% of his time on VS, the rest on Vim.
Second, how is Vim more customizable than VS? I can't think of anything I can't do in VS. There's plenty I can't do in Vim.
Vim does load faster. Although single file load with VS isn't too bad, but certainly no Vim.
And don't use TFS... that's just bad mojo.
I say this as a person who spent 12 years of his life using Vi/Vim before touching VS for the first time.
HOWEVER, the second that Sharepoint enters the equation, I turn, run, and dont look back. What a horrendous kludgefest that is...
Another problem is most MS internal developers still live in the 80s. You can hear "Real man write C++" all the time. Just browse the source code, written by MS employes, on Codeplex. They write C++ in C#. The APIs are out of this world - 25 or 50 lines of code to use a simple feature is no problem.
- IComparable
- IComparable(Of T)
- IEquatable(Of T)
- IStructuralEquatable
- IStructuralComparable
- IEqualityComparer
- IEqualityComparer(Of T)
- IComparer(Of T)
- overriding Object.Equals
- overriding operators <,>, <=, >=, =, <>
...it's time to find a new language.
edit: Just imagine you encounter a new collection BozBag(Of T) which has to test your objects for equality. Without looking at documentation could you as a coder possibly know if BozBag uses x.Equals(y), x = y, x.CompareTo(y) = 0? Heck it could even use x.Equals(DirectCast(y,Object)) or x.CompareTo(DirectCast(y,Object)). The only way to really know is to dig through documentation.
- The "Structural*" types are new in .Net 4.0, you never had to understand them before and you probably don't need to even know they exist now.
- Many of these listed are just generic vs non-generic. The generic ones subclass the non-generic ones, so contraviance eliminates the need to really understand the distinction upfront.
- Compare means Compare(a,b):int which returns -1, 0, 1.
- Equals means Equals(a,b):bool
- If it ends in "er" it is a functor which operates on two free objects instead of "able" which means one subject of comparison is "this".
- Overriding individual operators gives you more flexibility than Compare(a,b):int because you can use specific algoritms for specific comparisons.
Maybe it's time to find a new arbitrary reason to hate .NET?
You're right, I scooped those off MSDN and never use them myself. All the others, however, have made numerous appearances in my code. I think that the preponderance of comparisons is a language smell-- it's not close to my only problem with .NET development but I think it captures the essential headache-inducing inelegance of C#/VB programming. That language-blob has little regularity but much accretion. There are rarely sane defaults nor any overarching design for your mind to latch onto. After time spent with saner languages (Python, Haskell, Ruby, OCaml, etc...) coding in .NET feels terrible.
As someone who has done A LOT of professional C# development: I've found that with only a few exceptions, the .NET base class libraries are very well designed with entirely reasonable defaults. I use Python primarily now and, in general, the core .NET libraries seem to be better designed than most of the older Python libraries (many of which are getting properly cleaned up in Python 3).
Every environment has its cruft.
My issue is mostly around tools, not any of the languages themselves. In my ubuntu/rails environment i was up and running in 5 minutes with a text editor and a couple of sudo aptitude commands. With .NET i had to spend hours downloading and installing two different versions of the .NET framework, VS 2010, and SQL Server Management Studio. This was to say nothing of any external libraries. Now that i am up and running and my environment is setup its fine i suppose but frankly it took days just to be able to do hello world. With Rails I was there in 5 min, and it scaled with me. It was proportionally just as easy to get hello world going as something more complicated. The base bar to getting moving in .NET by comparison was several days - and if i wasn't being paid to do it, i never would have just for the sake of playing around.
Startups don't use it, because: - there may be other technologies that are better for the job - startups rarely care about Microsoft's heavy marketing which alone can convince a lot of managers to use a technology just because it's from Microsoft
And one of the worst things is that it's a Windows technology, say what you will, but if you want .NET you need Windows, and pay a zillion $-es for license. Yes I know there is Mono, it's very close, but no cigar, it's like wine, it lags.
But in the end I want to ask a question too: What could .NET bring to startups that other languages can't?