【経験談】プログラミング勉強にアルゴリズムはいらない

サキ さん
よくプログラミング勉強をするなら、アルゴリズムについても学んだ方がいいという話を聞くのですが、正直よく分からないんですよね〜。
マナブ さん
確かに「アルゴリズム」という明確なジャンルや言語、フレームワークがあるわけではないから難しいかもしれないね。でもね、もし「仕事で必要になるかも」と思っているのなら、その知識のほとんどはムダかもしれないよ
サキ さん
え!?アルゴリズムってそんなに重要じゃないんですか!
マナブ さん
重要ではあるのだけど、多くの場合現場で使う機会がほとんどないということだよ。早速詳しく説明していこう。

 

アルゴリズムとは

アルゴリズムとは一言で言えば、「物事の処理手順」のことです。

そして、その中のいくつかがプログラミングやコンピュータサイエンスなどの科学の分野の基礎知識として応用されています。特に近年、機械学習などのいわゆるAI分野において様々なアルゴリズムが発明されています。

「深層学習(ディープラーニング)」という言葉を聞いたことがありますか?

深層学習もAIを作る技術の一つですが、この深層学習の中心となる技術自体もアルゴリズムといえます。つまり、深層学習のアルゴリズムを用いて、より精度の高いAIが開発されているのです。

マナブ さん
いま使っているPCやスマホも、様々なアルゴリズムによって支えられているんだね。

アルゴリズムは勉強しなくてもいい

早速ですが、結論からお話します。

プログラミングを勉強している、という方においてはアルゴリズムは勉強する必要はありません。

しかし、一部例外もあります。こちらは後ほど説明します。

これからエンジニアになろう、あるいはエンジニアになって日が浅く開発言語の勉強をしている方が多いかと思います。そういった方々がいま、アルゴリズムの勉強をしても、現場で実際に活用して成果を出す機会は1年に1回あれば多いと思ってください。

それは、なぜか。

単純な話で、アルゴリズムの勉強をしても得られるのは極めて抽象的な知識だからです。

 

例えば有名なアルゴリズムで「二分探索(バイナリサーチ)」というものがあります。こちらは以下のようなものです。

ある数字が並んだ配列、あるいはDB(データベース)の中から、特定の一つの数字を検索して探すというもの。
その時に二分探索を使うことで、より早く、もちろん正確に検索をすることができるようになるのです。
具体的には、

(1)配列を大きい順にソートして、真二つに分割する
(2)配列の中央にある数字を調べる
(3)目的の数字がその数字と比べて大きい/小さい に応じて探す方向を変える
-真ん中の数字が、目的の数字より大きい場合=小さい方向に探す
-真ん中の数字が、目的の数字より小さい場合=大きい方向に探す
(4) (2) に戻る…

こうすることで、大量の配列があったとしても一つ一つ調べる必要がなく、目的の数字を見つけ出すことができるのです。

 

アルゴリズムを現場で使う機会はほぼない

Ruby on Rails、PHP、JavaScriptなどのWEB制作やフロントエンジニアとしての勉強をされている場合には、特にこういったアルゴリズムを考えて実装するという機会はまずないでしょう。アルゴリズムが苦手という方は安心してください。

 

フロントエンド開発においては、大量のデータを扱って実装するということが少ないことが理由としてあげられます。もちろん、Railsを使ってAPIを作るという時に既存のDBからデータを持ってくる、という作業はよくあります。しかし、こういった際に、アルゴリズムを考えて実装するよりは、DBおよびコード全般の設計を見直す、という手段が採られることが多いです。

 

そのため、プログラミングを勉強中という方においては特に、アルゴリズムを勉強しなくちゃ!と気負う必要はありません。むしろ、その時間を他の開発に直接関係のある分野に充てた方が良いでしょう。

サーバエンド、AIエンジニアは例外

しかし、サーバサイドエンジニア、近年増えつつあるAIエンジニアにおいては例外です。

WEBサービスやアプリなどのサービスにおいては大量のデータを扱う機会が多くなっています。そういった際にサーバサイドエンジニアは如何に効率的にデータを操作するか、ということを考えます。ある程度経験を積むと、基本的なアルゴリズムを介した実装をすることで、より良い動きをさせることができます。

さらに、AIエンジニアにおいては、機械学習分野の技術を用いることが多いでしょう。
Python、MATLAB、Juliaなど様々な言語が使われているが、その言語を用いて作るのは機械学習や深層学習などのアルゴリズム上で動くアプリケーションです。上述の二分探索法やその他の基本的なアルゴリズムを知っておくことは、むしろ「常識」とみなされるでしょう。