Magnolia Tech

いつもコードのことばかり考えている人のために。

「設計Night2018 powered by Classi」で登壇してきました

「設計Night2018 powered by Classi」というイベントで、「設計のための、問題の捉え方〜ドメイン知識の暗黙知形式知に〜」というタイトルで発表しました。

実際に発表したスライドは読み物として冗長過ぎたので、圧縮したまとめ版を作っていて、そちらへのリンクを張って起きました。

speakerdeck.com

スライド、まとめも長いんですけど、今回自分がまとめたかったのはこの一枚です。

今回の「設計Night2018 powered by Classi」というイベントは、今年のBuildersconで設計に関する最高の発表をされたしんぺいさんによる企画だったので、それは絶対に参加したい(自分も聞きたい)ということで、二つ返事で引き受けました。

connpass.com

イベントレポートの様子は当日のハッシュタグ#sekkei_n2018を追いかけるとご理解頂けるのではないでしょうか。

ちなみに、しんぺいさんの最高の発表内容は、下記のリンクから見ることができます、必見です。

開発現場で役立たせるための設計原則とパターン - builderscon tokyo 2018

話した内容の背景とか、補足とか

最初、引き受けたはいいけど「ドメイン知識の暗黙知形式知に」「暗黙知が問題の捉え方に移動した」について話して下さいと言われても、実際に何を話せば…とぐるぐる回ってしまったんですが、丁度2ヶ月ほど前に読み直していた「いかにして問題をとくか」に出てくる”条件はかき表すことができるか”という一文が自分の中で突然上手くハマってそこを出発点にしました。

いかにして問題をとくか

いかにして問題をとくか

(本文も学びが有りますが、エンジニアにとっては見開き2ページだけでも、開発のステップに関する学びがるので、お勧めです)

あとは、「ソフトウェアの設計における暗黙知あるある」と、以前から感銘を受けていたt_wadaさんのツイートを並べてみると、大筋ができました。

結局のところ、プログラミング言語の進化とか、開発ツールの進化って、いかに開発者が考えた意図を未来に残して、かつそれが上手く後世の人が活用できるか?…それが上手くできないと、ソフトウェアの設計が継続的に上手くできるなんて無いんだぁ!!!って話じゃないかなーって常々思っていたので、それが話せて良かったなって思いました。

あと、懇親会で「ペアプロって暗黙知に有効ですよね」って言ってもらって、「それは確かに!」って思ったので、結局のところ明確に言っているかどうかは別として、みんなが感じている問題の本質は割と同じところにあるんじゃないかと改めて思いました。

暗黙知の種類について

色々な暗黙知(と、形式知)に関する文献(野中郁次郎や、マイケル・ポランニーの有名な本とか)を読んだり、論文もいくつか読んでみたのですが、割と抽象度が高かったので、ソフトウェアの設計においての「あるある」をまとめていったら、最終的に「事実」「関係」「原則」の三つに行き当たりました。この辺のまとめ方は、ほかの視点も当然あると思うので、絶対ではないですが、実感として分かりやすいかなって思っています。

最後に「基準」も暗黙知だな、という話を触れたは、統計的手法を使って暗黙知形式知に変えていく活動って有るなーと思って、その辺を話したかったのですが、さすがに長くなってしまうので割愛しました。でも、マシンラーニングとかもそうですけど、あれって意識していない基準を明らかにしていく活動で、まさに今回のテーマにピッタリだなと思っています。ただ、この辺は自分で語れる要素があまり無いのでぜひ次の設計Nightが開催されたあかつきには誰か発表してほしいなぁと。

ケーススタディについて

ケーススタディに上げた年齢の話は、以前に「4月1日生まれは早生まれ、根拠は”年齢計算ニ関スル法律”」という話を聞いて、調べたことがあったので。

実は、自分は逆に一番最初に「これは2月29日生まれを個別に条件を書かなくてもいい、なんてエレガントなルールなんだ!」と驚いていて、でも「法律の趣旨はそうじゃない」らしく、「あぁ難しいなぁ」と思った思い出からです。そりゃそうですよね…2月29日生まれを特別扱いしないために全員一日前にするっていうと、そりゃ本末転倒ですし。趣旨を理解するのは難しい。

日付の計算という、みんなが分かっているようで、意外と知らなかったりする事例が見つかって良かったなぁって。

ちなみにあの実装が正しいのか?と言われると、これもまた微妙な気がしていて、現実に「2018年2月29日」は存在しないので、その存在しない日の前日って何だろう?みたいな気持ちにもなったりもしていて、果たして実際世の中ではどうやって実装されているんでしょうね。

なお、最初はPerlのTime::Pieceモジュールを使って書こうとしたところ、全然意図通りの挙動をしていなくて(ドキュメントも分かりづらい)、しばらくハマったので、結局Rubyで書きました。色々な言語の日付系のモジュール、なかなか挙動が分かりづらいですね。

スライドについて

4年もテックイベントを開催し続けているくせに、よく考えてみると人前で30分話すのが初めてで(吉祥寺.pmはおかげさまですぐに登壇者が埋まってしまうので…)、最初作ったスライドが140枚とかになってしまい、「果たしてこれは終わるのか…」という気持ちになりました。実際に少し最後を飛ばして28分だったので、もう少し余裕をもったページ数にすべきだったなって。

今更登壇初心者みたいな話になってアレですが、終わった後に一緒に登壇した@moznion氏にあのままアップしても伝わらないかも…とアドバイスを頂いたので、アップ用にまとめ直しました。

参考文献

今回のスライドを書くにあたって、初めて読んだ、又は久しぶりに読み直した本の数々です。どれも非常に学びのある本でした。

いかにして問題をとくか

いかにして問題をとくか

いかにして問題をとくか

知識創造企業

知識創造企業

知識創造企業

暗黙知の次元

暗黙知の次元 (ちくま学芸文庫)

暗黙知の次元 (ちくま学芸文庫)

ビジネスフレームワーク図鑑 すぐ使える問題解決・アイデア発想ツール70

ビジネスフレームワーク図鑑 すぐ使える問題解決・アイデア発想ツール70

ビジネスフレームワーク図鑑 すぐ使える問題解決・アイデア発想ツール70

UML モデリングのエッセンス

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

オブジェクト指向設計実践ガイド

エリック・エヴァンスのドメイン駆動設計

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

実践ドメイン駆動設計

実践ドメイン駆動設計 (Object Oriented SELECTION)

実践ドメイン駆動設計 (Object Oriented SELECTION)

設計ナイトについて

ちなみに実は設計ナイトは今回が2回目の開催で、最初の開催のきっかけはこのツイートでした。

そして、ちょっと時間は空いてしまいましたが、今年の3月に「酔いどれ設計ナイト」と称して開催しました。

kichijojipm.connpass.com

この時も豪華な参加者の熱い設計トークが展開された訳ですが、居酒屋の片隅で開催していたイベントがこんな豪華なイベントになって帰ってくるとは…

おわりに

設計に関して話すイベント、マジで最高なのでみんながそれぞれの設計ナイトをやって欲しいですね。今回、50人の定員枠に250人以上の応募が有ったので、確実に需要は有ると思うんですよね。

そして、この勢いに乗って、今年の年末はぜひ「年忘れ!設計ナイト」をやりたいと思った次第です。 たぶん、ただの忘年会なんですけど(フラグ)。

最後に、こんな最高のイベントを用意してくださった、しんぺいさん、Classiさん、本当にありがとうございました!感謝しかないです!