いつも間違っている人への対処法

間違いを減らす方法を考えていて、ある程度以上はどうしようもないという役に立たない結論を得たのだったのだが、過激だったのか、意図せずアクセスが増えてしまった。単に苦労していますだけの内容を多く読まれても困るなと、一回取り下げて書き足しました。

間違いの減らし方を こちら に書きました。


仕事をしていると、必ず間違いを提出してくる人に出会ったことはないでしょうか?私は何度も悲しい思いをしており、そういう人にはもう仕事は頼めないと、非情ですが早々に判断するようにしています。

少なくともソフトウェア開発の世界では、正確さに大きな価値が置かれています。この業界だけでなく、一般的に、間違いは欠陥か事故であり、基本的に許されないものです。仕事は、紙の試験ではないため、百点満点が当たり前です。タクシーに乗ったら、事故せずに必ずつくことを期待する。手術で手が滑ることや、車を運転して信号を見間違えることは許されません。

個人の責任を問わないとしても、手術を任せると必ず手が滑るとわかっている不器用な人には、管理者の責任として手術をさせてはならない。ほとんどの仕事に免許は不要ですが、免許がないに等しい状態だったら、仕事は頼めない。

もちろんフィードバックはして、こちらも頑張る。わかりにくい例えなんですが、線形なフィードバックシステムを考えてみてください。人なんで当然間違いはあるんですが、通常の場合は自分で気づくなり、外からのフィードバックを受けて修正されます。しかし、フィードバックシステムには安定する条件というのがあって、系の特性値があるしきい値を超えると、フィードバックで軌道修正しきれず不安定になって、制御不能になります。

自動車免許の教習所に通っていて、路上で練習しているときに、危険な運転したら教習官がブレーキを踏んでくれたり、ハンドルの補助をしてくれたりします。運転が危険すぎて、教習官でも補助しきれず、このままでは危険だと判断したら、教習は取りやめると思うんですよ。同様に、レビューや作業指示の与え方で誤りが拾いきれない、このままだと許容不可能なリスクがあると判断したら、その人に仕事を頼むのは諦めざるを得ない。

フィードバックシステムを安定化させる方法はある。理論的にはフィードバックを強めたり、フィードバックの遅れを少なくすれば系の安定につながる。要するに、マイクロマネジメントをすればある程度制御はできる。しかし、マイクロマネジメントはやる側の方がしんどいし、限界がある。


ハンロンの剃刀の原則『無能で十分に説明できることに悪意を見出してはならない』を適用して、単に業務能力が欠けていると話を終わらせるのが簡単ですが、ときに悪意を持って手を抜いて仕事をしていると感じざるを得ないイライラがあり、精神的な負担が大きい。そして、悪意を持ってわざとではないにしても、間違いを生む原因や、なぜ精神的に負担が大きいのか気になったので、それを考えてみました。

間違いを生む原因の一つはマインドセットの問題です。仕事への取り組み方が適切でないことがよくあります。間違っているマインドセットを持っていることは、悪意があると言ってしまったほうがいいのでしょうか?

彼らは責任の範囲と考えている部分が期待より狭い。誤りはいけないものだと思っていない。レビューに持ってくるときに、「正しいかどうか調べてください、間違いを見つけてください」と考えている。

これが本当に困ることです。こちらも答えを持っているわけではない。答えが手元にあったら、わざわざ頼まない。間違い探しをしてくれといったスタンスの成果物のレビューするなら、最初から代わりにやってあげるのと変わりません。正しいか確認してくれじゃなくて、正しいものを持ってこいといつも思います。あるあるなんですが、彼らはレビューで指摘されたら、そこだけ直して他の同様の間違いを探したりしません。

再び教習所の例だと、教官が助けてくれることを前提に、無謀で雑な運転をする生徒はいると思います。

マインドの問題は、相手が叱責してあげるべき立場ならしんどくても頑張るが、そうでないなら誤った考えを持っていることの責任を取ってもらうしかない。

もう一つの理由として、知能の問題も考えられます。ここでは単純に知的な仕事をする能力の大小を議論しているだけなので、人間性や人格の程度の意図はないです。IQテストなどの結果をみたわけでないですが、常に誤る人は、パターン認識能力が怪しいと感じることがあります。つまり、見て分かるべきものが、分からない場合がある。極端な例ですが、A であるべきところが B と誤っていて、どこを見て B にしたのか聞いて出てきたものには A と書いてあるようなケースがよくあります。信号の色が見分けられない人が免許を取れないように、答えを得ていても、誤ったものと正しいものの区別がつかない人に、間違いのないことなど期待できません。

どうにもならないので、もどかしい気持ちになります。知識としては理解していても、人の知的能力に差があるのは認めにくいものです。話している人に対して、同程度の知能を期待してしまうのが普通です。バカだとか知能水準が低いなんて言ったら、ハラスメントでしかない。相手には知性を期待するように私たちは教育されてきた。どうしても、ちゃんと見てないだろうと判断してしまう。

教習所の教官なら、安全が関わることだし、慣れているので、無理そうなら無理そうだと、すぐに判断できる。しかし、致命的な欠陥があっても怪我する人はいないし、こちらも頑張ってみて、そして負担を感じる。何度も繰り返していると、早めに判断して決断できるようになってきてしまいました。悲しい話です。

ChatGPT とわたし

ChatGPT の登場には脳天を雷で撃たれたかのような衝撃が走りました。世間の多くの人が ChatGPT に驚いて興奮しているのは知っていますが、私も同じように感動を覚えています。技術的にや社会的に見て ChatGPT の何がすごいのかは、私が述べるまでもないですが、私にとって ChatGPT がどうすごいのかは、言語化したほうがいいと思ったので書きます。

AI が仕事を奪うとか、シンギュラリティだとか、言っている人もポジショントークで言っているだけで、本気で信じているとは思ってませんでした。例えば投資を集めるために、ストーリーとして面白いから語られていただけで、実際信じてないんだろうと冷ややかに見ていました。

しかし、ChatGPT を見せられると、冷ややかというか冷静ではいられません。産業的なインパクトは分かりましたが、それ以上に価値観が揺らぎます。私が大切だと信じて努力してきたものの価値が無に帰すのではないかと深刻に恐ろしく思っています。

今わざわざ考えていることを文字にしているのは、考えを言葉にまとめるという行為が、頭をスッキリ明快にさせるのに必要だからです。知性とは言語化能力だと思っていて、言語化能力を鍛えようと努力してきたつもりです。

でも ChatGPT だと――とここまで書いて続きを ChatGPT に書かせました。

でも ChatGPT だと、私がかけた時間と努力が無に帰されるかのように、短時間で驚くほど正確で鋭い文章を書き上げてしまいます。それはまるで、私たち人間が持っている知性や言語化能力が、AI によって簡単に超越されてしまったかのように感じるのです。

このような状況に直面して、私は自分の価値観や目標について見直すことを余儀なくされました。私たち人間が AI にはない、独自の価値を持っていると信じたいと思います。例えば、感情や共感、創造性など、これらの要素は、AI がまだ真似できない部分であり、私たちが磨くべき点だと考えます。

書かれてしまったとおり、ChatGPT のほうが人より優れた言語化能力を持つ以上、ことばにする力にもう価値はない。

昔チェスが知性の象徴と信じられていた時期がありました。IBM の Deep Blue の歴史的な意義は――この後も ChatGPT に書かせてみましょう。

チェスが人間の知性を測る指標としての価値を失ったことにあります。Deep Blue が当時の世界チャンピオンであるガリー・カスパロフに勝利したことで、チェスを解析できるだけの計算力を持つマシンが人間の知性を超越する可能性を示しました。

しかし、それは同時に、チェスに限定された知性の評価方法ではなく、人間の知性全体を測る新たな指標を見つける必要があることを示しています。AI の発展に伴い、私たちが従来重視してきた価値観や能力が変わることは避けられません。

言語化能力がAIによって上回られることで、私たち人間が他の領域で自分たちの価値を見出すことが求められます。例えば、対人関係や感情の理解、創造性、直感力、倫理観など、AIがまだ模倣できない能力に焦点を当てることが重要です。

何が困るのかといいますと、AIがまだ模倣できない能力としてあげられたものは得意ではない。この先の行き方を変えざるを得ない。そろそろキャリア的にも対人関係や倫理観を大事にしなければならない事情もある。

ChatGPT は流れるように文章を生成していくが、文脈を理解しているとしか思えない振る舞いをする。原理的には理解なんてしていないはずだが、しかし、私が理解と呼んでいるものは何なのだという議論になる。今後もう理解したなんて軽々しく言えない。

ChatGPT を知る前と知った後では、世界が変わって見える。私にはこんなに世界が変わって見えるのに、社会は単にすごいものが出たと騒いでいるだけで、特にまだ何も変わっていないのが不思議でならない。まだパラダイムシフトは起きていないようだが、これから起きる。起こさねばならぬ。

価値観が変わるような出会いは過去にも何度かあった。例えば、バラバシのネットワーク理論やビットコインなんかを知ったときは、本当にショックを受けた。当時は私なりに行動したけど、なんの成果も得られなかった。もっと大胆に挑戦すべきだったと後悔しています。

過去の衝撃とくらべても ChatGPT のインパクトは大きい。経験を積んで、すごいものがすごいと評価される文脈がわかるようになったからだろう。そしてもう今後また価値観が変わるような出会いはない気がする。これは恋。最後で最大の恋だ。

いろんな人が押し寄せて激しい競争なのは知っているが、何か行動しないと気が済まない。行動は人間にしかできない。

順問題と逆問題

「順問題」と「逆問題」という新しいことばを知りました。英語でいうと direct problem, inverse problem です。例えば、入出力系を考えたときに、入力から出力を求めるのが順問題で、出力から入力を推定したり、入力に対して求められる出力を実現する系を考えたりするのを逆問題と呼ぶそうです。算数の問題だけでなくて、広く「問題解決 problem-solving」といわれる一般的な問題にあてはめると、こうやったらどうなるかを求めるのが順問題、こうなるためにはどうするかを求めるのが逆問題です。

例えば下のようなのが例としてあげられるでしょうか。

  • 順問題 - 演算、構造計算、実験、検査、推論
  • 逆問題 - 設計、プログラミング、計画、証明、詰将棋

厳密に区別できるものではないです。順問題で、こうやったらどうなるかを求めるには、実際にやってみるというのが一つの良いやりかたですが、どうやったらやってみることができるかを段取りするのは、上の定義だと逆問題です。あるいは、逆問題が解けたことを確かめるときには、やってみることになり、それは順問題ですね。順問題の解決は逆問題を内包していますし、一方で逆問題の解決は順問題を内包していますから、互いに入れ子になっていて、一般的な問題ははっきりとこの2つに分けれないかもしれません。

しかし、問題を順問題と捉える逆問題と捉えるか、見え方が変わってくるから便利だと思いました。例えばソフトウェアテストなんかは、仕様どおりに動くことを確かめるという問題なら順問題ですけど、仕様どおりにならない条件を探すという問題なら逆問題と言えるでしょう。

一般には、順問題より逆問題の方が難しいです。逆問題を解くには、解を順問題としてとき直さないとならないので、同じ系に対してなら、順問題が解けないければ逆問題は解けません。

解決の困難さだけで問題の価値をはかろうとすると、順問題は手続きが多くて手間ががかかる方が優れているとなりがちですかね。あるいは、最新で高価な計測装置で測ってみたとか、大きな計算機で重たい計算をやってみたとか、最新技術のデモストレーションに向かったりしますかね。こういう仕事をするには、解決の手続き自体に興味が必要です。

逆問題は手続き的には解が求まらないので、その解決は探索的になります。逆関数が分かっていて、探索が要らないなら、それはもう順問題なんですかね。ちゃんと定義できないことばなので、このへんがあいまいになってしまいますね。

さて、われわれが逆問題を解くプロセスを考えると面白いです。当然ながら設計や計画では、うまくいくのが見つかるまで実行するなんてのはやりません。何度もできないから設計や計画をわれわれはやっています。そのため、設計や計画をするときは、解かずに解を求める必要があります。このときどうやっているかというと、経験や知識から、解こうとしている問題と似たような問題を探してきて、近似解を推定しているのでしょう。やり直しが許される場合でも、経験則から近似解が見つかると、試行の回数が少なくなるので、素早く解にたどり着きます。

解かずに近似解を見つけるのを、わたしたちは想像力とも言ったりします。外からは、何もないところから、解が出てくるように見えますので、想像力をもって逆問題を解く能力を人はクリエイティビティと呼びます。

論理的思考とはパターン認識である

語っていることの辻褄があっているとか、矛盾がないとか、整合性が取れている状態を論理的と言います。意思決定や問題を解きたいときなど、正しさに重きが置かれる場面では、論理的であることを求められます。論理的整合性が取れていないものは誤っている可能性が高く、根拠が弱かったり話の辻褄があっていない意見は、正しいことを求めるところではだいたい無視されるでしょう。ただし偉い人が言ったら別ですけど。

議論が論理的か非論理的かは、話を聞く人が判断しますが、われわれはどうやって話の筋が通っているかどうかを判断しているんでしょうか。現実にはもっと大雑把にやっていますけど、理想的な場面を仮定して、数学の証明のように推論規則を守っているかをひとつずつ確認しているとしましょう。ひとつの文が論理的に妥当化どうかって、わたしたちはどうやって判断していますかね。見たら分かるとしか答えようがないと思うんですよね。

例えば「Aであり、かつ A でない」がダメなのは、排中律によるものだとか言えなくはないものの、単にこの形に名前をつけて言い換えただけなので、特に何も説明していません。また、ダメな議論が「Aであり、かつ A でない」のパターンになっているのがなぜ分かるかというと見たら分かるとしか言えませんよね。

現実のもっと大雑把な議論では、これはどの推論規則の形式だとかも考えたりしないと思いますし、推論規則を1ステップずつ確認したりもしません。しかし、話の筋が通っているかどうかは見たらわかるし、私たちはそれで問題なく判断できているように思います。

この「見たらわかる」というのは、パターン認識能力ともいいます。論理的思考とは、その名前とは異なって、あの ReCaptcha の写真を選ぶのと同じように、単に辻褄があったのとそうでないのを正確に区別する単なるパターン認識の一つなのではないかなと思います。

将棋の手を深く読むように論理推論を深く進めることができる能力は、論理的思考能力の一部であっても、あまり重要でなさそうです。なぜなら、現実で議論していたら、深く議論を推し進める必要もないからです。数学の式変形のような演算であれば、何ステップ進めても確からしさは変わりませんが、現実の議論は論理ステップを進めていくごとに確からしさは失われます。風が吹けば桶屋が儲かるなんて推論は正しくありません。確からしさを保つには 1ステップか2ステップが限度でしょう。また、確からしさを保ったとしても、推論が長いと他の人がついていけません。納得感を出すのが論理の目的であって、ついていけない議論は納得感がなく、目的を達成できないのです。

ReCaptcha に素早く回答するように、辻褄のあっているものだけを選びとるパターン認識の能力が、論理的思考能力の正体なのではないかなと思います。

論理的思考が弱い状態では、車の写真が選べないように、整合性のある議論とそうでない議論が区別できません。正しい答案と比べて誤っている答案の方が無数にあるので、パターン認識能力が弱くて、論理的に正しいものとそうでないのが区別がつかないと、確実に誤ったことを言っているように見えるでしょう。

逆に論理思考能力が高いときは、考えなくても見たら分かる。外から見ると一瞬なので、すごく賢そうに見えるかもしれません。これは信号の色を見るようなものなので、これを賢いと呼ぶのかは分かりません。知性とはそういうものと考えるのが最近の主流なんですか?よくしりませんけど。

論理というのは、前提が同じだったら誰もが同じ結論を得ることができる、だから、論理で議論すれば意見が一致するんだ――みたいな話を聞くんですけど、パターン認識の問題だとこの話も変わってくるのかなと思います。私がパターン認識が必ず正しいという自信はないのですが、同じものを見ても違うように解釈する人はいるわけじゃないですか。人と話していて、話が通じないなと感じる原因はここにあるのではないかな。

数学だったら推論が正しいか間違っているかは、はっきり決まるのですが、困ったことに現実の議論はそこまで厳密さを求められていなくて、だいたい正しいで許されます。正しいと誤りの間にグレーゾーンがあって、どこまで白なら白と見なしていいかは、文脈によります。これが判断できるようになるには、経験が必要です。

人を見ると、年齢を重ねると明らかに論理的思考能力と人が呼ぶものが上がるように思います。これは、グレーのところも含めたパターン認識の精度が上がっているからではないかと思っています。白いものは瞬時に白と見抜け、グレーのところもどこまでが許されるか判断がつくようになるのでしょう。これは、一朝一夕では真似出来ない芸当ですね。

決める能力

会社でも役所でも国家でも人が集まるところには、人が集まること特有の事象というのが多くあります。その中でも特に「決める」ということは、一人で何かする場合にはありえない面倒な作業です。決裁とか承認とか呼ばれるものです。

決裁とか承認は、職務権限で誰が決裁するか決まっている場合もあれば、管轄としてどこが決定するか決まっている場合もあるかと思いますが、いずれにせよ、だいたいの仕事は決めるのは自分ではなくて、他の誰かに決めて貰わないといけません。自身の行動ですら、決めることを許されないのが組織にいてつらいところですね。

決裁権を持つ人、つまり、決める人が組織や仕事に与える影響は大きくて、何かするときには、この決める人が仕事のボトルネックになってしまうことが多いです。決まらなければ進まないし、誤ったことが決まってしまえば失敗します。決めるところにいる人の能力はよく見えますし、決める人の能力は影響が大きいです。だから、意思決定をする人には能力が高い人を置くことが一般的です。マネージャは平社員たちよりだいたい優秀ですし、経営者はマネージャたちよりだいたい優秀です。一方で、能力以上の権限をもってしまった人は、能力が足りていないことが分かるので、しんどそうにしていますね。例えば、何も決まらない会議を主催する人たちとか。

観察するに、決めるというのは単なる技能で、テクニカルなものに思えます。決めれなくてしんどそうな人は救えるし、ボトルネックの問題も解決できそうに見えるんですよね。

では、ここでいう「決める能力」というのは何なのかという話でして、ちょっと分解して考えてみようと思います。

意思の決定というぐらいだから、心の中で行われることです。心の中の動きを分解するのは難しいのですが、エイヤで「気持ち」と「思考」の2つに分けます。命名がよくないですが、2つは別のものを示しています。

気持ちの問題

大きいのは気持ちの問題です。決定には「責任」が伴うので、気持ち的に責任が持てない人は決められないですね。役職的に権限と責任があっても、気持ち的に責任を負えない人は決める能力がないと言えるでしょう。

ではどうやったら気持ちがつくかというと、慣れ、あるいは訓練によって気持ちはつちかわれます。リーダーシップと言ったらいいのか、俺の責任でやるんだ、みたいな気持ちは性格の問題ではなくて、経験から得るものなのだと思います。

例えば総理大臣は賛否両論ある中で重大な決断をしているかと思います。彼の判断が正しいのか間違っているのかはここでは議論しませんが、常人があの立場にたっても何かを決断することすら不可能でしょう。少なくとも私には無理で、何も決められないかと思います。なぜ常人にはできないような重大な決断が彼にできるかと言えば、高いレベルのことを決める能力を教育だったり経験によって会得しているからでしょう。

帝王学とでも呼べばいいでしょうか。一朝一夕で身につくものではないし、訓練と言っても外から与えられるものではなくて、内から芽生えたものを繰り返すことで習得するのだと思います。経営者や政治家のレベルは常人にはおそらくたどり着けません。

しかし、全員が、経営者や政治家になるわけではないので、帝王学のレベルは無用です。自分の役職の権限のことは自分の責任で決める程度ことは、身につけようと思えば誰でも身につく、ただの技能です。

当然ながら権限以上の責任はないのだから、責任の範囲なんて怖れるに足りない、大したことのないことです。十分にコントロールできることだということに、やってみて慣れていけばいい話な気がします。車の運転みたいなものです。やっているうちにいつの間にか責任が苦痛ではなくなってきて、自然と決定ができるようになります。

思考の問題

決めようという気持ちがないと決めれないので、気持ちは大事なのですが、いざ決めるときには、気持ちや余計な感情を排して、冷静に判断をしなければなりません。確からしい判断をするためは思考の能力が必要です。決めれらたところで、その判断が常に誤っているのでは、困ります。なるべく正しかろうことを決定しなければなりません。

決める能力がない人には2つの種類がいまして、正しかろう答えは知っているが気持ち的に責任が怖いから決めたくないという人と、正しかろう答えが分からなくて決められない人がいます。前者の人は、前述の気持ちの問題でして、事故が怖いから車を運転したくないみたいなものなので、何度か乗ってみて事故なんてめったに起こらないことを知れば、運転できるようになります。

しかし、後者は、道に出れば事故を起こす状態です。何が正しいか分からないから、判断も確実に誤っている。事故を起こすから運転したくないように、何が正しいのか分からないから、決定をしたくない。これは気持ちの問題ではありません。決めさせてはならないでしょう。

ほとんどの問題は妥当な答えはあります。判断を誤らずに妥当なものを選択できるのは、思い切りの良さとかリーダーシップではなくて、思考能力の問題です。まれにトロッコ問題のような『答えは沈黙』的な場面で決断を下すこともないわけではないですが、そんなのはほとんどありません。

論理的推論によって得られた答えを、感情を排して選ぶことができる能力は、一種の論理的思考でしょうか。これも訓練でどうとでもなるし、リーダーシップなんかよりはずっと簡単に習得できるものだと思われます。

何だったら、答えを出すのは自分でなくてもいい。専門家に意見を求めてその中で妥当そうなものを、決める人は判断をすればいいだけです。ただし、専門職で自らの領域にたいして、答えは出せないなんていうの許されません。それは決めれないとかいう話ではなくて、単なる専門職としての業務遂行能力の問題かと思います。まあ社会は素人ばかりなので大した罪ではありません。


まとめますと、決定する人は上の2つができなくてはなりません。

  1. 何が正しいのかを判断する。
  2. 正しいと判断したことを、自らの責任で決める。

何も難しくないですね。決める立場の人がこれをできるようになって、何も決まらない会議とかがなくなればいいと願います。

やる順で仕上がりは決まる

仕事の出来栄えは、どのような順番でサブタスクをこなしていくか、考えていくかで大きく変わってくるように思います。もちろん、やる順番が唯一の説明変数ではありませんが、安定した仕事ができる経験豊かな人と、そうでない未熟な人、この二者の間では、明らかに手をつけていく順に違いがあります。

一般的に経験の浅い人たちは、どうやるのか想像がつきやすくて、簡単に手をつけやすいところから始める傾向があります。そして、手をつけ始めたところに夢中になってしまい、考慮していないところに大きな落とし穴があることに気づきません。後々になって問題が明らかになって、手戻りをしたり、いびつな状態で無理やり終わらぜなるを得なくなったりします。この結果、仕上がりは悪くなるのはよくあることです。

例えば、経験のない人が、設計をしてみたら、全体的には穴だらけなのに、一部はやたらと細かくなります。決まって、どこまで細かくしていいか分からないと言いながら、細かいところの議論に終始してしまいます。そもそも画面に必要な機能がふわふわしているのに、画面の絵を描いて意匠の議論が始まるなどよくあることかと思います。そして、追加要件があったときに(もとより未だ定まってないのだから追加要件ではないんだけど)無理やり画面に新しい要素を納めることになって、結果ダサくなります。

手をつけやすいところから始めるのは、何かやっていないと不安なのでとにかく進めたいと思っているからでしょう。実のところ手をつけやすいところを進めていっても、それは何かやっているフリをしているだけなのですが、なかなかこれは自分では気づかないものです。

正しいやり方というか、安定したやり方というか、老練なやり方は、簡単に手をつけやすいところからではなくて、不確実性が大きいところから解決していくものです。怪しげでリスクが高いところから潰していって、不確実性をすばやく収束させていくようにシニアな人は仕事を進めていきます。リスクを先にもってきて、後は流すだけとするのがきれいな仕事の進め方です。

不確実性が大きいところとは、利害関係者があったりして合意を取らないとひっくり返ったりする可能性があることであるとか、法務的あるいは技術的などの実現可能性に不安があったり、外部が行うので制御ができないことで不確実性が大きかったりするようなところですね。不確実性を測るのはできないので、どれが怪しいかは不安という野生の勘で決めていきます。

普通のプロジェクトマネジメントのやり方だと思いますが、これを体得するには経験を要します。不確実性に対する勘を得るにも経験がいりますし、不確実なものに立ち向かってコントロールするのは自然な心の動きに反するからです。自然にやれば、手をつけやすいところから始めたくなるのが常なので、それに反することを覚えるには訓練がいるのかなと思います。

では、シニアな人々が指導できるかというと、これも難しくて、老練な人でさえもジュニアたちと同じ罠にハマってしまってしまいます。

まず、順序のおかしい仕事でもやっているように見えちゃうんですね。3歩すすんで3歩下がるような手戻りをしていても、やっている人は6歩分仕事した気になるし、仕事をしているように見えます。手をつけやすいところから、思いついたことを思いついた順にこなしていっても、なんとなく仕事をしている気がするし、そう見える。頑張っているといって、そういうやり方を褒めちゃったりするわけです。具体的なものを尚早に求める態度を、スピード感がある勘違いしたりする。おっさんはそういう若い人が好きですよね。

また、細かいレベルの話をされたら、つられて細かいレベルの話をしてしまうものです。細かいレベルでも辻褄があってなかったら、それは正したくなる。大枠が穴だらけでも気づかない。本当は相手に引きずられずに、全体から見ていかなければならない。しかし、視点をスコープアウトさせて、見るレベルを上げる思考は、認知負荷が高くてストレスです。話を聞きながら、頭の中で抽象度を切り替えるなんて芸当はなかなかできないと思います。

そして、全体として誤っていたら、細かいところを考えたものは、心を鬼にしてすべて捨てしまわなければなりません。ちょっとでも時間を費やしたので、愛着が出ちゃっているから自らそれを捨てるのは難しいです。だから正しい考え方の順序というのを覚えていくわけです。しかし、自分のでさえためらうのに、他の人に一度した仕事を捨てさせるのは非常なストレスです。

指導、つまりコーチングをするのも、プレーヤーとしての思考ができるようになったら、自然にはできるようになるものではなくて、それなりに訓練がいるのかなと思います。どうやったらそんな人が生まれるんでしょうね。まだ考えはないです。

しかし、全員が老練であることはありえないし、老練な人だけで仕事をし続けるわけにもいかないので、コーチングができる人がいないと組織は育たないよなと思ったりします。

Clean Architecture と上流工程

Clean Architecture』を読んでいて、これを実現するには上流工程の順番で開発をすればいいのではと思いました。

https://blog.cleancoder.com/uncle-bob/images/2012-08-13-the-clean-architecture/CleanArchitecture.jpg

Clean Architecture とは上の図で説明されるソフトウェアコンポーネントの設計思想です。フレームワーク・データベース・画面などを「細かい話」として脇に追いやって、業務を中心に据えているところが特徴です。業務のモデルを表す Enterprise Business Rules が中心にあって、業務アプリケーションがする仕事を Application Business Rules として記述し、Interface Adapters が業務アプリケーションと細かい話を結びつけます。そして、Clean Architecture は、コンポーネント群のビルドの依存関係も、外側から内側にと、アプリケーションが業務に依存するようにせよと言っています。

さて、この Clean Architecture を実現するためにはどうしたらよいのでしょう。コンポーネント図を Clean Architecture に従って描いて、Clean Architecture を維持するようにコントロールをするのでしょうか。そのやり方でもよいのですけど、おそらくほとんどの人は Clean Architecture をやろうとおもったら、中心にあるコンポーネント、業務のモデルから順に考えて開発を進めるということをするんじゃないかなと思います。先に作ったものは、後に作ったものに依存されるので、自然の Clean Architecture のコンポーネントの依存関係になります。

また、Clean Architecture は細かい話を後回しにしようという開発のアプローチの方法でもあります。設計スタイルではなくて、低レベルな話からボトムアップに決めていくのではなくて、業務すなわちシステムの目的といった高レベルな話から決めていきましょうというアプローチの方法を述べているのだと思います。そのため、開発の順番で Architecture をコントロールするのが自然なのではと思うわけです。

しかし、業務を中心に考えていくのは、普通の上流工程やりかたと同じではないかとも思うわけです。

  1. 要件定義をしようとしたら、すなわち、それらが満足されたら問題が解決するのだという一覧を作ろうとしたら、まずは問題を分析して問題を理解することを試みますよね。業務アプリケーションならば、ビジネスモデルはどうなっていて、どういう登場人物がいて、彼らは何をやりとりしているのかみたいなことを読み解くことからするんじゃないかな?

  2. 問題を理解したら、次は解決策を考えます。一般には新しく機能を作るのが開発での解決策になるかと思います。新しい機能で考慮しなければならない使い方や無視してもよい使い方を勘定して機能の要件を決めます。

  3. 次は DB のスキーマを決めたり、I/F の仕様を決めたりしますね。こららを世間では基本設計というのかな。

1, 2, 3 の結果を、それぞれコード化したのが、Enterprise Business Rules, Application Business Rules, Interface Adapters に対応するのではないのだろうか。つまり、上流工程の進め方と Clean Architecture に類似性が見られます。もしかしたら、要件定義から基本設計にオーバラップして、決まっているところから結果をコードに表現していくみたいなことができるかもしれません。ただし、手戻りもするだろうし、作るのに夢中になって、何を実現べきかを考えるのが疎かになりそう。

いずれにせよ、今回気づいたのは、開発の進め方と Architecture は関連するもので、開発の進め方に応じて Architecture を決めたらいいということです。