開発者は仕事でnリーダブルなコードをn書けるのか?

: author

須藤功平

: institution

株式会社クリアコード

: content-source

Developer Migration 2013

: date

2013/03/02

: allotted-time

40m

: theme

clear-code

対象

開発者

リーダブルなコード?

プロパティ

: as_large_as_possible

false

例1: リーダブル?

# coderay ruby
class Person
  def initialize
    @mutex = Mutex.new
  end
  def name=(name)
    @mutex.synchronize do
      @name = name
    end
  end
end

例2: リーダブル?

# coderay ruby
class Person
  def initialize
    @mutex = Mutex.new
  end
  def name=(name)
    synchronize do
      @name = name
    end
  end
  def synchronize
    @mutex.synchronize do
      yield
    end
  end
end

参考

((‘tag:center’))Ruby コードの感想戦

* (('note:http://jp.rubyist.net/magazine/?0040-CodePostMortem'))
* (('note:http://jp.rubyist.net/magazine/?0041-CodePostMortem'))

ヒント

* コードはコンピューターが\n
  実行するだけではない
* 読む人がいる
* コードは書いた人の意図を語る

リーダブルなコード

* わかりやすい(('note:(書いた人の意図が)'))
* 直しやすい
* 調べやすい
* 試しやすい

で?

リーダブルなnコードってnうれしいの?

開発者として

ストレスが減るn ((‘(1)’))

ストレス

なにしてるかn 全然わからないんだけど!

ストレス

なにしたいかn 全然わからないんだけど!

開発者として

楽しいn ((‘(2)’))

楽しい

すぐにn 対応できる

すぐに対応

* こういうのが欲しいんだけど
  * あ、ちょっと待ってください。
  * こんな感じですか?
  * →そう!こういうの!
  * →あぁ、こうなるのかぁ。\n
    じゃあ、なしで!

すぐに対応

オレってばn スゲー感n ((‘note:kitaj.no-ip.com/tdiary/20040404.html#p05’))

オレってばスゲー感を

* 他の人のコードで、じゃなく
* 自分たちのコードで!

作らないのがいい?

* 本当に必要?検討しましょう!
  * 必要?本当に?本当に?
* 考えている間に試したら?
  * コードを書かない事が目指す事?
  * 必要ないものに時間をかけない事\n
    じゃない?

コストが下がれば試せる

コストが下がる

* 実サーバー → 仮想マシン
  * すぐに追加できる
  * すぐに削除できる

試せる

* 実サーバー → 仮想マシン
  * どのくらいあらかじめ用意する? →
  * いつどうやって増減させる?

コードnだってn同じ

リーダブルなコードなら

素早くn 対応できる

素早い対応

# blockquote
うわぁ!\n
こんなに素早く対応して\nもらえるなんて!\n
ありがとう!

素早くない対応

* このくらいで終わりそう
  * でも、なんかあったらイヤだなぁ
  * バッファで2倍かかることにしよう
* 困ったらすぐ相談じゃダメ?
  * 全体でよくなるように進めないの?

信用

# blockquote
いつも素早く対応してくれる人が時間がかかるっていうんだから大変なんだ
ろう。

チームとして

誰でも直せる

誰でも直せる

* あるべき設計を維持できる
  * ((*×*))担当じゃないからわからない…
  * ((*×*))自分のところでなんとかするか…
* 助け合える

誰でも直せる?

* 直せても直しちゃダメ?
  * エンバグしたら責任が…
* できる人にだけ負荷がかかる?
  * できる人ほどツライ…
  * できない人の方が得?

開発者はn仕事でnリーダブルなnコードをn書けるのか?

ムリ?

プロパティ

: as_large_as_possible

false

コードレビュー

# blockquote
リーダブルなコードにするためにコードレビューっていうのを導入したいけ
ど他の人が読んでくれないからできない。

答え

# blockquote
まず、\nあなたが読んでみませんか?

時間がない

# blockquote
自分は他の人のコードを読んでいる時間ないし…

答え

# blockquote
時間を決めて読んでみませんか?

ペースがわかったらどうやって取り組んでいけばよいかアイディアが浮かぶ
と思いますよ。

でも

# blockquote
でも、でも、でも…

コミットへのnコメントサービス

# blockquote
クリアコードは、よいコードを書くことを当たり前にするためには、まず
「みんながみんなのコードを読む」文化にすることからはじめるのがよいと
考えます。

((‘tag:center’))((‘note:www.clear-code.com/services/commit-comment.html’))

B2Dn((‘note:Business to Developer’))

なんで読むの?

* 読まないと\n
  読みやすいコードは書けない
* 読む人を想像しろなんてムリ
* 自分が読む人になる

あなたが読む事を支援

* どうやって読むの?
  * よいところを学ぶ
  * 悪いところ探しではない!
* どういうタイミングで?
  * pushとかcommitした後
  * 一区切り付いているでしょ?

みんなが読む事を支援

* こうすると読みやすいですよ
  * 読みにくいコードばかりだと\n
    続けられない
* よいコードを見た!→\n
  真似してコミット
  * いいね!しているだけじゃない
  * 行動しているからより本物

コミットコミュニケーション

* 他の人が何をしているかわかる
  * あの人はあそこらへん詳しそう
  * 相談してみよう
* 他の人が困っていないかわかる
  * この1時間ひとつもコミットしていないけど大丈夫?
  * このコミットすごいごちゃごちゃしてるけど悩んでる?

毎日↓をコミット

* 今日どれくらい読めたか
  * 感覚で。70%とか。
* 今日印象に残ったコミット
  * メモリリーク直った!
* 今日の一言感想
  * 自分のコミットが真似されていた!

さいごに

* リーダブルなコードが大事そうな気がしましたか?
* 仕事でリーダブルなコードを書けそうですか?
* 支援があれば書けそうですか?

いや、でも…

# blockquote
自分の会社は横のつながりを推奨していないので…

答え

# blockquote
オープンソースソフトウェアの開発に参加してみませんか?

そこで体験してよかったら自分の言葉で説明できるはず。