進め方

: author

須藤功平

: institution

株式会社クリアコード

: content-source

SEゼミ2014 - リーダブルコード勉強会2

: date

2014/07/06

: allotted-time

15m

: theme

clear-code

今日の流れ - 午前

* 10:00- 進め方の説明
* 11:00- 実装
* 12:00- スポンサー紹介
* 12:30- ランチ

今日の流れ - 昼下がり

* 13:30- コード解説
* 13:50- チェンジして実装
* 15:30- グループふりかえり
* 16:00- グループ発表

今日の流れ - 夕方

* 17:30- まとめ
* 17:35- 質疑応答
* 17:50- アンケート記入
* 18:00- 撤収&移動
* 18:10- 懇親会

メンター紹介

* 参加者のサポート係
* 現役超優秀エンジニア
* 参加者がわからない
  * →聞くと助けてくれる
  * →モジモジしてると声をかけてくる

メンター紹介1

((‘tag:center’))((‘tag:margin-bottom * 2’)) 川原さん(@ooharabuchou)

* 楽天社員
* 楽天ウェブサービスの開発
* OpenPNEの開発

メンター紹介2

((‘tag:center’))((‘tag:margin-bottom * 2’)) たなべさん(sunaot)

* DeNA社員
* 「るびま」の編集者\n
  (('note:(Rubyist Magazine)'))
* 最新るびま:リリースアナウンス

メンター紹介3

((‘tag:center’))((‘tag:margin-bottom * 2’)) 結城さん(Piro)

* クリアコード社員
* 開発Firefoxアドオン数世界一
* ツリー型タブ\n
  (('note:(Tree Style Tab)'))

メンター紹介4

((‘tag:center’))((‘tag:margin-bottom * 2’)) 沖元さん(okkez)

* クリアコード社員
* 「るりま」のリーダー\n
  (('note:(Rubyリファレンスマニュアル刷新計画)'))\n
  (('note:(≒ Rubyの日本語ドキュメント改善プロジェクト)'))
* CRubyのコミッターの1人

トレーナー紹介

((‘tag:center’))((‘tag:margin-bottom * 2’)) 須藤

* クリアコード代表取締役
* 進行と全体を気にかける係
* リーダブルコード(本)の\n
  「解説」の著者
* RubyKaigi 2014で話すよ

勉強会の目的

((‘tag:center’))((‘tag:large’)) 参加者のn リーダブルコード力のn レベルアップ

((‘ ’))

実現方法

* やること
  * コードを書いて読んでまた書く
* やらないこと
  * リーダブルコードを書くための\n
    テクニックをたくさん伝授

やらないこと

((‘tag:center’)) リーダブルコードを書くためのn テクニックをたくさん伝授

((‘ ’))

テクニック伝授は範囲外

# image
# src = images/many-tips-are-not-important.svg
# relative_height = 100

プロパティー

: enable-title-on-image

false

やること

コードをn 書いて読んでn また書く

「書き読み書き」の狙い

# image
# src = images/expected-by-reading-writing-reading.svg
# relative_height = 100

プロパティー

: enable-title-on-image

false

将来を重視

# image
# src = images/goal.svg
# relative_height = 100

プロパティー

: enable-title-on-image

false

どうして将来を重視?

((‘tag:center’))((‘tag:large’)) 高速道路と大渋滞

((‘tag:center’)) (将棋の羽生さんの話)n ((‘note:japan.cnet.com/blog/umeda/2004/12/06/entry_post_203/’))

高速道路と大渋滞

* インターネットの普及
  * 情報量大・いつでも対局できる
  * 将棋が強くなるための高速道路
* 高速道路の先は大渋滞
  * 高速道路に終わりがある
  * 次の世代も高速道路を走ってくる
  * 終わった場所から抜け出せない

高速道路と大渋滞:イメージ

# image
# src = images/highway-and-major-traffic-jam.svg
# relative_height = 100

プロパティー

: enable-title-on-image

false

当てはめると

((‘tag:center’))((‘tag:margin-bottom * 2’)) 高速道路 = テクニック集

* 高速道路を走る
  * 先人が整理したテクニック集を学ぶ
* 大渋滞
  * 未整理のテクニックを活かせない

ここまでのまとめ

* タイムテーブル説明
* メンバー紹介
* 勉強会で目指すことを共有
  * 目的: リーダブルコード力アップ
  * ポイント: ((*今*))ではなく((*将来*))を意識

将来を見据える

テクニックをn 自ら開発できる

テクニックの開発方法

(1) 既存のテクニックの習得
    * 本から学ぶ
    * 野生のコードを読む→\n
      リーダブルコードを発見→\n
      吸収
(2) 新規にテクニックを発明
    * リーダブルでないコードを発見→\n
      改善案を発明

本から学ぶ

(1) 既存のテクニックの習得
    * 本から学ぶ ←((*各自やって*))
    * 野生のコードを読む→\n
      リーダブルコードを発見→\n
      吸収
(2) 新規にテクニックを発明
    * リーダブルでないコードを発見→\n
      改善案を発明

野生のコードから発見

(1) 既存のテクニックの習得
    * 本から学ぶ
    * 野生のコードを読む→\n
      リーダブルコードを発見→\n
      吸収 ↑((*今日のターゲット*))
(2) 新規にテクニックを発明
    * リーダブルでないコードを発見→\n
      改善案を発明

改善案を発明

(1) 既存のテクニックの習得
    * 本から学ぶ
    * 野生のコードを読む→\n
      リーダブルコードを発見→\n
      吸収
(2) 新規にテクニックを発明
    * リーダブルでないコードを発見→\n
      改善案を発明 ←((*別の機会で*))

リーダブルコードの発見

* 本の内容→世界の一部
* 世界
  * 野生のリーダブルコードがたくさん
* リーダブルコードがある場所
  * OSSのコード
  * 大学・会社の仲間のコード

発見方法

書いて読んでn 書いて読んでn 書いて読んで

理由

* 読まないとコードのサンプルが0
  * サンプルがないと見つけられない
* 書かないと身につかない
  * 知識だけで終わらせない
  * 自分のスキルにする

今日やること

(1) 書いて
(2) 読んで
(3) 書いて

書いて読んで書いて

* 11:00- 課題を開発
  * ((*書く*))
* 13:50  実装をチェンジ
* 13:50- 他の人の実装で開発継続
  * ((*読む*))・((*書く*))
  * 読まないと変更できない

1: 初期状態

(1) 書いて←((*自己流で本気をだす*))
(2) 読んで
(3) 書いて

2: 吸収

(1) 書いて←自己流で本気をだす
(2) 読んで←((*他のコードから吸収*))
(3) 書いて

3: レベルアップ

(1) 書いて←自己流で本気をだす
(2) 読んで←他のコードから吸収
(3) 書いて←((*↑を活用して成長*))

明日からは自分たちで

# image
# src = images/level-up-cycle.svg
# relative_height = 100

プロパティー

: enable-title-on-image

false

ここまでのまとめ

* リーダブルコードの\n
  発見方法を紹介
  * 書いて読んで書いて…
* 今日やることの説明
  * 書いて読んで書いて
  * 1ターンだけ
  * 2ターン目以降は各自がんばって!

書いた後にやること

* 15:30- グループふりかえり
  * 各自:リーダブルコードを発見済
  * 各自からグループに共有
* 16:00- グループ発表
  * グループ:リーダブルコードを発見済
  * グループから全体に共有

最後

* 17:30- まとめ
  * 成功だった?(発見できた?)
* 17:35- 質疑応答
* 18:10- 懇親会
  * 積極的に情報交換してね
    * 参加者同士
    * メンターの人に質問←参考になるはず

確認

目的

((‘tag:center’))((‘tag:large’)) 参加者のn リーダブルコード力のn レベルアップ

((‘ ’))

ポイント

今よりも((*将来*))

やること

テクニックをn 開発する方法をn 体験

具体的なやること

((‘tag:center’))((‘tag:large’)) コードを読んでn リーダブルコードを発見

((‘ ’))

目標

((‘tag:center’))((‘tag:large’)) コードを読んでn リーダブルコードを発見

((‘tag:center’)) ↑が習慣になる

目標達成の判断基準例

(1) 今後はOSSのコードを毎日読む
(2) 面接時に↓を質問
    * コードを見せてください
    * チーム内で\n
      コードを読みあっている?

忘れないで

((‘tag:center’))((‘tag:margin-bottom * 2’)) プログラミングが好きなことはn とても大切にして欲しいこと

((‘tag:center’)) 誰かのコードからn リーダブルコードを見つける事はn 辛い事でなく楽しい事になるはず