Solving the Worst Problem in Programming Education: Windows
learncodethehardway.com
learncodethehardway.com
My personal observation is quite different - this is clearly written by someone who lives in his bubble.
Most obviously: most corporations do use Windows. Also for technology startups outside of the "web application operator" type (here it depends a lot on the local culture), many use Windows: often because this is what the customers use, and the software/service of the startup has to be compatible with the ecosystem of the customer.
Not really.
They put it on desktop with packaged software. The software they develop themselves run almost exclusively on Linux.
We tend to dramatically under-estimate the market share of Windows in engineering.
I have no trouble believing that most companies run Windows and develop on Windows. I just don’t particularly want to work for these companies.
But programmers have many more choices, and visual studio shops aren’t very common anymore, at least in the developed world, and I would bet countries like Russia and China as well.
I use Arch btw.
When Shute uses three dots it means, "Use your own imagination. Conjure the scene up for yourself." (pause)
Whenever I see three dots I feel all funny.
~ https://inkscrawl.blogspot.com/2005/01/whenever-i-see-three-...Or as a passive-aggressive suggestion that you're incorrect in whatever is being responded to.
Definitely no (positive) funny feelings.
But that was a long time ago. Along came Google whose master plan looks to have been to turn the web browser into the business platform of choice. Seemed like insanity at the time. Yet here we are. Browsers have since become masters at playing video, can handle interactive voice, and can talk directly to the GPU. Now Microsoft wants you to use Excel of all things in a a web browser and has dropped the Windows native version of Outlook in favour of the web one packaged as a desktop app. Seems like Google made it's vision work.
I know there are some heavyweight applications out there like video editing and Engineering CAD with finite state analysis that need raw metal performance. But they are few and far between, and aside from them - who is doing Windows native development any more? Certainly not the firms that make accounting packages - the abandoned Windows long ago. For those that are left - are they going to survive the transition to ARM and RISC-V?
POSIX / Linux / BSD / whatever applications - they continue to be as strong as ever. They drive embedded at one end, and the servers at the other. That sort of development is easiest to do on the the target platform, and since it dominates now Windows had to emulate that platform if it wanted to keep the developers. Which is how we got to WSL.
But Windows native app development - that seems like it belongs to a bygone era. Now even Microsoft develops own apps target Electron, not Windows.
I indeed have the impression that some industries (e.g. banking, insurance, development of engineering tools (e.g. CAD applications), PC gaming, ...; observe that at least banking and insurance are two financially quite powerful industries) have a lot more love for the "Microsoft ecosystem" (Windows; in banking and insurance also Microsoft Office) than Microsoft actually does. Thus, in these industries Windows (and Microsoft Office) is used and Windows software is developed despite Microsoft's actions and stance.
Yes, but that's because I moved companies. The bank in question still uses Windows.
> I know there are some heavyweight applications out there like video editing and Engineering CAD with finite state analysis that need raw metal performance.
WASM and WebGL etc (or whatever the newest developments are called these days) are there to make working in the browser faster.
Btw, if you have beefy enough servers, it's not the 'weight' of your application that's the problem, but the latency.
> For those that are left - are they going to survive the transition to ARM and RISC-V?
Just recompile, or use the automatic translation of binaries that comes with your OS.
And even if you, for some insane reason, decide to pick Linux and fight its technological challenges, in the end only a tiny percent of users is going to use your product. Yet they will be responsible for generating over 50% of the bug reports. To make matters even worse, most of them will come from Arch Linux users, providing absolutely useless debug traces because they use a distro notorious for not shipping the debug packages.
You have disproportionately more beginners using it than more seasoned professionals. Hell, I barely use it, and I have questions every day - I just look up the documentation instead.
This is like saying most people love overpriced dropshipping, just because an advertisement company tracks how many of the people who click on ads buy dropshipped garbage. Its a massive bias.
Windows for development is really a common choice if you make video games, hospital, school software or desktop stuff. But even there there are exceptions. It's unfortunately a common choice in some, esp. American companies where the product is intended for Linux, but they would still hand out Windows laptops to the employees because of their bad / backwards IT that only knows ("knows" is an exaggeration here...) how to work with Windows. So, it often comes to that an employee gets this decrepit system, but then works on Linux anyways, but the experience is worse because they need to jump through some hoops to get to the system they actually work with.
Anyways, any claims about what "most corporations" do smells like LinkedIn posts promoting a technology, where the claims are usually made w/o any research but also any way to disprove the claim. Just don't go there.
So, by the time we became Google, nobody really thought about it as a viable option.
There's a clear dichotomy internally in choice of operating system. Corporate, project managers, and people managers use Windows. Developers and technical people use Linux (and we used to support Mac OS but that was recently dropped). Recently Corporate IT decided to move on-prem services to a Microsoft-hosted SaaS cloud, which caused some pain for the majority of employees but there was some kind of kickback or discount and some line in a spreadsheet was tortured to reveal the right numbers, so the deed was done.
Of our customers, about one third run our product on Microsoft Windows and two thirds on Linux. We certify both but only Linux gets dogfooded and support for Windows customers tends to be higher. The only people who ran our product on Mac OS when it was available were students and hobbyists and small startups whose license fees wouldn't keep our office lights on long enough to walk to the coffee machine.
Who do you think writes all the Windows software? There are hordes and hordes of people writing code on Windows for Windows all their lives. Server/web software aside, there are huge layers of windows-only software.
Lock-in isn't just a strategy or a quirk, it is Microsoft's business model in every context. From monopolist strongarm tactics to lobbying for kafkaesque international copyright laws they have drafted, the goal of Microsoft is to put every human being in their little tinpot dictatorship and prevent them from leaving
We should suffer no such tyrant to live, let alone cave to its demands
Incidentally, is there a good way to build native Android apps on Android, without installing Android Studio?
Wait, Android Studio doesn't even support Android.
I have mac, Windows and Linux machines.
It's funny to observe HN bias against Windows.
Makes me wonder what other strong biases I'm being exposed to without noticing.
Let me illustrate this by example: let's say you don't even power up your laptop -- it's hard to imagine that you are locked into something in this scenario. The lock-in will be ultimately contingent on what you do with the system, not on what you don't.
Has notepad++ erased someone’s computer before? I did some quick googling and didn’t find much.
It seems really weird to bring this up if there hasn’t actually been any problems. Especially given the line that follows:
> Each of these have caused me weeks, months, or years of support problems because of their stupid decisions.
The truth is, programming is an expression and often a very political one (see open source). I’m immediately suspicious of the motives of anyone who says project authors shouldn’t talk about their beliefs
1. An expected development of this sort of political message is blocking access to the tool's website to users from some countries, either by the website owners or by the relevant authorities.
2. Wiping people's files as part of open-source-as-political-message is less common, but not unheard of: https://www.bleepingcomputer.com/news/security/big-sabotage-...
3. Using or even advertising Notepad++ in Russia is probably not dangerous yet. Don't know about China.
[0] I do know the suggestion to sell support for software rather than selling software itself but that's a political view as well, trying to persuade businesses to earn money one way rather than another.
https://www.gnu.org/philosophy/open-source-misses-the-point....
I would never build software for a defense contractor, or any other myriad of nasty things engineers are hired to do.
In a similar vane, if my work has given me a platform (ex: a popular open source project) then it would be a waste if I didn’t use that platform like Notepad++ is doing. (Though I’d probably restrict messages to the download page)
I love WSL2.
good UI on Windows? are we talking about the same OS that uses UI paradigms from at least three different eras all in one?
and the little maintenance is laughable. force reboots galore on Windows.
And when it comes to maintenance, yup there is less of it. Linux users are constantly dealing with this or that hardware not working, not working after update and what not.
Linux is better on the server. But for a user, nope.
Few examples (Windows 11):
- You cannot move taskbar to different edge of the screen.
- By default, search shows results from bing.
- Three finger swipe gesture animations to switch desktop or open task view are jarring.
- Explorer window shows partial UI first and then fills in the rest of UI.
- Ctrl+F or F3 doesn't focus on the search field in Settings app (and other MS apps that have search bar at the top of the window).
- Connect to external monitor and close the laptop lid, the laptop screen doesn't get disabled, it is still enabled and you can move windows to it.
- In tiling mode while resizing a window, causes other windows to show the app icon instead of their content.
Here is another amazing thing: All operating systems (even chromeOS these days) have a system settings to configure keyboard shortcuts, for some reason Windows doesn't (probably because all system level keyboard shortcuts are hard-coded in things like dwm.exe or explorer.exe).
Older versions of Windows have some aspects of UI better than Linux, and others worse. Newer versions of Windows are often worse in other ways too (although there are also a few benefits, but mostly it is worse).
fixed that for you. when you have existing, already supported hardware, it does not break constantly on updates.
Also, while I cannot really speak to how Windows contributes to the experience, I know for certain that the integration comes with a tall bill to pay. You don't get to manage your computer with Linux, which is, ultimately, what it was built for: to empower the computer owners to take ownership of their hardware. And you don't get that when running in a VM. You are totally missing the point if you do that.
Linux command line is great, when it is in wsl I get to have it without having to sacrifice the comfort.
Worlds better is still worlds apart from native.
To play devil's advocate: so if you use devcontainers you are developing on Linux actually?
Even though it has a more positive reputation for being cross-platform-capable, I will also observe that the Rust crates who strive to support Windows equitably seem to pull in quite a lot of platform specific code as conditional dependencies. Whether that is because of rampant Unix-isms or POSIX brain worms or whatever, I don't know, but it certainly seems to pose a maintenance/complexity burden that isn't there otherwise.
A simpler environment can make a difference between someone pushing on vs giving up.
The point of education is to understand how to do something. An editor that uses Electron is a massively complicated system that's impossible to comprehend. And so is a virtualized operating system. You would have to twist yourself into knots trying to explain the reason behind terminal existence and function, if all you have is Windows -- all because that system ultimately doesn't need one, it's contrary to how everything works there.
More so, all these tools were developed by Microsoft because they wanted to get developers' allegiance by feeding them with superficial fakes, by doing market research and implementing the most "liked" features -- not unlike the spirit of other Microsoft products. And, like with other Microsoft products they've created an ice-cream miso soup with churros and peanut butter. The tools are pathetically bad, but they've managed to convince a lot of developers they are good by specifically checking the checkbox they've complained about. A reverse malicious compliance of sorts.
This is your opinion. I like all three.
About 10 years ago (funny that you mentioned that era earlier), before WSL, I was using Sublime Text, mintty and MinGW.
I even had a project to auto-spin a unix-like shell for windows: http://github.com/alganet/shunt (doesn't work anymore since ms crippled wscript).
VSCode is just another bloated Sublime Text clone. Language servers are a fine addition and I respect them, but pretty much everything else is a ms-branded copy. It's good, and I like it, but considering what it could be it kinda sucks too.
For example with Python, the author can standardize by having all students run the Anaconda Python installer alongside Visual Studio Code. This left us with virtually zero install/setup issues. Alternatively, using wsl2 you could set up any language very similarly to Mac/Linux.
In any regard, setup is typically a one-time cost. Once configured, students typically have no additional problems running code. That said, reducing getting-started friction is always welcome, and the author came up with a nice solution for personal computers. (Running `powershell -executionpolicy bypass` may not work on corporate laptops.)
It'll be a one time cost for your setup. Then a one time cost for the next setup as the student tries to do something else. Then another cost for the next effort. And the student will never gain any skill understanding or comprehension for any of these barely related steps.
Wsl2 is indeed savings Microsoft's bacon, by being some place where there are clear rules & patterns & behaviors, & where there's some kind of coherent underlying substrate. WSL2 is saving MS's ass. By not being Microsoft and by especially not being Windows. By being something social, with layers of accepted communal tools & platform.
If the setup portion is a huge issue, students can use a pre-configured web solution such as replit. There, you're guaranteed to become dependent on an opaque third party platform (all just to save some minor setup hassle).
I think that's what he's complaining about. It's been a one-time cost, for 30% of customers, each with a different issue.
I also found the author's conduct shocking, people's memories are fickle and making this implication once was bad enough, but insisting on repeating it? Feels like the author _wants_ people to misremember and erroneously believe that Notepad++ was the software package in question.
The notepad++ guy comes across as a dingbat who cares about certain political things more than the software he's producing. This is a risk indicator. It doesn't matter if you agree with his current views or not. What happens when he takes the next step in using the software he's created to further his political ends?
The author is right to prepare for this possibility.
I'll be sure to pass this valuable message along to vim users that have been :q'ing political messages for the past 15+ years. They're gravely endangered!
I don't honestly remember, but, did none of the author's vicious attacks and bitter diatribes posted online over the years include some slander?
That was Microsoft's database, from Microsoft's website, to be installed on a Microsoft's OS.
The why part is harder. My theory is Windows is made of many shells of of code, and they older parts of the system will never be refactored. I think someone counted 5 different gui interfaces in Win 11.
To be fair, MS is handcuffed by backwards compatibility. So interfaces remain frozen in time because changing anything can break compatibility in ways impossible to predict.
Fun Fact: File Explorer can keep changing because they never promised anyone they would keep it compatible with anything.
Edit: Just to say I did comment on the linked article, I never dreamed I would ever read the words "use PowerShell to create a nice GUI".
I've used Avalonia, which is based on WPF. Its TextBlock control works the same way, which means the default way to put text on the screen is inaccessible. But if the programmer is thinking about it, they could use SelectableTextBlock instead, and then the text is available to the user for selecting and copying.
Ironically the whole thing just damages my trust in the author. People who see other people's forthrightness about their own beliefs as a negative are people who should not be trusted, they are people who view a kind of dishonesty as being a virtue, and honesty with suspicion, consider what that means for somebody's trustworthiness.
And how would that course work if every one had a aligytly different laptop with different OS versions?
That said, programming for over 20 years and I still sometimes have problems w/ environments, so... yeah.
The author is more for the use case of 'hey I have a full time job and want to change careers to programming, how could I get started?' or 'i couldn't get into college even if I could afford it because that's just not a path my community is set up for, but I'm motivated and want to learn programming anyway'
I did ... the thing is, most college students need a lot of help, especially in earlier classes. On a statistical level it's somewhat the opposite of a population of self-taught programmers, who self-select for being into the gritty details of computer systems, and being able to figure stuff out. You know, in most college tracks, there are problems with lots of students needing help, cheating, struggling, it's kinda the regular state of things, now that most people go to college.
Some college students switch to something else later; some continue to need lots of help with system setup when they start working professionally; those who are really good were largely self-taught either before or between college courses. College/university is still useful for the self-taught programmer, to cover gaps, and for the advanced courses. I had been installing, configuring, fixing, and re-installing windows and linux for 4+ years before university, and I really loved my systems programming courses.
Now that there are millions of programmers out there in the world, working professionally, yeah lots of them are kinda useless ... there's a reason why "average" doesn't have a great connotation.
For me, the key really is the commandline. Learning powershell is not something I'm going to do.
(German is just the language I have the most familiarity with. I don't know how the programming material available stacks up to other non-English languages.)
Will you mind when everything re-standardizes around Chinese?
But I hope humans of the future can standardize around something. It's better than the alternative.
[0] https://www.scientificamerican.com/article/chinas-population...
If it changes to another language, then I guess I'll have to learn how to use the new language professionally, much as an opera singer might have to learn how to sing in Italian/German/French/etc.
Though there are computer languages like APL or Scratch. Or Lisp/Scheme and Forth, which are only marginally English-like (though their libraries may depend on English literacy.)
AppleScript is an interesting language which had English, French and Japanese dialects.
Its perfectly fine if you are a web dev... or you develop ONLY for windows, but I think that is a terrible mindset that stunts your growth. The way that VS hides all the "complexity" behind layers and layers of menu's is god awful. I dont want to learn how to speed click through a GUI, I want to learn whats happening on a lower level.
I wonder if Zed knows that Guido van Rossum works at Microsoft now. I wonder if his head will explode when he finds out.
EDIT: Why the downvote?
> Please don't comment about the voting on comments. It never does any good, and it makes boring reading.
Yeah WSL exists, but that's adding a whole new layer of complexity and indirection and leaves developers without any ability to program natively for the most popular consumer OS around.
Touching the complexity and the sorry state of IT things is VERY good in didactic terms. It teach an important lesson to start changing the mindset.
But the fact is that IT in our society is our social nervous system and to be Citizen we must know that enough to operate alone, being not so easy tricked by some PR etc. Obviously most citizens have definitively not enough knowledge in that field but desktops today are books and libraries of yesterday. We can't have a modern culture without the modern tools of knowledge.
Knowing them is like being able to write with pen and paper before and as we can't progress in schools without knowing how to read and write so we can't in modern world progress without knowing to use a desktop properly. That's is. All the tentative to "lower the barrier" have created more issues than those they try to resolve. It's about time to admit it and correct the aim because as a society we are heading to a disaster fueled by some big tech interests exactly because of the ignorance of most.
Well, there's always emacs and vim.... oh, wait....
Develop Linux server software on macOS is the worst idea of all time.
This article feels about 4 years out of date which is more a commentary on how fast the industry moves and how sometimes not even Google can burst your bubble.
It’s the students who suffer.