To any non-js dev taking this too seriously: A good half of the technologies mentioned in this meme are redundant, you only need to learn one of them (in addition to the language). It’s like complaining that there are too many Linux distributions to learn: you don’t, you just pick one and go with it.
Part of the problem is choosing from those options (when you have a choice). Open-ended questions like that nuke my productivity when starting a project because I spend more time researching and weighing options than actually programming.
As time has gone on, I’ve increasingly become a fan of restricting how many ways devs can do something.
you just pick one and go with it.
Might be my ADHD, but I can never just do that. But I posit that excess choice hurts feature development pace by wasting effort on reinventing the wheel.
A good example is the Nix ecosystem:
Nix expression language provides almost no constraints, leaving users to do the same things in a bunch of ways, and preventing a clear notion of which way is generally best from arising…which makes upstream super conservative with implementing new features the community wants, because any decision might break one those things. Leaving us with a 5+ year old “experimental” feature + CLI used by 80% of users, but no consensus on an official implementation. So many simple upstream changes become a series of 3 competing community projects providing a solution for that feature, further preventing consensus.
I feel the same way. Designing good, opinionated APIs is HARD, but it also provides the best experience for both the author and the consumer.
Prettier is the undisputed king of JS formatters because it has no options by design. You set and forget.
One of the reasons iOS is so successful is because they lock down their APIs and put strict standards on apps, making it hard to write something that doesn’t at least look good and slot into the OS well.
This is exactly why I always tell myself it’ll be super fun and easy to replace a Linux distro on one of my machines, and I do the fun part of balancing release style, desktop environment, all the shiny stuff…know what stops me dead in my tracks upon install?
Deciding a file system. Because it feels like such a weighty decision with far-reaching effects.
According to internet research, they’re all the right one, they’re all the wrong one, they’re all just fine, and don’t use any of them because they’ll wipe all your data. Lol
Your documentation on file system choice is either anecdotal or engineering-masters-thesis, seemingly no in-between.
I’ve just decided BTRFS with snapshots is great, and keep good enough backups that I shouldn’t have to fiddle with the fanciest deep-knowledge features to save my system.
Your documentation on file system choice is either anecdotal or engineering-masters-thesis, seemingly no in-between
God, I feel this so much. All the benchmarks are such ass too.
I have also struggled with picking a disk layout + FS, and landed on using a single BTRFS partition with FDE.
For now, I’m happy. Unless there’s a new FS that definitively beats BTRFS on NVMe perf and supports copy-on-write and something that makes FDE as easy as subvolumes that definitively beats BTRFS on NVMe drives, I won’t even bother looking into it again.
I’ve considered moving to a RAID setup, but it seems like more trouble than it’s worth, since I do regular /home backups & NixOS keeps my entire system config in version control.
If I ever consider a different disk setup, I’m just going to fire up a clean distro install on a spare NVMe and benchmark my most common tasks myself.
NixOS has killed my decision paralysis for choosing distros and desktop env stuff since I can just enable whatever in my config, try it out, then revert if I don’t like it enough to switch.
Only thing I can’t trivially test is disk layouts, but with disko, it might be easy enough to create a custom NixOS installer that:
auto-installs a disk layout & your config
reboots
runs your benchmarks
writes the results to disk
reboots into the live image, repeating this for a list of disk layouts.
I want to add that, like you, I’ve become a big fan of restricting the numbers of ways to do something.
IMO, It’s more time wasted choosing, more time wasted reviewing, and makes it easier to overlook errors. I want more opinionated languages and frameworks.
I reallt like the approach taken in Rust’s borrow checker, where good, safe, and sometimes overbearing design choices are enforced by default, but you can explicitly declare exemptions. Makes identifying potential problem code blocks easy too.
… until you run into a problem which you can’t figure out on your own. Then you search the web, and only find how to do it with Y, instead of the technology you used which is called X. So after determining that you’re truly stuck, you switch to Y. Until you get stuck again, you search the web, and can only find how to do it in Z. And everyone online tells you you’re stupid to use X or Y in the first place. And the cycle continues.
This is why I gave up on being a web developer and stayed far away from JS.
I came from a cpp background and loved it the moment I saw it. Like, you mean I just go var foo = ... and then I can put anything? No type casting?? No types??? Finally, I was free.
But I’ve always been more of a hacker than a real programmer. I’ve since learned that there are advantages to using types, static checking, etc…
I mostly work in Python, but we use types at work. For a hack day project I skipped typing stuff for like an hour, and then went “wait this sucks” and added types. It was easier overall.
To any non-js dev taking this too seriously: A good half of the technologies mentioned in this meme are redundant, you only need to learn one of them (in addition to the language). It’s like complaining that there are too many Linux distributions to learn: you don’t, you just pick one and go with it.
Part of the problem is choosing from those options (when you have a choice). Open-ended questions like that nuke my productivity when starting a project because I spend more time researching and weighing options than actually programming.
As time has gone on, I’ve increasingly become a fan of restricting how many ways devs can do something.
Might be my ADHD, but I can never just do that. But I posit that excess choice hurts feature development pace by wasting effort on reinventing the wheel.
A good example is the Nix ecosystem:
Nix expression language provides almost no constraints, leaving users to do the same things in a bunch of ways, and preventing a clear notion of which way is generally best from arising…which makes upstream super conservative with implementing new features the community wants, because any decision might break one those things. Leaving us with a 5+ year old “experimental” feature + CLI used by 80% of users, but no consensus on an official implementation. So many simple upstream changes become a series of 3 competing community projects providing a solution for that feature, further preventing consensus.
I feel the same way. Designing good, opinionated APIs is HARD, but it also provides the best experience for both the author and the consumer.
Among other examples.
This is exactly why I always tell myself it’ll be super fun and easy to replace a Linux distro on one of my machines, and I do the fun part of balancing release style, desktop environment, all the shiny stuff…know what stops me dead in my tracks upon install?
Deciding a file system. Because it feels like such a weighty decision with far-reaching effects.
According to internet research, they’re all the right one, they’re all the wrong one, they’re all just fine, and don’t use any of them because they’ll wipe all your data. Lol
Your documentation on file system choice is either anecdotal or engineering-masters-thesis, seemingly no in-between.
I’ve just decided BTRFS with snapshots is great, and keep good enough backups that I shouldn’t have to fiddle with the fanciest deep-knowledge features to save my system.
Might be my ADHD as well. XD
God, I feel this so much. All the benchmarks are such ass too.
I have also struggled with picking a disk layout + FS, and landed on using a single BTRFS partition with FDE.
For now, I’m happy. Unless there’s a new FS that definitively beats BTRFS on NVMe perf and supports copy-on-write and something that makes FDE as easy as subvolumes that definitively beats BTRFS on NVMe drives, I won’t even bother looking into it again.
I’ve considered moving to a RAID setup, but it seems like more trouble than it’s worth, since I do regular /home backups & NixOS keeps my entire system config in version control.
If I ever consider a different disk setup, I’m just going to fire up a clean distro install on a spare NVMe and benchmark my most common tasks myself.
NixOS has killed my decision paralysis for choosing distros and desktop env stuff since I can just enable whatever in my config, try it out, then revert if I don’t like it enough to switch.
Only thing I can’t trivially test is disk layouts, but with disko, it might be easy enough to create a custom NixOS installer that:
It’s called Analysis Paralysis caused by Overchoice. Basically, the more similar options there are, the harder it is to pick.
I want to add that, like you, I’ve become a big fan of restricting the numbers of ways to do something.
IMO, It’s more time wasted choosing, more time wasted reviewing, and makes it easier to overlook errors. I want more opinionated languages and frameworks.
I reallt like the approach taken in Rust’s borrow checker, where good, safe, and sometimes overbearing design choices are enforced by default, but you can explicitly declare exemptions. Makes identifying potential problem code blocks easy too.
… until you run into a problem which you can’t figure out on your own. Then you search the web, and only find how to do it with Y, instead of the technology you used which is called X. So after determining that you’re truly stuck, you switch to Y. Until you get stuck again, you search the web, and can only find how to do it in Z. And everyone online tells you you’re stupid to use X or Y in the first place. And the cycle continues.
This is why I gave up on being a web developer and stayed far away from JS.
I came from a cpp background and loved it the moment I saw it. Like, you mean I just go
var foo = ...
and then I can put anything? No type casting?? No types??? Finally, I was free.But I’ve always been more of a hacker than a real programmer. I’ve since learned that there are advantages to using types, static checking, etc…
Don’t ever come to me saying “finally I am free from types” very few things make me angry. Rejecting types is one of them.
Also its
let foo
andconst foo
depending on how you plan to use the variable…I mostly work in Python, but we use types at work. For a hack day project I skipped typing stuff for like an hour, and then went “wait this sucks” and added types. It was easier overall.