Yuichi Murata's Engineering Blog

グローバル・エンジニアリング・チームをつくる

ソフトウェアアーキテクトの本質 — 何がアーキテクトとシニアエンジニアを分けるのか

アーキテクトとシニアエンジニア

自分が初めてアーキテクトと仕事をしたのは新卒のときの新規プロジェクトだった。プロフェッショナルとしての初めてのソフトウェア開発プロジェクトだった。そのアーキテクトはとてもシニアで、それこそ自分の父親以上に年配だった。彼はまるで、すべてのコンピュータ科学の歴史を知り尽くしているかのようだった。加えて、オペレーティングシステムやネットワークがどの様に作用するかを把握し、あらゆるアプリケーションアーキテクチャとインテグレーションパターンに精通し、真新しいクラウドテクノロジーまでも理解していた。当時の自分はソフトウェア開発に対してあまりに無知であった。それ故に彼の知識にまさしく圧倒された。彼との経験は全く刺激的で、ありとあらゆることを学んだ。この経験からか、自分にとって「アーキテクト」とはなにか特殊な存在であるように感じるようになった。彼は今でもシニアエンジニアとしての自分のロールモデルである。

自分がソフトウェア開発業界で働いて早くも十年になろうとしている。今では「アーキテクト」と名乗る人に合う機会がとても増えた。会社から正規の肩書を与えられたものもいれば、正規の肩書はなくとも自信をアーキテクトとして名乗るものもいる。今日ではソフトウェア製品が指数関数的に複雑化しているから、アーキテクトの要求が増しているのは想像に難くない。だが、そうはいってもスキルレベルには大きくばらつきがあるように思う。中には傑出したスキルを持つ人もいる。それなりのスキルを有するが、他のシニアエンジニアと比べて同程度のスキルのものもいる。最近ソフトウェアアーキテクトの本質とは何なのだろうと考えるようになった。我々は彼らを「シニアエンジニア」ではなくて「アーキテクト」と呼ぶ。違う呼び方をするということは、これらに本質的な違いがあるということなのだろうか。そうだとするなら、その本質とは何なのだろうか。

アーキテクトの語源

アーキテクトの語源はギリシャ語である。Archi- は「主任の」という意味で、Techton は建築者という意味である。つまり元々アーキテクトの意味は「親方」である。多くのアーキテクトの JD が業界での勤務経験を含んでいる。テック系の会社では内部の評価制度で一定ランクをとったものにアーキテクトを名乗らせるものもある。これはこの語源に忠実な意味でアーキテクトを捉えていると考えられる。

f:id:yuichi1004:20201115210839j:plain
Photo by Clark Van Der Beken on Unsplash

「アーキテクト」という肩書は格別だ。この肩書はエンジニア個人の肩書としては格別な報酬となるだろう。だが、肩書は単なる報酬であるべきではないと考える。ラベルは強力だ。ラベリング効果という有名な現象が心理学にある。人々は一度特定のラベル付けをされると異なる振る舞いをするようになる。これがラベルの力であり、ひいては肩書のちからなのである。もし彼らが異なる肩書で呼ばれるのであれば、それには異なる役割と責任が伴うべきた。

建築業界からの比喩

アーキテクチャという言葉はそもそも建築業界から来ている。この比喩はアーキテクトの本質を紐解く一つの鍵となるだろう。古代ギリシャではアーキテクトは親方にすぎなかっただろう。だが、今日のアーキテクトの役割は随分と異なる。

今日ではアーキテクトは建設現場に毎日の様に出向いたりしない。彼らはどの様にやったら効率よくセメントを混ぜることができるか、そのコツを知る必要はないし、いい塩梅のトンカチと釘の使い方をしる必要もない。彼らは現場の職人を監督するわけではない。代わりに、彼らはより高次元の設計を幅広い知識を用いてこなす。彼らは建築資材を知り、構造力学や熱力学、都市計画や現地法、はたまた炭素排出に係る税率までを知り尽くす。

f:id:yuichi1004:20201115210835j:plain
Photo by Daniel McCullough on Unsplash

これはソフトウェアアーキテクトの本質を理解するにあたっても重要な示唆となるだろう。ソフトウェアアーキテクトは建築業界と同じく工事の設計に集中する。彼らはビジネスがどう成り立ち、顧客が何を求め、どの様に品質を保証するかをしり、プライバシーほうや PCI-DSS などのデータ保護ガイドラインに準拠するかを知る。彼らは個別のロジックではなくて、より工事の設計に集中するのだ。

辞書は友達

辞書はいつでも我々に知恵を授けてくれる。以下が Merriam Webster によるアーキテクチャの意味である。

Definition of architecture noun 1: the art or science of building 2 a: formation or construction resulting from or as if from a conscious act b: a unifying or coherent form or structure

アーキテクチャはただの科学ではない。アートでもあるのだ。これは2つのことを意味する。 まず初めに、アーキテクチャは美しくあるべきだということだ。近代の建築がいかに合理的で美しいのかは皆さんもご存知だろう。絵画や彫刻と違って、建築は意表を付いた表現に訴えることはできない。なにしろ物理的、金銭的、法律的な制約をうけるのだから、合理性に基づく美が求められる。これがアーキテクチャを科学とアートの組み合わせとする所以である。 2つ目に、アーキテクチャは実践と経験からもたらされるということだ。美しいアーキテクチャを作るために使える公式はない。アートは教科書から学ぶことはできない。美しくかつ合理的なアーキテクチャは過去の経験からしか学べないのだ。 これらはソフトウェア業界においても同じである。よいアーキテクチャは美しい。美しくてそして合理的である。良いアーキテクチャは技術的な変化やビジネスの要求が変わったとしても生き続ける。 定義 2 も興味深い。形や構造に注目している。ソフトウェアアーキテクチャも同じだ。全体を見通した構造とバランスは細部の作り込みよりも重要である。

ソフトウェアアーキテクトの本質

これが自分の結論である。ソフトウェアアーキテクトの本質は以下である。

  • ソフトウェアプロダクトを提供するためのすべての側面の知識を有する
  • アートと科学を駆使してソフトウェアに最高の構造を作り出す

自分のソフトウェアアーキテクトとしての旅路はより広い知識と経験を得るための厳しいものになりそうである。