[HN Gopher] Prescriptive software is better than descriptive sof... ___________________________________________________________________ Prescriptive software is better than descriptive software Author : sergiomattei Score : 133 points Date : 2021-04-05 13:48 UTC (9 hours ago) (HTM) web link (kilianvalkhof.com) (TXT) w3m dump (kilianvalkhof.com) | EGreg wrote: | The best software is one where you have total flexibility and | composability, and great default configurations for n00bs to get | started with. In fact, the configuration language would be the | "programming language" for many in dev ops, orchestration, and so | on. | jayd16 wrote: | I'm all for LINTers but its not exactly a paradigm shift. | | Though, I am excited about Roslyn Analyzers and how dotnet seems | to be pulling together a language standard LINT system. | https://github.com/dotnet/roslyn-analyzers | waffletower wrote: | Yes.. we need more fiefdoms. More prisons. More machined | conformity. | esjeon wrote: | I thought about this topic many times too, but I believe neither | is better than the other. Below is just my personal idea, nothing | really well founded. | | "Descriptive" software accelerates exploration, and | "prescriptive" software is a lower-complexity implementation, | either a prototype or optimized for specific purpose. While | "prescriptive" normally offers better performance (for the | purpose it is designed for), "descriptive" tends to linger around | longer because of it flexibility, but neither is permanent | anyway. Making a progress is merely going through those two back | and forth again and again. There's no end. | andreareina wrote: | s/descriptive/proscriptive/g I think. Descriptive doesn't attach | value to the observations, while "hey that's wrong" definitely | does. | [deleted] | ed312 wrote: | What does this notation mean: "s/descriptive/proscriptive/g" ? | pdkl95 wrote: | It's originally from sed's "s"ubstitute command[1], and later | incorporated into many other tools. The "s" at the front is | the command name, which is followed by two sections delimited | by "/"; these are regex pattern that is matched on the input, | and the replacement string. The final "g" is an optional | "global" flag that requests that _all_ matches inthe input | should be substituted, instead of only the first. | s/ ...matching regex... / ...replacement string... /g | | The use in the parent post therefor means: "Replace every | 'descriptive' in the text with the string 'proscriptive'." | | [1] https://www.gnu.org/software/sed/manual/html_node/The-_00 | 22s... | cochne wrote: | This means find and replace descriptive with proscriptive. It | is a pattern used by Vim and Sed, and probably some other | programs. | virgil_disgr4ce wrote: | It's regex, vim and sed just happen to use it | Jtsummers wrote: | Substitute <pattern> with <replacement> globally. | | https://www.gnu.org/software/sed/manual/html_node/The-_0022s. | .. | adwn wrote: | _Replace all occurrences of 'descriptive' with | 'proscriptive'_ | virgil_disgr4ce wrote: | Although in the beginning of the post the author says "tooling | that will tell you everything you do wrong" (which I agree | would be 'proscriptive') other parts talk about UNopinionated | ('descriptive', though now that I think about it might as well | just stick with 'unopinionated') software ("The choice is | between your rules and no rules"). So I guess really they're | talking about 3 things. | singlow wrote: | Agree. I see the concept but the analogy to grammar terminology | doesn't quite fit. I'd suggest _corrective_. | saurik wrote: | Look, I do appreciate this thought process: there is certainly a | time and a place for opinionated software; as the article states, | if you are trying to fully outsource a problem to someone else-- | preferably someone who will take that problem seriously (unlike | the trope of frameworks that claim "I'll solve your browser | compatibility issues!" and then aggressively deprecate | browsers)--or you are trying to force a decision on others and | need an excuse to not waste much time on it (though, this | honestly feels low key abusive), well then I totally feel for | this thought process: having something just tell me what to do | for my own good _can_ be great. | | But then you find articles like this, which take it to the point | of pushing opinionated software principals as its own opinion, | framing such design as _universally_ "better" and that that is | how software "should" be written... I find myself unable to just | sit idly by and not respond to such a thought--seeing where it is | on the HN front page--without at least some kind of rebuttal, as | it is a thought that I find actively harmful for trying to not | just invite people to consider their options, or think about the | tradeoffs in what they are trying to accomplish, but to try to | actively discourage people from building software that adds value | to the world in the form of doing something someone other than | the developer wanted done. | | The world of this article--where everything is "use it or don't" | --is a world full of wrong-handed scissors, one-size-fits-many | clothing, single-station radios, and "no substitutions" menus | that are simultaneously prix fixe. This is a world where people | who show up saying "I know I could be X% more effective (or even | simply _happier_ ) if only your software did Y" are told "you | don't know what you are talking about; and, even if you somehow | did, you should learn to make do without as that's _the austere | thing to do_ ". This is a world where not only is everyone | working at merely an average level of efficiency, but no one gets | to enjoy the art or experience of doing anything, as a world | without color is supposedly a world with less stress. | | To enter the same narrative frame as this author: if I hire | software, I want that software to be working _for me_. I often | _do_ know what I need to be effective, and I 'm hiring software | to do _that job_ : if by any of the developer's hubris, | incompetence, or laziness, the software is incapable of doing the | thing I wanted it to do the way I needed it done, I'm going to | either hack their masterpiece until it works the way I want it | to, or I'm going to fire it and find (yes) a "better" piece of | software. FWIW, in this way, I'm lucky: I can build my own | software, and I can modify your software (even if it is closed | source!)... not everyone can. | | And that's where I feel like this is most dangerous: that | software developers are effectively building the world for | everyone else, and when we drink the kool-ade of these | "opinionated" manifestos, we begin to believe that we are best | able to decide how things should work for everyone: that there is | one way to best edit videos, or write documents, or compose | music. We should listen to our users--even if they are other | developers--to learn what would empower _them_ and make _them_ | effective, and then add enough settings (or extension points or | whatever: "even software should have screws"! | https://www.youtube.com/watch?v=ReKCp9K_Jqw) to let them feel | like themselves. | | Because the alternative is just sad :(. Again: there is a time | and a place for being opinionated, and it isn't that I'm saying | that concept is _always broken_... but there is maybe nothing | more infuriating than something that is _almost_ perfect, and the | decision to _resist_ having settings or options in your software | because of a claim that they are some kind of cop out instead of | an admittance that people have different needs, interests, or | understandings, is the kind of "opinion" I have opinions about. | Remember: "Opinions are like assholes: everyone has one, but they | think each others stink." -- Simone Elkeles | carapace wrote: | I think the answer is to develop and use systems that make it | easy to apply (and "un-apply") the Futamura projections (aka | partial evaluation.) | tdfirth wrote: | Like just about everything in life it is more nuanced than that. | There is a time, a place, and a market for both opinionated and | highly configurable software. Claims that one is better than | another can only ever be opinion. | | The title aside, I don't actually disagree with anything in the | article. I've had similar experiences to the author with tools | like linters and formatters. Agreeing on configuration for them | can waste a surprising amount of time. | | As time goes on, I do find myself more willing to change to fit | my tools rather than change them to fit me. Often, I find the | creator of an opinionated tool has more carefully thought through | their opinions than I have anyway. Even if they haven't, tools | like gofmt showcase the power of consistency for consistency's | sake. | | That said, I use a tiling window manager and I'm pretty insistent | that control belongs where caps lock normally is, so clearly I'm | not entirely bought in to my own rhetoric. | kilian wrote: | Thanks for sharing this! The concept has been in my mind for well | over a decade (initially with the decision to make | https://trimage.org not have any settings) but it's really been | taking shape the past few years. | | We hire software to do jobs like how we hire people to do jobs. | Both become better when they share their opinion and help us | decide how to fix or approach issues. | [deleted] | pca006132 wrote: | Prescriptive software would be much better for beginners and for | those who rarely use the tools and just want to get the job done. | | I think that is why things like VSCode, emacs framework, get | popular. Most of us don't want to spend a long time configuring | the tools, but just get the job done. For most of us, a sane | default is more than enough. | sumtechguy wrote: | I am currently fighting one of these 'sane defaults'. It is | sane for one of the programs the output data goes into. Yet for | a different program (and per spec) it is a different default | expected. Hey they have a spot to change that default (sweet!). | Except all of the plugins, and mainline code itself does not | use that (ugh!). It is a ranges from hard coded, to using a | different default, to using the configurable one. So here I am | writing yet another plugin to override what these other plugins | did. Usually like you said though 99.9% of the time it is just | fine the way it is. | rightbyte wrote: | > emacs framework ... don't want to spend a long time | configuring the tools | | Are you sarcastic? | | Edit: Extended quote | exdsq wrote: | To be honest even my vscode config is fairly large. I think | the write comparison would be with PyCharm/Goland/etc - | 'proper' IDEs with everything built in. | anaerobicover wrote: | You dropped the critical word from that quote, "framework". | The point they're making is that people use Emacs | _frameworks_ like Doom, Prelude, Spacemacs... to lessen the | configuration they do compared to "plain" Emacs. | rightbyte wrote: | Ah ok didn't make that connection. | beckingz wrote: | "But you wouldn't hire a consultant that only tells you what's | wrong but not how to improve it." | | People do this all the time. | [deleted] | kansface wrote: | The author is really making an argument for bypassing | institutional inertia or vestigial process via tool selection | rather than a robust argument for opinionated tooling... which is | very easy to agree with. To the extent to which your org is | incapable of making decisions, don't force it to make dozens of | low risk/low reward decisions! If you are able to move quickly, a | better fitting puzzle piece may be more valuable. | teodorlu wrote: | I prefer using tools like Linux, Emacs and the terminal because | those tools are _not prescriptive_. Instead, they are flexible. I | can mold them to my needs. That flexibility brings a cost of | learning, which I 'm willing to spend. | | On the other hand, I like using my Remarkable because it's just | for handwritten notes and annotated documents. | | I wouldn't say that prescriptive is better than descriptive, or | the opposite. As much as dislike the phrase, it depends. I want | my fundamental tools to be flexible. But I don't want to waste | all my time configuring stuff. | npsimons wrote: | Thing is, the learning curve may be steep, but it's incredibly | valuable, time _very_ well spent. | | I learned VI on some UNIX tools my father installed on our DOS | computer in the 90's. Then I learned Emacs in 2000 and have | been tweaking my setup ever since. Sure, it's not perfect, | every few years when I have some down time I will spend a day | fiddling with things heretofore unlearned, but the general | setup has worked well (and gotten better) for two decades. | | How many other editors have come and gone in that time? | coldtea wrote: | > _Thing is, the learning curve may be steep, but it 's | incredibly valuable, time very well spent._ | | Is it? Or is it mostly the IKEA effect ("I spent time on | this, so it must be valuable") and busywork? | | Was anybody's choice of editor really a major point in their | developer progress and productivity? | nitrogen wrote: | _Was anybody 's choice of editor really a major point in | their developer progress and productivity?_ | | Having used multiple IDEs and editors, from DOS edit/qbasic | to notepad.exe, RHIDE from DJGPP, Visual Studio, Xemacs | (briefly), Vim, Eclipse, IntelliJ, probably others... | | Yes, some of those bring unique abilities that the others | lack, that have an effect on the way I write software. Had | I just picked one editor or IDE and never used any others, | I would be much less accomplished. Vim, for example, is for | me incredibly rapid at rearranging and replacing | words/lines/regions of text compared to the others. | coldtea wrote: | > _Vim, for example, is for me incredibly rapid at | rearranging and replacing words /lines/regions of text | compared to the others._ | | Sure, but how much of that clerical work is relevant to | programming, where a rate of say 100 lines per day is a | major achievement, and it's usually much less? Even if | one needs to delete/copy/re-arrange 1000 lines in order | to get to those 100 (and usually it's more like 30-50 per | day than 100 anyway), it's still a tiny part of the time. | | In any case, I've seen great coders, from Brian Kernighan | and Bill Joy, to Linus, Carmack, and Persson using | whatever from Vi and Emacs to Visual Studio and Eclipse, | and still getting shit done... | athrowaway3z wrote: | The numbers aren't helping. 100 lines of what? It all | boils down to 'it depends'. | | In my personal experience, before i started using | spacemacs i would postpone re-arranging code when i was | busy coding something useful. Pushing all the cost into | an afternoon of _just_ rearranging code. | | Besides not having a very 'productive' afternoon, the | costs would linger because i need to update my mental map | of all the stuff that moved around. | | Now, most rearranging is a couple of key strokes away. | I'm not sure what i would do in another IDE. I would | probably do the rearanging as soon as required, because | I've learned my lesson. | | But moving my hand to the mouse and clicking multiple | buttons while typing new file names and dragging my mouse | over pieces does take a lot of flow out of the session. | tsimionescu wrote: | > But moving my hand to the mouse and clicking multiple | buttons while typing new file names and dragging my mouse | over pieces does take a lot of flow out of the session. | | I don't understand why people equate IDEs with mouse | interaction. All major IDEs, from Emacs to VisualStudio, | have key combinations for anything you can do. It's fair | to say some key combinations are better in one program | than another, but there is no reason to imagine that | using an IDE means you must also use a mouse. The mouse | is always an extra option, not a requirement. | | And there are code modifications that an IDE can do for | you cheaply at the press of a key that would take hours | of tedious, error-prone manual work, even with fancy vim | fingerwork. Even the lowly 'Extract Function' already can | save a good half an hour for more complex cases. And | modern IDEs offer things like passing a parameter down | through a long call stack in all places (a calls b calls | c calls d calls f, and now you want a variable in a to | become a parameter in f), with guaranteed 0 manual | intervention. Or extracting an interface out of a class | and patching all callers. | | Not to mention all of the code exploration options, such | as IntelliJ's 'Dataflow to here', which finds all of the | code which is responsible for a variable's value | throughout your entire program (or the dataflow from here | operation, which finds how a value set in this function | is used further down the call stack), stopping only at IO | (so if a.foo() reads a value from a file and stores it in | a field that is read in a.bar() which puts it in a | dictionary, where it is read by baz() which adds 7 to it | and prints it out, you can ask for dataflow to the | variable being printed and it will find that it was read | from some file in a.foo()). | why_Mr_Anderson wrote: | >programming, where a rate of say 100 lines per day is a | major achievement | | Wait, what? 100 lines per _day_ is an achievement? | | I'm honestly curious in what branch of SW development | this happens. I'd assume something that requires formal | proof of every piece of code ever written? | thrower123 wrote: | On Brownfield software, your LOC counts probably average | out to nearly zero. It wouldn't be uncommon to spend four | or five hours diagnosing, tracing, reproducing, then | fixing and verifying a bug, and the end result would be | two lines of code changed when you were all done, with | maybe twenty or thirty more in tests. | passivate wrote: | For me, I do regret the countless hours I wasted learning | vi. Back when I was a C++ developer, editing text was a | tiny, minuscule portion of what I did. The overwhelming | vast majority of time was spent reading, navigating, | debugging, discussing, and explaining code. When I did | switch to a mainstream IDE (Visual Studio + Visual Assist | X), I was far far more productive in all areas that | mattered to me. | | And so, even if I was born an expert vi user, I don't think | I would have gotten any boost in productivity as a | developer. Just my opinion though! :) | | (Yes, I know how you can get vi editing in VS. I purchased | a copy of ViEmu.) | slx26 wrote: | Well, you can also have both. Most tools should be prescriptive | unless you have to go really deep and do your own. If you have | the expertise, it might be ok for you to choose the rules of | what you are doing. If you are not, being guided it's much | better. I agree with the general idea of the article, but I | also think it would have been interesting to discuss more in | depth where each approach can be relevant. Making things | accessible doesn't only require knowledge and features, but | years of insight and clarity of thought. You want to benefit | from that while you are new, because it will make your life | much easier until you reach the point where you really want to | choose on your own. | swiley wrote: | > Most tools should be prescriptive unless you have to go | really deep and do your own. | | Absolutely not. Compare most WiFi connection UIs to | WPA_supplicant. | | On windows: 'connection failed' | | On wpa_supplicant: 'associating... atempting | authentication... getting dhcpc lease... dhcp timed out' | | One says "sorry computer doesn't work" and the other tells | you what you need to deal with the problem. Stop | infantilising users, it's disrespectful and counter | productive. | pjmlp wrote: | For most users the wpa_supplicat messages could even be a | foreign language for what they can get out of it. | thrower123 wrote: | Unfortunately people will actively refuse to read any kind | of diagnostic information that you do output to them, as I | have learned during over a decade of doing troubleshooting | sessions with customers. | | If you're having a good day, you can get them to leave a | pop-up error message open for long enough to read the whole | thing on the third or fourth attempt. On a good day... | fouric wrote: | > Stop infantilising users, it's disrespectful and counter | productive. | | Yet another logically-vacuous emotionally-manipulative | statement. | | The equally-manipulative counter-argument to that is | "You're not emphasizing with the users - how would YOU like | for, say, government bureaucrats to give you back a bunch | of technical gibberish instead of telling you how you | filled out the form incorrectly in plain English?" | | Use logic instead. I think that it's easy to build | interfaces that are friendly to both power users and non- | power-users - talk about the possibility of that using | logic instead of trying to manipulate the emotions of | others to shame them into agreeing with you. | jimmaswell wrote: | Simple solution is a "connection failed" message with a | "view technical details" option. Which is generally the | best idea, sensible defaults and usability for the | average user and as much customization/technical stuff as | is appropriate for power users. | rapind wrote: | I agree, except specifically when it involves government. | I actually don't want them to hide details, but that's | because I don't want them handling super complicated | stuff most of the time. Gives them too much room to hide. | bosie wrote: | > Stop infantilising users, it's disrespectful and counter | productive. | | that goes both ways. if you show the wpa_supplicant | message, my mother wouldn't even understand if she is | connected or not. nor would she gain anything by that | information. you just came up with the other side of the | same coin of terrible UX. | rapind wrote: | This is true and yet I wonder how much more efficient it | would be when they call me for help. "It said a bunch of | gobbledygook that ended with dhcp timeout", or "it just | says connection failed". | bosie wrote: | or have some sort of a middle ground. | | 'not connected. more info: blah #32893289327". Microsoft | did something similar with an error code that you could | google. that was super useful for debugging. the error | message was in laymen terms though. | Groxx wrote: | Makes things much easier to search for too, as those IDs | don't need to change across languages or UI refreshes | (which may e.g. rewrite the error messages, breaking all | those old searchable phrases), both internally | (unambiguous to grep!) and externally (google / | stackoverflow / etc). And users are FAR more likely to | read them back correctly to support, instead of saying | what they _think_ the message says (every tech-support- | person has had to deal with this some number of times). | | Error IDs on everything, please. | tablespoon wrote: | >> On windows: 'connection failed' | | >> On wpa_supplicant: 'associating... atempting | authentication... getting dhcpc lease... dhcp timed out' | | >> One says "sorry computer doesn't work" and the other | tells you what you need to deal with the problem. Stop | infantilising users, it's disrespectful and counter | productive. | | > that goes both ways. if you show the wpa_supplicant | message, my mother wouldn't even understand if she is | connected or not. nor would she gain anything by that | information. you just came up with the other side of the | same coin of terrible UX. | | Yes, you need _both_. When I write error messages, I try | to combine a "user friendly" summary with more technical | information and a suggested action, e.g.: | | "Wifi connection failed: dhcp timed out. Try reconnecting | or checking the router's configuration." | | If you don't communicate both, someone's going to be | frustrated. And even nontechnical people who have no idea | what DHCP is benefit from mentioning it in the message, | since it gives them something to Google. | devmunchies wrote: | > Linux, Emacs | | you proved the article's point with these examples. If you want | to write software that can become a sustainable business, don't | do what linux and emacs did. It only serves power users and | other businesses who will sell services. | | I also prefer descriptive tools (I hate rails/django), but I | acknowledge that descriptive is typically worse UX unless the | user is a power user. | athrowaway3z wrote: | No. The article overgeneralized when it conflated the term | 'software' with 'product a business can package and sell'. | devmunchies wrote: | replace "product a business can package and sell" with | "serves the most users" and the point still stands. | | Serving the most users (ie. NOT power users) is usually the | best economic decision as well. | TeMPOraL wrote: | Serving or entrapping them? | | The end goal of any piece of software that wants to | deliver actual value is to turn its user into a power | user. Power users aren't born, they're made - made | through repetitive use. Software that doesn't give a path | for the user to grow and become more proficient is | software that literally wastes their limited time they | have on this planet. | | As usual, what's the best economic decision and what's | actually good are aligned here only so much that you | won't get laughed out of the room for proposing they're | the same. But not much more than that. | devmunchies wrote: | > made through repetitive use | | now who's entrapping who? | | you think its practical for every piece of software to be | a massive time sink? | | > software that literally wastes their limited time they | have on this planet. | | There's a saying "linux is only free if you don't value | your time", now you're saying that software that takes | MORE time commitment saves you time? C'mon, take off your | engineering hat for a second. | TeMPOraL wrote: | I'm saying that: | | 1) Actual value to people is mostly created in software | that's being used repeatedly. The tools people use for | work, to run their errands, and to communicate. | | 2) For any tool that's used repeatedly, if there's no | path for the user to grow ever more proficient and | efficient in using it, the tool is wasting that user's | time. | | > _now you 're saying that software that takes MORE time | commitment saves you time?_ | | No, I'm saying that _less_ time spent on using software | to accomplish unit of value is better. For software used | repeatedly, this is achieved by learning to use the | software better - and that can only happen if the | software offers room to grow, and isn 't just a Fisher- | Price toy. | ZephyrBlu wrote: | You are assuming there is zero opportunity cost in | learning to use the software better. Perhaps further | increasing my efficiency with this software is not as | impactful as spending my time on something else. | | This also assumes that the time you invest in learning | the software will be offset by productivity gains, which | seems extremely unlikely for the majority of users | assuming the software is non-trivial. | | There is also risk associated with learning the software. | What if you begin to learn it and then for some reason | you stop using it? You've just wasted a whole lot of | time. | TeMPOraL wrote: | All three of your points are covered by my base | assumption: software used _repeatedly_. Any opportunity | cost is consumed by the fact you 're using this software | all the time. For the same reason, productivity gains | compound, and there is little risk of switching any time | soon (also this is the kind of experience that tends to | generalize well). | tsimionescu wrote: | That is only true in so far as that piece of software is | somebodys livelihood or hobby. In many cases, people have | rare uses for a portion of piece of software, so they | benfit immensly from it being dumb and easy to use. | | For example, as a programmer I occasionally need to | prepare presentations, in which case I use PowerPoint | because that's what the company bought. I use probably | less than 1% of what PowerPoint can do, and I wouldnt | lose anything at all if I were given a program that did | exclusively that 1%. I would in fact gain some | productivity by having to browse through fewer options. I | have no intention and would gain nothing by becoming a | PowerPoint power user. | TeMPOraL wrote: | > _In many cases, people have rare uses for a portion of | piece of software, so they benfit immensly from it being | dumb and easy to use._ | | One doesn't have to exclude the other. You can present a | gradual onramp but make advanced features available and | discoverable. | | > _I use probably less than 1% of what PowerPoint can do, | and I wouldnt lose anything at all if I were given a | program that did exclusively that 1%._ | | That 1% solution is called Google Office Suite :). | | You obviously don't need PowerPoint much, and your use of | it isn't really creating much of value either. Contrast | that with people who use PowerPoint for most of their | working day. Ignoring for the moment the difficulty of | quantifying value of managerial meetings, it would be | really bad if Microsoft one day decided to ignore the | people who use PowerPoint extensively, for the sake of | greater amount of casual users. | | That's the kind of ass-backwards "economic thinking" I'm | complaining about. I get where it comes from - pursuit of | _growth_ at all costs. It 's a disease in software | industry. Instead of great many tools optimized for the | needs of diverse audiences, the "servers most users", | "best economic decision" mantra is to create lowest- | common-denominator toy that can gain userbase fast, and | suck out oxygen from the market. | whimsicalism wrote: | If that was the article's point, then unfortunately they | chose the wrong title. | cjohansson wrote: | The is-ought problem is a philosophical problem of how knowledge | of the present world does not necessarily lead to knowledge of | how the world ought to be. This is also sometimes referred to as | Hume's law or "Hume's Guillotine".[2] | | https://rationalwiki.org/wiki/Is%E2%80%93ought_problem | bordercases wrote: | This concept is too abstract for what the post is actually | pointing at, which is the tradeoff between expressivity of a | language vs consistency in language use, and the cognitive load | required to move from the former to the latter when developing | software. | | Here the is-ought distinction breaks down since the state-of- | affairs is almost entirely decidable by humans. At that point | it's a question of comparing different oughts since the | constraints involved are not based in nature, but convention. | jeffreygoesto wrote: | I read the article as "error messages should rather be a | beginning than an end" message. Nobody wants a program to fail, | that is not why you put effort to configure and start it in. An | error just describing what happened puts the load to fix or how | to "heal" it onto the user. She needs a mental model of why the | program failed and what to do to make it succeed. | | What I interpret "prescriptive" to be is that the message | returned to the user on failure should give some hints how to | make the program succeed. Because there are more ways to fail | than the program author could think of, or more than fit on a | screen, it is opinionated which advice to give then (a subset of | all known and unknown possible fixes). | | I always tell my coworkers, an error message is a call for | action, not an out-of-jail-I-just-stop-here card. The better you | guide the user, the more efficient she can use our software. | elihu wrote: | > I think software should be opinionated. Throwing everything in | a huge settings panel or configuration file and calling it | "choice" or "not imposing your preferences" is a product | development failure. | | I think the ideal is that the software is as configurable as it | needs to be in order to be useful to the people that use it, but | that there's a standard configuration with sensible defaults. | ZephyrBlu wrote: | I think that ideal is extremely difficult to reach without it | turning into the situation you quoted. | nickthemagicman wrote: | I love this concept. | | I've always thought if it in the context of the Pareto principle. | | 80% of the time people will use the defaults but 20% of the time | will need more customization. | Pxtl wrote: | I fell like the terminology here is too vague... Opinionated vs | configurable seems clearer than prescriptive vs descriptive. | orasis wrote: | I think the library vs framework lens is more productive. Write | libraries, not frameworks: | https://www.brandonsmith.ninja/blog/libraries-not-frameworks | taeric wrote: | Issues of whether this is prescriptive or not aside, I think this | hits close to a paulg tweet: | https://twitter.com/paulg/status/1378646213113868289 | | Of course, I think this whole idea is basically flirting the same | thoughts as "sensible defaults" and "paradox of choice". Which is | somewhat of an ironic fight between having all of the options, | but not requiring all of the options. A hedge, if you will, | around what you may want to do in the future. | hammock wrote: | Prescriptive vs descriptive is a false dichotomy, or at least | there is a third way missing. | | Take for example Apple vs. Microsoft/Android. The PC-environment | is legendarily descriptive. But the Apple environment is not | prescriptive. It's just "intuitive" (for those who buy into it), | or, less charitably, it hides the descriptions while at the same | time not being explicitly prescriptive either. What do we call | this Apple system? It's neither prescriptive nor descriptive. | lolsal wrote: | I think 'discoverable' is one of the big Apple tenants of | design, or it used to be (but I am not a designer). | ziml77 wrote: | I think they still try for that. A few days ago my internet | connection went out. I needed to get my laptop back online so | I decided to tether. As someone who had been an Android user | for a decade I first went to my iPhone and started navigating | to the settings when I stopped and realized I should think | about where a normal user would first check to tether. I put | my phone down, went back to my laptop, and clicked the | wireless icon in the menu bar. First option after the wifi | toggle was "Personal Hotspot" along with info about the | iPhone's current connectivity and battery. | | To me that was a wonderfully discoverable and seamless | experience. | api wrote: | https://en.wikipedia.org/wiki/Decision_fatigue | iandanforth wrote: | FWIW This is exactly why I don't use black (opinionated Python | formatter) or let it get into the org. It's great until it's not | and then you're kinda screwed. | | My favorite example of a good balance here is React's | 'dangerouslySetInnerHTML'. Clear opinion, check, but you've got | the escape hatch you need. | jraph wrote: | To be clear, you disagree with the article then, right? | | > It's great until it's not and then you're kinda screwed | | Do you have some example? Because black frees us of any | argument over coding style in merge requests and this is great. | It helps us focus on the important things. I've seen places | where I don't quite like what black enforces, but this is very | rare and it is a matter of taste and you get used to things, so | meh. | | In contrast, standard (for JS) seems opinionated at first does | not come remotely close and leaves many things without opinion, | and unfortunately we don't have the same opinions and tastes, | so we regularly argue over them and this is a waste of time. | | I don't actually quite like standard's rules but since this is | what we use, I wish it were much more opinionated (over brace | position in React files, line length, how obj.hasOwnProperty | should be banned, how to declare methods in React components, | how order imports should be sorted alphabetically, or which | variable we can deconstruct...). | depressedpanda wrote: | In what way will you end up kinda screwed when using black? | ghoward wrote: | I disagree. | | I think this is the same "mechanism, not policy" debate | repackaged, and I certainly think mechanism is better than | policy, where the author of the post thinks otherwise. | | That said, I think that going all-in on "mechanism, not policy" | is a mistake too. | | I believe there is a middle ground: focusing on mechanism, but | providing a sane default policy that lets the user get stuff done | fast and change things later if they need to. | | I wrote more about this idea in | https://gavinhoward.com/2021/03/lessons-learned-as-a-user-1-... . | gregmac wrote: | > I believe there is a middle ground: focusing on mechanism, | but providing a sane default policy that lets the user get | stuff done fast and change things later if they need to. | | I agree with this. | | I see parallels to a lot of frameworks, languages, libraries, | etc: the "getting started" guide is fairly simple, but then to | do a "real" thing with it, you need to basically throw all that | away and learn a whole different system. | | The other mistake a lot of systems make is abstracting away the | complexity with defaults (aka "magic"), but making it so if you | do want to change one thing you have to learn and re-implement | the entire configuration yourself. | | In both cases, it's the learning curve that is important to | think about: going from usable defaults (beginner) to | customization (expert) should not be one giant all-or-nothing | step. | taeric wrote: | Reading your post, it brings to mind that a lot of this is | around what we are controlling. | | As a physical example, I can't remember the last time we had to | educate people on how to "pump your brakes" in the rain. Turns | out, there are flat out better mechanisms to control for some | of these things. I suspect many lane assist technologies and | other mechanisms to eventually grow to eclipse environments | that lack them. | | But, bringing that back to the software world is hard. There | are things that we don't give a second thought to in a lot of | what we do. Endianness is an easy example of something that you | used to not be able to avoid. How do we get more of our | concerns across that line? Can we? | ghoward wrote: | You make great points. | | However, I still have learned how to pump brakes in rain, and | I taught it to my wife. The reason is that the better | mechanism, anti-lock braking systems in this case, can always | fail. | | Joel Spolsky had a whole post about this: | https://www.joelonsoftware.com/2002/11/11/the-law-of- | leaky-a... . | | If we only teach the happy path, we are setting ourselves and | everyone else up for failure when the happy path fails, which | it will. | | As another counterpoint, there is so much automation in | modern airplanes that pilots are relying too much on the | automation and losing their basic airmanship skills. | (https://www.nbcnews.com/news/us-news/airline-pilots- | depend-t...) | | I think the same problem is starting to show in all of the | assist technologies in cars. People are starting to rely more | on those technologies than they should. | | Basically, at some point, putting more concerns across the | line is a bad idea because we will eventually lose the | ability to handle things when they go wrong. We also lose | institutional knowledge. | (https://www.youtube.com/watch?v=ZSRHeXYDLko) | taeric wrote: | I feel this fits things that "aren't really wrong", but | that are dangerous. | | Other examples include monoculture of crops. Generally, not | a good idea. Happens wherever it can, though. | | That is, I agree with your points. I just have difficulty | thinking we have the full picture covered. :( | [deleted] | fctorial wrote: | Software intended to be used for programming should be | descriptive and end-user software should be prescriptive. | | No matter how good your prescription system is, it is going to be | a bad fit for some programmers use case. | 0wis wrote: | I clearly have a need for this about software as I am not a pro | dev. I just had the same conversation with a med worker this | weekend. Some patients just want prescription and anything more | will annoy them. Others will need a description to accept a | diagnostic. I assume we, hackers, will tend to prefer the latter | but I'm not sure it's for the best to be like this in every area | of your life. [edit : typo] ___________________________________________________________________ (page generated 2021-04-05 23:00 UTC)