プログラミング
ストラウストラップの法則 (2024)
Stroustrup's Rule (2024) (buttondown.com)
要約
この記事では、Bjarne Stroustrupが提唱した「新しい機能には明示的な構文が求められ、確立された機能には簡潔な記法が好まれる」という法則について解説しています。Rustのエラーハンドリングの進化やPythonのwalrus演算子を例に挙げ、この法則が個人のスキル習熟度やコミュニティ全体にどのように適用されるか、そしてそれが言語の学習難易度にどう影響するかを論じています。著者は自身の教育経験から、初心者のためには簡潔さよりも明示性が重要であることを強調しています。
全文翻訳
2024年12月11日 ストラウストラップの法則
初心者は明示的な構文を必要とし、エキスパートは簡潔な構文を好む。
2週間のワークショップを終えて疲弊しているので、今回は軽い内容にする。
ハヌカ・セール
『Logic for Programmers』はハヌカの終わりまでセール中だ!ユダヤ教徒でなければ1月2日までだ。こちらで40%オフで手に入れよう。
ストラウストラップの法則
ストラウストラップの法則に初めて出会ったのは、この現在は存在しないウェブページだ。
構文設計に関する私のお気に入りの洞察の一つは、Bjarne StroustrupによるC++1の回顧録に登場した。
「新しい機能については、人々はLOUDで明示的な構文を主張する。確立された機能については、人々は簡潔な記法を求める。」
ブロガーはRustのオプション型を例に挙げている。元々、エラーを格納するためにオプション型を使用するというアイデアはプログラマーにとって新しいものだったため、エラーを渡す構文は非常に明示的だった。
```rust
let file = match File::open("file.txt") {
Ok(file) => file,
Err(err) => {
return err;
}
}
```
人々がそれに慣れてくると、Rustはボイラープレートを減らすために`try!`マクロを追加し、最終的にはエラーハンドリングをさらに効率化するために`?`演算子を追加した。
私はこれをメンタルモデル開発の特殊なケースと見ている。ある機能があなたにとって新しいとき、内部的なメンタルモデルがないため、得られるすべての明示的な情報が必要となる。それに慣れてしまうと、明示的な構文は視覚的な邪魔になり、情報を素早く解析する妨げとなる。(私のお気に入りの例の一つ:`user_id`と`user_identifier`、どちらがより明示的だろうか?経験豊富なプログラマーはどちらを好むだろうか?)
興味深いのは、スペクトルの両側にいるのは同じ人々であることが多いということだ。初心者は明示的な構文を必要とし、エキスパートになると簡潔な構文を好む。この法則はコミュニティ全体にも適用される。言語の誕生当初は、誰もが初心者だ。時間の経過とともにエキスパートと初心者の比率が変化し、より「エキスパートフレンドリー」な機能、例えばより簡潔な構文に焦点が当たるようになる。これは初心者が言語を学ぶのをより困難にする可能性がある。
Pythonでは「walrus」代入演算子を巡って多くの議論があった。
```python
# Without walrus
val = dict.get(key) # `None` if key absent
if val:
print(val)
# With walrus
if val := dict.get(key):
print(val)
```
エキスパートはコードをよりエレガントにするため支持したが、教師や初心者は言語を学ぶのを難しくするため反対した。明示的な構文と簡潔な記法。これは言語が時間とともに肥大化することにつながるのだろうか?
教育において
言語ワークショップを教える際、私はストラウストラップの法則に積極的に逆らわなければならない。私が最も読みやすいと感じる簡潔な記法は、私が煩わしいと感じる明示的な構文を必要とする初心者には向かないのだ。
良い例がTLA+の型不変条件だ。ワーカーの集合があり、各ワーカーがカウンターを持っているとしよう。すべてのワーカーのカウンターが非負整数であると言うには2つの方法がある。
* Bad
`\A w \in Workers: counter[w] >= 0`
* Good
`counter \in [Workers -> Nat]`
最初の方法は、文字通りすべてのワーカーについて`counter[w]`が非負であることをテストする。2番目の方法は、カウンターマッピング全体が適切な「関数セット」—ワーカーと自然数の間のすべての関数—の要素であることをテストする。関数セットのアプローチはより簡潔で、よりエレガントであり、TLA+のエキスパートに好まれる。しかし、私は初心者にとってより理解しやすい「悪い」方法を教えている。23分から始まる。↩
もしこれをウェブで読んでいるなら、ここで購読できる。更新は週に一度だ。私のメインウェブサイトはこちら。私の新しい本『Logic for Programmers』は現在早期アクセス中だ!こちらで手に入れよう。
次を見逃さないで。Computer Thingsを購読しよう:
メールアドレス (必須)
購読
コメントを追加:
ログインしていません。このコメントを投稿すると、以下に入力したメールアドレスでこのニュースレターに登録されます。
コメントして購読する
このメールを共有する:
共有
Facebookで共有
LinkedInで共有
Hacker Newsで共有
Blueskyで共有