$a_suenami)2014-12-27要求の複雑性とアーキテクチャの複雑性なんか朝ふと考えたこと特にまとまってない状態で書いてみる。したら今年最後のエントリになるかもしれないエントリがそれでいいのかっていう気がしなくもないけど。僕たちのようにソフトウェアをつくている人たちは本質的に複雑性に立ち向かうことが主な営みである。世の中というのは複雑であり、その複雑な世の中で問題とされていることを解決しようとするとその中でもとりわけ複雑な領域を取り扱わなければならない。なければそもそもソフトウェアなど必要ないことになる。人間がそれをやるにはワーキングメモリが少なすぎるとか、時間がかかりすぎるとか、原因は何かわからないけど何らかの理由によりちゃんと遂行できないものこそソフトウェアをつくって解決するべきなのだということになる。逆に言えば僕たちソフトウェア産業従事者が今も仕事を手に出来ていてちゃんとご飯が食べられているのは世の中が複雑であることの恩恵かもしれない。シンプルな世の中にはソフトウェアなんて必要ないという可能性は全然あって、そうであるとするならば僕たちがソフトウェアをつくるという上において「世の中の複雑性を受け入れる」というのはスタート地点であり、大前提であるような気がする。「その仕様は複雑すぎる。そんなことはできない。」とか「そんなものは必要ない。シンプルにするべきだ。」というのは局所的なシチュエーションで経済とか政治的な利害が絡む場合には重要な指摘であり必要な議論だと思うけど、もっと大局的に世の中を見つめたときに「世の中はもっとシンプルであるべきだ」と思ってるんだとするとそれだったら僕たちはどうしてここにいるんだっけ?ってなる。世の中は確かに複雑なんだけど、その問題を解決するためのソフトウェアもまた複雑な構造を持っていて、実はこれをすごく厳密に区別するのはなかなか難しい。これらをそれぞれ「要求の複雑性」と「アーキテクチャの複雑性」という風に呼ぶことにしてこのエントリのタイトルにした。オブジェクト指向設計が目指しているのは人間のメンタルモデルとアーキテクチャを近づけることによって設計を支援するとともに変更の影響を小さくしようとする行為である。インフラストラクチャを明確に区別するため、厳密に実践するとドメインモデルが要求をそのままあらわすようになる。この状態だと要求の複雑性とアーキテクチャの複雑性は決して混じらないし、要求の変更に対する耐性もある程度は保たれる。これはドメインエキスパートの存在とその人とドメインモデラーとの密なコミュニケーションを前提としていて、相応のコストが発生する。このコストを支払う価値がある領域はそれなりに限られてくるのではないかというのを正直最近は結構思う。*1僕が最近感じているのは「実は要求はだんだんシンプルになってきているのではないか」ということだ。ソフトウェアの利用用途として業務効率化やビジネス活動の支援が支配的であれば(かつてはそういう時代だったはず)そこにはある程度形式的な業務ルールと業務フローがあって、それは複雑なルールだったかもしれないけどそれを分析すれば仕様を決定することができた。現在ではエンターテイメント目的のソフトウェアも多く、ユーザはただひたすらコンテンツを消費したいだけだったり暇な時間をどうにかしたいだけだったりして、業務システムほど明確な目的意識やルールは存在しない。この場合、むしろ要求はとてもシンプルでそれを解決するアーキテクチャのほうが複雑になる。それは例えば検索アルゴリズムかもしれないし、レコメンドアルゴリズムかもしれないし、レスポンスタイムかもしれないし、ユーザビリティかもしれないけど、いずれにしてもユーザ自身が「仕様」と認識しているわけではない。ユーザ自身も自分がどういうシステムを欲しいかわかっていないのだ。あると思うのだが、今はすでに要求自体はシンプルなのだ。シンプルな要求に対してアーキテクチャだけが複雑化している。僕はソフトウェア開発とは世の中の複雑性に立ち向かうことだと思っていた。それが(一部の業界では)そうではなくなっていてむしろ複雑なアーキテクチャにどう立ち向かうかということが重要な問題になってきているのだとすると、なかなかこれは興味深い流れだと思うし、アーキテクチャを人間のメンタルモデルに近づけていこうとする動きの真逆をいく盛大な揺り戻しなのかと思ったりもする。思ったりして、今後もそのへんのトレンドは追いかけていきたいと思う次第である。考え方は大好きなので悪く言ってるつもりはないです。客観的に見たときのひとつの意見です。ついては言いたいことがたくさんあるので別途ブログ書く予定。日目...2016-08-28知っていてこだわらない、それがいいソフトウェアエンジニアの条件なんだと僕は思うんだ週末の午前中、カフェでアイスコーヒーを飲みながらふとポエム...2015-03-25そろそろドメイン駆動設計はもうちょっとだけ細分化されるべき昨日飲みながらドメイン駆動設計(以下、DDD)についてしゃべっ...2015-03-13ソフトウェアプロセスは人に依存するようになったこれを読んでなんとなく思ったことを書く。ソフトウェアプロセ...2015-01-01あけましておめでとうございますのポエム新年あけましておめでとうございます。見極め方Archiveスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。