C言語につまずいた高校時代

西村:ということでTwitterのソフトエンジニアというお話から、ひげぽんさん自身のお話に移らせていただきたいと思うんですけれども。

OSを作ってIPAの未踏で採用されて、最後はスーパークリエイターにまで認定されてと、いわゆるハッカーだと思うんですけれども、そういうふうに周囲からハッカーと言われることに関して、ご自身はどう思っておりますか。

蓑輪:自分はハッカーだとは思っていなくて。それはなんでかというと、本当に目標とするハッカーの人たちがいて、その人達にはまだ到底及ばないという感じですね。なので自分ではハッカーと思っていません。またそこに至る過程という感じです

西村:なるほど。ご自身ではそういうふうにご覧になられているという話ですけど、もっと上がいると。でも、一般的にご覧になってる方からしたらハッカーだと思うんですけども、子供時代のコンピューターとのつき合いというのは、いつぐらいからコンピューターに興味をもたれたんですか?

蓑輪:最初に興味を持ったのは、父親の職場に遊びに行った時に仕事用のパソコンが置いてあって。職場見学に行く感じだったのですけど、父は仕事があるので忙しい、そのパソコンでゲームしていなさい、みたいな話になってそこで簡単なゲームをしたのが出会いだったと思います。

それから、中学高校くらいのときにゲーム目当てでパソコンを買ってもらって。僕の家庭は厳しくて、その頃流行っていたファミコンとかも買ってもらえなくて……ゲームは頭が悪くなるという感じで。

すごい肩身が狭かったですけど、そのパソコンは勉強に使うからという名目でおねだりして、それでゲームをしようみたいな作戦で買ってもらって、そこから触り始めたのが本当にパソコンを初めて触ったときですね。

ただプログラミング自体はチャレンジをしたんですけれども、画面に円を出すとか、それをちょっと動かすぐらいで止まってしまって、ご覧になっている方はわかるかもしれないんですけれども、C言語でポインタっていう難しい概念があるんですけれども、それが一切理解できなくて、これはゲームやっていた方が楽しいねってことに。

西村:Cでポインタにつまずいたのは、だいたい年齢で言うと?

蓑輪:高校生くらいだと思います。

西村:振り返って考えると、挫折したというかポインタで悩んでしまった理由とは、見てる方も関心があると思うんですけれど。

蓑輪:結局、本で勉強したんですけど、周りにわかってる人は1人もいなかったので聞けなかった、というのが大きいと思います。ちょっとでもヒントがもらえれば、もしかしたら理解できたと思うんですけれど。例えばポインタは箱であると説明されて、箱を指さしている絵があるんですけど、これではなにを言ってるのかさっぱりわからないと。

学生時のコードを今振り返ると?

西村:ある意味、ご覧の方々に勇気を与えられる発言かもしれませんね。っていうのは、やっぱりひげぽんさんですら躓いたことがあるというのであれば、ということですね。なるほど。一度はC言語ですぐ限界がきて、そことOSだ言語処理系だというのはものすごい差があるような気がするのですが、そこの間はどうやって埋まるものなんですか?

蓑輪:そこからは、大学4年生のときに配属された研究室があるんですけど、そこがパソコンを1人1台学生に支給するという研究室で、その時に研究室の研究内容にあまり興味が持てなくて……。

西村:大学は専攻は物理。

蓑輪:専攻は物理ですね。

西村:物理系の研究室に入ってコンピューターをあてがわれた。

蓑輪:そうですね。その時に、研究する代わりに仕事をしているフリではないですけれども、プログラミングをして。そのときにやっていたのはJava。ちょうどはやりはじめのころで、Javaでオセロのゲームを作ってそれを他の友達とかにやってみてな感じで作ったのが、本格的にプログラミングを始めたきっかけですねですね。

西村:じゃあJavaを独学ですか。Javaを独学でオセロを書いたころには、またポインタというのはモヤっとしてたんですか。

蓑輪:そうですね。まだわかってなかった。

西村:そういう意味で言うとJavaは偉大ですね。ポインタないっていうと怒る人いますけれども。

蓑輪:参照ですね。参照だとわかったんですけれども、数字に結びつかないじゃないですか。ポインタは数字でアドレスで。

西村:32bitだったり、64bitだったり……。

蓑輪:じゃなくて、参照はさしてるものですよ、って感じだったので。

西村:ポインタ演算もないですしね。

蓑輪:そうですね。

西村:変なことはできないということですね。そこでオブジェクト仕様とかグラッフィックの扱いだとか、変な質問の仕方ですけど、今のご自身がそのときのオセロのソースコードを見たらどう思うと思いますか。

蓑輪:かなりひどいと思いますね。それはなんでかっていうと、悪いコードの典型例。例えば一つの関数がすごい長いとか、コメントは一切ないし、多分いわゆる境界条件というものをテストしていないとか。

この変数が一番大きい値になったときにちゃんと動くかな、みたいなのを多分やっていないと思いますし、たぶん複数のファイルに分けなきゃいけないプログラムもひとつのプログラムにずっと書いてたりとか、いろいろあると思います。

テストファーストのメリット

西村:ちょっと話飛んじゃうんで恐縮なんですけど、今テストの話をされたのでまたちょっとTwitterの開発の話にちょっとだけ戻させていただいて。ご覧なっている方もしかしたら興味あるかもしれないですけど。

最近、テストファーストとかっていわいるプラクティスがすごく流行っていて、テストコードを書いてからどういう機能であるのかまず認識して、プロダクションコード書くという。Twitter社あるいは蓑輪さん自身が、携わるときにテストファースト開発的なことってやられることってあるんですか?

蓑輪:もちろんあります。あと同僚もそういう風にやってる人をよく見かけます。

西村:割合とかどうですか。例えば、全部が全部テストファーストってのはちょっとやり過ぎじゃないか、って議論がよくあると思うんですけど、私は実はそう思ってたりするんですけど、実際のとこどうですか?

蓑輪:そうですね。それは、今から作ろうとしているものがどれだけ明確なのかによって違うかと。あまり明確でないなら、テストファーストみたいなTDDでやったほうがいいと思う。それはなんでかっていうと、テストの過程でいろいろわかることがあるからですね。

例えば、今からデザインしようとしているものがちょっともやもやしてるけども、先にテストを書いてみると「このオブジェクトはこういうインターフェースなんだ」「きっと戻り値はこれで」「ああ、なるほど」とこういうふうに例外が挙げられるので、テスト書きながらわかってくることで、そこがいわゆる設計の助けになると。

逆に、もう作るものが明確に決まっていて、例えば、この関数を3行ぐらい変えたらこの機能がうまくいく、とかわかっている場合は、パッとそっちのコードを書いてからテストコードとかあります。

西村:なるほど。まあ場合によりけりですね。

蓑輪:そうですね。

西村:設計フェーズで、いわゆるIT業界って言い方をすると、上流工程、いわゆる要求の聞き取りだったり、そういう世界も経験されてるのでご存じだと思うのですけど。

その要求があって、外部設計・内部設計とかそういうウォーターフォール的な、ソフトウェア工学っていうんですかね? と、現在Twitterでやられているような、或いは趣味でやられてるようなソフトウェアの開発とかって、重なってる部分、あるいはぜんぜん違うみたいなことで言うと……?

蓑輪:そうですね。趣味と今の仕事は、だいぶやり方が同じだなと思います。それはなぜかというとエンジニアの裁量がすごく大きいので、世の中に出すプロダクトのデザインは、プロダクトマネージャーともちろん相談しますけども、実装に係るのはほんとにエンジニアに委ねられるので。

本当に自分で考えて設計して、ウォーターフォールの言葉でいうと外部設計して内部設計して要求仕様がなんとかと、全部考慮した上の成果物をポンとコードとして書くみたいなやり方なので、それは自分の趣味でやってるオープンソースプロジェクトもTwitterの中のやり方もそう。

Mona OS開発スレには専門家もいた

西村:オープンソースの方に話をふらせて頂きたいんですけども、趣味でオープンソースのOSをいきなり開発を始められたのが2002年ということで、その時にはOSの知識はなんと全くなかった。

蓑輪:なかったですね、はい。ほんとに。

西村:どうやって始められたんですか。

蓑輪:それは、2ちゃんねるで質問したというところからですね。OSを作るにはどうしたらいいんですか、と質問するところから始めましたね。

西村:その話はうっすらと伺ってるんですけど、それで本当にうまくいくっていうのはちょっとそこは距離が大きくてなかなかわからないんですけども、2ちゃんねるでOS作ってみようと思って宣言したと。

蓑輪:そうですね。書き込んだスレッドが確か、プログラミング関連だったかOS関連だったかわからないんですけど、まあそれなりにそういうプロフェッショナルの人たちがいるところだったんで、ちゃんと質問すれば答えが返ってくる、という環境ですね。

ちゃんと質問するってのは、全部丸投げじゃなくてある程度調べてから「こうこうこう思うんだけどどうかな」っていう質問の仕方をすれば、ちょっと口調は悪いけれど温かい人たちが返してくれる。そういう環境でした。

西村:ちなみにその頃、いろいろ指摘してくれたり教えてくれたりした人っていうのと、実際リアルにお会いしたこととかっていうのは?

蓑輪:もちろんあります。何人かはお会いして、今でもお付き合いがあったりとか。

西村:実はその中には結構、専門家もいたりするんですか。

蓑輪:はい、いましたね。本当にOS開発をされてる人もいたり。

西村:本当にOSをやっている人、じゃあ大学でなにかとか?

蓑輪:その人は組み込み系のOSですね。例えば自動販売機とか携帯電話に入っているようなサイトのようなOSを作っている。

西村:組み込みについてわからないんですけど、組み込みOSを作るって仕事があるんですか。TRONを使ったりLinux使ったり、ありモノを使うのかと思ったんですけど。

蓑輪:その当時はまだ、それこそTRON関連のなにかでっていう人もいたりとか。

西村:本当にある意味、本物。

蓑輪:そうですね。本物。

西村:すごいですね。手取り足取りっていうかちゃんと教えてもらって。

なぜOS開発を思い立ったのか

西村:お話前後しますけど、そもそも2002年にこうやって、思いつきにしろそうじゃないにしろ、覚悟がどれぐらいあったのかちょっとよくわからないですけど、OSを作ってみようと思ったのはなんかこう、例えば昼の仕事は嫌すぎたとか、そういう反動みたいなのあるんですか?

蓑輪:ひとつは大きな危機感があって。それは最初に入った会社で、すごい良い会社だったんですね。

西村:システム開発でいいんですかね、最初の会社は。

蓑輪:システム開発の会社で、僕は大学の時にちょっと趣味でプログラミングをしてたので、それもあってプログラミングが得意な人たちがいるチーム入れてもらえたんですね。

そこで仕事をしていく中で、やっぱりよくできる人はものすごく勉強する人だってというのがよくわかってきて、例えば仕事以外でも技術書を読んでいますし、趣味でいろいろ作ったりして、その中でその会社の中ではキャリアパス的に、エンジニアとかプログラマーはそのうちマネージャーになります、っていうのしかなかった。

なので、このままいくと僕は本当はプログラミングが好きなんだけどマネージャーにならなきゃいけない。それは無理そうだし個人的に嫌なので、だったらプログラマーとしてもっと技術を高めてあの会社で働けるようにならなきゃいけない、っていう危機感があって、そこで題材としてOSを選んだ。

西村:それが20代半ばとか。

蓑輪:そうですね。24とか5ですね。

西村:それで始められて、どれくらいで形になったんですか。

蓑輪:正直今も形になっていないですけど。いろいろ協力者の人たちがいっぱいいてくれて、ウィンドウが立ち上がるようになるのに2年ぐらい。

西村:最初にGUIでウィンドウが立つようになった時はやっぱ感動。

蓑輪:そりゃ感動しますね。あと何か文字が打てるとか。それこそちょっと顔文字が出るだけで嬉しいとか。やっぱ写真が表示できた時が一番嬉しかった。

西村:写真っていうのはJPEG?

蓑輪:JPEGです、はい。

西村:JPEGの既存のCがちゃんとコンパイルできた、とかそういう。

蓑輪:それは、JPEGのデコーダーを協力者の人が書いてくれて、その逆の方面では僕がグラフィックの部分を必死にドライバーみたいなのを書いて、たくさんの色数でたくさんのピクセルで画面が表示できるっていう感じになったんで、その成果が綺麗な写真として出てきたのがすごい嬉しかったですね。

制作協力:VoXT