2014/07/06にプログラミングが好きな学生のためのリーダブルコード勉強会の2回目を開催しました。内容を知りたい方は資料やこれまでの記事を読んでください。
今回も9割以上の参加者が満足してくれたようです1。よかったです。
今後の予定
これで今年のSEゼミでのリーダブルコード勉強会は終了です。今後もあるかどうかはわかりません2。しかし、今回の勉強会の資料はCC BY-SA 4.03のライセンスで自由に利用できる4ので、内容に興味がある人は自由に資料を使って自分たちで開催してみてください。
自分たちで開催するときのヒントになるように、実際に開催してわかったことや工夫したことを説明します。参考にしてください。
わかったこと
わかったことは次の通りです。
- コードチェンジは「コードを読まざるを得ない状況」を作るには有効
- 進み具合が大きく離れている人同士でコードチェンジしなければいけない時5はフォローが必要
- 課題の内容は今回の勉強会に向いていた
- 課題で工夫した点は後述
工夫したこと
工夫したことは次の通りです。
- ランチの時間はメンター・スポンサーと学生さんがゆっくり話せるようにする
- せっかく現役のエンジニア・人事の人と話せる機会なので活用して欲しかった
- グループでよいコードをまとめる方法はやり方を提示する
- グループ・ディスカッションで必要になるようなスキルは今回の勉強会では重要ではないので手順からグループで考えてもらうことはやめた
- 課題の技術的な難易度を下げる
課題について補足します。
課題は徐々に改良していく課題になることを重視しました。リーダブルコードの必要性を感じることが多いのは既存のコードを改良していくフェーズだからです。既存のコードを改良していくためには既存のコードを読まなければいけません。このときにリーダブルコードかどうかが効いてきます。
そのため、技術的な難易度は下げました。具体的にいうと、言語の基本的な機能だけを使えば十分な課題にしました。例えば、データは文字列だけにして、さらに文字列操作はなるべくしなくても済むようにしました。C言語で動的にメモリーを割り当てないで済むように、文字列長の最大サイズなども決めました。引数がとても多い実行例になっているのも同じ理由からです6。
技術的な難易度は下げたのですが、「プログラムの抽象度」を上げていかないと読みにくいプログラムになるような内容になっています。もう少し言うと、「1個だけ扱っていたものをn個扱うようになる」というのを繰り返すようになっています。例えば次の通りです。
- レシピ名を1つだけ扱えばよかったものがレシピ名を3つ扱わなければいけなくなる。
- レシピの属性は名前だけだったのが、IDとURLも必要になる。
- 1ユーザーだけ扱えばよかったものが4ユーザー扱わなければいけなくなる。
プログラムの抽象度を上げていくには既存のコードを改良しないといけません。そうするとコードを読む必要がでてきて、リーダブルコードを意識せざるを得ない、ということを狙っています。
課題をやってみた人は気づいていましたか?
まとめ
- リーダブルコード勉強会を2回実施した
- 2回とも好評だった
- 勉強会用の資料は公開している
- 資料はCC BY-SA 4.0のライセンスで自由に利用できる
- コードチェンジは「コードを読まざるを得ない状況」を作るには有効
- 課題の技術的な難易度は低めにした
- 課題は、既存のコードを読まないとリーダブルなコードを書くのが難しくなるようにした
主催のSEプラスさん、スポンサーの楽天さん、クックパッドさん、DeNAさん、メンターの川原さん、たなべさん、参加した学生のみなさん、ありがとうございました。いい経験になりました。参加者のみなさんがこれからリーダブルコード力を上げる助けになれたならやった甲斐があるというものです。
勉強会の内容を考え、実際にやってみた側としては、メンターの川原さんとたなべさんが「楽しかった」と言ってくれて非常にうれしかったです。
おまけ:関連URL紹介
勉強会中で出てきた話題に関連するURLを紹介します。
- schema.org:プログラム中で使う英単語を選ぶ時に参考にできるサイト。
- クリアなコードの作り方: 縦長・横長なメソッドを短くする:変数名の長さについての話のときに思い出して紹介したページ。見なおしてみると、変数名というより1行の長さの話でした。
- 例外設計の話:例外の使い方に関してたなべさんが数年前にまとめていたもの。Javaのコードの話をしているときに例外をどう扱うかみたいな話がでていた。
- 間違ったコードは間違って見えるようにする - The Joel on Software Translation Project:ハンガリアン記法について。
- sunaot/sunaot-sezemi-2014-readable-code:たなべさんによる課題の実装。Rubyを使用。テストを書いている実装はこれだけかもしれません。
- myokoym/myokoym-sezemi-2014-0622:Ruby札幌から選出された2013年のRuby Kajaの1人、横山さんによる実装7。C言語を使用。最後まで実装しています。
-
アンケート結果より。「大変不満だった」「不満だった」「ふつう」「満足した」「大変満足した」の5段階評価で回答してもらいました。前回は「満足した」の人数が一番多かったのが、今回は「大変満足した」の人数が一番多かったことに驚きました。 ↩
-
著作者は「株式会社クリアコード」。 ↩
-
著作者を表示すればコピーしたり再配布したりできる。商用利用もできる。変更後も同じライセンスにするなら変更してもよい。 ↩
-
たとえば、参加者数が少なくてチェンジできる選択肢が少ない時。 ↩
-
「例」なので、実行例通りに実装しなくてもよいのですが、多くの人は実行例通り実装していたようです。 ↩
-
横山さんはメンターでも参加者でもありません。Web上に公開されている情報を見て趣味で実装したものです。たぶん。 ↩