> A shift from Windows applications to the web has, contrary to popular belief, not hurt Microsoft's developer story.
What the?
In the 90's, if you wanted to "program", and if you wanted to show other people your skill, you made a windows executable and distributed it through one of the myriad of windows shareware/freeware websites. "I want to learn to program" meant firing up Visual Basic and having a go. And Microsoft was king, because they had the best tools, and they had the platform everyone was using and targeting.
Now, almost noone makes windows executables anymore, if they want to show off their skill. People wanting to learn to program would never use Visual Basic today, it's completely off the radar. They are much more likely to learn some web framework and put up a web app to show the world, or make a phone app and put on an app store. Windows executable? That doesn't run on your iPhone or MacBook or Android.
And Microsoft has no idea on how to get the new learners back. They have nothing to offer them.
I know there are a lot of developers doing a lot of work for a lot of companies on the MS stack.
My point is that there's no influx of young aspiring programmers entering that world anymore. The ones that are there now got there by picking up VB or VC++ as kids, but noone is picking those up today, and MS has absolutely no idea on how to attract new developers, none of their offerings are interesting to someone new to the field.
So you are claiming that the average age of a Microsoft developer (one relying on the Microsoft ecosystem) is edging up rapidly? I would love to see some hard evidence about that, though its definitely plausible.
At least on hackernews, the number of Microsoft developers seems to be quite small (a poll would be interesting though).
Disclaimer: working for Microsoft, speaking for self.
I'm saying that their mindshare has been shrinking constantly since the 90's. They really didn't have any serious competition back then, but they have so much competition now, and they don't stand out anymore.
Yes, their stuff is good and competent, and they're serving the needs of their existing customers and developers, but they don't make kids excited to fire up Visual Studio and crank out a Windows Phone app, the same way they made kids excited to fire up Visual Basic and crank out a windows exe back in the day.
There aren't any success stories around the Microsoft ecosystem anymore. Who makes the quick bucks today? Phone game developers. Facebook game developers. That's what people are chasing, so that's what people are wanting to learn how to do on their own time.
Who wants to learn how to make Windows Phone apps? Or Silverlight apps? Or Windows app store apps RT or whatever the hell they called that mess. Noone, except those already being paid to do it. There are lots of steady jobs there, but exciting ones? No.
Well, kids were excited to fire up Visual Studio and write XNA code for their XBox. They might be excited now to use DirectX in the same way, though the barrier there is much higher. Then what about F#, TypeScript...Kodu and Project Spark?
All of this discussion is anecdotal, we have no hard evidence really what developers under 30 think about Microsoft. And kids are extremely dynamic and fickle anyways, they will quickly adopt any technology that helps them achieve their goals as things fall in and out of favor. So its not like there are hard external barriers to Microsoft winning back young dev mindshare, only internal cultural ones.
We also seem to do much better in Asia (China, where I'm more familiar) in outreach than the west. Perhaps that is temporary and a result of startup/hacker culture not really taking hold here, but for the present we seem to be doing very well.
> There aren't any success stories around the Microsoft ecosystem anymore.
This is quite a weird statement. In the enterprise, there are plenty of success stories that even I can't understand, like Sharepoint. Perhaps you mean the lack of "sexy success stories"? I could agree with that.
I think .net still has a very specific place in the world on internal intranet applications and tools. It's very easy to go in and make something good enough to provide the backbone web service layer between two departments, or to provide data entry and search services.
I don't think this advantage will go away overnight but at the same time the ease of entry and user friendliness of the open source tools is something that I've found Microsoft to be completely incapable of understanding. They/we would constantly talk about our superior tooling. But the fact that we required tooling at all when you could jump into roo or ror or cake or zf and issue a few commandline calls to produce 80 of the your site blows any of microsoft's tooling away.
Microsoft is fighting back and working to improve it's tooling. They have nice concept floating around to database versioning and javascript ide experiences, but in many ways they still seem to not get what the appeal of the open source competition is and i'm not completly sure if in the long run its an area they'll manage win back any mind share in.
I think on HN that's probably true but a lot of people here seem to forget that most programmers get jobs at a bank/insurance company etc. and spend all day coding in C#/VB or Java. I don't think being a MS developer is 'fashionable' but among young programmers who just want to do what they're told and bring home a pay check I'm sure it's still very common.
I don't get this holier than thou attitude. You mean you can't do innovative things in C# that you can do in Ruby?
How will LISP help an investment bank? How do the millions of CRUD apps in startups written in Ruby, PHP or Python change the world? What about F# being made a first class member of .NET?
An enterprise app in Ruby will be as boring as the one in C#. Its to do with a risk averse attitude instead of adopting the framework of the week. A robotics program written in C# or F# can change the world.
It breaks my heart to see an empty superiority complex at work here.
It's akin to carpenters feeling great about their choice of tools and insulting others choices rather than showing off their allegedly wonderful creations they built with the tools. For example, take StackOverflow, written in .NET and scaling much better than other web apps by using the right tools rather than getting caught up in partisan arguments.
Exactly where in my message is any specific technology mentioned? This post is about attitude. If young people cannot dream about more than a paycheck we are really doomed. If our young can only focus on what's currently demanded, who will build the tools for the future generations?
And why do people feel they need to hide behind throwaway nicknames before they can feel free to debate? Let me be perfectly clear I don't hunt down people who disagree with me. If there's something I avoid, it's yes-men.
So, people can't work for a bank or insurance company and still make a difference?
Why subscribe to such black and white thinking?
I'd argue that by doing so, you have an even better chance at affecting change than you would trying to do a startup, since startups tend to have a very low rate of success.
> So, people can't work for a bank or insurance company and still make a difference?
Of course they can, but if your focus is on earning a paycheck, it'll be much harder to make a difference because you may be unwilling to take the necessary risks.
If there is one thing I miss from my youth (apart from hair, perfect eyesight and the ability to fall without breaking bones) is my ability to throw everything up and start from scratch. I wouldn't trade that for my family, of course, and that is the whole point.
I wouldn't let it break your heart though. You can't expect every single young person to live up to your own unrealized ideals.
In any case, this really has nothing to do with Microsoft developers. Using open source tech doesn't automatically make one a great liberator or anything.
I disagree. I had the opportunity to work on a Windows 8 (metro) project and was quite excited by the idea (and I'm a young developer). However, after developing for it I wouldn't again for two reasons:
1. There just aren't enough people using Windows 8 and downloading apps yet
2. MS approval process is much, much worse than Apple's. They even included things like grammar errors in the review.
I think that's perfectly acceptable, really. The presentation layer is where much of the user experience is clustered, and correct use of the displayed language is part of it. A grammar mistake is as much a bug as a misplaced button is.
I would take this as a plus actually: they were being very detailed oriented and pointing out more mistakes than would have been expected. I doubt its sustainable though, as soon as the app load increases, they'll probably become more like Apple in detail orientation (unless they are using tools, I'm not sure, I have no idea).
What you say is quite true, but some of the consequences are regrettable. As mobile devices have shown, some user interfaces really should be presented as client software rather than as Web pages. Many apps work better on mobile devices because they have been implemented using a sync model rather than CRUD-over-the-wire.
Perhaps they will do so as part of this crusade for developers, but I don't think Microsoft has figured out how to capitalize on the renaissance in client software.
ASP.NET is no longer the go to choice for people wanting to learn about web development unless it is in the context of a company which is already using it.
More people seem to have heard of PHP when they think of programming, in the same way that Visual Basic was in the 90s.
It's not so much a question of better or worse, it's more about mindshare. Especially with beginner developers.
In the web world the onus is on MS to justify why they have advantages over Open source solutions rather than the other way around (as it was with desktop software).
I agree with your point. But I was just asking if you knew there was a difference between ASP.NET MVC and ASP.NET. I was curious because I said ASP.NET MVC and you responded with a criticism of ASP.NET. I find there are a lot of developers that moved away from technologies like ASP.NET (rightfully) and they believe that Microsoft's offering hasn't changed since then.
It was really a grab bag term since the same point still stands. I am aware that there are other technologies, the last I used with .Net was monorail which seemed to be a reaction to rails before there was an official MS version.
I have been making native Windows applications for years and I am still making them. Around year 2000, Microsoft was a reliable partner. They made the OS, provided the tools and others were free to make any applications they liked. There was little to complain about.
These days, being a Windows desktop software developer is pretty bad. Leaving out all the .net framework craze, Microsoft has made things much worse for many old software developers with their attempts to control everything. I am not OK with Microsoft being the one, who decides, whether users may run my software or not. I simply cannot develop for WinRT no matter how nice the native+HTML5 API may be. Even on desktop, Internet Explorer checks every download and hides the install button if the installer is "untrusted".
In short, Microsoft is not a reliable and respectful partner for independent software developers anymore.
> But the company has adapted to the new developer world, embracing the cloud and open source and contributing important new technologies to the developer community.
Ok, don't make me laugh.
I wonder how much they pay him for writing this stuff.
Which part did you disagree with and what evidence do you have that it's not true?
Have ya not heard of any of the hundreds of open source projects that Microsoft has released? Typescript? ASP.NET MVC? Entity Framework? Reactive Extensions for .NET and Javascript?
Oh, did you expect them to just open source every single one of their products or something? Apple and Google don't even do that and I bet you love them, don't you?
Any developer with a memory would be quite mistrustful of this "crusade", if any. Microsoft's pump and dump of technology stacks just plain hurts; the way they just made COM/DCOM nearly invisible by deleting the MSDN support pages and replacing them with .NET to force developers onto .NET was not pleasant. Granted, .NET was / is awesome (and if you were serious, your firm would have the relevant version of MSDN installed locally).
(I recently heard about something similar happening with Silverlight, but I am not sure. It was genuinely exciting when Silverlight was launched and it's features in comparison to Flash were trumpeted quite a bit at that time. Now : it's just silently gone). You never know when the rug gets pulled from underneath your feet with any Microsoft technology.
Let's say they get convinced that the next big thing is some form of Intentional Programming. They are not going to do a graceful transition from .NET to IP. They'll suddenly remove all references to the Old Thing on site:microsoft.com and all you'll see is the New Thing, trumpets blaring. This is psychologically difficult for a developer who has invested years, not just months, learning the Old Thing.
The same attitude is visible with how the Metro UI is being shoved down my visual pathways with Win 8.
A related but often tacit issue is that the pace of change in technology is actually a vehicle for age discrimination. All of us do it at some level ("Good God, COBOL on the resume?! What is this, 1979?"), but I think that the lack of graceful transition from older technologies to newer ones by large firms makes it institutionalized. You have to choose your skillset carefully; the human mind cannot simply absorb ALL of COBOL, C++, Java, Ruby, SQL and NoSQL! Or it can, but you're sacrificing something, maybe even personal memories, in order to hold technical knowledge.
I guess this particular problem might get better in the future.
Microsoft had a monopolist strategy, so it was in their interest to e.g. make those monopolist products hard to interface with other companies' alternative software.
This means the APIs had to be complex with subtle bugs, so e.g. something that could run Windows applications couldn't easily be cloned -- and, as you note, periodic replacements are also needed.
Since the monopolist strategy isn't that productive anymore for MS, the pump-and-dump phenomenon ought to get better...
Edit: Also note that over complex functionality that is regularly thrown away, so developers' investments are lost, is lowering our collective life quality. I don't use MS products anymore. Maybe when/if they need to compete without monopolist strategies...
Oh come on now. Microsoft didn't take away one single kit that they ever released.
Stuff from 15 years ago is still usable on Windows 8! Visual Basic 4, 5, 6, COM/DCOM, etc.
You can still use and get documentation for all of those, including Silverlight.
> The same attitude is visible with how the Metro UI is being shoved down my visual pathways with Win 8.
So what? Ignore it and keep using all the stuff that you want to because it all still works. If enough people share your opinion, the stuff you don't like will go away and you'll be happy again when they shove something better down your visual pathway.
Microdoft lost developpers when they traded bill gates for steve ballmer. Putting a salesman on top instead of someone who knows the art is the surest way a company can completely loose itself.
We've seen that over and over again. There's a reason why in the old family business boss' s sons had to start from the bottom, doing grunt work first for some years, then climb the ladder little by little, until they could pretend to replace their fathers as the boss.
I'm sure it would. Salesmen always see money first, art seconds, and they can't have intuition or give general direction regarding technical aspects. An example of that is windows 8 fiasco with its mix of tablet and desktop UI and surface fiasco. It is clear that they are following trends, but don't know where they're going. I can easily imagine ballmer looking at market shares and numbers to make choices issues by issues. That kind of thinking leads to products that are in the middle of nowhere.
I don't think billg sees art first and money/power second, but, at least, he can see art. It sure seems Ballmer doesn't get programming in any meaningful way.
I've been a Microsoft developer since QuickBasic. I program mostly in C# now. I love ASP.NET MVC. I love the new features in Visual Studio 2012. I love the extensions to C#. I work full time at an investment bank and do side consulting for creating highly functional websites. I see pros and cons of every framework and language but .NET and C# are the best for me right now.
There's a lot of negativity here and frankly I was a little afraid to post anything positive.
I'm still a student. I started with Java, but found out about C# after programming Java for 2 years. I'm so glad I did. C# is (in my opinion) much better than Java, it has loads of very useful features (LINQ, very easy async/parallellization, delegates, lambdas, a good UI framework) and Visual Studio is a much better IDE than Eclipse and NetBeans will ever be.
I mainly used C# for some client-side stuff, but then I found out about ASP.NET MVC, which is extremely easy to use and offers a lot of flexibility. It's also nice that they made it open source (just like Entity Framework, which is brilliant too).
Later on I came into contact with Azure. I didn't even know about Azure untill I saw Scott Guthrie's presentation about it on TechDays. I have to say I'm absolutely in love with Azure. Azure has seen phenomenal improvements over the last few years. In my opinion Azure has surpassed Amazon's cloud offering by far. They offer more features (imho especially the PaaS is awesome, their services make sure you don't have to deal with sharing stuff between multiple servers), offer both Windows and Linux servers (for very good prices), it's really fast and it's also cheap (prices are the same as Amazon's, plus they offer huge free trials). Oh, and their libraries for Azure are open source too.
There is no denying that Microsoft created a LOT of awesome stuff the last few years... They really changed into an open company.
They were forced to change into an open company in regard to development tools because of competition. And that's a great thing!
I think the programming world would be worse off without the spectrum of options available to programmers today. As it stands now, no development company can rest on its laurels and is forced to innovate and adapt.
What non-Microsoft technologies have you used? I say that because until I started playing with Perl, Java and, later (as in 2001), Python, I never really wanted to go back to MS stuff.
I used Visual Basic from version 2 to 6 (I was the first VB MCP certified in Brazil), VBScript (and ASP) for several significant web applications (mostly e-commerce), VC/C++ 6 (for the Windows CE-based electronic voting system, in 2002) and Visual Basic .NET and C# for some desktop and ASP.NET applications.
I haven't played with ASP.NET MVC and other recent Microsoft technologies.
You know nothing of Microsoft technologies that have been used for the last half decade and more then.
I have an MCSD certification in VB6 but literally nothing of that helps with their modern dev environments. In fact knowing VB6 hurt the process of learning the new stuff.
While I don't think my C++ or C# is an example of modern and idiomatic Windows programming, I wouldn't say I know "nothing of Microsoft technologies that have been used for the last half decade and more". I sure haven't used them, but that doesn't mean I haven't read about them.
You mentioned you used "Assembly, Turbo-C, Turbo-Pascal, Borland C++, Java, Javascript, Perl and many, many others", and, apart from JavaScript, none of them is closely associated with modern non-Microsoft development. I initially questioned you about it because, like myself, lack of knowledge of other options may hinder your ability to clearly assess a given technology's advantages.
>You mentioned you used "Assembly, Turbo-C, Turbo-Pascal, Borland C++, Java, Javascript, Perl and many, many others", and, apart from JavaScript, none of them is closely associated with modern non-Microsoft development.
Yes, but the difference is I'm not criticizing modern non-Microsoft development.
Sure. But when we say X is great it is somewhat implied it's great compared to non-X similar tools. I believe Microsoft is offering decent tools compared to their more direct competition, but I'm yet to see something that makes me curious enough to really try them. I'm exceedingly happy with my current Python based stacks and curious about Go. I'd love to find a good reason to dig deeper into Ruby and Clojure, but, when it comes to Microsoft or C#, the move doesn't seem worth it. Not only because of the technology, but you have to change the whole stack, from server OS to developer desktop and deal with their idiosyncrasies.
I don't like Microsoft, but that doesn't make me wrong or willing to misrepresent facts.
As you can see from my answer, I've used Microsoft technology extensively in the 90's. My move to Unix environments happened in the mid-00's (until then, I still used Windows on my desktop)
If Microsoft wants to succeed at this angle, they are going to have to make a decision. Full, first party support for .net and other products on Linux, OSX and Android. Complete app portability between all platforms, with all features. (This means OpenGL, not DirectX, etc.)
If they do that, developers will love them, but their Windows division will kill them. If they don't do that, only developers who don't know any better will use them.
Call me when they stop threatening Android makers, and after the next standardization effort that affects them but they don't sabotage, and I might consider them again.
The last great IDE Microsoft put out was Visual Studio 6: the C++ compiler optimizations were amazing, the UI was zenful (you had to know your hotkeys for things, gasp!) The darn thing just did everything, and I enjoyed working with it.
Versions after 6 had more and more panels and property sheets started cluttering up the works and crowding out my editor, and there were lots more things begging for the mouse rather than the keyboard.
Seems like their tools philosophy changed after Y2K. It was writing on the wall for me to move on when Ctrl+Tab/Ctrl+Shift+Tab in VS stopped working like a stack of MRU editors because they started adding visual/clickable tabs at the top for all the open editors. "It would be confusing", said the marketdroid, "to have Ctrl+Tab jump all over the place between these tabs here - better to just cycle left and right through the editor tabs in the order they are displayed." Sigh.
Ctrl+tab is MRU in VS2012. Or at least it is on all my machines and I never had to configure anything there.
Also, you're complaining about very superficial stuff. My VS layout has a file explorer on the left, big code view on the right, current errors and warnings / console output on the bottom, and that's it. How is that bloated? It's basically what sublime text looks like, but then whiter.
It literally takes 2 minutes to hide all toolbars and install the 'Hide main menu' extension, what's the problem?
Usually this is the application's fault. When you open a file with the Windows API there is a bit mask of what another handle can do (read, write, and delete/rename). The problem occurs when you specify 0 for this parameter because you're looking at MSDN and you don't know what any of this means. That locks out concurrent access to the file.
There are some other weird behaviors that probably shouldn't be there (such as renaming the parent of an open file or the behavior when an open file is deleted) but an application misusing the sharing flags is probably what you're thinking of.
So you're saying, for example, that you can delete files that are currently open in another process in Windows? So not hypothetically: you've personally succeeded at deleting a file on Windows that is currently open in another process?
Also, is it the other process'es responsibility to open those file handles with the confusing, poorly documented, non-zero flags so that I can read/write/delete from my process? What if I don't own or control the other process? Am I just screwed in the majority of real-world cases?
I suspect the problem here is a lot more complicated than me not setting open flags and getting all cross-eyed when visiting the CreateFile page at MSDN. The real problem is Microsoft's insane default file open semantics that do exclusive locks purely for the sake of compatibility with 30+ year old legacy. I've lost face on jobs because of file locking going on that was out of my control and creating havoc in my app. If we were targeting Linux, there wouldn't have been a problem, so the status quo is not okay.
In my opinion, Win16/32/64 code should be sandboxed and only run in VM's in future OS'es; shed the legacy design decisions like pessimistic file locking completely. Trash the standard Windows API (not just hide it) and give me a next-generation Posix or CLR as a sane platform for new development.
> that you can delete files that are currently open in another process in Windows?
You can. However, there is an unfortunate behavior here that is different from Unix. When you delete an open file you cannot re-create one with the same name until the handle is dropped. (Once that gets to the NT APIs it will fail with STATUS_DELETE_PENDING until the last handle is dropped).
You could work around this by doing rename + delete instead of just delete.
I thought this behavior was dumb until I looked at the on-disk structure of FAT. No inodes. The filename is your inode. It makes it easier to implement a FAT driver if the semantics are such that the name entry sticks around until the file closes. That is a weak excuse, and sadly the people in the Windows division with the power to change this don't really care about it. (FYI, I worked in the Windows division from 2008-2011, not that I defend everything they do.)
> poorly documented, non-zero flags so that I can read/write/delete from my process?
Yeah, I agree this was kind of stupid. There are internal folks at MS, some of them quite influential, who think it's stupid too. But it's already been done.
> The real problem is Microsoft's insane default file open semantics
It's only "default" in that if you pass 0 it's what you get. If you think of "default" as FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE (and if everyone writing Windows software had that in their head) things would be a lot better. Granted that's a big if.
> Trash the standard Windows API (not just hide it)
This is the same fallacy a bunch of internal people came up with in Windows 8, however the truth is large chunks of the Windows API have nothing wrong with it. For example with what I'm sure are very simple changes in ntfs.sys, the corner cases around files being open [the ones I mentioned in my earlier post, not the ones around sharing flags if we consider them "by design"] go away, without invalidating every API in existence.
> You could work around this by doing rename + delete instead of just delete.
That's um, inconvenient. I've heard similar tales, but I'd wager there are many more corner cases that could bedevil us. For example, what about .dll's and .exe's that are currently open in other processes? My experience has been that you simply cannot do anything with those files once they have been opened.
The whole Windows file system just seems like a rat's nest of bad and worse design decisions.
> Granted that's a big if.
Stop. This is a bad design decision that has surely cost industry billions to reckon with and maybe cost a few lives along the way too. This is not the developer's fault.
> Yeah, I agree this was kind of stupid. There are internal folks at MS, some of them quite influential, who think it's stupid too. But it's already been done.
Hm, sounds like you're an insider! Right, well, I'm not satisfied with that blasé attitude. I think you ought to take more pride: Windows is kindof important, like, to humankind. It is really unethical to leave such bad designs in place, festering and impeding our progress and wasting our time. Your internal folks at MS who are clueful need to be heard.
> > Trash the standard Windows API (not just hide it)
>
> This is the same fallacy a bunch of internal people came up with in Windows 8, however the truth is large chunks of the Windows API have nothing wrong with it.
Seems to me that Windows RT could run on any kernel or VM. If that's the direction all development is going to take at MSFT, then do everyone a favor and chuck that boat anchor Win32 and plop the legacy apps into a VM ghetto running in seamless mode.
Was. As the comment you're replying to mentions in parenthesis, I wasn't there for all that long and I left a few years ago. Not that I in my lowly position would have been able to convince people to change some of this stuff...
> Seems to me that Windows RT could run on any kernel or VM
It's pretty heavily tied to Win32 and COM.
I think the way you're talking about it is a little weird though. Would you criticize Android, for example, for having a Unix-like system underneath? I mean, 'cause Unix is like.. old, and stuff. </snark> Stuff simply being old isn't really a compelling reason to discard it. I'd say NT especially is mostly on the right track in terms of being a modern kernel. Not without its warts but it doesn't deserve comparison with DOS or 9x. COM has some good ideas at its core too.
Ah, I did not know that. So, is WinRT a peer to Win32/Win64, or is it built atop Win32/Win64? I have heard that COM is bread and butter to the way Microsoft teams compose their systems, I should have known they would have based it on that. Maintaining the legacy through COM seems to encourage coupling in the design that would make it impossible to change out the OS underpinnings.
> I'd say NT especially is mostly on the right track in terms of being a modern kernel.
In the abstract, yes, NT is a vision of pure loveliness. NT 3.5 was super exciting when it came out, such a rock solid business OS (at the time)! Not sure what we got now in the concrete sense though - it's a real hodgepodge, new and old. I sense all the wise greybeards who could provide the vision have long since moved on.
I'm not suggesting Unix-like is a panacea, but it's on a better path than Windows as far as file systems go. There are surely optimizations and streamlining that a new design could showcase to blow away Unix/Linux/BSD. A new design from Microsoft would be refreshing, mainly because they have the cash and power to do it right and still offer their all-important backwards compatibility.
I've never done much Windows development, but even as a user, I've wondered what is up with the file locking. In the *nix world, deleting an open file is no problem. It just goes away when the last process closes it. In Windows, you can't drag a file to the Recycling Bin if an application has even used it recently, it seems. I always wondered what the heck that was for. So it's a legacy of DOS?
So, what is the correct way to open a file in such way you can still read (or write it) it if another process moves/renames/deletes it? Are you implying everyone who ever wrote an installer that can't install something without a reboot lacks proper understanding of how to open files?
Consoles have been shrinking in unit volume in the current generation, and it is an open question if the next generation can reverse that trend, or if it's game-over. Nobody has ever succeeded at mixing the AAA-game model with open access to indy game developers. It's an attractive idea in isolation, but it doesn't work for the AAA publishers and console-makers. And it is unclear if anything really works in that business anymore.
What the?
In the 90's, if you wanted to "program", and if you wanted to show other people your skill, you made a windows executable and distributed it through one of the myriad of windows shareware/freeware websites. "I want to learn to program" meant firing up Visual Basic and having a go. And Microsoft was king, because they had the best tools, and they had the platform everyone was using and targeting.
Now, almost noone makes windows executables anymore, if they want to show off their skill. People wanting to learn to program would never use Visual Basic today, it's completely off the radar. They are much more likely to learn some web framework and put up a web app to show the world, or make a phone app and put on an app store. Windows executable? That doesn't run on your iPhone or MacBook or Android.
And Microsoft has no idea on how to get the new learners back. They have nothing to offer them.