プログラミングを学ぶ上で、プログラミング用の思考法が理解できるとレベルアップがとても速くなります。
プログラミング脳という言葉を聞くことがありますが、ネット上で調べてみると「物事に対して筋道を立てて考えて結論を導くこと」といった意味のようです。
ここでは、プログラミング脳を鍛えるのに役立つフローチャートとアルゴリズムについて紹介します。
プログラミング言語を学ぶ前に覚えておくと良いと思います。
プログラミング言語を学ぶ前に
「システムエンジニア、プログラマーになるにはプログラミング言語を学べ!」という意見が多いと思います。
もちろん間違ってはいないのですが、プログラミング言語を学ぶ前にやっておいて損がないことがありますので、これから何を始めれば良いかわからない方はぜひ参考にしてみてください。
ここではフローチャート、アルゴリズムの 2つを紹介します。
ポイント
プログラミング言語の枠を超えて記述できるので、どのプログラミング言語にも応用できます。
ここで紹介することは、システムエンジニアの中でも特にソフトウェア (アプリケーション) エンジニア、プログラマーを想定していますが、他の技術者にも共通することが多いので参考になると思います。
フローチャート
フローチャートとは、作業の流れを図式化するもので、ひとつひとつの処理や判断を線でつないで作業工程を理解しやすくします。
言葉だけを聞くと少し難しそうですが、普段の生活もフローチャートで表せます。
例えば「野菜炒め」を作るとき、「野菜を洗う」、「野菜を切る」、「野菜を炒める」、「皿に盛りつける」などの作業を、無意識につなげて料理していると思います。
この無意識の部分というのはコンピューターが理解することが難しいため、コンピューターを動作させるために各作業を線でつないで理解しやすくします。
練習
実際に「野菜炒め」を作るためのフローチャートがどのようになるか、時間があれば作成してみてください。
手ごろな紙 (A3、A4 用紙など) やパソコン (メモ帳、Excel) などなんでも構いません。
フローチャートには長方形やひし形など、決まった記述方法があるのですが、今は特に気にせず、全ての作業を長方形の枠で囲って線でつなげれば良いです。
自習
「自宅から駅までの移動方法」、「寝る前の行動」など、普段の生活をフローチャートにするとなかなか面白いです。
アルゴリズム
アルゴリズムとは、問題を解決するための方法を組み立てることで、論理的思考 (ロジカルシンキング) を鍛えるにはとても良いものです。
実は、前述のフローチャートはこのアルゴリズムを記述するための方法で、フローチャートで作成したアルゴリズムがあるとプログラマーはプログラムを作成できます。
細かい話をすると、プログラムもアルゴリズムを実装したものなので、フローチャートと同じ意味のものです。
フローチャートで作成した「野菜炒め」の作り方ですが、実際にコンピューターに作らせる場合はもっともっと細かい操作が必要になります。
例えば「野菜を洗う」とはじめに書きましたが、「野菜がどこにあるのか」とか「野菜の種類、形、大きさ」など、コンピューターには判断できないことがたくさんあります。
また、「野菜がなかった時は」といったイレギュラーな判断もすべてコンピューターには理解できないので、ひとつひとつの作業を細かく組み立てなくてはいけません。
この記事内ではアルゴリズムとフローチャートの基本的な構造だけ説明します。
アルゴリズムの基本的な構造として、順次処理、分岐処理、反復処理の 3つあり、この 3つでほとんどの記述が可能です。
順次処理
順次処理は、ひとつひとつの作業を順番に繋げます。
「野菜炒め」だと「野菜を洗う」→「野菜を切る」→「野菜を炒める」のような作業を順番につなげる方法です。
通常の作業は、長方形の枠で囲い、作業と作業を矢印でつなぎます。
分岐処理
分岐処理は、指定した条件に従って作業を振り分けます。
「野菜炒め」に置き換えて考えると「もやしを入れるか?」という条件で、はいの場合 → 「もやしを入れる」、いいえの場合 → 「次の作業」などという条件による振り分けとなります。
二者択一の分岐だけではなく、「味付けは?」の条件で、塩、醤油、ソースなどの複数選択肢があるものも分岐処理になります。
分岐処理はひし形で記載します。
ひし形の角から条件の回答 (もやしの例だとはい、いいえ) 分の矢印が出て次の作業につながります。
また、条件の回答がわかるように、出した線の近くに条件の回答を記述します。
ここでは、はいといいえの 2つなので、分岐の部分から 2つの線が出ている状態になります。
反復処理
反復処理は、指定した条件になるまで同じ作業を繰り返します。
「野菜炒め」だと「野菜を炒める」こと自体が反復処理で、「炒め終わる」が終了条件です。
反復処理の終了条件には、分岐処理を使用します。
「野菜を炒める」から矢印が出て、「炒め終わった?」という条件分岐に入り、はいの場合 → 「次の作業」、いいえの場合 → 「野菜を炒める」に戻ります。
図式にすると炒め終わるまでは「野菜を炒める」と「炒め終わった?」の条件分岐をぐるぐる回り、野菜を炒める作業が反復されます。
★★★
以上がアルゴリズムの基本構造ですが、先ほど作成した「野菜炒め」のフローチャートを、順次処理、分岐処理、反復処理を入れてもう少し細かいフローチャートにしてみましょう。
ここまでくると、だいぶ複雑な資料になってきたと思います。
ポイント
これがプログラム設計の第一歩です。
アルゴリズムというと、「複数の数字を入れ替えて小さい順に並べ替える」など少し難しく説明されていることが多いですが、「野菜炒めを作る」など、日常生活に置き換えてみると少しわかりやすいのではないでしょうか。
「こんなのアルゴリズムじゃない!」という意見もあると思いますが、プログラム設計の第一歩としては十分だと思います。
★★★
まとめ
はじめに何から手を付ければ良いかいろいろ悩むと思いますが、このアルゴリズム、フローチャートの考え方は何年経ってもあまり変わることがなく、プログラミングだけのことでもないので、必ずどこかで役に立つと思います。
プログラミング言語を覚えるのも大事なことですが、まずは思考方法から学んでみてはいかがでしょうか。