読者です 読者をやめる 読者になる 読者になる

冥冥乃志

ソフトウェア開発会社でチームマネージャをしているエンジニアの雑記。アウトプットは少なめです。

follow us in feedly

あーだCoder #1に参加してきました

勉強会 DDD Programming

まあ、参加してきたといってもオンラインミーティングで家から参加したんですけどね。
オンライン形式のミーティングが果たしてうまくいくか、という懸念もありましたが、その部分の心配はなかったようです。むしろログが残る上にちょっと時間をおいてからその話題に戻ったりも楽なので、あーだCoderのように議論が発散しやすい勉強会ではありではないかとも思いました。それと、音楽聴いてテンション上げながら勉強会に参加できるのも嬉しかったり*1
すごく良い議論ができて、楽しかったのでそれが皆さんにも伝わればいいなあと。

あーだCoderについて

先日のエントリでも軽く触れましたが、モデルとコードのあれこれについて実践に基づいた議論をするための勉強会です*2
設計からコードまでを対象としていますが、その背景として書籍の内容について追いかける一般的な形の勉強会だと、抽象的な一般論の話になってしまい(仕方のないことですが)「そうだよねー」で終わってしまって消化不良になってしまうところに立ち向かっていきたいというのがあります。本の内容を仕事で使えるようにするためにはその間を埋める実践が必要なわけですが、そこを対象にしようと。後は、そういうチャレンジをしても安心して失敗できる場というのを意図しています。
というような議論を経て、立ち上げメンバーで整理したのが先日も触れたエレベータピッチです。

[独学の不安を実践で解消]したい
[プログラマ]向けの、
[あーだCoder]というプロダクトは、
[勉強会]です。
これは[独学ではできないような設計・実装上のチャレンジ]ができ、
[職場での実践]とは違って、
[参加者からの活発なフィードバック]が備わっている。
or [実践に近いところでの遠慮の無い失敗(とそれへのフィードバック)]が備わっている。

勉強会のやり方に対するチャレンジ

そもそも言いだしっぺというか、やりたいと言い出したメンバーが全員同じ地域に住んでいないという理由でco-meetingとGithubを使って、オンラインで議論するという形をとりました。
まだまだ初回で運用が固まってるわけではありませんが、第一回は以下の流れで進めました。

  1. 共通の課題に対してモデルおよびコードを作ってGithubの専用リポジトリ*3にコミット
  2. 日時だけ決めてco-meeting上で各自オンラインでリポジトリ内のモデルやコードを見ながら議論
  3. 議論の結果はログとして後日公開も考える

課題も議論の対象になるものもオンラインで参照できますし、誰かのセッションを聴くという形ではなく各自の疑問点などをぶつける形なので、こういう形式のオンライン勉強会でもうまく流れたと思っています。当然、議論は発散してますし結論が出ていないこともあるのですが、そこは継続していくなかでもまた議論のきっかけはあると思うので気にしていません。むしろ議論が活発だったと思うのは私だけですかね?
そんなに新しいことをやってるつもりはないのですが、ポイント押さえればこういうやり方もうまくいくよ、という感じで。

で、各人の仕事やプライベートの都合があるだろうからモデルやコードをコミットしておくのは必須ではないし、コミットしてなくても議論参加はもちろんOKだよ、というのも決めておきました。
無理はしない。

課題

言語はいくつか選択肢がありますが、課題は共通のものにしています。TDDBC参加者の皆さんにはおなじみのTDD Boot Camp(TDDBC) - TDDBC大阪2.0/課題です。

結構ガチでやると、在庫管理とか販売管理とかそういうドメインにも突っ込んでいけるし、取り上げるにはちょうどよかったですね。要件に関してある程度文章化されているので、とりあえずドメインエキスパートの言葉として受け取ることもできそうです。良いお題はいろんなところに使えますね。

議論について

今回は私が口火を切りました(本当はちょっと様子見ようと思ってたんですが)。
クラス図を描いてきた人の中で、自販機オブジェクトがなかったのは私だけだったんです。自販機を窓口オブジェクトにすると責務が集中しすぎるかなあ、と思ったのが理由です。それと、ドメインモデルとしてもっと販売管理と在庫管理に集中したかったので、自販機が提供する機能はUI層とアプリケーション層で表現されるのかなあとも。
結果、永続化とかも考えなくてはいけなくなって、お題には出てきていない深みにはまっていってる感はありますが*4

いずれログが公開されると思うので、ざっくりと議論の内容をかいつまんでみます。

  • 自販機をオブジェクトにするのは責務持ちすぎかも
    • TDDBC参加者も多かったので、その印象があったかも
  • 事前にアクタ・ゴールリストを作るといいよ
  • モデルの描き方にはあんまりこだわらなくても
  • モデルを事前に作ってると黄金の回転のRedにならないことも
    • 型レベルで明白な実装になるんであればテストは書かないという選択肢も?
  • ユースケース記述ってBDDの対象だよね

とまあこんな感じです。
後は適度に脱線しながらやっております。

第2回のご案内

超絶楽しかったのでもちろん次もやりますよ。
ちなみに言語は(Java|C#|C++)です*5

参加希望者は下記から申し込みを(まだスタート期なので人数枠はあまり増やさないと思いますが)。
#あーだCoder 第二回 - connpass

*1:ちなみに、昨日はSaGa3の神戦をエンドレスで。だってラスボス級の人がいっぱいいるんですもの。

*2:いろふさんのネーミングセンスが素晴らしい。英語名を「Codersation」と訳した前川さんのセンスも素晴らしい。

*3:現在は前川さん管理のリポジトリposaunehm/Codersation · GitHubになっています。

*4:「あべさんのモデル細かいよねー」という話も出ました。

*5:これについては第1回の参加者からも質問が出たりしましたが、言語そのものの話はスコープが違うのであまり俎上に上げたくないので、あえて限定しています