Upgrade to Pro — share decks privately, control downloads, hide ads and more …

『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学...

『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code

このイベントの登壇資料です

改訂新版「ミノ駆動本」の活用方法 〜設計勉強会による効果的な学習アプローチ〜
https://findy.connpass.com/event/339191/

MinoDriven

January 17, 2025
Tweet

More Decks by MinoDriven

Other Decks in Programming

Transcript

  1. © DMM 自己紹介 ミノ駆動 ( @MinoDriven ) 合同会社DMM.com プラットフォーム開発本部 第3開発部

    DeveloperProductivityGroup DMMプラットフォームの設計を改善し 開発生産性向上を図るのがミッション 2
  2. © DMM もうちょっと具体的な仕事の内訳 サービス全体で共通利用されるDMMプラットフォーム (アカウント管理、不正対策、決済、DMMポイント etc..) の設計品質改善 • 設計ガイドライン策定 •

    チームへの設計指導 • プラットフォーム所属のエンジニア(約120人!)に対する設計勉強会 ワークショップ形式の実践講習(←本日説明する内容です) • リファクタリング体制整備 3
  3. © DMM 7つのリニューアル! 1. 【変更】凝集度、結合度からカプセル化、関心の分離へ 2. 【加筆】インターフェースと実装の分離 3. 【変更】interfaceの解説を改善 4.

    【加筆】インターフェースと実装の分離にもとづいたinterface設計 5. 【加筆】アンカリング効果 6. 【加筆】ジョシュアツリーの法則 7. 【加筆】説明による設計スキルアップ 7
  4. © DMM 凝集度が高くても変更容易性が低いケース 9 class Util { // このaddメソッドは機能的凝集の構造 //

    しかしMoneyクラスに定義されていないので変更容易性は低い static Money add(Money money1, Money money2) { if (!money1.currency.equals(money2.currency)) { throw new IllegalArgumentException("通貨単位が違います。"); } Money added = new Money(); added.amount = money1.amount + money2.amount; added.currency = money1.currency; return added; } } // 金額を表現するクラス class Money { int amount; // 金額値 Currency currency; // 通貨単位 }
  5. © DMM 23 https://career-ed-lab.mynavi.jp/career-column/707/ より引用 講義や読書は学習定着率が低く、 非効率。 自転車の乗り方を本で読んでも乗れ ません。実際に自転車に乗り、バラン スの取り方を身体で覚える必要があ

    ります。 設計も同様に、実際に手とクチを動か し試行錯誤することで、実践レベルの スキルを効率よく獲得できます。 だからワークショップ形式の勉強会を 採用しています。
  6. © DMM 学習メニュー ミノ駆動本のうち次の5項目を 特に重要な基礎スキルとして位置付けています。 1日1項目ずつ学習します。 1. カプセル化 2. 関心の分離

    3. 単一責任原則 4. interface設計 5. 目的駆動名前設計 詳しくは『改訂新版 良いコード/悪いコードで学ぶ設計入門』を参照 30
  7. © DMM 学習ステップ 1項目あたり、以下に示すステップで学習します。 • ステップ1:予習 • ステップ2:概要確認、目線合わせ • ステップ3:問題のあるコードを探す

    • ステップ4:何が問題かをメモに起こす • ステップ5:問題コードについて説明する • ステップ6:再設計、実装 • ステップ7:どう設計したかをメモに起こす • ステップ8:成果発表 31 実習2時間 1時間
  8. © DMM 問題把握が不正確だと設計も不正確 上手く設計できない人がまれにいます。 共通する傾向があります。 • 何が問題かを正しく把握できていない、上手く説明できない • テーマとは別の問題を問題視してしまう •

    フレームワークや実装技術ばかりを気にしている (そのため解決したい問題にまで頭が回らない) 問題把握が不正確だと、解決手段としての設計もチグハグになります。 当然問題解決できません。 テーマとなる問題に集中するようファシリする必要があります。 45
  9. © DMM 47 変更容易性 現状構造 変更容易性の高い 理想構造 理想構造を知らないとギャップを 認識できない! 技術的負債を認識できない!

    「このコードの一体どこが負債な んですか?これが普通でしょ?」 問題の認識には、理想構造を知る 必要があります! バグをなるべく埋め込まず 素早く正確にコード変更できる度合い
  10. © DMM 設計の学習にミノ駆動本をすすめる理由 この学習方法では、ミノ駆動本の利用を強くオススメします。 • 何が問題なのかを分かりやすく解説しています。 そのため、問題を認識しやすくなるメリットがあります。 • 「問題のあるコードを探してください」と言われても、 慣れていない人にとっては見つけるだけで一苦労です。

    ミノ駆動本では、問題のあるコードを豊富に取り揃えています。 そのため「(進研ゼミっぽいノリで)あっ、これミノ駆動本で見たやつ だ!」みたく、問題コード発見の手助けになります。 これらはミノ駆動本ならではの特徴です。 51