kidoOooOoooOOom

ゲーム開発やってます

抽象化がうまくなるように、いろいろな言葉とバイアスを学ぶ

9年振りに読んだ「プログラマが知るべき97のこと」から学んだことシリーズその3

その1と2はこっち

kidooom.hatenadiary.jp

kidooom.hatenadiary.jp

48 いろいろな言葉を学ぶ

いろいろな言葉を学ぶ | プログラマが知るべき97のこと

私の知る限り、優秀なプログラマプログラミング言語を巧みに操るだけでなく、自然言語も非常にうまく使うことができます。話す力が大事なのは、他人とのコミュニケーションが円滑にできるからだけではありません。自分の思考を明確にするためにも、話す能力は重要なのです。この能力は問題を抽象化する際には欠かせません。そして抽象化こそ、プログラミングの核心です。

プログラマーはコミュニケーション能力が低いオタクのような描写をされることが多いが、自分が現実世界で観測している優秀なプログラマはだいたいそんなことは無く、ブログや書籍執筆・カンファレンスでの登壇などで非常に高いコミュニケーション能力を発揮している。

抽象化がプログラミングの核心なんだなぁと日々感じることも多くなっていて、テスト容易性や変更容易性などを考慮した設計のためには、具体的なコードから作るのではなくインタフェース設計等の抽象化した階層で考える必要がある。

抽象化は、作る対象の「言葉」に精通していてこそできるのであって、先日読んだ「現場で役立つシステム設計の原則」でも紹介されているDDD(ドメイン駆動開発)のような考え方が重要だなと改めて理解した。

kidooom.hatenadiary.jp

54 見えないものを見えるように

見えないものを見えるように | プログラマが知るべき97のこと

ソフトウェアには、見えないことが良い性質をもたらすこともあれば、見えないことによる問題が起きやすい性質がある。

見えないことが良いことの例としては、「情報隠蔽」「カプセル化」「疎結合」などの依存性をなくしたり、情報を減らすことによる人間の認知コストを減らすものがある。

問題は、ソフトウェア(と人間の中身)は基本的に見えないものであるので、見えないものを見えるようにする努力をしないと以下のような問題が起きてしまう。

  • 順調そのものに見えたプロジェクトが突如、「実はこのままだと完了が半年遅れになる状況」だと判明する

  • 機能を盛りすぎた結果、スケジュールの後半に致命的なパフォーマンス問題が発生する

  • モチベーションがあると思っていた主要メンバーが、実はメンタルを病んでいて突然来なくなってしまう

「なんとなく品質良くなってきたな」とか「性能測ってないけど、まあ体感大丈夫だろ」というのはバイアスかかりまくった歪みの結果になってしまうので、ちゃんと計測できるようにしてバイアス取り除いていくことが大切。

また、よく陥りがちなバイアスも知っておきたいのも対策の一つかなと思う。

twitter.com

この中でも特に「ダチョウ効果」は、わざと見ないことにすることで問題なんて存在しなかったことにするバイアスで、人間は「見えないものを見えるように」とは逆のことも犯しうるから気をつけないといけないと思った。