目次 [hide]
アルゴリズムとは?
アルゴリズムとは、ある問題を解く具体的な手順のことです。
プログラミングの世界では、効率的な解法のことを指すことがあります。
有名なアルゴリズムだと、クイックソートと呼ばれるものがあります。
これは、その名の通り、数列を効率的にならべるアルゴリズムです。
また、私が初心者のころ
優秀なプログラマーになるためにはアルゴリズムが必要
と思ってアルゴリズムを勉強した覚えがあります。
しかし、今思えば
学習コストのわりにあまり役立たない知識
だったなという印象です。
今回はその理由を説明します。
現在、プログラミングをはじめたてでアルゴリズムを勉強しようとしてる方は必見。
たいていのアルゴリズムは実装されている
ほとんどのアルゴリズムは発見された時点で実装済です。
ましてや、本に載ってるようなアルゴリズムは、
どんな言語でも標準モジュールに実装されていることがほとんどです。
そのため、中身がどうなっているかをわからずとも
アルゴリズムの恩恵を授かることができます。
中身がどうなっているかわからずに使うのは邪道だ!
という人がいると思います。
しかし、中身を理解したからといって結果はほとんど変わりません。
また、中身を理解して実装するのは車輪の再開発で愚かな行為です。
車輪を題材にした慣用句であり、世界中で使われている。「広く受け入れられ確立されている技術や解決法を知らずに(または意図的に無視して)、同様のものを再び一から作ること」を意味する。https://ja.wikipedia.org/wiki/%E8%BB%8A%E8%BC%AA%E3%81%AE%E5%86%8D%E7%99%BA%E6%98%8E
仕事でアルゴリズムを使うことはない
仕事でアルゴリズムを使うことはほとんどないです。
なぜかというと、配列の値をソートしたければ、
ソートメソッドを呼び出すだけで終わるからです。
基本的なことはアルゴリズムの内部を意識せずとも使いこなせます。
また、フレームワークを使えば、
高度なアルゴリズムの中身を理解せずとも使えます。
アルゴリズムで重要なのは入力と出力です。
今はディープラーニングが発展ブラックボックスを
ある程度、人類が受け入れなければならない時代です。
中身の妥当性を検証しなければダメだという人は時代遅れです。
参考に科学の世界では次のような考え方がスタンダードになりつつあります。
- 経験科学
- 理論科学←現象を理論的に説明することで新しい発見があった時代
- 計算科学←シミュレーションによって得られた結果から新しい知見を得る時代
- データ科学←現代はデータの中から法則を見つけ出し事実を発見する
第一の科学的手法である経験科学(実験)、第二の科学的
手法である理論科学、第三の科学的手法である計算科学(シミュレーション)
と並び、データ科学(data centric science =e-サイエンス)は第四の科学的
手法と言われ、新潮流として注目されている。http://www.mext.go.jp/b_menu/shingi/chousa/shinkou/027/shiryo/__icsFiles/afieldfile/2012/07/04/1323194_1.pdf
やりながら学ぶことが重要
なかには暗号アルゴリズムなど、理解してないと危険なアルゴリズムもあります。
こういったアルゴリズムは使う前にちゃんと勉強しましょう。
とはいえ、扱う必要になってから勉強するのでも全然大丈夫です。
エンジニアにとって重要なのは知識量ではなく臨機応変に学び続ける力です。
なので、アルゴリズムを学ぶよりも
その時々に応じて、自分の学ぶべきものを見極めて学ぶことが重要です。
基礎的なアルゴリズムの勉強は今の時代、かなり優先順位が低いはずです。
重要だった時代もあった…
過去には、アルゴリズムを学ぶ必要性があった時代があると思います。
いまほど、オープンソースが活発でもなく、
貧弱なハードウェアでプログラムを動作させてた時代であれば、
アルゴリズムを自分で実装する必要があったことでしょう。
そして、そういう人がスーパーエンジニアだったことでしょう。
しかし、今はそんな時代ではありません。
過去のスーパーエンジニアを真似してもあんまり意味がありません。
自分の頭で考えて何を学ぶべきかを決めなければ優秀なエンジニアになれません。