Live data from Hacker News

Good Tools Are Invisible

gingerbill.org

261–270 of 305 posts

Re: Good Tools Are Invisible

#261
this reminds me of some programmers' blog where he talked about the line between when software does something helpful automatically for a user, vs the line of where it nags you to make decisions it could have made itself.

Re: Good Tools Are Invisible

#262

Earlier quoted context omitted.

RMS may be legendary but he's no John Carmack or whomever else. I use emacs every day, and nobody who does the same can honestly say the foundations are good. The performance is atrocious. The UI locks up when you make network calls because the whole thing is single threaded. The whole thing is a mess of spaghetti code and there are multiple instances of core developers like Eli Zarerski admitting on emacs-devel that…

sorry for the stupid quesiton, but why do you use Emacs daily if you consider the performance atrocious and the foundations unsound? Do you have to use it for work? Do you just consider other editors to be even worse, so Emacs is the best of a bad bunch?

> Do you have to use it for work? Do you just consider other editors to be even worse, so Emacs is the best of a bad bunch?

Not who you’re asking but:

- I have a very long legacy of both muscle memory and “just right” coziness in my Emacs environment, that has followed me around from machine to machine since about 2003.

- I have flip-flopped between GUI Emacs and terminal Emacs probably a dozen times, with my most recent flop being due to Codex and Claude Code, which I run side-by-side with Emacs in a split pane tmux window.

- Yes, best of a bad bunch. I am also reasonably comfortable in Vi(m) but dislike how it handles having many open files, which is unfortunately necessary for most of the work I do.

- I have used VSCode off and on over the years as well, most recently with Gemini, but found the GUI experience quite frustrating and the lack of a CLI option ended up being a show stopper (I sometimes need to write code over SSH and the way VSCode handles remote editing is highly unpalatable to me)

Edit: one other nice perk that I discovered the other day: Claude is quite good at elisp. I was having a really weird issue that seemed like it sat at the intersection of a few packages interacting funny. Put Claude on the problem, got a very detailed explanation of how three packages had evolved and how one of them hadn’t caught up with subtle changes the other two had done. Put together a patch and suggested I make a PR to upstream. I haven’t fully reviewed the patch but the bug seems fixed properly.

Re: Good Tools Are Invisible

#263
post #219

Earlier quoted context omitted.

I don't think I've ever had to rename 20 files at once, so I wonder if the way people work is kind of shaped by their tools?

The only case I can imagine is when I rename a Java interface and want all implementations to be also renamed accordingly. I can do that in 1 second in IntelliJ. With dired on emacs that would not be possible at all and I would need a tool that can find all implementations first: that requires a LSP on emacs, and then from a xref buffer, not sure how I could rename all classes and their files at once. Probably would…

It would be the same as in IntelliJ. As long as you have the Java LSP active, you issue the `lsp-rename` action: https://emacs-lsp.github.io/lsp-java/#lsp-mode-commands

This works exactly the same for all languages whose LSP support this action, which is most of them.

Re: Good Tools Are Invisible

#264
post #15

> usually because they don’t realize how much more productive keyboard navigation is than reaching for the mouse a lot of the time. In a large number of cases people who say they are more productive have never measured it. They have no idea if it is true. There are been many competitions between keyboard and mouse navigation over the years. Depending on the details of how the test is written one will win or the other…

> have never measured it

That's because it's practically impossible to collect objective data here, i.e. without confounding factors.

A product where the user spends 99+% of their time reading/consuming is almost certainly easier to use with a GUI. The market settled on thumb-flicking for doom scrolling instead of a button or scroll wheel interface, for a reason.

A product where the user spends 99+% of their time writing is almost certainly easier to use with a keyboard. Most sane people do not write essays on their phones with two thumbs; a keyboard and a proper word processor are preferred.

Most products fall somewhere in the middle. Most products have multiple interfaces, some primarily for consuming information and some primarily for producing it, and thus would find different inputs more productive in different modes. When people claim that they find one input type is more productive than the other, most likely is that their particular use-patterns fall more in-line with the one most aligned with their use-patterns.

Re: Good Tools Are Invisible

#265

Earlier quoted context omitted.

I'm fully aware they're not the same thing, I'll not sure what gave you the impression I think they are. I agree that a badly written TUI is... badly written? Obviously I'm referring to well executed TUIs. For example, I regularly pipe the result of ls, grep or fd into Helix then use multicursor editing to set up a script. You simply can't do that with a GUI.

Those are not TUIs, or rather, when we say TUI we usually mean interactive UI in the terminal.

Helix is a TUI.

Perhaps you should read my comments more carefully before writing a reply.

Re: Good Tools Are Invisible

#266
post #11

As a long time terminal user, it does not surprise me much when people just don't get it . The discussion often goes like this: — In a terminal, I can do so-and-so with a simple command — Well, in my FrobnicatorStudio, there's a shortcut Ctrl+Alt+So for that and this can go forever, going into pretty much useless comparisons like "in vim, I can delete 24 lines by pressing four keys" (no Sublime user ever needs that)…

Most programmers come to appreciate a single fundamental truth about their field way too late into their careers. That the most basic foundational unit, the substrate they need to conquer is text. Everything stems from it. We have to deal with text our entire lives. It doesn't matter where that text appears - in web browsers, in Jira, in Slack, terminal, in PDFs, Word or LaTeX documents. Code is just structured text.…

I realized that I was typing the comment above in the middle of the night; finally, brain fatigue hit and I wrapped it too soon (thus some typos, sorry). That all was some "poetry." Now let me give you some concrete example cases.

1. You're typing a message to your colleague, and you're doing it in Slack, Teams, etc. Why? Why not use your trusted editor where you probably already have smart completions, quick spellchecking, thesaurus, definition and etymology lookup, translation and dictionaries, LLM integration and more.

Years ago I realized that and stopped typing anything longer than three words in anything else but my editor. But that forced me to copy-n-paste a lot, so I automated the process. I'd press a key in the middle of typing - regardless of what the current app is, the script simulates pressing Cmd/Ctrl+a Cmd/Ctrl+c; opens the editor buffer; inserts the text; I'll do editing; press a key - it goes back to the app; pastes the text. Stupidly simple, deviously efficient. Suddenly, my entire OS is my editor and my tool is "invisible" - like the article describes.

2. You're typing a message to your colleague. Now you're doing it in your editor, you want to share the url to the thing opened in your browser. What do you do? Normally, you'd switch to the browser, press another key to focus on the navbar, copy the link, switch back, paste the link. Goddammit, the url is cryptic. You, being a good teammate, want to add a description, now you have to go back to the browser to copy it. Then you have to make it into a markdown link format. Darn it. Was it parens and square brackets, or the other way around? We don't even realize how often we do this, because this simple action has become a routine. What's the point of arguing if mouse or vim or shortcuts is faster if the action is fundamentally flawed? For me, inserting a link in the middle of typing, from any tab in my browser is within a keystroke. It intelligently and properly formats it while retrieving the document.title.

3. Your colleague sends you a message: "Hey Jon, what about FOOBAR-41234?..." You know it's a Jira ticket number. But between FOOBAR-41345 and -41234 and a bunch of other recent ones you have no mental recollection of what that number is about. You go to your browser, navigate to the Jira instance, darn thing says you have to re-login, now you're going through 2FA - it won't even let you-in unless you find your phone and confirm it. All that effort just to look at the title. We all recognize this familiar flow, don't we?

Why even deal with this BS at all? Jira, Asana, Trello, etc. - all have CLI tools, you should leverage that. In my editor, whenever the cursor stumbles on a pattern like above, it immediately fetches the ticket description and shows it in a popup. I can quickly convert the plain "FOOBAR-41234" into a markdown, org-mode, whatever link format that has a description.

4. You're looking at FOOBAR-41234, you even see the description (because your editor is smart now), but how do you answer questions like: "what are the PRs related to this ticket?", "find slack threads that mention it", etc.? That stuff should be quick and easy. Do get annoyed whenever it takes longer than two seconds to answer any of these or similar questions.

5. You are pair-programming over Zoom. Alice (your colleague) is sharing the screen, you are reviewing some big unit of work. She's scrolling through the code changes, occasionally opening documentation, navigating to different sites, etc. You just can't bear constantly interrupting her with "slow down, I'm taking notes", "please, share this link", etc. After the session you frantically try to recall, but most of it is gone now, your notes are whacky, containing a bunch of broken urls and half-typed nonsense. Three weeks later it is a complete and utter garbage. Then you spend years debating of note-taking strategies trying to figure out what "works" and what doesn't.

That should annoy you. Darn it, if I can see it on the screen, why can't the computer "see" it too? It irked me, so I hooked up Flameshot, Tesseract, and Emacs and now I can select any area of my screen and the text gets OCRed and pops in a buffer. It's not always accurate, but it is quick and I don't even have to tell Alice to slow down anymore.

---

These are just a handful of examples, and I haven't even touched anything code related. Hopefully you can already see what I meant in my post above. Do liberate your text from the tyranny of complex GUIs, do get annoyed when you have to manually retrieve any piece of whatever. You're a damn programmer, computers and computer programs should obey your command, never forget that.

Re: Good Tools Are Invisible

#267

I like TUIs because I can pipe the output of CLIs directly into them, and I don't have to leave my terminal environment. GUIs can't compete with that.

ls | gvim - or in PowerShell gci | ogv -PassThru Programs which call GUI library functions can read stdin too... why wouldn't they be able to?

Gvim is a TUI with a GUI taped on top, and whilst the PowerShell you've given there does call a GUI library function as described, I'm pretty sure the author is referring to non trivial examples of a GUI like sublime or VS Code.

Re: Good Tools Are Invisible

#268
post #11

As a long time terminal user, it does not surprise me much when people just don't get it . The discussion often goes like this: — In a terminal, I can do so-and-so with a simple command — Well, in my FrobnicatorStudio, there's a shortcut Ctrl+Alt+So for that and this can go forever, going into pretty much useless comparisons like "in vim, I can delete 24 lines by pressing four keys" (no Sublime user ever needs that)…

vim isn't really something you use in pipelines though, it's a standalone tool.

whoa, you can and absolutely should pipe things in and out of vim - it's natural. Emacs on this actually in disadvantage - it doesn't give you a built-in way for piping from and into buffers, but for that there is emacs piper script: https://github.com/agzam/mxp

Re: Good Tools Are Invisible

#269

Earlier quoted context omitted.

RMS may be legendary but he's no John Carmack or whomever else. I use emacs every day, and nobody who does the same can honestly say the foundations are good. The performance is atrocious. The UI locks up when you make network calls because the whole thing is single threaded. The whole thing is a mess of spaghetti code and there are multiple instances of core developers like Eli Zarerski admitting on emacs-devel that…

sorry for the stupid quesiton, but why do you use Emacs daily if you consider the performance atrocious and the foundations unsound? Do you have to use it for work? Do you just consider other editors to be even worse, so Emacs is the best of a bad bunch?

Emacs is not an editor. It's a Lisp-driven text orchestrator with a built-in editor. You can type your text in whatever IDE and still control everything through Emacs.

Re: Good Tools Are Invisible

#270

The effect of the interface becoming "invisible" is actually a function of time spent in the interface. I think what the author is reacting to is discretionary friction; designers or product folks adding features or complexity. The thing is, that friction may be necessary in order to achieve a certain task (think about resolving a merge conflict). And given enough time in the interface, even those "disruptive" steps…

The 737 example is actually quite fitting. Sure, a long time pilot will perceive the interface as invisible.

But if you contrast it with the complexity of the same functions on other aircraft, you start to see how complicated it really is. The F-22 for example handles a lot of faults (like engine fires) automatically.

Post reply on HN