Web/DB プログラミング徹底解説

ホーム > ソフトウェア開発に関する考察 > コンピュータ・サイエンスの基礎を学び、意識して現場で適用しよう

コンピュータ・サイエンスの基礎を学び、意識して現場で適用しよう

とかく学校で学ぶ知識は、開発の現場で軽視されがちです。 確かに業務システムを作る現場は業務知識、それによる要件に合わせてコードするのに 精一杯で、効率及び質の良いプログラムを作るところまで気が回らないことが多いでしょう。 パフォーマンスが主な目的となる開発作業はあまりないのも確かです。 しかし、技術者としてもっと上を目指す人はコンピュータ・サイエンスの基礎知識を学ぶべきです。 なぜなら、より簡単に難しいことを実装できるようになるからです。 あるいは、同様の手間ならより良いほうの手法を自然と採用できるようになるからです。

例えば、コード内で一時的に人の名前とそのデータを管理したい場合、 リスト構造しか知らなければ、次のように書くかもしれません。

-- C# --
public struct PersonInfo {
    public string Name;
    public int Age;
}

...

List<PersonInfo> list = new List<PersonInfo>();
...
// 情報の格納
...
// 情報の取り出し
foreach( PersonInfo info in list ) {
    if ( info.Name == "Suzuki" ) {
        ...
    } 
}

リストでは前方からひとつひとつデータを見ていく他ありません。 (もちろんインデックス管理用の何かを実装すれば別でしょうが) データが増えるにつれ、ループ回数が増え効率が落ちることになります。 しかし、ハッシュテーブルの知識があれば、次のようにかけるかもしれません。

Dictionary<string, PersonInfo> person_info = new Dictionary<string, PersionInfo>();
...
// 情報の格納
...
// 情報の取り出し
PersonInfo pi = person_info["Suzuki"];

このコードはデータ数に関わらず安定した速度でデータを取り出すことが出来ます。

難しいことを簡単に、という例を挙げると例えば、過去10件分の履歴管理をするような状況では、 リング・バッファの知識があればより簡単に実装できるでしょう。

こうした配慮の一つ一つが、プログラムの全体の質を変えてくるのだと思います。