2013年3月20日水曜日

横浜道場 特別編「Domain-Specific Language としての魔法少女まどか☆マギカ入門」に参加

おつかれさまです。ZuQ9->Nnです。

2013年2月19日(火)
横浜道場 特別編「Domain-Specific Language としての魔法少女まどか☆マギカ入門」
が開催されましたので参加しました。

場所は、横浜の株式会社アットウェアさん。

平日の夜から、しかも横浜での開催とかなり厳しかったのですが
タイトルに釣られてしまい、思い切って参加しました。
@hageyahhooさんが講師で下記の内容をお話されました

円環の理:まどマギ概論

要件定義は、なんだか良さそうだったのに、実際は。。
といったシステム開発のプロジェクトにありがちな内容を
まどマギを通じて。。わかりやすく?、グダグダながらも進めていき。
ユーザーストーリー。ドメイン言語などを説明。
ほんとんどの参加者がストーリーを知っていたため
すっとばし気味でした。

魔法少女になるって、そういうことよ:まどマギ実践

いきなり、実践編に入り、まど・マギに出てくる
「大人がお酒を飲んでいい理由」という台詞をもとに
システム開発を例えてました。あとは特定ドメイン言語の
事例などの紹介。。グローバルコミニュケーションもはかれ
メリットも多いとのこと。。

砲火後ティータイム:ワークショップ

解説もそこそこに、いよいよワークショップに! ルールとして
  1. 付箋に書き出そう。自分がどのきゃらに似ているか?どういう状況にあるか?
  2. KJ法で整理しよう。
  3. 一番ソールジェムが濁っているチームを発表してみんなで助けよう
自己紹介と、少しのディスカッションを終え
各チーム発表。なかなかアニメの内容をとらえて面白い発表でした。

なんと最後は時間を余らせて終了。
みんなで振り返り。その場で懇親会がありました。

いや、本当、「もう訳が分からないよう
その一言につきますよ。今回は。。


2013年3月18日月曜日

TDD Boot Camp Tokyo 2013-03に参加

おつかれさまです。ZuQ9->Nnです。

2013年3月16日(土) TDD Boot Camp Tokyo 2013-03
開催されたので参加しました。

今回は、参加にかなり迷いました。おそらくこれで5〜6回目
人気のイベントなので、他の人に譲ろうと考えておりました。

ところが、前日に確認したら、まだ定員に満たない。。
こりゃもったいないと思いで急遽参加を決めました。

場所は 株式会社VOYAGE GROUP 8F 社内バー AJITOです

最初にTDDの伝道師。t_wadaさんからのオープニングセッションがありました。

まずは、ソフトウェアの三本柱として
  • バーション管理
  • テスティング
  • 自動化
の説明、次に「テスト」という言葉の定義について、
今回取り扱うのは、Developer Testingで、Developer Testingとは、
  • プログラマの
  • プログラマによる
  • プログラマのための
  • ブログラムとしてテストを書きながら開発を行って行く方法
と定義をされました。次にTDDのサイクル
  1. つぎの目標を考える
  2. その目標を示すテストを書く
  3. そのテストを実行して失敗させる
  4. 目的のコードをかく
  5. 1で書いたテストを成功させる
  6. テストが通るまでリファクタリングを行う。
  7. 1〜6を繰り返す
との説明があり、次に、TDDの心として
  • 一つずつ、少しずつ
  • ひとりずつ対処する
  • すばやくまわす
  • 自分が最初のユーザー
  • 不安をテストに
  • 祈るのでは駄目
  • 命綱を編む
という内容の説明があり、TDDの真の目的は、「健康」とのこと
変化に対応するのは健康体のコードであり健康体のチームだけだそうです。

ここで終了してしまうと、あまりにもスピリチュアルに偏ってしまうので
最後に、数字の事例を上げられていました。だいたい。
実装時間が2割り増えて、バグが6割り減る
といった内容で、オープニングセッション終了。

次にyattomさん、grimroseさんによる、ペアプロのデモ
言語はJava、IDEはEclipse、内容はFizzBuzzでした
最初に、TODOリストなどを制作し、サクサクとメソッド名など
合意をされて、テストコードと実装コードを記述されていました。

個人的に印象的だったのはFizzの場合は、まず、ハードコーディングで
"Fizz"をそのまま返す仮実装を行い、そのあと本実装に移ったのに対して
"Buzz"の方は、一気に明白な実装をされていたことです。

休憩のあと、いよいよ実践練習、最初、個人的にはJava、Eclipseでいくつもりでしたが
ペアが余ったいるとのことで、思い切って hiralinさんと
Objective-c、SenTestingKit(OCUnit)で行なうことにしました。
お題は「LTSV」で、仕様は

ltsv = new LTSV();
ltsv.set("foo", "hoge") #=> null
ltsv.get("foo")             #=> "hoge"
ltsv.dump()                 #=> "foo:hoge\n"

ltsv.set("bar" , "fuga") #=> null
ltsv.dump()                 #=> "foo:hoge\tbar:fuga\n"

ltsv.set("foo", "piyo")  #=> "hoge"
ltsv.dump()                #=> "bar:fuga\tfoo:piyo\n"
となる。。

最初は、どっちがkeyでどっちがvalueみたいたところから勘がいがあったり
仕様もちょっとあやふやだったり、TO DOリストを雑に書いてしまい。
あとで見直しても。。。な状態だったり
(これは僕が悪いんだけど。。ごめんなさい、ごめんなさい)

イマイチ理解ができないまま、とりあえず進める感じで。。
途中、ようやくなんとか形になったところで、前半の演習が終了。
おやつ休憩があり、

その後、再び演習に。。
やはり、一番、頭を悩ましたのが、入れた順番にdumpするって床でした。
なんとか動くけど、同じようなif文の分岐が、何カ所かある。
いかにも不吉な匂いが漂うコードとなって時間が終了。。

その後、各言語のコードレビューがありました。
個人的にはやはり、Rubyとか普段、
ほぼ触ったこと無いコードを見れたのが新鮮だったと同時に
ちんぷんかんぷんな部分もあったり。。

レビュー後に、再び、t_wadaさんのクロージングがあり、
次の日から現場でどうやって戦うかということで
いくつか本を紹介されていました。

テストコードが無いコードがいっぱいある場合は?
→レガシーコード改善ガイド
 データベースを扱う場合は?
→データベースリファクタリング
非同期などのより複雑なシステムを扱う場合は?
→実践テスト駆動開発

最後に、「TDDはスキルです。一人から始められる。才能ではなく、習得可能。量は質に転化します。写経しましょう!!」と閉められました。

そのあと、その場でピザ等が振る舞われる懇親会がありましたので

そのまま参加。懇親会では、時間切れになってレビューできなかった
Scalaのコードレビューやら、ノラLTがありました。
ノラなのになぜか、マサカリが飛んでくる、かなり厳しめの内容だったり。

t_wadaさんが訳されたSQLアンチパターンの本
の争奪、じゃんけん大会等
なんだかんだで、21時くらいまでその場ですごして解散となりました。

今回は、本当に、これで何度目なんだよ。って感じだったのですが、
以前とは違って、ようやく現場でもテストコードを書くようになったりして
自分の状況も変わってきており、新鮮に、また新たな学びがありました。

しかし、それ以上に、疑問、迷いがふつふつとわいてくる悶々とした、
いつもの勉強会で感じる劣等感的なものも多く味わいました。

Act as professional
この言葉に従って行動しているか??
全然、駄目、駄目、果てしなく遠いです。

今後TDDBCとはどのような関わりをすべきかそれも自分にとっての課題の一つです
テスト系、アジャイル系の勉強会はとても好きです
とくに今回のような演習、ハンズオンがあるものは
やはり、フィードバックがあり、直接自分の脳がいろんな化学反応を起こします。

ただ、ここに甘えてはイケない、はやく次のステップへという思いも。。
まずは、先人に少しでも近づくために、写経でもしておくことにします。