84-正しいアルゴリズムとデータ構造を選ぶ

プログラマが知るべき97のこと」の84個目のエピソードは、アルゴリズムとデータ構造に関する話です。アルゴリズムとデータ構造といえば、プログラミングを学ぶ中で基礎中の基礎であったと言えます。ですが、プログラミング言語が高度に進化し、プログラマに求められるスキルも変わってきた現在では、基礎スキルであるアルゴリズムやデータ構造に関する知識が常識とは言えなくなりました。かくいう自分もアルゴリズムやデータ構造について、基礎的な部分は知っているものの、実務で複雑なアルゴリズムや応用的なデータ構造を必要とするプログラムを書いた経験はほとんどありません。どちらかといえば、ユーザの要件をどのようにシステム化するかという話題や効率よくシステムを構築するパターンなどについて学ぶ事が多いと言えます。
しかし、全くアルゴリズムやデータ構造について解らない人と仕事をする機会があると、いつも基礎スキルは重要だなと考えさせられます。業務ロジックを書いているとしても、細かい部分で基礎的なアルゴリズムやデータ構造を意識する場面は確かにあります。例えば2重ループはよく見かけますが、少しだけ工夫をすれば多重ループにする必要がない事があります。ループのネストが1段小さくなると言うことは、大きくパフォーマンスに影響を与えると言えます。近代のプログラミング言語であれば配列をソートするAPIは提供されていると思います。しかし、ソートはどのように実装されているか、そのアルゴリズムを知っている事は、APIを使いこなす中で役に立ちます。決して高度な知識は必要はありませんが、基礎的な部分について知っているならば、それを利用したAPIを有効に使うことができるでしょう。
車輪の再発明」はプログラマであれば1回は聞いたことのあると思います。目的を達成できるライブラリやフレームワークが既にあるのであれば、わざわざ自分で作り直すことはないという事です。しかし、車輪を再発明することは非常に良い経験になります。自然とローレベルな処理・アルゴリズム・データ構造などを意識する必要なるため、既存のライブラリがどのように作られているのか?どうしてそれを再発明しない方がいいのか?トラブルが起きたときに切り分ける事ができるか?といった既存のライブラリ等をただ利用するだけではなく、活用できるようになります。特に最近になってプログラマを目指し始めた人は、改めて基礎的なアルゴリズムやデータ構造を学んでみましょう。

プログラマが知るべき97のこと

プログラマが知るべき97のこと