言語パターン - 使いやすい言語・ライブラリをデザインする方法
基本方針
プログラマの手間と思考を節約する
なお、思考も手間の一種と考えられるが、思考のコストは目立たないのでここでは強調するために別にあげてある。 明らかには区別できないものも存在する。
パターン
- プログラマが考えなければならないことを減らす
- 記憶しなければならないことを減らす
- プログラマの既存の知識や慣習を利用する (必要な学習量を減らす)
- メンタルモデルと整合させる
- 一貫性を持たせる (類推が効くようになるので必要な記憶が減る)
- ボキャブラリを増やさない (既存のもので済ます。済まなくても追加なるべく少なくする。必要な学習量を減らす。これは現実的な用法を対象とするものでありミニマリズムではない)
- DRY (Don't Repeat Yourself) (ひとつのことを一ヶ所のみで記述してあれば、プログラムの変更時に整合性の問題が生じない)
- No configuratoin is good configuration
- リファクタリングが容易もしくは不要なようにする
- OS やエディタなどのインフラと協調する
- 与える情報を減らす
- よく使うものを簡単に使えるようにする
- 用法の偏りを発見する
- 公開済みのものに対する質問やバグレポートを観察する (繰り返し起きる質問や驚きを発見する)
- コード検索して利用例を調べる (とくに idiom を探す・確認する)
- 公開してフィードバックを得る
- 実際に多く報告される問題を解決する
- YAGNI (You Aren't Going to Need It)
- 毎回マニュアルをひかないと使い方を思い出せないもの
- メタレベルプログラミングはベースレベルプログラミングよりも頻度が低い
- 偏りに最適化する
- 長さで最適化する
- 可能なことはすべてできるようにする
- 対象の本質を考察して、可能であるべきことを同定する
- 可能であるべきことをすべて組み合わせで表現できるプリミティブをデザインする
- 一貫性を持たせて記憶しなければならないことを減らす
- プリミティブは覚えられるよう少なくする
- - 組み合わせが容易になるようにする (一定の機能を実現するのであれば、少ない数のプリミティブで済む)
- 仕様の進化
- 漸進的成長 ContinuousRefinement
- 非互換性の扱い
- レイヤ構造
- 文脈の取り込み
著者
産業技術総合研究所 情報技術研究部門
田中 哲
Last modified: 2010-05-26
Attached files total: 0Bytes