アルゴリズムを学ぶと、プログラムの幅が広がるよ!それも言語に囚われずに。というお話。

最近作った『シムエントリ』。
自然言語処理(テキストマイニング)の知識を学んだことで、初めて開発できたサービスです。
しかし、ほんの1ヶ月前まではこれらの知識なぞさっぱりありませんでした。たまたま、現在スポットで勤めている某研究所でプログラムの助手をしていたのがきっかけで、学ぶ機会に恵まれました。

さて、日々プログラムに触れられている皆様、アルゴリズムに純粋に触れる機会はどの程度でしょうか?
現在よく使われている高級言語(Java, Perl, Python, etc…)には様々なライブラリが揃えられていて、そのライブラリが動くアルゴリズムを知らなくても、存在を覚えさえすればプログラムが書けてしまいます。例としては、配列のソートや、ハッシュテーブルなどでしょうか。
そして、巷でよく見かけるプログラム技術は、主にライブラリの使い方や、コーディングテクニックです。
これらは、確かに自分自身のプログラムスキルを上げるポイントにつながることは否定しません。過去、僕もこれらをたくさん学んだ時期があります。
おそらく、『上達した!』という優越感を持ちやすいからなのでしょう。

しかし、ライブラリとかコーディングテクの知識は、言語に依存していることが少なくありません
言語の栄枯盛衰が早い(※1)現在、極端な言い方をすればこれらは使い捨ての知識に成り下がる危険性をはらんでいます。

これは、非常にもったいないな!と最近気づきました。

そんな中で出会った、自然言語処理のアルゴリズム。
出会うまでは『小難しいものだから』や『GoogleやYahoo!に勤める専門家が使うものでしょう』と、言い訳を考えて敬遠していました。
でも、やってみたら、そんなことないものも数多くあったのです(※2)。
テストプログラム程度ならすぐに結果が出ますし、何よりたいていの言語で実装可能(=自分の好きな言語で実装OK)です。
ちなみに、シムエントリのベースは数日で出来上がってしまいました(※3)。公開の準備のほうが時間がかかったくらいです。

アルゴリズムを知ることで、今まで「やりたくてもやり方を知らなかった」ことができるようになったり、今やれていることでも「よりスマートに」できるようになるのです。
少なくても、単語を探すときに線形検索(端から端まで順繰り探す)することがいかにに無駄で、2分探索など効率よく・すばやく探すアルゴリズムがどれだけ大切か、などに気づいていただけると思います(※4)。

僕が思うに、アルゴリズムは先人の知恵です。
多くの賢い人が考え、苦心された末に一般化された知識を、使わない手はありません。
また、多くのプログラムに応用することができるので、プログラミングもより楽しくなること間違いありません。

今、まさに自分自身が楽しんでいます。

※1
僕は、10年前にVisual Basic 4.0を皮切りに、C, C++ (& MFC), Perlを、仕事をはじめてからさらにJava, JavaScript, PL/SQL, PHP, Python と様々な言語に関わってきました。
この中で、10年前から継続して使っているのはC, C++, Perl の3つです。
さらに、今まで扱ったフレームワークを含めると、栄枯盛衰の早さをより垣間見ることがあります。

※2
解説しているWebサイトも数多くあることもわかりました。自然言語処理関係はたつをさんのブログにとてもお世話になっています。
たつをのChangeLog
オススメ>>『[を] 形態素解析と検索APIとTF-IDFでキーワード抽出

※3
自然言語処理のアルゴリズムをちょっと学ぶと、シムエントリがいかに単純なサービスなのかがご理解いただけると思います。

※4
これは例としてあまりにレベルが低いのですが…。もうちょっといい例がないかな。

「アルゴリズムを知るとプログラムが豊かに書ける」に3件のコメントがあります
  1. フィードの削除ありがとうございます。

    尚全記事の件は私だけに特別の対応を取って欲しいという話ではなく、ネットのトラフィックの観点からしても全記事をいつまでも必要とするのは多少改善の余地があるのではと思った次第です。

  2. plakiaさん>
    ご利用ありがとうございます。
    livedoor blogのフィードにつきましては、こちらのシステムで削除しました。
    明日以降の更新で反映される予定です。
    feedの取り扱いにつきまして、個別の対応は現状は行っておりませんので、あしからずご了承くださいませ。

  3. シムエントリいつも使わせていただいております。

    ・RSSの全記事の件
    当方wordpressを使い始めまして全文フィード・全記事をRSSで出力する設定にしたのですが、そうするとRSSだけで500KBを越えました。この500KBが曲者でfeedburnerの方で500KBを超すフィードは受け付けてくれない仕様のようです。つまるところシムエントリかfeedburnerかどちらか一方しか利用できない状況です。

    そこで今はシムエントリ用の全記事出力を一時止めているのですが、一度でも全記事RSSをシムエントリのシステムが読み込んだら全てキャッシュして貰えないでしょうか。一応確認ですがキャッシュしてませんよね?全記事を止めて最新10件にしたらそれ以外の過去のエントリに類似記事が配信されなくなるのを確認しました。

    あとついでで申し訳ありませんが「登録の確認・削除」から削除しようにも登録されてないとでて削除できません。旧ブログなので削除をお願い致します。ttp://blog.livedoor.jp/plakia/

コメントは受け付けていません。