デザインを仕事にしてきた方から紹介されて、集落の教え100を読み始めました。ソフトウェアエンジニアとして、ソフトウェア設計は建築や芸術に通ずるものがあるのではないかという考えに至っています。ゆっくりですが、そのメモを残していきたいと思います。まずは100のうちの1から3から。
1.あらゆる部分
「あらゆる部分を計画せよ。あらゆる部分をデザインせよ。偶然に出来ていそうなスタイル、なにげない風情、自然発生的な見かけも、計算しつくされたデザインの結果である。」
そうした諸部分を観察してゆくと、たまたまそうなってしまったかに伺える結果でも、次第に作った人の意図が見えてくるのかものなのだ。
私達が設計するにあたっては、もちろん全ての部分をデザインしきれるものではない。したがって、どのような部分に意味を付与するか、何を持って<意味ある部分>として設定するかが課題となる。
ソフトウェア設計も人がやっていることです。数学的にかつ論理的に辻褄が合い、構造的に美しいアウトプットを行うことをソフトウェアは可能にしますが、使うのも作るのも人である以上、人によるゆらぎと変化は避けられません。
そういう意味で、全てに対して完璧を目指すのではなく、「どの部分に意味を付与するか」のようなこと(例えばフレームワークのような)を常に明確に時には変えながらソフトウェア設計を行っていこうと思いました。
2.同じもの
「同じものはつくるな。同じものになろうとするものは、すべて変形せよ」
集落に現状している諸要素は、すべて基本形の<変形>であって、それぞれは類似していると同時に差異をも指摘できるという性質を持っている。
集落のもつ美学の特徴は、ひとるのカテゴリーのもとにつくられる部分の集合(たとえば住居の集合、換気塔の集合)は、要素間の類似と差異によって説明されるという点にある。集落が、どことなく一体性を保ちながら変化に豊んでいるのは、そうした諸部分の関係性によっている。
プログラミングにはDRY(Don't Repeat Yourself)原則がありますが、重複が無いようにという意味では似ています。プログラミングの視点でのDRYというのは、重複は無駄とかメンテナンス性が損なわれるという意味合いはもちろんありますが、この章を読んで、そのような側面だけでなく、全く同じ人間が2人ともいないように、人間の営み自体同じものは2つと無いのだから、人間が使うソフトウェアも同じものがあるのは不自然だ、とも解釈できると思いました。
3.場所
「場所に力がある。」
場所は、空間と同様に、さまざまに定義可能であり、その意味では便宜的に定義すればよい。場所を巧妙に定義することによって、想像力も豊かになるだろう。集落が教えるところは、場所をニュートラルに規定するのではなく、それに蓄えられた歴史の力、そこに潜在する自然力等々の力学的特性として把握せよという指示であって、アリストテレスが説明したように、空間を「容器」として捉える(運動をうながす原因としての性格)のことである。
システム開発には多くの制約があります。会社の文化であったり、お客さんの特性であったり。プログラミングのようなどちらかというと普遍的に近い要素に加え、その制約を「容器」として捉え、それに逆らうのではなく、存在する前提でシステムを作っていくのが必要だと思います。