フローチャートを書く能力はプログラマーにとって必須スキルであり、優秀なプログラマーになるための第一歩です。なぜなら、フローチャートの有無、もしくはフローチャートの内容次第で出来上がるプログラムの品質に大きな差が出るためです。だからこそ、若手プログラマーやSE教育の場で必ず登場するのです。
しかし、フローチャートというテーマは、それだけで書籍1冊になるほどの分野であり、多忙なIT業界においていかに効率的に学習するか悩んでいる方も多いと思います。
プログラマーとしてスキルを高めたいが…
- 実はそもそもフローチャートのことをよく理解していない
- 最低限の知識で良質なフローチャートを作りたい
- フローチャートを書くことに自信がないが、今さら人には聞きづらい
このようなことをお思いではないですか?このような悩みから解放頂けるよう、最短ルートで良質なフローチャートを書くための方法を1ページにまとめました。
そこそこ長い記事ですが、本一冊読む10分の1の労力で読めます。この記事を最大限活用して効率的にフローチャートを学んで下さい。
Contents
1.フローチャートとは
フローチャート(flowchart)とは、プログラムの流れを設計するための図解術です。
別名「流れ図」とも呼ばれており、直感的に理解しやすい構造をしています。
プログラマーやSE教育の場では必ず習う重要なものです。基本情報処理試験や応用情報技術者試験でも出るものですので、プログラマーやSEの方はしっかり基本を覚えましょう。
フローチャーチは、主に以下3ケースで利用されます。
- プログラムの概要ロジックの設計
- プログラムの詳細ロジックの設計
- 業務フローの設計、可視化
〈フローチャートの例〉
業務の設計・可視化には構造的に不十分なため、業務面では「アクティビティ図」など他の図解術を使うケースがほとんどです。この記事では、プログラマーやシステムエンジニア向けにフローチャートを解説します。
若手のプログラマーやシステムエンジニアは教育の一環として、概要ロジック → 詳細ロジックという流れでフローチャートの作成指示を受けるケースがよくあります。熟練者になるとロジックの基本が頭に入っているため、詳細ロジックまで書かない事の方が多くなります。次の章ではフローチャートのメリットについて詳しく解説します。
2.フローチャートを書く3つの目的
IT企業では、若手プログラマーは必ずフローチャートを書くよう指導を受けますが、そもそもなぜフローチャートを作るのか「目的」を理解してない人も多いかと思います。まずは目的からしっかり理解する事が重要です。
2.1.プログラム構造の整理
1つめの目的は、プログラム構造を整理するためです。プログラムは、書き方によって処理スピードや可読性に大きな影響を与えます。実際にプログラミングをする前に、最適な設計がされていることが望ましいです。
熟練プログラマーは、フローチャートを書かなくても最適な書き方が頭に入っていますが、若手プログラマーはそうはいきません。しっかりフローチャートを書いて、先輩にレビューしてもらいましょう。
2.2.プログラミング速度を上げるため(効率化)
2つめの目的は、プログラミングの速度を上げることです。しっかり設計ができていれば、その通りに効率的にプログラムを書くことができます。設計ができていなければ、後々修正が多く発生し余分に時間が掛かかってしまいます。若手プログラマーは、プログラミングの速度を上げるためにもフローチャートを書きましょう。
2.3.プログラム品質の向上
フローチャートを書くことでプログラムの全体像が明確になり、設計漏れ・やバグを減らすことができます。つまり、プログラムの品質が上がります。フローチャートを使って他者と事前レビューをすることで、更に品質を上げることもできます。
この章では、フローチャートを書く3つの目的について解説しました。優秀なプログラマーの領域に到達するには、フローチャートをたくさん書いて基本を頭にインプットすることが一歩です。若手プログラマーは積極的に活用して下さい。
3.フローチャートを効率良く学び、作る方法
多忙なIT業界においていかに効率的に学習するか。その重要性は皆さんご存知だと思います。
フローチャートを効率良く学び、作る方法はいたってシンプルです。下記の2ステップだけです。
ステップ1:まず記号を憶える。数は多くありません。
ステップ2:基本の型や事例をカンニングしながらフローチャートを作る
何も見ずに自分の頭で考えるからこそ地頭が磨かれますが、ビジネスは時間が限られていす。限られた業務時間の中で最大のパフォーマンスを発揮する事が求められます。勉強は仕事が終わってからやるのがIT業界の基本です。
若手のエンジニアは、フローチャートの作成を任されるケースが多くありますが、考えても分からないものは分かりませんよね。ビジネスでカンニングはOKです。数学のように何度も回答を見ながらやっていると、いつの間にか身についています。だらだら仕事するのはコストの無駄遣いなだけです。積極的に既存の情報を活用して下さい。
4章ではフローチャートの基本ルール(記号)を、5章ではフローチャートの基本の型、6章では若手研修で良くでるフローチャートについて解説します。
4.フローチャートの基本ルール(記号)
フローチャートは決められた記号を組合せて書きます。使う記号を間違えると意味が変わってしまうため、この章を読んでしっかり記号を憶えて下さい。記号はそれほど多くありません。
開始/終了
フローチャートの開始と終了を表現する記号です。「端子」とも呼ばれています。記号の中に「開始」や 「終了」と書いて使います。 |
処理
処理内容を表現する際に使う記号です。 処理記号の中に処理内容を書いて使います。 |
条件分岐
条件分岐を表現する際に使う記号です。 記号の中に条件を書いて使います。 |
定義済み処理
別ページのフローチャートで定義されている一連の処理などを表現する時に使う記号です。別名「サブルーチン」とも呼ばれています。記号の中に定義済み処理名を書いて使います。 |
ループの開始
ループ(繰返し)処理の開始を表現する際に使う記号です。 ループの開始記号と終了記号の間に処理内容を書いて使います。 |
ループの終了
ループ(繰返し)処理の終了を表現する際に使う記号です。 ループの開始記号と終了記号の間に処理内容を書いて使います。 |
入出力
外部データの参照や外部データへの書込み、ファイルの入出力などを表現する際に使う記号です。入出力記号の中に、内容を書いて使います。 |
結合子
同じフローチャート内の別の処理に飛ばす際に使う記号です。 「同紙の○○参照」を意味します。 フローチャートが長くなったり、複雑化した際などに使います。結合子の中や外に参照先を明示して使います。 |
外部結合子
別紙のフローチャートの処理に飛ばす際に使う記号です。 「別紙の○○参照」を意味します。 外部結合子の中や外に参照先を明示して使います。 |
この章では、フローチャートの記号について解説しました。フローチャートは、決められた記号を組合せて書くものです。数はそれほど多くありません。記号を組合わせて下図のようにフローチャートを書きます。
5.フローチャートの基本の型(カンニングその1)
フローチャートは、よく使われる「基本の型」があります。
フローチャートの作成工数を削減するには、この「型」を憶えることが第一歩です。
すぐに憶えられなくても、カンニングしているうちにいつの間にか憶えてしまうものです。
積極的にカンニングしながらフローチャートを作って「基本の型」を憶えて下さい。
この章では、よく使われる「基本の型」について詳しく解説します。
5.1.順次構造
順次構造とは、処理する順番に記述されているプログラム構造のことです。
単純に、上から下に処理が流れていくシンプルな構造をしています。
前述したフローチャートの記号を並べて矢印でつなぐだけでOKです。
5.2.分岐構造
分岐構造とは、条件によって処理内容が分かれるプログラム構造のことです。
分岐条件は、ひし形の記号を使って表現します。
プログラミングで言う、「switch・case文」や「if・else文」などを表現する際に使います。
switch・case文
switch・case文を表現する際は、下図のように条件分岐記号の中にswitch条件(式や変数)を書きます。そして、caseの分岐を作ります。どのケースにも一致しなかった時の処理(下図では処理4)も忘れず書きましょう。
if・else文
if・else文を表現する際は、下図のように条件分岐と処理の記号を組合わせるだけで書くことができます。どの条件にも一致しなかった時の処理(下図では処理4)を忘れないようにして下さい。
5.3.反復構造(ループ)
反復構造とは、条件を満たしている間、または条件を満たすまで処理を繰り返すプログラム構造の事です。プログラミングで言う、「for文」や「while文」、「do while文」などを表現する際に使います。下図のように、「条件分岐記号」「ループ記号」どちらでも表現することができます。
for文・while文(前置き判定)
for文やwhile文形式の反復構造を表現するには、下図のように反復条件の下に処理をおきます。反復条件に一致しなくなった時にループ処理を終了します。反復条件に一致しなければ、一度もループ処理(下図の処理2)を行わずに処理を終えることになります。前置き判定とも呼ばれています。
do while文(後置き判定)
do while文を表現するには、下図のようにまず処理を必ず1回行わせてからループ処理を続けるかの条件判定を行います。最低1回必ず処理2が行われる点で前置き判定と構造が異なります。
二重ループ
二重ループはループ構造の中にさらにループ構造がある構造のことを言います。
下図のような2次元の表形式のデータを処理する時などに使われます。
この章では、フローチャートの基本の型について詳しく解説しました。フローチャートの理解が進んだのではないでしょうか。フローチャートの作成工数を削減するには、基本の型を憶えることが不可欠です。数学の公式を憶えるのと同じですので、繰返し読んで覚えて下さい。
6.若手研修の試験で良く出るフローチャート(カンニング2)
この章では、若手向け研修などの試験で良く出る代表的なアルゴリズムのフローチャートについて解説します。代表的なアルゴリズムのフローチャートも、数学の公式と同じで型が決まっています。アルゴリズムをフローチャートに落とし込むのはなかなか難しいです。5章に比べて一気に難易度が上がります。この章をヒントにしっかり理解を深めて下さい。
6.1.バブルソート
バブルソートとは、隣合う2つの要素を比較して条件に応じてソートしていくアルゴリズムです。下図では、右端の要素から順に左の要素と比較してソートしています。
〈バブルソートのアルゴリズム〉
フローチャートで書くと以下のようになります。
〈バブルソートのフローチャート例〉
6.2.選択ソート
選択ソートとは、ソート対象範囲の中で一番小さいデータを見つけ出し、ソート対象範囲の先頭の値と交換することでソートしていくアルゴリズムです。
〈選択ソートのアルゴリズム〉
フローチャートで書くと以下のようになります。
「最小値を見つけ出す」「最小値を先頭と入替える」という2点がポイントです。このポイントを頭に入れてフローチャートを考えます。何度も上記のアルゴリズムを見て考えてみて下さい。
〈選択ソートのフローチャート〉
6.3.リニアサーチ(線形探索法)
リニアサーチとは、探索値を配列の頭から順番に探していくアルゴリズムです。別名「線形探索法」とも呼ばれています。シンプルな探索法ですが、配列の先頭から順番に探していくためパフォーマンスは悪いです。
〈リニアサーチのアルゴリズム〉
フローチャートにすると以下のようになります。
〈リニアサーチのフローチャート〉
6.4.バイナリサーチ(二分探索法)
バイナリサーチとは、あらかじめ昇順または降順にソートされたデータを対象に探索するアルゴリズムです。配列の真ん中でデータを2つに分け、真ん中のデータと探索対象のデータを比較するという処理を繰返して探索していきます。配列の真ん中でデータを2つに分けるため、二分探索法とも呼ばれています。
〈バイナリサーチのアルゴリズム〉
今回は、理解しやすいようデータを少なくして解説しましたが、実際はもっと大量のデータから探索することになるため、上記のように3ステップで終わることはありません。探索範囲をどんどん2分の1にしぼって探索していくため、リニアサーチに比べて効率的にデータ探索が可能です。フローチャートに落とすと以下のようになります。
〈バイナリサーチのフローチャート〉
7.まとめ
この記事では、若手プログラマー向けに、最短ルートで良質なフローチャートを書くための方法を1ページで解説してきました。多忙なIT業界において、いかに効率的に学んでいくかはまさに死活問題です。この記事を参考にする事で、本を読むよりも格段に労力を抑えてフローチャートを学ぶことができます。次は、この記事を参考にフローチャートを書いてみましょう。