人間とウェブの未来

「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。

もうできないと思えた時こそ大きな差をつけるチャンス

ある日、今年は研究開発活動を国際化していくぞ、と意気込んで出した国際会議のreject通知が届いた。そして、その内容も4人の査読者からフルボッコであり、特に英語がなっていないということをかなり強い言葉で指摘されていた。そんな通知をもらった僕は、かつてないほどの悔しさと後悔を感じたのであった。過去に何度か国際会議通していたこともあり、これぐらいでいいだろうとタカをくくって舐めていた、手を抜いていた面もあったからだ。

その1週間後の4/10に、国際会議のワークショップ締め切りがあり、指摘を直してそれに出してみてはどうかとreject通知に書かれていたのだが、その4/10は自分の別の論文1本と共著の2本の合計3本の論文締め切りと同じ日であり、これは流石に無理だと諦めたのであった。きつい。

精神的にも落ち込んでいたし、今年は国際化やっていくぞ!と思っていた矢先の出来事で、なかなか立ち直れなかった。残る3本の論文執筆は達成しなければならないという思いも強かった。でも、改めて自分を見つめ直した時、ただそれだけの気持ちではなかったのだ。

「また英語で出してフルボッコにされるのは嫌だ」「そうならないように納得のいく修正をするのは難しいだろう」「間に合うかもしれないけどもうなんか出したくないな…」「また落ちたら恥ずかしい…」「出せないということにしたい…」「逃げたい」そんなシンプルな感情に溢れかえっていた。

そんなとき、ふと博士課程時代の先生の言葉を思い出しつつ、自分が本当に得意としていることはなんであったのかを考えていた。

「ここまでせっかく書いたのだから直せるだけ直してとりあえず出してみましょう」

「そのちょっとした努力をこの状況だからこそやってみるのですよ」

「普通の人はここで諦めるでしょう。だからこそ我々はここでやってみないと」

「それがいずれ大きな差となる」

「もうできないと思えた時こそ大きな差をつけるチャンス」

「その時にやったことは全てがもれなく成長となる」

それぞれの言葉は細かいところでは違っているとはいえ、そのような内容の言葉を沢山やりとりしていたことが思い出された。

僕自身、社内の立場や外から見られる立ち位置も少しずつ上がってきていて、いつのまにかその立場が大きな鎧となり、身動きが取れず、がむしゃらに動くことを諦めはじめていた。でも、自分が多くの技術を学び、ただひたすら前を見て研究していたあの頃はそんな気持ちではなかった。少しでもチャンスがあれば手を伸ばし、指が引っかかることを信じて、とにかく掴む努力を誰よりも、特に普通なら諦めかける状況であればあるほど、手を伸ばし続けていたはずだった。何度でも失敗したっていい。その時の全力を尽くすだけだ。僕のような別段頭が良いわけではない人間が一歩先へ進むにはそれしかなかったはずだ。そんなことを思い出しはじめた。

そして、僕は4/10に国際会議の論文をできる限り修正し提出した。同時に、ギリギリまで共著論文を2本レビューし、自分の論文も含めて合計4本の新しい論文も提出できた。ちゃんと提出できたのだ。なんてことはない、ほんの少しやろうとするだけ、重い鎧を脱ぐだけで、できないと思えてもやってみると案外できるものだ。もうできないと思えた時にこそ、自分を矮小化することなく、ほんの少しだけ勇気を出して、格好をつけるのをやめて、踏ん張ってみる。すると、もう一歩だけ進むことができるのだ。その一歩の積み重ねが大きな力となっていく。

僕が唯一人と差をつけられることはこれだったはずだ。今日はもう眠い。でもそこでもう少しだけ踏ん張ってこのエントリを書く。本質的にはそれと変わらない。たったそれだけのことをを再び忘れないように、ここに行動し、記しておく。

プログラミングにおける不安と学びのプロセス

僕の場合、実現したいことをコードで書けない時には、ひたすら似たコードを読んで理解して写して…を繰り返す。そのうちに手元に大量の自分のサンプルが溜まっていく。その繰り返しがパターンの細分化を促し、書けるコードの幅を広げていく。書けるコードを気持ちよく書き続けてるだけでは新しいコードは書けないからだ....と、向き合えるようになるには時間がかかった。

書き慣れたコードの延長で書いていると、自分でコードを書けている実感があって、リファレンスなど何も見ずに自分の力でプログラミングできている感があるのだが、ある時これはただ「慣れ」の感覚を高めているように思えた。素早く書けること自体は、それはそれで一種のスキルで素晴らしいのだけど、実現したいことをコードで書けるようになる、という観点で振り返ったときに、どうしても成長を感じなかったのだ。それ以来、まずいと思い、実現したいことを思い描き、それを実現するために自分が書けないコードを探しては読み、写しては学ぶようにした。しかしそこには常に不安がつきまとう。

書けないコードを読んで真似をするという行為を繰り返している状態は、自分でコードを書けている実感がとても弱くなる。だからこそ、その漠然とした不安を払拭するためにそのプロセスを続けるのだけど、ある時振り返ると、出来ないことをできるようになっていた、という結果とその成長を実感できる。とはいえ不安はまだまだあるし、満たされることもないので、継続的に取り組み続ける。実はこれは満足感と払拭されない不安がうまく両立されている状態なのだ。

自信や実感の無さにいかに向き合ってそれをエネルギーに変えるか、その際に周りとの相対比較による無駄な雑念をどれだけ取り除けるか、というのはとても大事で、そのような状態でプログラミングに向き合えたら、自分のために、実現したいことのためにただ書けないコードを書けるようにと学び続けられる。遅くたって構わない。ただひたすらに継続してやっていくだけだ。

業務でもプログラミングでもそうだけど、専門性という意味合いのない、ある特定の狭い領域にのめり込むと割と簡単に全能感を得られてしまう。その全能感は気持ちよくて癖になってなかなかやめられないのだけど、その全能感故にその狭い領域や今出来ることから抜けられない。いかに簡単にその全能感を捨てられるかがポイントに思う。

周りよりも速く全能感を得られたのなら、次は自分のできないことに取り組みながら、俺が俺がとやってきたことを適切に周りに頼り任せていく。そうすると、自分ができないことができるようになる間に、周りのできることが自分も少しずつできなくなっていくし、それどころか、忘れてすらいく。でも実は、そのように生じる役割分担とその連鎖は、実現したいことの限界を突破していくという意味では、集合知として専門性を高める作業にほかならないのだ。

このテーマで何が言いたかったというと、そうやってコードを読んで理解して真似してる時はコードを書けてない実感が強く不安だから、それを避けて出来る方や慣れる方を優先しがちだけど、実はその不安は正しい学びのプロセスであって成長の角度が比較的大きくなるので、その不安と向き合ってしまうと良いと思うのであった。

そしてこれは、プログラミングに限らずあらゆることに適用できそうな学びのプロセスであるかもな、とも思う。

GMOペパボ株式会社のチーフエンジニアに就任いたしました

2018年3月18日付でペパボのチーフエンジニアに就任しました。

ペパボのエンジニア職位制度におけるNo.1エンジニアとして、引き続きテクノロジーによってペパボのプロダクトを成長させていきます。

私はペパボ研究所の主席研究員でもありますので、基本的には研究開発を通じて事業を差別化する技術を作り上げ、研究開発によって産学に影響を与えながらプロダクトを作り上げていくことになります。

インターネット技術の変化というものは、これまでの常識を簡単に塗り替えていきます。その為、エンジニアの道を選んだ我々は、常にその変化を追い続け、学び続けなくてはなりません。ペパボのエンジニア組織は、mizzyさんをはじめ、あんちぽさんや柴田さんを中心に、多くの方々のご尽力により、インターネット技術の変化・高度化に強い、小回りのきく組織として成長してきました。それに伴い、組織の規模が拡大しようとも、効率的にプロダクトをより強くしていけるような基盤の整備もなされました。

では次に何が必要か。それは、このインターネット技術の変化について行くことはもとより、私自ら、ひいては、ペパボ自ら、そのインターネット技術の変化そのものをおこしていける存在になることです。そして、その技術によって、プロダクトの価値を最大化し、これまでにないような価値あるペパボのプロダクトを生み出していくことです。

私のチーフエンジニア就任の使命は、インターネット技術にペパボ自ら変化をおこして業界を巻き込むこと、その技術によって世にない価値あるプロダクトをペパボから生み出していくことだと思っています。そして、その活動そのものが実はとてもおもしろいことだということを、まわりのエンジニアに伝えながら、組織として共に、自発的に、成長していける基盤を作ることです。

これらの使命を果たすこと、そして、学ぶこと自体が実はとてもおもしろいことなのだということを伝えられるように、日々精進して参りますので、今後ともmatsumotoryをどうぞよろしくお願いいたします。

HTTPリクエスト単位でmrubyのバイトコードをProcとFiberで包みなおして実行した場合の性能とv2について

ngx_mrubyのv2の4月リリースに向けて、HTTPリクエスト単位で実行されるRubyのコードを、FiberとProcで包んだオブジェクト経由で実行する実行方式に実装しなおしています。これまでのngx_mrubyのv1系は、Rubyのコードをnginx起動時にstruct RPocにコンパイルしておき、リクエスト毎にそのバイトコードを実行していました。

一方v2では、nginx起動時にコンパイルされたstruct RProcを、HTTPリクエスト時にprocオブジェクトに変換した上で、そのprocオブジェクトをcallする処理をfiberで包み、そのfiberオブジェクトをresumeする処理をさらにprocで包んで、procをcallで実行するようにしました。それをC側とRubyのコードを行き来しながらうまいことnginxとmruby間のイベントループの上に乗るようにします。今のところはCとRubyの世界のコンテキストを現状のmrubyでうまく行き来するために、こういった複雑な方式にしています。その理由については一旦省略します。

github.com

続きを読む

ガンプラの全塗装プロセスは現代のソフトウェア開発プロセスそのものであると気づいた

最近ガンプラ(ガンダムのプラモデル)の全塗装をやっているわけですが、僕がガンプラ全塗装でやっているプロセスは、まさに現代のソフトウェア開発プロセスのなんたるかを擬似的に短期間で凝縮して体験できる優れたプロセスである、と思わされましたので、それについて書きたいと思います。

続きを読む

2018年の抱負 - Webホスティングサービスの技術を体系化したこととその意図について

2018年の電子情報通信学会論文誌BのVolume J101-B No.1(発行日:2018/01/01)「ネットワーク社会に向けたインターネットアーキテクチャ論文特集」に、我々が執筆した「Webサーバの高集積マルチテナントアーキテクチャと運用技術」という招待論文が掲載されました。オープンアクセスで誰でもダウンロードして読むことができますので是非ご覧下さい。

続きを読む

2017年振り返り - 技術そのものを楽しむ先にあるもの

仕事は大変なものだ、仕事は楽しいものだ、楽しいことを仕事にすれば良い、楽しいことばかり考えていては仕事にならない....などなど、仕事に対する言論がこれまで幾度となく繰り返されてきた。楽しいことを仕事にすれば良い、楽しいことをやれば良い、と言ったり言われたりしていたものの、やはり自分の中ではその考え方がうまくまとまっていなかった。しかし、2017年を振り返ると、自分なりに技術そのものを楽しみ、楽しく仕事をすることの意味が理解できた年だった。

僕にとって技術を学ぶこと、それ自体はとても楽しいことであるし、技術を持って仕事をなすサイクルはそれもまた自分にとって大変楽しいことである。では、楽しくない仕事だとやらないのか、と言われるとそんなことはなく、会社を通じて社会に貢献することが対価を生み出しその対価によって生かされているのだから、当然楽しくない仕事も社会に貢献するためにやるのである。ただ、僕はそんな状態では最終的にその仕事に対する最大のパフォーマンスを発揮することはできないことを経験的に知っている。

僕は好奇心に満ちあふれ、創造性のある活動や課題解決そのものが面白いときにこそ最大のパフォーマンスを発揮し、価値を最大化できる。ひょっとすると多くの人がそうなのかもしれない。仕事をすること、社会に貢献すること、プロダクトに貢献すること、それ自体を目的にすべきだと言う言論を多く見るが、自分の場合は恐らくそれでは結果的に貢献や価値の最大化はできないだろうと数年前から思い始めた。しかし、それに対する明確な解答は用意できていなかった。

2017年まで生きてきた今、ようやくその思いに対する理由を認識することができた。認識してしまえばそれは言うまでもなく、外的要因に起因するモチベーションは、簡単に環境や関係性によって崩れてしまうからだ。人のため、社会のため、と思っていても、それだけでは動けない状態に簡単に人は陥る。簡単に妥協し、価値を下げていく。その価値を大きく見せてみたりする。それはなぜか。自分のためだという根源的な動機が欠けているからである。

当然ながら人や社会のために行動する、それ自体はとても大事なことである。ただ、それだけで行動し続けられない人も多くいるのだと思う。僕もそうである。人間関係に悩み、会社との関係性に悩み、社会での自分の立ち位置に悩む。そんなどうしようもないときに自分を救ってくれるのは、自分のためであること。自分のために行動すること。一見それらは利己的で邪悪なものだとみなされるかもしれないが、自分のために生きていくことそれ自体はとても大事なことだと思える。何かをなすべく継続的に取り組むためには、自分のために生きるという動機は最も重要なのだと。

では、仕事の話に戻った時に、楽しいことをただ楽しくやっていれば良いのか?という疑問が残る。僕は2017年になって、明確にそれだけではだめなのだと理解できた。何かを楽しむこと、それは自分のパフォーマンスを最大化する行動である。そして、楽しいと思えることをただ取り組むことが結果的にいかにプロダクトに繋げられるか、そのための方向性を調整し重ね合わせていくスキル、それこそが、エンジニアが仕事を楽しくやることの先に必要なスキルなのだ。そしてそれは、僕というエンジニアにとっても最も重要なスキルであると、2017年に気付かされた。

技術をもって最高のプロダクトを作るために、僕はまず技術そのものを楽しむことを第一に、それが結果的に取り組みのパフォーマンスを最大化させ、その成果の方向性を調整し重ね合わせるスキルによってプロダクトに繋げる、それがいずれ社会に還元されていく、その働き方こそが自分にとっても、結果的には社会にとっても良いのだろうと。後付けは悪ではない。後付けこそが非常に重要なプロセスであることを博士課程で学んだのであった。

社会にとって今自分の取り組みが価値あることだ、社会に貢献しているのだ、などと思う必要などない。逆に役に立っていないなどとも思う必要はない。自分が自分であること、自分が楽しんで何かに取り組んでいること、それだけで価値がある。エンジニア、研究者として、技術そのものをまずはただ楽しむこと、それを積み重ねて価値に重ねていくスキルを磨くこと、それが結果的に最高のプロダクトを生み出し、いずれ社会に還元されていく。そのためには、自分は自分のために生きているという根源的な価値を忘れないこと、そんな単純なことに気付くことができた2017年だった。