検索
連載

プログラミングに特効薬や万能薬はない――複雑さへの対抗手段としての抽象化とKISS問題解決力を高めるコツはプログラミングの原則・思考にあり(3)(2/4 ページ)

本連載では、さまざまなプログラミングの原則・思考の中から、特に問題解決力を高めるのに役立つものをピックアップ。プログラマーは、その思考法をビジネスに応用し、そうではない人はプログラマーと一緒に働く際に思い出してほしい。今回は「80-10-10の法則」「パレートの法則」「KISS」「less is more」「オッカムの剃刀」などについて。

Share
Tweet
LINE
Hatena

80-10-10の法則

 英語  80-10-10 rule

 What 〜プログラミングに万能薬はない

 高水準のツールや言語によってソフトウェアを開発すると、ユーザーの求めることの80%は、驚くほど短時間で実現することができます。しかし、残り20%のうち、10%は、実現は可能ですが相当な努力が必要となります。さらに、最後の10%は、完全に実現が不可能です。

 そのため、ユーザーが100%を求めると、開発が立ち往生してしまいます。

 この時点で、開発がかなり進んでいた場合、採用したツールを捨て去り、1から開発し直すのは現実的ではありません。そうなった場合、一部分については、ツールを使わない形で、泥臭い形で、要求を満たすことになります。

 Why 〜プログラミングの問題領域は広すぎる

 ソフトウェア業界は、1990年代中頃から十数年かけて、業界をあげて「ある実験」を行っていました。実験の内容は、飛び抜けた能力を持っているわけではない技術者の生産性を飛躍的に上げる「万能のツール」を作ることです。例えば、モデル駆動開発や4GLなどです。

 そして、実験の結果、単独のツールだけで、すべての分野において完全な成果を得るのは難しいことが明らかになります。

 この種のツールは、よりやさしく、より品質のよいソフトウェアを開発するという観点で作られます。そのため、達人ではない技術者にトラブルを起こさせないよう、言語にかなりの機能的制限が加えられます。その結果、ツールには自分の「守備範囲」が生じることになります。

 しかし、ソフトウェアは無限に広範囲の問題を扱います。ある1つのツールだけですべてを解決しようとする、万能薬的なアプローチはうまくいきませんでした。

 How 〜ツールの使用は適材適所

 ソフトウェア開発において、万能薬はないことを認識しましょう。夢のようなツールが喧伝されますが、完璧なものはありません。

 ただし、適応分野を絞って、いいバランスを狙った高水準なツールもあります。多くのことが簡単にできて、泥臭いやり方をプラグインする拡張ポイントも用意されているようなものです。このようなツールは、使い方次第では劇的な効果を発揮します。

 したがって、ツールは積極的に導入すべきです。ただ、ツールを盲信して使うことは、よくありません。盲信してしまうと、ツールを使ったがために、逆に効率が悪くなります。

 事前に疑似開発して、適用範囲と効果を確かめて、導入を決定しましょう。

 発展 〜万能薬より専門薬

 ソフトウェア開発において、万能薬と呼べるツールはありません。しかし、プロジェクトの特徴ごとに専門薬を作ることは可能です。

 これは「高機能な言語+DSLのメタ層」という組み合わせで、専用の言語を作るアプローチです。この分野で使用する言語は、動的言語でメタプログラミングしやすい言語を選択します。

 関連 〜80:20の法則

 「80-10-10の法則」と似た名前の法則に、「80:20の法則(別名:パレートの法則)」があります。名前は似ていますが、法則の内容はまったく異なります。

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

  • 全体の売り上げの8割は、2割の商品が生み出している。
  • 交通量の8割は、2割の道路に集中している。
  • 全所得の8割は、人口の2割の富裕層が持っている。
  • 機能を使用している時間の8割は、2割の機能に集中している。

 プログラミングにおいても、この法則に当てはまる現象が見られます。

  • 障害の8割は、2割のコードに集中している。
  • 処理にかかる時間の8割は、2割のコードが占めている。

 確かに、コードには、品質やパフォーマンスの「ホットスポット」があります。それを見つけることは重要です。説明便宜上、2割としていますが、実際にはもっと集中する傾向にあります。

 障害が密集しているところが、品質のホットスポットです。よって、障害が発見されたら、その部分の周辺をコードレビューしたり、ユニットテストを書いたり、横展開テストをしたりして、集中的に対策を講じましょう。

 また、処理に時間がかかっているところが、パフォーマンスのホットスポットです。計測によりこの場所を発見して、まずここからチューニングに取り掛かりましょう。

出典書籍

『プロダクティブ・プログラマープログラマのための生産性向上術』Neal Ford, オライリー・ジャパン(2009)


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る