💻 Command line, AOC 🇺🇸
Wednesday, April 15, 2020 :: Tagged under: culture blurb pablolife engineering. ⏰ 4 minutes.
Hey! Thanks for reading! Just a reminder that I wrote this some years ago, and may have much more complicated feelings about this topic than I did when I wrote it. Happy to elaborate, feel free to reach out to me! 😄
🎵 The song for this post is Use Me, by Bill Withers. 🎵

I've been programming for professionally for 10 years, and nothing still feels as
good as running a sed command on an entire codebase and it more-or-less just
working. Running git diff
after and seeing several boring hours of work to
rename something, just… done.
Of course, I didn't write the sed command from memory. sed
, by default, uses
Basic Regular Expressions, and most of us day-to-day use PCRE regexes. Knowing
both (and combining between the two) is a bit of a pain. And on Mac, you need to
call sed
with an empty string for the -i
flag to get it to work the way it
works on many Stack Overflow answers. And if you want to call it on a group of
files (like an entire directory) I hope you know to add \{ \} \;
to your
find/-exec
pairing (with the spaces!) unless you use | xargs
!
I guess what I'm trying to say is that while these tools are romanticized,
my God are the still hard to pin down. I know just enough of what VIM
calls regexes to use it a few times but not as good as when I use Python
regexes, and neither as good as sed
. I read about what sed
and awk
give
you, but it's a hammer I rarely reach of because I can usually boot an IDE that
will do the operation more reliably.
There's a great tradition of rewriting old UNIX dinosaurs to be more "modern"
(or new tools in that spirit): I'm thinking of bat
(cat
replacement),
exa
(ls
replacement), tokei
(cloc
replacement),
httpie (curl
replacement) and jq
(JSON-specific parsing/mangling,
like awk
on API data instead of raw text streams). grep
has a million
replacements: egrep
to solve the regex pain, but also ack
, the silver
searcher (ag
), and the one I'm currently using, ripgrep (rg
).
I tried fd
for find
, but couldn't make it stick since I already know a
lot of find
lol.
Most "modern" takes on these tools are:
- "I wrote it! ⭐️"
- Colorized output in iTerm.
- Remove or consolidate a lot of the functionality to be some version of "cleaner," usually on flags and their use (I often agree).
- Sometimes, much better performance (ripgrep and tokei are… very fast).
While there's a lot that I don't love about this article (I'm sure its author could say the same: this is a mirror of the entire blog they took down. And they may have changed their mind about things; this was written 10 years ago) I do love the phrase "Taco Bell programming" as a way to think about using shell and pipes to build more sophisticated programs than I would have otherwise. This came up in the "more shell less egg" analysis Hillel Wayne did, where one of his takeaways (and mine too, when I first read the Bentley/Knuth exchange) was that the problem spec was especially well-suited for UNIX pipeline processing, and if you were to add a few requirements suddenly you could see the problem becoming much harder, and a "real program" becomes necessary. He suggested calculating Levenshtein distance. But then someone else… did that with two more lines of "shell." I just keep getting surprised by this.
Another example: Elixir programmers (though you see this in Clojure and OCaml a bunch too) love to pipeline their operations:
data
|> ThisModule.frobify()
|> ThatModule.mangleFort()
|> IO.inspect()
|> somethingOrOther()
and these are… strictly inferior to Unix pipes? By strictly inferior, I mean that something like:
yes | sudo apt-get install this-package
Will only run as much yes
as is necessary. yes
never terminates, but it
won't hold up the program. Getting the output of one function to lazily and
concurrently "feed" the input of another command is a real Senior
Engineer task in something like Python or Java.
This is, itself, a hyperspecific example, but one I think about a lot when I look at application code that doesn't surface these operations easily. I think romantic narratives about UNIX (like Lisp) of "enlightenment" tend to fall short of putting up results in commercial settings, and get roped into a lot of silly showboating rituals. But I think there is something pretty interesting at the base of it.
I don't know entirely where I'm going with this, other than I have dreams of becoming That Hippie Programmer.
AOC, #uspol
I read this interview with AOC by Astead Herndon and I'm just reminded how fucking good she is at this. The messaging is centered on issues, is critical to the centrist wing without hostile enough to bruise their egos, and keeps focus on who the real enemies are in all this.
Democrats have always been the party of "well, we're not as obvious or overtly evil as those fuckers," which means they don't produce many firebrands, and when I look back at the ones they did, they tended to… suck? Be bad at persuading others, or enacting policy? I'm thinking Alan Grayson, Kucinich (in the early aughts people were talking about him like he was an AnCom), Barney Frank, or Al Franken. Many were fine enough I guess, but if you were looking for someone legitimately scary in how effective they were… the Republicans were never that scared. But they are scared of AOC (and grateful to have another woman to cast as Satan, and a Latina to boot, after using Hillary for the last two decades).
Anyway, it's a quick read. I liked it, you might too.
Thanks for the read! Disagreed? Violent agreement!? Feel free to join my mailing list, drop me a line at , or leave a comment below! I'd love to hear from you 😄