脳みそスワップアウト

揮発性なもので。おもにPHPのこととか。

DevLove2012に行ってきた

参加してきた。
会場提供のサイバーエージェントさんから
「Ameba Water」なる栄養のありそうな水とRedBullが支給される。



たくさんのセッションを聞いた。

1発目は、@daipresents さんの「アジャイルマネジメントとマインドセット」。
ちなみに前職のボス。やはり熱い漢である。

旧知のメンバが現場でがんばっている姿を想像できて楽しかった。
彼はすごくいいチームを作り上げる。ほんとに。



一番印象深かったのは @t_wada さんの
「愛せないコードを書くには人生はあまりにも短い」だった。
感動してしまった。

スライドも公開されている。
http://www.slideshare.net/t_wada/devlove2012-twada-tdd

自分のために復習をする。
私のフィルタを通して意味が変わってたらごめんなさい。


スライド10
プログラミングは好き?
みんな好きだよね。

じゃあ仕事のプログラミングは?
みんな嫌いだよね。

スライド12〜19
なぜ嫌いなのか、その理由を考えると、例えばこれとかこれとかこれとか・・。

スライド20
そんな感じで力技で対応しちゃった結果、技術的負債が生まれる。

でも、技術的負債は、必ずしも悪いものではない。
スケジュール上、ビジネス上、必要な賭けであることだってある。
問題は、返すチャンスが少ないこと。
溜まり続けると、やがて心理的負債となっていく。

スライド22
みんな、本当は知っているよね。
・自分の実力がついていけなくなったこと。認めたくないこと。
・この程度の仕事さくっと終わらせられる。
 妄想の中のすばらしい自分とのギャップ。

自信、誇り、愛着が失われていく。

忘れっぽい、移り気、不安にさいなまれる、
我慢できない、同時に複数のことができない。
人間って弱い。こんなもん。

そんな中書いたコードは愛着もわかないし、いいシステムになるはずがない。

スライド27
今は、開発を助けてくれるツールがいっぱいある。

・バージョン管理
 CVSだった頃は、ブランチは手で管理しなければならなかったけど、
 今は簡単にやってくれる。
 人間の記憶力なんて、ソフトウェアはあっさり超えていく。

 バージョン管理せずに開発するなんて、
 一度もセーブせずにRPGをクリアしろと言うようなもの。
 Wizardryなんて死んだらおしまい。(たぶん私たちも)

・自動テスト
 ソフトウェアの仕様はとても複雑。方眼紙に書くのはきつい。
 実際に動作する、ドキュメントとして、使用例としてのテスト。
 実際に動作する==メンテナンスされるもの。

・自動化
 人間、同じことやってたら飽きる。疲れる。間違う。

 エビデンス要求。「あの時は動いた」。で、今は?
 あの時は動いていたから、この画面には手を入れないでほしい。
 これは、もはやリスクでしかない。

スライド37
ほぼすべてのプロジェクトが、右下にいる。
リファクタリングできたプロジェクトだけが、右上にいる。

左上にいるのは、大量の予算を投入した大規模プロジェクトだけだろう。
(55億かけて失敗したりすることもあるみたいだけどね!)

スライド39
負債を放っておくとまずい。
だからリファクタリングする。

大抵、返済するための期間なり予算なりをとることになる。
すると、説明責任が発生して、結局やれなくなったりする。
技術的負債を抱えたままの、右下の状態が続く。

リファクタリングと呼ぶと突然やりづらくなるが、
これはれっきとしたプログラミングなのだ。

TDDの黄金の回転の中で、
奇麗なコードに辿り着けるプロセスはリファクタリングだけなのだ。


スライド42
自分専用のものであっても、プロジェクトが小さくても大きくても、
コードは変更される。規模は関係ない。
社会的に価値があり、使われ続けているのだから、新しい要望は必ずやってくる。
そして、それは自分の予想を必ず超える。

予想内で収まるのは、「たまたま勘が当たった」ケースくらいなもの。

変更に強いコード、それはシンプルさを保つこと。
Unix, Rest, SQL。こいつらはずっと、変化に対応してきている。
・インタフェイスが少ない、かつ使い方が明確
・実装に依存していない
・再利用が時間をまたいでいる
 30年前のプログラムの出力を、たった今書いたプログラムに食わせ、
 それを30年前のプログラムに食わせることができる。

OSSのプロダクトを見て、いかにも動きそうなコードかどうかで、
採用するかどうか決めるでしょ?


スライド53
プログラミングを支えるものはなにか。
楽しさ、情熱の量、モチベーション。

あの頃のワクワク感。

<html>
<head><title></title></head>
<body>

<?php
$message = array('にゃー', 'わんわん', 'ぶーぶー', 'ばう');
$i = mt_rand(0, 3);
echo $message[$i];
?>

</body>
</html>

今見れば、データの定義がHTMLと混ざっていたり、
変数名が複数形じゃなかったりと突っ込みどころはあるけれど、
「やりたいものが動いた、うれしい」
この感動はエンジニア全員にあったはず。


TDDは、弱い私たちのためのもの。
恐怖の克服。強者に身を委ねるのではなく、自らの足で歩く技術。
自分の力で誇りと愛着を取り戻す。
プログラミングの楽しさを取り戻す。


考え続けること。作業者になってはいけない。
考えること以外は、いずれコンピュータにとって変わられる。
TDDは考えることをやめない技術。
コーディングは転記作業ではない。とても高度な技術。

TDDはスキル。
才能ではなく、技術。

練習すればするほど、
テストを書くのが上手になるし、リファクタリングも上手になる。
勉強すれば誰でも習得できる。やがて量は質に転化する。


TDDをしよう。
自信・誇り・愛着を取り戻すために。