本の虫

著者:江添亮
ブログ: http://cpplover.blogspot.jp/
メール: boostcpp@gmail.com
Twitter: https://twitter.com/EzoeRyou
GitHub: https://github.com/EzoeRyou

そう。タイトル通りだ。筆者、江添亮はドワンゴに雇用された。一体、どのような経緯でドワンゴに入社するに至ったのか。また、どんな仕事をしているのか。それを説明するには、時系列を追って書いたほうがいいだろう。

2013年8月21日

ふとみると、以下のようなサブジェクトのメールが届いていた。

【ご相談】ドワンゴ主催の C++11, 14 に関する勉強会にスピーカーとしてご参加頂けないでしょうか

C++11? C++14? なんと、日本にC++14などという単語を知っている企業があったのか。しかし・・・ドワンゴ?

SPAMだろうか。いや、こんなにピンポイントなSPAMがあるわけがない。

それにしても解せないメールだ。ドワンゴといえば、もちろん、あの有名なニコニコ動画の企業だ。ニコニコ動画と言えばWebサイトだ。ニコニコ動画やその関連サービスの開発にC++を使っているのだろうか。いやまて、たしか子会社にチュンソフト(現スパイク・チュンソフト)がいたはずだ。ゲームならばC++はありえる。しかし、今の日本のゲーム業界は、とてもC++11/14の勉強会を開ける状況とも思えないのだが、一体どういうことだ。いや、いくら子会社とはいえ、ドワンゴの名前で来るだろうか。あるいは、単に宣伝目的で勉強会を主催したいのだろうか。

ともかく、C++14であれば、ドラフト規格はもうほとんど固まっている。今回は、マイナーアップデートとはいえ、C++03と違って、コア言語にも小粒な変更をいくつも含んでいる。C++14で追加されたコア言語機能の紹介をすればよさそうだ。しかし、釣りではあるまいな。

2013年11月14日

そうして、歌舞伎座.tech#2が開催された。

当日のスライド資料:C++14の新機能

当日のTwitterのまとめ:歌舞伎座.tech#2「11/14なのでC++11/14のお話」ハッシュタグ#kbkz_tech保管庫 - Togetterまとめ

技術評論社の記事:第7回 エンジニアなら,一生学び続けるのは当たり前――社内勉強会を重視する社風から生まれたドワンゴ主催「歌舞伎座.tech」:IT勉強会を開催するボクらの理由|gihyo.jp … 技術評論社

勉強会の告知では、平日の夜なのにも関わらず、100人枠が一日で埋まっていた。さすが東京といったところか。

この勉強会のドワンゴ社員の発表によれば、ドワンゴのバックエンドにはC++が使われているという。それは知らなかった。

さて、勉強会の次の日に、懇親会という形で食事に誘われた。その食事の席で、話の流れで、私がドワンゴで働く可能性についての話題に向かっていった。

しかし、働くといっても、今の私は、C++の標準規格という、とても狭い範囲のみを深く学びすぎてしまった。特に、この数年間、C++の参考書の執筆をしていたのは影響が大きい。この数年、私はいかに簡潔なコードで、C++のある特定の機能の説明をするかということのみに注力してしまった。残念ながら、今仕事用のコードを書くといっても、未経験者とそれほど変わらない程度の能力しかない。それに、私は不自由なソフトウェアを使いたくないし、書きたくない。

あるいは、C++の教育を行うというのも、企業に雇われる形では難しい。というのも、たいていの企業に雇われた教育者というのは、単に社内の閉鎖的な環境に引きこもり、表に出てこない。私は、表に出せないC++の教育などしたくはない。というのは、そのような企業内の教育者は、C++標準化委員会に存在しないからだ。C++の規格を真面目に理解しようとすれば、必ず表に出てきて、議論に参加しなければならないし、いずれC++標準化委員会に籍をおくことになる。

そもそも、私が常に変わり続けるC++の標準規格の変更についていけるのは、圧倒的に自由な時間があるからだ。もし、雇われた後もC++の規格についていくためには、私はいつでも好きなときに好きなだけ、C++WGのドラフト規格や論文を読めなければならない。さもなければ、私は雇われた時のC++規格から先にはついていけない。

しかし、ドワンゴによれば、それでいいのだという。さらにドワンゴは、会社としてできることをするという。たとえば、C++標準化委員会の委員(現時点で、筆者はエキスパートメンバー、委員はスポンサーが必要)にしてくれるとか、C++の国際会議に出してくれるなどという話も出た。

私の仕事は、ブログを書くことや、C++の講演会をすることといった、C++の啓蒙活動になるという。

にわかには信じがたい話だ。しかも、いま話している場所は、非公式の食事の席である。とにかく、来月12月に、もう一度、講師として来てくれということで、その日は終わった。

2013年12月18日

さて、前回の勉強会から一ヶ月後に、また講師として呼ばれた。今回は、社内の講習会で、C++の歴史について話してくれということだった。ドワンゴの川上会長も見に来るのだという。幸い、私はC++の歴史にも興味があり、特にプログラミングの魔導書 ~Programmers’ Grimoire~ vol.1を書くときにも相当に調べたので、好都合だ。また、この機会に、C++WG JPの設立当初の人に、当時の話を取材した。

その結果書いたのが、C++の歴史というスライド資料だ。

さて、当日の私は、わざわざ外部から講師を招くぐらいだから、ドワンゴ社員の数十人もみるのだろうと考えていた。しかし、何故か当日通されたのは、机を囲んで椅子が七席あるだけの小規模な会議室。そこに、今の私の上司が座り、ドワンゴ社員が数名座り、そして川上会長が来て、いわゆる「社内講習会」が始まった。

C++の成り立ちから、C++の標準規格の制定方法までを解説し、そして、間に少し挟んだC++の機能解説を始めた。

川上会長がテンプレートに興味を示したので、テンプレートの機能を解説した。しかし、どこまで詳細に解説してよいものか。事前に、川上会長はC言語は分かると聞いているのだが、どこまでC++の詳細を理解してくれるだろうか。

どうやら、川上会長の興味は、テンプレートがどのように実装されるのかという低級な方向に向いているようだった。そこで話がコンパイラーの実装に進み始めた。ただし、なぜか川上会長の興味が低級層にあるためか、話の方向がどんどん低級よりになっていった。

江添「・・・ですから、オーバーロード関数やテンプレートといった、同じ名前で、異なるコードが生成される機能を、古典的なコンパイラーとリンカーの上に実装するには・・・」
川上会長「ああ、シンボル名に埋め込む必要があるわけか」
江添(ほう・・・)

どうやら、川上会長は名前マングリングの必要性をすでに理解しているようだ。それならば話は早い。何も遠慮するには及ばない。名前マングリングの必要性がパッと出てくるぐらいならば、他の詳細も全力を出して解説しても理解できるだろう。

しかし、テンプレートにODRの例外が認められているというところで、説明が停滞した。この部分は、かなり複雑な歴史と、コンパイラーの実装方法の経緯と進歩が関わっているので、口頭で説明するのはとても難しい。結局、この部分を理解してもらえたかどうか自信がない。

具体的な説明は、魔導書Vol.1にも書いたのだが、いい機会なので、改めて以下に書いておいた。

本の虫: テンプレートの実体化の実装方法とODR違反について

さて、数人しか聴衆のいない「講習会」が終わったあとで、別室に通されて一時間ほど話した。

私の仕事は、「C++の啓蒙」だという。このブログを書く、C++の勉強会を開くなどといった、C++の啓蒙活動だけすればいいという。

江添「私は不自由なソフトウェアを使いたくないのですが」
ドワンゴ「いいですよ、私物のPCで作業してもらえれば」
江添「私は不自由なソフトウェアを書きたくないのですが」
ドワンゴ「いいですよ、社内外へのC++の啓蒙だけすれば」

そして、C++の国際会議に出してくれるなどといった話も出た。

たしかに、もし本当にこの仕事内容であれば、私は毎日出社する必要はない。ブログは自宅でも書ける。もし本当にこの仕事内容であるとするならば、そのような極端な言葉が出てきても不思議ではないのだが、果たして。

内定通知書が届けば、ドワンゴに内定したことは公にしてもいいという話ではあった。しかし、筆者は、ドワンゴに実際に入社して、一週間ほど働いてみてから、公開しようと考えた。というのも、この口頭で交わした条件が、実際に守られるかどうかは、実際に働いてみるまでわからないのだから。

そうして、引越と引越し先の環境整備をしているうちに、とうとう、ドワンゴの入社日がやってきた。

2014年2月3日

歌舞伎座タワーに入っているドワンゴ本社に行き、必要な書類に署名をし、社内の出退勤記録などの社員管理のシステムをわずかに説明された後、私に割り当てられた机に案内されて、そして放置された。その日は少しだけC++WGの論文を読み進め、社員管理のシステムの操作方法を覚えるなどして終わった。

2014年2月4日

ドワンゴの周辺でまともな飯屋がないので、弁当を作ってから出社した。この日も論文と環境整備だけで終わった。

2014年2月5日

この日は、結構論文を読んだ。昼に食事をしながらカタンをした。

2014年2月6日

今日は、ためしに朝早く出てくることにした。なんと、午前10時に出社した。ほとんど人がいなかった。ドワンゴでは、午前10時というのは早朝なのだ。

論文を読み進める。

2014年2月7日

今日は、三叉の電源コードが欲しかったので、安いジャンク品を求めに朝から秋葉原に行った。ついでに、秋葉原を散策してみた。

ドワンゴには昼過ぎに出社した。

また論文を読む

ドワンゴの労働環境

ドワンゴの正社員には、真の裁量労働制が行われている。コアタイムはない。会議などであらかじめ予定が決まっている時以外は、何時に出社してもいいし、何時に帰ってもいい。たったの一時間会社にいるだけでも、その日は出社したとみなされる。

また、社内の労働も、相当に裁量がある。社内でゲームをしていたり寝ていたりする人までいる。

さて、そのような裁量が与えられた環境で、果たして人は真面目に働くのだろうか。これは、プログラミングという仕事においては、どうやらうまく動くようだ。

そもそも、毎日同じ時間に集合して労働するという集約労働は、単調作業には向いているかも知れないが、プログラミングという作業には向いていない。プログラミングには集中力が必要であり、その集中力は毎日決まった時間に発揮できるわけではない。そして、最高の集中状態を保てる時間というのは、それほど長くはない。

そもそも、本物のプログラマーは、余暇にも趣味のプログラミングを行うものである。本物のプログラマーが働きやすい環境を整えてやれば、自然に働くものだ。

ただし、プログラマーに真の裁量性を与えると、自然と昼過ぎに出社して夜遅くまで働く形になってしまうようだ。ドワンゴでは、11時から昼過ぎにかけて出社し、午後9時頃まで働く人が多い。

さて、こうして一週間出社したが、どうやら事前の話の条件は守られているようだ。

そもそも、今はちょうど2014-01 pre-Issaquah mailingが公開されたばかりだ。このブログで恒例の簡易レビューを書かなければならないが、今回は、50本以上もの論文があり、多くがC++17への提案論文なので、相当に時間がかかる。また、仕事としてやる以上、いつもより丁寧に読みたいし、「私はコア言語が専門だからライブラリは知らない」というわけにもいかない。今まで読み飛ばしていたライブラリの論文も読んでいるので、今回の簡易レビューはかなり時間がかかる。

そういうわけで、ブログを書くという話で入社して一週間、まだC++の記事は何も書いていない。たまたまC++WGの論文集が出る時期にあたったからだが、私はひたすら論文を読んで簡易レビューを書き進めているだけなので、単に机に座っているところだけを見ると、仕事をしているのかサボっているのかさっぱりわからないように見えるはずだ。

ところで、ドワンゴ社内の環境は、ブログ執筆のためには、自宅に劣らないほどよい。というより、今の自宅は、まだまともな椅子と机とディスプレイを揃えていないので、ドワンゴ社内に劣っている。早く自宅も快適な環境にしなければならない。

仕事

筆者のドワンゴにおける仕事は、C++の啓蒙活動だ。

具体的には、ブログを書くこと、C++の講演会をすること、ドワンゴの宣伝、そして、最大の目標が、「日本のC++の教育を再び活性化させること」だ。

この最大の目標をどうしたものか。今や、教育機関に、C++標準化委員会に籍をおいている者がいない。C++の規格に詳しいものが現状でいない以上、C++の教育など絶望的だ。教育を活性化させるには、C++プログラマーの働き口を増やさなければならない。それはドワンゴ一社のみでは難しいので、日本の企業全体を巻き込まなければならない。しかし、それも難しいのだ。現状の日本では、C++が使われている職場では、C++未経験者を雇って、やっつけ仕事をさせることが常態化している。C++の文法がわからず、何時間もコンパイラー(それも不自由で規格違反だらけのコンパイラー)にあてずっぽうで適当なコードを通そうとやっきになっている。残念の極みである。

日本では、標準規格の価値が理解されておらず、閉鎖的な独自仕様で囲い込んだ挙句、標準規格を作った海外勢に押されて負けるという歴史を繰り返している。ああ、いつになったら学ぶのか。

この現状を、どうやって変えていけばいいのだろうか。目標があまりにも巨大で漠然としていて、どこから手を付けていいのかわからない。とにかく、できることをしなければなるまい。さしあたっては、C++の解説記事を書くことと、C++の講演会を開くことにする。

ドワンゴ広告

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0