Hacker News new | ask | show | jobs
by fefe23 2821 days ago
Brief question, only tangentially related:

Is it me or is "opinionated" software popping up all over the place? It looks to me like the author considers it a selling point, too.

Can someone explain to me why I would want an "opinionated" software over any regular old software? Especially over a configurable software?

I'm not a native speaker, but I never encountered "opinionated" being used with positive connotation. It has so far always been in the "well, uh, he's very opinionated!" sense of apologizing for that old grumpy person who gets on everybody's nerves.

8 comments

The word does indeed have initially negative connotations.

Perhaps it resonates more positively now to people who have had to work with "flexible" software such as Spring in the old days.

There were 100 ways to skin a cat with old Spring, and each way was a tortuous devil's brew of XML. Googling for any solution was a nightmare, exacerbated by hundreds of wannabe experts polluting the interwebs with their own strange takes.

Spring Boot was introduced in response as an opinionated approach. You can still skin the cat in 100 different ways, but at least you start with sensible defaults that someone far more knowledgeable than yourself had deemed to be good.

That's a good point.

In programming, there's the idea that "The code shouldn't merely work, it should clearly work". If your configuration system becomes so complex that the same principle applies there, that's a bad sign.

sqlfmt is inspired by the style of gofmt (https://blog.golang.org/go-fmt-your-code). The reason a tool having an opinion about formatting is useful is that it removes humans from having to care about formatting. I didn't like how gofmt formatted my Go code at first. But since I couldn't care, I didn't care, and now I never care about formatting. Without an opinion, we spend lots of time quibbling about stuff that doesn't matter.
Not having to argue about whether you want the shed to be blue or red really is super valuable.

One thing I learned somewhat recently as well is that within google3, these automatic formatters come in super handy when doing large-scale changes, e.g. when a library is deprecated and the maintainers are moving all the clients to the new one.

"Opinionated" can make sense because choice increases complexity and potentially decreases interoperability in a team (e.g. the "black" code formatter in Python removes choice from the user, so everyone's code looks the same).

Having a sensible set of defaults can be helpful as well.

That said, sometimes "opinionated" can also just mean "I haven't had the have time to make things configurable yet".

The best of both worlds is "opinionated defaults but configurable". I use an excellent free SQL formatter called ApexSQL Refactor for SQL Server (Windows), and it came with decent defaults, but is also extremely tweakable.

In software it's supposed to mean: does things one way, which is (hopefully) very good, doesn't include a lot of options to change behavior if you don't like it.

It's become popular because people became sick of tools with bad defaults and a million options that could maybe make it better, but nobody uses.

I see it as people reacting to the tendency for software and source code to get quite messy or complex as the number of developers involved grows, more so than one would expect from the result of an increased feature set alone.

Specific (or opinionated) design, interfaces, or formatting feels like an early declaration that the people in charge want to deliberately restrict an aspect of the software, in order to keep things consistent and reduce cognitive load during use or development. Constraints are freedom, and all of that.

There was a trend recently of "unopinionated" software, where it has a ton of options to do exactly what you want. The problem was, it took a long time to configure it, and development was slow because every variant and option had to be tested.

To me, "opinionated" is shorthand for "not a lot of options", so it is less extensible, but will probably also work better and right out of the box.

"opinionated" means some options have been hidden or removed for your sake because in the author's opinion they're wrong/old/unnecessarily complex/etc.

good examples are micro frameworks that wrap very large complex APIs and simply don't pass through whole swaths of complexity.

It Jeans the color of the bikeshed will be decided by one strong opinion and everyone can get back to work.