DevLOVE2012 Day2 Vol.6:愛せないコードを書くには人生はあまりにも短い / 和田 卓人氏 #devlove2012 #devlove2012a


(写真:コードが動くだけで楽しかった、あの頃。実はこのコード…)

2012/12/16(日) 17:10 - 18:00
愛せないコードを書くには人生はあまりにも短い

開発のプラクティスとしてのテスト駆動開発 (TDD) には、
これまで各所で喧伝されてきたような様々な効果があります。
では、あなた自身に対しては、 TDDがどういう意味を持つのか、考えてみましょう。
  • 和田さん
    • この順番で、という事は他の方々の講演を安心して観られない、という事でもありますので何でこの順番なんだろう、と思いました(笑)
    • でも、それが嬉しくもあります。
  • 大事なことを最初に。
  • 感謝。
    • 声を掛けてくださったpapandaさん
    • DevLOVEスタッフの皆様
    • 会場に来て下さった皆様
  • 自己紹介:
  • きのこ本
    • もう、2年前なんですね。ちょうど(発売が)この時期だったのでよく覚えています。

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

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

  • よろしくお願いします。
  • TDDの事、話す人多くないですか?(DevLOVE2012では、TDDに関して話をされている人が何人か居られました)
  • ひねり出した概要;:
    • あなた自身については、TDDがどういう意味を持つのか?考えてみよう。
  • プログラミングは好きですか?
    • プログラミングは
      • 好きですか?
      • 楽しいですか?
    • 日々のプログラミングは
      • 好きですか?
      • 楽しいですか?
    • ※仕事と仕事以外で『好き/楽しい』の票に開きが。
    • この差は何なのか。

誇りを失う仕組み

  • 上記で挙がった『違い』は何なのか。
  • 量産されるレガシーコード
    • コピペ駆動開発
    • うんこ形式のコメント
      • 『動くコードに触れるな』

 

  • ドキュメント
    • 量が多すぎる
    • 不正確でメンテナンスされていない
    • もしくは全くない!
    • ※ドキュメント、この辺りはセンシティブな問題ではある。
    • ※しかし疲れさす原因でもある。
  • Sierを馬鹿にするな
    • 自分以外に理由を求めているだけ
    • 生産性が高くとも、誇りと愛着を失う事もある
  • ボブマーチンの以下の言葉:
    • 生産性が高い→バーッと書ける→動いて終わりになる。
  • 武勇伝
    • アドレナリンジャンキー
    • 伝家の宝刀をを抜くしかないようだな...
    • 興奮から覚めて手元に残るのはアドレナリンが高くないと読めないコード
  • 技術的負債
    • スケジュール場、ビジネス上、必要な賭け
    • 問題は返すチャンスが少ないこと(動くコードに触れるな、と同じジレンマ)
    • 実は心理的負債でもある
  • 教育的過ぎる世界
    • 〜せねばならない
    • 〜なんて当たり前
    • 未だに知らないなんてありえない病
    • それらと目の前に居る自分達との差分は…?
    • 心をすり減らす原因の一つ
  • 本当は知っている自分の事
    • 自分の記憶力の限界に達した
    • 自分の頭とうでが、複雑さについていけなくなった。それを認めたくない(和田さん自身も、認めたくないと感じている)

  

  

  • 人間の弱さ、自分の弱さ
    • 忘れっぽい
    • 移り気
    • 不安にさいなまれる
    • 我慢が効かない
    • 同時に複数の事が出来ない
    • ※これらは、実は人間のスペック。だからこそ、これに正面から向き合って行く事も必要

 

  • 誇りと愛着を殺すもの
    • 本当は自分にも問題がある事を知っている
    • 人間の弱さ、自分の弱さ...
    • こういう状態だと、良いシステムには、成らない。

 
和田さん『(静まる室内のムードに)あれ、何で…さっきまでバンバン笑ってたのに…w』

誇りを取り戻す一歩

  • 教育的過ぎる世界に抗う
    • 問題は自分がどうあるか。
    • 過去の自分との相対評価
    • 他者と比べれば比べる程苦しくなる。
  • 愚直であれ。
    • やったこと:写経(自分が知りたいと思ったことのコードを書き写し、動かして読み取る。)
      • 分からなければ写すまで。
      • 技術書の写経の方法

  • バージョン管理:
    • CVSだった頃、ブランチ管理を手でやっていた。
    • バージョン管理無しで開発しろと言われたら記憶持つか?
    • ソフトウェアの寿命、意外と長い。余裕でメンテ・機能拡張している。
      • 記憶力の拡張
      • セーブポイント…セーブしないでRPGやるようなものだ
        • 対してブランチ=冒険の書が複数あるようなもの。
      • 色々試してみたい...人間の欲望にも叶っている。

 

  • 自動テスト
    • 自然言語で書くには複雑過ぎる
    • 百聞は一見にしかず
    • ドキュメントとしてのテスト
    • 使用例としてのテスト
    • メンテナンス対象としてのテスト

  

  • 自動化
    • 飽きやすさ/疲れやすさ…人間行動に理にかなってる
    • エビデンス』欲求
      • そういう場合は、Jenkinsで(繰り返し自動で)送りつけてやればいいんですよ
      • 『あのとき動いた』んで、今は?
    • 人力でやるのは意味が無い
    • 変更の阻害要因は、現在ではただのリスクである
    • 高速で貯めるのがCI
    • 人間が努力しないで、機会に任せられるか。 
  • 動作する、きれいなコードへ
    • まず動かないことには、勝負の土俵に上がれない。
    • この回転を一歩一歩進める手立てが必要

  

  • 三本柱と黄金の回転の力
    • 恐怖を克服する
    • 未練を断つ
    • 勇気を得る
    • 自分の限界を認め、自分の学習速度で限界を引き上げる。その道具たちを知る。

予期せぬ変化を予期する

(↑このフレーズはあのGoos本に出て来たものだそうです)

  • えっ?
  • 呼吸が上がる瞬間
  • でも変更なんてみんな予想外だ
  • 必ず、変更というものは常に予想外である。予想可能なのは変更ではない?
  • 変更はあるだろうな〜とは思ってても斜め上を行くものだ。
  • 予想出来ないことだけは予想出来る
    • 一度書いたコードが変更されなかった事があるか?
    • 変更は自分の予想を超える。予想外に備える事は、身軽であることが重要。どれだけコードが身軽であるか。
    • 不安はなくならない
    • FIXがFIXだったことがあるか?
  • シンプルさを保つには
    • 歴史を知る。
    • 生き残ってきた理由を考えよう。上手く行っているものには理由がある。
    • 良いと思えるものを見ぬくこと(和田さんの挙げたテーマは以下の3つ。)
Unix
  • UNIX哲学
    • 小さいのは良いことだ
    • 1つの事をうまくやる
    • 全てをフィルタに
    • KISS(Keep It Simple, Stupid)
      • 複雑にすると怒られる文化。
      • シンプルなものを組み合わせて立ち向かう
      • Unixはパイプとプロセス間通信が非常に発達している。
REST
  • 多様なURL
  • 少ない振る舞い
  • 状態を持たない
  • ※ものすごく『出来る事』が少ない。でも多様。この事が、"つなぎやすさ"を生み出している
SQL
  • 全てが『集合』。
  • SELECT/INSERT/UPDATE/DELETE
  • 閉包性

 

  • これら3点には、何か共通しているものがあるはず。
  • 【共通するもの】
    • インタフェースが少ない
    • 実装に依存していない
    • 再利用が時間を跨いでいる
      • (例)catコマンド:1970年代に出来たもの。catコマンドで取得した結果を今の時代(2012年)に作った自らのシェルに渡し、更にその結果を別の(昔に実装された)コマンドに…という風に、数十年の時を経る事が出来ているというのは凄い事。
  • 穏当なコードを書きたい
    • シンプルであること、直交していること
    • クリーンで、リーダブルで、穏当なコード
    • 力技では無く、必要な抽象度で
    • 綺麗で読みやすくて、アクロバティックでないものを。
    • 現在は何もしなくてもスピードが上がるような時代になっている。
      • コードが使われるか否か‥いかにも動きそうかどうか。

TDDとは何か

  • 和田さん『One More Thingがやりたかったんです...』
  • プログラミングを支えるものは何か。
    • 楽しさ
    • 情熱の量
    • モチベーション
    • ※これらの多寡によって状態が変わる。
  • あの頃のワクワク感(エントリTOPに載せたコード、実は和田さんの奥さんが書いたPHPのコードでした。
    • まぁ、コード内容的には色々指摘したいところですが、夫婦喧嘩になるのでそこはやりませんw
    • 『動いた!』:奥さんはすごく喜んでくれていた。
      • この喜びが、プログラミングの源泉なのではなかっただろうか。
  • TDDは弱い私達のためのもの
    • 恐怖の克服
    • 強者に身を委ねるのではなく、自らの足で歩く技術
    • 自らの力で誇りと愛着を取り戻す
    • プログラミングの楽しさを取り戻す
    • ※TDDで、プログラミングをやっていた頃の楽しさが蘇ってくる。
    • ※原風景を再現する必要がある。
蛮勇は勇気にあらず。
怖いと思う事と恐怖に負ける事は別の事。

勇気とは、その恐怖を乗り越える力。
何者にも負けない、中から搾り出す力。
(※第1部 ジョナサンジョースターと共にゾンビに立ち向かいながらジョースターに向かって言った言葉)
  • 作業者になるな
    • 考えること以外はコンピュータに取って変わられる
    • TDDは考える事をやめない技術
      • (第2部及び第7部より)
    • コーディングは転記作業ではない。


終盤期せずして『ジョジョ勉強会』の様相を呈してきておりましたが(笑)、話の時々に差し込まれてくるフレーズ、問い掛けには心に刺さるものがありました。

誇りを失う過程の内容もそうですし、何より『誇りを取り戻す一歩:教育的過ぎる世界に抗う』の辺りは分かっていてもそういう思考に陥ってしまう事は多々あるので『あぁ〜…』としみじみ考えさせられてしまいました。

TDD・コードを書く事という側面から、改めて和田さんから今回の講演で強いメッセージを頂く事が出来ました。ありがとうございました!

また、改めてジョジョの奇妙な冒険は早く全巻読破しなければならないな、と強く思った次第ですw(あと第5部が残っている)