Slide 1

Slide 1 text

技術書を効果的に内面化 する実践技法 有限会社システム設計 増田 亨 #forkwell_study 2025/09/02(火) 技術書を「血肉」に変える 、ITエンジニアの学習戦略

Slide 2

Slide 2 text

自己紹介 専門領域 • 業務系アプリケーションの開発 最近の仕事 • 大きな泥団子退治のアドバイザ • エンジニアの成長支援 2 増田 亨(masuda220) 著書(2017) 訳書(2024) *1 *2 *1 増田 亨(2017) 『現場で役立つシステム設計の原則』技術評論社 *2 Vlad Khononov(著) 増田 亨、綿引 琢磨(訳) 2024 『ドメイン駆動設計をはじめよう』オライリージャパン

Slide 3

Slide 3 text

技術書をざっくり分類してみる ① アンチパターン改善カタログ ② パターン本/スタイル本 ③ ソフトウェア設計論/プログラミング論 ④ 知識体系本 ⑤ 深掘り本 ⑥ 読み物 (番外)すぐわかる系の怪しげな(?)本 3

Slide 4

Slide 4 text

技術書を読む目的をざっくりあげてみる • 知識を増やしたい • スキルを向上したい • 直面している課題を解決したい • トレンドに乗りたい • 知的好奇心 • 自己啓発 … 4

Slide 5

Slide 5 text

技術書を読む目的を意識する 目的(理由)がはっきりしない本の購入と読書 - なんとなく買う → お金のムダかも - なんとなく読む → 時間のムダかも 目的と置かれた状況によって ✓ 役に立つ本が異なる ✓ 読み方(使い方)が変わる 5

Slide 6

Slide 6 text

これからお話する内容 ソフトウェアの設計スキル向上に特化した技術書の読み 方(使い方) 私がどんな本をどう使ってどんな設計スキルを身に付け てきたかを振り返ってみる 正解とかオススメではなく、体験談 6

Slide 7

Slide 7 text

ソフトウェア設計とは? 7

Slide 8

Slide 8 text

良い設計は悪い設計より変更しやすい 8

Slide 9

Slide 9 text

良い設計は悪い設計より変更しやすい 『達人プログラマー ―熟達に向けたあなたの旅』第2版 Andrew Hunt(著)David Thomas(著)村上雅章(訳) 2020年 発行:オーム社 9 Tip14 自分の設計の考え方に方向性と一貫性を生み出した言葉 読み物

Slide 10

Slide 10 text

「設計スキル」とは? 10

Slide 11

Slide 11 text

頭の中の二つの思考システム 11 速い思考 遅い思考 形式知 直感的判断 頭の中 暗黙知 分析的判断

Slide 12

Slide 12 text

速い思考と遅い思考 特性 速い思考 遅い思考 発動 無意識、自動的に発動 意識して発動 稼働 常時稼働、停止できない 通常は待機モード 短時間で電池切れ 判断の種類 経験に基づく直感的選択 熟考による選択 知識の種類 暗黙知 言語化、可視化しにくい 形式知 言語化、可視化できる 12 体験知 身体知

Slide 13

Slide 13 text

設計スキルを身に付ける 短時間で電池切れの熟考(遅い思考)では仕事にならない 速い思考で判断し行動できる領域を広げる 速い思考で判断し行動した時の失敗率を下げる 13

Slide 14

Slide 14 text

速い思考を身に付ける 14

Slide 15

Slide 15 text

設計スキル(速い思考)が身に付く4条件 ① 選択的注意 設計に注目し情報を増幅する ② 能動的関与 設計を主体的に判断し行動する ③ モデル修正 予測と実際の差異から内面モデル修正 ④ 定着 繰り返して形式知を身体知に変換 15 AND AND AND

Slide 16

Slide 16 text

ソフトウェア設計スキル 16 速い思考 コードで表現 された設計 技術書 遅い思考 形式知 直感的判断 頭の中

Slide 17

Slide 17 text

ソフトウェア設計スキルの向上 17 速い思考 コードで表現 された設計 技術書 遅い思考 形式知 直感的判断 選択的注意 能動的関与 内部モデル修正 定着 頭の中 4条件で内面化

Slide 18

Slide 18 text

ソフトウェア設計スキルの向上 18 速い思考 コードで表現 された設計 技術書 遅い思考 形式知 直感的判断 選択的注意 能動的関与 内部モデル修正 定着 頭の中 ここを 育てる 4条件で内面化

Slide 19

Slide 19 text

速い思考を身に付けるための 技術書の使い方 19

Slide 20

Slide 20 text

技術書の分類と速い思考の育て方 ① アンチパターン改善カタログ ② パターン本/スタイル本 ③ ソフトウェア設計論/プログラミング論 ④ 知識体系本 ⑤ 深掘り本 ⑥ 読み物 20

Slide 21

Slide 21 text

①アンチパータン改善カタログ ✓ どういう状態が悪い設計で、どうすれば良い設計に改 善できるかが具体的で選択的注意をしやすい ✓ 能動的実験とフィードバックによるモデル修正が容易 ✓ 繰り返し出くわすので速い思考として定着させやすい 21 三冊とも、著者の豊かな経験に基 づいた内容で、かつ、土台にある 著者の設計論/プログラミング論 がしっかり説明されている

Slide 22

Slide 22 text

技術書の分類 ① アンチパターン改善カタログ ② パターン本/スタイル本 ③ ソフトウェア設計論/プログラミング論 ④ 知識体系本 ⑤ 深掘り本 ⑥ 読み物 22

Slide 23

Slide 23 text

②パターン本/スタイル本 ✓ 100冊以上持っている(使ってきた) オブジェクト指向分析設計、ビジネスプロセス、データモデル、ビジ ネスルール、アーキテクチャスタイル、… ✓ 一般化されているため、現実の特定課題とのギャップ が大きくマッピングが難しい(身体知になりにくい) ➢ 利用方法① 安直な初期モデルとして使い、とっととアンチ パターンに成長させて設計改善に取り組む ➢ 利用方法② 設計改善の視点探しに使う(遅い思考の補助) 23

Slide 24

Slide 24 text

技術書の分類 ① アンチパターン改善カタログ ② パターン本/スタイル本 ③ ソフトウェア設計論/プログラミング論 ④ 知識体系本 ⑤ 深掘り本 ⑥ 読み物 24

Slide 25

Slide 25 text

③ソフトウェア設計論/プログラミング論 ✓ 遅い思考、特に、本の分析的な読み方の訓練 ✓ 著者の主張の要点を発見する ✓ 論理展開(前提、説明ロジック、補強材料)を把握する ✓ さまざまな設計論の要点と論理展開を比較しながら 自分なりの設計論を形にしていくと、速い思考の 発動パターンと発動の強度が変化する(質が変わる) 25 Dahl, Dijkstra and Hoare “Structured Programming” Liskov and Guttag “Abstraction and Specification in Program Development” Meyer “Object Oriented Software Construction” Daniel Jackson “The Essence of Software” C, Java, Simula 67, Haskell, Rust

Slide 26

Slide 26 text

技術書の分類 ① アンチパターン改善カタログ ② パターン本/スタイル本 ③ ソフトウェア設計論/プログラミング論 ④ 知識体系本 ⑤ 深掘り本 ⑥ 読み物 26

Slide 27

Slide 27 text

④知識体系本 ✓ ○○BOK(Body of Knowledge) SWEBOK(ソフトウェア工学)、DMBOK(データマネジメント)、 その他、幅広い知識領域を俯瞰的・体系的に説明している書籍 ✓ 視野の広さが価値だが暗記的知識なので、速い思考に も、遅い思考にも役に立たない ✓ 未知の領域の世界地図として使う • 自分が知っている領域を相対化する • 自分が知らない領域の存在を認識する 27

Slide 28

Slide 28 text

技術書の分類 ① アンチパターン改善カタログ ② パターン本/スタイル本 ③ ソフトウェア設計論/プログラミング論 ④ 知識体系本 ⑤ 深掘り本 ⑥ 読み物 28

Slide 29

Slide 29 text

⑤深掘り本 ✓ 複雑なシステムの内部構造と動作の仕組みの解説本 ✓ 速い思考の通用範囲や適用タイミングに関する感覚的 (無意識で自動的な)判断の質があがる ✓ そういう効果が大きかった知識領域 ✓ OS、計算資源管理と実行制御 (Unixカーネルとプロセス管理) ✓ データベースの内部構造(Oracle, PostgreSQL) ✓ ネットワーク通信の構造と仕組み(TCP/IPプロトコルスタック) ✓ 事業活動の構造と仕組み(差別化戦略と価値連鎖体系) 29

Slide 30

Slide 30 text

技術書の分類 ① アンチパターン改善カタログ ② パターン本/スタイル本 ③ ソフトウェア設計論/プログラミング論 ④ 知識体系本 ⑤ 深掘り本 ⑥ 読み物 30

Slide 31

Slide 31 text

⑥読み物 ✓ ソフトウェアエンジニアのもののとらえ方、価値観、 心構えなどを学べる ✓ 速い思考の一部である感情的な判断(好ましさ)の軸 が生まれ強化される 『達人プログラマー』 『人月の神話』 『継続的デリバリーのソフトウェア工学』 『優れたデザインにとってコンセプトが重要な理由』 31

Slide 32

Slide 32 text

設計スキル習得と技術書の使い方 32 速い思考 体験知・身体知 ①アンチパターン 改善カタログ ②パターン本 スタイル本 ③設計論 プログラミング論 ④知識体系本 ⑥読み物 ⑤深掘り本 実際のコードで 効果的に学ぶ 速い思考の 質を上げる 未知の領域の世界地図 好ましさの 軸を持つ 速い思考の 質を上げる 設計改善のヒント

Slide 33

Slide 33 text

私が身に付けてきた設計スキル 33 私の内面で無意識に自動的に発動する速い思考

Slide 34

Slide 34 text

速い思考 初級レベル 乱雑なコードをわかりやすく整頓 ① コメントアウトコードの削除 ② デッドコードの削除 ③ チャンキング(空白行によるコード分割) ④ 説明用変数の導入 ⑤ ヘルパーメソッドの抽出 ⑥ ガード節の導入 34 アンチパターン 改善カタログ 15の整頓パターンの中でも 特に身体知になっているもの

Slide 35

Slide 35 text

速い思考 中級レベル ごちゃごちゃしたロジック記述をクラスに抽出して整理 ① 値の算術演算・比較演算の抽出(値オブジェクト) ② コレクション操作の抽出(コレクションオブジェクト) ③ 条件分岐の抽出(区分オブジェクト) ④ 計算判断文脈の分離(メソッドオブジェクト) 35 アンチパターン改善カタログ 72のパターンの中で意識的に内面化したもの

Slide 36

Slide 36 text

速い思考 上級レベル 設計全体の方向性、一貫性、持続性 ① 入出力モジュールと計算判断モジュールの分離 ② アプリケーション記述とプリミティブ記述の階層化 ③ 業務知識を使って名前空間を改善 ④ ソフトウェア設計を事業戦略に整合させる (事業視点で優先順位を判断する) 36 設計論/プログラミング論、 深掘り本、読み物、 パターン本/スタイル本 さまざまな体験と形式知が溶け合った身体知

Slide 37

Slide 37 text

参考 37

Slide 38

Slide 38 text

設計スキル習得モデルの参考文献 38