仕事で、複雑なものと向き合うことが多い。複雑にしてるんじゃないかと思うくらい、複雑になっている。そこで、複雑性を一般化して、それに対して対処法を考えてみた。限定しないで書いてみる。複雑性と言っても、色んなパターンがある。規模が大きくなりすぎて、全体が把握できなくなっているのか、テキトーに作りすぎて、しっちゃかめっちゃかになっているのか、色々あると思う。考えるに、複雑性は六つの要素に分解できる。この六つの要素が絡み合って、複雑なものが生まれる。要素1〜3は中身の問題で、4〜6は外見の問題に中分類できるかもしれない。複雑性の本質は、やっぱり要素1〜3だと思う。要素4〜6は、ここに気をつけると複雑性を人間が理解しやすくなるというポイントになるのかな。各要素を簡単に説明する。情報量が多いと、当然複雑になる。人間の記憶力には限界がある。どんなに頭のいい人間でも、六法全書のすべてのページを暗記するようなことは出来ないだろう。ソフトウェアで言うと、単純にシステムの規模がデカいとか、ソースコードが長いとか、そういうのにあてはまる。情報量が多くても、パターン化されているのであれば、まだ処理しやすい。問題は、全く不規則な場合だ。「90店舗は24時間営業で、10店舗は田舎で夜中は客が来ないので、7時〜21時です」と説明されたら、2パターンしかないので、「100店舗の営業時間」という情報量としては多いものを頭に入れることが出来る。「パターンは20個あります。24時間営業はこの表1に載せた20店舗のみです。6時〜24時の営業が15店舗あります。この35店舗以外は、平日と休日で営業時間を変えています。パターン3は......」などと言う話だったら、到底頭に入れるのは不可能だ。運用保守しなければならない人々を辛い気持ちにさせる。曖昧なものが含まれていると、複雑化する。身近な例で言うと、コンビニでバイトのシフトを組むときに、バイトが時刻通り絶対に来て、また客の人数も波がなければ、何も悩むことはない。実際は遅刻や欠勤もあるし、急に客がたくさん来て、レジに並びだすかもしれない。新しく何か追加しようとした場合を考えるとよい。新しいものは複雑に見える。商品をパネルで選択して、買い物カゴの代わりに専用端末で受信するような仕組みになったら全国で大混乱が起こるだろう。経験の力というのは大きい。ソフトウェアでも、可能な限り、既存のコードを活かした方が、現場のためにはよい。新規性によって生まれた「例外」が、要素2の多種性につながる場合も多い。論理的でないものは、複雑に見える。論理的に整理されていないと、人間にとって理解しづらい。個人的な経験から言うと、非論理的な設計になっているときは、だいたい歴史的な経緯が絡んでる場合が多い気がする。「ああ、それ昔は1〜3番があったんだよ。廃止になって......」みたいな。感覚的でないものは、複雑に見える。大雑把な指示ではあるが、何となく理解できる。そこまで指示してくれないとわかりません」みたいな奴もいるけど、ちょっとめんどくさい。新たな商品と交換してくれ。その作業中にレジに二人以上の客が並んだ場合は、ヘルプでレジに入ってくれ」と指示を出したら、正確ではあるかもしれないが、全然理解できない指示になるだろう。わからないかというと、非感覚的だからだ。コンピューターも、GUIになってから、感覚的になった。論理的に考えたら、コマンド叩いて、アプリケーションを起動する処理と、デスクトップのアイコンをクリックして、アプリケーションを起動するのも、コンピューターから見たら同じ処理だし、デスクトップやウィンドウをデスクトップに表現する分、GUIの方がコンピューターの処理は増える。GUIが普及したのは、明らかにGUIの方が感覚的で、わかりやすかったからだ。複雑性への対処法さて、6つの要素にわけたところで、それぞれへ対処法を考えよう。情報量が多ければ、分割するしかない。「困難は分割せよ」というデカルトさんの教えに従おう。巨大なものも、最小単位に分割する。種類が多いときでも、パターン化で対応するしかない。法則を見つけて、グループ化しよう。可能であれば、パターン自体を減らせるとよい。曖昧性については、まずは調査することだ。来店客数を調査して、グラフにして見る。ブラックボックス化してるプログラムを調べ、理解する。完全に0には出来ないだろうけども、0に近づけることはできる。標準化を図って、なるべくパターンに落としこむこと。要素4〜6すべてに言えることだが、既に完成したものから、これらの要素を排除しようとした場合、作りなおす(リファクタリングする)しかない。5.非論理的より論理的に作りなおす。6.非感覚的より感覚的に作りなおす。まとめ書いてきたことをまとめると、以下の表のようになる。リファクタリング複雑性を排するために重要なことは、シンプルなものを作るためにも重要だ。実際に何か作ってみて、年月が経って、規模がデカくなってくると理想が貫けなくなる場合も多いのが現実なんだろうな、とも思う。Entry日本人の自己肯定感は、低い。(19)Searchはてなブログをはじめよう!st43さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。