ジャバ・ザ・ハットリ
Published on

「アルゴリズム論なんて知らなくてもコードは書ける」はその通り。だけどそれ落とし穴ですよ、と

Authors
  • avatar
    ジャバ・ザ・ハットリ

オフィスにこの本が置いてあって、読んだ。正直言って、英語が妙に難しいし完全には理解できていないが、それでもためになること多し。中途半端な最新技術の本を読むことに時間を割くぐらいなら、このようなアルゴリズムとか基礎技術を身につけた方が後々に効いてくる、というのが持論だ。

Introduction to Algorithms
Introduction to Algorithms
作者: Thomas H. Cormen,Charles E. Leiserson,Ronald L. Rivest,Clifford Stein
出版社/メーカー: The MIT Press
発売日: 2009/07/31
メディア: ペーパーバック
購入: 5 人 クリック: 90 回

最新のフレームワークとか目新しい技術は振れ幅が大きい。今は最新のトレンドであっても数年後には廃れてしまっている可能性が多いにある。いいオッサンになってしまったのでかつて「これからは**だ!」と言われていた技術やプログラム言語がたった数年でほとんど誰も知られなくなっているという実例を身をもって体験している。

だが基礎技術は違う。これから5年後に「アルゴリズム?そんなもん古いよ。」なんて言い出すヤツなんてきっと居ない。コンピュータのアーキテクチャが根底からひっくり返らないかぎり無い。ほぼ無い。

その割に全てのソフトウェア・エンジニアがアルゴリズム論がしっかりと頭に入っているとは思えない。だいたいアルゴリズム論などまったく知らなくてもコードは書ける。そこが落とし穴になっている。

要はアルゴリズムなんて知らなくてもコードは書けるが、本当に知っているとその成果には雲泥の差が出る。

さらに今後、良いアルゴリズムを編み出せるエンジニアの優位性はより際立っていく。ムーアの法則よろしく今後もコンピュータの処理能力は劇的に向上していく。コンピュータの処理能力が向上すればするほど、良いアルゴリズムはめちゃくちゃに良くなり、悪いアルゴリズムはどんどん悪くなる。

仮に CPU パワーを2倍にした場合、O(n) と O(n^2)の違いは2倍どころではないからだ。

もし上記の1文に対して「?」となっているエンジニア(もしくはエンジニア志望)の人がいたら、もう言い訳無用でアルゴリズム本の1冊ぐらい読んだ方がいい。

良いアルゴリズムを生み出すエンジニアと悪いアルゴリズムしか生み出せないエンジニアの生産性の差は100倍以上にもなる。

で、このあたりはエンジニア同士の会話でも知っている人だけで「あーそうそう」と共通認識ができる。が、知らない人はそもそも認識がない。

時間対効果でいくと最上級に効率的な内容のひとつがアルゴリズム論だと断言できる。しかもアルゴリズム論に関しては本を何冊も読む必要はない。定番の本を1冊じっくり理解すれば、それで OK。

そこで定番というのが上記の本だけど。。。

もし完璧に英語ができる人でもない限り上記の本はあまりオススメしない。日本語訳がいいと思う。私にしてもシンガポールに在住して日本人の居ない職場で英語だけ使って働いている身だ。ネイティブ級ではないが、英語ができない訳じゃない。まーまーできる方だ。

それでもこの本の英語は難しい。ウェブ記事や小説、ニュースの英語を読むのとは別の英語力が必要なのを感じる。

例えば以下は同じ本の日本語訳だけど、これをサーっとウェブ記事を読むぐらいのスピードで1回だけ読んで理解できるのだろうか?私はできない。

そもそも私の日本語の処理能力がそこまで高くないのは感じている。読むスピードも遅い方だ。ただ日本で生活して日本の義務教育を終えた人間をもってしても2回は読んで「あーそういうことね」となる内容だと思う。書いてることはそこまで難しいことではないが、文章にされると(私は)「むむむ。。。」となる。

さらにこれを英語で書かれて英語を理解しつつアルゴリズムを理解する、となると脳への負荷がキツすぎる。そこまでするぐらいなら日本語訳でさっと理解した方がいい。

で、これです。

アルゴリズムイントロダクション 第3版 第1巻: 基礎・ソート・データ構造・数学 (世界標準MIT教科書)
アルゴリズムイントロダクション 第 3 版 第 1 巻: 基礎・ソート・データ構造・数学 (世界標準 MIT 教科書)
作者: T.コルメン,R.リベスト,C.シュタイン,C.ライザーソン,浅野哲夫,岩野和生,梅尾博司,山下雅史,和田幸一
出版社/メーカー: 近代科学社
発売日: 2012/08/02
メディア: 単行本
購入: 1 人 クリック: 16 回

それとこちらのウェブサイトもたまに眺めるにはオススメ。

VisuAlgo - visualising data structures and algorithms through animation