【プリンシプルオブプログラミング】法則
目次
はじめに
この記事は「プリンシプルオブプログラミング」を読んで自分なりにまとめた学習メモです。
プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則
- 作者: 上田勲
- 出版社/メーカー: 秀和システム
- 発売日: 2016/03/23
- メディア: 単行本
- この商品を含むブログ (11件) を見る
法則 〜プログラミングのアンチパターン〜
ブルックスの法則
要員追加は「火に油」。
スケジュールが遅れているソフトウェア開発プロジェクトにおいて、遅れを取り戻すために、後半に人を追加すると、逆にさらなる遅延を招く。
【理由】
- 依存関係によるオーバーヘッドが発生する
- 教育に時間を取られる
【やるべきこと】
スケジュールが遅れた場合、リスケジュールする。
その際は、ユーザーと調整しながら、機能に優先度を付けて、段階的にリリースする。
コンウェイの法則
ソフトウェアの構成、つまり「アーキテクチャ」は、それを作った「組織」を反映する。
【意識すべきこと】
よいアーキテクチャを設計して、そのアーキテクチャに組織を合わせるようにすべき。
割れた窓の法則
たった一枚の割れた窓を放置すると、建物全体に対する深刻な破損が起こり始める。
つまり、「悪い設計」「間違った意思決定」「悪いコード」を放置すると、それがどんなに小さなものでも、ソフトウェア全体をごく短期間で腐敗させることになる。
【意識すべきこと】
コードのよくない部分をそのままにせず、発見と同時に修復する。
エントロピーの法則
エントロピーとは、物理学の用語で、「無秩序な度合い」を表すもの。
コードは自然に任せると、限界を超えるまで無秩序さが増大する。いわば「腐ったコード」になっていく。
【意識すべきこと】
コード腐敗の兆候をつかむ。
- 硬さ:変更の難しさ
- 脆さ:たった1つの変更によって、他の多くの部分が壊れてしまう度合い
- 移植性のなさ:他の環境への移植のしにくさ
- 扱いにくさ:設計構造の柔軟性のなさ
- コードの扱いにくさ
- 開発環境の扱いにくさ
- 複雑さ:「不必要な」要素の多さ
- 繰り返し:同じようなコードが何度も繰り返し現れること
- 不透明さ:コードのわかりにくさ
80-10-10の法則
- 80%:ユーザーが求めることを驚くほど短時間で実現することができる
- 10%:実現は可能だが相当な努力が必要となる
- 10%:完全に実現が不可能。ツールを使わない形で、泥臭い形で、要求を満たすことになる
【意識すべきこと】
ソフトウェア開発において、万能薬はないことを認識する。
ツールの使用は適材適所。
【その他】
「80:20の法則」:全体の数値の8割は、全体を構成するうちの2割の要素が生み出しているという、自然や社会に多く見られる現象のこと。
ジョシュアツリーの法則
人は名前を知った途端、それが見えるようになる。逆に、名前がなければ(知らなければ)、それが見えない。つまり、名前を知ることで存在を知る。
【やるべきこと】
名前を付け、言葉を作り、チームで共有する。
これには、「ユビキタス言語」を使用する。
ユビキタス言語とは、その問題領域の各要素を正確に表現する、チームの共通言語のこと。
セカンドシステム症候群
2番目のバージョンには、機能を盛り込みすぎてしまい、品質が悪く、機能の使い勝手も悪くなる傾向がある。
【意識すべきこと】
プログラマは、自制心を働かせ、「多機能主義」にならないようにする。
改めてユーザーを明確に定義し、イメージすること。
- ユーザーは、誰なのか?
- ユーザーは、何を必要としているか?
- ユーザーは、何が必要だと考えているか?
- ユーザーは、何を望んでいるか?
車輪の再発明
ある機能について、既にそれを実現しているコードやライブラリがあるのに、自分で改めて同じ機能をプログラミングしてしまうことがある。
【2つのパターン】
- 車輪を知らない:知識不足・勉強不足によるもの。
- 車輪を作りたい:欲求によるもの。つまり、確信犯の再発明。
【意識すべきこと】
車輪の再発明を避け、本来やるべき作業に注力する。
コードを書く前に必ず以下をチェックする。
ただし、ビジネス目的・学習目的であれば話は別。
ヤクの毛刈り
問題を取り組んでいる時、ある問題を解こうと思ったら別の問題が出てきて、なかなか本体、つまり大元の問題(の解決)にたどり着かないことがある。問題を解こうと思ったら、さらに別の問題が出てきて、ということが延々と続く。
この状態が長いと、もはや何を解決しようとしていたか、元の問題を忘れてしまうことすらある。
【意識すべきこと】
ヤクの毛を刈っている状態に陥っていると感じたら、立ち止まり、そもそも何が目的だったかを思い出す。
「目的からずれている」「時間やコストと見合わない」と認識した場合は、すぐに作業を止めるようにする。おそらく、もう別の道を探した方が、良い結果となるはず。
また、他の人が同じ状態にはまらないよう、その顛末をメンバーに共有する。