Where did the Microsoft tech stack disappear?
michaelscodingspot.com
michaelscodingspot.com
The more typical “99th percentile” PHP is not used by any of the biggest tech companies to deliver their core products.
[citation needed]. In what non-trivial ways is Hack different to PHP?
Of the three distinguishing features highlighted on https://hacklang.org/, PHP has two (the exception is generics, which I don't think PHP has added... yet).
What does this mean?
That's blatant bloggging
But to actually get to the point you want to talk about, I worked at a startup in 2009 that was a microsoft shop. We committed to some version of .net/visual studio, paid for a bunch of windows server licenses, built multiple data centers, etc etc. So it did happen, at least one time.
Coincidentally, companies that aren’t tech companies rarely share their tech stacks, because why would they? Technology isn’t what they are selling and IT people are the guys who tell you to reboot every time you call them, even if that’s not really true.
Take the municipality where I work as an example. I manage several software developers, and we’ve build around 400 minor systems and services over the past decade. Last year when I was working on my masters in public administration I discussed our in-house development with one our eight CEOs. This is the guy in charge of efficiency, which is where my digitization department resides, and while he knows me and what my department does in general terms, he was surprised to learn that we develop software ourselves.
It’s different for Netflix and Airbnb, because they are tech companies and I’m fairly certain their CEOs know that they employ actual software developers. ;)
That’s the public sector, but look up Volkswagen, Maersk or similar and notice how they don’t have entries?
Microsoft is much easier to deal with now vs the 90s precisely because they are no longer the top dog and know they have to compete with the FAANG companies for many of their offerings
The licensing is even more complex than it was.
I have no statistics about them being "easier to deal with", so I'll take your word for it; But they still hold the same power once you sign, and can use it at their discretion.
No company is trustworthy, but some are much less than others - a few at the "trustworthy to be evil" level.
Imagine a parallel world, one where you could spin up Windows and SQL Server installations with ease and you just get a bill at the end of the year for your licensing costs, with easy payment and financing terms. If that were the way things work (and it is to some extent for the cloud, one reason why azure is so popular) then it wouldn't be terribly bad to deal with MS technology. But in large part that's not how things work. Instead you have to deal with the overhead of finding out exactly what you need (do I want Windows Server 2016? what's the advantage of getting the Data Center SKU? do I want SQL Server clustering? etc.) then you have to go out and buy it, install it. And then, after all of that, you have to occasionally put up with Microsoft barging into your business and doing an intrusive audit to make sure you're not stealing anything.
Compare that to the alternatives out there. If you have a big beefy server you can spin up a VM host and infinity linux VMs, you can run as many copies of nginx, postres, and all the other great technologies out there that you want. And you don't have to be burdened about the complexity of licensing, let alone the cost. When you are paying developers 500, 1000, 1500 bucks a day that complexity cost, and the opportunity cost from not just feeling free to experiment and try things out can easily be more expensive than the actual licensing.
I love C#, coding in VS with the .NET stack behind you almost feels like cheating or like "easy mode" because there's just so much available to you and so much you can do trivially in that world which takes so much work and pain with other tech stacks. But ultimately the truth is that nginx is pretty much just a better web server than IIS and linux is a better platform than Windows, especially for services. Docker on windows is light years improved today compared to where it was a year ago, but it's still an also ran compared to Docker on linux. The Microsoft platform just doesn't have the edge it used to, which makes it hard to justify the cost.
Automating Windows is the biggest cost in these environments. It’s just not worth the hassle because even on the best of days with the best tools at hand it barely works.
The microsoft/windowsservercore image is currently ~10-12GB.
The lighter-weight microsoft/nanoserver image is ~600MB, which sounds more reasonable, but there are certain limitations.
Compare this to the Alpine Linux Docker image at ~5MB.
It takes significantly longer to provision an Azure Container Instance (ACI) running a Windows Container than a Linux Container. That said, if you need to run Win64 or .NET Framework binaries (say from a proprietary vendor), Windows Containers are your only choice... else you have to spin-up a full blown VM.
That said, .NET core running on Linux containers and connecting to open-source databases are a reasonable alternative. Devs tell me that .NET core itself is still pretty new so while it works for the most part, teething issues are to be expected.
Wanna spin up n VMs for production / distributed computing? For Windows, you have to license each VM, whereas with Linux, the incremental cost of another node is nearly 0.
(Side note: I had high hopes for container support on Windows Server 2016 because unlike OS's, containers don't require individual licensing. Unfortunately Windows Containers are still immature, and are ironically second-class citizens in the Microsoft ecosystem compared to Linux containers)
Wanna spin up a n database servers? A single SQL Server (Enterprise) instance is pretty pricey (and it's licensed per core, minimum 4), whereas Postgres is free for any number of users and any number of processor cores. You want several replicas of your SQL Server? It is $$$. With MySQL, every replica is free license-wise (there are other costs of course).
The cloud has changed these calculations somewhat, but if your infrastructure is on-prem, Microsoft licensing can be prohibitive at scale.
In addition to costs themselves, Microsoft licensing is a highly complex topic. One of my colleagues who deals with Microsoft jokes that someone well versed with MS licensing deserves a PhD. A lot of people simply don’t want to deal with all that when they have a thousand other things to worry about.
Windows tax amounts to about 30% bump in AWS ec2 costs. Typical CRUD startup will have their costs dominated by payroll, not hosting. If I can get my engineers 3% more efficient at the cost of making my hosting 30% more expensive I will do this in a heartbeat.
What is the situation where you experience onerous Windows tax?
Stacks also have the varying number of "batteries" included, and on Linux, the Microsoft stack comes with very few "batteries".
How do you quantify engineers’ productivity? A Java or a Python developer (much easier to find than a .NET developer) will be a lot more productive in Java or Python. And it is not a universal fact that .NET developers are more productive than others. Python developers would argue the other way round.
Point is - if a team is more productive using python they should use python. If it’s c# then they should use c#. Licensing cost doesn’t figure into the decision. People who complain about exorbitant licensing cost leave me confused because I do t see those costs.
And, once you have started with Java/Python, why would you want to spend your money on licensing costs AND .NET developers who, from personal experience, often tend to be more expensive and harder to hire than Java/Python/Go developers?
Licensing costs don’t matter a lot if you already have a team that is proficient in .NET. It’s a Catch-22 situation. Why would want to spend money on building a team of .NET developers in the first place unless you have some hard evidence that using .NET is going to help your business significantly?
Stacks are an incredibly bad idea and need to go away. If you organically end up with LAMP because those technologies were best-in-class for your problem, then great. Use the best tool for the job, else your solution is categorically enterprise.
"Stack" is merely an FOSS euphemism for enterprise behavior.
bizspark has been cancelled last year because of too much abuse - MS offers alternative program only for startup incubator alumni.
I don't think Linux or "any DB you like" fall within the OP's definition of "the Microsoft tech stack" that disappeared.
They've been employing large amounts of very well known devs to become dev advocates in every popular language/field out there.
Visual Studio Code has overtaken Sublime & Atom as the most popular text editor in just about any demo I see in most front side web development.
MS is now friends & compatible with many of the other cool tools out there. MySQL, PostgreSQL, Linux, etc. A lot of demos I see use .NET with PostgreSQL on Linux.
If you've never used Visual Studio's Full IDE or Azure or the .NET framework, you're missing out on some huge productivity gains. I use JavaScript more than .NET. I'm better at JS than .NET by far. I really dig hosts like Netlify. That said, if I need to spin up a MVP for a project, it's faster, better quality & easier with VS, Azure & .NET for me at least. Startups really underestimate this one I think.
From what I've heard, it's also a great platform with Xamarin for mobile, with Unity for Games, etc. Add on the experimental work going on with compiling to Web Assembly & the .NET framework has a great chance to be running anywhere & everywhere.
I've yet to see anything standard Visual Studio does better than Netbeans or JetBrains tools (besides language specific things) but I am yet again willing to be enlightened if someone can explain it to me.
Background: I have months of experience with Visual Studio (more if you count back to school), months on IntelliJ and years on eclipse and Netbeans.
VS2005 (or 2008? can't remember), which I had to switch to because for x64 work, was unbearably slow and unresponsive in comparison -- although the general standards of responsiveness have come down, so today it might not be so bad (see, e.g., Atom, VSCode, everything JetBrains compared to old-guard Sublime)
From my only-slightly-nostalgia-tinted experience, I would correct GP's post to say "If you've never used VC++6 full ide" ...
The latest release of Visual Studio has performed very well for me as long as I avoid ReSharper (somewhat ironic). Fortunately they've included a lot of those features in the professional & enterprise versions.
We recently switched from VS2017 to JetBrains Rider at $dayjob.
The productivity gains from NOT having to wait around for VS (slowest UI contender in my opinion once your project gets sufficiently complex) were off the charts.
This statement may have been true a couple years ago, but it no longer is (at least in my opinion).
This is not to say that a startup founded by technical people couldn’t be successful using .NET; I just haven’t seen it.
- jet.com uses F#
- stackoverflow is C#
I don't get why a startup couldn't just use .net for the application layer hooked up to a MySQL or Postgress backend. The drivers for both Db exist so someone must be doing it.
With a startup I would stick to open source. It's the more vibrant and reliable option.
- state of the art language features from .net (linq, async&await,powerful generics)
- Multiplatform runtime and SDK, even development is great via Vscode + omnisharp.
- MIT license
- llvm backend via Ryu jit compiling straight to machine code (Wow!)
- unparalleled language server capabilities via Roslyn's API, even available on Linux / Osx via omnisharp.
And more stuff I'm not thinking of. Almost everywhere you turn .net is the toughest beast in the arena if you exclude ecosystem. I don't see how you could possibly think it doesn't have a fighting chance.
But if you also need other libraries or systems then things get thinner. For most cloud providers that aren't called Azure the .NET support usually is behind. A lot of popular libraries are either written in Java, Javascript or Python with maybe an outdated unmaintained .NET wrapper. Most CI/CD pipelines are not geared towards .NET.
To me MS is a warm cozy place but the open source world is more chaotic and much richer.
There are a few gaps like troposphere for cloud formation.
What do you mean most CI/CD platforms aren't "geared" for .Net? Which CI/CD platform are you using?
C# is a fantastic language, .NET framework is good but in my view the ecosystem is too weak.
I really hope no one in 2018 is using whatever Microsoft’s old version control system is with TFS. TFS has had first class support for git for years.
As far as AWS, using CodeBuild and CodeDeploy, AWS has provided a .Net Core Docker Build image for Linux for awhile (https://docs.aws.amazon.com/codebuild/latest/userguide/build...)
They just recently added Windows support for CodeBuild, they have a prebuilt image for .Net Core for Windows and they have instructions for how to create a .Net framework image (https://aws.amazon.com/about-aws/whats-new/2018/05/aws-codeb...)
I had never used Docker before and I was able to create the .Net Framework Docker image following their instructions.
For deployment, AWS has a code deploy agent for Windows and Linux. There is no “support” for any language. Just a yml file that you use to specify the batch files/Shell scripts you want to run during each stage. Actually the same is true for CodeBuild. You just specify the commands you want to run in a yml file and the output srtifacts.
- Linq is great but less unique than it once was, and almost everyone has async and await (or some equivalent) now -- javascript & friends and python almost exactly, and Java has a wealth of options in this arena.
- .NET is "multiplatform", but clearly second-class in terms of tooling and perf on non-windows platforms.
- Congratulations on the open-source licence?
- This one is legit, but other languages do some pretty interesting stuff too
- VS might be ahead in this regard, but Java IDE's aren't far behind, and even the dynamic languages are starting to get really impressive tooling.
I have used and liked .NET, but I have no need to pay the premium it imposes. .NET is just another very capable platform among very capable platforms -- and then throw in the single-ecosystem thing.
> Compared to popular >> open-source << options like Python, Javascript, and Java:
Even in your comment you can see there is still that stigma that separates .Net from the rest of the languages. .Net core has many non MS contributors. It truly is a project in the spirit of open-source.
No other language that I'm aware of has duplicated the fundamental power of Linq -- expression trees.
Expression trees allow you to express your query logic in Linq and let a provider at runtime translate that expression tree to SQL, MongoQuery, REST calls, etc.
I agree that most people that think of LINQ as "just another set of collection functions" miss the "code-as-data" bit that can make it truly shine, but .NET isn't the only place that can be found. The most unique thing about it is that C# was the first ALGOL descendant deigning to add some modest code-as-data chunks to its compiler. ;)
I agree, and we found this out recently the hard way.
For example, the CoreCLR does NOT build on 32-bit Linux as of now [1]. While our software has absolutely no reason to complain (and doesn't on Windows!), we can't target 32-bit Linux users.
But, when you look at the jobs that are out there, while there is no salary difference between .Net and NodeJS, at least in my market, there are a lot more jobs from well funded small companies for Node. Besides, JavaScript isn't going anywhere because of the web. I plan to stay up to date on C#, but also add Node to my tool belt - just to increase my options.
A 2018 startup choosing .Net is very different from a 2005 startup choosing .Net, IMO. (I would place a higher likelihood/possibility of technical cluefulness on the latter.)
I’d bet that there are many startups that don’t need technical founders, and many who have them are building technology that isn’t really differentiated. One thing that is important is obviously fine-grained control over the business, so I could see how outsourcing might make that slightly harder to manage.
For Microsoft and .NET community — yes.
Even if one outsources, having someone doing reviews, QAing the code being introduced and setting guidelines on what’s production quality code is a good thing. This could also be outsourced to someone else though. Doesn’t have to be a founder.
Besides, with AWS and all of the services being hosted, the only servers you really have to manage are your own app servers.
And there is the whole global infrastructure thing for regional redundancy.
Microsoft's problem has always been Windows. Software made for "A PC on every desk" doesn't fit so well into a wall of servers running the internet. They should have gave away Windows Server for free. Heck they should do it now. It should be as free as .net core.
Even if that does happen we are nowhere near it yet, there are a lot of servers out in corporate offices and will be for the foreseeable future. If this wasn't the case then Microsoft wouldn't be releasing new versions of Windows Server.
Also that awkward, sad reaction when you reveal to other burgeoning developers that you work in .NET
I’m not touching Ruby. There are jobs for it but they don’t pay well.
Source? I know I’m an N of 1, but I just got hired to work on a Rails app and the pay and other benefits are pretty competitive...
[0]https://insights.stackoverflow.com/survey/2017#top-paying-te...
Ruby may pay more but once you get to the higher end of the scale, you'll find many fewer jobs paying the amount you want.
EDIT:
In 2008, after being at one company way too long, I was what would be considered a top C developer and there was a company offering me $20K more than I was a making. But I saw the pickings were slim. There were more jobs paying the same amount for “Enterprise C# developers”. But I wasn’t qualified for them. I took a job paying only $7K more than I was making as a high entry level C# developer.
10 years later, there are no jobs in my local market paying $65K more than I was making in 2008 for C or C++ developers. There are some paying C# developers that amount (I have one).
I’m not bragging. According to all of the data I can gather, I’m making the median for my market for a “.Net Architect”.
I guess my point is that high salaries aren’t limited to .NET and Java jobs. I guess I’d also challenge the idea that a Ruby job paying $100k+ doesn’t “pay well” (outside of SV anyway). Fast food doesn’t pay well. Working in the higher levels of tech absolutely does. My very first job was working the drive thru at a Taco Bell, and it still blows my mind when I think about how much I make now... (also not bragging, just trying to add some perspective).
But they are all going to plateau if they don't get some architecture/team lead/full stack skills.
I think I have maybe a good three years before I plateau as an individual contributor. At a certain point, no one is going to want to pay me more without forcing me to lead a team (been there done that didn't like it) or becoming a consultant.
I'm not saying it's impossible to make at the top of your market with Ruby, but the odds are stacked against you.
It also seems like every year we hear that “Rails is dying”, but I don’t think I’ve seen those claims materialize. It’s maybe not as popular as it was 5 years ago, but I’m not hearing any death knells.
There is a place for technologies and associated stacks where the demand exists. The whole .NET and Microsoft ecosystem is super useful for large enterprises who have plethora of data and somehow need to accommodate employees who are both IT and non IT (think of typical IT Business Analysts and scrum masters and product owners -- they are usually involved with microsoft-based tools as I find it).
So what?
This whole conversation somehow reminds me of the old iPhone vs Android conversations about 5-6 years ago when Android phones started catching up on iPhone in features such as non-lagginess etc. and people were like "So now Android has it too and you have no more excuses not to change to Android now!"
Well...hahah...it doesn't really work that way. Even if Android could do everything that iPhone could...why would I still change? Why would I see all that trouble just to gain _NOTHING_. It's same with MS tech stack. Why would I change from tools I know and trust to MS stack when it would take time and money, but I wouldn't get anything?
In addition MS has been fucking over people for about two decades and just because they have been seemingly friendly for last few years why would I trust them?
Also if one were a software engineer, more or less experienced, and was thinking what tools to use, what do you think? Would he pick the tools used by top engineers and tech companies or embarrasing enterprise tools designed for senile bankers and municipality sinecures who are afraid of tech and want to use tools made by big company they have been repeatedly told since 1980s?
It remains to be seen whether this will help it gain traction with more companies or not though.
I founded a startup on the Microsoft tech stack (.NET Core, VSTS, and Azure). Why? It's an incredibly productive dev/tooling environment that Java/Python/AWS doesn't even come close to. The downside? It's really hard to find good C# talent that isn't stuck in an enterprise development mindset.
I’ve found that C# devs manage quite well in F#, and the ergonomic way of doing things is sufficiently different to break people out of the 3+ levels of inheritance I’ve seen some small C# projects devolve into.
That said, the community is smaller.
I enjoy being paid to develop software, so I also want the producers of my tools to be able to pay for their bills.
I wonder how may that use FOSS on their business actually pay/donate anything, even a penny, to the developers.
My experience consulting says pretty much no one.
That's also the reason I avoid Java personally, I find the language alright but the community around is kind of "enterprise" focused.
Could you tell me what the Windows/C# stack has that the aforementioned stacks don't?
Microsoft-centric devs seem, on the average, to be less averse to paying for software tools than your average Python/Java/JS dev.
Care to give some examples? I keep hearing this, but I don't see those awesome tools when working on .NET projects.
RedGate makes a really nice .net performance and memory profiler. One of the things I haven't seen elsewhere that it does is being able to drill through any ORM libraries to see the SQL that is being generated and executed against your databases.
LinqPad is a REPL, but it does intellisense, Nuget integration, rich output options.
It's generally just a little bit more finish and usability than OSS options
Shopify is one of the most prolific technology creators in the tech community. Their CEO was on the original core Rails team and is directly responsible for several common libraries and concepts that have been picked up by other tools.
Fast forward a few years and all of a sudden you have browser standards and amazing MVVM frameworks. Everything you needed ASP.NET for was no longer required.
I still work on enterprise .NET systems and it's no surprise as to why startups look to alternatives. Sure the tooling is amazing but so are many of the other tools out there. After using simple web frameworks like AdonisJS I see no real reason for building your service layer (let alone your app layer) in .NET.
This data is also rife with bias: stackshare isn't representative of startups let alone companies in general.
None of it is written in .NET except for interface drivers. Java, the butt of all jokes, is responsible for a number of the key stack components, and C++ might not be a lingua franca of the startups, but foundational components are written in it.
Can someone name a major OSS project/tool/database/etc that is written in C#?
Part of the reason for that is that if you're starting out as a web developer trying to build stuff for fun, you're probably not picking .NET as your tech stack when there are options that are freer (both as in beer and in speech), easier/cheaper to deploy, and have a more active online community that can help you if you get stuck.
And ultimately, if you're a company that is picking a tech stack, you ultimately need to hire people to work with that stack, and it's a lot easier to find people that know Node/PHP/React/whatever than it is to find people that know .NET.
If it gains serious traction, that could change the development landscape for a fair chunk of Enterprise development.
This seems like a bad source. Specially if anyone can submit a company they don’t work for and only use the url scan feature.