プログラミングの難易度は変数の数がいちばん決めるって統計調査に十分ショックを受けた。コメントの行数なんて関係ないってのもまあ笑い話にはなるけど、やはり変数の数のこと。カッコの数とも比例するとのことだが(普通の最近の言語でなら)、ほぼこれは変数の数にも比例する。補足をするなら「作業スコープにおける取り扱いが必要な変数の数」なんだろう。
僕の個人的経験則からはこれは多いにうなずける。とりあえずはデータ統計としてのこの調査を受け入れるつもりで進める。これにもう二つのプログラミングについての関心事をからめてかくとなにか見つかりそうな気がする。「モチベーション」と、「バグの定義」の話の二つ。
プログラミングのような作業は、とくにほかの作業に比べて、「だるい」と強く感じてどうにも作業に手をつけられないときがあり、このことは広くプログラマーの中に一般的に知られている。僕はこのダルさの原因の90% までが、「僕たちの脳が、必要とされるすべての変数を脳内のワーキングメモリにロードできないこと」に由来すると思っている。ある人は「タスクリストに入れるときはタスクはやるきをまとっているが、3日いれて実際にそれをやる段になると、感情面だけがはげおちて、タスクとなってしまうのがだめ、といっているがね、僕はそれは主因ではないと思う。あるいは、感情が抜け落ちる前だけにすべての仕事が収まるのであれば仕事というのものは存在しないともいえる。僕の考えでは、ほぼほぼこの「変数」というのは脳のワーキングメモリ上に展開される仮想の「変数数」ににたもの、マッピングできるものだといえる。人間は、思い出すということ、自分からトリガーすることができない。想起はコントロールできず、あなたが「想起したい」と思うモチベーションも、想起してみないとわかないはず。ここに一つ重要に思える発見がある。とても重要っぽい。本当にこれが正しければ久しぶりにとてもすくなくとも僕にとってはクリティカルで、これだけで生涯で1億円チャリーンって感じの発見になる(金でいうのはそんなにいけませんか。)。つまり、モチベーションはワーキングメモリ等へのロードの状態等にも強く因果されるということが、「想起は想起されないとされない」という、アフォーダンス的というか、「環境利用」的なアイデアと併せて考えると、より強固な証明になってそうだってことだな。だから、逆にいえば、モチベーションっていう怪物を強く上手く取り扱うのに、脳への想起やワーキングメモリの客観的管理みたいな手法が強く効果を持つかもしれないと直感的予想。
「ゾーン」とか「フロー」とかっていって、やる気が起きてない状態とかと、「一度火がついた状態」とか、モチベーション的なものについて語るときに、僕たちがモチベーションという言葉で隠蔽している、環境利用不全的問題をみてとれる。学生時代から「眠っている人は自らの意志でおきることができない」というようなことで例示できる一般的問題について、環境というものの利用についての研究をしてきた。タイマーとアラームという超ツール的ツールをつかって、人がすでに原始的に問題の解決をはかっている。「環境を道具として利用する」という点で、超ツール的なツールであるということになる。
ということで、やはり道具立てとして、この問題は僕が取り組んできた、人間行動や問題解決に際しての、環境利用的な研究と実験から取り出してきてる多くの手法が利用できるってことだ。メインとなるのはリマインダーだし、そこからトリガーする仕組みだったり、「細かくくだく」という手法や「習慣化」の手法やそれをリマインダーと組み合わせてあげていく手法や、「脳の環境としての体」に影響を与えることでようやく脳にトリガーをしていけるという手法になっていく。基本的には別に難しいことでも魔法でもない。ひっぱたかれれば目を覚ますし、コーヒーを注射されれば頭はさえるし、栄養を閉ざされれば思考は止まる。被環境体として人間、というか特に自分をみることで、とても多くの問題解決、創造、日常の課題の、特にハードプロブレムとでもいうべきゾーンに入り込んでいける。
ということで、たとえばですね、運動をする。血流できる。刺激も起こる。脳が発火しやすくなり、また鎮火しやすくなる(活動しやすくなる)とかいったことで、脳のワーキングメモリは、(PCのアナロジーからの重要な違いでもあるが)小さくなったり大きくなったりする。最大要因は、睡眠、栄養(あるいは食事行為自体も含めた食事)、運動と、まあいくつかの刺激物質摂取とかかなと思う。これがワーキングメモリのキャパシティを消める。
ある作業がね、「だるい」とか「むずかしい」と感じるとして、それが本来はある今までやってきたその作業とくらべて、実はなにか「延長線上にあって、できるはず」なのにできなく感じるときには、おそらく、端的に、あなたの脳の変数格納できるワーキングメモリ空きスペースより扱わねばならない変数の量が多すぎる。あるいはまだそれを判断できるだけの変数がロードできていないが、空きスペースは足りていないので、いずれにせよロードするモチベーションもわかない。脳はどうもこれを敏感に察知してるのだろうか。まじか?
空きスペースなのだから、当然あるインプット等から、ワーキングメモリ、表象の付近?にある短期記憶の領域からの情報が絶えず犯す状態は、すなわち、スペースがすでに別のものからの割り込みで、減るということだ。最近「ピープルウェア」を読み直したけど、そこに書いてある、「ノーベル賞もんの銀の弾丸な話として、プログラミングの生産性をあげるもっともROIの高い方法は、割り込みの無く騒音の少ない広い作業スペースだ」という話と一致してくる。「顔の認識のために使われる人間の脳のリソースは普通の絵よりはるかに多い」といった認知科学上の情報からするに、コミュニケーションによる割り込みは大きな量のワーキングメモリをそこなう。たぶんこれはつなげすぎな例を一つくわえておくと、イーモバイルつなぐと公称8時間、実働6時間のあたらしい17インチのMacBookの電池が3時間足らずでなくなるくらい消費するのににてるねっ。そしてまたオーラルな形や顔や動画を伴った形で話しかけられたときと、メールでそっと話かけられたときでは、大きくリソース消費も違うだろう。
モチベーション ≒ ロードされたある作業スコープ内の変数量 / ある作業スコープの処理に必要な変数量とかになる。
ロード「されうる」作業スコープ内変数量は、脳のワークスペースの現在キャパシティ ー 利用済みワークスペースか、あるいは作業中にはいってくる割り込み(生理的なものとか無意識的なものも含む)の質量回数の合計値、になる。
このロード「されうる」と、「される」との間には、「空きスペース」に「最初の閾値としては、全部入れうるか」ということと、「空きがあるほど、情報はなんていうか、水位の落差が他方から一方への移動水圧となるように、これがいってみればモチベーションというか連想発火の誘因因子と物理的になってるのかも」といったこと(まあいつまで脳の発火をきちんとモニタリングする機材を用意しないで進める機だおれの人生ってことだし、35位までに大金もうけしたら豪邸や車の100倍は買いたいものの一つのMRTとかあるですけどね)があるやも。
そしてさらには、その、されうることとされることの間隙には、人は自分では想起できないという問題を解決するという転回というか、跳躍というかが必要になるなとね。
次に「バグ」と「発見」についてかいて、なにかにつなげていきたいところでドラフト送信してねる。
バグの語源。虫が不具合なのではなくて虫が入っていることが不具合である。見つけることの容易性。そしてグーグルの文字列一致の革命とこれによる圧倒的なる変数量の低下、またスコーピングの重要性がまた一つあがった。コーディング局面の作業者の脳が抱えられる変数量程度に問題を分割することができれば、複雑性の上昇を組み合わせ爆発しないようにするということににて、非常に安定的に開発行為にモチベーションを供給できるメタなワークスペースとしてのコードセットが作れるかもという話。
それと、モチベーションのためには変数等考慮しなくてはいけない、ロードしなくてはいけない情報を目に与えてあげる仕組み等や、「忘れないで中期記憶等から確実に必要な変数たちがロードされて、最速でそれ自体を忘れる(かつそれ自体の忘却はそれ自体の想起の局面においては「他を忘れる」という形で関与するので、このコントロールとのバランスという妙なる作業にはいっていって完成するだろうけど)という仕組みとで完成する。ここまでやれればモチベーションの問題はほとんど「朝おきてから30分は眠い」くらいのことになると思う。あなたはムラなく月160時間コーディングを、フローの中に過ごせるようになるかもしれない。っていうかこんなことできたら、世界変わるよね。フロー駆動とかいうこともあるけど、すごい技術者の人たちが、もっとも生産的に160時間ちゃんとプログラミングに生産できてたら、もう世界は変わると思いますよ僕は。だって彼らの9割は、仕事中の5割はネットサーフィンしてるもん。当然。天才だからいいんだけど、それでも彼らだって好きでやってないわけだし。この辺はジョエルさんの射撃しつつ前進のエントリーとかも参考にされたし。
あとは細かいtipsを出していく。
これは書き物だが実験しようと思う。