こちらのトークイベントで用いたスライドです。
『良いコード/悪いコードで学ぶ設計入門』著者トーク https://modeling-how-to-learn.connpass.com/event/242976/
『良いコード/悪いコードで学ぶ設計入門』でエンジニアリングの当たり前を変える2022/4/26 ミノ駆動
View Slide
#ミノ駆動本公式ハッシュタグです。本日のイベントや、拙著のご感想ツイートなどは、このハッシュタグをお使いいただけると嬉しいです。
おしながき● 自己紹介● 本書概要● 本書で向上が期待できるスキル● 本書の特徴● 評判の声● 各章紹介● この先に目指す世界● 執筆裏話
自己紹介ミノ駆動@MinoDriven仙塲 大也電子機器メーカーや大手精密機器メーカー、そしてクラウドワークスを経て、2021年4月にREADYFOR株式会社にジョイン。アプリケーションアーキテクトとして、レガシーシステムのリファクタリングや拡張性向上設計など、システム設計に従事。悪しき構造が招く凄惨な結末を風刺した「クソコード動画」シリーズの作者。
クソコード爆殺本良いコード/悪いコードで学ぶ設計入門〜保守しやすい成長し続けるコードの書き方〜
様々な悪しきコードを例に設計を学べる技術書
Amazonほしい物ランキング和書No.1
ヨドバシ.com楽天ブックス予約段階で在庫切れ発生(現在は回復しています)
4/7初版部数 2倍増刷
4/25発売前部数 1万部突破!ほぼ前例なし
4/26 各種電子版発売Amazon Kindle楽天KoboGihyo Digital Publishingいちはやく読んでみたい方はどうぞ
そして4/30紙版 全国発売
本書で向上が期待できるスキル
習得スキル①悪しきコードが見えるようになる
理想形を知ると理想と違うものを認識できる
大昔、疫病は悪魔のシワザだと恐れられた
悪魔の正体が病原菌だと分かり対処方法が劇的に革新
悪しきコードも同じ理想形を知り正体を見破ることで正しく対処できるようになる
どこが悪しきコードなのか見えない、よく分からない
(悪しきコードが)見える、見えるぞ!ムスカ大佐の気分になれるとてもうれしい
悪しきコードが光って見える
動悸、息切れ、引きこもりになるかもしれない
習得スキル②変更に強い構造を設計するスキル
なるべくバグを埋め込まず素早く正確にコード変更できるスキルが身に付きますただし、練習は必要です
本書の特徴
特徴①初級~中級向けの設計入門書
入門書
現実には…入門書
入門書わーい、ゴールに到着したぞー!今日から月収7桁万円だー!!この先の世界が認知されていないケースも!(むしろこちらが多いのでは…)
入門書初級と中級の間にかける橋
新人さんに命名や責務の重要性を説明しようにも、それらをおろそかにしたら何が起こるのか、いちいち例えを出すのはとても大変。また、設計上おさえるべきポイントを説明しようにも、都度口頭だと、説明が五月雨になったり抜け漏れが生じたりして、いまいち意図が伝わらない、といった事態に陥りがち。
本書は、どういうのが悪しきコードなのか、何がマズいのか、設計でどう解決すればいいのか整理して記述されています。新人教育にピッタリ。チーム全体の設計力向上、底上げを期待できます。
本書ならではのユニークな設計観点をいろいろ盛り込んでいるので、中級以上の方にもオススメです!
特徴②膨大なサンプルコードと事例で解説
どこのページを開いても、ほぼソースコードで満たされています。それほど具体事例を示すコードが豊富です。圧倒的ボリュームです。イメージの難しい抽象的な設計論ではなく、具体的なソースコードを提示してイメージしやすい構成になっております。
特徴③実践で使えるオブジェクト指向設計
私は業務でアプリケーションアーキテクトとして、リファクタリングや設計全般を推進しています。普段から泥臭いコードと格闘しているのです。私が普段の仕事で用いている、構造改善のためのオブジェクト指向設計の実践的ノウハウを記載しています。
設計の理論武装ができます!かつてリファクタリングするかどうかで血みどろの戦いをしていたとき、反対勢力を説得するために理論武装する必要がありました。そのときに得たノウハウが本書には活きています。
特徴④Javaで書かれています
広く読んでいただくことを意図し、Javaを採用しました。利用者数が最も多いためです。ですがJavaの本ではありません。広く読まれることを意図しているので、Java独自の言語仕様やフレームワーク知識はあまり用いていません。他の言語でも読み替えが容易になるよう配慮しています。
Webアプリ、ネイティブアプリ、組込みソフトウェア、ゲーム……特定のIT領域に限定せず、オブジェクト指向言語ならばどのIT領域でも広く適用可能な設計手法として記述しています。DBやhtml、ファームウェア技術や特定のフレームワークといった知識は、本書では取り扱っていません。
特徴⑤ドツボにはまりそうなパターンを網羅本書最大かつ他にはないユニークな特徴
再現性のある罠
私は分野の異なる様々なサービス開発の経験。どのサービスでも、悪しきコードの傾向はほとんど皆同じ。みーーーーーーーんな同じ罠にハマっている。そうした再現性のある罠に対応する、再現性のある対処方法を豊富に解説しています。
つまり
この本に書かれてることを遵守すれば大抵の悪しきコードは解決する(豪語
悪しきコードが最も書かれるタイミングは、仕様変更時。仕様変更時にやってしまいがちな悪しき実装、悪しき行動に着目し、どう改善すれば良いかを解説します。仕様変更時の罠について記述した書物は、(私の観測範囲では)ほとんどあまりない印象。本書最大のユニークさであり、皆さんのスキル向上に貢献する内容だと自負します。
評判の声
各章の紹介
第1章 悪しき構造の弊害を知覚する1, 2章は新卒プログラマさん向けの章です。そもそも設計には、「設計しなければ」という危機意識が必要。危機意識の醸成には、悪しきコードによる弊害を知覚する必要があります。悪しきコードの弊害をダイジェスト的に紹介する章です。
第2章 設計の初歩いきなりクラス設計の話となると、新卒プログラマさんにとっては重いので、簡単な命名やメソッドの設計をベースに、どういうことをするのが設計なのかを学ぶ章です。1, 2章を通じて、設計が全く分からない新人さんでもステップアップしやすい構成になっています。
第3章 クラス設計すべてにつながる設計の基盤3章から設計解説の本番スタート!低凝集で貧弱なデータクラスを、高凝集なValueObjectへ成長させる例を用いて、クラス設計の基本を解説します。本章で解説する設計の考え方が本書全体の基盤になる、超重要な章です。本書全体の理解には、この章の理解が必須です。
第4章 不変の活用安定動作を構築する変数の値を変更できるなど、状態変更可能なことを可変、変更不能なことを不変といいます。可変が前提のロジックだと、変数がいつの間にか意図しない値にすり変わっているなど、挙動の予測が難しくなります。保守や変更が大変になります。不変を活用して、予測しやすい安定した挙動の設計方法を解説します。
第5章 低凝集バラバラになったモノたち強く関連し合うデータとロジックがバラバラに散在している構造を低凝集といいます。低凝集は重複コードや修正漏れを生じさせ、なにかと厄介です。低凝集に陥りがちな様々なパターンと、対策方法を解説します。
第6章 条件分岐迷宮化した分岐処理を解きほぐす技法条件分岐は、条件に応じて処理を切り替える、プログラミングの基本制御です。しかし条件分岐をずさんに扱うとロジックが複雑になり、混乱します。この章では、条件分岐の複雑さを低減し、コントロールできるようになるための設計方法を解説します。特にロジック単純化の鍵を握る、interfaceの使いこなし方について重点的に解説します。
第7章 コレクションネストを解消する構造化技法配列やリストといったコレクションには、ループ処理が伴います。ループ処理周りも多重にネストしてロジックが混乱しがちです。コレクション周りのロジックを簡明にする設計を解説します。
第8章 密結合絡まって解きほぐせない構造責務の異なる様々なロジックが複雑に絡み合い、依存関係が強い構造を密結合といいます。密結合は、わずかなロジック変更でも他の多くの箇所に影響が伝搬しやすく、バグ化しやすい構造です。変更に弱いのです。8章では、有名なソフトウェア原則「単一責任の原則」をベースに、密結合な構造を疎結合な構造へ改善する設計手法を解説します。「単一責任の原則 is 何」「責務 is 何」がしっかり理解できるようになります。また、密結合は様々な要因により陥りがちです。密結合に陥る様々なパターンと対策方法も、8章で取り揃えております。
第9章 設計の健全性をそこなうさまざまな悪魔たちこの章では、null問題や例外の握り潰しといった、邪悪な実装シリーズを解説します。単純でありながら、プログラミング初心者が陥りがちな凶悪な罠ばかりなので、新卒プログラマさんにはぜひ目を通してほしい章です。
第10章 名前設計 ―あるべき構造を見破る名前―メソッドやクラスに付与する名前は、可読性に影響するだけではありません。ロジック構造を大きく左右します。いい加減な命名をすると、あっという間に粗悪な構造が出来上がります。私が提唱する目的駆動名前設計をベースに、最適なロジック構造を導き出すための名前の設計方法を解説します。また、命名でついつい陥りがちな罠やその対策方法を、数多く解説しています。名前設計のさまざまな状況に対応できるようになります。
第11章 コメント保守と変更の正確性を高める書き方ソースコード上のコメントは、読み手の理解を促すために記述します。しかし、いい加減なコメントを書くと読み手に正しく意図が伝わらなかったり、ウソを伝えてしまう可能性があります。保守や変更の正確性を向上させるためのコメントの書き方を解説します。
第12章 メソッド(関数)良きクラスには良きメソッドありメソッド設計の良し悪しは、クラス設計に密接に連動します。メソッド設計が良くないと、余波でクラス設計が悪化します。逆もまた然りです。この章ではメソッドの設計方法を集中的に取り扱います。
第13章 モデリングクラス設計の土台物事の特徴や関係性を簡単に図で表したものをモデルといいます。モデルをつくる活動をモデリングといいます。モデルはクラス設計の土台です。モデルがいい加減だったり、もしくはモデリング自体をしないと、クラス構造が粗悪になり、変更が難しくなってしまいます。モデルが、構造や変更のしやすさにどう影響してくるのか、どうモデリングすれば良いのかを解説します。
第14章 リファクタリング既存コードを成長に導く技この章では、リファクタリングの方法を解説します。「リファクタリング is 何?」の知識がない新人さんもステップアップして理解できるよう記述しています。また、テストがないコードをリファクタリングする方法や、リファクタリング時に陥りがちな罠など、中級者にも有用なテクニックを解説しています。
第15章 設計の意義と設計への向き合い方15章以降にはソースコードは登場しません。設計にまつわる考え方や取り組み方を解説します。この章では、なんのために設計するのか、その意義を深掘りします。そして我々エンジニアがどう向き合い、設計品質を高めていけばよいのかについて解説します。品質の指標や、指標をコントロールする各種ツールも紹介します。会社の事業成長とエンジニア自身のスキル成長について解説している、結構重要な章です。
第16章 設計を妨げる開発プロセスとの戦い設計が上手く働かないのは、チームの設計スキルが未熟であること以外に、開発プロセスに問題があるケースが多いです。この章では設計を妨げてしまう開発プロセスを取り上げます。コミュニケーション、心理的要因、組織上の課題etc……それぞれの対策方法を解説します。
第17章 設計技術の理解の深め方最終章です。読者さんがさらに自主的に設計スキルを高めていく方法を解説します。中・上級へのステップアップに有用な技術書を紹介します。用途や難易度に応じて様々な技術書を紹介しています。拙著で設計知識の足固めをしておけば、スムーズにスルスルと理解が進むでしょう。また、設計技術の効率的な学習方法も解説しています。
『バグハンター2 REBOOT』https://game.nicovideo.jp/atsumaru/games/gm22047無料。PC、スマホでプレイ可。副教材的な位置づけです、ぜひ遊んでね
そろそろタイトルの「エンジニアリングの当たり前を変える」を回収したいと思います
毎年12兆円以上
毎年12兆円以上2025年以降技術的負債による経済的損失
負債による損失(毎年):12兆円以上2021年度国家予算:142.5兆円喫緊の課題我々は対処していかなければならない
2022年現在 必須スキルLinuxGitGitHub
2022年現在 必須スキルLinuxGitGitHubDockerAWS近年はこのへんも推奨スキルになりつつある。
2022年現在 必須スキルLinuxGitGitHubDockerAWS変更容易性を考慮した設計スキルむしろコレを当たり前にすべきでは!?
より高みを目指す人はアーキテクトへ!
出典:経産省『IT人材の最新動向と将来設計に関する調査結果』( 2016)アーキテクトが全然足りない!体感レベルで人材不足
ITアーキテクト種別一例インフラアーキテクトソリューションアーキテクトアプリケーションアーキテクトインテグレーションアーキテクト本書はここの道に通ずる!ぜひみんなも目指そう!やれる!全然やれる!!
設計が当たり前の世界へ
でもそんなことできるの?そもそも「変更容易性」すら認知されているか疑問……
10.9%
10.9%マーケットシェア理論影響目標値市場にとって影響を無視できないシェア率マスコミュニケーションにおいてはどんなにマイナーな事柄でも認知度が全人口の10.9%を超えるとあっという間に広がるとされている
国内のプログラマ人口:約92万人92万人 x 10.9% = 約10万人約10万人に変更容易性設計が認知されれば良い10万部売れれば良い
『リーダブルコード』10万部以上『ゼロから作るDeep Learning』20万部以上
つまり10万部しつこい
みんなで広めよう
おしまい☆
ここからは執筆裏話
クソコード図鑑(2020/01/02)
なんと、その1ヶ月後に編集者さんから…
夢だけど夢じゃなかった!
クソコード動画から繋がった書籍執筆
提案は受けたが企画が通るかが最初の関門編集者さん:書籍として商品化するには、売れるに相応しい内容が盛り込まれている必要があります。クソコード動画以外で、書籍に記載できそうなネタは、何かないでしょうか?目次みないなアウトライン程度で結構なのですが。何かリストアップできませんか?
ゲーム『バグハンター2』のモンスターリストをそのまま転記して出したところ…
即、「企画通りました、執筆に取り掛かりましょう」
ゲーム『バグハンター2 REBOOT』があって、拙著『良いコード/悪いコードで学ぶ設計入門』が誕生したのです。両者は、根っこでは実は世界が繋がっているのです。
ご静聴ありがとうございました