社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

プログラマーとしてアルゴリズムを学ぶべきなのか

アルゴリズムとデータ構造
並び替え・検索はシステムのプログラムを書く上で基本的な動作に挙げられると思います。
それらには色んな種類があります。

ここで挙げるまでもないですが
並び替え

検索

そしてそれを実現するためのデータ構造があります。
データ構造

  • リスト
  • スタック、キュー
  • ツリー
  • グラフなど

アルゴリズムを実装する機会
これらを実際のプログラミングする機会において、実装したことはあるでしょうか。
プログラミングを習うための練習や、アルゴリズムに興味がある方であれば、実装経験がきっとあると思います。

ただ仕事でプログラミングを行うケースにおいて、こういったアルゴリズム自体を実装することはほとんど無いかもしれません。
世の中には便利なライブラリがたくさん開発されているためです。
並び替えなら、sort() と書けばソートしてくれるし、検索なら、get() と書けば必要なデータを探してくれます。

自分はプログラミングを仕事で始めたころ、ライブラリの存在をあまり知りませんでした。
つまり、何でも自分で実装しようとしていました。
そんなに複雑なものではなかったと思いますが、並び替えの実装をする必要がありました。
もちろん簡単には出来ませんでした。
しかしながら、試行錯誤しアルゴリズムを考え、頑張って実装しました。
それで提出すると、指摘を受けました。「ライブラリを使え」と。

アルゴリズムと無縁
ライブラリを使うようになってからは、アルゴリズムを強く意識して実装することがなくなりました。
仕事上のプログラミングは、サービスを開発することが求められます。
アルゴリズムの実装に時間を割くことは求められません。

今思えば、それはプログラミングに対するハードルが自分の中で下がった瞬間でもあったように思います。
「なんか難しいことが、思っていたよりも簡単に実装できる」

アルゴリズムと再開
最近、アルゴリズムを学ぶ機会がありました。
上に挙げたような、アルゴリズムやデータ構造の名前が出てきます。聞いたことはあります。
しかし、実際にそれを理解しようとすると、分からないこと、難しく感じることが多いのです。

そして少し思いました。
いろいろとプログラム書いてきたけど、理解していないところ多いなと。
自分の中の理想としては、そういったところも理解できることです。
数学の知識も多少必要となります。
正直言って難しいと感じる面があります。

ただ、そういったところも理解できるようになると、もっと自分の成果物に自信が持てるようになる気がします。
学ぶべきかと言われると、必ずしも必要とは思いません。
※ただ、試験などで求められるケースもあります
自分が学びたい、理解したいと思えたら学んでいけたら良いと思います。
もし理解することが出来たら、「理解しておくべき」と考えが変わるかもしれません。