Coders|凄腕ソフトウェア開発者が新しい世界をビルドする

第1章|リアルを変えたソフトウェアアップデート

フェイスブックの大失敗

フェイスブックのニュースフィード機能の作成では、どういう話ならお互いに知りたいと思うのか、など、友だち付き合いという哲学的に深い問いに取り組まざるをえなかった。友達全員がその日にしたことを全部表示したのでは役に立たない。友達が200人いて、ひとり10回も投稿したら、投稿は全部で2000件ととても読みきれない量になってしまう。だから、投稿をふるいにかけるルールを作らなければならなかった。重要度を表す数字で「重み付け」をするのだ。人間ふたりの関係にどう重みをつければいいのだろうか──毎日のように夜遅くまで事務所に残り、そんなことを議論する。人と写真の関係にどう重みをつければいいのだろうか、と。


ニュースフィードは、ここ20年間に書かれたコンピューターコードのなかで有数の影響力を持つものに成長したと言っても過言ではない。

人々がフェイスブックを見る時間は、フィードの登場で大きく増えた──ひとり平均1日35分も、である。理由はわかるだろう。ソートアルゴリズムを工夫し、ユーザーが好むものをなるべく表示する、つまり、「いいね!」やシェア、コメントなど、フェイスブックでなにをしているのかをじっくり観察し、好みに合致すると思われるものを探しては表示するプログラムになっているのだ。ユーザーが見たいと思うものばかり並べられれば事業面で大成功できる。

コーダーが世界をビルドする

ベンチャーキャピタリストのマーク・アンドリーセンは、「ソフトウェアがこの世を食い荒らしている」とまで表現している。

一理ある。目が覚めているあいだ、我々は、ソフトウェアを使い続けているに等しい。電話やノートパソコン、電子メール、SNS、テレビゲーム、ネットフリックス、さらには、タクシーの配車や出前の注文などはわかりやすい。

そういう製品を思いつくのは、たいがいコーダーだ。コンピューターに新しいなにかをさせようと日がな一日考える人々、だから、どういう「できたらいいな」ならコンピューターで実現できるのか、ふつうの人とは比べものにならないほどわかる人々である。


我々が利用しているソフトウェアは、芝生に生える草のように、どこからともなく出てくると感じるかもしれないが、実際は違う。それを作った人がいるのだ。命令がずらりと並ぶコードという形で、なにをすればいいのか、手順をひとつずつ、きっちりコンピューターに教えるものを書いた人がいるのだ。アルゴリズムという言葉には神秘的な響きがあるが、その実体は、まずこれをしろ、次にこれをしろ、その次にはこれをしろという命令の集合である。ニュースフィードは機械学習も活用する複雑なアルゴリズムだが、その中核はルールのリストだ。そのルールに力があるのだ。


我々の世界がソフトウェアでできているとすれば、プログラマーは建築家だと言える。彼らがなにか決定を下すと、それに応じて我々の行動が変わる。彼らがなにかをやりやすくすると、我々は、それをすることが増える。逆に、なにかをしづらくしたりできなくすると、そういう行動が減る。

コーディングはなぜ楽しいのか

内向的とか論理的とか以上に、コーディングでは、フラストレーションに耐え続ける力が求められる。コンピューターはなんでも言ったとおりにしてくれるが、そのためには、非人間的なほどに厳密な命令を与えなければならない。

プログラミング言語とは、マシンに語りかけるための言語であるわけだが、この相手は、文字どおりの解釈しかしてくれない存在、僅かなミスでも許さない文法至上主義の存在なのだ。人間なら、こちらがなにを言わんとしているのか、いろいろと推測してくれる。コンピューターはしてくれない。ミスがあれば、どれほど小さなものでも、直せと突き返してくる。その結果、人の心や性格にも影響が出るのは当然だろう。コーダーというのは、毎日、失敗をくり返し、フラストレーションにまみれる生活をしている人種なのだ。


コードを書く。走らせてみる。動かない。それが当たり前なので、仕事の大半は、なにをまちがえたのかを探すことになるわけだ。そういう悩みに毎日向き合える人は成功する。耐えられない人は逃げ出す。


コーディング部門に行くと、ここは修道院かなと思うくらい静かになる。ずらりと並んだ人は、みな、ヘッドホンをつけて自分の仕事に没頭している。頭の中は、何十行、何百行、場合によっては何千行ものコードでいっぱいだ。彼らは、この集中をじゃまされるのを極端に嫌う。そこまで集中するのが大変だからだ。肩をぽんとたたいて、「どう?うまくいってる?」などと聞こうものなら、怒りの言葉が帰ってくることも珍しくない。この一言で魔法が破れてしまい、心の中にまた城を築くのに1時間もかかったりするからだ。

コーダーの世界を広げる

ソフトウェア業界は、昔から、能力主義の世界だ、実力だけが物を言う世界だと自負してきたのだから。そう思うのも当然だろう。ソフトウェアとはそういうものなのだから。コードは能力主義の化身だ──下手くそが書いたソフトウェアはクラッシュし、上手が書いたソフトウェアはクラッシュしない。このようにはっきり分かれるからこそ、ソフトウェアエンジニアはコーディングにのめり込むとも言える。


第3章|絶え間ないフラストレーションと一瞬の喜び

大惨事が発生するワケ

この風変わりな仕事に惹かれる人がほぼ共通して持つ特質はとたずねられたら、どう答えればいいのだろうか。

胃が痛くなるようなフラストレーションにどこまでも耐えるマゾヒスティックとも言える能力だろう。なぜなら、「プログラマー」とは言うものの、キーボードに向かっている時間のうち、新しいコードを書いているのはごくわずかで、ほとんどの時間はバグ探しに費やされているからだ。


実は、コーディングとは、なにかを作る作業というより直す作業と言ったほうが本質を突いていると言える。だから、コンピューター研究のパイオニアのひとり、シーモア・パパートは、「最初からきちんと動くプログラムはない」を公案として掲げていたという。


プログラマーになるのは、そういう難行苦行に耐えられる人です。ある意味、狂気の世界です。少し頭がおかしくなければ、こんな仕事はしてられませんよ」

大きく複雑なソフトウェアのしごとをしたことのあるコーダーなら、みな、似たようなことを言うはずだ。そして、間違いを絶対に許さない超厳密なマシンを相手に仕事をしていると、コーダー側もその影響を受けることになる。

コーダーに向く人、向かない人

よくも悪くも厳密なコードを相手に悪戦苦闘し、バグによるつまずきで神経がすり減る思いをするわけだが、これがあるがゆえの報酬もある。バグをようやくつぶせた瞬間、半端ない達成感が押し寄せる。


まっとうな企業であれば、コードを実戦投入する前に必ずコードレビューがある。意図したとおりに動くかはもちろん、他人に読めるものとなっているかどうかも社内で確認するのだ。

コーダーは、新たに書く時間の10倍、ソフトウェアを解読するのに使っているという人もいる。コードの書き方についてああだこうだと口を出すコーダーが多いのは、これも理由である。将来、自分がそのコードを読まなければならなくなるかもしれないからだ。


「実際のところ、プログラマーは、壊れているものの相手ばかりしてるんですよ。プログラミングというのは、失敗にずっと囲まれている仕事なんです」「プログラマーに向いているのは、ほんとにちょっとした成功に大きな喜びを感じられる人、ですね」

プログラミングの「勝利」がわくわくするのは、突然やってくるからでもある。「コードはその状態が瞬間的に変化します。まったく動かない状態から、一瞬で、動く状態に」

このとき吹き出す喜びがあまりに甘美なので、コーダーは、一瞬であってもまた味わいたいと、胃が痛くなるようなフラストレーションにじっと耐えるのだ。

作る人と使う人の攻防

アジャイル」というのは、さっと方針転換できることを意味する言葉だが、同時に、制作チームが体を前後左右に揺らし、ユーザーニーズという予測不能な危険を回避するイメージが浮かぶ。レーザーを張り巡らせたセキュリティをニンジャがひょいひょいすり抜けていくイメージと言ってもいいだろう。

コーダーは単線思考?

「学ぶのは大変ですが、プログラミングができるようになると、『これは私が作ったもので、ちゃんと動く』という自信が得られるんです。ちゃんとできているとかできていないとか、誰かに言われるわけじゃなくて、実際に動くモノがそこにあるわけです。コードはコンパイルを通ってちゃんと動く状態になるか、ならないか、ですから」

コーディングの喜び

「小さな勝利をいくつも味わえるのがいいんだと思います。だから、コーディングは、ほかのことより満足度がずっと高いのではないかと。ちょっとした問題、たとえばバグをみつけるなど、ごく小さな問題を解決したときでも、『おお、やった!うんうん、うまくいったじゃん。これで少しよくなったな』と思えます。だんだんと形になっていくのがわかるんです。彫刻に似ているとも言えるでしょう。」


第4章|コーダー気質


第5章|効率カルト


第6章|10倍、ロックスター、そして、能力主義なる神話