程序员和软件开发者在工具命名上失去了方向。
Programmers and software developers lost the plot on naming their tools

原始链接: https://larr.net/p/namings.html

## 软件中富有意义的名称的失落艺术 软件开发中一种日益增长的趋势倾向于为包和工具使用异想天开、晦涩难懂的名称——理查德·斯托尔曼最近批评这种做法是与历史描述性惯例(如`dired`或`eshell`)的倒退。这种转变,以“Viper”、“Cobra”和“Melody”等项目为例,迫使开发者花费认知精力来从名称中推断功能,不同于工程学等领域,名称清楚地表明了用途(例如,胡佛大坝*就是*一座大坝)。 这并非缺乏创造力,而是清晰度的丧失。虽然早期的编程语言和工具使用能够反映其用途的名称(FORTRAN、grep、awk),但现代项目通常优先考虑“令人难忘”而非“有意义”。这造成了“认知税”——浪费的时间和精神能量用于理解依赖关系。 作者认为这种趋势,可能受到创业文化和GitHub的影响,是有害的。虽然品牌对于消费品很重要,但基础设施和工具应该优先考虑清晰、描述性的命名。我们需要回归专业标准——拥抱冗长性、命名空间,并优先考虑功能而非“乐趣”,以尊重开发者的时间并提高代码的可维护性。

## 软件命名规范:一则黑客新闻讨论总结 最近一则黑客新闻讨论引发了关于软件命名实践的争论。核心观点,在一篇链接文章中提出,现代软件开发已经放弃了清晰、描述性的命名规范——例如经典的Unix工具如`grep`和`sed`——转而采用随机名词、神话生物或晦涩的引用。 许多评论者同意清晰度很有价值,尤其是在内部工具和库中,认为描述性名称有助于理解,并在调试过程中减少认知负担。然而,也出现了反驳意见。一些人指出,工具的功能经常会演变,导致最初的描述性名称不准确。另一些人强调了名称冲突以及对唯一标识符的需求。 一个关键点是区分内部/面向开发者的名称和外部/面向营销的名称。虽然描述性名称是技术组件的理想选择,但品牌通常优先考虑记忆性和独特性。最终,这场讨论强调了软件命名中即时清晰度和长期灵活性之间的紧张关系。几位参与者还指出,这个问题并非软件独有,在化学和工程等领域也同样存在。
相关文章

原文

This section was labeled under, or is related to Programming

In Dec 2022 I watched Richard Stallman’s talk on the EmacsConf, it was titled “What I’d like to see in Emacs”. One of the interesting points Mr. Stallman pointed out in this talk was “memorable names”, “I think every package that you […] should have a name that helps you remember what job it does. […] We’ve had a tendency to give packages names for the sake of pure wordplay or lack of obvious meaning”. That Stallman felt compelled to make this point in 2022 tells you everything about how far we’ve fallen, even within the Emacs ecosystem (known for its descriptive naming conventions, dired for directory editor, eshell for Emacs shell).

There’s an odd tendency in modern software development; we’ve collectively decided that naming things after random nouns, mythological creatures, or random favorite fictional characters is somehow acceptable professional practice. This would be career suicide in virtually any other technical field.

I remembered Stallman’s comment lately when I had some difficulties following my friend who was describing some situation in their infrastructure. She was saying something like that: “We’re using Viper for configuration management, which feeds into Cobra for the CLI, and then Melody handles our WebSocket connections, Casbin manages permissions, all through Asynq for our job queue.”, perhaps only the last software in this statement was saying something about what the package/software actually does, I spent couple of moments trying to make sense of the names she mentioned, googled some of them, and really while I’m doing that I remembered that I never had to do this when interacting with any other fields: the Golden Gate Bridge tells you it spans the Golden Gate strait. The Hoover Dam is a dam, named after the president who commissioned it, not “Project Thunderfall” or “AquaHold.” Steel I-beams are called I-beams because they’re shaped like the letter I. Even when engineers get creative, there’s logic: a butterfly valve actually looks like butterfly wings. You can tell how the name relates to what it actually defines, and how it can be memorable. If you wrote 100 CLIs, you will never counter with a cobra.

Same thing applies to other fields like chemical engineering, where people there maintain even stricter discipline. IUPAC nomenclature ensures that 2,2,4-trimethylpentane describes exactly one molecule. No chemist wakes up and decides to call it “Steve” because Steve is a funny name and they think it’ll make their paper more approachable.

It was not always like that (I believe)

I read a lot into software history, and I can’t really say that there was an era of fantastic naming (even very experienced engineers made some very silly naming) but at least some current was trying to make some sense in the 80s; grep (global regular expression print), awk (Aho, Weinberger, Kernighan; the creators’ initials), sed (stream editor), cat (concatenate), diff (difference). Even when abbreviated, these names were either functional descriptions or systematic derivations. Nobody named the copy command “Sparkle” or the move command “Whisper.”

Early programming languages followed similar logic: FORTRAN (Formula Translation), COBOL (Common Business-Oriented Language), BASIC (Beginner’s All-purpose Symbolic Instruction Code), SQL (Structured Query Language), I believe Lisp stands for list processing. The pattern was clear: names conveyed purpose or origin. Somewhere around the 2010s, a memetic virus infected software engineering. Perhaps it started innocently, developers tired of boring corporate naming conventions wanted personality in their open-source projects? maybe. A few quirky names were charming. A database named after an animal? Sure, MongoDB (from “humongous”) at least has etymological connection to its purpose, even if “Mongo” became the shorthand.

But we didn’t stop there. We kept going. Now we’re drowning in a zoo of meaningless appellations where the connection between name and function has been severed entirely. Probably pattern accelerated with the rise of GitHub and startup culture. Everyone wanted to be the next Google, a meaningless name that became iconic through market dominance. Google could afford to build brand recognition through billions in advertising and becoming a verb. Your MIT-licensed file parser with 45 GitHub stars cannot.

The cognitive tax

Every obscure name is a transaction cost levied on every developer who encounters it. When you see “libsodium,” you must context-switch from problem-solving mode to detective mode: “What does this do? Let me check the README. Ah, it’s a crypto library. Why is it called sodium? Because chemistry? Because NaCl? Clever, I suppose.” Now, multiply this by dozens of dependencies in a modern project. Each one demands tribute: a few seconds of mental processing to decode the semantic cipher. Those seconds accumulate into minutes and effort, then career-spanning mountains of wasted cognitive effort.

Imagine that you are to explain to a new engineer how is your codebase structured, and the general architecture of some project, and go through the dependencies you use to delegate some certain tasks to and explain how they orchestrate together. Actually let me put my friend’s statement again instead: “We’re using Viper for configuration management, which feeds into Cobra for the CLI, and then Melody handles our WebSocket connections, Casbin manages permissions, all through Asynq for our job queue”.

Now pause and actually process that sentence. there’s a snake, another snake, music, a mysterious proper noun, and… async-with-a-q? Half your mental RAM is busy pattern-matching these arbitrary tokens to their actual functions instead of focusing on the architectural decisions being discussed. This is the equivalent of a cardiologist saying “we’ll install a Butterfly in your Whisper to improve your Thunderbeat” instead of “we’ll place a stent in your artery to improve your cardiac output.” Compare this to reading a scientific paper in materials science. When you encounter “high-entropy alloys” or “shape-memory polymers,” the name itself conveys information. You can make educated guesses about properties and applications before reading a single word of description.

Some excuses I’ve heard of

I was told some of the following when I shared my concerns about naming before, here’s my thoughts of some:

  • “But memorable names help with marketing!”

    Sure, if you’re building a consumer product. Your HTTP client, cli utility helper, whatever library is not a consumer product. The people who will ever care about it just want to know what it does.

  • “Descriptive names are boring!”

    Yes, and surgical instruments are boring. Boring is fine when clarity is paramount. This isn’t creative writing class.

  • “It’s just for fun!” Your fun has externalities.

    Every person who encounters your “fun” name pays a small tax. Across the industry, these taxes compound into significant waste

  • “All the good descriptive names are taken!”

    We could have used namespaces, prefixes, or compound terms like every other engineering discipline has done for centuries. We have the technology. But even if you can not do that, at least make the name has anything to do with the product, put a “DB” post-fix, do some word play like how “magit” does. If you couldn’t be clear, you could have made it relatable at least.

The path forward

Whatever happened wasn’t malicious—it was cultural. As programming shifted from corporate mainframe work to the community builders.

Thus, we need a cultural correction. Not regulation open source thrives on freedom, but a revival of professional standards through social pressure and education.

Name your library after what it does. Use compound terms. Embrace verbosity if necessary. http-request-validator is infinitely superior to “zephyr” when someone is scanning dependencies at 2 AM debugging a production incident.

If you absolutely must have a cute mascot or reference, fine-make it the project mascot, not the name. PostgreSQL has Slonik the elephant. PostgreSQL is still called PostgreSQL. The elephant doesn’t replace semantic meaning.

Reserve the creative names for end-user products where branding matters. For infrastructure, tools, and libraries, choose clarity. Every time.

The next time you’re about to name your project after your favorite anime character, pause. Ask yourself: “Would a civil engineer name a bridge support system this way?” If the answer is no, choose a better name.

Our field deserves better than a zoo of random nouns masquerading as professional nomenclature. Clarity isn’t boring, it’s respect for your users’ time and cognitive resources.


Some works I recommend engaging with:

I seek refuge in God, from Satan the rejected. Generated by: Emacs 30.2 (Org mode 9.7.34). Written by: Salih Muhammed, by the date of: 2025-12-11 Thu 18:27. Last build date: 2025-12-11 Thu 21:29.

联系我们 contact @ memedata.com