Where Is .Net Headed?
odetocode.com
odetocode.com
It's got all the awesome features most of which are very elegantly implemented and accessible in a very streamlined fashion. Obviously if you hate C-syntax, C# isn't going to win any brownie points, but in terms of sheer power and flexibility, C# 5.0 steals the cake by a huge margin. Lambdas, parallelization, anonymous functions, interop with C functions, fast compilation, "fast" execution, awesome bytecode, and more. Constantly iterating, but not breaking with the original design goals.
It's borrowed the right features from the right languages, the right syntax from the right languages, and the right design choices from the right languages.
(Although I do dislike how the new dynamic keyword is implemented. It throws then catches too many exceptions under the hood and people really need to understand it before they use it. It was primarily designed to convert unknown/random JSON to a C# object on the fly and should not be abused. Many people coming from dynamically-typed, loosely-defined languages might think it's an easy way of adapting to the traditionally statically-typed and statically-defined C#... not so.)
(And, like it or not, it really is a cross-platform language. Mono does count and is pretty awesome. Esp. if you think about the compatibility of the language and not the framework.)
I'm still a die-hard C/C++ coder, but C# won my heart a long time ago.
C# 5.0? Take a look at this example code from the MSDN blog which is "showing off" the new features of C# 5.0. (It was formatted this way with no indentation on the blog). This example, not by coincidence, demonstrates how .NET interfaces with the web.
private async void
btnTest_Click(object sender, EventArgs e)
{
var request = WebRequest.Create(txtUrl.Text.Trim());
var content = new MemoryStream();
Task<WebResponse> responseTask = request.GetResponseAsync();
using (var response = await responseTask)
{
using (var
responseStream = response.GetResponseStream())
{
Task copyTask = responseStream.CopyToAsync(content);
//await operator to supends the excution of the method until the task is completed. In the meantime,
the control is returned the UI thread.
await copyTask;
}
}
txtResult.Text = content.Length.ToString();
}
What does that code do? It works behind a form running on the desktop, where you press a button to do an async HTTP request and display the content length of the response.First of all, why would I want to create an application that runs on the desktop, rather than build a web application that I can show to people with a link? Especially
If I were going to do the same thing with a web application then I would probably do something like this in CoffeeScript:
$.get $('#url').val(), (res) -> $('#res').val res.length
I'm sorry, but I don't see C# as being the most damn awesome all-around language. I like CoffeeScript, or maybe even better, LiveScript (http://livescript.net). Or failing that, plain-old JavaScript. var HtmlLength = new WebClient().DownloadString("http://news.ycombinator.com").Length;
or if you want the length in bytes: var ByteLength = new WebClient().DownloadData("http://news.ycombinator.com").Length;
Want to do it asynchronously? var ByteLength = new WebClient().DownloadDataTaskAsync(url).Length;
That code sample you posted is to demonstrate in a rather loquacious fashion the new C# 5.0 features.As for why create a desktop application rather than a web-based app, I'm not even going to dignify that with a response. Apples and oranges.
res.Text = (await new HtppClient().GetStringAsync(url.Text)).Length.ToString();
(Disclaimer: I work at MS.)
$.get $('#url').val(), (res) -> $('#res').val res.length
Or using LiveScript backcalls is even cooler: data <-! $.get '/x.html'
$ \.res .val data
Or in IcedCoffeeScript if you like 'await' await $.get 'documentation/css/docs.css', defer res
console.log res
Or check out the huge list of languages that compile to JavaScript at http://altjs.org/To take proper advantage of the hardware and provide proper integration with the operating system.
The browser is for documents.
Xamarin (the monodevs) are doing some really interesting stuff:
http://xamarin.com/evolve/2013
Frameworks such as MvvmCross allow you to target iOS, Android, Windows 8 Mobile, Windows 8 Store, WinRT, WPF all using the same codebase using the MVVM Pattern. Write your code business logic in a PCL and share it across all platforms, i.e. 80% code re-use on mobile, write your UI for each platform and link against your shared core business logic PCL.
https://github.com/slodge/MvvmCross
Oh, you can do all of the above, program for all those platforms (iOS included) in Visual Studio with either C# or F# using async/await and linq.
Disclaimer: I went to #evolve, if you use .NET and didn't go then sorry to say you missed out ;-)
Personal highlights from the conference include:
- C# async/await on iOS, Android announced and available in the beta update channel.
- Xamarin acquires Calaba.sh (lesspainful), announces the future of automated mobile phone testing: http://xamarin.com/evolve/2013#session-xcjpj20d6s
- 80% code reuse case study: http://xamarin.com/evolve/2013#session-shy07zqsoz
- Behind the scenes with the award winning game Bastion (monogame): http://xamarin.com/evolve/2013#session-mazw2c15qr
- (Scott Hanselman) How C# Saved my Marriage, Enhanced my Career and Made Me an Inch Taller: http://xamarin.com/evolve/2013#session-umfpnw90c9
- (Josh Collins - @GlobalMoxie) Buttons are a hack: can't wait for vid to be uploaded...
Open source is not the solution to every problem.
There are businesses that value the support, packaging, and overall completeness of the .NET stack. Yes, they cost money to deploy, but so do open source alternatives. People will argue that MS will lock you down. Yet, if you start developing under Rails or Django, its pretty hard to move away when things get going.
I loved Amazon EC2 too but Azure was far cheaper for high use Windows VMs.
Another option is to switch to mono and run your .net apps with EC2's Linux prices. Then it's even cheaper than Azure. This is what I did for my current project.
So where does that leave Windows for internet servers?
We're currently in the process of getting ready for a migration to Sharepoint Server 2013 which will cement the company with .Net for at least the next two to three years. We still have several sites on the old 2007 platform with no hint of moving those over any time soon.
I'm wondering what you see as viable open source alternatives to the .Net platform.
Also, we have a handful of .Net developers and they've all said a majority of the work they've had in the last year did not involve MVC3 or MVC4 so I'm also wondering what the future of this platform will be.
Mono? http://en.wikipedia.org/wiki/Mono_(software)
Or going in a different direction with similar goals, Qt.
You are funny.
Don't get me wrong, Mono is awesome. But it's not about to be adopted by Fortune 500 companies across the world.
But, above all, the biggest problem is not technical and not Mono itself: it is Xamarin. The money decisions on big companies are made by people that need to tell to non-technical bosses and shareholders why they did what they did. And it is much easier to talk to them about Microsoft than about Xamarin.
Remember the "no one ever lost their job for buying IBM"? It works for MS, now.
To be fair though, the parent I was replying to did not define in what capacity .net would be replaced and how and taking replies as a black and white answer to a gray area question is a bit factitious (this part was not meant as a directly reply to the parent of this reply).
Incorrect assumption (source: developer at huge corporation on huge projects)
Point is, there was no huge shift to MVC after it was released. A ton of web projects are still made using WebForms and will continue to be. MVC will continue to be a minority framework.
I think the shift has quietly occurred because everyone wants at least a little AJAX, and everyone wants jQuery, and once you've thrown those in the mix, who wants to do that using WebForms?
Why would you assume that if they can't move to a new architecture, they'll move to a new language and OS?
.NET vs Ruby is a whole holy war which I'm not going to get into, but there are a lot of people out there who like to get shit done, and find that .NET (and MVC) works just fine (great even) for that.
I used it for adding the boilerpipe Java library to navigate HackerNews by voice! Details at: http://blog.databigbang.com/voice-recognition-content-extrac...
So those features are not mappable to the JVM.
Scala goes to great extents to try to live without tail call optimization.
Mono is pretty damn complete. The stuff I've found it to be missing are very Windows-centric stuff and wouldn't fit in a Unix environment anyway.
Microsoft is using the same business tactics that they've employed since the PC wars in the 90s, since they hit critical mass of market share, just with a bit more finesse. Microsoft allows Mono's existence only because it feeds into their power play, by creating more dependency and familiarity with .NET. They make the basics open and provide some interoperability, but then lay on proprietary extras that eventually become hard dependencies organically (like WPF) as a function of Microsoft's monopolization of the market ("why wouldn't I use this tool that makes things way easier? it will work great in our environment"). It's all EEE. Microsoft's MO, then and now.
Then all of the sudden, iPads exist. Xamarin is in a killer market.
Regardless of the formal action, the clear message from MS upon release of WPF was: "This is the new official GUI builder, please use it, it should be preferred". Indication of such preferences is relevant. Or do you suggest that MS released WPF with the intention that no one would ever use it?
One of my longer-term goals is to move us to a stack that's entirely Mono-compatible, but that will take a while. The whole company runs on WPF.
Meanwhile, in the real world, Microsoft posted these earnings:
"Server & Tools business reported $5.04 billion of revenue, up 11% from last year"
Inspite of competing products like Linux, Apache, Eclipse, Ruby, Java being given away for free, people are willing to pay for Windows Server, Visual Studio and IIS.
Does anyone have real data related to ".NET is dying" other than idle conjecture, short sighted "frog in the well" anectodes which sound like they're written and voted up by people sipping on a latte on a Macbook in a Starbucks in Silicon Valley?
Like the number of jobs posted? They seem to increasing every day.
Sigh, some people here just love these '.NET is dying' posts, perhaps some with a vested interest to scare startups from using it.
Again, any hard data will be appreciated that shows .NET is dying instead of the same paragraph upon paragraph of opinion and no links, references or data, we have enough HN comments of that already.
So, yes, most microsoft products are incredibly damaging for a startup.
Prime example: Stackoverflow/StackExchange is built on the Microsoft stack.
>This is the same selling scheme used by drug dealers.
Would you hold Google to the same standard and say that's true of their free Google Apps for education and how they use free email to sign you into Google.com so they can track you across different PCs?
If not, cool. But if so, would be good to be clear. You've suddenly become very active with what I'd consider an overly Microsoft approach (looking at your comments from the past few hours).
(ex 'softie here).
Please explain. The rules seem pretty simple to me and certainly something every company can follow:
- Privately held.
- Less than 3 years old.
- Earning less than $1 million per year.
- Developing software.
After 3 years you can afford to purchase extra licenses (you get to keep the BizSpark ones). If not, your business sucks.Disclaimer: BizSpark member.
While I suppose in theory Joel could have thrown a lot of money away just because it didn't happen that way. Stack Overflow was running on it's own income until the first round of funding ( http://blog.stackoverflow.com/2010/05/announcing-our-series-... ), excepting the pre-launch period (everyone might have just taken equity then, I don't know I wasn't around until just before the series A). I think it was mostly ad income, though Careers ( http://careers.stackoverflow.com/ ) was around fairly early too.
Disclaimer: Stack Exchange employee
Stack Exchange is cool and everything, but it didn't have the same difficulties that face most bootstrapped startups.
In any case, if you want to work with the best tools, sometimes you have to pay a premium to get them. That's either damaging to people who can't/won't pay the money or it's an advantage for those with enough confidence in what they're doing to make the investment, depending on which side of the line you're on.
(a) The money YC is giving isn't intended to solve capex problems like this. It's meant to make the first couple months of getting a minimal offering viable for small early teams. In the YC model, if the problem your business solves involves significant capex costs, you use YC to match your company with a next round of investors to handle that problem.
(b) The reality is that you do get enough money to fund a .NET stack when you get into YC, because YC comes with an assurance of immediate follow-on convertible note investment.
Neither of these two points makes .NET a better choice for early-stage startups than Rails or Django or PHP; Microsoft has to smooth over the expense problem with programs like Bizspark.
How you would do a startup in a world without BSD and Linux, just with commercial vendors?
There are more out there than just Apple and Microsoft.
Not every startup has to work with the small amount YC hands out. I know of a fair amount of startups using an MS stack, and they are doing very well. Of course, they are not SV cool, but they are making good money. You should sit back and analyze what you just said, because it is a pretty strange point to make.
In my last employer (government), we didn't choose .NET, microsoft won the contracts. In the last update when I still worked there, we spent 250k USD to update our programmers VS to 2010 + windows 7. (I wonder if they will now update again). SQL Server prices are similar to oracle's with similar features.
In my startup (not a startup anymore) I had to spend 40k just to get the environment needed for a project (involving telephony) the only reason we had to use .NET was because the hardware manufacturer only provided driver+tooling for windows and some components were exclusively for .NET. Because we mostly use linux and macs, we also had to buy windows licenses. In my country, a Windows 8 license cost almost 2x the minimum wage.
We happened to have a discussion if we should give up or not a specific product because of the microsoft taxation on our business. The only reason we decided to keep using .NET is the cheap labor and the lack of hardware suppliers willing to provide us drivers and tools for linux.
So yes, microsoft damages not only startups, but companies in general.
Oracle (DB product) is the wrong choice for most startups, I actually wrote a post about that some time ago: http://eduardo.intermeta.com.br/posts/2013/2/1/this-is-why-y...
And I think that is one of the main reasons that many .NET developers who are a little bit familiar with open source and non-Microsoft technologies are starting to wonder if its worthwhile paying all of that money to have Microsoft make all of those architectural decisions for them.
Just start with the name, ".NET". What were they referencing there? The network. The web. Especially if you interpret that to mean the web, which I think it really is referring to, you have to ask yourself, is Microsoft or ANY one particular company really leading the way on the web? I think the answer is no. The leaders may be employed by some particular companies like Google, but they are mainly organizing projects on their own through things like github.
They chose that name for a reason. They knew if they wanted to stay relevant, they needed to focus on the web.
Does web development need Microsoft? Ask the average web developer. Personally, I don't think I can ever forgive them for what they have done (and continue to do) to Internet Explorer.
Does Microsoft need web development? Actually they are opposing forces when it comes right down to it. Microsoft makes too many billions of dollars through Windows-related products to really push the web platform forward. So they have actively been working to impede it by pushing out incompatible and underpowered browsers.
Can Microsoft's traditional licensing revenue streams survive a real conversion to open-source? LOL.
I don't buy that for a minute.
The Windows Server division is one of the fastest growing divisions inside of Microsoft.
From their last Q3FY13 report revenue from server and tools grew 11% driven by SQL server and Windows Server growth.
Based on those figures business is scrambling to buy into the Microsoft toolchain, not trying to leave.
With cross-platform compatibility, specifically mobile compatibility [on platforms people actually use, i.e., not Windows Phone], being a major sticking point, .NET is becoming less and less desirable on the surface level.
Microsoft is just like Oracle. Big fancy businessmen who know nothing about development automatically buy into the MS stack just because it's a big name and the labor is easy to retain. Hardly any technical considerations go into it, and then they're upset when they [eventually] learn that the end result won't work with the iPad.
What about the alternate explanation that Windows Server is growing because demand for the products that already use Microsoft's stack is growing, despite the stack itself? What about the explanation that people are buying more server licenses than they used to due to increasingly widespread virtualization deployments? Whereas people used to buy relative big metal and run one OS on it, now people are taking that hardware and deploying many small VMs across it, each requiring its own license?
There are plenty of interpretations of that data that aren't "people are flocking to .NET".
My point is I doubt very much the server division would be doing as well as it is if the Op was correct in saying people are locked into that toolchain.
Because that would suggest a lot of people would be unhappy with that situation (i.e. meaning bad press, bad word of mouth, bad for business) and many of those would also be trying desperately to leave that toolchain and succeeding (i.e. reduced sales).
The sales figures indicate the opposite is true.
Moving away from .NET is a long-term proposition, and it's an expense that few companies can justify no matter how much they dislike the platform. I believe you are claiming far too much credit for MS based off of a single growth figure.
What change in the way servers are provisioned? Many companies still use Windows Server 2003 and even .NET 4.5 is supported on it. That sounds like FUD.
>They can still be quietly unhappy, locked into the platform with hundreds of thousands of man-hours invested into proprietary applications
They can also be happy with the ease of use of Active Directory and Group Policy instead of relying on half baked convulted perl scripts cooked up by a long gone sysadmin. Please, you're just embarassing yourself with your ignorant assumptions.
I explained this in my initial post in this thread. Virtual machines are having a major effect on the provisioning of servers, requiring more OS licenses than prior. The person I replied to conceded this point.
>They can also be happy with the ease of use of Active Directory and Group Policy instead of relying on half baked convulted perl scripts cooked up by a long gone sysadmin.
LDAP
>Please, you're just embarassing yourself with your ignorant assumptions.
You weren't capable of processing my first post, and are now harassing me for discussing Microsoft in a MS thread, so who should be the embarrassed one here?
Thanks for doing exactly what the OP requested commenters NOT to do.
From the OP post:
"Does anyone have real data related to ".NET is dying" other than idle conjecture, short sighted "frog in the well" anectodes which sound like they're written and voted up by people sipping on a latte on a Macbook in a Starbucks in Silicon Valley?
Again, any hard data will be appreciated that shows .NET is dying instead of the same paragraph upon paragraph of opinion and no links, references or data, we have enough HN comments of that already."
The world is much much much bigger than what you saw in all your working years. That's why personal anecdotes are quite worthless and we need real numbers.
So many paragraphs of speculation and no links or references from people living in their own little bubble and mistaking it for the world.
I countered jussij's perspective, equally posted without "links or references" (which don't necessarily make something valid, fyi), with my own. I didn't reply to the parent post that said "please don't say anything mean about .NET unless you can prove it". That poster is not the internet police, we are free to continue to speculate and navel-gaze and counter-navel-gaze despite his or her statement.
So, you're welcome.
No, he posted a publicly verifiable figure which is audited by the SEC and punishable with heavy penalties for faking, 11% increase of revenue in the quarter, up from last years quarter, whereas you continue the trend of the thousand other HN comments which say .NET is dying because they personally don't know of a company using it. How many companies do you know? How many companies exist in the US? Keep up the navel gazing. Your other posts also are idle speculation hopelessly stuck in your own bubble and your post is not very different from line noise at this point.
>Keep up the navel gazing.
Thanks, I will. I enjoy sharing opinions and interpretations and getting feedback on these. I don't find discussion fora where all of our posts need bibliographies very exciting in general.
Which regions did you work at?
In fact the customers hate Microsoft so much they decided to pay Microsoft an extra 11% bonus this year (and will probably pay another 11% bonus next year), even though they have all these free toolchain alternatives that they could be using.
And I never said they hated MS. I just said that increased revenue doesn't necessarily mean anyone is consciously buying in. Upgrading the old Exchange Server and adding another Domain Controller makes MS more money but for the IT department, the decision is simply "keep what we have under support and updated".
If you want to gauge how happy IT is with MS, you need to look at what they're choosing for brand new projects.
My anecdotal experience is that (happily or not) MS shops continue to choose MS. And small shops that couldn't afford MS anyway continue to not choose MS.
And the red herrings about the name .NET don't make any sense except if you look from the context of the prevalent buzzwords and jargon at the end of 90s. Like, say "dotcom".
PS: I have seen it both ways, Java redeveloped in .Net and .Net redeveloped in Java. Generally things where better in the .Net world. I spent years as a Java developer and find the idea of going back is horrifying.
So, they made in a year something around what Apple makes every quarter just from iPad sales? That's the rosy sign MS's "Servers and Tools" business is doing OK?
That's their server and tools revenue in a quarter, not a year. In your rush to compare it with an irrelevant and totally unrelated figure you've taken leave of facts and reality.
Why not compare the yearly figure now with how much Exxon makes by selling gas and then conclude the Server and Tools division is not doing okay? I mean that's what you want to conclude right?
Haven't taken out any facts -- the parent poster (you?) didn't add it was a quarter result in the first place. And the "X% up from last year" didn't help.
That said, it's totally unrelated only in that the end product sold is different. People still compare companies based on their revenue all the time -- including totally different beasts such as IBM and MS, or, indeed, Exxon and Apple. If you want to measure relative strength it's quite insightful.
>Why not compare the yearly figure now with how much Exxon makes by selling gas and then conclude the Server and Tools division is not doing okay? I mean that's what you want to conclude right?
No, I want to conclude that MS, and their enterprise sales specifically, which was once the huge behemoth of the computing industry, makes a not that impressive revenue compared to other players.
It might even be their best revenue ever. It still is worse compared to what they made vs what other companies made a decade or so ago.
In other words, the point I tried to make, maybe unsuccessfully, is that they might be billionaires, and they even might more than ever, but whereas once they used to own the town, now there are several other billionaires around, including some multi-billionaires.
So how is all that related to the article idea's and the OPs point about the FUD on HN about .NET dying? Is .NET dying because Apple makes more money selling iDevices than Microsoft's Dev tools?
Lets be upfront here about the topic being discussed, is it "Where is .NET headed?" or is it "Does MS make less money than its competitors and therefore sucks?"
It's not about sucking or not. It's about if it's as a big player as it used to be, or if the wind got sucked out of it's wings, and now is on decline mode.
Nobody said anything about "sucking" or that it will die financially tomorrow. It might still be around 2 centuries later.
Amazon's AWS, on the other hand, is estimated to have brought in between $1.5 and $2 billion (http://go.bloomberg.com/tech-deals/2013-03-07-what-if-amazon..., http://www.informationweek.com/cloud-computing/infrastructur...) during the same period.
So while Azure is still booking less business than AWS is, it's definitely a major competitor. Maybe the major competitor. And since the market for virtualized platforms is still in early days, there's lots of room for that revenue figure to grow substantially even if Azure ends up stuck at #2 behind AWS forever.
I have worked for years as a .Net consultant, and I had no idea Azure had grown this quickly. A couple of years ago, I thought their entire set of literature was counter-intuitive, and I quit paying attention to them.
How on Earth did they grow to be in AWS's league so quickly? Surely just getting the "default Microsoft business" wasn't enough to put them at $1 billion ??
One month, web sites, another virtual machines, then Hadoop. Oh, wait, and mobile services. The list goes on; they've catched up with Amazon on offerings more or less.
Oh and let's not forget that Azure support is fucking awesome.
I see Azure as a cloud service for Windows dev, I might be wrong it, Azure may just have an image problem but it just doesn't ring a bell outside the Windows world.