Findy Engineer Lab

エンジニアの"ちょい先"を考えるメディア

人生はyak shaving。失敗も遠回りもいつか自分の糧になると、エンジニアの仕事が教えてくれた

こんにちは。motemen(id:motemen)と申します。現在、株式会社はてなでCTOとして開発組織や技術方針のマネジメントに携わっています。新卒ではてなに入社してから、気づけば15年が過ぎていました。今回「Findy Engineer Lab」で寄稿の機会をいただきましたので、自分のキャリアを簡単にふり返ってみたいと思います。

プログラミングの初期衝動

初めてプログラミングに触れたのは小学生の頃でした。家に、親が仕事で使っていたパソコン(PC-9801)があったので、それに本屋で買ったムック本についていたフリーウェアのゲームを入れて遊んでいたのですが、あるとき父親が「お前はプログラミングとか好きなんじゃないか」とBASICの存在を教えてくれたのがきっかけでした。父にはプログラミングの知識はなかったので、当時の私は自分で本を読みながら覚えていきました。本に載っていたプログラムを一つひとつ手打ちで画面に入力して、簡単なゲームを再現できたのを覚えています。

やはり子どもらしく本当はゲームを作りたかったのだと思うんですが、さすがに形にするところまではいかず、当時作ったものの中でちゃんと完成までこぎつけたことを覚えているのは掛け算の筆算のプログラムです。学校の宿題で筆算のドリルをやらなければならないのが面倒で、機械にやらせようと思ったんですね。きちんと筆算の過程まで描画するようになっていて、小学生が思いつく中ではなかなか賢い選択だったと思いますが、作成に時間がかかり過ぎて、筆算のプログラムが完成した頃にはその単元は終わってしまっていました……。

その後、他にもプログラミング言語があるらしいぞと知ってC言語に挑戦したのですが、その時はmainの意味やコンパイルというステップについてまったく理解が及ばず挫折してしまいました。こういった低レイヤの言語をちゃんと触るようになれたのも、ようやく最近になってからのことです。

中高になってからVisual BasicやPerlという言語に出会いましたが、こちらは素直に理解でき、メインで使っていくようになりました。後にJavaScriptが手になじんだように、書いたものがそのまま動く、というところから入っていくことが自分には重要だったようです。

一緒にプログラミングする友人ができたのもこの頃です(toriclsさんの記事を参照)。この頃にはゲームもどきのようなものも作っていましたが、パソコンに触れない合間にAPIのリファレンスを読んでは、これで何ができるようになるんだろう、と想像する時間も楽しかったように思います。

あらゆるウェブページをハックできる、JavaScriptの全能感

大学に入ってからは本格的にインターネットにのめり込み始めました。イケてるエンジニアとして憧れていた人たちのまねをして、blosxomというブログツールを使って、自分のブログを作りました。ほかにも当時の主流のひとつだったMovable Typeを使ってみたのですが、数ファイルのCGI/Perlで実現されているシンプルさが気に入りました。すべてを把握できるサイズなので、好きなように改造できるのも魅力でした。

当時の自分が見ていたインターネットでは、発信する人が「誰であるか」「どういう肩書きを持っているのか」ということはほとんど問題ではなく、「何をしているのか」を重視していたように思います。インターネットに触れてかっこいいなと思ったエンジニアたちに近づくためにできることは、自分もコードを書いて公開することでした。自分が書いたコードが自分自身であり、それを洗練させていくことでかっこいいエンジニアになれるのだという実感がありました。

それまでは文字を動かしたりマウスカーソルを装飾したりといったことにしか使われていなかったJavaScriptが、ウェブの主役として存在感を放ってきた、Web2.0の時代でした。自分のサイトに動的な仕掛けを施すだけでなく、Greasemonkeyなどの拡張を通じてあらゆるウェブページをハックできるところには一種の全能感があり、この頃はよくJavaScriptを書いていました。

今でも好きな言葉なんですが、“yak shaving” という言葉を知ったのがこの頃でした。ヤクという動物は毛深く、どれだけ毛を刈ってもさらに深く刈ることができてしまって終わりがないように、ある問題を解くために別の問題を解く必要があって、その問題を解くためにさらに別の問題を解く必要があって……という終わりがなくてどちらかというと無益な行為のことをyak shavingと言うようです。プログラミングをしていく中でもよくあることですが、作りたいものを実現するために必要な要素があって、調べてみたところ別の問題に当たったので今度はそれを解決するために別のコードを書いて……というふうに進めていると、気づけば最初の目的地のことをすっかり忘れて辺りをさまよっている、そんな状況です。

このヤクの毛刈りが楽しかったんでした。ある目的があって、それを自分で実現しようともがいているうちに思ってもみない経路をたどっている。そしてその冒険を終えたときにはもしかしたら当初の目的は放棄しているかもしれないけれど、その道程そのものが自分の糧になっていて、もっと新しいことができるようになっている。できることが増えると、「自分に実現可能なものである」と思える範囲が広がり、やってみようと思えるようになります。そしてそれをやってみれば、必然的に実現のためのyak shavingが始まって、その過程でまた新しいことができるようになっている。このループをずっと繰り返していました。

プログラマからソフトウェアエンジニアになっていく

コードで自分が評価されることの恐ろしさを知った

当時のウェブで自分にとってひときわ輝いていたのが、はてなという会社でした。自分もユーザでしたし、エンジニアたちが楽しそうに、面白いウェブサービスを作っている様子を外から見ていて、かっこいいなと思っていたのを覚えています。そんな中、作っていたものが当時のはてなスタッフだった @hotchpotchさんの目に留まった幸運もあって、アルバイトをすることになり、その後はてなに入社しました。

2009年撮影。はてなに入社して1年ほどの、社会人エンジニアとしてのキャリアの最初期。

はてなで初めてリードエンジニアとして関わった大きなプロジェクトが、「うごメモはてな」という、任天堂社とはてなの協業から生まれたサービスでした。ニンテンドーDSiのソフトである「うごくメモ帳」と連動し、ユーザが描いたパラパラ漫画をインターネット上で投稿・共有できるサービスです。はてなとしても未知の取り組みでしたが、これを自分にやらせてもらえたのは本当に良い経験でした。メインのユーザは小中学生で、自分たち開発しているメンバーには想像もつかない行動を取るけれど、そのぶん楽しんで使ってくれていることがわかって、愛おしい存在でした。

「うごメモはてな」のコードは自分がゼロから書いたので、サービスについてもそうですが、コードに対する愛着はひとしおでした。特に初期はごく少人数で開発していたため、自分が考えるかっこいいコードを量産することで、ひとり気持ちよくなりながらたくさんのコードを書き散らしていました。この頃のことをふり返って思うのは、プログラミングはともかく、ソフトウェア開発というものを全然知らなかったな、ということです。

それから数年かけてサービスとチームが拡大し、いろいろな人と一緒にサービスを開発するようになりました。そこで新しくやってきた人にシステムやコードの説明をしようとしても、どうもうまくできない。相手も納得し切れないような表情をしている。そういう違和感の積み重ねから、どうやら自分のこれまで書いてきたコードはうまくないんだな、ということがようやくわかってきました。考えるコストを放棄して、ただ素早く書くことだけを重視した結果、読み手にとっての負荷が高いコードになってしまっていたんです。

2010年撮影。はてなで働く筆者。

やがて自分はチームを離れることになりましたが、残ったメンバーによるコードベースに対する困りごとは漏れ聞こえてくるもので、自分のコードが何年も、そしてこの先も他人を苦しめていく事実が重くのしかかってきました。あらゆる意味で誰も自分をblameしませんでしたが、自分の手を離れてしまったコードについて、もはや言い訳をすることも、責任を取って自分で直すこともできない。書いたコードだけで自分が評価されてしまうことの恐ろしさをこのとき身をもって知りました。

それから心を入れ替えて他人のためのコードを書くようになりました……めでたしめでたし。とはいきませんが、プログラミング自体への楽しさは見いだしつつも、だんだんと、読まれることを意識した行動は取れるようになりました。思えばこのときが、プログラマからソフトウェアエンジニアに成長できた機会でした。

「話すことが得意ではない」自分がマネジメントの道へ

チーフ、そしてCTO

自分が入社した頃は10名程度だったエンジニアの数も会社の成長とともに増加していき、個々のメンバーの自発的な動きの総合だけでは立ち行かなくなってきた頃、チーフエンジニアというロールを拝命しました。いろいろなプロダクト開発チームに散らばるエンジニアを、職種で束ねるリーダーです。1人目のチーフエンジニアとしてid:onishiがすでにいたので、そのアシスタントとして、という形からでしたが、人や組織を見る仕事を始めることになりました。

主な仕事は社内の取り組みの運用と、評価、採用です。特に採用に関わることは自分にとって大きな挑戦でした。そもそも人と話すことが得意ではない、という自認があったので、会社を代表して面接に参加することもプレッシャーでしたが、結果的にはいい経験になりました。面接はある意味では、雑談をしたり共感したりするための時間ではなく、お互いのことを客観的に測るプロセスであると言えるので、場がお互いに口を開かせてくれるところがあります。この場数を踏んだおかげで、ある程度は人と話すことに抵抗がなくなったのは収穫でした。

とはいえ人間は人間です。評価にしろそれ以外の場面にしろ、人間を相手にする仕事はそこから急速に増えていきました。計算機であれば何度も力任せにトライして、うまくいけば歴史を改変して最初からきれいな世界だったかのように装うことができますが、人間相手ではそういうわけにはいきません。外部から様子をうかがって意図を知るためのコミュニケーションひとつ取っても、人間の内部状態は変わり得ます。何といってもこちらが相手を見ているということは、相手のほうでもこちらのことを見ているのだという事実は、コンピュータには起こらないことで、自分を困惑させるのには十分でした。

……という難しさに気づいたのも、チーフエンジニアを拝命してから数年が経ってからのことでした。マネージャとしての仕事であると、当時は明確に意識できていなかったのです。自分が何気なく言ったひとことが、別の人のモチベーションにネガティブな影響を与えていたことを後で知ったり、良かれと思って行った働きかけがまったく滑っていたりと、細かい失敗体験を繰り返してようやく気づけました。

厳密に書けば即座にその通りに動いてくれるコンピュータを扱うことが好きでこの仕事に就いていた自分にとって、人間を相手にすることの難しさを引き受けなければならないことは、想定外のことでした。それでもなんとかこの役割を続けることができていたのは、隣に先輩のチーフエンジニアがいたこと、それから、はてなという会社やその文化が好きだったからだと思います。インターネットに本格的に出会ったときに感じた自由さや創造性や知性を、自分の手で実現していくためにも、周囲にいるエンジニアたちに活き活きと働いてもらえる環境を作っていく必要がある。そう感じていたから続けられていたのだと思います。

そして2016年に、前任のid:stanakaから引き継ぐ形でCTOに就任してからも、その難しさは変わりませんでした。大きく違うのは、これまでは組織の運用者としてエンジニアにとっての良い環境を作ることにフォーカスしていたところに、新たにエンジニア組織そのものや、はてながどうあるべきかを考えることも仕事のうちに入ったことです。はてなも次第に大きくなってきたことで、自分の入社当時と比べても良い文化は維持されていたものの、失われつつあるものもあると感じていた自分にとっては、そこに貢献する良い機会でした。

2017年撮影。社内の納会で喋っている様子。

しかし外から見ているのと、やってみるのとでは大違いでした。いま見えている問題をつぶしていく働きだけでなく、未来のあるべき姿に向けてみんなを動かしていくという芸当は、これまでやっていた仕事と大きく異なります。いったい何を足がかりにしていったらいいのか途方に暮れましたし、今もうまくできている自信があるとは言えません。あれこれ悩むうちに、少なくとも自分の視点をみんなに知ってもらうことが必要だ、と考えて、月に一度は全エンジニアの前で喋る時間を取るようになりました。

仕事が抽象的になって、自分が影響を与える範囲も広がっていく中では、前の日には予想もしていなかった問題や人と相対することとなり、そのたびに自分の自信が打ち砕かれます。去年あれだけ自信をなくしていたのに、まだ失う自信があったんだ、とふり返って面白くなってしまうくらいです。

けれど新しい問題に出会ったときは、自分にとってチャンスでもあります。うまくできなかったことがあるということは、新しく学ぶべきことが見つかったということです。新しいことを学べば、それだけ見えるものが変わっていき、世界が歩きやすくなっていくことをこれまでのプログラミングを通じて体験として知っていたのは、心強いことでした。

本を読むなどして勉強することも、プログラミングをすることも、その根っこは私的で孤独な行為だと思っています。そして仕事で当たった問題に関することや、そこから派生して関係ないことでも(もちろん、こちらのほうが多いわけですが)、学んだり、コードを書いたりすることはいわば一種の逃避行動です。しかし、それは自分にとって改めて自信を取り戻すための大切な時間になっています。

人生yak shaving

パソコンで遊び、プログラムを書く楽しみにふける中で、将来的に自分がこんなふうに人や組織に関わっていくつもりはさらさらありませんでしたし、そうなってみるまで本気で想像もしていませんでした。

今でこそCTOとそれなりの肩書きがつくようになりましたが、ふり返ってみても自分の核となるアイデンティティは、プログラミングが好きな少年であることには変わりありません。役割は変わってきましたが、自分にとって何か面白いもの、かっこいいものを作りたい、という気持ちは変わらず持っています。それを追い求めているうちにいろいろなことを学び、できることが増えて、また新しいことをやってみる、そういう大きなyak shavingがまだまだできそうなことは、楽しみに感じています。

編集:中薗 昴