増13.「プログラミングのメンタルモデル」についての一考察
●今回の発端
某スラッシュドットで前に「プログラマは誰もがなれるものではない?」という記事があり、「メンタルモデルを一貫して適用できる能力」が重要だとありました(本当はもっと原典がありますが、ぱっと見て分かる解説付きなので、こちらを参照しました)。
そこでは「実際のメンタルモデルとは何なのか」は書かれていませんでしたが、そのメンタルモデル(と思われる)の1例を思いつきましたので、披露致します。なお、メンタルモデルについては、筆者は複合的に絡み合った一筋縄ではいかないものだと考えています。なぜなら、「一筋縄でいく」ような簡単なものなら「銀の弾丸はない」などと難しく考えなくてもいいからです。しかし「銀の弾丸」うんぬんは正しそうに思えます。故に一筋縄ではいかないと思います(あくまで一考察です)。
●「慌てるな!」
自分が仕事をしていて、本番データの扱い(本番VSSのアナライズ)でうまくいかず、見かねたリーダーに「慌てるな!」と言われてしまいました。
本番運用で「慌てるな!」と言うのはまったく正当なことです。「すみません」と謝って、落ち着いて最初からやり直したのですが、その際、ひらめきました。
- (確かに本番運用や、機器設置・インストールなんかでは「慌てるな!」が正解なのは事実ですが)プログラミングは「慌てないとできない」のではないか?
です。
それは、(本番運用などではなく)プログラミングフェイズで筆者が「慌てるな!」と言われるたびに、妙な違和感を覚えたからです。自分としてはノリノリで普通に作業していただけです。別にアナライズのコマンドを(本番データベースに対して)何回も何回も試行錯誤で間違えていた(ようなフォールトがあった)わけではありません。
プログラマ職からリーダー職が分離されて少なくとも10年は経っていると思いますが、リーダーのありふれたアドバイスである「慌てるな!」で、逆にプログラマが育った試しはないと思います。それどころかデモリッションマンよろしく、新人がプログラマに育つのを1つ1つ着実につぶしている感さえあります。
彼ら新人がプログラムをできないのは「慌てて」いるからではなく、「慌てが足りない」からだとしたら、着実なプログラマ取り壊し効果も理解できます。外国人しかプログラムが作れなくなって、将来、そのレアスキルを買うお金がなくなった暁には困るように思います。(まじで思います)
●「慌てる」のおれおれ定義とその適用
久しぶりのおれおれ定義です。
「慌てる」とは
- 事の軽重を考えず、やみくもに(何かを)やること
とします。それほど違和感のある定義でもないと思います。
そうすると、何でプログラミングでは「慌てないとできない」のかの実態が見えてきます。プログラミングの世界の住人たるオブジェクトたちは、「別のエスニック」と言っていいほど、人間やほ乳類や鳥類などとかけ離れていると筆者は認識していますが、その違いの1つに、
- 1つ1つのオブジェクトは人間の価値観で軽重がない
ことが挙げられます。
キーAのみを軸とするオブジェクトも、キーAとキーBを軸とするオブジェクトも、プログラマにとっては等価です。どちらが価値が高く、どちらがより“有意義”かなどプログラマには考えようもありません(「プログラミングをきちんとする手段としてのテスト」というのに筆者が疑問を持っているのも、その理由です。価値観を持ち得ない立場の人間が、なんでテストを主導的に考えられるのか不思議でなりません)。
もちろん、少数の指導的価値観(『データを先に決めてロジックはその後、ロジック次第でデータを直すのはあり』とか、『入出力をおさえるのは大切』とか)はあると思いますが、少数だし、少しでもプログラミングにかかわった人間には一目瞭然です。
プログラマのプログラミング行為のフェイズで、事の軽重など分かりません。やみくもと思われるようにひたすらやっていくだけです。そこでプログラミングの手法のはやり廃りはあれ、どんな時代にもはやりがあり、はやりはなくならないのも、それだと思います。“やみくも”の中でも第一にまずやることの全体的了解があれば、間違いのない光明です。
●さらに考えるなら
さらに考えるなら、このプログラマの窮状は人間によって仕組まれた可能性があります。それは、
- プログラマ職からリーダー職が分離された際に、人間の価値観で軽重がある部分はプログラマの範疇でないとされた
ことです。これは事実だと思います。
プログラマは「慌てる」ことについて仕組まれている可能性があります。この難しさがあるため、プログラマは日本で衰退していっているのかもしれません。その中で他のエスニックと仲良くなり、思いを果たしていくには、「慌てる」ことを恐れないことが必要かもしれません(もちろんこれは、プログラマを志すならであって、みんなにプログラマをすすめているのではないことは、強い口調で併せて申し上げます)。
まぁ、今回はこんなところです。
●コラムのコメント欄の方針
コメントに対し、当意即妙の回答を、それなりのタイミングでする自信がありません。
ですので、このコラムで、
- わたしは基本的にコメントに答えない
- コメントを書く人は、回答がない前提で議論を進めていただく
とさせていただきます。
コメント
この文章の、『慌てる』ということは、『失敗を恐れずどんどんやる』ということと同意かと思いますが、どうでしょうか?私の理解が正しければ、まことに真を得ていると思います。失敗をおそれず、新しい技術に挑戦したが、結局失敗して、『無駄に終わってしまった』。挑戦していた期間を取り戻すために、必死で徹夜してプログラムして納期に間に合わせ。なんてことを、おそれず挑戦しろということでしょうか?挑戦したことは、その時は無駄だったでしょうが、そういうことを繰り返していると、後々で利いてきます。インフラ屋さんが何かの作業で慌ててしまって、失敗すると取戻しが聞かないですが、プログラマは慌てて失敗しても取り戻しが利きます。