ハッカー養成塾!: 入塾案内
この文章はOpen Source Magazineの2006年4月号に掲載されたものです。
名前
太田一樹(おおた かずき)所属
東京大学理科一類2年(理学部情報学科内定)アクセス
mover@hct.zaq.ne.jpweb: http://kzk9.net/
blog: http://kzk9.net/blog/
プロフィール
現在大学2年生。オープンソースの分野ではKDEやuim等、主にデスクトップ環境周りでの開発に参加している。はじめに
前回の高林先生からバトンを受け取った太田です。若い人にも登場して欲しいという事でバトンを頂いたのですが、正直僕は講師というよりは完全に塾生側の人間です。プログラミングに関してもまだまだ経験が浅いです(大体4年ぐらい)。そこで、僕が如何にしてハッカーコミュニティに参加するようになったかという過程を振り返り、色々な方に入塾して頂きたく記事を書いてみたいと思います。プログラミング事始め
奈良県内某高校に在籍していた僕は、高校1年生の春にDocomoの携帯電話端末N503iを買いました。これはiAppliが初めて搭載された機器です。何を思ったか僕はiAppliを作ってみたい!という衝動を抑えきれず、Javaの本を買ってきて必死でミニゲームを作り出しました(注1)。これが初めてのプログラミング経験となります。Linuxとの出会い
高校2年生になったとある日、Windowsでちょっとしたゲームをやりたいなぁと思いゲームCD付き書籍を購入しました。早速家のPCに入れてみましたが、インストーラーが見付かりません。あれ?と思い書籍をめくると、次のような文字を目にします。「対応OS: Linux」。
なんとかこのCDを無駄にしたくないと思った僕はすぐさま本屋に舞い戻り、UnixUser誌(注2)を手に取りレジへと向かいます。表紙には「VineLinux2.5付属」の文字が踊っていました。慣れない手つきでパーティションを切り分け、色々苦労しながらLinuxをインストールし、無事にゲームをする事が出来ました。初めてパーティションを切った時はパソコンが壊れやしないかとドキドキしたものです。
Linuxのインストール方法を調べている過程で、Linux上ではCUIが非常に充実している事を知ります。暫くすると自然とcdやlsといった基本的なコマンドを使いこなす様になりました。また、Emacsという一風変わったエディタにも手を染める事になります。最初は変則的なキーバインドに戸惑ったものの、エディタの高いカスタマイズ性に感銘を受け、"括弧が一杯付いた変な文字列"をweb上で見付けては自分の.emacsに張り付けていました。
ハッカー見習いへ
暫く使っているとLinux環境ではCUIこそ充実しているもののデスクトップがいまいちだなぁと思い始めました。ある日デスクトップ環境Gnomeの最新版がリリースされている事を知ります。これは試すしかない!と思い、aptからのインストールを試みましたが、依存関係が壊れてしまい上手く行きません。そこで、もう一つのデスクトップ環境KDEの最新版をインストールする事にします。今度は上手く行きました。しかしやはり細かい挙動が気になったので、もう少しKDEについて調べてみます。するとどうやらC++という「オブジェクト指向」言語でKDEが書かれているという事を知ります。なんと。
「オブジェクト指向」の考え方は昔かじったJavaにも有るし、KDEのソースコードも公開されているし、もしかしたら気にくわない部分を自分で直せるかもしれない!と思った僕は、CVSの使い方を覚え最新のKDEのソースコードを手に入れます。開発系のMLにも加入し、主要開発者の意見やコードを眺める日々が始まりました。
よしこれで自分の不満な所を直せる!と意気込んだのですが現実はそんなに甘くは無く、KDEのソースコードに突撃即撃墜され、真剣にC++の勉強を始めます。自分で小さなQt/KDEのアプリケーションを書いたりしている内にプログラミングに対する知識も増えてはいましたが、KDE Projectにパッチを投げて3回程rejectされて落ち込んだりもします。しかし、パッチ作成の過程で色々な人にアドバイスを貰っている内に自分のプログラミングスキルがどんどん向上して行く事に気づきます。この時期にはKDE projectのcommit権を貰い(注3)、khtmlの日本語処理周りの改善を行いました(エンコーディング自動判別精度向上、禁則処理の実装、行頭の全角空白文字の扱いの改善)。こういったローカルな機能のバグ報告はパッチが添付されていても放置をくらう傾向が有るので、commit権を行使して独断でcommitしました。初めてcvs commitした時は手が震えていた記憶が有ります。
その後無事に大学に入学した僕は東京へ移動し、今までアドバイスを頂いていた人に直に会って話す機会を持つことが出来るようになりました。レベルの高い人達に囲まれる事で、自分自身のスキルがさらに向上して行く事に気づきます。この時点でハッカー養成塾に晴れて入塾となりました。それから約2年が経ちましたが、現在も日夜ハックに取り組んでいます。
入塾に当たり必要なもの
- PC1台
物的資源はこれだけです。僕自身、もう3年ぐらいThinkpad一台で過ごしています。
- 言語能力
2006年度ハッカー養成塾の最重要科目は「英語」と「国語」です。
-
やる気
パッチはやる気の結晶です。プログラミングスキルは後から付いてきます。とにかく問題に気づいたらそれを指摘する場を持ち、それを公に公開し、人に意見を貰える状態にする事が重要だと思います。その為の手段はMLでも良いし、blogでも良いです。大規模なプロダクトのソースコードを追う場合は行数にビビらない事も重要です。まずはUNIXコマンドを駆使して問題箇所を大まかに特定し(註4)、問題箇所と思われる部分のパラメーターを変えたりログを吐かせたりしてコードの動きを少しずつ捕えて行きます。時間さえかければ該当個所はほぼ見付かります。
しかし僕の場合は実地的な経験ばかりを蓄積していたのですが、良書をじっくりと読み、教科書的な知識を蓄える事の重要性に最近気が付かされました。どうしても"ある程度動くコード"を書くようになってしまうので問題です。今は前よりも読書量を増やし、確固たる知識に裏付けされたコードを書く目標にしています。という訳で本を一冊読みとおしてやる!というやる気もかなり重要です。
塾の雰囲気
塾内では、お互いを「先生」と呼んでいる光景を目にします。ここには「皆で成長して行く」というこの塾独特の雰囲気が感じます。本当に、周りの方々全員が先生です。
一般的には「ハッカー」というと言葉数が少なくひたすらディスプレイに向かっている印象が有りますが、実際にはコミュニケーション好きの方が多く、気さくでノリの良い人達ばかりです。お酒もいける口の人が多いです(酒を飲んでも話題は一緒ですが)。バザール形式の開発ではコミュニケーションが非常に重要な要素になって来るので、コミュニケーション好きの人達が集まるのかもしれません。
塾生
塾生は日本だけに留まりません。世界中のハッカーがwebを通して繋がり合い、お互いを高め合いながらソフトウェアを開発しています。IRCチャンネルに行けば各国の名だたるハッカーと生の会話を繰り広げる事が出来ます(英語は必須ですが)。ディスプレイの向こうには膨大な数の凄腕ハッカー達がいます。僕なんかは凄い人見たさで色々なIRCチャンネルに入って会話をウォッチしています。あんな有名人やこんな有名人の生の声が聞けるのは感激します。そのうち自分もその域に達したいですね。
さいごに
最後に色々と疑問に思っている事を吐き出してみます。
僕は大学の情報系学科に内定しているのですが、当然周りには高度なプログラミングスキルを持った人がいます。しかし、オープンソースの世界に係わっている人はというと僕しかいません。この様な状況に疑問を感じると共に、もっと色々な人にオープンソースに係わってほしいなと考えています。学校の課題に対してマニアックな解法を突き付けるのも楽しいですが、もうちょっと世の中に役立つモノを書いてみませんか?と言いたくなります。学生は時間も有り余っているのに何故あんまりOSS界に係わって来ないのかなぁと常々考えているのですが、理由が未だに良く分かりません。特に高校生はもっともっと時間が有ります。高校生の内から大規模なソフトウェアの開発現場に触れることが出来るというのは人生において非常に良い経験になると思うので、高校生にもどんどんOSSの世界で活躍して頂きたいと思っています。
もう一つ大学生として疑問を感じているのは、アカデミックな世界ではどうしても論文を重視し、実装を軽視する傾向が有るという事です。また実装をしてもベンチマーク結果等を載せるだけで、実際のコードを公開しないケースが多いような気がします。僕が研究室に配属されてアカデミックな世界への一歩を踏み出せばその理由も見えてくるのかもしれませんが。
次回は
僕と同い年ですが extra ordinary なスキルの持ち主である井上 純さんにバトンを渡したいと思います。彼にはいつもblog上でしごかれています。それでは、Happy Hacking!
注釈
(1) 当時は総プログラムサイズが10k未満という制約が有り、色々な手を試していました。Javaなのにオブジェクト指向を使用しないとか、ループ変数をstaticに宣言したりとか、色々職人技的な技巧をこらした記憶が有ります。さらに機種依存も激しく、周りの友達に動作テストを頼んでいました。
(2) 当時はこの雑誌に記事を書かせて頂けるとは夢にも思っていませんでした。人生って分からないものですね...。
(3) official committerというと聞こえは良いですが、メールを一通投げればcommit権が貰えます。ちょこっとした理由付けと、多少の勇気が必要でした。
(4) 僕の場合はまず"find . -type f | xargs grep -e keyword"という感じでkeywordを色々変えながら該当個所の目星を付けます。