Loading...

愛せないコードを書くには人生はあまりにも短い

和田 卓人 (a.k.a @t_wada)

Press key to advance.

Slides controls, press:

  • and to move around.
  • Ctrl/Command and + or - to zoom in and out if slides don’t fit.
  • T to change the theme.
  • H to toggle syntax highlight.

大事なことを最初に

感謝

  • 声をかけてくださった @papanda さん
  • DevLOVE スタッフの皆様
  • 会場に来てくださった皆様

自己紹介

自己紹介

  • 名前 : 和田 卓人(わだ たくと)
  • ブログ : id:t-wada
  • Twitter : @t_wada
  • github / facebook : twada
  • タワーズ・クエスト株式会社 取締役社長

./../../images/TQ_LOGO_SMALL.png

プログラマが知るべき97のこと

よろしくお願いします

ある日の某SNS

  • 和智「僕がGOOSで和田さんがTDDだとネタがかぶるかなーと思ったのですが、どんなことをお話しされる予定ですか?」
  • 和田「GOOS とはあまりかぶらないような気がしています。DevLOVE なので、 ポエム っぽい話をしようかなあと。」
  • 和智「ポエムw 了解、ありがとうございます!」

その結果ひねり出した概要

  • 開発のプラクティスとしてのテスト駆動開発 (TDD)には、これまで各所で喧伝されてきたような様々な効果があります。では、 あなた自身に対しては、 TDD がどういう意味を持つのか 考えてみましょう。

プログラミングは好きですか?

プログラミングは

  • 好きですか?
  • 楽しいですか?

では 仕事の プログラミングは

  • 好きですか?
  • 楽しいですか?

アジェンダ

  • 誇りを失う仕組み
  • 誇りを取り戻す一歩
  • 予期せぬ変化を予期する

誇りを失う仕組み

量産されるレガシーコード

  • コピペ駆動開発
  • うんこ形式のコメント
  • 「動くコードに触れるな」

うんこ形式のコメント: http://togetter.com/li/41782

官僚主義

  • 低いレベルに合わせたコーディング標準
  • ガレー船のようなフレームワーク
  • 軍法会議のようなコードレビュー

人海戦術

  • タコ部屋と低スペックマシン
  • 「エビデンス!」「エビデンス!」
  • 体育館のような大部屋でクリック大会(負荷テスト!)

ドキュメント

  • 量が多すぎる
  • 不正確でメンテされてない
  • もしくは全く無い!

SIer を馬鹿にするな

  • 自虐的にまわりを笑うなかれ
  • 自分以外に理由を求めているだけ
  • 環境が違っても誇りと愛着を失う理由はある

"It is too easy to make a mess."

  • Ward Cunningham と Bob Martin の言葉
  • 生産性の高さはゴミの生産性の高さでもある
  • 書いて、動いて、やがて忘れてしまう

"What Killed Smalltalk Could Kill Ruby, Too" http://www.youtube.com/watch?v=YX3iRjKj7C0

武勇伝

  • "アドレナリンジャンキー"
  • 「伝家の宝刀を抜くしかないようだな」
  • 興奮から冷めて手元に残るのはアドレナリン量が高くないと読めないコード

技術的負債

  • スケジュール/ビジネス上、必要な賭け
  • 問題は返すチャンスが少ないこと
  • 実は心理的負債でもある

教育的すぎる世界

  • 〜ねばならない
  • 〜なんて当たり前
  • 〜やっていいのは小学生までだよねー
  • できていない自分との差分が心をすり減らす

いまだに知らないなんてありえない病: http://blog.livedoor.jp/lalha/archives/50460223.html

でも、本当は知っている本当のこと

  • 自分の記憶力の限界に達した
  • 自分の頭とウデが複雑さについていけなくなった
  • それを認めたくない

自信を失う原因

人間が自信をなくす原因は、自信の持ちすぎである。 自分が「この程度の仕事サクッと終わらせられる」と思っているのに、実際にやるとうまくいかないとき、人は自信をなくす。 妄想の中の自分が事実に反して素晴らしすぎるから、その「妄想の中の素晴らしい自分」が振る舞うように振舞おうとして、できないので苦しむ。 http://d.hatena.ne.jp/nishiohirokazu/20121110/1352558205

人間の弱さ、自分の弱さ

  • 忘れっぽい
  • 移り気
  • 不安にさいなまれる
  • 我慢が効かない
  • 同時に複数のことができない
  • 自分の弱さを直視できない

誇りと愛着を殺すもの

  • 外部に理由を求めたくなるけど、本当は自分にも問題があることを知っている
  • 人間の弱さ、自分の弱さ
  • 作っているシステム、書いているコードに誇りと愛着が持てないとき、そのシステムが良いものなることはない

アジェンダ

  • 誇りを失う仕組み
  • 誇りを取り戻す一歩
  • 予期せぬ変化を予期する

誇りを取り戻す一歩

教育的すぎる世界に抗う

  • 人は自分の成長速度でしか変われない
  • いまできている人と比べても苦しくなるだけ
  • 頑張りすぎようとしてはならない
  • 大事なのは「自分がどうあるか」
  • 過去の自分との相対評価

愚直であれ

ソフトウェア開発の三本柱

  • バージョン管理
  • テスティング
  • 自動化

バージョン管理

バージョン管理

  • 記憶力の限界を補う
  • VCS はセーブポイント
  • ブランチは冒険の書。いろいろ試したい
  • 不安の克服、好奇心の充足

テスティング

テスティング

  • 把握力の限界を補う
  • ソフトウェアは自然言語で記すには複雑すぎる
  • 百聞は一見にしかず
  • 動作するドキュメントとしてのテスト
  • 使用例としてのテスト
  • メンテナンス対象としてのテスト

自動化

自動化

  • 忍耐力の限界を補う
  • 飽きやすさ、疲れやすさ
  • "エビデンス"欲求
  • 「あのときは動いた」で、今は?
  • 人力でやるのは意味がない。高速で貯めるのがCI
  • 変更の阻害要因はリスク

動作する綺麗なコード

リファクタリング

  • タブー「動くコードに触れるな」に挑む
  • 動くコードに触れなければ、やがて誇りと愛着は失われる
  • リファクタリングは意思の力
  • TDDの中で綺麗さにベクトルが向いているのはリファクタリングだけ
  • プログラマはリファクタリングによって誇りを取り戻す

TDDと黄金の回転

三本柱と黄金の回転の力

  • 人間の弱さ、限界を補う
  • 恐怖を克服し、未練を断ち、勇気を得る助けになる
  • 自分の限界を認め、自分の学習速度で限界を引き上げる。その道具たちを知る。

アジェンダ

  • 誇りを失う仕組み
  • 誇りを取り戻す一歩
  • 予期せぬ変化を予期する

予期せぬ変化を予期する

予想外の変更

  • 「えっ??」
  • 呼吸が上がる瞬間
  • でも変更なんてみんな予想外だ

予想できないことだけは予想できる

  • 一度書いたコードが変更されなかったことがあるか?
  • 予想外に備えるとは、身軽であること
  • 不安はなくならない
  • 「こんなこともあろうかと」は外れればコスト

シンプルさを保つには

  • 歴史を知る
  • うまくいっているものにはきっと理由がある
  • 生き残っているものにはきっと理由がある

うまくいっているもの(私見)

  • Unix
  • REST
  • SQL

Unix哲学

  • 小さいのは良いことだ
  • 一つのことをうまくやる
  • 全てをフィルタに (パイプと標準入出力)
  • KISS (Keep It Simple, Stupid) 文化

REST

  • 全てが URL (多様性を生む)
  • 少ない操作 (GET, POST, PUT, DELETE + α)
  • 状態を持たない

SQL

  • 全てが集合
  • 少ない操作 (SELECT, INSERT, UPDATE, DELETE + α)
  • 閉包性

共通するもの

  • インタフェースが少ない
  • 実装に依存していない
  • 再利用が時間をまたいでいる
  • 例: パイプや URL を通じて数十年の時をまたいでつながる

穏当なコードを書きたい

  • シンプルで、直交している
  • クリーンで、リーダブル
  • 力技ではなく、必要な抽象度で
  • 穏当な、いかにも動きそうなコードを

One more thing…

  • 誇りを失う仕組み
  • 誇りを取り戻す一歩
  • 予期せぬ変化を予期する
  • TDDとは何か

TDDとは何か

プログラミングを支えるものは何か

  • 楽しさ
  • 情熱の量
  • モチベーション
  • 「動いた!」
  • はじめてプログラムを書いたころの ワクワク感

TDD は弱い私たちのためのもの

  • 恐怖の克服
  • 強者に身を委ねるのではなく、自らの足で歩く技術
  • 自らの力で誇りと愛着を取り戻す
  • プログラミングの楽しさを取り戻す

TDDは結局のところ何なのだ?

  • TDDとは呼吸の整え方、心の整え方
  • 心の平穏と静かな自信
  • 勇気と蛮勇を区別する

作業者になるな

  • 考えること以外はコンピュータに取って代わられる
  • TDDは考えることをやめない技術
  • TDDは綺麗にすることを諦めない技術
  • コーディングは転記作業ではない

TDDはスキルです

  • 才能ではなく技術です
  • だから、習得可能です
  • 量は質に転化します
  • 迷ったら写経してみしましょう

ご清聴ありがとうございました