コンピュータサイエンスにおける難題、名付け。本気で良い名付けをしたい - 名付けにまつわる議論とヒント

最近の流行りの引用: Userクラス

https://twitter.com/MinoDriven/status/1380773721032433674?s=20

この主題は「技術的負債解消の観点」。

https://speakerdeck.com/minodriven/kusokododong-hua-userkurasu-dekao-eruji-shu-de-fu-zhai-jie-xiao-falseguan-dian

で動画に対するところは私ごときが下手に触れては取り扱いきれないことが容易に想像できるため、割愛する。しかし私は、名付けって難しいなあ、という素直な感想を持った。ので以下それにまつわり、名付けが議論になった例を振り返る。自身の開発時の名付けに活かしたいというメモ。


## 名付けが議論になった例

### Tsunami 
I'm not sure if "Tsunami" is a good name. 

- I'm not sure if "Tsunami" is a good name. But I need your opinion. #5 / Tsunami という名前が良いかわからないが、意見をお聞かせ願いたい、という issue。
    - https://github.com/google/tsunami-security-scanner/issues/5
- 議論内容は非常に長く、本質的議論以外の枝も含むのでリンクを読むことを推奨する。だが、最終的には以下にて記録されている。
    - https://github.com/google/tsunami-security-scanner/issues/5#issuecomment-747346727
    - https://github.com/google/tsunami-security-scanner/blob/master/docs/index.md#naming

> The name "Tsunami" comes from the fact that this scanner is meant be used as part of a larger system to warn owners about automated "attack waves". Automated attacks are similar to tsunamis in the way that they come suddenly, without prior warning and can cause a lot of damage to organizations if no precautions are taken. The term "Tsunami Early Warning System Security Scanning Engine" is quite long and thus the name got abbreviated to Tsunami Scanning Engine, or Tsunami. Hence, the name is not an analogy to tsunamis itself, but to a system that detects them and warns everyone about them.

> 名前は、このスキャナーが、自動化された「攻撃の波」についてオーナーに警告するための大規模なシステムの一部として使用されることを意味している。自動化された攻撃は、事前の警告なしに突然やってくるという点で津波に似ており、何も対策を講じなければ組織に大きな損害を与える可能性があるため。Tsunami Early Warning System Security Scanning Engine という言葉は非常に長いため、 Tsunami Scanning Engine または Tsunami と略されている。したがって、この名前は津波そのものではなく、津波を検知して皆に警告するシステムの意

- 翻訳はDeepL翻訳＋整形。
- Tsunami そのものは [話題のGoogle製OSS - Tsunamiを試してみた](https://qiita.com/satto_sann/items/69deb12ed3f11155a284) 等参照のこと。
- 感想: 議論を記録するのは非常に大事だな。


### Coq

- coq - Alternative names 
- coq の発音が英語圏にて使いづらいので名前の変更か発音の変更をという話。以下も簡単な翻訳。
    - https://github.com/coq/coq/wiki/Alternative-names

> Coqという名前は、フランス語でオンドリを意味するCoC（the Calculus of Constructions）と、Coqの初期作者の一人であるThierry Coquandに由来している。しかし、一部の英語圏の人々が不快に思うスラング的な意味を持つ言葉にも近いものがある。

> このページでは、別の名前や別の発音方法のアイデアを集める。

- 2021/04/12 現在も頻繁に更新されている。
    - https://github.com/coq/coq/wiki/Alternative-names/_history
- Coqそのものは : https://coq.inria.fr/ 
- 感想: こちらも、この議論を残していくということが非常に参考になる。


### master / main

- 人権運動を背景にしたもの。
- The default branch for newly-created repositories is now main. / 新しく作成されるリポジトリのデフォルトブランチ名はmainになります、という話。

https://github.blog/changelog/2020-10-01-the-default-branch-for-newly-created-repositories-is-now-main/

https://github.com/github/renaming

https://www.publickey1.jp/blog/20/githubmainmastermain.html


### 「古い書き方のコード」論

- ちょっと横道だが、議論がとても参考になったのでメモ。
    - [古い書き方のコード](https://qiita.com/yuu_j/items/d6e6fc4476ab1dc35cdc) / [Re: 古い書き方のコード](https://qiita.com/dairappa/items/5e954b27b81c646435f3)
    - ハンガリアンに対するところなど。



### その他、名前の由来等にまつわる話

#### "あえてネガティブな名前をつけてるだろうなと思ったソフトウェアたち"

https://zenn.dev/15/articles/373ce351fa8d79

#### Git (Slang)

https://en.wikipedia.org/wiki/Git_(slang)

#### 名前ではないが、ロゴ

https://blog.rjmetrics.com/2013/10/09/our-logo-looks-like-underpants-a-case-study-in-internationalization/

https://gigazine.net/news/20180806-logo-looks-like-underpants/





## まとめると

機能の名前を考えることとは機能を決めるということ。機能が決まらないと名前も決まらないということ。名付けはやはり大事。名付けに困ったら...

### 名付けのヒント、アンチパターン、議論

- [プログラミングでよく使う英単語のまとめ【随時更新】](https://qiita.com/Ted-HM/items/7dde25dcffae4cdc7923)
- [プログラミングの変数名、関数名を命名する際に便利なサイト・記事](https://qiita.com/developer-kikikaikai/items/421d4ab74e161d993074)
- [プログラミングの英語表現 / 文章作成に迷ったら「クオートで囲ってGoogle検索」](https://qiita.com/YumaInaura/items/76f8242ae58d017d69f6)
- [データベース列名の名前付け（英単語での）採用例を集めてみた](https://qiita.com/otagaisama-1/items/4d7e2eb5c274e9fce664)
- [Naming -名前付け-](https://qiita.com/Koki_jp/items/c67d7d9f241b8c87eef3)
    - 名前を、コミュニケーションの基礎と見た場合に重要なルールは以下の通りです。
        - 発音可能であること
        - 検索可能であること
    - 略語、頭字語
- Naming 色々 at GitHub 
    - https://github.com/gruhn/awesome-naming 
    - https://github.com/naming-convention/naming-convention-guides
- [クラスの命名のアンチパターン](https://qiita.com/magicant/items/8134edf969f9629fa66e)

### 名付けを助けるツール

- Codic
    - https://codic.jp/
- Codelf
    - https://unbug.github.io/codelf/
    - https://github.com/unbug/codelf

### 名付けにまつわる格言

> There are only two hard things in computer science: cache invalidation and naming things.
> コンピュータサイエンスに難しいことは2つしかない。キャッシュの無効化と名付けである

Netscapeの開発者Phil Karltonの言葉らしい。https://martinfowler.com/bliki/TwoHardThings.html
以上参考になればさいわいです。