53
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初学者向け】「なんとなくコード書く」を卒業するためのアルゴリズム入門

53
Posted at

株式会社 PRUMのmasaです。

今日は「アルゴリズムの基本概念」という内容について、プログラミング初学者向けに記事を書きました。

この記事を読むことで、難しく感じがちなアルゴリズムを身近なものとして理解し、論理的にコードを組み立てるきっかけを得られると思います。

興味があれば読んでいただけると嬉しいです。

アルゴリズムは「問題を解くための手順」

未経験から学習を始めると、どこかのタイミングで必ず アルゴリズム という言葉に出会うと思います。
僕もエンジニアになりたての頃は、この言葉を聞くたびに「理系出身の人がやる難しい計算的なやつでしょ?」と身構えてしまいました。

でも、結論から言うと、アルゴリズムとは 「問題を解くための手順」 のことです。
コンピュータに効率よく動いてもらうための「レシピ」だと思ってください。

カレー作りで考える「手順の最適化」

例えば、あなたが今日の夕飯にカレーを作るとします。
以下の2つの作り方、どちらが早く完成するでしょうか?

  1. 野菜とお肉を全部切り終わるまで待ち、それからお湯を沸かし始める。
  2. お湯を沸かしながら、その横で野菜とお肉を切る。

当然、2番目の「並行して作業する」方が早く完成しますよね。
同じ「カレーを作る」という目的でも、手順(段取り)を変えるだけで、かかる時間が大きく変わる。この 「効率よく美味しく作るための段取りを考えること」 が、まさにアルゴリズムなんです。

開発現場の「ログイン機能」もアルゴリズム

日常の例だけだとピンとこないかもしれないので、実際の開発現場でよく作る「ログイン機能」を例にしてみましょう。
ログイン機能も、分解すると以下のような手順でできています。

  1. ユーザーが入力したIDとパスワードを受け取る
  2. データベースの中に、そのIDが存在するかを探す
  3. IDがあったら、パスワードが一致するかを確認する(※実際にはパスワードは暗号化された値で比較)
  4. 一致していれば「ログイン成功」の画面へ、違っていれば「エラー」の画面を返す

このように、コンピュータにやらせたいことを順序立てて論理的に組み立てる作業。これも立派なアルゴリズムです。
「どうやったら一番スムーズに目的の動きをしてくれるかな?」と道筋を考えること自体がアルゴリズムなので、決して特別な数学の知識が必須というわけではありません。

最初は「レシピ」を作る感覚でOK
コードを書き始める前に、日本語で「まずこれをして、次にこれをする」と箇条書きにする癖をつけると、頭の中がスッキリ整理されますよ!

データをキレイに並べる「ソート(整列)」をやってみよう

アルゴリズムのイメージが少し湧いてきたところで、もう少しプログラミングらしい例を見てみましょう。
代表的なアルゴリズムの一つに 「ソート(整列)」 があります。これは、バラバラのデータを「大きい順」や「小さい順」など、特定のルールに従ってキレイに並べ替える手順のことです。

ここでは、一番シンプルで有名な 「バブルソート(泡立ち法)」 という手順を紹介します。

トランプを「小さい順」に並べてみる

目の前に、バラバラの数字が書かれた5枚のトランプがあるとします。
[ 5, 3, 8, 1, 4 ]

これを一番左から小さい順に並べ替えたい時、バブルソートでは 「隣り合う2つのカードを比べて、右の方が小さければ入れ替える」 という、とてもシンプルな作業を繰り返します。
実際にどう動くか、ゆっくり追ってみましょう。

【1周目の作業】

  • 53 を比べる → 3の方が小さいので入れ替える。 [ 3, 5, 8, 1, 4 ]
  • 58 を比べる → 5の方が小さいのでそのまま。 [ 3, 5, 8, 1, 4 ]
  • 81 を比べる → 1の方が小さいので入れ替える。 [ 3, 5, 1, 8, 4 ]
  • 84 を比べる → 4の方が小さいので入れ替える。 [ 3, 5, 1, 4, 8 ]

これで1周目が終わりました。見ての通り、一番大きな「8」が一番右端に移動しましたね。
水の中で泡(バブル)がポコポコと水面に浮かび上がっていくように、一番大きな数字が端っこに浮かび上がってくることから「バブルソート」と呼ばれています。

あとは、残りの4枚に対して同じ作業を2周目、3周目……と繰り返していくだけで、最終的に [ 1, 3, 4, 5, 8 ] というキレイな順番に並び替わります。

コンピュータは一瞬で並べ替えをしてくれる魔法の箱のように思えますが、裏側ではこうやって「地道に2つを見比べて入れ替える」という作業を、ものすごいスピードで実行しています。

もしもアルゴリズムを意識しないとどうなるのか?

「なるほど、手順が大事なのは分かった。でも、いま学習している段階では、とりあえず動けばいいんじゃないの?」と思う方もいるかもしれません。

たしかに、最初は動くコードを書けるだけで素晴らしいです!
ですが、アルゴリズム(手順)をまったく意識せずにコードを書く癖がついてしまうと、やがて 「なんとなく動くけど、なぜ動くのか分からないコード」 になってしまい、後から自分でも直せなくなり、開発現場の負担が増加してしまいます。

「目分量で作った料理」は後から修正できない

アルゴリズムを持たずにコードを書くのは、 「レシピを見ずに、適当な目分量で作った料理」 と似ています。

最初はたまたま美味しくできるかもしれません。でも、次に作った時に味がブレてしまった場合、「どの調味料を間違えたのか」「火加減が強すぎたのか」を後から振り返ることができませんよね。

「今、自分はどういう手順でコンピュータを動かそうとしているのか?」を意識

プログラミングでも同じことが起きます。
少し複雑な処理を書いてエラーが出たとき、アルゴリズムという明確な「手順の道筋」が頭にあれば、「全体の3番目の処理まではうまくいっているから、4番目の手順がおかしいはずだ」とエラーの原因にアタリをつけることができます。

しかし、手順を意識せずに「とりあえずコピペで動かした」ような状態だと、エラーが出た瞬間に「どこを見ればいいか全く分からない」と完全に迷子になってしまいます。

エラー解決で何日も悩んでしまい、プログラミング自体が嫌になってしまう。これは、僕を含め多くの初学者がぶつかる大きな壁です。

だからこそ、最初のうちから「今、自分はどういう手順でコンピュータを動かそうとしているのか?」を意識することが、結果的に自分の身を助けてくれます。

さいごに

アルゴリズムとは特別な数学などではなく 「目的を達成するための段取り」 です。一回で完璧に理解しなくても大丈夫です。まずは「そういう工夫があるんだな」と知っただけで、昨日の自分より確実に一歩前進しています。これからも焦らず、一緒に少しずつ積み上げていきましょう!


PRUMのエンジニアの95%以上は未経験からの採用です。
よければコーポレートサイトにも遊びに来てください。
コーポレートサイト

エンジニアの方に役立つ記事をまとめたサイトも運営しています。もしご興味あれば覗いてみてくださいね。
エンジニアに役立つ記事サイト

53
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
53
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?