プログラマの(技術面での)スキルを評価する
プログラマのスキルはどのようにして評価すれば良いだろうか。その前にプログラムとはなんなのか。ぼくが随分と前に目にした本にはこのように書かれていた。
データ構造 + アルゴリズム = プログラム
おそらく間違いではないと思う。仮にこの定義が合っているとしたら、プログラマはプログラムを作る人なので、スキルの評価はデータ構造とアルゴリズムで評価するべきだろう。
アルゴリズムの世界ではドナルド・クヌース先生のようにその道の神と崇められる人もいる。データ構造はどうだろうか。
…。ちょっと思いつかない、これっといった人がいるわけではなく、有名な人が多すぎるのだろうか。
要するにプログラマのスキルとは、「データ構造を構築する力」と、「アルゴリズムを実装する力」の両面で考えるべきだと思う。2つのトータルバランスによって、評価は決まるのだ。
世間的にはなんとなく、アルゴリズムを重視するような兆候があったような気がする。コンピュータのハード面が未発達のころは、ソフトで工夫を凝らしてハードのノロさをカバーする必要があったからであろうか。
どれだけ高速にプログラミングできるか。書籍を漁ってもデータ構造に関する書籍よりもアルゴリズムに関する書籍の方が目に付いた(ひょっとしたらぼくの錯覚なのかもしれないけれど)。
さいきんはそのような流れから、アルゴリズム軽視の方向へシフトした(ように感じる)。ハード面が充実してきた結果である。
オブジェクト指向プログラミングが台頭し、機会が実行しやすい環境に合わせるのではなく、人間に理解し易いプログラムが求められるようになってきたのだ。