I've programmed a lot in both Dart and C# and my take is that Microsoft looked at Java and decided they needed a Java-like language like so they made C#. Google was into Java but Oracle sued them over it so they decided they needed a Java-like language so made Dart.
Edit: Dart is ridiculously easy to learn because it's very familiar so if someone complains about having to learn Dart it means they don't want to learn it
Microsoft's story isn't that different from the Google one. Microsoft had a Java language (https://en.wikipedia.org/wiki/Visual_J%2B%2B). Arguably, they had a better language designer in Anders Hjelsberg, as well as a lot of component-based development experience from COM, that enabled them to build a platform that was in many ways better. Things like WebForms were relatively stunted as model for web development and would be replaced by MVC aligning to what the world was mostly doing all along.
I don't have inside information here. My reading of the narrative is that Dart was created originally as an alternative to JavaScript, because JavaScript did (and does) have just tons of problems all around. It pivoted from being primarily a JavaScript alternative to supporting use-cases like Flutter.
If you're curious, this is an informative video of a debate between the designer of TypeScript and the designer of the Dart VM about which was the better approach.
Anders Hejlsberg and Lars Bak: TypeScript, JavaScript, and Dart
> my take is that Microsoft looked at Java and decided they needed a Java-like language like so they made C#.
Nope, they already had their own version of Java, J++, which is where Windows Forms was initially born, alongside their extensions like what would become P/Invoke in C#.
J++ was going to be the main language for Ext-VOS, the project that would eventually be known as .NET.
Then the lawsuit happened, COOL was born and eventually rebranded as C#.
Quite easy to know how C# happened when reading HOPL papers about its history.
In this regard, Microsoft was less lucky with the lawsuit than Google with their Android Java.
My version is meme-able because it's short and that meme has won since I hear it oft repeated. However, I appreciate the additional detail of how Microsoft got from Java to C#
I've messed around with a few simple Flutter applications and I wrote in Java until the IDE complained then made minor fixes. I never had the feeling I was learning a new language honestly, felt more like moving from python 2 to python 3 than a whole different language
Honestly, as an ex-Googler (10 years), I have to say it's never that simple to explain why some tech is adopted or pushed at Google and it's never so top-down and unicausal.
Often it comes down to certain engineers having outsized voice and influence combined with them having a preferred hammer and then hunting around the organization looking for nails. IMHO that's what happened with Dart & Flutter.
I saw it happen in two PAs, and the second time it involved literally rewriting an entire shipped product on a platform I worked on. Slowly and tortuously, rewritten from a JS/HTML application to Dart/Flutter on "native" (i.e. not web or android or ios target), and only a few months after said product launched. To me this was classic Joel Spolsky "Things You Should Never Do, Part I" aka "rewrites considered harmful" alarm bells, but who listens to me, I'm just a grouchy old engineer.
One promise was that it would be faster (because "native"), but this was frankly based on a lot of untested assumptions and biases and was never correct. V8 and the Chromium rendering engine have (low estimate) hundreds of thousands of hu-man hours of optimization put into them. It's actually really hard to beat. Chromium has a pretty decent accelerated rendering stack, and boatloads of work went into getting it optimized for smaller SoC type devices (work often done by friends / coworkers of mine, actually).
And switching to Flutter meant having to jerry-rig (or worse, rewrite from scratch) basic things like accessibility (screen reader, magnification, etc.) or virtual keyboard that Chrome (or at least ChromeOS) had solutions for and we had just spent over a year making work for our product. Flutter delegates down to Android or iOS's implementation of these features, and as we were neither, we had no such thing. So it had to be built.
So the net result was either rewriting things that had already shipped, or, more commonly building awkward translation layers and bridges between the two platforms so that both things could run at once. a) waste of engineering hours b) source of bugs c) was happening instead of dealing with tech debt and improving or evolving the existing codebase.
The one upside was portability between Android and our product, so the same feature/app could be written for both... which I would accept as the only compelling reason to justify what was done.
I could go on, but I'd probably give away internal secrets or something, and probably piss someone influential off or burn some bridges.
My overall point being: test your assumptions and don't use some tech just because you a) like it or b) wrote it.
Also I don't really understand why Dart even exists. In the 21st century, there are very rarely serious problems to which "we need a new language" or "we need a new operating system" are the correct answer.
Edit: Dart is ridiculously easy to learn because it's very familiar so if someone complains about having to learn Dart it means they don't want to learn it