Tuesday, 14 June 2016

After all, it might not matter - A commentary on the status of .NET


Did you know what was the most menacing nightmare for a peasant soldier in Medieval wars? Approaching of a knight.

Approaching of a knight - a peasant soldier's nightmare [image source]

Famous for gallantry and bravery, armed to the teeth and having many years of training and battle experience, knights were the ultimate war machine for the better part of Medieval times. The likelihood of survival for a peasant soldier in an encounter with a knight was very small. They should somehow deflect or evade the attack of the knight’s sword or lance meanwhile wielding a heavy sword bring about the injury exactly at the right time when the knight passes. Not many peasant had the right training or prowess to do so.


Appearing around 1000 AD, the dominance of knights started following the conquest of William of Normandy in 11th century and reached it heights in 14th century:
“When the 14th century began, knights were as convinced as they had always been that they were the topmost warriors in the world, that they were invincible against other soldiers and were destined to remain so forever… To battle and win renown against other knights was regarded as the supreme knightly occupation” [Knights and the Age of Chivalry,1974]
And then something happened. Something that changed the military combat for the centuries to come: the projectile weapons.
“During the fifteenth century the knight was more and more often confronted by disciplined and better equipped professional soldiers who were armed with a variety of weapons capable of piercing and crushing the best products of the armourer’s workshop: the Swiss with their halberds, the English with their bills and long-bows, the French with their glaives and the Flemings with their hand guns” [Arms and Armor of the Medieval Knight: An Illustrated History of Weaponry in the Middle Ages, 1988]
The development of longsword had provided more effectiveness for the knight attack but there was no degree of training or improved plate armour could stop the rise of the projectile weapons:
“Armorers could certainly have made the breastplates thick enough to withstand arrows and bolts from longbows and crossbows, but the knights could not have carried such a weight around all day in the summer time without dying of heat stroke.”
And the final blow was the handguns:
“The use of hand guns provided the final factor in the inevitable process which would render armor obsolete” [Arms and Armor of the Medieval Knight: An Illustrated History of Weaponry in the Middle Ages, 1988]
And with the advent of arbalests, importance of lifelong training disappeared since “an inexperienced arbalestier could use one to kill a knight who had a lifetime of training”

Projectile weapons [image source]

Over the course of the century, knighthood gradually disappeared from the face of the earth.

A paradigm shift. A disruption.

*       *       *

After the big promise of web 1.0 was not delivered resulting in the .com crash of 2000-2001, development of robust RPC technologies combined with better languages and tooling gradually rose to fulfill the same promise in web 2.0. On the enterprise front, the need for reducing cost by automating business process lead to the growth of IT departments in virtually any company that could have a chance to survive in the 2000s decade.

In the small-to-medium enterprises, the solutions almost invariably involved some form of a database in the backend, storing CRUD operations performed on data entry forms. The need for reporting on those databases resulted in creating business Intelligence functions employing more and more SQL experts.

With the rise of e-Commerce, there was a need for most companies to have online presence and and ability to offer some form of shopping experience online. On the other hand, to reduce cost of postage and paper, companies started having account management online.

Whether SOA or not, these systems functioned pretty well for the limited functionality they were offering. The important skills the developers of these systems needed to have was good command of the language used, object-oriented coding design principles (e.g. SOLID, etc), TDD and also knowledge of the agile principles and process. In terms of scalability and performance, these systems were rarely, if ever, pressed hard enough to break - even with sticky sessions could work as long as you had enough number of servers (it was often said “we are not Google or Facebook”). Obviously availability suffered but downtime was something businesses had used to and it was accepted as the general failure of IT.

True, some of these systems were actually “lifted and shifted” to the cloud, but in reality not much had changed from the naive solutions of the early 2000s. And I call these systems The Simpleton Swamps.

Did you see what was lacking in all of above? Distributed Computing.

*       *       *

It is a fair question that we need to ask ourselves: what was it that we, as the .NET community, were doing during the last 10 years of innovations? The first wave of innovations was the introduction of revolutionary papers of on BigTable and Dynamo Which later resulted in the emergence of NoSQL movement with Apache Cassandra, Riak and Redis (and later Elasticsearch). [During this time I guess we were busy with WPF and Silverlight. Where are they now?]

The second wave was the Big Data revolution with Apache Hadoop ecosystem (HDFS, Pig, Hive, Mahout, Flume, HBase). [I guess we were doing Windows Phone development building Metro UI back then. Where are they now?]

The third wave started with Kafka (and streaming solutions that followed), Grid Computing platforms with YARN and Mesos and also the extended Big Data family such as Spark, Storm, Impala, Drill, too many to name. In the meantime, Machine Learning became mainstream and the success of Deep Learning brought yet another dimension to the industry. [I guess we were rebuilding our web stack with Katana project. Where is it now?]

And finally we have the Docker family and extended Grid Computing (registry, discovery and orchestration) software such as DCOS, Kubernetes, Marathon, Consul, etcd… Also the logging/monitoring stacks such as Kibana, Grafana, InfluxDB, etc which had started along the way as an essential ingredient of any such serious venture. The point is neither the creators nor the consumers of these frameworks could do any of this without in-depth knowledge of Distributed Computing. These platforms are not built to shield you from it, but to merely empower you to make the right decisions without having to implement a consensus algorithm from scratch or dealing with the subtleties of building a gossip protocol.


And what was it that we have been doing recently? Well I guess we were rebuilding our stacks again with the #vNext aka #DNX aka #aspnetcore. Where are they now? Well actually a release is coming soon: 27th of June to be exact. But anyone who has been following the events closely knows that due to recent changes in direction, we are still - give or take - 9 to18 months far from a stable platform that can be built upon.

So a big storm of paradigm shifts swept the whole industry and we have been still tinkering with our simpleton swamps. Please just have a look at this big list, only a single one of them is C#: Greg Young’s EventStore. And by looking at the list you see the same pattern, same shifts in focus.

.NET ecosystem is dangerously oblivious to distributed computing. True we have recent exceptions such as Akka.net (a JVM port) or Orleans but it has not really penetrated and infused the ecosystem. If all we want to do is to simply build the front-end APIs (akin to nodejs) or cross-platform native apps (using Xamarin studio) is not a problem. But if we are not supposed to build the sizeable chunk of backend services, let’s make it clear here.

*       *       *

Actually there is fair amount of distributed computing happening in .NET. Over the last 7 years Microsoft has built significant numbers of services that are out to compete with the big list mentioned above: Azure Table Storage (arguably a BigTable implementation), Azure Blob Storage (Amazon Dynamo?) and EventHub (rubbing shoulder with Kafka). Also highly-available RDBM database (SQL Azure), Message Broker (Azure Service Bus) and a consensus implementation (Service Fabric). There is a plenty of Machine Learning as well, and although slowly, Microsoft is picking up on Grid Computing - alliance with Mesosphere and DCOS offering on Azure.

But none of these have been open sourced. True, Amazon does not Open Source its bread-and-butter cloud. But considering AWS has mainly been an IaaS offering while Azure is banking on its PaaS capabilities, making Distributed Computing easy for its predominantly .NET consumers. It feels that Microsoft is saying, you know, let me deal with the really hard stuff, but for sure, I will leave a button in Visual Studio so you could deploy it to Azure.


At points it feels as if, Microsoft as the Lords of the .NET stack fiefdom, having discovered gunpowder, are charging us knights and peasant soldiers to attack with our lances, axes and swords while keeping the gunpowder weapons and its science safely locked for the protection of the castle. .NET community is to a degree contributing to the #dotnetcore while also waiting for the Silver Bullet that #dotnetcore has been promised to be, revolutionising and disrupting the entire stack. But ask yourself, when was the last time that better abstractions and tooling brought about disruption? The knight is dead, gunpowder has changed the horizon yet there seems to be no ears to hear.

Fiefdom of .NET stack
We cannot fault any business entity for keeping its trade secrets. But if the soldiers fall, ultimately the castle will fall too.

In fact, a single company is not able to pull the weight of re-inventing the emerging innovations. While the quantity of technologies emerged from Azure is astounding, quality has not always followed exactly. After complaining to Microsoft on the performance of Azure Table Storage, others finding it too and sometimes abandon the Azure ship completely.


No single company is big enough to do it all by itself. Not even Microsoft.

*       *       *

I remember when we used to make fun of Java and Java developers (uninspiring, slow, eclipse was nightmare). They actually built most of the innovations of the last decade, from Hadoop to Elasticsearch to Storm to Kafka... In fact, looking at the top 100 Java repositories on github (minus Android Java), you find 24 distributed computing projects, 4 machine library repos and 2 languages. On C# you get only 3 with claims to distributed computing: ServiceStack, Orleans and Akka.NET.

But maybe it is fine, we have our jobs and we focus on solving different kinds of problems? Errrm... let's look at some data.

Market share of IIS web server has been halved over the last 6 years - according multiple independent sources [This source confirms the share was >20% in 2010].

IIS share of the market has almost halved in the last 6 years [source]

Now the market share of C# ASP.NET developers are decreasing to half too from tops of 4%:

Job trend for C# ASP.NET developer [source]
And if you do not believe that, see another comparison with other stacks from another source:

Comparing trend of C# (dark blue) and ASP.NET (red) jobs with that of Python (yellow), Scala (green) and nodejs (blue). C# and ASP.NET dropping while the rest growing [source]

OK, that was actually nothing, what I care more is OSS. Open Source revolution in .NET which had a steady growing pace since 2008-2009, almost reached a peak in 2012 with ASP.NET Web API excitement and then grew with a slower pace (almost plateau, visible on 4M chart - see appendix). [by the way, I have had my share of these repos. 7 of those are mine]

OSS C# project creation in Github over the last 6 years (10 stars or more). Growth slowed since 2012 and there is a marked drop after March 2015 probably due to "vNext". [Source of the data: Github]

What is worse is that the data showing with the announcement of #vNext aka #DNX aka #dotnetcore there was a sharp decline in the new OSS C# projects - the community is in a limbo situation waiting for the release - people find it pointless to create OSS projects on the current platform and the future platform is so much in flux which is not stable enough for innovation. With the recent changes announced, practically it will take another 12-18 months for it to stabilise (some might argue 6-12 months, fair enough, take what you like). For me this is the most alarming of all.

So all is lost?

All is never lost. You still find good COBOL or FoxPro developers and since it is a niche market, they are usually paid very well. But the danger is losing relevance…

Practically can Microsoft pull it off? Perhaps. I do not believe it is hopeless, I feel a radical change by taking the steps below, Microsoft could materially reverse the decay:
  1. Your best community brains in the Distributed Computing and Machine Learning are in the F# community, they have already built many OSS projects on both - sadly remaining obscure and used by only few. Support and promote F# not just as a first class language but as THE preferred language of .NET stack (and by the way, wherever I said .NET stack, I meant C# and VB). Ask everyone to gradually move. I don’t know why you have not done it. I think someone somewhere in Redmond does not like it and he/she is your biggest enemy.
  2. Open Source good part of distributed services of Azure. Let the community help you to improve it. Believe me, you are behind the state of the art, frankly no one will look to copy it. Someone will copy from Azure Table Storage and not Cassandra?!
  3. Stop promoting deployment to Azure from Visual Studio with a click of a button making Distributed Computing looking trivial. Tell them the truth, tell them it is hard, tell them so few do succeed hence they need to go back and study, and forever forget about one-button click stuff. You are not doing a favour to them nor to yourself. No one should be acknowledged to deploy anything in distributed fashion without sound knowledge of Distributed Computing. 

Last word

So when I am asked about whether I am optimistic about the future of .NET or on the progress of dotnetcore, I usually keep silent: we seem to be missing the point on where we need to go with .NET - a paradigm shift has been ignored by our ecosystem. True dotnetcore will be released on 27th but  after all, it might not matter as much as we so much care about. One of the reasons we are losing to other stacks is that we are losing our relevance. We do not have all the time in the world. Time is short...

Appendix

Github Data

Gathering the data from github is possible but due to search results being limited to 1000to rate-limiting, it takes a while to process. The best approach I found was to list repos by update date and keep moving up. I used a python script to gather the data.

It is sensible to use the number of stars as the bar for the quality and importance of Github projects. But choosing the threshold is not easy and also there is usually a lag between creation of a project and it to gain popularity. That is why the threshold has been chosen very low. But if you think the drop in creation of C# projects in Github was due to this lag, think again. Here is the chart of all C# projects regardless of their stars (0 stars and more):


All C# projects in github (0 stars and more) - marked drop in early 2015 and beyond

F# showing healthy growth but the number of projects and stars are much less than that of C#. Hence here we look at the projects with 3 stars and more:


OSS F# projects in Github - 3 stars or more
Projects with 0 stars and more (possible showing people starting picking up and playing with it) is looking very healthy:


All F# projects regardless of stars - steady rise.


Data is available for download: C# here and F# here

My previous predictions

This is actually my second post of this nature. I wrote one 2.5 years ago, raising alarm bells for the lack of innovation in .NET and predicting 4 things that would happen in 5 years (2.5 years from now):
  1. All Data problems will be Big Data problems
  2. Any server-side code that cannot be horizontally scaled is gonna die
  3. Data locality will still be an issue so technologies closer to data will prevail
  4. We need 10x or 100x more data scientists and AI specialists
Judge for yourself...


Deleted section

For the sake of brevity, I had to delete this section but this puts in context how we have many more hyperscale companies:

"In the 2000s, not many had the problem of scale. We had Google, Yahoo and Amazon, and later Facebook and Twitter. These companies had to solve serious computing problems in terms of scalability and availability that on one hand lead to the Big Data innovations and on the other hand made Grid Computing more accessible.

By commoditising the hardware, the Cloud computing allowed companies to experiment with the scale problems and innovate for achieving high availability. The results have been completely re-platformed enterprises (such as Netflix) and emergence of a new breed of hyperscale startups such as LinkedIn, Spotify, Airbnb, Uber, Gilt and Etsy. Rise of companies building software to solve problems related to these architectures such as Hashicorp, Docker, Mesosphere, etc has added another dimension to all this.

And last but not least, is the importance of close relationship between academia and the industry which seems to be happening after a long (and sad) hiatus. This has lead many academy lecturers acting as Chief Scientists, etc to influence the science underlying the disruptive changes.

There was a paradigm shift here. Did you see it?"

33 comments:

  1. That's a great article. And now, my two cents 8)

    While I wholeheartedly agree with putting emphasis on distributed computing and F# (a language I love), I think it would be a mistake to promote it as THE preferred language. People feeling forced the use F# or that using C# is going against the grain will just ditch the whole .NET ecosystem for the clearly polyglot world of the JVM.

    Again, I love F#, but I don't believe in the One True LanguageTM for everything. Spark is written in Scala, but it's perfectly fine and accepted to use it from Java or even Python.

    ReplyDelete
  2. (for everything or everyone)

    ReplyDelete
  3. https://github.com/datastax/csharp-driver
    https://github.com/basho/riak-dotnet-client
    https://github.com/StackExchange/StackExchange.Redis
    https://github.com/elastic/elasticsearch-net
    https://github.com/Microsoft/Mobius
    https://github.com/Microsoft/CSharpClient-for-Kafka
    https://github.com/ziyunhx/storm-net-adapter
    https://docs.mongodb.com/ecosystem/drivers/csharp/
    http://getakka.net/
    http://www.npgsql.org/
    https://aws.amazon.com/sdk-for-net/
    https://github.com/dotnet/dotnet-docker
    https://github.com/andrasm/prometheus-net

    And of course all you have to do is log everything to stdout and catch it via fluentd or hekad or logstash and pipe it to Grafana or Graphite or InfluxDB or ELK.

    I really don't see the problem :)

    ReplyDelete
    Replies
    1. 8D

      To be clear, I meant it'd be fine to use C# to access distributed computing librairies written in F#

      Delete
    2. It's not simply about adapters into other ecosystems. As of Sept '15 I've made the switch into the Linux/Java based ecosystems having spent many years dealing with .net based solutions.

      Despite the learning curve (although somewhat familiar with Linux already), the productivity gains and engineering options I have at my disposable are immense. So many simple distributed application patterns that I had to keep re-implementing as part of a .net solution, are simply available as standard tool chains - heaven forbid!

      It would be very difficult to achieve the same outcomes without having to throw huge amounts of time and resources in a .net ecosystem. Even if you did, the quality couldn't keep up with the Java/Linux OSS solutions for the lack of a 'fostering' community around .net really does hurt its innovation.

      For the first time, I have a truly devops fully enabled and capable team - something that never happened in a .net ecosystem due to whatever complexities existed in the MS world.

      Whilst I'm still quite fond of parts the .net stack, the juggernaut that is Java/Linux is truly unstoppable in terms of innovation, spending, community and quite frankly building good solutions.

      Let's not forget the origins of your list, after all ;-)

      Delete
  4. This is an amazing article.
    For those of us in situations where transition into the cloud (aws) has become a priority for business, its a story we are living. One of the nasty side effects of being a .net developer during the last decade is how it has left many complacent and lacking skills needed to succeed in today's environment. That's a shame. Honestly, .net is irrelevant and the dotnetcore "thing" just emphasizes that (at least imo).

    I also want to contribute that while Big Data has been the primary distributor, there is a lesser but still important shift going on - DevOps and the cultural change devops brings to enterprise units.

    ReplyDelete
  5. Interesting...

    I don't think that .NET development is necessarily falling behind, but there are definitely developers who have been building legacy apps for generations (even new, modern apps I often define as legacy, because they are already outdated as soon as they are released, and often are written by someone whose experience has lead them down the path of hulking monoliths).

    Also before continuing, I absolutely agree that distributed systems should be a focus of all developers, and OSS is certainly propping up the industry in that space. Those software are usually not written in .NET, however they are built for interoperability, so why do we need .NET versions of them, or even .NET innovation in that space? It would be nice, but as .NET devs, we are the ones likely employing their use in our organisations, so we don't have time to build the next Hadoop ;)

    Again, I agree with the overall premise of the article, but as evidence your graphs aren't ideal - there are explanations for them, and indeed, in my experience over the last couple of years, things that I have been doing would affect them. For example:

    * IIS drop - best practice is to remove all server identifying headers from responses, making it impossible to identify the underlying technology powering the application - I have found that .NET devs are more attuned to performing best practices, while developers on other platforms don't (PHP and Ruby devs anyone?) But it's a numbers game for sure, many devs don't across the board.

    * Drop in ASP.Net developer roles - the term itself is outdated, so I am not surprised there are fewer listings. Development is now so broad, it is nearly impossible to count the number of listings for a technology. I blame it on the hipsters.

    * OSS slow down - definitely, but if the tools are built, why reinvent the wheel? That surge of open source has certainly helped my development, and I don't feel I need anything else currently (although I am working on a couple of OSS projects myself). I imagine with Github now offering unlimited private repos we will see a drop across the board too.

    While this might not be what is driving the graphs down, I contribute to the decline in those ways.

    I also think locale is a big factor. The JVM is huge in silicon valley (I say JVM, because Java as a language is rubbish, and Scala is seeing explosive growth). There are many innovators in the Bay Area, because the area fosters that support for them to innovate - there is plenty of money and support from other innovators. That same support isn't there in say, NYC, but it is growing, and because the industry is largely financial, there is a lot of MS, which is seeing a good mix of technologies being used in the start ups there (helped by MS freeing up tools like VS I hope!)

    I think all we can do it innovate as much as we can, and now we have seen what is possible from the OSS space, maybe we can not get too hung up on passing technologies like Silverlight... (by the way WPF is HUGE in the financial industry - but we are now seeing a larger sway towards web thanks to SignalR).

    ReplyDelete
    Replies
    1. Do you see anything regarding F#? Is it taking off in the financial industry?

      Delete
  6. So lets compare what you're saying to Java: Did Oralce create any of the technologies you mentioned in your post? Correct me if I'm wrong but I don't see a single one.

    Yet as you stated correctly a lot of innovative projects are developed by third parties in Java.
    A language that has been declared 'dead' multiple times over the years. Yet still those projects are investing heavily in that very ecosystem.

    You could just as well say 'A few years ago we were stuck with learning JavaFX/JSF/JPA/JSF/... while [Insert Technlology X] was doing [Insert Amazing Hype Feature]. What a waste of time...'

    You are comparing apples and oranges.

    Microsoft, just like Oracle is providing a very stable Environment which developers can use to build solid Applications. In order to do that they provide a base layer of functionality(UI, Data Access, Communication,...) that people can use to build those Applications. What kind of application they develop with it is up to those developers themselfs.

    Yes Microsoft is advertising its own services and tries to provide a smooth integration with its development tools. Still, everything is optional, you can choose to use Azure or go for a different vendor, even use your own infrastructure.

    Yet you should still be able to build anything from a simple Console-Application to highly scalable distributed Systems (Just have a closer look at Service Fabric).

    The point is it's up to the developer to choose if he wants to go and implement a new Database from scratch, a LOB Application or a distributed cloud-service. .Net does not restrict you in any way from doing any of those things.

    Yes, by not being opensource from the start and because it is made by Microsoft, quite a few people from the os-community stayed away from it.
    While .Net is widely used for Enterprise-Applications it is only rarely used for research-projects, thus the level of innovation is limited mostly to individual enthusiasts.

    I don't know if opensourcing .Net alone will change that fact. Still I don't see an issue with beeing able to use great products like Cassandra, Hadoop etc. from within .Net even if they are written in a different Language.

    If you look at the Microservices Pattern for example, having different Technology Stacks interact with each other is embraced in such an environment.

    .Net just like Java will continue to stay relevant in many industries for many years to come.

    In the end the goal of software development usually is to deliver a product that solves a certain problem. It realy doesn't matter what language future technologies will be written in as long as we can integrate them and use them to solve those Problems.

    ReplyDelete
    Replies
    1. The discussion is not on the language or tooling capabilities - yes we could have built but instead we spent time on technologies none of which materially survived to see 2016.

      It is on ecosystem, that is day by day becoming more irrelevant compared to the rest, hence its share is decreasing.

      Delete
  7. I think I'll grapple what I think is your strongest argument here. I agree that for big applications like Hadoop, ElasticSearch, Sonarqube etc there has been more innovative development done using the Java/Linux stack than .Net. I would also agree there have been a lot of resets down the road. However I do feel this latest one is different in that it isn't just yet another paradigm shift for web apps but the capability of a DotNet/Linux stack.

    I won't get stuck in a war on which languages/libraries are better/more productive. However a dev team faced with the decision of a big new on-premise application on Windows versus cross platform didn't really have much of a choice at all.

    .Net Core is not a silver bullet, nor will it change anything over night but it means developers will begin to actually have a choice.

    ReplyDelete
  8. @BrendanEich (father of JS) webassembly game changer (paradigm shift) the web is the platform ... cross platform native performance ... Create outside the box ... re-architect solutions ... scope for imagination ... eyes up ... check your radar ...

    ReplyDelete
  9. When "NoSQL" was emerging, Microsoft wasn't futzing around with Silverlight as a response. I'm sure you can look to any number of front end development efforts in the OSS community and laugh at it too at how dumb of an idea it was too during the same time period. At the time, HTML5 didn't exist, IE was like >90% browser dominant and websites that wanted to do really cool "local app" type stuff were forced into Flash, which ruled their world. Making a "Flash killer" was as worthy of a project as anything else at that time.

    As for data, during that time Microsoft developing abstract data layers that *didn't care* what your backend database looked like, while making SQL Server one of the top RDBMS products on the planet. MVC started to emerge to break away from the "forms" model that wasn't always a good fit. NoSQL solved a very specific problem, but despite the evangelists best hopes, it is not a replacement for RDBMS. The only thing that happened was that people stopped using relational databases for things where ACID doesn't matter, or worse, is a hindrance.

    That's just one problem from this very stupid article. The landscape is just different now. So .Net isn't the cool kid? Well, there's not really any one platform right now that *is*. There are dozens of competing technologies. It may spell trouble for .Net, sure. But no more than it does for Java, Node, or anything right now that is emerging as a popular technology. See where they are in five years. I'm betting .Net is still around, about half of the cool kids are gone, and the other half are struggling as other technologies emerge.

    ReplyDelete
    Replies
    1. Exactly. When Rails emerged 10 years ago it was the coolest thing ever, it would rule the world of web development and .NET would disappear in oblivion. But guess what, today there are literally zero new Rails companies and startups, and the older ones are migrating elsewhere, while "dying" .NET (and Java) are still around and healthy. And there are fundamental reasons why they will be alive and healthy for the foreseeable future.

      Delete
  10. Having been a "switch hitter" most of my career, I've marveled over the years at how hard the OSS zealots are willing to work to keep any Microsoft technology from entering the ecosystem.

    We need to take a good look at what the "O" in OSS means.

    ReplyDelete
  11. So what do you suggest that people learn then instead? I remember the same kind of talk going on years ago when Ruby on rails was all the rage. Even the same kind of language about how.net is not for cool kids and rails is. What do you suggest instead

    ReplyDelete
    Replies
    1. Ruby on rails was more about cutting the ceremonies and better development experience, getting stuff out sooner. It was not really a paradigm shift in computing.

      What we are dealing with is different. I have not made a decision to leave .net but if things do not improve, JVM community and Scala is the one for me.

      Delete
  12. I've been around for a while now and seen things come and go and .Net ain't going anywhere. Microsoft has achieved incredible things with the .Net stack, sometimes dragging other technologies along by sheer momentum.

    Everyone is harping on the big data thing... not everyone cares about big data. It is not a feature of every system or problem space. In fact, the huge majority of systems don't come close. MS focuses on what the majority needs first, and does a great job of making those things easy. The world needs that!

    It's great that other tech stacks are dealing with big data so effectively. MS will come along later and make a more accessible and simpler to implement version of a combination of those things and that will be good enough for the majority once again.

    Disruption? Now? Please... In a world where *javascript* is the new best thing that everyone should be using to build everything? Hippies.

    ReplyDelete
  13. Once I read "After the big promise of web 1.0 was not delivered resulting in the .com crash of 2000-2001..." the rest of the article became questionable. The .com crash had nothing to do with "the big promise of web 1.0" and everything to do with investors throwing money at half-thought-out business plans that had a ".com" at the end of their name.

    I would really like to know what the current push is to crap on .NET and .NET developers? Yeah, there was that article by that condescending douche-bag. Was that it? Hey, that guy said it, let's all jump on that gravy train.

    Weekly I get recruiters contacting me about .NET development positions. It's not going anywhere. Get over yourselves.

    ReplyDelete
    Replies
    1. "...throwing money at half-thought-out business plans"... yeah, those [business plans] were the big promises never delivered.

      By the way, this post was the precursor to Rob Ashton's article.

      Also if you value Greg Young's opinion, here is one for you: https://twitter.com/gregyoung/status/745282133825028096

      Delete
  14. For .NET distributed systems projects - don't forget NServiceBus, MassTransit, Rebus and EasyNetQ.

    ReplyDelete
  15. Great article! I really enjoyed reading it....

    I am also wondering, what tech stacks I should observe and learn as a .NET programmer if I want to keep my value on the job market? Is it F# or Python or Scala?

    ReplyDelete
    Replies
    1. Thank you. F# probably requires least change if you are not familiar with Linux or Mac although language itself (and FP generally) requires a steep learning curve.

      If you are already familiar with Linux or Mac, Python is definitely a useful language to know. It is simple and great for scripts or quick PoC as well as ideal for machine learning and data.

      Delete
    2. But one word to take away really. As the article lays out, it is not the language that matters, but WHAT you build with it.

      Delete
    3. I am familiar with Linux/Mac and I like it a lot. I tried Python and I also really like it, so I will make it my priority to learn it.

      I also like the data and machine learning area. I started to write small python scripts to scrape and gather data from web sites like stack overflow careers.

      I have now some data and thinking of creating something that visualize the collected data in an interactive manner, so the casual observer can get value out of it. Do you have recommendation what I can use for this kind of task?

      Delete
    4. Interactive usually means d3.js or one of the other higher level libraries. For static visualisations I have recently used seaborn, a python package.

      Delete
  16. Very interesting article, I am 100% agree with you. I'm learning alternative stacks now for about 2 years (NodeJS, Python, JVM/Scala). But having the fact Oracle owns Java, and changes are really really slow, and seeing how fast .NET Core & C# & Roslyn are progressing, I'm sure .NET will have renaissance. Especially when tooling will be more mature on Linux/Mac & F# will be ported fully to Core CLR.

    ReplyDelete
  17. Great post!! This can be one particular of the most useful blogs We’ve ever arrive across on this subject. Basically Wonderful. I am also a specialist in this topic so I can understand your hard work.

    Web development company in Chennai


    ReplyDelete
  18. I simply want to tell you that I’m all new to blogs and truly liked you’re blog site. Very likely I’m likely to bookmark your site .You surely come with remarkable articles. Cheer for sharing your website page.
    Cara Mengatasi Alergi Transfusi Darah
    Cara Menurunkan Trombosit Tinggi
    Cara Menurunkan Leukosit Tinggi Pada Anak

    ReplyDelete
  19. Great article Ali,
    Personally I think the whole idea of .NetCore is already stale and I took a long time to appears in reality.
    I mean it tries to solve a problem that does not worth this much time and by this I mean instead of trying to create something that works on any platform why we should not accept each OS would cater for this, something like translating c# code to c rather translating to IL?

    ReplyDelete
    Replies
    1. Thank you Hojjat for your comments. Transpiling a garbage collected language to one that does have it is impractical. After all, Microsoft used Java's method of compiling to bytecode and called it IL. And frankly has been working fine.

      Going back to .net core, I try to be positive - finding everyday to be more and more difficult.

      Delete
  20. Superb. I really enjoyed very much with this article here. Really it is an amazing article I had ever read. I hope it will help a lot for all. Thank you so much for this amazing posts and please keep update like this excellent article.thank you for sharing such a great blog with us. expecting for your.

    iOS App Development Company

    ReplyDelete