プログラミングに必要な論理的思考力とはフローを考える力【現役エンジニアが解説】

PROGRAM

プログラミングになぜ論理的思考力が必要か知りたい方に。

この記事を読まれている方は、

  • プログラミングと論理的思考の関係を知りたい
  • 論理的思考とはどういうものなのか知りたい
  • 論理的思考力の身につけ方を知りたい

おそらくこのように考えている方が多いと思います。

この記事を書いている私は、
プログラミング未経験から転職を果たした現役のWeb系エンジニアです。
エンジニア歴は3年ですが、本業とは別にフリーランスの副業で月10万円ほど、多いときで20万円ほどの収入があります。

この記事では、現役のエンジニアが、プログラミングに必要な論理的思考力について、解説します。

なぜ論理的思考が必要か

なぜ論理的思考が必要か

なぜプログラミングに論理的思考力が必要とされているのか。
そこに疑問を抱く方は少なからずいると思います。

結論から言うと、その理由は、処理のフローを考えるのに必要だからです。

「処理のフローを考える」とは、処理を細分化し、その順序を考えることです。

例えば、料理の例で考えてみましょう。

カレーライスやシチューでは、野菜や肉を炒め、ルーを入れる必要がありますが、全ての作業をごちゃ混ぜにして一気に作れるか、というと、そういうものではないですよね?

じゃがいもは煮崩れを起こさないように後の方に入れますよね。
また、水の量は野菜から出る水の量を見ながら、少なければ足していく方法を取りますよね。
じゃがいもは他のものを煮込んでから、水を足すのは野菜を煮込んだ後、という順序が重要です。
つまり、処理を細分化して、それらの順序を考えてあげることが大事ということになります。

プログラムの場合も全く同じで、あるプログラムを作るとき、目的を達成するために必要な処理を細分化して、繰返や分岐の手法を駆使しながら、その順序を考えていきます。

開発工程で言うと、ここまでが設計の工程になります。
設計が済んだら、いよいよ製造の工程へと入り、具体的にプログラムを任意のプログラミング言語で記述していきます。

プログラミングとは、「プログラムを書くことだけ」という認識の方も多いと思いますが、実際には設計も含めたものだと、今の時代は考えて下さい。

「今の時代は」と言ったのは、最近では詳細設計まで細かくやるところが減っているので、設計と製造を分けて考えないところも増えてきているためです。
このような現場では、プログラマーが製造だけではなく設計も行います。

このように、プログラミングでは、フローを考えられなければ、プログラムを書くことができません。
したがって、フローを考える力、すなわち論理的思考力がプログラミングには必要になってくるのです。

論理的思考とはどういうものか

論理的思考とはどういうものか

論理的思考のイメージについては、処理の細分化と順序が要となる料理のたとえがわかりやすかったと思いますが、ここではもう少しプログラムに落とし込めそうな例で考えてみます。

プログラムの主たる処理は「順次処理」「分岐処理」「繰返処理」の3つです。
一つずつ処理の例を挙げて、簡単に解説していきます。

順次処理の例

まずは順次処理です。
例えば、スマホで電話をかける操作を考えてみましょう。

プログラム的には以下のように表せます。

// 電話アプリを立ち上げる処理
// 電話番号をプッシュする処理
// 発信ボタンを押す処理

このように、処理には流れというものがあり、順序だてて処理が行われることで、目的の動作を実現することができます。
スマホになってからはいきなり番号を押すことができないので、まずはアプリを立ち上げないといけません。発信ボタンも番号をプッシュしてからでないと意味がないのでこの順番でしか動きませんよね。これが最もベーシックなフローです。

分岐処理の例

続いて、分岐処理です。
例えば、テレビのリモコンの(チャンネルの)数字ボタンを押す操作を考えてみましょう。

「1」のボタンを押せばNHK総合、「3」のボタンを押せばNHK教育のチャンネルに切り替わりますよね。

これをプログラム的に書くと、

if (押されたボタンの数字 == 1) {
    // NHK総合を表示する処理
} else if(押されたボタンの数字 == 3) {
    // NHK教育を表示する処理
}

このようなイメージになります。
処理が複数に枝分かれするときには、if文などを使って処理を分岐させることができます。

よく診断テストで枝分かれになっている質問用紙を見かけることがあると思いますが、あれも診断結果を出すという目的を達成するために、事前に用意されたプログラムを辿っているというわけです。

繰返処理の例

最後は繰返処理です。
これは、例えば、エアコンで冷房をかける処理を考えてみましょう。

プログラム的にあらわすと以下のイメージです。

while(現在温度 > 設定温度) {
    // 冷やす
}

ループ文で「冷やす」という一つの処理を何回もまわすことで、最終的に設定温度と同じになるように設計されています。

この繰返処理を使えば自動化させることができるため、分岐処理と組み合わせることであらゆる処理を実現することができます。

論理的思考力の身に付け方

論理的思考力の身に付け方

論理的思考力は、一朝一夕に身につくものではありませんので、常日頃から身の回りのものに疑問を持ち、理屈を考えるクセを付けた方が良いです。

例えば、グーグルの検索エンジンの仕組みに疑問を持ったと仮定してみましょう。

グーグルに関しては、一般に以下のことがわかっていますよね。

  • クローラーを使ってサイトを収集している
  • 基本はキーワードごとに区切って検索される
  • 件数と実際のページ数が合わないことがある

これを一つずつ解剖してみましょう。

クローラーを使ってサイトを収集している

グーグルはボットであるクローラーが自動でサイトデータを収集する仕組みです。サイトマップを送信したりすることでクローラーに直接URLを知らせる方法もありますが、基本的には、あるサイトの中に別のサイトへのURLを見つけ、それを再帰的に見に行く仕様であると予想することができます。このようにして、膨大な数のサイトをインデックスに載せることができているんだろうなと考えることができます。

やろうと思えば自分たちでも実装できそうな気がしてきますよね。
ただし、膨大なデータを置くサーバーを確保しなければいけないですし、再帰処理の無限ループにも十分に注意しなければいけません。

基本はキーワードごとに区切って検索される

キーワードごとに区切って検索されるように見受けられますので、キーワードごとにデータベースにテーブルを作って保管している可能性があります。複数のキーワード、いわゆるロングテールキーワードの場合には、各キーワードのテーブルを結合することで結果を表示しているように思えます。実際に複数キーワードのうち、片方のみしかヒットしていないサイトも結果に表示されたりしていますよね。

このようにキーワードごとにテーブルを作ることで、データベースの高速化を図っていると思われます。

件数と実際のページ数が合わないことがある

結果ページの上部に表示されるヒットの件数と実際のページ数が合わないことが多々ありますよね。これはグーグルがキャッシュサーバーを置いており、キャッシュされているデータの中でサイトを検索している可能性があるということです。つまり、いつも最新のデータだけが検索の対象となっているわけではないということです。これは、業務データではないため、必ずしも検索結果が最新である必要がないからです。実際、グーグルに変更が反映されるのには時間がかかっています。DNSなどと同じでキャッシュサーバーにまで浸透するのに時間がかかるのでしょう。

キャッシュサーバーを使用することで、不特定多数からの同時アクセスにも対応することができているということになります。

このように、身近にあるもの(特にコンピュータ関連)に疑問を持つクセを付けるようにし、その理屈を考える努力をしてみましょう。
論理的思考力は、理屈(処理とその順序)を考える力のことなので、この力を身につければ、プログラミングのたいていのことは難なくできるようになると思います。

ぜひ色々なことに興味を持って、広く浅く物事の理屈を考えるようにしましょう。