プリンシプル オブ プログラミング Kou 1
自己紹介 稲舟 洸(Inafune Hikaru) / Kou 札幌生まれ プログラマー - PHP、React、Azure 趣味 : バスケの観戦 X(旧Twitter) : @kou_tech_1017 2
プリンシプル オブ プログラミング 3
プリンシプルとは よいプログラミングのためのエッセンス - 「普遍的」、「定説的」、「本質的」な知識 特定の条件や背景に依存せず、広く通用し 信頼があり 本質的な問題や原理に焦点を当てた知識 4
プリンシプルを学ぶ目的 プリンシプルがプログラマとして成長する「正道」であり「近道」 現在ある技術は、プリンシプルの目的を具現化したもの したがって、本質を知っていれば、具体的な技術を学習するときにその 「存在理由」を理解することができる 5
目次 1. 前提 ~ プログラミングの変わらぬ真実 ~ 2. 原則 ~ プログラミングのガイドライン ~ 3. 思想 ~ プログラミングのイデオロギー ~ 4. 視点 ~ プログラマの視る角度 ~ 5. 習慣 ~ プログラマのルーティーン ~ 6. 手法 ~ プログラマの道具箱 ~ 7. 法則 ~ プログラミングのアンチパターン ~ 6
第1章 前提 ~プログラミングの変わらぬ真実~ 7
プログラミングに銀の弾丸はない プログラミングの諸問題をすべて解決する策はない。 時代によって、最善の解決策は異なる。 一般的に言われている悪い設計やコードでも、 当時の背景があり、その時のベストな判断をしていることが多い 8
プログラミングに銀の弾丸はない 対象の問題を解決! 別の形で新たな課題が発生! 9
プログラミングに銀の弾丸はない 対象の問題を解決! 多くの場合、トレードオフである 別の形で新たな課題が発生! 10
第2章 原則 ~プログラミングのガイドライン~ 11
Keep It Short and Simple コードは徐々に無秩序で複雑になっていく。 そのため、シンプルなコードをシンプルに保つことを心がける。 12
Keep It Short and Simple 例 ) 注文情報を保存する func 注文 (商品) { func 注文 (商品) { 注文保存(商品) 注文保存(商品) 請求書発行(商品) } 発送(商品) } 13
Keep It Short and Simple 例 ) 注文情報を保存する func 注文 (商品) { func 注文 (商品) { 注文保存(商品) 注文保存(商品) 請求書発行(商品) } 発送(商品) シンプル 責務過多 } 14
第3章 思想~プログラミングのイデオロギー~ 15
インタフェースと実装の分離 インタフェース ● モジュールが持つ機能を定義し、モジュールの使用方 法を定める部分 実装 ● モジュールが持つ機能を実現しているコード部分 16
インタフェースと実装の分離 モジュールの使用者はインターフェース仕様だけを知っていれば、 そのモジュールを容易に使用することができる。 次のようなメリットもある。 ● ● ● ● モジュール同士が疎結合になることで、修正時の影響範囲を小さ くできる。 モックがしやすいため、テストが書きやすい。 作業の分業が効率化される。 他のモジュールへの置換が容易である。 17
第4章 視点~プログラマの視る角度~ 18
技術的負債 プログラミングには次の2つがある。 1. 綺麗なコード 2. 素早く汚いコード 素早く汚いコードは、 ソフトウェアとしての負債を抱えることになる。 19
技術的負債 時間がなかったり緊急性が高い修正を求められることがある。 ただし、負債となるコードは - コードを後で直す時間は大抵ない 稼働中のコードを修正するのも難しい なるべく綺麗なコードを書くことを心がける。 負債となるコードは、手がかりを残して早急に対応する。 20
第5章 習慣~プログラマのルーティーン~ 21
1歩ずつ少しずつ 複数の作業を同時に行うと混線して、 コードの質が落ちたり、失敗につながることがある。 決して複数の問題を同時に相手にせず、順に対処する。 コードと同様、作業もシンプルな単位に分けて行う。 22
第6章 手法 ~プログラマの道具箱~ 23
ラバーダッキング プログラミングにおいて、発生している問題や、問題を抱 えているコードを「誰かに」説明する。 問題の原因に自ら気づき、自己解決することがある。 相手との関係値によるが、まず質問する前にやってみる。 24
第7章 法則 ~プログラミングのアンチパターン~ 25
ジョシュアツリーの法則 人は名前を知った途端にそれを認識し、 再利用することができる。 26
ジョシュアツリーの法則 人によって同じ意味で使われている用語が異なる表現や解釈を生む。 統一した用語を用いることが重要である。 実体験の例 - 生徒 - 受講生 - メンバー - 先生 - 講師 - インストラクター 27
プログラミングの基本原則や思想を理解し、 普遍的な知識を身につけよう! 28
ご清聴ありがとうございました! 29