アルゴリズムを知らない子ども達
あまりも当たり前過ぎて21世紀に入ってから言葉にだしたことはあまりないのですが、当然のことながら、プログラムというのは、アルゴリズムを理解して初めて「書ける」と言うのです。
プログラムが書ける、という状態は「アルゴリズムを理解する」という状態の延長線上にあるべきで、アルゴリズムを理解していないということは挙動を理解していない、つまりプログラムを理解していないのとほぼ同じだと思います。
最近はLLと呼ばれる、いわゆる軽量スクリプト言語がメインになってきていますが、それでも依然として、コンピュータというのはアルゴリズムで動くもので、プログラムというものは全てアルゴリズム論の延長上にあると思っています。
その意識がないと、たとえPHPやJavaScriptのコードを書いていても、不可解な動きをしたり、遅くなってしまったりしたときに「なぜだろう?」ということがピンとこないことになります。
まだ大学に入って無くて、趣味のプログラミングを楽しんでいる若い人たちには、ぜひアルゴリズムを勉強してみることを勧めます。
最近は素晴らしい時代になったもので、ごく初歩的な入門は Ruby on Rails でもすることができます。
しかし本格的にアルゴリズムで遊びたくなったら、数学や計算理論を使うのがお勧めです。
今の計算理論は複雑になりすぎていて、初心者が全ての理論を知ろうとすると膨大な時間と労力がかかります。
しかし、最終的にはそれは全て知らなければならないことですし、知っておくべきことです。
最近は、全くの文化系の女の子が、わずか数ヶ月の研修で「システムエンジニア」や「ITコンサルタント」と称してJavaのプログラムを書くような商売もあるらしいのですが、そんなときにもぜひアルゴリズムを勉強してもらいたいと思います。アルゴリズムが解らないと、そもそもメモリの構造やプログラムの動作の仕組みがわからないということなので、何が問題なのかわからないことの方が多くなると思います。
どれだけデバッガやコンパイラが進化しても、その仕組みを理解していることは絶対に必要です。
筆算ができない人が電卓を使い続けたときに答えが正しいのか間違っているのかわからないのと同様、アルゴリズムができない人が書いたプログラムは、一見うまく動いているように見えたとしても、それは奇跡のようなバランス、自転車で言えば補助輪がついた状態で奇跡的に動いているに過ぎず、なにか未知の問題が発生したときに素早くコンピュータ内部でおきていることに直感を巡らせ、適切な処置・対応をするためにはアルゴリズムの理解は不可欠と言って良いでしょう。
さらにいえば、アルゴリズムよりさらに下のレイヤーである、データ構造を理解しているとさらに理想的です。
昔、コンピュータプログラムの本といえばアルゴリズムの本を意味しました。しかし、今の若いプログラマ達は、下のような図をみても何を意味するか瞬時にわからないのではないでしょうか。(図は略)
プログラムは全てアルゴリズムの組み合わせでできています。
プログラムを構成する論理要素は全てアルゴリズムとデータ構造なので、データ構造を理解しないとコンピュータの動作原理を理解していないことになります。
最低でも、配列と構造体だけで衝突を考慮したハッシュ表を作れる程度の理解はしておいて欲しいと思います。
データ構造、アルゴリズム、C言語の3つは、現在でもあらゆるプログラムの基礎になっているので、最低限おさえておきたいところです。
最後に参考文献をまとめておきます。
ただ読むだけでもとても面白い本ばかりです。
計算機プログラムの構造と解釈 | The Art of Computer Programming Volume 1
see also http://d.hatena.ne.jp/shi3z/20070911
でもまああれだ、 ruby-list でハッシュ表についてヒートアップしてたのを傍観しながら、わりと素で↑のようなことを感じたことであるよ。
ところでこーゆーネタは既出じゃないよね?
ということは機械語もアルゴリズムも学べるTAOCPが最強?
「アルゴリズム+データ構造=PASCALプログラム」なんて本が入門書だったなあ
などと年寄りっぽいことを言ってみる
完成度の高さにおもわずブクマさせていただきました。
でも、まさかアルゴリズムっていまそんな軽視されてるんですか?