[event] Object Oriented Conference 2020
2020年2月16日(日) 東京都文京区のお茶の水女子大学で開催された『Object Oriented Conference 2020』を聴講してきました。
聴講セッション
- 『Object-Oriented Diversity』 成瀬允宣さん
- 『関心の分離って何?』 神崎善司さん
- 『Chatworkのドメインをモデリングした』 FUJII Yoshitakaさん
- 『VOYAGE GROUP流開発文化』 大島一将さん
- 『READYFORにおける複雑なドメインとレガシーシステムとの戦い方』 伊藤博志さん
- 『オブジェクト IPPON グランプリ』 平鍋健児さん
- 『アジャイル時代のモデリング』 平鍋健児さん
- 『オブジェクトライフサイクルとメモリ管理を学ぼう』 ariakiさん
- 『オブジェクト指向プログラミングの現在・過去・未来』 増田亨さん
セッション感想
『Object-Oriented Diversity』 成瀬允宣さん
Diversity(多様性)が大切ですよ、という講演内容でした。『オブジェクト指向』と一言でいってもC++をバックボーンに話している人とsmalltalkをバックボーンに考えている人では頭に浮かんでいるモノは異なる。コンテキストを意識しないとコミュニケーションの行き違いが発生する。不毛な議論や論争に陥らないためにも相手のコンテキストを汲み取って同じ土俵で会話することが大切ですよ、という内容をオブジェクト指向やプログラミング言語を例にとって分かりやすく説明されていました。
『関心の分離って何?』 神崎善司さん
「関心の分離」というキーワードは意識していましたが、かと言って、何のために関心を分離するか?というところまで考えが至っていませんでした。本セッションでは何のために関心を分離するのか?ということを多くの例を通して丁寧に説明されていて腑に落ちました。
『オブジェクト IPPON グランプリ』 平鍋健児さん
モデレータ
- 株式会社チェンジビジョン 平鍋 健児さん
パネリスト
- Chatwork株式会社 加藤 潤一さん
- 株式会社バリューソース 神崎 善司さん
- 弁護士ドットコム株式会社 天重 誠二さん
- 株式会社オージス総研 原田 巌さん
平鍋さんがモデレータとしてオブジェクト指向についてのお題を出して、4人のパネラーが答えるセッションでした。平鍋さんのM-1を思わせる派手な衣装の出オチに目を奪われてしまいましたが、モヤモヤしていたオブジェクト指向への考えが「こういう捉え方もあるんだ」、「そういう見方もできるんだ」と再認識させていただきました。
最初のお題「なぜオブジェクト指向?」 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
神崎さん 「オブジェクト指向とは考えるツール」
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
加藤 潤一さん「Complexな状況に対応するため」 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
平鍋さん「オブジェクト指向との出会いはプログラミング言語(C++)から。メモリ上に残っているものがオブジェクト。このオブジェクト指向のパラダイムが設計や要求分析でも有用であることに気がついて適用範囲が広がった。」 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
お題「DDDってオブジェクト指向?」 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
「DDD(ドメイン駆動開発)」は『クラス指向』 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
「現実的に使えるモデリングパラダイムはオブジェクト指向しかない」、「ツールのサポートが得られるのはオブジェクト指向が主流」。DDDを推進するためのツールが「オブジェクト指向」。オブジェクト指向はDDDの本質では必ずしもない。 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
お題「オブジェクト指向はGUIか?」 オブジェクト指向を最初に提唱したのがアラン・ケイ。そしてアラン・ケイが積極的に推進したのがGUI。 #ooc_2020
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
神崎さん「当時の時代背景として最も大きな課題がGUIであった。複雑で大変な対象がGUIの開発であった。だから、初期のオブジェクト指向はGUIに適用例が多かった。」 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
加藤さん「オブジェクト指向が先にあって、GUIが出来上がった。オブジェクト指向の考え方がGUIに反映された。オブジェクト(アイコン)を先に選択して、次に操作を選ぶのはオブジェクト指向の考え方そのもの」 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
「UMLもグラフィカルに見せようという試みがあった」、「動くモデルで開発しようという動きもあった」 => 平鍋さん「それは、アジャイルに潰されてしまいましたね」 😱 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
お題「好きなモデリングツールは?」 from チェンジビジョン 平鍋健児 社長 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
神崎さん「Power Point」 「マクロ言語が使える」、「ユーザの敷居が低い」 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
「Astah」手書きのモデルも使うが最後の清書は Astah ! #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
加藤さんが話していたミロって、これでしょうか? ちなみに "astah" は 2007年からライセンスの更新を続けている長いユーザーです。忖度しました。😅 #ooc_2020 #ooc_b https://t.co/Xyr8cLqhjl
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
『アジャイル時代のモデリング』 平鍋健児さん
オブジェクト指向とアジャイル開発の歴史を追いつつ、時代がどこに向かっているのか分かりやすく説明させていただきました。
「ビジネスとして返済できる量の技術的負債を積んで開発を進めるためにはどうすれば良いか?」 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
「ソースコードにバラ撒かれた設計意図を後日どういうふうに紡いでいくのか?」「詳細な(やりすぎの)ドキュメント化は開発のスピードを阻害する。」 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
アジャイル開発が嫌ったのは 『Design Upfront (緻密な設計、巨大な設計)』 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
『NDUF (No Design Upfront)』と『BDUF (Big Design Upfront)』の間に。ある最適解『EDUF (Enough Design Upfront)』を見つけるために。 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
"Upfront" : 前金。先行投資。 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
「ユースケースを網羅的に描くのであればグラフィカルに記述するユースケース図は冗長である。表形式で十分である。」「Keyを表現するのにユースケース図は優れているし、Keyの記述のみで十分である。」 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
Keyとなる機能を最初に作って"KEEPS"する部分を引き継いで(複数の開発チームで)分割して実装する。最初から分割してはダメ。設計だけで出来上がったものがないのはダメ。KEEPSするべきものがはっきりしないのもダメ。 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
『設計の理由(Architecture Design Record)』を残しておくことが重要。なぜ、そのアーキテクチャやフレームワークを選択したのか? 選択の結果は残りやすいが、選択の理由はドキュメント化され辛い。でも大切。 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
『オブジェクトライフサイクルとメモリ管理を学ぼう』 ariakiさん
今回のカンファレンスで一番エキサイティングな内容だったかもしれません。メモリに配置されたバイト列(=オブジェクト)の挙動を低レベルからの解説はとても面白かったです。オブジェクト指向プログラミング言語でプログラムするときはあまり意識する必要はなさそうですが…
『オブジェクトライフサイクルとメモリ管理を学ぼう』 アセンブラ入門みたいな話になってきたぞ。嬉しい!😃 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
PML4, PDPE, PDE, PTE。うん、アセンブラ入門の内容だ。😅 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
高級言語(含むC/C++😅)で抽象化された『オブジェクト』の解説ではなく、MPUレベルの生々しいオブジェクトのお話ですね。投機実行なんてワードが登場した! #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
1つだけ覚えて欲しいこと「4キロバイト」。うん、覚えておくべきことが超低レベル(ハードウェアレベル)😅 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
(メモリー)アラインメントの説明が続いています。 JavaやC#を使っているときは、まず意識することはないでしょうね。C/C++でポインタを駆使したプログラムだとハマりまくります。新人さんに「組込みシステム・プログラミング」を教える内容はアラインメントからかな? 🤔 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
PHPとJavaにおける「オブジェクトの正体」。PHPのオブジェクトの参照カウンタとタイプとZVAL。参照カウンタからガベージコレクションの話に移るかな? #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
発表者は真面目に『コピー・オン・ライト(Copy-On-Write)』の説明をしています。 😅 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
Javaのオブジェクトの説明。ロック、メタデータ。 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
マルチスレッドからオブジェクトをアクセスしたときに競合を避けるための仕組みがロック。楽観的ロック、悲観的ロック。 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
メソッド内で完結するオブジェクトは new で生成したものであってもスタック領域に確保するのがGO言語。メモリ割り当てをコンパイラが適切に判断してくれるのがGO言語の凄いところ。プログラマが意識する必要がない。 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
循環参照によるメモリ・リークを解消するPHPの仕組み。「三色マーキング」GCが完了すると灰色がなくなり白黒がはっきりする。飼育員さん 🐼 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
IPL(Initial Program Loader)の説明が始まった。😅 #ooc_2020 #ooc_b
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
『オブジェクト指向プログラミングの現在・過去・未来』 増田亨さん
型の重要性、型の効用、型の使い方、型についてのあれこれを丁寧に説明いただき大変に勉強になりました。
「『オブジェクト指向』を本のタイトルに入れると売れないですよ」 某出版社編集者。きゃあ〜 😱 #ooc_2020 #ooc_a https://t.co/mjty5zTlOf
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
「言語設計者にとってのオブジェクト」=「メモリ上に配置されたビット列」 先のセッション「オブジェクトライフサイクルとメモリ管理を学ぼう」から繋がったかも。 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
「値に対してどのような操作(例えば加算や比較)ができるか?」を表現しているのが『データ抽象』 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
『型』と『クラス』と『モジュール』が一致するのがオブジェクト指向プログラミング(OOP) #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
Javaのsplitメソッドで涙を流して喜んだ増田亨さん。私は AWK に寄り道したので、オブジェクト指向でないところで split が実現できてオブジェクト指向に乗り遅れました。私がオブジェクト指向に合流したのは、やはり Ruby かな? 😅 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
ビジネス・ルールを分析・定義する方法として『データ抽象』はとても有効。ちょっとした魔法。 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
メモリ上に配置されているビット列が『整数』であるか『不動小数点数(実数)』であるかプログラマが意識する必要がない仕組み(型)を持ち込んだFORTRANから抽象データ化が始まった。 #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
「型がない(プログラミング言語)は辛い」と感じるプログラマが増えてきた。やっぱり型だよね〜 ❤️ #ooc_2020 #ooc_a
— Takehiko YOSHIDA (@chihayafuru) February 16, 2020
この日は附属高校の合格発表もあったようでキャンパスには大勢に人が集まっていました。