Ruby合宿2011に参加した
目次
- きっかけ
- 僕は重度の臆病者で
- 人に教えること
- 複数人でつくること
- 1番大事にしたいこと
- おしまい
出来るだけ素直に書こうとしたら、文体が中学生っぽくなったので注意して読んで。
8月8日から8月12日までの5日間、僕は島根県で行われるRuby合宿というイベントに参加した。これは島根県主催で行われてるイベントで、5日間でRubyを基礎から学べる合宿だった。県としては島根県内IT企業への就職機会を増やすという目的もあったんだけど、参加者の目的の大部分はやはり、プログラミング言語Rubyの習得にあった。
きっかけ
僕もその1人で、Rubyのことを知るためにこの合宿に参加した。僕は普段、少しだけRuby on Railsを使ったことがあって、その中で使われているRubyという言語に興味があった。僕がRailsに出会ったのは2年ほど前のことで、当時の僕はまだプログラミングを知らなかった。大学でたまたま出会った先輩にRailsを教えてもらって、ほんの少しコードを書いただけでWebサイトが作れることに感動を覚えた。
それから半年後、僕はとある人の依頼で、「今、震災について思うこと」を集めた19950117.jpというサイトをRailsで作った。その後、pray4japan.heroku.comと、大学で僕達が行ったプログラミングコンテストのエントリサイト、DoshishaNow、Mioといった4つのサイトをRailsで作った。Railsに初めて触れてから2年、僕は自分の作りたいサイトをある程度形に出来るようになっていたけど、Ruby自体の理解は本当に浅く、本当の意味で作りたいものを作ろうとすると、どうしても言語の壁が立ち塞がっている気がした。
そんな中、twitterのTLでたまたま目にしたのが今回のRuby合宿で、迷わず応募した。応募してから、開催地島根って書いてあったの見たけど、国内でホッとした。予定は後から無理矢理空けた。これが、今回の合宿に参加したきっかけ。
合宿先からは宍道湖が広がってるのが見えて落ち着く。ちなみに松江市かと思ってたら出雲市だったらしい。
僕は重度の臆病者で
Ruby合宿の参加者は25人で、そのうち全員が学生、2割が女子、8割が男子だった。今回の合宿で、僕は出来るだけ、皆とフランクに話そうと努めた。
実は僕は重度の臆病者で、相手に嫌われることを本当に恐れているので、自分から人に話し掛けないという選択肢をいつも取る。所謂非コミュ、ぼっちに属するタイプの人間だと思う。別にそれでも構わないと思ってた節があったし、どうせ人は1人で生きて1人で死ぬ、みたいな厨二感溢れる気持ちがあったんじゃないか。ウケる。
実際、この性格は損ばかりで本当に何も得をしないと自分の中で明確に意識したのは、Ruby会議に参加したとき。そこには凄いエンジニアが沢山居て、皆深くて広い知識を持っていて、この人達に話し掛けないのは本当に勿体無いことだと思った。それは、何も凄いエンジニアに限ったことではなく、その人が生きてきた固有の背景に伴う知識というのは誰でも持っているものだった。それをもっと知りたいと思うようになった時から、人に話しかけることの恐れよりも、興味や好奇心が勝るようになった。
だから今回の合宿では、集合場所でたまたま隣に居た@kenkeennにもどこから来たのって話しかけたし、まつもとさんにも一緒に写真撮ってくれって話しかけたし、サーバの実装で困ってる子にも一緒にやるかって話しかけた。
普通の人にとっては本当に当たり前のように出来ることなのかもしれないけど、本当に体力使った。超頑張った。たぶん合宿で会った人には気付かれずに上手くやれただろうし、ああ、人はこうやってリア充になって爆発するんだろうなと思った。
初日の集合先で、普通っぽい部屋に入ったらいきなりまつもとさん居て驚いた…。
人に教えること
合宿参加者は、まだRubyを触ったことがない人が多かった。高校受験の時から、人に教えながら勉強するということの効果を強く信じていたから、それはプログラミングも例外ではないと思って試した。幸いにも僕はある程度Rubyの基礎文法は知っていたから、適当に人を捕まえて、その子に教える感じで『たのしいRuby』を読み聞かせたりした。
『たのしいRuby』は半分くらい読み進めたところでクラスの概念を取り入れてくるんだけど、僕はクラスの理解が全くなっていなくて、上手く説明できなかった。Rubyには色々な便利なメソッドがあってそれを使いこなせば色々出来るんだ、ということくらいしか伝わらなかったと思う。クラスも理解せずによくオブジェクト指向だらけのRubyを使ってたなと思う。まあ、そういうところを理解しなくても使える手軽さがRubyの良い所なんじゃないですかね。(キリッ
その後、自分の理解の乏しさに何となく腹が立って、部屋に戻って消灯時間が来た後、『たのしいRuby』を読み終えて、更に持ってきた『メタプログラミングRuby』を読み切った。この本、僕と同じく合宿に持ってきてる人が3人もいて、きっと良書なのだろうなと思って読み進めたら本当に良書で、気付いたら朝まで読んでた。Rubyやったことあるけどまだこの本を読んでいない人、さっさとAmazonを開いて注文して読んだ方がいい。それでようやく、クラスの何たるかを理解したし、やっと人に説明できる程度の能力が付いたと思う。常にselfを意識するようになったし、常にクラスの継承ツリーを意識するようになった。
次の日からは、班に分かれてゲームを作り始めた。今回の合宿は、ネットワークを利用したゲーム作りを題材にして、オブジェクト指向を学ぼうという内容だった。その日、自分の班のゲームのサーバ/クライアントのコネクション部分を完成させた後、夜に他の班の子にサーバ部分の作り方を教えた。さて説明しようとしたところで、サーバ部分の実装が実はどう動いているか、自分が理解していないことに気付いた。
だからそこで、彼女に説明するという形を借りて、少しずつ言葉を紡ぎながらサーバとクライアントの仕組みを整理した。君の班が作っているのは人生ゲームで、各プレイヤーが順々にサイコロを振って、画面上でイベントが進行していく。ゲームが進むのはプレイヤーが何かした時だけだから、サーバ側は単純に全員の知るべきデータを登録/取得するための機能だけ持てばいい。ざっくり言えばサーバは、プレイヤー全員が共有している「ゲームデータ」という名の変数だと考えればいいと思う。プレイヤー側は、1秒ごとにサーバからゲームデータを取得し、画面に描画する。自分のターンであれば、ボタンを押すことでダイスを振り、ダイスを振って更新した後の自分のデータをサーバに登録する。
こんな感じの絵を描いた。ひとしきり説明したところで、ようやく自分で仕組みを理解した。カーニハンの「プログラミング作法」の中にベア(bear)プログラミングというのがあって、物事の仕組みが上手く分からないとき、誰でも、それこそ机の上のテディベアにでも良いので誰かに語りかける口調で説明することで、自然と自分の中で頭が整理されるというやつだ。でも彼女の場合は「おお」「なるほど」とか「どういうこと?」とか「もういっかい…」とか、人間らしい反応をくれるので、より深く、より分かりやすく整理する必要があるし、何よりちゃんと伝わったときの純粋な楽しさがあった。恥ずかしいので直接伝えてないけど、彼女の向上心と率直な意見のお陰で理解が進んだし、本当に感謝してる。
複数人でつくること
複数人で何かつくるの、多分初めてだったと思う。うちの班は5人で、自分以外には、Rubyがよく書ける人が1人と、Rubyは初めてという人が3人居た。奇数なのがまた絶妙なアンバランスさで、同時に作業するのに3人は多いし、1人では負担が大きいし、片方を2人にすると片方が3人になるしで困った。
結局、僕以外の4人を2人ずつに分けて、僕は勝手に立ち振る舞うことにした。それは結果的に良い判断だったと思ってて、僕は遊んでるふりをしながら少し強引に進める必要のあったサーバの実装を初日に終わらせることが出来たし、他の組は描画とロジックに分かれて順調に開発を進められたと思う。
途中不味かったのが、少し大きな問題に躓いたとき、僕ともう1人のよく書ける人が2人でペアプロを始めてしまったことだった。その時の雰囲気を説明するのは難しいけど、指示する人を失った時の班は何となくまとまりがなくなっていたんじゃないかと思う。恐らく作業のなくなった人には「私は貢献していないのではないか」という負の気持ちを抱かせてしまった。もともとプログラミング作業は無意識下に精神力をかなり消耗するものなので、少しの不安が大きく疲労感を与えたと思う。もっとこうやれたみたいなの色々あるけど、総じて1人では得られないことだったから、失敗するために成功しようとしたのだから、本当に良かった。
最初にかっこ良く設計しようよーって言って、メンバーと一緒にホワイトボードに描いた設計図の一部。主に設計を考えてくれたのは同じ班の林田くんという人で、TDDBCとか参加してるらしく、@t_wadaさんとペアプロした時にサクサクRspec書く姿に憧れたらしい。彼が「俺がテスト書くからそれを実装するコードを書こう!」って言ってて、それがすげーかっこ良かったのを覚えてる。
1番大事にしたいこと
プログラミングをするとき、1番大事にしたいことは、楽しさだと思った。曖昧な指標で測りづらいけど、楽しいか楽しくないかは自分が知ってるし、いま楽しいか?を常に問い続けることは出来る。ゲームをつくることになったとき、班のメンバーと一緒に、大きなホワイトボードにゲームの設計図を書いた。純粋にものづくりをしている気がして楽しい時間だった。詰まらないときがあったけど、そういうときは必ず、間違ってることをやってる時だった。みんなの書いたコードをマージした時、例えば内部処理と描画処理が上手く噛み合わさってゲーム画面が表示されたとき、おおってなって楽しかった。徹夜して一緒にゲームサーバつくってて、少しずつ出来ることが増えていったとき、眠かったけど、本当に楽しかった。偉い人たちの前でプレゼンしたときですら、僕は楽しんでた。
おしまい
バラバラになったけど、とにかくRuby合宿の感想はこんな感じだった。今回Ruby合宿で一緒に集まれた人達、自由時間少なくてちゃんと話せなかったから、これからもまた話したいし、twitter:@r7kamuraとかにてきとーに連絡くれたら嬉しいなーと思ってる。
学び続ける限り楽しいこと待ってるし、怖いのは寿命が尽きてしまうことだけだと思う。