プログラミングという名の地獄

プログラミングという名の地獄 1

2014年6月28日の記事を再掲載しています

「よ~Bro、おまえはラクでいいなあ。俺なんか週4700時間労働でモルドール(LORの闇の国)にねじ回し1本でトンネル掘ってきたとこだぜ~」

ラップトップより重いもの週2回以上持ち上げる肉体労働に就いた友だちはみなこう言って羨ましがる。

言ってることは正しい。モルドールは嫌だ。そりゃキーボード指で叩くよりトンネル掘る方が肉体的には辛いよね、蟻ん子じゃないんだから。でもそれ言うなら自分だってストレス、狂った現場って意味じゃ決して負けてないと思うのだ。

ウェルカム・トゥ・プログラミング。

プログラミング・チームはどこもクレイジーな人々がつくったクレイジーな人々の集まりである

プログラミングという名の地獄 2

エンジニア・チームに入る自分を想像してみて欲しい。期待に胸膨らませて、頭にはアイディアが次から次へと湧いてくる新人君だ。たぶん大学も出たばかりで、世界はクリーンで美しいデザインで成り立ってると思ってる。目的、経済、力、すべてが見事な一体感を成す世界だ。

そんな新人君の君をまず出迎えてくれたのはMaryという、大都市橋建設プロジェクトのリーダーだ。Maryの紹介でFredに会いにいくんだが、そこに行くまでにセキュリティチェックを15回通らなきゃならない。これをインストールしたのはDaveだ。Daveは机から一度セーター盗まれて「ネバーアゲイン」とか言ってこんな厳重にしてしまった。

Fredは木造しか扱わないという。ラッシュアワーに人間が死ぬほど通って60mたわんでも、その下を走る急行にぶつからない丈夫な橋つくんなきゃならない事業にどうして木造の人がいるのかな? 不思議に思って尋ねてみると、Maryが「ああ、気にしないで」という。「Fredは歩道の担当なのよ」。歩道って? 「Fredは歩道すごく得意だから、それも橋の目玉に加えるの」

もちろん歩道は手すり抜きで作らなきゃならない。なぜならチームにはPhilという人間がいて、「手すりは絶対ダメだ」という自分ルールの徹底を生き甲斐にしてるからだ。因みにこのPhil、エンジニアでもなんでもない。Philの担当がなんなのかは誰も知らない。たぶんシナジーとかなんかそういうので会社の上の経営陣が回してきたんだろうけど、上の人間と関わり合いたい人間なんてエンジニアにはひとりもいないから、みなPhilの好きなようにさせている。

Saraは「出血エッジ舗装技法」なるものを数種発見した人物で、それをせんぶ橋の設計に採用してやると張り切ってる。つまり橋ができ上がっていくに従い、新人君はそのひとつひとつに合わせてコード書かなきゃならないということだ。「ひとつひとつ」というのは、サポートも安全面の問題も技法ごとに違うからね。

TomとHarryは何年も一緒に働いてきた仲間だが、目下、メートル法か帝国単位(ヤード・ポンド法)かで双方一歩も引かないバトル状態だ。「どっちでも設計の◯◯の部分まで先に到達したやつの勝ちだ」というワケのわからない争いになっている。

これで困ってるのがネジ1本1本締める現場の人たちだ。ふたりの意見聞いてたら日が暮れるので諦めて、みんな金槌なり溶接でその日の仕事をガンガンこなして凌いでいた。

ところで橋は吊り構造なのだが、吊り橋なんて作り方知ってる人間はひとりもいなかったのだという。しょうがないので半分まで作って、余分に支柱を追加して、橋はなんとか倒れないようにしたのだが、サスペンションケーブルはそのままにしておいた。なぜならそれで吊られてる部分もあったから。具体的に橋のどの部分が吊られてるのかは誰もわからないが、重要な部分であることには全員やけに自信があった。

全員に自己紹介が終わったところで「なんか新しいアイディア出してね」と言われたが、なんにも思い浮かばない。よく考えてみたら自分は推進が専門の技術者であって、橋のことなんてなんにも知らないんだった。

みんなはこんな橋、渡る? まさかね。まぐれで完成しても関係者全員死刑だろうって思うよね。でもここに書いたようなことは、銀行のソフトウェア、ウェブサイト、ユビキタスに使われてるネットの情報保護プログラム(保護してないことが後でわかった)などなど、毎日使ってるどのプログラムでも多かれ少なかれある話なのだ。

コードはどれも欠陥品

プログラマーはみな、家に誰もいないとき、そっと灯りを消して、スコッチをグラスに注ぎ、軽めのドイツのエレクトロニカなんぞ流して、おもむろにコンピュータからファイルを取り出すものだ。ファイルはプログラマーによって違う。自分で書いたファイルのこともあるし、どこかで見かけて骨髄反応で保存してしまったファイルのことも。1行1行読んで、その美しさにむせび泣き、そしてやがて感動の涙は苦い涙へと変わるのだ。他のファイルのことを思い、真・善・美がなすすべなく崩壊するこの世界のことを思って。

こういう時に取り出すファイルがいわゆる「グッド・コード」だ。それは賢明で矛盾のない機能と変数。グッド・コードは簡潔明瞭だ。バカはやらない。外界に出ることもなければ、営業部の質問に答える必要もない。たったひとつの、ありふれた、タスクを、やる。ただしその面では文句のつけようがない。グッド・コードはひとりの手によって書かれ、他の何びとも指一本触れていない。それは喩えて言うなら、30越えた誰かが書いた詩のようなものだ。

プログラマーもみな最初は、こういう小さな完璧な雪の結晶を書いていた。

ところが金曜になって突然、こう言われるのだ。「火曜までに雪の結晶600個書いとけ」。しょうがないのであっちでズルして、こっちでズルして、他人様の雪の結晶を何個かコピーして、なんとかひとつにまとめようとがんばる。そうでもしないと同僚に頼まなきゃならないからね。同僚に頼んだら最後、自分の雪の結晶なんてすぐ解けてしまう。全プログラマーの雪の結晶が一緒くたに合体して謎の物体となり、そのうち陽が高くなってドロドロに解けてネコが小便かけにくるんだが、そんなの誰も見たくないから誰かがそっとピカソの絵を前にかけて家に帰る。で、次の週は全員シャベルもって雪をぶっかけるのさ。そうでもしないとピカソの絵が倒れてしまうから。

「そういう問題は標準を守れば解決できる」というご高説もあるが、この「標準」が曲者だ。コンピュータが処理できる数より多くの「標準」があって、標準ごとに作成者の個人的趣味で銘々勝手に改善・改悪を重ねている。出る頃には標準とは名ばかりで、どれも似ても似つかない方法で何十通りかの変更を加えた後のコードのコレクションだったりするからね。

あらゆる言語、フレームワーク、標準に精通した人でも、なんか仕事が割り振られるたびに最初の数週間はただプログラムの仕組みを解読する作業にとられてしまう。というぐらい標準はユニコーン(絵空事)なのだ。

足元には常に闇がある

僕が子どもの頃、部屋には小さなクローゼットがあった。変なデザインのクローゼットで、最初は何の変哲もなかったんだけど、中に入って着替えてたら、右の壁の奥に小部屋があることに気づいた。棚にちょうどいい空間。で、上を見たら、小部屋の壁がまた開いた。中には…なんにもない。灯りを掲げても闇があるだけで、底がどこかもわからない。まるで妖怪の棲家だ。

プログラミングはあのクローゼットのようなもんだなって今思う。道具の使い方を学んで、周りを見回すと、近くに新しい道具がある。「おおっ」と思って手に取ると、そこには底なしのホラーが横たわっているのだ。ベッドのすぐ脇に。

例えば自分が並みのウェブ開発者Xだとしよう。プログラミング言語は何十通りか習熟した。便利なライブラリも標準もプロトコルも沢山知ってる。それでも週1のスピードで、もっともっと多くのことを学び、既に習った何百という知識と照合しながら、変更点・不具合の有無を確かめないといけない。週末酔っ払ってハックした時に使った脆弱性は誰もまだ塞いでないようだし、しめしめ全部完璧だ…と思ったその瞬間、すべてがガラガラ音を立てて崩れ始める。

ワザファッ!? さっそく問題探しスタート。

よくよく調べてみたら、ある日どっかのマヌケAが、「1/0は無限だ」と言ってるマヌケBの言葉を真に受けて、コード書く時に1/0を「無限」の略語として使っていた。マヌケじゃないCは「これはマヌケだ(笑)」と一発で見抜いたが、Aが気づいてないことを幸いにディック野郎(嫌な奴)の本領を発揮、そのまま自分の新しいコンパイラで使ってエラーが出るように仕向けたのであった。しかもCはエラーのことは誰にも言わなかった。なぜならCはディックの中のディックだから。こうしてA、B、Cの尻拭いでXの麗しい雪の結晶はドロドロの小便と化す。もうネコも見つからない。

でもそこはさすがその道のエキスパートだ。問題探しにそんなに時間はかからない。たったの6時間で問題の所在を探り当てる。なんとか首もつながった。こうして何百何万という小さな知識の丸暗記で割れそうなXの頭に、また新たな知識が加わる。「この自分が首をかけてるプログラムの多くはディックとマヌケが書いている」という知識だ。

これはまだ自分で選んだ分野でのことだからいい。コンピュータサイエンスは覚えても覚えても、まだ覚えなきゃならないことが山とある。「こんなことなら最初から何も覚えないでいた方がよかった」と泣きが入るぐらい多いのだ。現存する人間で、その5年落ちのMacBookの仕組みを全部知ってる人間なんてただのひとりもいないだろう。

サポートに問い合わせると必ず「いったん切ってから電源入れてください」って言われるけど、どうしてだか知ってる? 何が問題なのか僕らには全くわかんないからさ。コンピュータはほんのちょっとしたことで意識不明になる。そういうときは内蔵の自動問題診断に任せた方がいいんだ。

「そんなこと言ったってコード書く人のパソコンは普通の人より調子いいんじゃない?」と思われるかもしれない。それは単に「パソコンは自動免疫機能が備わったスキゾ小僧である」という事の本質をよく知ってるので、調子悪くなっても無闇矢鱈と叩かないっていう、たったそれだけの差だ。

インターネットはいじり過ぎて、もはやそれ自体が地獄絵

クレイジーな人々とバッド・コードと言えば、インターネットはその10億倍最悪だ。サイトはショッピングカートとダイナミックページが3つあるだけでもう運用チームは24時間無休である。なぜならインターネットではあらゆる人のあらゆるものがいつでもところ構わず壊れるからだ。

今この瞬間にもFacebookの誰かのところには何万件ものエラーメッセージが届いてる。山が崩れる前になんとかしなきゃって血眼になって問題を探してるだろう。Googleではどっかのチームが全員3徹で働いてるはずだ。この世界のどこかで必ず、マウンテンデューの空き缶に埋まって夫に「奥さん死んだかも」と思われてるデータベースプログラマーが、いる。こういう人たちが手を止めたら世界は一瞬にして火だるまだ。システムアドミの仕事なんて誰も知らないと思うけど、これだけは断言できる。世界中のシスアドが全員同時に昼ご飯食べにいったら食堂着く前に、化け物から缶詰守ってる弾が底を突いてしまうだろう。

インターネットは再起動できないからね。

しかも恐るべきことに何百兆円という莫大な金がこのオンボロ蜘蛛の巣に頼ってる。正式でもなんでもない契約と「今はとりあえず間に合う」コードで成り立ってるこのガタガタの蜘蛛の巣に。「TODO: FIX THIS IT'S A REALLY DANGEROUS HACK BUT I DON'T KNOW WHAT'S WRONG(やるべきこと:この危険極まりないハックを直せ。原因は全くわからんが)」なんていうコマンドが申し送りされる、このヨレヨレの蜘蛛の巣に。

このインターネットではスパイ、金銭的利益、退屈減らし…あらゆる目的のハッカーが無数にいてあらゆる場所を攻撃している。4chanって知ってる? あの板に「こいつが気に食わない」って思われるだけで会社も個人も人生台無しだけど、まあ、ネット全体がもう核の冬みたいなもんだから、今さら核爆弾1個の心配しても始まらない、というぐらいひどい状況なのだ。

ネットではこういう言い方が通用する。「正しい技術を使えば、これで動くっぽい時もある」。なんだよそれは! って思うけど、案外これで通用してしまうのがネットだ。

何万円かあれば誰でもネットで遊んでハックコードは好きなように出せる。1個1個は無害でも塵も積もれば山で、全体が徐々に沈んでいく。標準化、標準化ってことで誰かが団体つくって仕様を打ち出しても、仕様そのものが古くて、グッド・コード書く人ですら最初から学ぼうとしない。そうしてふと気づいた時には全員、「なにひとつマッチしない。なにひとつ理屈で説明がつかない。いつ何が壊れてもおかしくない」現実と折り合いをつけるのに勤務時間の半分は持っていかれる世界になっていた。こうなると僕らにできることはせいぜい、現実に蓋をして誰もそれに気づかないことを祈ることぐらいだ。

インターネットには、こんな秘密のルールがある。ウェブブラウザを初めて開くと最初の5分でもう、ロシアの誰かに自分のソーシャルセキュリティー番号は筒抜けだ。何かにサインアップするともう一生NSAに自分の居場所が追跡される。メールを送ると、そのアドレスがなぜかナイジェリアの看板に出る。

まあ、最後のは冗談としても、誰も気にしないし止めようともしないから気がつかないだけで、こういうことは充分起こりえるんだよね。なぜならネットではあらゆるものが壊れていて、グッド・コードも存在しなくて、みんなただ目の前のもの走らせ続けることしか頭にないから。インターネットで働くというのは、つまりはそういうこと。 何かコード書いてもそれが長くもつ保証はどこにもない。「せめて晩ご飯食べて仮眠とり終わるまで数時間もってくれないかなあ」ってなもんなのだ。

みんな最初からクレイジーだったわけじゃない。状況がクレイジー

プログラミングという名の地獄 3

「エラー: HTMLを正規表現でパースしようとしたらシステムからクトゥルフが返ってきました」

ははは。不思議なこともあるものだな。ね? 次、これ。

「それって、arrayReverseってやつですか?」

「s/camel/_/」

「なるなるーサンクス」

なるなるーサンクスって、これでヒント!? camelってラクダ? これで返事になってんの?…と思った人は大丈夫。コード書き過ぎて普段の会話もコードで済ますところまで重症じゃない証拠だ。まだキリストの愛で救われるだろう。

人間の脳みそは元々、基本論理だって覚束ないのだ。なのに今は超・超複雑な論理だけ専門にやる職種ができてしまってる。理論上の条件を死ぬほど繋いでいってやっと探したと思ったら、コンマ1個欠けてただけだった、とかね。こんなの朝から晩までやってたら誰だって軽い失語症になる。しゃべってる人の顔見ても、しゃべり終えたのに気づかないのだ。セミコロンが顔に出ないから。

短い数列が記号のラビリンス(迷宮)に紛れてしまって、どこにあるかわからない。そうこうするうちラビリンスの反対側からは別の数列とネコの写真が出てきた。とにかくこの原因を探すまでは寝れない。という狂った世界。僕らはそんな全く無意味な世界にどっぷり首まで浸かってるのだ。

こんなんで脳が普通でいられるわけがない。その壊滅的影響は人が書くコードにもすべからく現れてくる。例えばこのプログラム。

プログラミングという名の地獄 4

これは下のプログラムと、やることはまったく同じだ。

プログラミングという名の地獄 5

そしてこれ。

プログラミングという名の地獄 6

これ。

プログラミングという名の地獄 7

ある人がプログラミング言語書いて、それで別の人が書いたのがこの下のコードだ。

プログラミングという名の地獄 8

作者によると、このプログラムは「マガジンタイトルに使う別々のASCIIキャラクターをあらわすマヤ文明の数字を読み出すコードの中にある埋め込みコメントの2行をパースする2行のコードを90度回転させたASCIIアートで示したもの」らしい。

その人はこのプログラムで賞をとった。なぜってまあ、賞をとったからとったんだ。こんな世界で生きたいと思うか? 思わないよね。タバコ1日1箱吸っても誰も疑問に思わない世界。「そりゃあいつなら吸うだろ。あれで吸わないでいられる人なんて、いるの?」と納得されて終わりだ。ある朝目覚めると世界中のものが彼女まで全部コードになってて、それを「寝不足でこんな幻覚見ちゃったよ」とさも当たり前のように仲間に自慢する世界。オランウータン向けのプログラミング言語書くためにセックス控える世界。

世のプログラマーはみな、脳の仕様に元々ないタスクを脳に無理やりやらせている。自分の力では絶対改善できっこないこの状況で。1日10時間も15時間も週5日も7日も働いて、全員ひとり残らずゆっくり狂っていってるのだ。

</rant>

(rant終わり)

というわけで確かに23kgもあるもの持ち上げる肉体労働じゃない。けど、僕は僕で自分の頭をバックリ割って脳みそ食べてる悪魔から陰毛の1本か2本むしり取ってネットがあと数日生き長らえるよう、命を削っているのだよ。

*本稿はStill Drinking初出の原稿を筆者Peter Welchさんの許可を得て再掲しました。著書「And Then I Thought I Was a Fish」はアマゾンで購入できます。

Peter Welch - Gizmodo US[原文

(satomi)