💌

若きエンジニアへの手紙、あるいはただの自省録

2023/09/03に公開

ある人の退職エントリを読んで、心に浮かんだことや心に浮かばなかったことを、徒然なるままに書いていきたいと思う。

世の中には「品質より速度を優先することは常に悪だ」と主張する人がいる。

特に「今は大事な時期だからスピード優先で、コードの質は下げても構わない」という決断は誤りであることが多い。厳しい開発競争の中で、スピード優先でない瞬間など一度だってお目にかかったことがないからだ。実際、質とスピードはトレードオフではない。

だが、時には、品質より速度を取らなければならない瞬間が存在するのも事実だ。極端な話、明日会社が潰れるかもしれない状況では、品質などと言ってはいられない。

特に小さいスタートアップは、なんとか展示会に間に合わせて、なんとか良い反響を得て、なんとか次の資金調達につなげる...。そういうギリギリのところで生きている。

例え誤りであるとしても、彼らが「今は大事な時期だからスピード優先で、コードの質は下げても構わない」と言いたくはなるような状況にあるのは確かだろう。

だから、「品質より速度を」というのもあながち常に間違いというわけではない。短期的に、あくまで短期的にいえば、そうした決断も有効だといえる。

問題なのは、借金を踏み倒す人があまりにも多いことだ。「なんとか展示会までに間に合わせて...!」と頼まれたら、エンジニアは死力を尽くして間に合わせる。そんなとき、プロダクトオーナーとエンジニアは「でもこんな状況で開発は続けられないので、展示会が終わったらすぐ直しましょう...!」と取り決める。

しかし、この約束が往々にして裏切られる。「お金を貸して」と頼まれたのでせっかく貸してあげたのに一向に返す気配がない、これはそんな状況に似る。今度返す、今度返すといって、先延ばしにされ続ける。そうして、やがてマトモな開発さえ到底ままならない廃墟ができあがる。

こんな裏切り行為が横行している以上、「品質より速度を優先することは常に悪だ」という説の肩を持ちたくもなる。貸したお金がいつまでも返ってこないという苦い経験を味わったのだから、そう考えたくなる気持ちもわかる。

だが、エンジニアにだって責任はある。

リファクタリングの必要性やメリットを社内で正しく議論できているだろうか?
ビジネスサイドに理解してもらおうと、言語の限りを尽くしているだろうか?

時々、こういったことを胸に手を当てて考えてみると、自分の行いを慚愧するばかりだ。結局、コミニュケーション能力が一番大事、そんな気さえしてくる。

以前にも述べたが、自分は「糞コードを直そうとする者は、それがなぜ糞コードなのかをきちんと説明できる状態になくてはいけない」と考えている。これはエンジニアとして成長するためにも、また、一人で悩まないためにも重要な心構えだと思えてならない。

エンジニアは心を病みやすい。

エンジニアという職務が心を病みやすくさせるのか、心を病みやすい人がエンジニアという職務を選ぶのか、その因果関係は定かではないが、とにかく心を病むエンジニアが多い。

エンジニアとメンタルヘルスというテーマで考えるとき、はじめに自分の心に浮かぶのは「誤謬」という言葉だ。心を病む人というのは、得てして何らかの誤謬に嵌りこんで抜け出せなくなっているように感じる。

何らかの誤謬を抱いて、それが誤謬だと気づけないようなときに、取れる方途がないという無力感、もうどうしようもないという感覚に襲われる。経験上、そんなケースが少なくない。

して、誤謬とは一体何だろうか。

それは一般に「論証の過程に瑕疵があり、論証が妥当でないこと」とされる。例として、私の最もお気に入りの誤謬を紹介したい。『連続性の誤謬』と呼ばれる以下のようなものだ。

砂山から砂粒を一つ取り出しても、砂山のままである。 さらにもう一粒取り出しても砂山である。 したがって砂山からいくら砂粒を取り出しても砂山は砂山である。

これは明らかに誤りだ。現実には砂山から砂粒を取り出し続ければ、いつか砂山は砂山ではなくなる。少し考えればわかることだが、にも関わらず、我々はこのような誤謬を正しいと盲信していることがある。

さらに身近な例としては『例外の撲滅の誤謬』が挙げられる。これは、例外を無視した一般化を元に論を展開する過ちである。

例えば、モナリザは美しい絵画で、凱旋門は素晴らしい建造物だ。

モナリザの顔の横と縦の比率は1:1.618。また、凱旋門の地上からアーチの頂点までの高さを1としたとき、地上から凱旋門全体の天辺までの高さはこれも同じ1.618である。

爾して、1:1.618というバランスは黄金比とされ、美の法則として崇められている。女性誌を開けば、顔のバランスを黄金比に近づけるメイク術の特集が見られることだろう。

だが、こんなものはトンデモ科学であって、紛れもないアホ理論である。本物の科学には反証可能性というものがあって、どんな命題も例外がないか検証するまで真とは言い得ない。

つまり、たった二つの事象(この場合モナリザと凱旋門)が黄金比に合致していたからといって、他の幾多の黄金比に合致していない反証を無視してはならない。モネの睡蓮の池もモナリザに匹敵する美しい絵画だが、一体どこに黄金比があるというのだろうか。

そもそもアートとは、人によってそれを美しいと思ったり思わなかったりするから面白いのであって、黄金比のような強引な一般化・牽強付会は愚行、いや冒涜的とさえいえる。本物の美とは、アリストテレスの語ったように、それを見る人の目に宿る物なのだ。

話を戻そう。
エンジニアとメンタルヘルスの話だ。

どうも人が心を病む背景には、このような誤謬が存在する気がする。例えば、一つ二つばかり失敗を並べて、自分は駄目な人間だと結論する。そんなとき、失敗体験はモナリザと凱旋門のようなものであって、その裏には見過ごされた反証があるはずだ。

だが、塞ぎ込んでいるときに限ってそれが見えなくなる。困難を乗り越えた経験や自分の努力が功を奏したときのことは、脳内からすっぽり抜け落ちてしまう。ちょうど睡蓮の池が、黄金比の法則に合わないので切り捨てられてしまったときのように。

そのような憂鬱な気分の底には、『連続性の誤謬』が息を潜めていることもある。

砂山から砂粒を一つ取り出しても、砂山のままである。

一つ二つ砂粒を取り出しては、尚早に「いくらやっても無駄なんだ、砂山はけっきょく砂山なんだ」という結論を出してしまう。現実は八方塞がりでもなんでもないのだが、当の本人にとってはもはや道が残されていない心象だ。

これがどんなに勿体無いことか。もっと早く走れば、もっと遠くに手を伸ばせば、望むものを掴んでいたかもしれない。あるいは、やり方を変えたり工夫を凝らせば、目標に到達できたかもしれない。

だから、我々は理性の力を使って誤謬を回避すべきである。

誤謬を捨て去り、認知の歪みを修正することで症状の改善を図るという手法は、臨床の世界では「認知行動療法」と呼ばれる。すでに一定の治療効果が認められ、世界的に注目されている。アルバート・エリスやアーロン・ベックという名の精神科医が、この分野の先駆者であり権威でもある。

塞ぎ込んだときには調べてみるのも悪くない。

せっかくメンタルヘルスの話が出たので、もう少しだらだらと続けてみる。興味がない人は先を読み飛ばしてもらっても構わない。

先ほど誤謬の話をした。

しかし、心の調子が、必ず誤った認知や誤謬の問題に起因するかというと話はそんなに単純ではない。どんなに精神的に堅強な人でも、月300時間の残業をしていたらさすがに調子を崩すだろう。または、アルコールや薬物による生化学的反応だって、気分の落ち込みの要因になりうる。

いやそれ以前に、誰だって生きていたら一つや二つ、どうしようもなく落ち込むことだってあるものだ。だから、うつ病は心の風邪だなんて表現もある。しかし、この喩えが本当に適切かどうかは、少し疑問だ。

例えば、時々、肘を壊す野球選手がいる。彼に必要なのは、まずをもって、それ以上は肘を酷使しないことだ。しばらく療養の期間を経て、彼は再びグラウンドに上がることだろう。

だが、一度肘を壊したピッチャーが何度も肘を壊し続けることもある。たぶん、必要なのは単純な休息だけではない。彼は休むと同時に、肘を痛めないような、人体の構造に合った無理のないピッチングフォームを身につけなければならない。関節炎と風邪の対処は異なるのだ。

専門家でもないのにこんなことをいうのは気が咎めるが、同じことは心の問題にも当てはまるように思う。無理のないピッチングフォーム、バランスの取れた働き方...少し休んだら、それについて考えてみるのも悪くない。

蓋し、エンジニアは、エンジニアである前に一人の人間だ。

エンジニアであるという事実は、彼のアイデンティティの一部ではあるにしても、全体ではない。しかし、職業アイデンティティが自我の中心となりやすいのが日本人の心性である。我々は開発に熱を出すばかりに、時としてエンジニアではない自分を忘れてしまうのではあるまいか。

自己の概念が単一のものに立脚している状態、それは差し詰め、悪いピッチングフォームである。Person(人)という語彙がPersona(仮面)に由来するという説を引き合いに出すまでもなく、人はいくつもの仮面を使い分けながら生きている社会的存在だ。仮面というと嘘をつくみたいでなんだか聞こえは悪いが、この仮面こそ自我を守り、心理社会的同一性を保護する砦そのものだ。

近代実存主義の世界では「人は本質的に個人(in-divisual)であり、単なる集団の構成要素や人種の一員ではない」と云う。しかし、本当にそうなのだろうか。

家族の前でのペルソナ、友人の前でのペルソナ、職場でのペルソナ...
そうした集団を離れて、そのどれでもないどこかに別の場所に本当の自分がいるのだろうか。それとも、そのような仮面の総計が自己を形成しているのだろうか。

どちらの命題が形而上的に真かなど、この際、どうでもいい。いづれにしても、人の間と書いて人間と読む、この日本的な感性は、なかなか捨てたものではない。

いくつもの仮面が私たちの支えであり、そのどれもが他ならぬ自分自身だ。ある仮面が上手くいっていないとき、他の仮面が支えとなってその人を守るかもしれない。そんなことだってありうる。

無駄に長くなった。

要するに、エンジニアでない自分を大切にしてほしいし、エンジニアである自分だけに依らないでほしい。落ち込んだときというのは、新しい場所に、新しい仮面を探すチャンスかもしれない。自己の知られざる別の一面を発見しようと試みるのも悪くない。

エンジニアは、エンジニアである前に一人の人間なのだから、仮面が一つでは寂しすぎる。悩んだときは、どこか別の場所に、エンジニアでない自己を取り戻そう。

話は誤謬の話から議論の話に移る。

時々思うのだが、議論というものは実に楽しい。設計に関して語り合っていると、朝まで夜を明かせる気がする。こんなことをいうと聞こえは悪いのだろうが、私は根っからの議論好きだ。

殊に、それが本当に議論であるときには。

だが、エンジニアの世界には、まともに議論できる人というのはそんなに多くない。いや、何も、頭の良し悪しの話ではない。スタンスや姿勢の問題だ。

本来は生産的なものではずの議論も、相手を打ちまかそうとしている人との議論は不毛に終わってしまう。結論が先にありきで、自分の意見を押し通すことが目的となっていると、その会話にはまったく得るところがない。それでは議論というより、むしろ討論であり、児戯に類する言葉の殴り合いである。

では、議論を議論にするものは何か。それは学びの精神であり、自分の視野が限定的であることを前提に置いて何かを知ろうと欲することだ。

だが、そういっておきながら、これはなかなか難しい。当方、気づくと、相手の意見を碌に聞きもしないで一方的に弁舌する自分を発見する。誠に恥ずかしくなるばかりだ。

そこで、先ほどの誤謬の話にも通ずる主題だが、ベーコンのイドラ論をご存知だろうか。

イギリス経験論の祖として名高い哲学者、フランシス・ベーコンは、人間が錯誤に陥りやすい要因を分析し、錯誤をおかさないように理論を確立した。彼は自身のしたためた著書『ノヴム・オルガヌム』の中で、以下のような4つのイドラ(典型的な誤解や先入観)について語っている。

種族のイドラ
人間の感覚における錯覚や人間の本性にもとづく偏見のこと
洞窟のイドラ
個人の性癖、習慣、教育や狭い経験などによってものの見方がゆがめられること
市場のイドラ
社会生活や他者との交わりから生じ、言葉の不適当な使用によって引き起こされる偏見のこと
劇場のイドラ
思想家たちの思想や学説によって生じた誤り、ないし、権威や伝統を無批判に信じることから生じる偏見のこと

このうち、洞窟のイドラはエンジニアにとって特に馴染みのあるものだ。育ってきた環境や経験してきた職場によって、人の意見は多いに影響を受ける。

例えばの話、Rubyをずっと書いてきた人は静的型付けを悪だと思うかもしれない。反対に、Goをずっと書いてきた人間の中には、動的型付け言語をプログラミング言語とは認めない過激派もいる。

ここで言いたいのは「自分の意見を疑え!」ということではなく、むしろ、「すべての意見を疑え!」ということである。よくあるのが、チームリーダーやテックリードの意見を鵜呑みにしてしまうことだ。これが、いわば劇場のイドラであり、権威を過信する誤りだ。

いくら腕に覚えのある人でも時には間違うものだし、彼らの意見が正しいとも限らない。右に倣えで、首を縦に振り続けてばかりいると、いつかは壊滅的な設計上のミスを犯すことになる。そのままでは、設計スキルの向上も見込めない。アーキテクチャディシジョンの勘所も一向に掴めないままである。

だから、最初から意見の一致をみる、というのは基本的に良くない状態だ。意見は違っていて構わないし、違っていて然るべきだ。多様なものの考え方があるからこそ、言葉を交わして思考を深めていくことができる。反対意見によって議論はより深められ、より良い設計に昇華されていく...我々が日々行なっている設計の議論はそういう性質のものだ。

これがまさに『アジャイルリーダーシップ』の著者、ズザナ・ソチョワの「誰もが正しい、ただし部分的に」の精神である。彼女のいうように、"システムにはすべての声が必要"だ。そのために、正しいとか間違っているとかいう判断を保留して、まずは相手の話をよく聴き、よく観察することが大事だといえる。

この傾聴の姿勢が、相手の武装を解除する友好の握手にもなる。真摯に耳を傾けることは、自分は武器を持っていないと告げることになる。それはまた、言葉で相手を言い負かすつもりがなく、単純により良いアイデアを知ろうとして議論の場に立っていることを伝えるメッセージでもある。このメッセージこそ、建設的な議論を始めるための欠かせない土壌だ。

話をまとめると、議論の目的は人の意見に勝つことではなく、人の意見に学ぶことだ。このテーマについてさらに興味がある人は、『議論で負けが運命付けられている思考方法30パターン』という記事も面白い。

結局のところ、議論で誰かに勝とうするとき、その人は、他ならぬ自分自身の本能に己の理性が敗北しているのだ。本当に智を愛するものは、爭いを好む粗野で動物的な個我を、絶えず超克していかなければらない。

ここで、エンジニアの成長過程というものについて書き添えておきたい。

他のどんな技術もそうであるように、エンジニアのキャリアは最初、何も知らない状態からはじまる。ズブの素人で碌にコードも書けない。そんな右も左もわからぬ状態を何とかくぐり抜けて、ようやく何かわかったような気持ちになる。

エンジニア二年目にもなると、やたら自信がついてくる。自分を天才プログラマーだと自負する瞬間もやってくる(もちろん、錯覚だ!)。 振り返ると、自分にとっても二年目が一番有頂天になっていた時期だった。

だが、エンジニア界隈では常識であるように「完全に理解した」は「チョットデキル」に遠く及ばない。一つの方法で書くことができる。一つの方法で要件を満たすことができる。これではまだまだ全然素人で、未だ道半ばである。

そのうち、一つの要求を満たすために、数多くの方法があると気づくことになる。Aという方法もあるし、Bという方法もある。いかがしたものか。そうして、また、エンジニアリングがわからなくなる。

しかし、またしばらくすると、今度は無数の方法があるけども、筋の良いのは二つか三つだと悟るようになる。それらのメリデメはこうこうだから、今回のケースではプランAが良さそう、などと自分の意見が明快に述べられるようになってくる。そういう段階になって、ようやく一人前と呼ばれる。

...とかなんとか、半人前が偉そうにそんなことを考えている。

兎にも角にも、だから、二年目のエンジニアは難儀だ。彼はまだ若く、野心的で、己の能力を過信してもいる。

無論、野心がある、というのは決して悪いことではない。

人はその野心ゆえに刻苦を厭わず技術を磨いて、その野心ゆえに粉骨砕身して知識を培う。だから、たんまりお金を稼ぎたいとか、名高いエンジニアになりたいとか、それはそれで結構なことだ。だが、そうした個人の欲望に根差した目標には、いつかは限界が立ち現れてくる。

なぜなら、我欲だけでは人はついてこないし、誰かを本当に惹きつけることはできない。また、個の欲望の力だけでは、目標として脆く、矢は的に当たる前に勢いを失って地に堕ちてしまう。

反対に、何かもっと大きなもののために矢を射るとき、その矢は驚くほどに遠く、真っ直ぐに飛ぶ。矢に当たった、当たらなかったということさえ、さして気にならなくなる。肝心なのは、正しい姿勢で矢を放つことであり、命中したかどうかは関心事の中心にはない。

つまり、己の信ずるところのものに向かおうとする意志そのものが、彼に満足感を与え、己の評判をもはや気にならなくさせる。そういう境地に至って、ようやく本物の達人になれるのかもしれない。

ということで最後は、名著『達人プログラマー』から次の言葉を引用したい。

開発者としての我々の目標は、「ユーザーを喜ばせる」ことです。それこそが我々の存在理由なのです。

達人の心には、常にユーザーがいなければならない。そんな話をしたかったのだと思う。

段々と秋も深まって、緑の鮮やかさが失われていくこの時分、妙に信心深く、考え事に耽ってしまうこともある。寺社にお参りに行くとき、ふと思うのは、我々は何を祈るべきなのか、ということだ。

「今年一年、健康にいられますように」と願うのは、素朴で好ましく思う。
しかし、自分ではない身近な人の誰かの幸福を願う方がより美しい願いのような気もする。
より広い心を持った人間の祈りのようだ。

しかし、実際はどうだろうか。

どんなに健康を願ったところで急に亡くなったりもするわけだし、祈ったところで物事は何の理由もなしに我々を苛む。

レールのネジがすっかり錆びて、ちょうど抜け落ちるその日に、ある列車の車両に善良な母親が乗っていて、目の前で子供たちが轢かれるのを見なければならぬようなことになる。
大きな地震が起こったときには、何の罪もない人たちが地面に生き埋めになり、恐ろしい苦しみの中に死んでゆかねならぬようなことになる。

なぜ?
一体?
何のために?

人生には、そんなことばかりだ。
起こるべきでないことが起こる。
そうあるべきでないことが、いつもそうあるように見える。

しかし、「そうあるべき」というのも願望にすぎず、本当はただの「そうあってほしい」だけのことかもしれない。

17世紀、ピルグリム・ファーザーズが自由を求めて新たな大陸に旅たったその頃、彼らは「世界は丸いので、四角い人にはつまらない」という諺を残したらしい。

言い得て妙というか、けっこう面白い諺だ。

我々は「こうあるべき」という四角ばった考え方で、価値を判断し、あらゆる事象を杓子定規で捉えようするが、出来事は絶えずそれを裏切りながら起こり、そして、流れていく。

生まれた日と死ぬ時間、それさえ選べないのだから、願わくはその間にあるすべては自分の思う通りにさせてほしい。しかし、そうはいかぬ。世界は丸く、ルールも角もない。気まぐれな運命の掌に、ただ転がされているだけみたいだ。

そこにはきっと何の理由も意味もないのだろうが、しかしその意味のないところに意味を見つけようとすることが、何だかとても人間的で尊いことのようにも思える。『夜と霧』のヴィクトール・E・フランクルは、人間は人生の意味を問う側ではなく答える側だと語ったが、それにも似ている気がする。

良いも悪いも是として、今後の人生に繋げられるように、あれはあれで良かったと言える日がいつか来るように、物語を物語れる生き物になれるといいな、と。そんな想いだ。

つまり、Aという結果を期待して、Bという行為をするが、意のままにAという結果が返るのは、プログラミングの世界だけだ。現実はそうもいかぬ。Cという全然予想だにしなかった結果が返る。あるいは、Dという期待とは正反対の結果が待っていたりもする。

人生には副作用が多すぎる。

しかし、Aを願ったのに、CやDというこの気まぐれな運命もまた、それはそれで面白いではないかと、そんな人生のままならなささえ楽しめるような心の余裕を、あらゆる出来事をそのまま是として受け止められるような広い心を、持って生きてゆきたいものだ。
CやDがどんなにf**k youな出来事であっても、Aよりむしろ好ましい結果へと変えていこうと物語を編むところに、人間精神の美しさというか、涙ぐましいひたむきさが見てとれたりもする。

いやなんの話だったか・・・。

お参りに行ったときに正しい祈りは何か、という話だった。
蓋し、何も要求しないで、それがそのように起こったことに対してさもありなんと感じる心持ち...。

それが正しい祈りの所作なのかもしれない。

Discussion