——エンジニアリングの成熟と、プロフェッショナルの二つの道
最近、Claude Certified Architect – Professional (CCAR-P)とGoogle CloudのProfessional Cloud Architect(PCA)の試験内容を並行して眺めていて、改めて感じたことがある。
システム開発というものは、大枠ではそれほど考え方が変わらない。
新しい技術が登場すれば、新しい課題も生まれる。AIを利用するシステムであれば、出力の不確実性やエージェントの権限制御など、従来とは異なる問題を扱わなければならない。
しかし、それに対するアプローチは、基本的には工学的なものである。
問題を分解し、制約条件を把握し、リスクを評価する。そして、検証や監視、権限の分離、障害時の対処といった手段を組み合わせる。
要するに、「解決のための手数」が増えているのである。
もちろん、新しい技術には固有の知識が必要だ。それでも、工学的な判断の基本が別物になるわけではない。
私はこのことを、30代の多くの時間を費やして、ようやく理解できるようになった。
技術的な設計が存在しなかった
最初から、こうした考え方ができたわけではない。
むしろ、最初はとにかくうまくいかなかった。
システム開発の現場でさまざまな問題に直面し、なぜうまくいかないのかを考え続けた。その結果、私がたどり着いたのは、そもそも技術的な設計が存在していないという問題だった。
個々の技術を知っていることと、システムを設計できることは違う。
技術を組み合わせればシステムは作れるかもしれない。しかし、なぜその構成を選択するのか、何を保証するのか、どのような条件で破綻するのかを説明できなければ、工学的な設計とは言い難い。
そこで私は設計を学び、実際の仕事に適用しようとした。
ところが、ここで別の問題に直面することになった。
技術的に正しくても、システムは成立しない
技術的に妥当な設計を考えられるようになると、それを実現するためには、技術とは別の条件が必要であることに気づく。
誰が意思決定するのか。
誰が責任を負うのか。
その責任を果たすための権限は与えられているのか。
技術的な問題が明らかになったとき、組織はそれを合理的に扱えるのか。
こうした「条件」が整っていなければ、どれほど妥当な技術設計であっても実現できない。
私が直面したのは、技術そのものの限界というより、人間や組織の判断の不合理さだった。
*
これは厄介な問題である。
なぜなら、人間と組織の問題は、一見するとエンジニアリングとは無関係に見えるからだ。
技術を学び、技術で問題を解決したいと考えてきた人間にとって、組織の意思決定や責任分担まで考えなければならないという現実は、必ずしも歓迎できるものではない。
そのため、技術的な問題の外側には踏み込まないという選択も生まれる。
ただし、ここには重要な違いがある。
技術の外側にある問題を認識した上で、自分の担当範囲を限定することと、そもそも問題の存在を考慮しないことは同じではない。
前者は、自らの専門性と責任範囲についての判断である。
後者は、技術的な解決策が現実に成立するための条件を見落とすことにつながりかねない。
だから私は、エンジニアとして成熟する上で、この違いを理解することが重要だと考えている。
現実のシステムは人間が作り、人間が運用する。
技術的な合理性だけでは、システムの成立を保証できない。
つまり、技術が現実の中で成立する条件まで考えることも、エンジニアリングの一部なのである。
プロフェッショナルの「二つの道」
では、そのことを理解したエンジニアは、すべて組織やマネジメントの問題まで引き受けるべきなのだろうか。
私は、そうは思わない。
技術が現実の中で成立する条件まで理解したエンジニアには、大きく分けて二つの道があると考えている。
一つは、技術だけでなく、組織や意思決定を含む全体の成立条件を扱う道である。
もう一つは、それらの成立条件を理解した上で、自分の専門領域を自覚的に限定する道である。
前者は、全体の構造を把握し、さまざまな専門性や制約条件を調整しながら、システムを成立させる役割を担う。
後者は、自分が担当する領域で高度な専門性を発揮しつつ、それが成立するために必要な条件を理解し、領域外の判断については適切な責任者に委ねる。
*
重要なのは、この二つが優劣の関係にあるわけではないということだ。
専門領域を限定するという選択は、必ずしも全体を理解できないことを意味しない。
むしろ、全体を理解しているからこそ、自分が責任を負うべき範囲と、他者に委ねるべき範囲を適切に判断できる。
自分が何を保証できるのか。
何については判断する権限がないのか。
どの問題について、誰の意思決定が必要なのか。
こうした境界を認識できることは、専門性の欠如ではなく、プロフェッショナルとしての成熟だと思う。
また、この二つの道は、管理職か技術職かという職位の違いとも必ずしも一致しない。
技術職であっても全体の設計に関与する人はいるし、管理職であっても判断を専門家に委ねる必要がある。
問われているのは肩書きではなく、自分が果たすべき役割をどこまで理解しているかである。
「全体を理解すること」と、「全体を引き受けること」は違う
私は、キャリアで技術専任という道を選んだ。
それは、技術の外側にある問題を理解できなかったからではない。むしろ、「それらの問題と向き合ってきた結果」である。
組織的な問題を発見できることと、その問題を解決する責任を負うことは違う。
技術的な解決策を提示できることと、それを実行するための権限を持つことも違う。
責任だけを引き受けても、必要な権限や意思決定の仕組みが存在しなければ、問題は解決できない。
それは個人の努力不足ではなく、構造の問題である。
エンジニアリングにおいて、制約条件を無視した設計が成立しないのと同じことだ。
もちろん、担当範囲を限定したからといって、領域外の問題に無関心でよいわけではない。
自分の仕事に影響する問題を発見したなら、それを明らかにし、適切な相手に伝える必要がある。しかし、その問題を解決するための権限も責任も持たない人間が、無制限に対応を引き受けることは合理的ではない。
問題を解決する能力の獲得と、その問題を引き受ける責任の選択は別である。
私は、この二つを切り分けられるようになったことを、自分のキャリアにおける重要な到達点だと考えている。
エンジニアリングの「考え方」は変わらない
新しい技術を学ぶたびに、私は以前よりも強く、エンジニアリングの「共通性」を感じるようになった。
クラウドのアーキテクチャ設計であっても、AIを組み込んだシステムの設計であっても、考えるべきことの本質は大きく変わらない。
もちろん、技術によって特有の問題は存在する。それらを理解するための専門知識も必要である。
しかし、工学的なアプローチとは、未知の問題に対しても、既知の原則を手掛かりに解決手段を考え、適用し、その妥当性を検証することではないだろうか。
そして、この考え方は技術だけでなく、キャリアの選択にも適用できる。
自分には何ができるのか。
どのような条件であれば、その能力を発揮できるのか。
何に責任を持つことができ、何には責任を持てないのか。
そうした問いを考え抜いた結果、私は技術者として専門性を発揮する道を選んだ。
*
かつては、うまくいかないシステムを前に、「うまくいかない理由」を探していた。
今は、システムを成立させるために「何が必要なのか」を考えられる。
そして、そのすべてを自分で引き受ける必要はないことも理解している。
全体を理解できることと、全体に責任を負うことは違う。
私にとって、プロフェッショナルであるとは、この違いを理解した上で、自分の責任を選択し、その範囲で確かな仕事をすることなのである。