アルゴリズムとプログラミングの違いは?初心者でもわかる考え方と基本

小学校でプログラミングの授業が始まってから、

プログラミング教育への関心は高まっています。

 

プログラミングの学習を始めたところでまずぶつかる疑問。

アルゴリズムとプログラミングの違いって何?

 

手続き?ロジック?

 

難しいし、わからない…

 

この記事では、

 

アルゴリズムとは何か、

アルゴリズムとプログラミングの違いは何か

 

をできるだけ簡単に紹介します。

 

新入社員によく聞かれました。

アルゴリズムの重要性が伝われば成功です!

アルゴリズムとは?

アルゴリズムとは、求める答えにたどり着くための方法や手順のことです。

 

気づかないだけで、世の中はアルゴリズムに溢れています。

 

例えば、電子レンジで何かを温めるアルゴリズム。

  1. 扉を開ける
  2. 中に温めたいものを入れる
  3. 温める時間を選択する
  4. スタートを押す
  5. ブザーが鳴ったら扉をあける
  6. 中のものを取り出す
  7. 扉を閉める

 

こんなささいな日常もアルゴリズムだと思うと親近感がわきますよね。

 

アルゴリズムとは、

この手順に沿って行えば必ず求める結果が得られる!という方法です。

 

次の例はカレーを作るアルゴリズムです。

  1. 野菜を切る
  2. 肉を切る
  3. 野菜と肉を鍋に入れる
  4. 鍋に水を入れる
  5. 鍋を火にかける
  6. 30分待つ
  7. 煮えたか確認する
    煮えていたらルーを入れる
    煮えていなかったら5分待って7に戻る
  8. 5分煮込む
  9. 完成!

 

”煮えたか確認する”条件分岐と繰り返しが入っています。

条件分岐:条件で処理が変わること

 

繰り返し:ある条件に達するまで処理を繰り返すこと

カレー作りの例だと次の通りです。

【カレー作りの例】

 

条件にあてはまるまで繰り返し

条件:野菜と肉が煮えたか

 

条件に当てはまったときの処理:ルーを入れる(繰り返しの終了)

条件に当てはまらなかったときの処理:5分待って条件に戻る

条件はifやswitch文、繰り返しはforやdo until文で表現されることが多いです。

スポンサードリンク
 





 

良いアルゴリズム・悪いアルゴリズムとは

アルゴリズムのイメージはついたでしょうか。

 

求める結果までの決まった手順は何でもアルゴリズムといえますが、

その中でも良いアルゴリズムと良くないアルゴリズムがあります。

良いアルゴリズム:効率よく・最短で答えにたどり着ける

 

良くないアルゴリズム:答えまでに無駄な手順がある(最適化されていない)

例えば、道案内のアルゴリズムを考えてみます。

下記のスタート地点からゴール地点まで行くアルゴリズムです。

道案内のアルゴリズム

”まっすぐ4ブロック進む”が最短の良いアルゴリズムです。

でも、ぐるっと迂回するルートも最終的にはゴールにたどり着きますよね。

道案内のアルゴリズム2

どちらもアルゴリズムではありますが、

最短で効率よくたどり着けるほうが良いアルゴリズムです。

コンピュータ上での良いアルゴリズム

コンピュータ上で効率よくというのは、

メモリ消費が少ない、処理負荷が低い、処理スピードが速いことを指します。

 

道案内の例くらい、ひと目で最適解が分かればよいのですが、

複雑な処理だと冗長で効率の悪いアルゴリズムになっている場合があります。

 

求める結果と必要な処理を見渡してアルゴリズムを考える力が必要です。

 

言うのは簡単ですが、難しい…

いろいろなプログラムを設計する中で培われます

 

また、コンピュータが処理するアルゴリズムは

曖昧な点を排除した手順にする必要があります。

 

もしカレーの作り方をコンピュータに指示するとしたら、

”煮えたかどうか”の判断基準があいまいです。

 

例えば…

”鍋の中で1番大きいジャガイモに竹串を刺し、

〇の力で〇秒押して〇cmまで串が通れば煮えたと判断する”

というように、誰がやっても同じ結果になるように指示しなければなりません。

(これでもまだちょっと曖昧ですが…)

 

プログラミングとは?

プログラミングとは、

アルゴリズムをコンピュータが分かる言葉で書き表したものです。

 

アルゴリズム(結果を求める手順)と

コンピュータ(実際にやる人)の橋渡し的な存在と言えます。

アルゴリズムとプログラミングの違い

大胆にまとめると、

アルゴリズムとプログラミングの違いは伝えたいことと言葉の違いに似ています。

 

例えば、道案内の最適なアルゴリズムは4ブロック進む。

それはいつどこでも変わりません。

 

ただ、聞き手が日本人かアメリカ人かで表現の仕方は変わります。

日本人  :『まっすぐ4ブロック進んでください』

アメリカ人:『Please go straight ahead for four blocks.』

 

アメリカ人だけでなく、フランス人、イタリア人、ブラジル人、アフリカ人など、

聞き手に合わせて言葉を変えないと伝わりません。

・伝えたいこと=アルゴリズム
・処理する人に合わせて表現したもの=プログラミング

 

先ほどの表現の違いを言い換えると…

アルゴリズムは共通  :4ブロック進む

 

日本人用プログラム  :『まっすぐ4ブロック進んでください』
アメリカ人用プログラム:『Please go straight ahead for four blocks.』

となります。

スポンサードリンク
 





 

アルゴリズムはプログラムの設計に関わる

プログラム開発は大きく分けて以下の段階があります。

・要件定義(何がしたいかを決める)

 

・設計(アルゴリズム)

 

・実装(プログラミング)

 

・テスト・デバッグ(設計通りに実装されているか確認して修正する)

アルゴリズムは設計のときに考えるロジックのこと、

プログラミングは実装のときに書くコードとも言えます。

 

アルゴリズムとプログラミングのどちらが大切?

良いプログラムを作るにはどちらもなくてはならないものです。

 

あえてどちらか決めるなら、

アルゴリズムが大切だと考えます。

 

なぜなら設計段階のほうが抽象度が高いからです。

アルゴリズムがあって、プログラミングができます。

 

いきなりプログラミング(コードを書く)から始めて、

最適なバグのないプログラムを作るのは至難の業です

 

抽象度が高い=ロボットに取って代わられにくいということ。

実装できる技術者より設計できる技術者のほうが希少です。

 

人間がアルゴリズムをインプットすれば、

AIがどの言語にもコーディングしてくれる日がいずれ来るでしょう。

(バグはないし、人間の何十倍も速い)

 

しかし、アルゴリズムを考え出すのはより難易度が高い作業です。

 

アルゴリズムを学ぶおすすめの本

アルゴリズムを学ぶためのおすすめの本を紹介します。

プログラミングしたことがない初心者向けです。

アルゴリズム図鑑

 

とにかく図が多くて分かりやすいです。

10代の学生でも読めるくらい易しく書いてあります。

 

基本情報技術者試験の対策にもおすすめ。

反面、ある程度知っているという人には物足りないかもしれません。

楽しく学ぶアルゴリズムとプログラミングの図鑑

 

可愛いイラスト満載で、易しく書いてあります。

 

前者のアルゴリズム図鑑は1つ1つアルゴリズムを見ていく感じですが、

こちらはアルゴリズムを理解して、

アルゴリズムからプログラミングする流れが感じられます。

 

実際にプログラミングをしたい人、SEを目指して勉強し始めた人におすすめです。

 

アルゴリズムやプログラミングを身につけるには実際に書いてみるのが一番なので、

本で知識を付けたら、後はどんどん書いて実行してみると良いです。

 

勉強しはじめのときは、デバッグが一番勉強になりました。
スポンサードリンク
 





 

まとめ:アルゴリズムをプログラミングで実装してみよう!

・アルゴリズムは答えにたどり着くための手順のこと

 

・良いアルゴリズムとは、最適化された無駄のないアルゴリズム

 

・アルゴリズムは誰が処理しても同じ結果になる

 

・プログラミングとは、アルゴリズムをコンピュータが分かる言葉にしたもの

 

処理する人(コンピュータ)が変わればプログラミングも変わる

 

・アルゴリズムは設計、プログラミングは実装

 

・アルゴリズムのほうが抽象度が高い

 

・本で基本を学んだら、実際にアルゴリズムを考えてプログラミングしてみる

なるべく簡単にわかりやすく説明したかったので、

簡略化・拡大解釈している部分があるかもしれません。

 

なんとなくでもイメージを掴んでもらえていたら嬉しいです。

 

フローチャートや検索ソートなどの詳細は本やサイトでいくらでも学べますが、

最初の考え方を掴むのが難しいんですよね

 

わたしは、子供に必要なのはプログラミング学習ではなく、

アルゴリズム学習だと思っています。

 

既存のアルゴリズムを学ぶのも大切ですが、

頭を抱えてアルゴリズムをひねり出す経験が本当の頭の良さに繋がると信じています。

 

親子で取り組むときっと楽しいと思います!

 

ぜひみなさんもアルゴリズム&プログラミングを楽しんでくださいね!