Recovering windows users shouldn't switch to a "windows-like" DE. Give them something totally alien like GNOME or Budgie. Likewise, we should recommend ex Mac users KDE or Cinnamon.
Reason: Linux is not the same as those OSes. Its imitations of their interfaces are incomplete, so it will feel like a knockoff.
A new GUI paradigm sets Linux apart in the mind and encourages learning. Then once the user is proficient in customizing their desktop, they can bring back the features they valued in those systems.
(you are just confused because posix compliant shells have corrupted your mind)
> do-action -param "string" $variable (do this first) [type]value
To declare a function:
function do-mythings {
param([int]$argument)
$argument + 5
}
> do-mythings -arg 5
10
That's all you need to get started.
Numbers are just numbers.
Inline math just works. Parentheses for order of operations.
Strings you put in quotes - double quotes allow interpolation, single quotes don't. This is the same as sh.
All variables are prefixed with $s. Even when declaring them. This makes slightly more sense than sh.
A region in {squirrelly braces} gets the [scriptblock] data type. It's like a lambda but comprehensible by mere mortals.
if (test) {success} else {fail} - the test is always executed first because (). Success and fail conditions only depending on the test. They're script blocks. No weird special syntax, if may as well be a user function.
Functions can be named anything, but the convention is Verb-PlaceThing. Not case sensitive.
Named arguments are specified with a single hyphen, like MIT Unix software (xorg for instance). If there is only one parameter the name is optional, etc. Param names can be abbreviated as long as they aren't ambiguous. This is also easy to follow with your own functions, unlike in sh (fricking hate getopt).
Types are inferred dynamically because it's easier to write scripts that way. If you need to force something (variable, expression, whatever) to have a specific type, put it in [brackets] beforehand. The type names are the same as c# and every other post-algol language. For comparison, posix shell only has one type, String.
To make an array, @(item1, item2, etc)
To make a hashtable, @{
key1 = val1
key2 = val2
}
Adding strings concatenates them together. Adding numbers adds their values. If this is not satisfactory, declare their types and it will work.
All expressions are technically objects with properties and methods. $var.property returns the value of that property. $var.invokeMethod() runs the method, which is just a function built into that data type by some poor intern 20 years ago.
Pipes (|) work similarly to sh, but transfer objects. The current object in the pipeline is always the variable $_.
As a bonus, here's a one-liner for opening Internet Explorer on Windows 11 (they lied, it's still there, they will never remove it)
COM is an old windows api. Com Objects are just instances of apps. We open internet explorer as a com object.
The parentheses sets that as an expression, and its return value _is_ the exploder. It has properties like visibility, which is $false by default. This is boring so set it to $true. Now we have a real working instance of an app they've been trying to remove for years, because they can't actually remove it merely hide it away. As long as the windows api can parse HTML, this will still work.
Notepad: this is fine. There are only a couple features and they're pretty obvious.
Pico, VS: idk haven't used them but it sounds right compared to nano and vscode respectively..
Vi(m): the reality is, you will learn hjkli<esc> and that is all you will use for months. Then gradually find more features, by accident or by google. I get the meme, "haha vi users have to remember all those keybinds", but it's just not like that at the start.
Emacs: ugh, where to even begin. First of all this graph demands poetic interpretation, because proficiency cannot in fact bend time backwards in a spiral. Second, Emacs is even more like notepad ootb than vi is. It has a menu bar at the top, what could be more noob friendly than that? No, the Emacs graph here should look more similar to the Visual Studio graph, or perhaps a taller version of the Pico model.
The problem these graphs exist to ignore is that
All editors are quite boring
And all learning curves are simple transformations of each other.
Thinking about expectations in the Linux-adjacent communities. Expectations new users have of their elders. Expectations veterans have of noobs. Expectations about software, about how easy it should be to get something working.
I have no strong personal feelings about mint. It happened to be a good first distro for me, and i like the colors. My disrecommendation of it comes in bullet points:
Mint is touted as a "windows-like environment" on account of the Cinnamon desktop. However, Cinnamon and windows 10 have deceptively little in common beyond the general layout - iv said this before and I'll say it again: don't give people a knockoff of what they're used to, give them something new to learn.
Mint disables, disallows, discourages, and distrusts snap packages. While iv seen a huge amount of hate for these, and the technology had a rough start, they're not any more of a pain than flatpak (and way better than appimages, yikes). In fact, removing them from what was otherwise an Ubuntu system causes more problems than it fixes - for months last year it was a pain to run Chromium on mint because the Deb was broken and snaps were disabled (iirc - might be misremembering. either way the snap war is not a good cause imo)
Release speed - when i got started with Mint in march of 2020, I downloaded mint 19.04 cause that was the version on the website. Mint 19.04 is based on Ubuntu 18.04 which had a 4.18 kernel. Everyone else in 2020 had a 5.2 kernel at least. There is a balance between stable and up-to-date, and Ubuntu has mastered it. Mint, by necessity, lags behind Ubuntu. Heck, there's even the time the mint devs had to beg users to update because of a security issue, and found that most users had never bothered updating!
Ubuntu (gnome) is different from both macos but windows interface in obvious ways that encourage a paradigm shift in desktop usage.
Snap packages are extremely meh, but they ain't here to steal ur freedums (yet).
Ubuntu has the second best software compatibility of any Linux (best is Arch), and a lot of pkgbuilds in the AUR are just extracting debs from Ubuntu ppas anyway so it's really close. Ubuntu tells you to update and makes it easy with the popup which you can close or banish.
Rationally angry. Education has failed our generations about computers, about language, about our own history. As a lucky person i am appalled by the fate of the less fortunate, and still more by the fact that it could have been prevented, that if the people setting us up had got the fuck over themselves we would ALL be running linux and using big words and fixing the world.