Web上で在宅ワーカーと案件発注者をマッチングさせ、業務開始から報酬支払いに至るまでを一括管理してくれる。日本最大級のクラウドソーシング・サービス「クラウドワークス」。同サービスを運営する株式会社クラウドワークスでCTOを務めるのが、弓山彬さんです。
高専時代に、学生のためのロボットコンテスト「ロボコン」に参加したことをきっかけに、プログラミングの楽しさに気づいたという弓山さん。以来、ひたむきにその技術を磨き続けてきました。CTOへの就任も、同社へ中途入社してからわずか1年3か月というハイスピードだったというから驚きです。
Webアプリケーション開発からサービス基盤の構築、運用業務に至るまで、クラウドワークスの幅広い業務領域を支える彼。これまでどのような本を読み、そこから何を学んできたのでしょうか。今回は、弓山さんがおすすめする4冊の書籍をご紹介します。
約30年前、ハッカーの存在を世に知らしめた1冊。『カッコウはコンピュータに卵を生む』
クリフォード・ストール (著), Clifford Stoll (原著), 池 央耿 (翻訳)
『カッコウはコンピュータに卵を産む』草思社
――本日はよろしくお願いします! 1冊目である『カッコウはコンピュータに卵を産む』はどんな本なのでしょうか?
弓山:これは、実際にあった国際ハッカー事件を元に執筆されているノンフィクション小説です。
事件が起こったのは80年代後半。当時は、今のように家庭にパソコンなどなく、研究者が共同で利用するスーパーコンピューターが主流の時代でした。そして、各人の利用時間に応じて課金されるような仕組みだったんです。
物語の主人公は、新米のシステム管理者です。ある日、自分が使ったコンピューターシステムの合計金額が、75セントだけ合致しないことに気づきます。そこで、原因を究明するために調査をするんです。
チームの上司は、「たかが75セントだから、別にいいだろう」という感じであしらうんですが、主人公は黙々と調査し続けます。そしてついに、その原因を発見。なんと、研究所のシステムに正体不明のコンピューターユーザーが無断で潜入していたんです。
――それってつまり、“ハッカー”ですか?
弓山:はい。そのハッカーは、研究所のコンピュータを踏み台にして国防総省やCIAの情報を閲覧していたんです。実はこの事件をきっかけとして、ハッカーという言葉が世界中で知られるようになったと言われています。
――30年近くも前に、すでにハッカーが誕生していたのですね! 弓山さんがこの本を好きになったのって、どうしてですか?
弓山:「人間の本質的な部分って変わらないんだな」と理解できるからです。
どういうことかというと、物語の中で登場するテクノロジーはもちろん現代と比べると旧式のものばかりです。ハッカーの攻撃手段も、システムを守る側の防御手段も。
たとえば、ハッカーからのアクセス経路となるコネクタにアルミホイルを巻き、物理的なノイズを発生させて侵入を遅らせる、みたいなシーンが出てきます。現代では考えられない対処法ですよね(笑)。
でもそれとは対照的に、登場人物の思考・行動パターンって、現代を生きる私たちとほとんど同じなんですよ。それがすごく示唆的というか、エンジニアの持っている普遍的な考え方が表現されているように思いました。その要素が、人間味あふれるストーリーとして描かれていて非常に興味深い1冊ですね。
大切なのは、使っている道具の“仕組み”を理解すること『メタプログラミングRuby』
Paolo Perrotta (著), 角 征典 (翻訳)
『メタプログラミングRuby』オライリージャパン
――次は、『メタプログラミングRuby』。これはどのような本ですか?
弓山:メタプログラミングとはプログラミング技法の1つで、「プログラムのソースコードを動的に生成するプログラム」のことです。
Rubyには、メタプログラミングが簡単に実現できるようなメソッドがいくつも用意されています。Rubyの代表的なフレームワークとして知られるRuby on Railsも、メタプログラミングを用いてつくられているんです。
――この本を読むことには、どのような意義があるのでしょうか?
弓山:自分たちが普段使っている道具が「どのような仕組みで動いているのか?」を理解しなければ、本当の意味でその道具を使いこなすことはできません。
クラウドワークスでもWebアプリケーション開発にRuby on Railsを使用しています。自分たちが基盤として使っているフレームワークの理解を深める意味でも、メタプログラミングを学ぶことには大きな意義があると思いますね。
それに、フレームワークやライブラリを自分たちで開発する際にも、メタプログラミングは非常に大きな力になります。この技法を使いこなせなければ、それらは適切に開発できないと言っても過言ではありません。
――メタプログラミングは、それほどに有益な技法なのですね。
弓山:はい。ただし気をつけなければいけないのは、「解決すべき課題は何か?」を考えた上で、その課題が「メタプログラミングによって解決すべきもの」である場合のみ、この技法を使用することだと思います。どんなものにでも、メタプログラミングを適用すればいいわけではありません。
――それはどうしてですか?
弓山:私たちエンジニアがすべきことは、「課題を解決して、価値を生み出すこと」であってコードを書くことではありません。だからこそ、メタプログラミング以外の方法の方が課題を解決しやすいのならば、そちらを用いるべきケースも数多くあるからです。
結局のところ重要なのは、課題に応じて適切な手段を使い分けられるエンジニアになる、ということなんです。
CTO就任後、興味の対象は「個人の生産性」⇒「組織の生産性」へ
――最後は、『プロダクティブ・プログラマ -プログラマのための生産性向上術』と『ザ・ゴール ― 企業の究極の目的とは何か』。これらがどのような内容か、順に解説していただけますか?
Neal Ford (著), 島田 浩二 (監訳) (翻訳), 夏目 大 (翻訳)
『プロダクティブ・プログラマ -プログラマのための生産性向上術』オライリージャパン
弓山:『プロダクティブ・プログラマ -プログラマのための生産性向上術』は、私がエンジニアになったばかりの頃に読んだ本です。「プログラミングの生産性をいかに向上させるか」について書かれています。
――生産性を向上させるために、どのような方法が推奨されているのですか?
弓山:「手段をたくさん持っておくこと」が重要であると提唱されています。どういうことかというと、プログラミングにおけるさまざまな課題に対し、特定の対応策がいつも通用するとは限りません。その場合に、エンジニアが他の手段を全く知らなければ、時間ばかりかかって課題を解決できないでしょう。
一方で、もし数多くの手段を知っているならば、それを順に試すことで解決するまでの時間はかなり短縮できます。効率よく最適解を導き出すには、自分自身が持っている道具の数が多くなければいけないということなんです。
――確かに、その通りですね。もう1冊は、どのような内容ですか?
エリヤフ・ゴールドラット (著), 三本木 亮 (翻訳)
『ザ・ゴール ― 企業の究極の目的とは何か』ダイヤモンド社
弓山:『ザ・ゴール ― 企業の究極の目的とは何か』は、工場の業務改善プロセスをテーマにした小説です。この本では、工場の生産性を上げるためにどのようなボトルネックを解消すべきか。そうすることで、何がどう改善されるのかなどが非常にわかりやすく描かれています。
たとえば、「工程全体のチューニングをするには稼働の“遊び”が必要である。全メンバーの稼働率を100%にすると、かえって作業効率が悪くなる」といったことが書かれているんです。
この本は、CTOに就任してから読みました。もしかしたら、CTOになっていなければこの本の内容には興味を持たなかったかもしれないですね。
――CTOに就任したからこそ、弓山さんの持つ視点が変わってきたのですね。
弓山:そうですね。CTOの役職に就いてからは、自分自身の開発プロセスを最適化させることよりも「メンバー全員に、それぞれの能力をフルに発揮してもらうこと」を重視するようになったと思います。
そういう意味では、就任してから少しずつ“CTOっぽいマインド”になってきたのかもしれないですね。
――なるほど。選書から弓山さんの思考の変遷が伺えて、とても興味深かったです。今回はどうもありがとうございました!
取材協力:株式会社クラウドワークス