cassetteの延澤です!
前回、PHPの掲示板をフルスクラッチで3カ月かかった内容を書きました。 (参照:プログラムを書くことに絶望したら、環境構築をやればいいよ)
しかし、この経験からある重要な概念を学ぶことが出来ました。 それは、エンジニアとして重要な考え方である、「分割統治法」を学ぶことができました。
今回の記事では、分割統治法とは何か?どんなメリット・デメリットがあるのかということを書いていきたいと思います。
分割統治法とは?
wikipediaでは以下のように説明されてます。
そのままでは解決できない大きな問題を小さな問題に分割し、その全てを解決することで、最終的に最初の問題全体を解決する、という問題解決の手法である。
例えば、先ほどの掲示板の機能を分割してみましょう。
- 過去のコメントをDBからデータ取得して表示する機能
- 投稿したコメントをDBに書き込む機能
- 投稿したコメントを編集してDBにアップデートする機能
- 投稿したコメントを削除するためDBから削除する機能
つまり、掲示板の複数の機能に対して一度に機能を作るのではなく、機能をバラバラにしてプログラミングをすれば良いのです。 沢山の小さな機能が集まったものが掲示板であり、大きな問題にはまず小分けにしてみるというアプローチになります。 例の機能はさらに細かく分割できるので、実装するときの単位はもっと細かくシンプルになります。
分割統治法を使うメリット
なぜ、細かくするのでしょうか?
それは、以下が理由になります。プログラミングとはシンプルで分かりやすい実装が一番いいという共通の認識があるからです。
- プログラムの全体把握が容易
- プログラムがシンプルになる
- 問題の原因箇所の把握がしやすい
- プログラムの再利用がしやすい
- 修正した際の影響度が少ない
実際、熟練したエンジニアほどシンプルで読みやすい美しいコードを書きます。
他の技術でも分割統治法の考えに影響されているのは以下になります(一部になります)
上記の技術を理解する際には、ぜひ分割統治法を理解しておくと理解しやすくなります。
分割統治法のデメリット
汎用性がある分割統治法ですが、全ての問題を解くわけではありません。
個人的に問題を分解して解くことは出来ますが、そもそも問題の再定義については向かないと考えてます。
例えば、ある仕事の期限が迫っておりその中でどう問題を分割して解決していくよりも、そもそもスケジュールを伸ばすためにはどうすればいいのかについて切り替えて考えた方が良い結果に繋がる場合もあります。
既存の問題に対して正攻法で解決に対してアプローチするのであれば分割統治法は上手く作用しますが、まったく別視点からの解決は向かないです。
まとめ
分割統治法の考えはエンジニアで仕事する際や、他にも人生で困難に遭遇した際に有用に効果を発揮します。
私は学生時代からこの考えを知っておけば良かったなとつくづく感じます。しかし、文系で育った私はこのような考えで物事を解決したことはありませんでした。
そのため、問題が起きた際によく先輩に「どこまで分かって、どこから分からないのか説明して」と口酸っぱく言われた経験があります。もし、新卒や未経験でエンジニアを目指す場合にはこのことを意識して質問するとよいでしょう。
最後に一点付け加えると、人との会話で共感よりも先に、話の内容を分解し整理して考えるようになる癖がつくケースがあります。(私自身、プライベートで知らず知らずそのようになっていました)
最近では、そうならないように考えるよりも先に相手の言葉に耳を傾けるように心掛けてます。