2017年9月23日土曜日

一石二鳥は諸悪の根源

飛行機の搭乗手続におけるオーバーブッキングのケースについての記事「なぜ全日空は定員オーバーで飛ぼうとしたのか?」で「一石二鳥は諸悪の根源」という設計工学の考えが紹介されていた。

設計工学の世界には「一石二鳥は諸悪の根源」と考える学派がある。一つの部品に複数の役目を負わせると、事故はそこから始まることが多いのだ。

……

ミスをなくすには、「一人二役」を分離することが望ましい。

これは設計工学特有の話としてではなくて、むしろ「設計工学でもそういう風に言われているんだ」と思った。

中学数学の1次方程式で、やり方は一応授業で習って理解できているのに、実際に問題を解く場面で計算ミスを多発してテストで失点する生徒というのは、移項(加減)と x の係数を 1 にする計算(乗除)を一緒くたにして暗算しようとするのが原因であるのが多い。こういう子供には、移項と x の係数を 1 にする計算は途中式を分けてそれぞれのステップできっちり書いてやるべきだと強調することになる。まさしく上の引用の通りだろう。

同じようなことは、プログラミングでの、メソッドの定義にも言えるだろう。一行のコードで魔法のように処理が済むコードを考えたくなるのは山々で、特に、Perl で正規表現などに懲るとそういう傾向が増進されるのだが、Java でシンプルなループを記述した方がメンテナンス性も良いコードになるものである。このあたりが、関数型とオブジェクト指向の違いだろう。関数型は一石多鳥を目指す指向と親和性が高く、オブジェクト指向は一人一役に分けていく指向と親和性が高い。

0 件のコメント:

コメントを投稿