見出し画像

「哲学×システム設計」で社会を説明してみる

「君は哲学的な考え方をするね」
哲学対話会を主催している知人にそう声を掛けられて、
1年くらい前から、週1で哲学について話す会に参加している。

これまでの人生で哲学に興味を持ったことは特になく、
哲学的な考え方って何だ??と思ったのだけど、
てんでばらばらの職種の人間が集まって、
真面目にアリストテレスやらソクラテスやらについて話す日もあれば、
誰かの悩み事に耳を傾けたり、近況をだべったりするゆるい会なので、
毎週、なんとなく部室に立ち寄るようなノリで参加を続けている。

ある時、そこで何かの話をしていた時に、
「あ、これ、プログラミングでのクラスや抽象化の概念と同じだ」
と思うことがあって、それについて話したら、
「へー!プログラミングって、哲学的なものなんだな。君が哲学的な物の考え方をするのは、だからか!」
と言われた。

そういうことだったの!?
と驚き、なんか楽しくなって、非プログラマな対話会メンバの面々に、プログラミングやシステム設計について色々説明しているうちに、
「プログラミングやシステム設計の観点で、社会について説明できるじゃないか!」
という発見を得たので、以下、それについての話。

システムアーキテクト設計という考え方

システム開発には、「アーキテクト設計」というシステムの土台や骨組みを設計する工程がある。
ここをきちんと設計することによって、将来的に変更に耐えやすい柔軟なシステムを開発することができる。

どうすれば良いアーキテクト設計になるか、の要点を抑えた「クリーンアーキテクチャ」という考え方がある。

この考え方は、下図のような円で表される。

画像1

円の中心にあるもの程、変更が難しく、
円の外側にあるもの程、変更が容易(あるいは、容易である必要)。
だから、円の中心にあるものを最初にきちんと設計することと、円の外側にあるものを変更がしやすいように設計することが大事。

たとえば、銀行システムを例に説明すると、中心のエンティティモデルにあたるのは口座や顧客の概念。

画像2

口座は口座番号がIDになるね、とか
顧客を一意に特定するのは何の情報だ?とか、
一人の顧客は複数の口座を持てるのかどうか、といったことを設計する。

その1つ外側のビジネスルールは、銀行システムがどういう風に使われるか、お金がどういう風に流れるか、という部分の設計。

画像3

たとえば、ユーザがATMシステム使って出金しようとすると、ATMシステムから基幹システムに残高問い合わせを行って、残高が足りていたら出金する流れだね、みたいな。

そして、さらにその外側の設計工程で、ビジネスルールを実現するために、具体的にどういうロジックにすればいいか等を設計する。

画像4

人の目に見える画面の設計は、一番外周の部分になる。

画像7

円の外側にあるもの程、実際に触ったり、運用したりすることによって変更要望が出てくるところなので、変更しやすいように設計しておくことが大切。
対して、中核にあるものは、「このシステムが扱っているのは何か」というシステムの定義を表すところなので、ここが後から変わると大変なことになる。

たとえば、もしも「顧客を一意に特定させる情報は氏名である」という定義にしてシステムを作りこんで、後から「同姓同名の顧客がいるぞ。どうするんだ!?」みたいなことになったら、システム全体の設計を見直す必要が出てきて大変なことになる。

哲学へのリンク

で、上述の円の中心部分のエンティティモデルの設計というのが、
概念のデザインであり、「哲学的だね」って言われたところ。

哲学って、「人とは何か?」「世界とは何か?」みたいな、物事の本質を追究する学問(たぶん)。

「口座とは何か?」「口座と顧客の関係とは何なのか?」
「氏名は顧客を特定する属性なのか?」
みたいなことをシステム設計する時に、いつも考えているのだけど、これが哲学的な考え方に繋がっていたという驚き。

哲学メンバに、システム設計について、もう少し詳しく説明をしてみた。

プログラミング手法の1つであるオブジェクト指向プログラミングでは、クラスというものを設計する。
このクラスというのが、概念を表すもので、クラスの名称や属性を設計する。そして、このクラスから実体が生成される。

画像6

たとえば、人クラスというものを作るとしたら、
その属性として、名前や年齢、性別を用意して…となるわけだ。
そして、名前は文字列で年齢は数字で、性別は男か女かで…という風に設計する。

そうして概念設計をしてから、ビジネスロジックを設計する。

画像7

性別によって処理を切り替えるシステムの場合には、
人クラスの入力情報が入ってきたら、男の場合は処理Aを行って、女の場合は処理Bを行って…、みたいなロジックが設計されるわけだ。

そういう風にして設計されたシステムが、現在の私たちを取り巻いている社会システムだ。
システムというのは、機械で作られたものに限定されない。アナログな手続きや、公衆トイレだって、広くは社会システムだ。

さて、ここで。

「人の性別って、男か女かだけじゃないよね?」
という問いかけがなされてきたのが、昨今だ。

「じゃあ、性別に男と女の他に、『その他』を加える?」
と変更を加えてみる。

画像8

その変更に合わせて、今度はビジネスロジックを見直す。
性別で切り分けていた処理のところに、新たな分岐が生まれるけど、
じゃあ、その他の場合は、どういう処理にすればいい??

画像9

そんなことを悩んでいるうちに、
「というか、そもそも性別を人の属性として扱うことは適切なのか??」
という問いも浮かんでくる。

画像10

でも、そしたら、現状のシステム全般どうすればいんだ!?

画像11

という風に、これまでの社会システムの中核を成していたエンティティモデルの見直しが迫られ、システム全体の見直しが迫られているのが現代なのだと、システム設計の観点から説明できる。

画像12

世界の見え方は概念デザインで変わる

「概念をどうデザインするかで、世界の見え方・捉え方、つまりは認知が変わってくるんだよね。プログラマーって概念をデザインする人なんだね」
社会心理学者である哲学仲間の一人が、私の話を聞いて、そう言った。

私は去年の夏に会社を辞めてフリーランスになって、
会社とは何か? お金とは何か? 自分の人生を満ち足りたものにするために、自分の人生の時間をどう使うか?
そういったことを模索している最中なのだけど、
哲学仲間のその言葉を聞いて、自分が何にモヤモヤしていて、どうしていきたいと考えているのか、自分の中で言語化できた。

アーキテクト設計の大好きな私には、
自分を取り巻く現在の社会システムが、つぎはぎだらけのレガシー化したシステムに見えていて、
だから、これを概念からきれいに再設計して、シンプルで綺麗な新しいシステムを構築して、そのシステムの上で生きていきたいんだな、と。

この記事が気に入ったらサポートをしてみませんか?