887 karma · joined December 16, 2023
If for no other reason than that our code can have major impacts on people’s real lives. We’re not developing games or something.
I feel free to curse at it precisely because I’m confident it doesn’t have feelings, and it’s like swearing out loud at an inanimate object like when a shoddy screwdriver breaks, or strips a screw, or whatever.
Declarative code has low cyclomatic complexity per unit of business logic. It also tends to have low state management demands (which the functional devotees will tell you is the root of all evil).
You can use a DSL or other abstraction so that you can declare what will happen in what circumstances, in a way that’s succinct and easily comprehensible. And all the repeatable loops and conditionals that make the declared thing happen in the appropriate circumstances are under the hood and needn’t be concern or be loaded into mental context by the person designing or updating the requirements.
It’s not the right solution to every problem, but when you can apply it effectively it’s a huge win.
However, agents and most SWEs are trained on imperative (wrapped in procedural/functional/OOP paradigms), and most will default to imperative because it’s familiar.
As I get deeper in my career I find myself gravitating toward a style that’s declarative where possible, falling back on functional, and then only when necessary imperative/procedural/OOP. It’s nice that many modern languages allow you to mix and match features of all those paradigms.
TL;DR: Mental load is the bane of programmers everywhere, and declarative programming minimizes mental load.
Anyway, why are you ashamed of it?
Most private practices are small groups, not individuals. It absolutely sucks to have to find a new doctor who’s a good fit for you, when you’ve been seeing the same person for years or even decades. Usually when your doctor retires you rely on them to make a recommendation for a replacement. Usually that’s another partner in their same practice. At the very least, you (historically) expect them to sell the practice to someone they think is a worthy successor. Patients are fairly sticky.
And many of these PE sales require the selling partner to stay on for at least a year or two to ease the patients through the transition and so the patients get used to the changes before the doctor actually retires. That way, sticking around after the doctor retires doesn’t feel like such an upheaval.
With special mentions to K&R as well as The Manager’s Path.
Sol won’t ever go nova, though, so I’m not sure how one would calculate the number of seconds until that happens.
Y2038, meanwhile, is just an artifact of the limitations of older hardware.
We also talked about setting up a family account and sharing in his password manager, but it hasn’t become a priority yet vs the other late life planning stuff.
There is so much more to learn than any one person could even skim in their lifetime, even if you ignore absolutely all news. And heck yeah, it’s addictive.
Haven’t used MacPorts since. Has it gotten any better at those things?
And that’s setting aside “sandboxes” that are just instruction-based restrictions on what executables may be called. Anything that isn’t a deterministic external filter _will_ be ignored at some point.
I’m on a tiny team building an application that’s unlikely to ever average more than a handful or two of concurrent active users.
We’re using DB replicas for redundancy and failover and may eventually use the read replica to remove load off the primary. We’re using caching (which comes almost “for free” with our framework) to save slow/resource-intensive expensive DB and third-party API queries for lookups against rarely changing data sets.
We run background jobs and need at-least-once processing, which means consumers must be idempotent; not to mention idempotent handling of webhooks from one of our vendors. In fact, I can’t think of a small company I’ve worked at beyond proof of concept stage that hasn’t needed idempotence and benefitted from caching some things.
My last small company dealt with high volume and needed rate limiting and outboxes. In other highish volume contexts I’ve pre-computed expensive data structures (idempotently) and cached them in a document database.
Next time you’re at a small company might be a time to look around and ask yourself if any of these patterns is needed or would improve your software’s reliability or performance.