プログラミングと勇気 (2/4)

このエントリーをはてなブックマークに追加

さて、「プログラミングと勇気」の第二回目です。
前説は第一回目で済んだので、勇気の十分条件について個別に検討していきたいと思います。
ちなみに今回は、一昨日の堀さんの記事とまったく正反対のことを言うので、気をつけてくださいね。






勇気を為すには、価値がなんであるか正しく知っていなければならない


価値。
価値の問題です。
なんだかいきなり一番面倒くさいものが来てしまったような気がします。

そしていかにもドラッガーなどのビジネス啓蒙書にも登場しそうな(というかしているであろう)フレーズですが、「老人と海」にからめてプログラマの勇気という問題に適用するとき、「価値」という語彙の解釈はまったく異なった様相になってしまいます。

もう一度くりかえしてみましょう。
価値とはなんでしょうか? ビジネス書であればきわめてプロテスタンティズム的価値観に由来する資本主義的な価値(そして日本ではそこに社会主義じみた共有の概念が入り交じってくるわけですが)、すなわち顧客の満足や社会への貢献、最高度の効率などがあげられるわけですが、さてそれはプログラミングにおける価値でしょうか。
もちろん違います。
あえて断言しますが、これらはすべてプログラミングにおける価値ではありません。

おそらく部分的に最高度の効率の追求というのが適用可能でしょうが、ビジネス(=資本主義)における効率とプログラミング(=コンピュータシステムの構築)における効率とはまったく異なった概念です。
貨幣というのはコンピュータ上のそれよりもはるかに古いシステムで、通常のコンピュータシステムと同様、やはり効率の最大化を目的にしていますが、基本的に信用というコンピュータには認識不能で脆弱な概念をその基盤に据えているため、しばしばコンピュータシステムと対立し、結果としてコンピュータシステムはできるだけ貨幣を捨象しようとします。

現在主流であるインターネットやオープンソースが何とかして貨幣抜きでやろうとするのは、コンピュータシステムにおいて貨幣というのは本質的に余分な要素である、という本質的認識があるためであるというのはおそらく否定しがたい事実でしょう。
ファイナンスというのは、システムとその構築者たちにとっていつでも頭の痛い(そしてできれば避けて通りたい)課題でありつづけています。
すなわち課金というのはプログラムの持続可能性にかんする問題なのではなく、わたくしたちプログラマの(生活の)持続可能性にかんする問題なのであって、これをシステムに埋め込むことはおうおうにして対象のプログラムに意図的にある限界(能力的なものではないそれ)を課すことであり、またそれがシステム的な要請からではないために、実装的にはひじょうに汚らしい例外として実装せざるをえないことひとつとっても察せられようというものです。

それゆえ、プログラミングと勇気というテーマで価値を議論する際にはビジネス書にあるような観念を価値に据えることはできません。
じつに悲しむべきことと言わねばなりませんが、そんなことはぜんぜん不可能なのです! わたくしたちがプログラマとしての職業上において勇気を示すためには、まずもってこの点を理解せねばなりません。
そして、大量に出まわるビジネス書がさかんに啓蒙する価値とは別のものをきちんと確立することが、この第一の要件「勇気を為すには、価値が何であるか正しく知っていなければならない」ということの第一歩なのであります。



さて、このような議論について、何を青くさいことを言っているんだ、というような感想をお持ちになられた方は多いことでしょう。
たしかにそのとおりですし、わたくし自身もそう思います。
ですがこれは「老人と海」の主要な(おそらく第一の)エッセンスに断乎としてのぼっているのであって、もしこれを外してしまえば最高度の勇気はとうてい覚束ないのであるというのは、(わたくしというよりは)ヘミングウェイが言っていることなのであります。
この点ひとつをとってみても、わたくしたちがプログラミングにおいて勇気を為すのがいかに困難であるかというのは明らかであろうというものです。
もちろん、漁師における勇気とプログラマにおける勇気が同一であるならば、の話ではありますが。



付言すれば、ファイナンスをプログラムそのもの、システムそのものから何とかして切り離しておく、というのはプログラミングの実践におけるひとつの理想であります。
この点をかなりうまくやっているのは、やはりオープンソースのはしりであり、今もってその最良の体現である Linux でしょう。
Linux (Unix) および、その直系の子孫であるインターネットはあいかわらず貨幣の概念を外部化することに成功しつづけています。
彼らはプログラムそのものとは独立にファイナンスしており(つまり彼ら自身は大学や企業からの雇用や研究開発費、寄付といった名目で間接的に貨幣を取得しているのです)、自身の経済上の問題をプログラム上に混ぜこまねばならないという事態をじつにうまく回避しています。
その手法はまったくほれぼれするような巧みさであるので、わたくしなどはじつに羨ましく思っていたりなどします。



また、「ソーシャル・ネットワーク」でザッカーバーグが facebook に広告を入れることに頑強に抵抗するのも、このような価値観からきています。
劇中の彼はそれを「クールでない」と表現するわけですが、この「クール」という言葉の内実は、このようなコンセプト、すなわちインターネットシステムに貨幣は余計な概念であるという発想からきています(当然のことながらビジュアル的な意味からも広告はクールではないのですが)。
あるいは firefox や chrome を入れてまずはじめに追加すべきプラグインのひとつに AdBlock があげられる、というのもこのような意味においてでしょう。



google のモデルもまたかなりうまいものですが、このへんの実践についてはわたくしのようなプログラマ的な観点というよりも、インターネットビジネスの基本的かつ本質的問題であるので、ここではコメントは差し控えたいと思います。
ただひとつだけいえば、最近の google が全体としてはあんまりクールと言える感じではないように見えるようになってきたというのは、個人的にはこのあたりのファイナンスの問題と関係がある話だろうなといったことは感じています。



さて、話がだいぶ逸れました。
それではプログラミングにおける価値とはいったいなんなのでしょうか。
わたくしに言わせれば、それは勇気を為すことだ、ということになります。
勇気を為すための価値とは何であるかを問うているのに、その応えが価値とは勇気を為すことだ、というのは同語反復でありたいへん卑怯なやり口であるのですが、わたくしとしてはやはりそれがいちばんしっくりくる回答なのであります。
さいわいにして、勇気とは何であるかについて、まだ十項目以上もの十分条件がありますので、ここでは「勇気を為すための価値とはすなわち勇気を為すことだ」という無内容な言明にとどめておき、プログラミングにおける価値とは、ビジネス上(すなわち資本主義上)のそれとは対立的なものであることをとりあえず確認し、話を先へ進めたいと思います。





勇気を為すには、その時点の最上の方法を知っていなければならない


これについてはわりと自明のことなのであって、あまり付け加えて言うべきことはないように思われます。
定性的にいえば、コンピュータシステムの世界というのはドッグイヤーであり、めまぐるしくその表層が変わるので(その一方で基本的な価値というのは驚くほど一貫して不変なのですが)、プログラミングの外部環境としてのトレンドやリソース、具体的にはハードウェアのスペックやネットワークの帯域、クラウドといったインフラ、それから有益なライブラリ、フレームワークの存在などですが、これらの状況によって最上の方法というのは、ほとんどつねにアップデートされていくので(ある先進的なアイデアが登場時期が早すぎるというだけの理由でまったく顧みられずに打ち棄てられてゆくさまをいったい何度眺めてきたことでしょうか!)、最上の方法というのは普遍的ではありえず、それゆえ、ある時点で為された勇気が最上のものであるには、最新の最上の方法が適用されているのでなければならない、といったことになります。

というのも、わたくしの今回の論旨に基づけば、プログラマというのは勇気を為すためにプログラムを書くのですが、プログラミングにおいてはこの勇気の成果(すなわち書かれたコードということですが)は永続的であり、それゆえ他の者はこの勇気の上に自らの次なる勇気を構築可能であるという性質があります。
つまり、プログラミングにける最上の方法というのは、前の最上の方法(すなわち勇気の結晶)の上に築かれるのであって、もしあることをもっともうまくやろうとするのであれば、おのずと最新の成果の上に為されることになるのが自然である、ということになります。

そして、その時点で何が最上かを正しく判定できること、というのは、前段の「価値がなんであるかを正しく知っていなければならない」ということのひとつの表出であります。
すなわち、価値を正しく知っていればこそ、最上の方法が何であるかもまた判定可能であるわけです。



つけ加えれば、その時点の最上の方法とは、かならずしもひとつではないということ、また、あなたの勇気の実践によって、あなたの採用した手法が最上のものに昇格することもある(というか、それが外部から観察した場合の唯一の勇気の証明であったりなどさえするわけです)ということも考慮されねばなりません。

facebook が最上の方法であったのは、facebook それ自体が最上の方法とはなんであるかを示したからだ、という問いの立て方は実際アクチュアルであることでしょう。



勇気を為すには、最上の方法を具体的に実践する能力と一定水準の準備がなければならない


これは一つ前の補足のようなものです。
最上の方法を知っていても、それを実際に為すことができなければ、あたりまえですが勇気を為すことはできません。
ほんとうにじつにあたりまえのことなのですが、これが一番むずかしい。

これについては定性的な理屈をいくらこねてみても詮ないことであり、日々の精進あるのみであります。



勇気を為すには、対象が十分に複雑で困難でなければならない


これもあたりまえのことなのですが、最上の方法について検討し、それが実践されるためには、対象は十分に面倒なものでなければなりません。
なぜなら、単純に、もしここで列挙されているような状況が勇気の実践においてあらわれるものであるならば、これらを満たすような行為をするにはそもそもそれなりのものが相手でなければ成り立たないということでもありますし、あるいは、それが困難でなければおそらくもうすでに誰かが解決してしまっているので、それは車輪の再発明ということであり、その時点の最上の方法が何であるかを知っていなければならないという条件に反することになるからということを言ってもよいでしょう。

たとえば、あるディレクトリにあるファイルの一覧をもっとも簡便に表示させる方法は、端末上で ls を打つことであり、C のコードを書いて(つまりシステムコールであるところの opendir を呼び出して、次いで readdir をしてファイルの一覧を読み込み、それを標準出力に書きだす、云々)コンパイルし、独自の ls の実装をすることではありません。
ある意味では技術的には後者のほうが高度ですが、このような方法を思いついて実践したとしても、これは勇気ではありません。
せいぜいのところ C のファイル操作の初級編といった程度です。
おそらく、それはあのたいへんよくできた(わたくしたちの叡智を結集した)プログラムであるところの ls の足元にも及ばないシロモノであることでしょう。

つまり、ls というのは、じつは勇気に価する何ものかであるのですが、ですがそれはもうすでにそこにあるので、もう一度それをするには及ばない、というわけです。
仕方がないので sl でも作ってみるとしましょうか、というのはあながち冗談ともいいきれない冗談であります。



勇気を為すには、対象がその勇気に価するものでなければならない


これは基本的に前の条件の言い換えでありますが、別の項目としてつけ加えたのは、ようするにいくら難しいプログラムであっても使いでがなければ、それは使いでのあるものよりも一段低いものになってしまうだろう、といったことであります。

また、これは前述の価値の判定にかかわってくる概念ですが、わたくし個人としてはこれについては付随的な条件であるとみなしています。
というのも、きわめて苦渋にみちた現実として、もっともよい実装がもっとも受け入れられるというわけではないという事態が、ソフトウェアの世界においてはかなりよく見られるということを思い起こさざるをえないからです。



つまり、実際にはこれは当の勇気に対する事後的な評価なのであって、事前に、あるいはまさにその勇気が為されている最中にこの点を判別するのは容易でないばかりか、本質的には不可能であるので、これを勇気を為すための条件のひとつとして組み入れるのはなかなか難しいところがあるのです。
ただ、もし勇気がある瞬間やある特定の時点の成果のことではなく、ある過程を指すのであるならば、その過程において当該の対象が勇気を為すに価する対象でありつづけるには、それがその時点の更新された最上の方法でなければならず、この更新された最上の方法という判定において、対象が勇気に価するかというのは判定可能であろうということは言えます。
つまり、その時点で最上の方法であることを自己確認するためには、ある程度の外部からの評価が必要であり、その意味で対象の選定は「それに価するもの」でなければならないというわけです。
そしてそれがどのようなものであるかといえば、ここに挙げられたような勇気の諸条件を満たしうる対象であるか、ということになります。
これも若干、自己撞着的な論理ですが、やはりそのようなものであろうと思います。



強引にザッカーバーグに引きつけていえば、彼が facebook でアクセス数やユーザ数を追求するのは、このような点についての実績に基づいた証明を必要としていたからだ、ということはいえるでしょう。
なぜなら、ソーシャルネットワークシステムにおいては、トラフィック量というのは主要な価値であり、この価値に奉仕するコードというのがよいコードである(たとえ汚らしいものであっても!)というのが彼らの価値観であるからです。



勇気を為すには、対象への無条件の畏敬がなければならない


Linux 系 WEB プログラマ(つまり LAMP 系ということになるのでしょうか)についていえばインターネットの実装およびコンピュータハードウェア、OS やプログラム言語、フレームワーク、システムコールライブラリ、さらにはノイマン型コンピュータとデジタル化、電気信号による通信といったコンセプトに対して、すなわち自身の仕事を可能にしてくれるあらゆるものに対して、無条件の畏敬を持っていなければなりません。
具体的には Linux カーネル、apache、libc、ファイルシステム、ネットワークデバイス、採用しているサーバサイド言語 (php, perl, ruby, python, etc) クライアントサイド言語 (javascript, html, css), RDB (MySQL, etc), IDE やエディタ (Eclipse, emacs, vim, etc), SCM (git, svn, etc) それからこれらの基板となるコンセプトたちであります。
これらのひとつひとつが勇気の成果であり、参照するに足る先人の成果なのであります。
そして、このような勇気の体系の上にひとつの勇気をさらに被せようとする自身の行為を正しく畏れなければなりません(なかには、どうしても尊敬にすることのできないクソも混じっているわけですが)。
それはプログラミングの実践にあたって、ある種の謙虚さをもたらすことでしょう。
すなわち、独善を避け、他者の業績(つまりいろんなすごい便利なもの)を受け入れるための手間を惜しまなくさせることでしょうし、その結果としてそれは自身が最上の方法で実践することを助けることになるでしょう。

また、前述の最上の方法の理屈と対立しますが、もし自身が最上の方法を採用できているのだとすれば、自身の技術的な基盤それ自体が最上であると信じられなければなりません。
最上の基盤においてはじめて勇気の実践は可能になるのであります。
この認識はひるがえって、自身がこれから為そうとする勇気の対象への畏敬となることでしょう。
なぜなら、自身のプログラミングの対象それ自体がこうした先達の仕事の延長線上にあることは避けられないのですから。



勇気を為すには、自身より前に勇気を為した者のあり様を詳しく知っていなければならない


これはここまでのお話しでくり返し述べてきたことでありますし、サンチャゴやザッカーバーグ、ジョブズを参照する意図というのは、ようするにこの目的があればこそなのであります。

偉大なサンチャゴは自身が偉大な勇気を示している最中に、ジョー・ディマジオの態度を参照していました。
ここで重要なことは、そのときの彼は自身もまたディマジオに比肩しうる何ごとかであると彼自身がみなしているところの巨大な魚を小舟で釣りあげる作業をしている最中であるということです。
すなわち、彼自身が今自身がそれを為していることを(すくなくとも、為そうとしていることを)知っており、まさにそれを為している途上で知らないうちにその途から離れてしまっていることを畏れて、各局面においてディマジオのやり口を思いだすのであります。
つまり、自身より前に勇気を為した者のあり様を詳しく知っているだけではだめで、その知識は実際に行使されなければならないのです。
実際、こうした勇気の実践についての知識というのは、それがもうひとつの勇気を為されるために用いられるのでなければ、たんなる嗜好の対象でしかありません。

ただ、これも前段で述べたことでありますが、この知識というのは、一種の象徴的記号として用いることしかできないもので、たとえばサンチャゴにとってのジョー・ディマジオが彼の勇気の実践にあたって寄与するところがあったのは、それ以前にサンチャゴが十分にジョー・ディマジオについて、その勇気の実践にあたってどのように振舞ったかということについて実用可能なまでに消化し、自身のものとしていたからこそ、ジョー・ディマジオという記号は、あの場にあって十分に内容の豊かなフレーズとして機能したのです。
つまりこれも結局のところ、最上の方法についての知識のひとつの要素であるというわけです。

そしてくりかえしになりますが、わたくしたちが「老人と海」を読んだり、「ソーシャル・ネットワーク」を観に行ったりするのは、このような目的のためなのです。
もしそれがたんなる嗜好の消費の一形態でないとするならば、それは自身が勇気を為しているはずのときに、それが実際にそのとおりであるということをまさにそのときに知るための学なのであります。

さて、ザッカーバーグ君はどうだったのでしょうか? 
「ソーシャル・ネットワーク」はひじょうに複雑な作品でいくつかの主題を同時に取り扱っているわけですが、そのひとつとしてそれはザッカーバーグのビルドゥングスロマンでもあるので、この先人という概念の取り扱いはまさに構成上の重要な要素であるといえるでしょう。
すなわち、はじめはたんに純粋なナードでギーグでクラッカーな学生にすぎないザッカーバーグ君は猛烈な速度で成長し、物語が終わるころには「ゴッド・ファーザー」のマイケル・コルレオーネばりのある種の諦観、すなわちあの選ばれたものにしか許されていない帝王の孤独に到達しています。
そして、その過程ではこのような成り上がり者によくある先人および仲間を乗り越えて勝ち残るという描写が為されるわけですが、この乗り越えられてしまう者たちの中にはかつて彼が勇気を為す際に参照していた者(Napster のショーン・パーカー)も含まれているのです。
そして、彼はその報酬である帝王の孤独を得るというわけなのですが、この参照先の廃棄と孤独の結びつきについては今回の主旨ではないので割愛するとしましょう。
そうではなく勇気とその参照という点において重要なのは、ザッカーバーグの参照したのが、まだ現役の、せいぜいのところひとつふたつまえの世代の同業者であった点と、最終的にザッカーバーグはパーカーが参照先として不適切であると見なすようになるという点です。
彼は直感を重視する人間なので、一目見てパーカーを信頼するわけなのですが、このことが意味するのは、この選任というのは十分な検討のもとに行われたのではなく、また英雄譚ではなく実在の人物であったために、時が経つにつれて彼の勇気の参照先の像としては不十分なものになってしまったということが言えるでしょう。
これに対して、サンチャゴのジョー・ディマジオはすでに偉大さの確立された、つまり実際に偉大で勇気のある男であることが間違いない男であり、また間接参照であったためにその像の有用性は最後まで崩れることがなく、サンチャゴを助け続けたのでありました。



勇気を為すには、それに没入できる環境が整っていなければならない


前段でも述べましたように、プログラミングにおける勇気というのは再利用可能な先人の勇気の結晶のうえにひとつ層を重ねることであります。
このことが端的に明らかにするように、プログラミングの勇気の実践にあたっては環境のセットアップが欠かせません。
それは最先端の開発環境ということでもありますし、また住環境や人間関係、あなたに協力してくれる者たちのコミュニティをも含んだ環境全体ということでもあります。
それからソフトウェアの歴史においては、速度とタイミングということが本質的であるので、めまぐるしく移り変わる「もっともよいもの」をきちんとトレースできる状態というのも重要でしょう。

ですが、そうはいってもこれらは付随する要素に留まります。
もっとも重要なのは対象に専心することができるか否かということです。
なぜなら、もしそれがほんとうに勇気の対象として適切であるならば、それは車輪の再発明ではないので、外には参照すべき情報はないはずなのです。
この外に参照すべき情報がないというのは、インターネットの普及した現在においては、対象が勇気の対象として適切であるかを計るもっとも有効かつ具体的な指標であるといえます。
現在では github などに集積されている膨大なコードアーカイブを漁ってみて、どこにもこれから自分の書こうとしているコードが見つからないとき、そこには二つの可能性があります。
すなわちあなた以外の誰もそのコードを必要としていないか、あるいはそれが勇気の対象として適切であり、あなたがそれを為す権利を有しているかです。
いや、もうひとつあります。
すなわち、その勇気はどこかで現在進行中であって、一刻もはやくやらなければ、あなたの勇気の実現の可能性は絶たれてしまうという事態です。
いずれにせよプログラミングにおける勇気には速度とタイミングは本質的です。
そしてタイミングはともかく、速度を出すには何よりもまず専心せねばなりません。できるかぎり短い期間のうちにできるかぎり多くの燃料を投下し、燃焼してはじめて最速ということの可能性が生じるのです。
個々人の可能な最大速度というのは、自ずから限りがあります。
その実際においてはほぼ純粋な頭脳労働であるプログラミングにおいては、寝ずに作業しつづければ最大の速度が可能になるというわけでもありません。
必要なのはむしろ、可能なかぎりの雑音の除去と高いレベルの明晰さの維持と注意の集中の持続であり、プログラミングの実践者である人間が生体装置である以上、これらの実現には環境的な整備が欠かせないことは、プログラミングに関する多くの実践作法書が強調するところであります。
すなわち、十分な休息、十分な長さを持った単位作業時間、静かな環境、最大限の効率を可能にするリソース、過度な圧力や不安の除去、過剰な無関係な情報の流入の排除、等々。
実際に必要なものはあまり多くはないのですが、これらを質の良い状態で調達するというのは、実際問題としてかなり恵まれた状況であるといえることでしょう。

そして、これらの環境が十分であったかどうかというのを判断するのは容易なことではありません。
このことが勇気の失敗者たちの敗戦の弁において環境要因を挙げることを容易にしています。
曰く、「能力が足りなかったのではなく、状況がそれを許さなかった」曰く、「我々の製品を理解し、受け入れるには市場はまだあまりに未成熟だった」曰く、「着眼点はよかったが十分なリソースを調達できず、他者に先を越された」これらはおそらく部分的には真実であることでしょうし、実際にその部分がクリティカルであることもあるでしょう。
困難なのはこれらの敗因の存在を、ことを起こすその前に確実に知ることで、結果論的な無神経さをもって言えば、まさにそれが困難であるからこそ、この点もまた勇気の実践の主要な条件のひとつとしてここに挙げられることになるというわけです。

「ソーシャル・ネットワーク」において、ザッカーバーグ君がシリコンバレーに拠点を移すのを決断する理由のひとつがまさにこのためでありました。
すなわち、ボストンには旧態依然のビジネスモデルの実践しかなかったのですが、シリコンバレーであれば静かでゆったりした安価な賃貸オフィスにぶっといネットワークの専用線が引かれてきているわけだし、そのすぐ近くにはリソースの豊かなデータセンターもあるわけです。
それにボストンでビジネスを立ち上げていたとしたら、最短距離をたどって自身の目指すところの facebook の実現を達成するためには余計な作業でしかない、そして真面目でまっとうな商売人の卵である彼の最初期のパートナーがやったような、煩わしくて複雑な商慣行を学習し、地元のその分野のギルドへの参加儀礼などの一連のセレモニーをこなしていかなければならなかったことでしょうが、シリコンバレーではそんなことはありません。
シリコンバレーの元老の連中(つまり、シリコンバレーをシリコンバレーたらしめた者たち)も、新顔がわざわざ挨拶にくるなんてことをした日には「わしらに挨拶をしている暇があったらその時間で自分のモノをリリースすることだな、若造」と言うことでしょうし、それどころか有望な新顔にはむしろ彼らの方から群がってきて、なんやかんや理屈をつけては嬉しそうに自分の金をつっこもうとさえするのです。

「老人と海」のサンチャゴの場合は事情は多少異なっています。
彼の勇気の対象は、プログラミングの場合とちがって、まさにブルーオーシャンの状態です。
目の前には巨大な大洋があり、ひとりの人間の為すことはたとえそれが勇気であったとしても十分に小さく、大洋それ自体には何の影響も及ぼすことがないので、彼は勇気の実践を焦る必要はありません。
むしろ勇気の機会を辛抱強く待たねばならないのです。
その機会は確実に存在するのですが、目を凝らして見張りつづけていなければ見逃してしまうような小さな徴候でしかなかったり、特殊な技法を用いなければそもそもアクセスできなかったりします。
ですから、彼のような漁師の勇気にとって重要な環境面の条件というのは、それに専心できるかということや十分な時間を確保できるかといった作業状態にかんするものであるというよりは、その機会にアクセスするための資格といった色彩がつよいものになります。
この点はプログラミングにおける勇気と漁師における勇気とでは著しく異なった様相であるといえるでしょう。

ちなみにサンチャゴの場合はどうだったかと言いますと、食うために小物を採ることをやめて飢えに苦しみ、周囲の揶揄に耐えながら、己の勘を信じて待ちつづけるというじつに苛烈な方式でありました。


第三回に続きます。
次の記事
« Prev Post
前の記事
Next Post »
Related Posts Plugin for WordPress, Blogger...