アルゴリズムという単語を聞いたことはありますか?
Wikipediaでは以下のように説明されています。
Wikipediaから引用
アルゴリズム(英: algorithm [ˈælgəˌrɪðəm])とは、数学、コンピューティング、言語学、あるいは関連する分野において、問題を解くための手順を定式化した形で表現したものを言う。算法と訳されることもある。
引用元:ウィキペディア アルゴリズム
つまりは問題を解くための定石のようなものです。
このアルゴリズム、プログラミングを勉強する中で必ず出くわす単語の一つです。
それゆえに勉強すべきかどうなのか、プログラミングを勉強し始めた人にとって、迷う部分でしょう。
結論から言えば、アルゴリズムの必要性は目指すエンジニアによって異なります。
もう少し深く説明すると、以下のリストのようになります。
- Webのフロントエンドよりの人は勉強する必要性が薄いです
- バックエンドエンジニアを目指すのであれば、勉強しておいた方がよいでしょう
- AIもしくは機械学習エンジニアになりたい人にとっては、必須科目だと思った方が良いです
なぜ上のように述べたか、今から理由を順番に説明していきます。
目次
- 1. Web制作だけなら、アルゴリズムはそこまで必要ない
- 2. サーバーサイドの言語を学習したいなら、アルゴリズムはできたほうが便利
- 3. 機械学習系に進むのなら、アルゴリズムは必須
- 4. どうやって学習すればいいのか?
- 5. まとめ
Web制作だけなら、アルゴリズムはそこまで必要ない
正直な話、Web制作の仕事をする上ではアルゴリズムの必要性はそこまでありません。
Webページの外観は、HTML、CSS、Javascriptを用いて実装することが多いので、複雑な処理を必要とするケースが稀なためです。
デザインがWeb制作の主な仕事
Web制作における主な仕事は、デザインを作り、それを元にしてWebページを作成することです。
ですので、どちらかと言えば、外観のデザインを考えることに時間を使うことが多いため、アルゴリズムを使うケースはほぼ無いと考えてよいです。
サーバーサイドの言語を学習したいなら、アルゴリズムはできたほうが便利
サーバーサイド、俗にいうバックエンドエンジニアを目指しているのであれば、アルゴリズムを習得しておく必要性が出てきます。
Web制作とは違い、サーバー側でどうデータを取り出して処理を行うかを設計・実装するバックエンドエンジニアは、ときに複雑な処理を実装することを求められるためです。
面接でアルゴリズムの質問が出ることも
さらに、ここ最近ではスキルチェックの一環として、面接時に簡単なアルゴリズムをホワイトボードに書かせて確認する企業が増えています。
とくにバックエンドエンジニアは、Web制作と比較して複雑な処理をプログラムで実装するケースが珍しくないので、このようなスキルチェックを行うケースがあります。
元々この面接方式はアメリカ系のIT企業で行われていたものですが、日本でも同様の面接方式を採用している企業が増えている様子です。
機械学習系に進むのなら、アルゴリズムは必須
機械学習は統計学や数学と密接に関係しているため、アルゴリズムを使わずに仕事することは無いと考えてよいでしょう。
数式をプログラムに変換する必要がある
複雑な数式を読み解き、アルゴリズムとして実装することが機械学習エンジニアとしての仕事です。
現在では、ライブラリも豊富に用意されているため、アルゴリズムを0から組み立てる必要性は薄いです。
とはいえ、何かしらの問題が発生したときはライブラリの中身を確認する必要もありますし、計算結果がほんとうに正しいかどうかを精査する必要性もあります。ときには、確認用のプログラムを作成することも必要でしょう。
アルゴリズム実装能力=効率的に問題を解く数式を立てる
アルゴリズムの実装能力とは、「効率的に問題を解く数式を立て、式をすばやくプログラミングする能力」です。
ですので、アルゴリズムをきちんと勉強するのであれば、数学の知識も必要になってきます。
どうやって学習すればいいのか?
アルゴリズムの学習方法ですが、基本はWeb制作と同じで、手を動かすことです。
ただ、アルゴリズムには数学の知識が求められるため、数学が苦手な人には敷居が高いものになりがちです。
数学が苦手な人は、まずは代表的なアルゴリズムがどのような動きをするのか、イメージを固めところから入る方がよいでしょう。
ここでは、アルゴリズム学習に役立つサイトと本を挙げています。
アルゴリズム図鑑
はじめに紹介するのは、石田保輝(著) アルゴリズム図鑑 絵で見てわかる26のアルゴリズムです。
この本は、基本的なアルゴリズム26種に加えて、7つのデータ構造を解説したものです。
特徴的な点は、図による説明を使うことで、読者にアルゴリズムの動きをイメージできるようにしている点です。
はじめてアルゴリズムを学ぶ人にとっては、良本になるでしょう。
プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
渡部 有隆 (著)プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
次はアルゴリズムを使ったプログラミング方法の解説に重きを置いた本です。
この本は競技プログラマーを目指す人がアルゴリズムを勉強するための本ですが、解説がわかりやすい上に掲載されているプログラムもわかりやすいので、お勧めしています。
Atcoder
アルゴリズムを勉強しても使う場所がなければ、なかなか上達しません。
そこで、競技プログラミングの問題を解いてみるのはいかがでしょう?
競技プログラミングとは、提示された問題を解くプログラミングをいかに短時間で実装できるかのスピードを競うものです。
AtCoderさんは、競技プログラミング初心者向けの過去問題を公開してくれているので、ここから気になった問題を解いてみるのがお勧めです。
LeetCode
最後はLeetCodeです。
LeetCodeとは、Google、Facebook、Microsoftといった、世界トップレベルIT企業の面接で使われたアルゴリズム問題が掲載されているサイトです。
また、他人が書いたプログラムを見ることもできるので、どう書けば良いプログラムになるかを比較することができる点もGoodです。
英語のみのサービスですが、集まる情報の質が素晴らしいため、利用する価値は非常に高いです。
まとめ
アルゴリズムは目指すエンジニアのタイプによって、必要度がガラリと変わってきます。
そのため、自分が目指すエンジニアのタイプをしっかり見定めることが大切です。タイプが決まれば、アルゴリズムに勉強を割くかが決まるため、計画が立てやすくなります。
アルゴリズムの勉強はかなり大変ですが、その分の見返りも大きいです。
実際、アルゴリズムの知識が必須とされている機械学習エンジニアであれば、会社に就職している状態でも年収1,000万円に到達できる可能性があります。Web制作エンジニアであれば、フリーランスにならない限りは年収1,000万円に到達するのは、かなり難しいでしょう。
とはいえ、年収だけでエンジニアのタイプを目指すのは非常に危険です。アルゴリズムは数学の素養を求める部分が大きいため、あまりにも数学が嫌いな人であれば、挫折する可能性が跳ね上がります。エンジニアになるためにどれだけ努力していても、途中で投げ出してしまえば、今までの努力がすべて無駄になってしまいます。
いちばん大事なことは、自分がどんなエンジニアになり、どんな働き方を続けたいか、をしっかり見極めてキャリアを考えることではないでしょうか。