3,084 karma · joined March 2, 2017
I think if you want to work on systems software you should enjoy working with legacy cruft, otherwise you're just going to be miserable. I mean it's everywhere from the language, to the POSIX APIs, to device drivers, to hardware quirks... C++ is only a quarter of the problem.
Go is easier for onboarding, it's fixed the major issues people have had with it - it has modules, it has generics. It's easy to package a binary versus deal with having a Python venv.
Go is just the best common denominator and that's what the majority of people need. I really feel that people want to use Rust because it's interesting and fun, not because it's really the better tool for the job. The vast majority of applications can use GC and are not resource constrained by Go's runtime or binary size.
From my perspective as a vim user, neovim has only made my life worse by splitting plugin authors into two camps without any real benefit over what we had in vim. The only good thing about neovim is it caused some nice features to be added to vim, which the neovim authors could have just contributed themselves without trying to fight for control of the ecosystem with Bram. Neovim has really just made things worse for everyone.
- Using too many plugins without understanding all that vim has to offer.
- Cargo culting configs instead of building up little by little.
- Trying too hard to rice vim in appearance without adding meaningful utility.
The same applies for Emacs. Vim and emacs are powerful editors not controlled by corporations, have succeeded for decades when other editors have floundered, can run in any basic computing environment/terminal, and are logically present in many Unix tools. Like all of software engineering, a deeper understanding of the system you're using pays huge dividends in the long run.
In short, take the time to learn one of these editors in it's basic form and then nurture a small config that can go a long way, and you will find success.
Jumping onto a new technology with unknown risks and getting burned is shortsighted.
With the new AI plugins I doubt even Jet Brains will be able to offer much over what Vim and Emacs can provide with fugitive, magit, fzf, etc. providing best in class features while still running on actual terminals.
For DevOps in general I have learned to KISS, always know how your tools work, and focus on observability and low hanging automation. If you can't observe or understand how your systems works, you're screwed. You need metrics, logs, statistics, in one place that you can easily build queries with. You should be able to see everything at the fleet level down to the innards of each machine with no troubles.
C is a simple language, but it's still difficult for beginners to understand systems software because it's complex. Adding something like this were people are inventing complexity in the language itself out of boredom is a recipe for disaster and is much worse than the terrible things than can happen in C.
Please just learn to write simple code and solve hard problems, rather than writing complex code to solve contrived problems.
Like AI, until someone shows me something that can come up with novel solutions to deeply technical problems, simple tools and intelligence on the part of the programmer is what works.
With container images you're bundling your app with exactly the libraries it needs at the exact versions you want. This means that the kernel is loading all of this auxiliary pieces for you, distinct copies, that then have to reside in their own mappings, so you get no saving there (it's actually slower in terms of program startup), and then you also are wasting tons of disk space to have all of these duplicate dependencies lying around.
Really, the idea of duplicating an entire os tree for containers is just a bad idea, and it leads to lots of super vulnerable images and destroys the whole concept of sharing a system base for performance and storage wins.
I'm not interested in hearing about how you hate the cloud, or you need a terminal based mail editor because "bells and whistles don't appeal to you", or you need to control every aspect of your system down to the ROM to get anything done. Most of us just want to get stuff done and focus on our actual problems, and that's easy to see - big corpos aren't building out your dream world because no one wants it, that's capitalism baby. Most of us want a secure cloud. Most of us want nice, modern, easy to use features and the advances that have come with decades of UX and AI research.
- I can share a note with my wife and kids and they can live edit together.
- I can encrypt my notes and share them across the cloud.
- I can send my notes in an email, I can embed photos, videos, emails, messages in my notes.
- I can send my notes directly to my reminders and attach them to a reminder.
- I can can documents and sketches directly from my notes.
- My notes automatically look for keywords to turn into dates and reminders.
- My notes can add tags and have automatic backups and recovery.
You can also put code blocks within a note, export it, and then run it through a code executor, which is way safer than having some sort of editor automation that will slurp up a random note and hack your computer and steal all your credit card info.
Does org mode have semantic understanding of keywords and a language AI to record my tasks for me? Then it's doomed. Does it sync in the cloud and have world class security (only storing decryption keys at rest in specialized hardware, locally on a TPM like device)? Then it's doomed. Does it have beautiful graphical interfaces for tablet, phone, and PC? Then it's doomed. Does it require you to learn how to use an antiquated text editor that only a small niche of non-programmers are using? Then it's doomed.
You can use org mode even if it is doomed to be irrelevant to normal people. It will continue to work. But it's not magic, please STOP TELLING ME IT'S MAGIC. It's not better than what's out there. There's companies sinking tons of money into todo apps and note taking apps that are integrating modern technologies that make any advantage of org mode complete obsolete in the world of advanced GUIs and language models.
2. Contributing to a project that almost does what you want leads to better tools that are also maintained so they can be relied upon to build new things.
3. Instead of building the Nth version of something, you could be working on something novel.
Theres no value from building something new if you can just learn how something that exists works and contribute to it instead. NIH syndrome is actively harmful to open source.
I think we all know using difficult tools tickles our programmer brains, but you have to ask yourself, is this really better than using Bear etc. in 2023 for 99% of your note taking needs?