本当の問題にたどり着かない――思考の重複を起こさないための「DRY」原則:問題解決力を高めるコツはプログラミングの原則・思考にあり(5 )(1/3 ページ)
本連載では、さまざまなプログラミングの原則・思考の中から、特に問題解決力を高めるのに役立つものをピックアップ。プログラマーは、その思考法をビジネスに応用し、そうではない人はプログラマーと一緒に働く際に思い出してほしい。「ヤクの毛刈り」のように、「本当の問題」になかなかたどり着かないということがある。今回は、プログラミングの「DRY」原則から思考の重複を起こさないための手法を学ぼう。
書籍の中から有用な技術情報をピックアップして紹介する本シリーズ。今回は、秀和システム発行の書籍『プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則(2016年3月22日発行)』からの抜粋です。
ご注意:本稿は、著者及び出版社の許可を得て、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
なお書籍では、ソフトウェア業界で高名な、よいコードを書くための「プリンシプル」を紹介しています。プリンシプルとは、プログラミングの指針となる「前提」「原則」「思想」「習慣」「視点」「手法」「法則」などのことです。具体的には、「ヤクの毛刈り」「DRY」などのプリンシプルがあります。こうした各プリンシプルについて、「それは何なのか(=What)」「それはなぜなのか、なぜ必要なのか(=Why)」「ではどう使えばよいのか、どうすればよいのか(=How)」を中心に解説する構成になっています。
本連載では、さまざまなプログラミングの原則・思考の中から、特に問題解決力を高めるのに役立つものをピックアップしていきます。プログラマーは、その思考法をビジネスに応用し、そうではない人はプログラマーと一緒に働く際に思い出していただければ幸いです。
今回は、プログラミングの「DRY」原則から思考の重複を起こさないための手法を学びましょう。まずは、「ヤクの毛刈り」のように、「本当の問題」になかなかたどり着かないという問題から紹介します。
※編集部注:前回記事「大きな問題は小さくして1つずつ対処する――分割統治法」はこちら
ヤクの毛刈り
英語 Yak Shaving
What 〜本当の問題にたどり着かない
ヤクという家畜がいます。牛の一種で、その体をおおう毛が、極端に多いのが特徴です。夏になる前に毛を刈るのですが、本体に到達するまでには、相当たくさんの毛を刈らなければなりません。
問題に取り組んでいる時、まるでヤクの毛刈りのように、ある問題を解こうと思ったら別の問題が出てきて、なかなか本体、つまり大元の問題(の解決)にたどり着かないことがあります。問題を解こうと思ったら、さらに別の問題が出てきて、ということが延々と続くのです。
この状態が長いと、もはや何を解決しようとしていたか、元の問題を忘れてしまうことすらあります。
Why 〜トラブルは芋づる式
問題は、芋づる式に次々と際限なく現れてきます。
例えば、Webサーバーで動作するタスク自動化ツールを入れて、作業を効率化しようと考えたとします。
- 「まず、Webサーバーをダウンロードしよう」
- 「あれ、ファイルが大きくてダウンロードできない」
- 「よし、ダウンロードツールを入れよう」
- 「あれ、ダウンロードツールが動かない」
- 「ああ、前提モジュールが必要なのか」
- 「よし、前提モジュールをダウンロードしよう」
- 「ああ、ユーザー登録が必要なのか」
- 「よし、ユーザー登録しよう」
- 「あれ、ユーザー登録ページが動かない」
- 「ああ、ブラウザのバージョンが古いのか」
- 「よし、ブラウザをバージョンアップして、ユーザー登録して、モジュールも入れたぞ」
- 「あれ、まだダウンロードツールが動かない」
- 「ああ、OSのサービスパックが必要なのか」
(以下延々と続く……)
ヤクの毛を刈っているような状況は、時間の浪費につながります。事前に所要時間を見積もっていても、その通りに行かないこともありますが、多くの場合、ヤクの毛を刈っている時間が、その原因になっています。
また、ヤクの毛を刈っているような状態は、非常にストレスがかかります。長いヤクの毛を全部刈るのにどれくらい時間がかかるか、推測するのは容易ではありません。本来の目的が達成されていない状態が、どれだけ続くかわからず、非常にフラストレーションがたまります。
How 〜早々に切り上げる
ヤクの毛を刈っている状態に陥っていると感じたら、立ち止まり、そもそも何が目的だったかを思い出しましょう。
そして、「目的からずれている」「時間やコストと見合わない」と認識した場合は、すぐに作業を止めるようにしましょう。おそらく、もう別の道を探した方が、よい結果となるはずです。
また、他の人が同じ状態にはまらないよう、その顛末をメンバーに共有しましょう。どこか共有の置き場に、メモを残すようなことをしておくと、数人分の時間ロスを、未然に防ぐことができます。
発展1 〜「ヤクの毛刈り」に立ち向かう
「ヤクの毛刈り」は、基本避けて通るべきです。ただ、価値ある目的や、緊急トラブルなど、必要に迫られて、「ヤクの毛刈り」を乗り越えて、問題解決をしなければならないこともあります。
この時厄介なのが、問題が脳内でオーバーフローしてしまうことです。「ヤクの毛刈り」は、前の問題が解決しないうちに、次の問題が発生してしまうので、まるで問題をスタックにプッシュして、1つ1つポップして解決して(かつ続々発生する新たな問題をプッシュして)いるようです。この時、問題だけが芋づるで発生して、ポップがプッシュに追い付かず、脳内スタックがオーバーフローすることがしばしばあります。
そうならないためには、問題解決を頭の中だけでやらないことです。問題を書きとめながら、丁寧に、順に、ひたすら問題を解決していきましょう。
発展2 〜プログラミングの「ヤクの毛刈り」
「ヤクの毛刈り」は、環境を作る時によく遭遇しますが、プログラミング中にも類似の状況が発生します。
例えば、コードを書いていて、芋づる式に問題ケースが思い浮かび、最初の問題になかなか到達しない場合です。最悪、最初や途中の問題を忘れてしまうことがあります。
また、例えば、コードを読んでいて、それが整理されていないコードのため、当初知りたかったことになかなか到達しない場合です。入り組んだ呼び出し関係を追っているうちに、読んでいる場所や読んでいる目的を見失うことがあります。
このような事態を防ぐために、複雑なコードの読み書きは、メモを取りながら作業をすることが重要です。特にコードの場合、作業より思考の部分が多くなるので、メモを取らないと「思考のループ」に陥ってしまう危険性があります。
出典書籍
『プロダクティブ・プログラマープログラマのための生産性向上術』Neal Ford, オライリー・ジャパン(2009)
Copyright © ITmedia, Inc. All Rights Reserved.