【プリンシプルオブプログラミング】法則

 

目次

はじめに

この記事は「プリンシプルオブプログラミング」を読んで自分なりにまとめた学習メモです。 

法則 〜プログラミングのアンチパターン

ブルックスの法則

要員追加は「火に油」。

スケジュールが遅れているソフトウェア開発プロジェクトにおいて、遅れを取り戻すために、後半に人を追加すると、逆にさらなる遅延を招く。

 

【理由】

  • 依存関係によるオーバーヘッドが発生する
  • 教育に時間を取られる

【やるべきこと】

スケジュールが遅れた場合、リスケジュールする。

その際は、ユーザーと調整しながら、機能に優先度を付けて、段階的にリリースする。

 

コンウェイの法則

ソフトウェアの構成、つまり「アーキテクチャ」は、それを作った「組織」を反映する。

 

【意識すべきこと】

よいアーキテクチャを設計して、そのアーキテクチャに組織を合わせるようにすべき。

 

割れた窓の法則

たった一枚の割れた窓を放置すると、建物全体に対する深刻な破損が起こり始める。

 

  f:id:ktr-05:20190707175824j:plain

 

つまり、「悪い設計」「間違った意思決定」「悪いコード」を放置すると、それがどんなに小さなものでも、ソフトウェア全体をごく短期間で腐敗させることになる。

 

【意識すべきこと】

コードのよくない部分をそのままにせず、発見と同時に修復する。

 

エントロピーの法則

 エントロピーとは、物理学の用語で、「無秩序な度合い」を表すもの。

コードは自然に任せると、限界を超えるまで無秩序さが増大する。いわば「腐ったコード」になっていく。

 

【意識すべきこと】

コード腐敗の兆候をつかむ。

  • 硬さ:変更の難しさ
  • 脆さ:たった1つの変更によって、他の多くの部分が壊れてしまう度合い
  • 移植性のなさ:他の環境への移植のしにくさ
  • 扱いにくさ:設計構造の柔軟性のなさ
    • コードの扱いにくさ
    • 開発環境の扱いにくさ
  • 複雑さ:「不必要な」要素の多さ
  • 繰り返し:同じようなコードが何度も繰り返し現れること
  • 不透明さ:コードのわかりにくさ

 

80-10-10の法則

  • 80%:ユーザーが求めることを驚くほど短時間で実現することができる
  • 10%:実現は可能だが相当な努力が必要となる
  • 10%:完全に実現が不可能。ツールを使わない形で、泥臭い形で、要求を満たすことになる

【意識すべきこと】

ソフトウェア開発において、万能薬はないことを認識する。

ツールの使用は適材適所。

 

【その他】

「80:20の法則」:全体の数値の8割は、全体を構成するうちの2割の要素が生み出しているという、自然や社会に多く見られる現象のこと。

 

ジョシュアツリーの法則

人は名前を知った途端、それが見えるようになる。逆に、名前がなければ(知らなければ)、それが見えない。つまり、名前を知ることで存在を知る。

 

【やるべきこと】

名前を付け、言葉を作り、チームで共有する。

これには、「ユビキタス言語」を使用する。

ユビキタス言語とは、その問題領域の各要素を正確に表現する、チームの共通言語のこと。

 

セカンドシステム症候群

2番目のバージョンには、機能を盛り込みすぎてしまい、品質が悪く、機能の使い勝手も悪くなる傾向がある。

 

【意識すべきこと】

プログラマは、自制心を働かせ、「多機能主義」にならないようにする。

改めてユーザーを明確に定義し、イメージすること。

  • ユーザーは、誰なのか?
  • ユーザーは、何を必要としているか?
  • ユーザーは、何が必要だと考えているか?
  • ユーザーは、何を望んでいるか?

 

車輪の再発明

ある機能について、既にそれを実現しているコードやライブラリがあるのに、自分で改めて同じ機能をプログラミングしてしまうことがある。

 

【2つのパターン】

  • 車輪を知らない:知識不足・勉強不足によるもの。
  • 車輪を作りたい:欲求によるもの。つまり、確信犯の再発明。

【意識すべきこと】

車輪の再発明を避け、本来やるべき作業に注力する。

コードを書く前に必ず以下をチェックする。

ただし、ビジネス目的・学習目的であれば話は別。

 

ヤクの毛刈り

問題を取り組んでいる時、ある問題を解こうと思ったら別の問題が出てきて、なかなか本体、つまり大元の問題(の解決)にたどり着かないことがある。問題を解こうと思ったら、さらに別の問題が出てきて、ということが延々と続く。

この状態が長いと、もはや何を解決しようとしていたか、元の問題を忘れてしまうことすらある。

 

【意識すべきこと】

ヤクの毛を刈っている状態に陥っていると感じたら、立ち止まり、そもそも何が目的だったかを思い出す。

「目的からずれている」「時間やコストと見合わない」と認識した場合は、すぐに作業を止めるようにする。おそらく、もう別の道を探した方が、良い結果となるはず。

また、他の人が同じ状態にはまらないよう、その顛末をメンバーに共有する。