大きな問題は小さくして1つずつ対処する――分割統治法:問題解決力を高めるコツはプログラミングの原則・思考にあり(4)(2/4 ページ)
本連載では、さまざまなプログラミングの原則・思考の中から、特に問題解決力を高めるのに役立つものをピックアップ。プログラマーは、その思考法をビジネスに応用し、そうではない人はプログラマーと一緒に働く際に思い出してほしい。今回は「分割統治」「1歩ずつ少しずつ」「繰り返しの最小化」の重要性、論理的思考のコツなどについて。
1歩ずつ少しずつ
英語 One by one
別名 1つずつ少しずつ
What 〜ステップ・バイ・ステップ
プログラミングは、一度に、小さな1つのことを行います。
1つずつ、少しずつ、小さな段の階段を上っていくように作業します。決して複数を相手にせず、1つずつ対処します。
小さな作業を1つ行い、それをしっかり確認し、次の作業に移る、というサイクルを繰り返します。
Why 〜「手堅い歩み」は効率的
小さいけれども、確実な1歩を繰り返して進む方が、結果として品質も時間効率も上がります。
なぜなら、複数の作業を一度に行うと、それらの作業が混線して、どれも失敗する可能性が高くなるからです。失敗まで行かなくても、2つの作業がごちゃ混ぜになり、コードの質が悪くなる上に、余計に時間がかかります。
1歩ずつ進めると、最後の1歩を後戻りすることが楽になります。
問題が発生して、修正をいったん元に戻したい時、ステップ・バイ・ステップで進んでいれば、後戻りは楽です。進んだ時と逆の順に、ステップ・バイ・ステップで戻っていけばよいからです。
例えば、タスクAだけを取り消したいのに、タスクAとタスクBの結果がコードに混在していたとしたら、タスクBの内容には手を加えずに、タスクAだけ後戻りさせるのは、非常に厄介な作業です。
1歩ずつ進めると、各1歩の確認が楽になります。
例えば、新しく関数を書く時、まだどこからも使用されていないとしても、まずコンパイルすることで、文法エラーがないことを確認できます。次に、ユニットテストを行うことで、実際の動作を確認できます。このように、コンピュータに仕事をしてもらえるようになるのです。
1歩ずつ進めると、特に古いものを新しいものに変えていく場合、それを安全に行うことができるようになります。「すべてを壊して、すべてを作り直す」のではなく「動く状態を保ちつつ、新しいコードを追加していき、古いものがすべて新しくなったところで、古いものを壊す」という手順を踏むのです。はじめは面倒に感じますが、この方が失敗する危険が少なくなります。
実用的な理由のほかに、心理的な理由もあります。
1歩ずつ進めることは、コードの状態を把握して、コントロールできていることを意味します。そのため、不確定要素がなくなり、不安を感じることのないまま、作業することができるのです。
心理的に圧迫されていると、普段のような質のよい判断ができません。自分の状態をコントロールすることも、よいコードを書くためには必要です。
How 〜一度に複数やらない
1歩ずつ、少しずつ作業を行いましょう。
例えば、リファクタリングであれば、モジュール間で関数を移動する時、関数名の不備に気付いたとしても、移動と名前変更を同時に行ってはいけません。関数を移動した後、いったんその状態で動作確認をしてから、関数名の変更に取り組みます。
あるいは、テスト駆動開発中であれば、コードを一気に書いて、後からまとめてテストを実行してはいけません。もちろん、必要なテストコードを全部書いてから、本番コードを全部書くということもしてはいけません。少しずつテストコードを書き、少しずつ本番コードを書き、それを繰り返します。
関連1 〜思考も「1歩ずつ、少しずつ」
頭のいい人は、コツコツ考えたりしないで、瞬時に、一足飛びに答えを導き出しているように見えます。
確かに、頭のいい人は、アウトプットが速い上に正確なので、何かショートカットしているように見えるかもしれません。しかし、これは誤解です。
頭のいい人は、何か特別な手法を使って、手順を飛ばして、考えるのが速くなっているのではありません。コツコツ考えているのですが、やらなければならない論理ステップを構築し、各ステップそれぞれを速く、確実に行うので、全体として速く正確になっているのです。「コツコツを高速化している」ということです。
少し考えて、わからないと、すぐに自分の頭の悪さを責めてしまうのは誤りです。手順をしっかり踏んで、コツコツ考えるようにしましょう。
関連2 〜論理的思考のコツ
論理的に考えるには、ポイントがあります。
- 瞬時に答えを得ようとする態度は誤りです。瞬時にわからなくても考え続けましょう。
- 考え始めて、すぐに結論に飛びつくのは誤りです。条件を満たすものが1つ見つかった時に思考停止せず、思い込みを排除して、ほかの可能性も検討しましょう。
- 既に考えたことを、しっかり覚えておきましょう。そうすれば、同じことを何度も繰り返し考える「思考のループ」に入り込んでしまうことを避けられます。
- 覚えておくのは大変なので、書きながら考えるようにしましょう。書きながら考えることには、副次効果があります。書いて、目で見えるようにすると、頭の中だけで考えていた時にわからなかったものが、なぜかわかるようになります。
- 論理的に考えるとはいえ、直感も大切です。例えば、「マトリクスを作れば情報が整理されるかもしれない」と直感的に思ったら、まずそれを試します。ただし、これは思考の過程の話で、直感のみで直接答えを得ようとするのは、単なる当て推量で、よい習慣ではありません。
出典書籍
『Java言語で学ぶリファクタリング入門』結城浩, ソフトバンククリエイティブ(2007)
関連書籍
『新装版リファクタリング―既存のコードを安全に改善する』Martin Fowler, オーム社(2014)
『テスト駆動開発入門』ケントベック, ピアソンエデュケーション(2003)
『史上最強の論理パズル―ポイントを見抜く力を養う60問』小野田博一, 講談社(2003)
Copyright © ITmedia, Inc. All Rights Reserved.