Hacker News new | past | comments | ask | show | jobs | submit login
In the Beginning Was the Command Line (1999) (stanford.edu)
184 points by conanxin 8 hours ago | hide | past | favorite | 113 comments





This essay by Neal Stephenson was first published in 1999. https://en.m.wikipedia.org/wiki/In_the_Beginning..._Was_the_...

The analogy of OS as cars (Windows is a station wagon, Linux is a tank) is brought up in the recent Acquired episode on Microsoft, where Vista was a Dodge Viper but Windows 7 was a Toyota Camry, which is what users actually wanted.


And Neal Stephenson acknowledged it was obsolete in 2004:

"I embraced OS X as soon as it was available and have never looked back. So a lot of 'In the beginning was the command line' is now obsolete. I keep meaning to update it, but if I'm honest with myself, I have to say this is unlikely."

https://slashdot.org/story/04/10/20/1518217/neal-stephenson-...

But people still dredge this quarter century old apocrypha up and use it to pat themselves on the back for being Linux users. "I use a Hole Hawg! I drive a tank! I'm not like those other fellows because I'm a real hacker!"


"Obsolete" is too strong a word, I think. OSX isn't an evolution of the Macintosh's operating system; That'd be Pink, which was even mentioned, and it crashed and burned. OSX was far closer to a Linux box and a Mac box on the same desk, therefore the only change really needed is to replace mentions of Unix or specifically Linux with Linux/OSX as far as the points of the piece are concerned. If Jobs had paid Torvalds to call OSX "Apple Linux" (Or maybe just called it Apple Berkeley Unix) for some reason this would be moot.

I also primarily use Windows and don't have a dog in the fight you mentioned. I might actually dislike Linux more than OSX, though it has been quite a while since I've seriously used the one-button OS.


The actual comparison is that Vista was the Ford Edsel (hilarious and widely-mocked failure) but 7 was the Ford Comet (a huge hit).

It's a close analogy, because the Comet was actually the next model of Edsel. They just changed the branding. Same with Vista to 7.


I feel now the different way. Linux is never that much more powerful than other OS. It felt more like a tractor 10 years ago and now it is a good alternative to "Toyota Camry" with pretty good user experience.

Meanwhile Windows has become those cars with two 27" screen as dashboard, which has bad user experience and full of advertisements.


Windows XP would probably be an old 1970s Volvo that is still, somehow, running in all kinds of places otherwise forgotten by the waking world.


OS/2 also! :D

> Yet now the company that Gates and Allen founded is selling operating systems like Gillette sells razor blades. New releases of operating systems are launched as if they were Hollywood blockbusters, with celebrity endorsements, talk show appearances, and world tours.

I was a kid at the time, but did many people actually buy windows? I know about the ad-thing where the cast of Friends or whatever bought windows 95, but as I recall even back then the OS just came with the device. The only exception was OSX, which was a “Big Deal,” even non-technical people downloaded it.

Anyway, it is funny to see this in retrospect. Nowadays, operating systems have become so commoditized that you can’t even make a business selling them.

I love Linux but his description is quite optimistic.


> I was a kid at the time, but did many people actually buy windows?

Yep! Windows did indeed come with machines, but the upgrades were always a big seller. I remember when Windows 3.1 hit the shelves and seemed to be everywhere. Same with Windows 95 but that one was a tougher upgrade because of the increased system requirements.


Yes - people bought it to upgrade, as the step up from dos to 3.1 to win95 was huge.

One major advantage of the CLI is that instructions/fixes etc are very concise and can be easily communicated. If someone has a Linux system that needs a known fix, then it's trivial to send someone the commands to copy/paste into a terminal. However, if there's a known fix for a graphical program, then it suddenly becomes much harder to communicate - do you go for a textual instruction (e.g. click on the hamburger menu, then choose "preferences"...), or a series of screenshots along with some text?

I just wrote a command line interface of LLMs in (almost) pure Bash[1]. I endorse the future of LLMs because of the points in this article. People talk to LLMs the same way we talk to CLI shells, and everything is plain text based (It's Unix philosophy! ). I should've read this earlier to get more ideas before writing the CLI client.

[1]: https://github.com/simonmysun/ell



My favourite part explaining how unix/linux users feel regarding windows: 'THE HOLE HAWG OF OPERATING SYSTEMS'.

This essay should be a mandatory reading for all CS students and anyone wanting to call himself hacker.


I teach data analytics and it’s required reading on the first week. It doesn’t soften the blow of throwing people in the CLI but provides perspective to why I am.

Yes, and the part about Reagan.

Yes. Cults are real. At the same time very telling. Some people really believe they are better because they have a different machine than someone else. And that shit runs deep.

I read this during my university graduation ceremonies. It was hidden in a fold in my robes. It was the most fitting thing I could have done, as I immediately changed my life direction and focused on exactly the ideas outlined in this work. My goal: move the world from the command line. I've almost managed to.

I like the problem to the move away from IP Chains.

We should move to the Command Table.


I’ve got this in soft-cover. I think I read it back before the turn of the millennium. As a BeOS aficionado I loved the reference to batmobiles.

> Buyer: "But this dealership has mechanics on staff. If something goes wrong with my station wagon, I can take a day off work, bring it here, and pay them to work on it while I sit in the waiting room for hours, listening to elevator music."

Bullhorn: "But if you accept one of our free tanks we will send volunteers to your house to fix it for free while you sleep!"

Did Linux distros actually offer support at some point? (By what I assume would be some project contributor ssh-ing into your machine)

My impression was always the arguments were more like "Well yes, but we have this literal building full of technical manuals that describe every bolt and screw of your tank - and we can give you a copy of all of them for free! And think about it - after you have taken some modest effort to read and learn all of them by heart, you'll be able to fix and even modify your tank all on your own! No more dependence on crooked car dealers! And if you need help, we have monthly community meetups you can attend and talk with people just as tank-crazy as you are! (please only attend if you're sufficiently tank-crazy, and PLEASE only after you read the manuals)"

(This was decades ago, the situation has gotten significantly better today)


> Did Linux distros actually offer support at some point?

Ever wonder how Red Hat became a billion-dollar company before it was bought by IBM, and now makes up a huge segment of IBM's revenue stream?

Have you noticed SuSE is still around?

Have you ever speculated on how Canonical keeps its lights on?

Paid support, my naive friend. Linux support is big business and is what keeps the popular distros alive.


Good point!

"By what I assume would be some project contributor ssh-ing into your machine"

Who would want that?

"Stay away from my house, you freak!" would be the normal reaction. Unless some serious trust is developed, I would not let people into my house while I sleep.

Also the actual usual reaction would have been more like: "hey it is open source, you can fix anything on your tank yourself"

You need a new module to connect with your other devices, just build it yourself, no big deal!


I know you shouldn't look too closely at analogies, but I think there is an interesting inconsistency in the "car dealerships" story:

The tank people offer to send someone to look into the car (rsp. tank) but the buyer rejects them from entering their house.

That's significant, because a car is much less private than a house. In the real world, if my car had an issue, it would be perfectly reasonable to give it into the hands of a mechanic, even if I don't know them personally. (And evidently the reputation of the dealership isn't the deciding factor either, otherwise all the independent repair shops wouldn't exist)

On the other hand, I'd be much more wary to let strangers into my house without supervision, because I have far more private and valuable possessions there than in my car.

So the question is whether computers are more like cars or like houses. I'd argue, they sort of blur the line and have definitely moved closer to "house" in the last decades. But it might have been different back then.


Companies want that when prod stops.

> Did Linux distros actually offer support at some point? (By what I assume would be some project contributor ssh-ing into your machine)

I don't think that was the intended implication. I think the analogy is more akin to: "If send us a bug report, we'll fix it and ship a new version that you can download and use for free." In the olden days, you'd have to buy a new version of commercial software if it didn't work for your machine, complementary patches were rare.


Depends on where you lived. In the early days there were lots of LUGs in some areas, usually in college areas, but some would be hosted at a few Companies.

I think DEC had one or two. And you could find someone who would meet you somewhere to help you out, it was an exciting time. Also there were lots of install fests for Linux.

Most activity took place on USENET, so getting help was rather easy.

For example, I had asked how I could connect 2 monitors to my 386SX, one controlled by a VGA card, the other via a mono-card, each monitor with a couple of VTs. That was doable with Coherent on install. A day later I got a patch.

Things moved very quickly back then :)


Shouldn't this be written in Latin?

To be (re)read together with the Unix Haters Handbook https://web.mit.edu/~simsong/www/ugh.pdf to realize that what we need is re-made LispM, Smalltalk workstations or the OS as a single application, framework opened down to the most low level part, in the user hands, fully end-user programmable, discoverable, and fully integrated. A 2D and even 3D/4D CLI as the UI, witch is the DocUIs with eventual 3D and video/multimedia elements.

As a conceptual framework http://augmentingcognition.com/assets/Kay1977.pdf


Riotous applause from the cheap seats

Thanks :-) but allow me to enlarge, in my poor English: "us" the westerns, we came from those who invented the IT, the modern industry. We are evidently in a declining phase. Evidently someone else try to emerge and actually one of the most prominent new power, China, emerge doing what we have done when we was at the top of the world in industrial, public research, education terms. Meaning such "technical model" works.

Evidently the financial capitalism have worked for a certain period but does not work anymore. So, why keeping committing suicide? We have started to suicide with the WWI. We kept going with WWII and we continue now.

We are still the leader for IT, and we know what does it work, the classic FLOSS/at least open IT model, the one where some sell iron not bits, the one where customers own their systems and bend them as they wish, the one where communication is not owned by some walled gardens but open like on Usenet, classic mails (as opposite to webmails, hiding the decentralized ability for most users who do not own the WebMUA). To continue with the China comparison I've recently bought some battery tools, very cheap crap but enough for domestic usage and I've observed that batteries have a standard connector, I can swap them from different brands issueless, batteries, chargers are "standard". I also own some high end domestic battery tools, who happen to have a damn nfc tag inside the battery tying it to the device, even if inside the battery are classic connected li-ion batteries. The same I observed for BEV, some friends and I have three Chinese BEV from different brands/models and they have a gazillion of common parts. So to say "open/standard pay back" yes, it might erode SOME OEMs margins, but pay back the society at a whole and as a result the OEM itself. The same is valid in software terms. My desktop is Emacs/EXWM, I use as a search&narrow framework consult/orderless/vertico, they simply "plug in" any other packages because the system is a unique application end-user programmable at runtime. You do not need to "specifically support" a package to integrate it. You do not need third party to explicitly support your package to use it together. And what we do instead? Our best to create walled gardens, we have had XMPP, SIP/RTP and now most are on Zoom/Teams/Meet/Slack/Skype/* all walled gardens. Even many push to substitute emails with some new colorful walled garden. Similarly any app try to add features someone else have since it's impossible just using it, like a sexp in a buffer.

As a result modern IT from Unix where the user at least can combine simple tools with some IPCs in script we are limited by cut&paste, drag&drop and not much more. Anything is damn complicated because there are no shared data structure in a shared environment, but any "app" do everything on it's own, often with a gazillion of dependencies who have a gazillion of deps on their own, with a big load of parsers of any kind and even "some standard to pass data" (like JSON) who try to emerge but are still not a shared data structure in an unique integrated environment.

All of this is the old Greenspun's tenth rule and actually is killing our IT innovation, killing one of the last sector we still rules, for the same issues that have killed our industry essentially.


I 100% agree, and your points about Chinese tools are particularly incisive.

As an aside, but I think relevant and you might find it interesting:

A decade or so I discovered Oberon, the last masterwork of the great genius of programming languages Niklaus "Bucky" Wirth. A complete OS, UI and compiler, in about four and a half thousand lines of code.

I have it running in various forms.

I introduced it to the Squeak Smalltalk community, and when I told them what I was looking for:

« a relatively mature, high-performance, small OS underneath, delivering some degree of portability -- something written in a type-safe, memory-managed language, with multiprocessor support and networking and so on already present, so that these things do not have to be implemented in the higher-level system. »

That is how I found Oberon. They told me such a thing did not and could not exist.

I gave them some links and people were amazed.

It seems deeply obscure in, as you say, the West.

But I have found an active community working on it and developing it. It is in Russia.

It may be that in other countries now the target of Western sanctions, we may inadvertently be fostering some very interesting tech developments...


I know Oberon only by name, I've used (and honestly not loved it at all) some Pascal dialect back at high school, but back then was not real programming and was an introductory very bad organized course so it's hard to tell, I've encountered probably Oberon for a river navigation applications around 10 years ago but I wasn't really involved so I can't say much, I essentially do not know anything but the name, if you have some interesting links to share I'll skim them with pleasure.

In more broad terms I do not put much attention in a specific programming language even if clearly an OS-single-application is tied to a specif programming language, in the sense that there are many, and they are many factions loving one and hating others, the point is offering something usable at user level, like "just type a sexp and execute it" also from an email, because integration means also an immense small diversity and heavy dialogues so innovation. With such model we can keep our supremacy and more important we can't lose it because essentially anything float in a common see.

The main issue to reach such goal I think it's general cultural of the masses, today most peoples, many programmers included, do think that IT means computers, like saying that astronomy is the science of telescopes. Of course computers are like pen and paper, an essential tool, but they are a tool, the purpose of IT is information and that's not a specific technical task but a broad aspects involving essentially all disciplines. Until this is clear for anyone there is little hope people understand the need, power and issues of IT, they'll keep looking at the finger pointing the Moon instead of at the Moon.

The rest came after, even the most basic computer skills came after because to learn we need to be motivated, learning "just because you have to" as a social rule is not productive.


In the beginning was a switch.

For if your browser isn't okay with the long lines;

wget -O - https://web.stanford.edu/class/cs81n/command.txt | nroff | less


Because I had to read this before falling asleep I had audio going out 2x so it sounds like a fifties cartoon.

The section on "THE INTERFACE CULTURE" is critical to understand in today's digital media landscape. Disney's Animal Kingdom is to the written works of Lewis Carroll and J.M. Barrie as the GUI is to the command-line interface. The message of one medium is audiovisual spectacle and immersive experience; the other, cold intellectualism demanding participation from the reader to paint a picture in his mind's eye through the interpretation of raw text, words on a screen, or a piece of paper.

    But this is precisely the same as what is lost in the transition from the
    command-line interface to the GUI.

    Why are we rejecting explicit word-based interfaces, and embracing
    graphical or sensorial ones--a trend that accounts for the success of both
    Microsoft and Disney?

    But we have lost touch with those intellectuals, and with anything like
    intellectualism, even to the point of not reading books any more, though we
    are literate.
Elsewhere [0] I have called this concept "post-literacy," and this theme pervades much of Stephenson's work - highly technologically advanced societies outfitted with molecular assemblers and metaverses, populated by illiterate masses who mostly get by through the use of pictographs and hieroglyphic languages (emoji, anyone?). Literacy is for the monks who, cloistered away in their monasteries, still scribble ink scratchings on dead trees and ponder "useless" philosophical quandaries.

The structure of modern audiovisual media lends itself to the immediate application of implicit bias. On IRC, in the days of 56k before bandwidth and computer networks had developed to the point of being able to deliver low-latency, high definition audio and video, perhaps even for "real-time" videoconferencing, most of your interactions with others online was mediated through the written word. Nowhere here, unless some party chooses to disclose it, do race, gender, accent, physical appearance, or otherwise, enter into the picture and possibly cloud your judgment of who a person is - or, more importantly, the weight of their words, and whether or not they are correct, or at least insightful; consider Turing's "Computing Machinery and Intelligence" paper which first introduced what is now called the "Turing test," and how it was designed to be conducted purely over textual media as a written conversation, so as to avoid influencing through other channels the interrogator's judgment of who is the man, and who is the machine.

    The only real problem is that anyone who has no culture, other than this
    global monoculture, is completely screwed. Anyone who grows up watching TV,
    never sees any religion or philosophy, is raised in an atmosphere of moral
    relativism, learns about civics from watching bimbo eruptions on network TV
    news, and attends a university where postmodernists vie to outdo each other
    in demolishing traditional notions of truth and quality, is going to come
    out into the world as one pretty feckless human being.
Moreover, the confusion of symbols for reality, the precession of digitized, audiovisual content from a mere representation to more-than-real, digital hyperreality (since truth and God are all dead and everything is merely a consensual societal hallucination), leads people to mistake pixels on a screen for actual objects; narrative and spin for truth; influencers, videos, and YouTube personalities for actual people; or words from ChatGPT as real wisdom and insight - much in the same way that Searle's so-called "Chinese room" masquerades as an actual native speaker of Mandarin or Cantonese: "What we're really buying is a system of metaphors. And--much more important--what we're buying into is the underlying assumption that metaphors are a good way to deal with the world."

    So many ignorant people could be dangerous if they got pointed in the wrong
    direction, and so we've evolved a popular culture that is (a) almost
    unbelievably infectious and (b) neuters every person who gets infected by
    it, by rendering them unwilling to make judgments and incapable of taking
    stands.

    It simply is the case that we are way too busy, nowadays, to comprehend
    everything in detail.
The structure of modern short-form, upvote-driven media, lends itself to the production of short-form messages and takes with laughably small upper bounds on the amount of information they can contain. In a manner reminiscent of "you are what you eat," you think similarly to the forms of media you consume - and one who consumes primarily short-form media will produce short-form thoughts bereft of nuance and critical thinking, and additionally suffer from all the deficits in attention span we have heard of as the next braindead 10-second short or reel robs you of your concentration, and the next, and the next...

Beyond the infectious slot machine-like dopamine gratification of the pull-to-refresh and the infinite doomscroll, the downvote has become a frighteningly effective means of squashing heterodoxy and dissent; it is only those messages that are approved of and given assent to by the masses that become visible on the medium. Those who take a principled stand are immediately squashed down by the downvote mob, or worse, suffer from severe censure and invective at the hands of those zealous enforcers of orthodoxy. The downvote mechanism is reminiscent of the three "filters" Chomsky wrote of when he was discussing the mass media in "Manufacturing Consent," and the way advertisers, government, and capital all control and filter what content is disseminated to media consumers.

The message of modern, audiovisual, short-form, upvote-driven social media is bias and group compliance bereft of nuance. If you want to produce and consume novel ideas you are better served by media based on the written word.

[0] https://news.ycombinator.com/item?id=39990133


The capitalist system loves the CLI.

That complicated series of commands you just ran? Copy and paste them into the Jira ticket so the junior employee who makes half your salary can run them next time.


> Copy and paste them into the Jira ticket so the junior employee who makes half your salary can run them next time.

Or, more likely: so that you yourself can remember what you did the next time the problem arises. Or your colleague, who is senior, but does not know this part of the codebase or infra well. Heck, you can even write a shell script, automate things and have your productivity increased!

These things will be just as true and useful in some communist FOSS context as they are in a capitalist system.


The command line is still king.

Whenever I see new coders struggle, it usually is because they:

    - Don't know the context of what they are executing

    - Don't know about the concept of input and output
On the command line, the context is obvious. You are in the context. The working dir, the environment, everything is the same for you as it is for the thing you execute via ./mything.py.

Input and output are also obvious. Input is what you type, output is what you see. Using pipes to redirect it comes naturally.

Not being natively connected to context, input and output is often at the core of problems I see even senior programmers struggle with.


> On the command line, the context is obvious. You are in the context

While I share the opinion that the command line is _the one true way_ of computing, I don't think this is really all that true. Computers are alien. GUIs are alien. CLIs are alien. Everything is learned. Everything is experience. Everything is culture. Learning, experience, and culture blind us from the experience of the novice. This is "expert blindness".

Why Western Designs Fail in Developing Countries https://youtu.be/CGRtyxEpoGg

https://scholarslab.lib.virginia.edu/blog/novice-struggles-a...


True. All interfaces are abstractions and i think the command line interface is the best one we have. It gives you the maximum power.. It does have a steep but surmountable learning curve though and the effort is usually worth it given the ubiquitous nature and programmability.

More succinctly, "the only intuitive interface is the nipple."

Not even that. Newborns have to learn how to suckle, and their mother has to learn how to hold everything in the right positions so it can work. It’s a tricky skill and many aren’t successful even if they want to breastfeed.

Newborns don't have to learn how to suckle. It's a reflex, called a suckling reflex. Lacking a suckling reflex is an indicator of disease. Basically a newborn suckles everything that goes into the mouth, nipple or not.

Yes they have a suckling reflex, but they might not latch on correctly and then breastfeeding is extremely painful.

Are you a woman? Have you had children? Have you partnered a woman as your child and her cried through the night, both trying to make this “breastfeeding” thing work; both failing. “How can something so intrinsic to basic survival, be so hard!”. And yet it is.

Talk confidently when you have experience.


That doesn't negate the fact that newborns have a suckling reflex.

Sucking it's a reflex; the rest it's pseudoscience. Your personal anecdothes don't count.

Some babies actually do not have that intuition and rather bite and need time to learn.

I mean yeah, you are right, it is learned, but "CLI is the one true way" for me because it is much more powerful than most GUIs I have seen. I am much more productive using the CLI, etc.

>Why Western Designs Fail in Developing Countries

Why add this?

Whats the solution then?

We have already given so much in the western world.


Yep, I ran a short "introduction to the command line" course for the devs in my team. Afterwards, I noticed that their usage of the vscode terminal was much higher, and folks were more comfortable exploring on their own.

Quick outline of the course, in case anyone wants a starting point:

  * Introduction
    Quick history of Unix

  * When you log in
    Difference between login and interactive shells
    System shell files vs user shell files
    .zshenv for environment variables like PATH, EDITOR, and PAGER
    .zprofile for login shells, we don't use it
    .zshrc for interactive shells
    Your login files are scripts, and can have anything in them

  * Moving Around

  ** Where am I?
    pwd = "print working directory"
    stored in variable $PWD
    Confusingly, also called current working directory, so you may see CWD or cwd mentioned

  ** What is here?
    ls
    ls -al
    ls -alt
    . prefix to filenames makes them hidden
    . is also the current directory!
    .. means the parent directory
    file tells you what something is
    cat displays a file
    code opens it in vscode

  ** Finding my way around
    cd
    cd -
    dirs | sed -e $'s/ /\\\n/g'

  ** Getting Help From The Man
    man 1 zshbuiltins
    manpage sections

  ** PATH
    echo $PATH | sed -e $'s/:/\\\n/g'
    zshenv PATH setting
    which tells you what will be run

  ** Environment Variables
    env | sort
    EDITOR variable

  ** History
    ctrl-r vs up arrow

  ** Permissions
    Making something executable

  ** Prompts
    zsh promptinit
    zsh prompt -l

  ** Pipes and Redirection
    Iterate to show how pipes work
    cat ~/.zshrc | grep PATH
    ls -al > ~/.tmp/ls-output.txt

  ** Commands

  *** BSD vs GNU commands
    BSD are supplied by Apple, and Apple often uses old versions
    GNU are installed via homebrew, and match those commands available in Linux

>On the command line, the context is obvious.

But CLI contexts are only obvious if the computer user is already familiar with the CLI which biases the learned mind to perceive things as obvious when they really are not.

A lot of CLI commands syntax are based on position instead of explicit argument names.

E.g. creating file system links via CLI has opposite syntax positions in Linux vs Windows:

  - Linux:  ln srcfile targetlink

  - Windows :  mklink targetlink srcfile
If one goes back & forth between the 2 operating systems, it's easy to mis-type the wrong syntax because the CLI doesn't make it obvious. On the other hand, using a GUI file browser like Ubuntu Nautlius or Windows Explorer lets a novice create links ("shortcuts") without memorizing CLI syntax.

This gap of knowledge is also why there is copy&paste cargo-culting of inscrutable ffmpeg, git, rsync, etc commands.

E.g. using ffmpeg to covert a DVD to mp4 by manually concatenating *.VOB files has very cumbersome and error-prone syntax. It's easier to use a visual GUI like Handbrake to click and choose the specific title/chapters to convert.

CLI vs GUI superiority depends on the task and the knowledge level of the user.


Context isn't the same as syntax?

Yes, command line suffers from discoverability of which different applications (such as ln/mklink) may not be consistent.

It is one of the bigger problems (imho) of the cli but it doesn't go against GPs point.

The command line does have a learning curve (partly because of the above), but it is also quite rewarding.


When I start typing a formula in LibreOffice Calc, there is a popup showing possible matching functions, then when I choose the function, the popup shows the required syntax for the function and where I currently am within that syntax. A bash plugin that would do that would be an absolute game changer imho.

The cli excels because it is extremely flexible, with far more options available than a set of buttons could ever display. But discoverability rounds down to 0, and there are footguns. It seems like spreadsheet software has found an almost drop in ui that would greatly enhance the cli.


Tab completion can get you much of the way there.

it's not the same thing. Tab completion is useful and will complete something you know of. But it does not help you discover something you don't know, or provide you the syntax of the command after it is entered. The problem I would like to solve is discoverability.

It's a 3 part problem: available commands, their options, their syntax. Part one would need to capture prompt input before enter was hit using solutions similar to those found at [1] perhaps the most useful but least complete one there is the one that uses apropos so something like `apropos -s 1 '' | sort | grep calc | less`. Similar solutions would be required for two and three. The roughest and easiest prototype would probably be two tabs in a split screen view, which would allow for selection of displayed matches to then modify the prompt creating those matches in the other tab. But Calc style popups directly attached to your cursor would be more useful still.

[1] https://stackoverflow.com/questions/948008/linux-command-to-...


These days it’s easier to ask ChatGPT for the ffmpeg command line to do the thing you want, imo.

Reductio ad absurdum: we should all just use an interactive assembler. Then you really are "in the context".

There is a level of abstraction that makes sense. What level that is is dependent on your objectives.


My first real programming experiences was done through the browser’s console (JavaScript) and IDLE’s REPL (Python). The short feedback cycle works wonder for understanding instead of struggling to the multistep process of C compilation or Java verbosity. I tried my hands at reverse engineering and using a dissassembler like IDA also gives the same immediacy feeling. Great DX for me is either a good debugger or a proper REPL whatever the abstraction level.

Agreed. When writing the comment I returned seconds later and added the word "interactive".

> the multistep process of C compilation

it can be a single make command


DDT, the shell for the ITS operating system, was also an assembly-level debugger.

Oh believe me, I wish what you wrote was true, but it isn't.

I've seen people think they have a specific Python environment active just because they were in their project's directory on the command line.

I've seen people not understand that "python -m pip" is a command and even if they are in a directory which has "python" in its name, they still have to type "python" for that command.

PS: The command line might even be an emperor. And the emperor could be naked...


> I've seen people think they have a specific Python environment active just because they were in their project's directory on the command line.

I wrote python-wool as a simple wrapper to python to make that true because it's just easier that way. Direnv can also be configured to do that as well.

http://GitHub.com/fragmede/python-wool


The more experience I accumulate, the more I rely on GUIs. Explanation: when I was younger I used exclusively the CLI and underestimated GUIs. Now I tend to appreciate GUIs and use them more.

If you're experienced with the command line, it's easy to use GUIs and get good results.

If one starts with GUIs and doesn't really understand what is behind, then all kinds of trouble happen.

So I guess, as with any tool, understanding is key.


Not all GUIs are just a graphical wrapper for a CLI. But in general sure, understanding the tech behind helps.

No doubt, if you're working in AutoCAD, there's no command line that you need to understand first.

But then again, if you're working in AutoCAD, you'd never say "I used to work in CLI only, now I use GUIs more and more".

Clearly they meant GUIs that have CLIs behind, or at least CLI alternatives.


AutoCAD is an unlucky choice of example here, because it's one of the few GUI drawing tools that actually does have a command line behind it that you have to understand sometimes! Look up a screenshot of AutoCAD and you can see the command prompt at the bottom of the window.

And if you were using AutoCAD in the 80's you can say exactly that you used to use the CLI only!


Can you give some examples? Which GUIs are you using?

I have used git extensively in the terminal. But nowadays I see myself more and more relying on GUIs like the ones integrated in Intellij IDE, Source Tree, etc.

Another example could be qemu and the GUIs that we have nowadays. One final example would be simply drag and dropping files via Finder instead of using cp/mv


I used to sort of like the Azure GUI (yes I’m a total psychopath), but then they changed it 9 billion times and now I just use the CLI. It’s frankly often experiences like this which drives me back to the cli. I like Gitkraken, but the it does an update and forgets my SSO or it doesn’t support a specific thing I need to do and then I’m using their console.

I’m not really religious about anything, but I often end up going back to the CLI for a lot of things because it’s just less of an annoyance.


This. And it does not even exclude having a (T)UI. Modern terminal tools like neovim, lazygit, zellij, btop++ or yazi can do many things as window management, image previews and colors as well as having mouse support.

Are there any good tools to be able to ssh into a machine and preview images or render markdown directly in line with the cli?

sixel support lets you display images to the command line, for terminal emulators that support it.

This is such generic advice about computing, it’s like saying:

“To make a building, you need to have a foundation, something to keep the roof up, and a way for people to move inside.”


The analogy I would make is that living in the command line is like using a CAD program while living in IDEs is like using CorelDraw to design houses.

CorelDraw feels more efficient because one quickly has what looks like a beautiful, colorful house on the screen. And then one does not understand why the doors don't work correctly.


its unsung strength is in having multiple terminal windows and a browser open, and the simplicity of being able to hit up and being able to edit and then retry a failed command. I can't do that in Photoshop.

> On the command line, the context is obvious.

You sound like someone who never tried to write a cronjob script…


"Don't know about the concept of input and output"

Wow, that seems quite fundamental. Computing 101.

I'm not a "coder" and I spend "99%" of time on the command line. Because I prefer it. Ever since the 80s when I first used a VAX.


I agree with you, but I think there's a caveat. The command line is king in Linux, BSD, MacOS, AIX, and to a lesser extent Windows. These operating systems were crafted from the bottom up with the commandline as a foundational layer. The idea of the context, of the "working directory", the "environment", were concepts that were lifted from that commandline centric world, into what we run now.

I think Windows very much wanted to be something different with COM. Instead of starting a shell in the context of the program, you'd connect some external "shell" into the very object graph if your program to inspect it. It turns out to be very difficult, and Windows has largely retreated to commandline centric architecture, but I think there was some essential attempt at foundational innovation there.

I would argue that the commandline has very much proven to be the best trade-off between being useful and being simple, but there is no saying if there exists some alternative.


Not every version of MacOS. Classic MacOS, System 1-7 and MacOS 8-9, were definitely not crafted with the command line environment as a foundational layer. Using it was like being wrapped in several layers of bubble wrap. You were trapped in the GUI and if you wanted to do something the GUI didn't allow for, you were "using it wrong".

> The command line is king in Linux, BSD, MacOS, AIX, and to a lesser extent Windows. These operating systems were crafted from the bottom up with the commandline as a foundational layer.

This is definitively not true for macOS.


MacOS is a very complete, very well funded desktop environment targeted towards the general user. You want anything extras and you land in applications using private apis and the command line.

The command line is not a "foundational layer" in macOS, that was my point. It exists on the same layer as the GUI does.

The foundation of MacOS is a fully-compliant Unix:

https://www.opengroup.org/openbrand/register/apple.htm

The GUI is built on top of the Unix foundation and does not stand alone or work without it.

The 'FoxTrot' comic made a big deal about this not long after Mac OS X was released:

https://www.gocomics.com/foxtrot/2002/02/25


The foundation of macOS contains elements of UNIX (or rather BSD) and the OS is UNIX certified, I‘m fully aware of that. But these are two different things.

For one thing, UNIX != command line.

In the same vein, Windows NT is not based on DOS anymore, even if it has a command line which resembles (parts of) DOS.


The command line is king, but sometimes the king is mad. Which is to say, it can be difficult to work with the monarchy when the syntax is shit. And there's a lot of bad syntax out there: overly cute, so terse as to be cryptographic, the straight-up baffling ...

Outside of the syntax (which seems to live forever), you have things like non-sane defaults, obscurantist man pages ... the list goes on.


the ability to hit up and edit and retry is such a redeeming feature. repeating the same actions in a GUI with no keyboard shortcuts is an exercise in frustration.

GUIs can have keyboard shortcuts. Have you honestly never pressed Alt+F, x to exit a GUI program or Ctrl+S to save a document in a GUI editor, or Ctrl+Tab to switch tabs in a GUI browser or Tab to move focus between fields, or the context-menu button next to Alt Gr and then a keyboard accelerator key for the menu, or Ctrl+C then Ctrl-P or anything?

Repeating the same actions in a CLI with no readline is an exercise in frustration, but ... that's not what happens most of the time.


> the syntax is shit

When you’re typing a lot, you really don’t want to do a lot of typing for each step. And the shell scripts were for automating some process, not solving a particular problem (you use a programming language for that). The workflow is to have the references ready in case you forgot something.

That brings up the man pages, which can varies in quality, but, for most software I’ve used, tend to be comprehensive. But they assume that you’re knowledgeable. If you’re not, take some time to read a book about system administration (users, processes, files permissions,…).


I'm not sure if I have O'Reilly's System Administration book. I used to get pre-prints back in the early nineties when they were still quite new. In any case, yes, I have read and I have Been Around.

And I still think that we can improve. More over, we ought to improve.


Me: seems like my sort of thing.

Me: navigate to linked website, see wall of text.

Me: clicks reading mode

Me: *193 - 245 minutes*

Me: bookmark to read later; probably not


It’s a short novel.

Putting it in a browser window gives it bad odds. You can also listen to it:

https://youtu.be/KpaUg6WwdzU

Begins at 01:30, 25 minutes.


> 25 minutes

That link is only part 1 (of 7). It's still around 2 and a bit hours of listening in total. https://www.youtube.com/@robertreads4323/videos


It's very engaging, please try reading it.

You can skip ahead to his playful thesis > the universe emerging from the command line.

In his book The Life of the Cosmos, which everyone should read, Lee Smolin gives the best description I've ever read of how our universe emerged from an uncannily precise balancing of different fundamental constants. The mass of the proton, the strength of gravity, the range of the weak nuclear force, and a few dozen other fundamental constants completely determine what sort of universe will emerge from a Big Bang. If these values had been even slightly different, the universe would have been a vast ocean of tepid gas or a hot knot of plasma or some other basically uninteresting thing--a dud, in other words. The only way to get a universe that's not a dud--that has stars, heavy elements, planets, and life--is to get the basic numbers just right. If there were some machine, somewhere, that could spit out universes with randomly chosen values for their fundamental constants, then for every universe like ours it would produce 10^229 duds.

Though I haven't sat down and run the numbers on it, to me this seems comparable to the probability of making a Unix computer do something useful by logging into a tty and typing in command lines when you have forgotten all of the little options and keywords. Every time your right pinky slams that ENTER key, you are making another try. In some cases the operating system does nothing. In other cases it wipes out all of your files. In most cases it just gives you an error message. In other words, you get many duds. But sometimes, if you have it all just right, the computer grinds away for a while and then produces something like emacs. It actually generates complexity, which is Smolin's criterion for interestingness.

Not only that, but it's beginning to look as if, once you get below a certain size--way below the level of quarks, down into the realm of string theory--the universe can't be described very well by physics as it has been practiced since the days of Newton. If you look at a small enough scale, you see processes that look almost computational in nature.

I think that the message is very clear here: somewhere outside of and beyond our universe is an operating system, coded up over incalculable spans of time by some kind of hacker-demiurge. The cosmic operating system uses a command-line interface. It runs on something like a teletype, with lots of noise and heat; punched-out bits flutter down into its hopper like drifting stars. The demiurge sits at his teletype, pounding out one command line after another, specifying the values of fundamental constants of physics:

universe -G 6.672e-11 -e 1.602e-19 -h 6.626e-34 -protonmass 1.673e-27....

and when he's finished typing out the command line, his right pinky hesitates above the ENTER key for an aeon or two, wondering what's going to happen; then down it comes--and the WHACK you hear is another Big Bang.


I ran it through an LLM and asked it to summarize and answer questions about it. Worked great to get the gist.

I am curious, why is this comment being down-voted? I mean, I would like to hear an opinion against it (not that I care about the points).

> Please don't comment about the voting on comments. It never does any good, and it makes boring reading.

https://news.ycombinator.com/newsguidelines.html


I am just simply asking for the opinion of people who disagree with OP. I do not care about the down-vote per se, more so about the opinion of people who disagree indicated by the down-votes.

Because HN has a hate boner against "AI". :)

The reality is that summarizing text and answering questions about it is one of the best use cases for what we currently call "AI".


Are you purposefully being ironic?

The CLI has a massive blind spot in today’s operating systems: it knows nothing useful about events.

Yet events are the primary way anything happens on a computer, whether it’s a user system or a server.


In unix world, everything is a file, so you can poll the file waiting for something to happen. And there’s the whole signal thing and dbus exists.

Yeah, these are the event paradigms that I meant by “nothing useful.”

Files are not a good abstraction for events. Signals are broken in many ways. And DBus is both extremely clunky to use and non-portable.

There isn’t a built-in event paradigm similar to how streams and pipes are an integral part of the Unix-style CLI.


> Files are not a good abstraction for events

Why is that? On the low level everything is a state of electronic cells. Files address those cells in a suitable fashion. Modern programming abstractions such as async/await are very simple, but fail miserably if you need something really complex and efficient.


Annoying though it may be, you can run a program in the background that can write to your open terminal.

Just in userspace you have;

   dmesg -w

   tail -f /var/log/messages
There's also dbus to monitor on Linux systems and a lot of kernel hook tricks you can use to get a message pop up if an event happens.

Because it gets annoying to have a process splurge notification stuff to a term you are working in, that's why you have info-bars which many terminal emulators support.


huh? DBUS is very much a thing and has CLI-tooling?



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: