プログラミングをやるならアルゴリズムも学びましょう

SEの日常エンジニア,アルゴリズム

こんにちは、現役SEのばらかん(@barakam63)です。

最近、プログラミングが流行っていると感じます(最近ではないかも…笑)。

皆さんも以下のようなことを感じているかと思います。

プログラミング流行ってるなと感じること

・Twitterで「エンジニア目指してます!」「プログラミング勉強中です!」という方が多い

・プログラミングスクールの広告が多くなった

・Youtube等の動画投稿サイトでエンジニア系、プログラミング系のコンテンツが増えた

・2020年度からは小学校でもプログラミング教育が必須科目になってる

ただ、プログラミング学習だけをやっていると当然つまずくことがあります。

特にこんなことはありませんか?

こんなことでつまずいてませんか?

・プログラムはエラー無く動くけど、思ったのと違う結果になった

・プログラムの書き方や文法は分かったけど、自分で作りだすと手が止まる

ということで今回は、上記のような悩みを解消するためのきっかけになるよう「アルゴリズム」の話しを書きたいと思います!!

スポンサーリンク

アルゴリズムとは

「問題を解決するための手順」というふうに説明されることが多いです。

コンピュータ的に言うと「入力データを出力データにするための計算の流れや仕組み」です。

例えば、検索画面をイメージしてみると、キーワードや条件を入力し検索ボタンを押すと、DB内のデータを検索し、検索結果を画面に表示するとなります。

この場合、検索ボタンを押してから画面に表示するまでの間の処理が、アルゴリズムになります。

アルゴリズムの例 : 検索画面

アルゴリズムの正解は1つだけでない

アルゴリズムは計算の流れや仕組みであると話しました。

つまり、極端なことを言うと、結果が同じであれば仕組み(アルゴリズム)は何でも良いということになります。

数学でも解き方が複数ある問題があると思いますが、それと同じです。

ただし、処理スピードのような違いは生まれるため、「こっちのアルゴリズムの方が優れてる」というような議論になることはあります。

アルゴリズムは先人の知恵を使うべし

アルゴリズムには、私たちの大先輩方が残してくれたテンプレートがあります。

「こういう処理をしたいときは、こういうアルゴリズムで計算ができる」というものです。

例えば、数字や文字列の並び替え(ソート)をコンピュータで実行する際にはいくつかの有名なアルゴリズムが存在します。

ここでは詳しく説明しませんが、バブルソートやクイックソート、シェーカーソート等たくさんの並び替えアルゴリズムが存在します。

このように、アルゴリズムは書籍やネット上にたくさんの情報があるので、どんどん活用していくことをお勧めします

アルゴリズムは設計書

アルゴリズムは、「こういうアプリが欲しい」「こういう機能が欲しい」という要望を実現するために、「どういう処理をどんな順番で実行すれば良いか」を表しています。

そして、考えたアルゴリズムは設計書へ反映されるので、アルゴリズム=設計書となるわけですね

つまり、欲しいアプリや機能を作るために必要な処理を、言葉で表現したものがアルゴリズムになります

プログラミングはアルゴリズムを実現するための手段

設計書として文章で表現されたアルゴリズムを、実際にアプリやWebサービスに変換するツールがプログラミング言語になります。

フロントエンドであれば、HTMLやCSS、JavaScriptですね。

サーバサイドであれば、JavaやC#、Pythonなどがそうですね。

アルゴリズムが分からないとエラー修正ができない

プログラミングをやっていると当然エラーとご対面します。初心者の方はもちろん、現役のエンジニアでも直面します。

エラーを解消するにはアルゴリズムを構築する力と、どこを修正したらどこの動きが変わるということを把握する必要があります。

この能力を、アルゴリズム力としておきましょう笑

ここではエラーの種類と必要なアリゴリズム力を簡単にお話しします。

コンパイルエラー : アルゴリズム力★

作ったプログラムが起動すらしないというエラーです。

プログラミング言語のルールに違反している場合に発生します。

コンパイルエラーは、プログラムを確認したり、エラー箇所に関するルールを調べたら解消することが多いので、アルゴリズム力は低めでもOKです。

また、eclipseやVisual Studioのような開発ツール(IDE)は、簡単な文法ミスは通知してくれる機能があるので、そんなに苦戦はしないです。

実行時エラー : アリゴリズム力★★

実行時エラーは、プログラムは起動したけど動かしている途中にメッセージが出てきて、途中で異常終了するエラーです。

アプリが落ちた!!」とか「画面が固まった!!」などがそうです。

簡単に代表的な例を1つ説明します

ゼロ除算エラー

「10 ÷ 0」は計算しようとすると当然ですが整数をゼロで割ってはいけないので、コンピュータでは計算できません。

このような場合、プログラム中に0で割る計算式が書いているのならプログラムを修正する必要があります(そんなことはほとんど無いと思いますが)

では、電卓のように自分で数を入力するようなプログラムの場合には、「0が入力されたらメッセージを表示する」というような処理を追加しなければなりません。

なぜこんなことをするかというと、アプリが落ちないようにするためです。

パソコンの電卓ソフトで、0で割るとアプリが落ちて、起動しなおさないといけないとか嫌ですよね?

したがって、実行時エラーが発生する条件を事前に想定して、アプリが落ちないようなアルゴリズムを構築する必要があります。

このように、実行時エラーへ対応することをエラーハンドリングと言います。

論理エラー : アルゴリズム力★★★

論理エラーは「計算したら1になるはずなのに、2になった」みたいな想定した結果と異なる結果になることです。

論理エラーは他のエラーのようにエラーメッセージは出ませんが、結果は想定しているものと違うという状態です。

一番厄介で、どこで計算ミスが発生したのか特定するのが難しくなります。

したがって、アルゴリズムの誤りを発見する力が最も必要になります。

特に、サーバーサイドのように複雑な計算処理が多くなるほどエラーは出やすく、バグも潜んでいる可能性が高くなります。

アルゴリズムを学習するのにおすすめのサイトと書籍

ここまでの話しを読んで「アルゴリズムを勉強したい!」と思っていただけた方にお勧めしたい学習サイトと書籍をご紹介します。

まずはQiitaに投稿されている以下の記事が非常に参考になります。

具体的な計算例や様々な事例を公開されているので、視覚的にも分かりやすい内容になっています。

次におすすめの書籍になります。

わたしは「自分が初心者」という目線で立つと図やイラストの方が理解が進むと思うので、以下の書籍は非常におすすめです(かなり定番の書籍ですm(_ _)m)

まとめ

それでは、今回の内容のまとめになります

・アルゴリズムは答えを出すための仕組み

・アルゴリズムの正解は1つではない

・アルゴリズムは先人の知恵を使うべし

・アルゴリズムは設計書、プログラミングは実現するための手段

・エラー対応するにはアルゴリズムを分かる必要がある

今回の内容はこれで終わりになります♪

最後まで読んでいただきありがとうございます!

ではでは、('ω’)ノ

スポンサーリンク