2014/06/22にプログラミングが好きな学生のためのリーダブルコード勉強会を開催しました。後述の通りチャレンジングな目標設定にしたので、学生のみなさんがついてこられるのかという点が不安でしたが、9割以上の参加者が満足し1、半数以上の人がこれからコードを読んでいこうという思いを持ってくれたようです2。このため、この勉強会で目指していたことは達成できたと言えます。よかったです。
そんなプログラミングが好きな学生のためのリーダブルコード勉強会の内容を紹介します。2週間後の7/6にも同じ内容の勉強会があり、まだ応募できるので、面白そうだと思ったらまわりの学生さんに勉強会のサイトを紹介してあげてください。
目標
この勉強会では、リーダブルコード(本)に書いているようなリーダブルコードの書き方や、本に書いていないようなリーダブルコードの書き方を伝えることは、「しないこと」にしました。
そうではなく、リーダブルコードを見つける方法を伝えることにしました。
これは、勉強会当日のことよりも、将来を重視したためです。
リーダブルコードの書き方をたくさん伝えることで、勉強会当日だけのリーダブルコード力の増加分を最大化できます。レベルアップが実感しやすいので学生のみなさんの満足度もあがるでしょう。
しかし、当日だけのレベルアップ分の最大化を目指すことはやめました。もっと学生のみなさんのためになることがあると考えたからです。それは、当日だけではなくもっと長い目で見たときによりレベルアップしていること、です。プログラミングが好きな学生のみなさんなのでこれからもプログラミングを続けていくことでしょう。そのため、将来まで考慮することは妥当なことだと判断しました。
よって、たとえ当日のレベルアップ分は少なくなったとしても、勉強会後もレベルアップするための方法を伝えることを目指すことにしました。
当日のレベルアップ分の最大化ではなく、勉強会後もレベルアップするための方法を伝えることを目指すことにより、勉強会当日だけでみればレベルアップ分は小さいとしても、将来を見据えればレベルアップ分は大きくなるはずです。これを目指すことにしました。これがチャレンジングな目標設定だとは認識していて、正しいことだと確信していますがうまくいくか不安でした。
内容
勉強会後もレベルアップするために、「既存のコードからリーダブルなコードを発見する方法」を伝えることにしました。それにはコードを読む習慣が必要です。コードを読まないと既存のコードから発見することはできません。何もないところから新しく作り出す3ことはできても、見つけることはできないからです。
そこで、この勉強会では、強制的に読む機会を作ることにしました。こうすることにより「どうやって読めばよいのか」を学んで、勉強会後は自分で読めるようになることを目指します。
強制的に読む機会を作るために、次のように実装を他の人と交換して開発を継続する流れにしました。
-
午前: 各自で1から課題を実装
-
午後: 午前中に作った課題を交換し、他の人の実装を元に課題の実装を継続する
他の人の実装を元に課題の実装を継続するので、他の人がどのように実装していたかを読んで理解する必要があります。これが「強制的に読む機会」です。
この読む機会を通じて「既存のコードからリーダブルなコードを発見すること」を体験してもらいました。
既存のコードからリーダブルなコードを発見する
既存のコードからリーダブルなコードを発見することは難しいことです。リーダブルじゃないコードを発見する方がよっぽど簡単です。なぜなら、リーダブルじゃないコードはいびつなので目立つからです。目立っているのですぐにはっけんできます。
一方、リーダブルなコードはわかりやすく書かれているので簡単に理解できて読んでいてつまづきません。そのため、気づかずにスルーしてしまいます。コードを読み慣れていない人は、よっぽど意識していないと発見できません。
この勉強会ではリーダブルなコードを発表する時間を設けることにより、「意識してリーダブルコードを発見すること」を体験するようにしました。
学生のみなさんが発見できるのか不安だったのですが、実際にやってもらったところ、みなさん1つ以上発見していて驚きました。意識してやってもらうとできるようです。勉強会の実施側としてこれは有用な発見でした。
次のステップ
当日、参加した学生のみなさんに伝え忘れたことがあったのでここに書いておきます。見つけたら、他の参加した学生のみなさんにも教えてあげてください。
今回の勉強会では、自分の実装がその後どうなったのかを確認する時間をとりませんでした。今回は「書く、読む、書く」のサイクルを1回だけ実行する時間しかなかったからです。2回目以降はこれからそれぞれが実行していくことを期待しています4。
次のサイクルとして以下のことを実行してみるのはどうでしょうか。
- forkされた自分の実装からさらに開発を継続
- グループのさらに違う人の実装をforkして開発を継続
- グループの他の人のコードを読んで、よいところを自分のコードに取り込む
他に、「グループの他の人のコードを見て悪いところを見つけたら改良してpull requestを送る」というのも思いつくかもしれませんが、あまりオススメできません。「よいコードを探す」という方向ではなく「悪いところを探す」という意識でコードを読む傾向になってしまうかもしれないからです。
コードレビューのときなどは、「悪いところを探す(問題がないか探す)」読み方は必要な読み方です。しかし、この勉強会の目的にしていたこととは違う方向性のことです。注意してください。
なお、他の人のリポジトリーを探すときはGitHubで「sezemi」で検索してください。
当日の資料はGitHubのclear-code/sezemi-2014-readable-codeにあるので復習したいときは活用してください。
(参加した学生の方は、アンケートには書ききれなかった勉強会で思ったことや、その後こういったことを始めた、継続しているといったことを自分のブログに書いてくれると嬉しいです。その場限りで終わってしまったのかその後のアクションに影響はあったのかが気になるのです。)
まとめ
プログラミングが好きな学生のためのリーダブルコード勉強会を開催しました。リーダブルコード力を継続的にレベルアップできるようになることを目指しました。アンケート結果や懇親会で聞いた話5などからうまくいったと言えそうです。ただ、改善しないといけないところも見えているので、7/6の開催分ではさらに改良する予定です。7/6の分はまだ参加登録できるので、まわりの学生の方に勉強会のサイトを教えてあげてください。
勉強会の中でも何度か話した大事なことをここにも書いておきます。
今回はプログラミングが好きな学生のみなさんが集まりました。「プログラミングが好きなこと」はかけがえのない素晴らしいことなので大事にしてください。「好きなこと」は誰かから強制されて持てる気持ちではありません。自分の中からでてきた気持ちのはずです。プログラミングが好きなら、コードを読んでそこから学んでいくことを続けるのはツライことではなく、楽しいことになるはずです。好きなことをして楽しくレベルアップしていけるならさらに楽しくプログラミングできるでしょう。これからも「プログラミングが好きなこと」を大事にしていってください。
それでは、「読む人」の視点を持ってこれからもがんばってください!
謝辞
今回はメンターのみなさんがいなかったらうまく進みませんでした。本当に助かりました。ありがとうございました!
そんな頼もしいメンターのみなさんを紹介します。(参加した学生のみなさん向け。)
お知らせ
勉強会で紹介があったイベントなどのURLを覚えている分だけ以下に示します6。参加した学生のみなさんは参考にしてください。
- クックパッドさんはクックパッド&リクルート対談イベントがあったり、アルバイトも募集したりしているそうです。
- 楽天さんはインターンシップと温泉Hackathonがあるそうです。
- DeNAさんもインターンシップがあるそうです。
- SEゼミは7月/8月にも勉強会を開催予定だそうです。7月1日に応募受付開始するそうです。
(実は、クリアコードもインターンシップをやっていたりします。)
この勉強会のような内容を自社の新人研修や社内研修でも実施して、リーダブルコード力を継続的にレベルアップしていく開発チームにしたい、という方はコードリーダー育成支援というサービスがあるのでお問い合わせください。