この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。
プログラミングの技術要素は、データ構造に関するものととアルゴリズムに関するものに大きく分けられます。
前者は主として「設計」の段階で、後者は「実装」の段階で必要になる知識と言えるでしょう。
私の見る限り、プログラミング技術に関する教育の場においては、「アルゴリズム (実装技術)」の習得が重視される一方で、「データ構造 (設計技術)」は非常に軽い扱いとなっています。
アルゴリズム関連の知識は、学校の講義・演習のような短時間かつ散発的な講義・演習でも (ある程度は) 習得可能が可能であるのに対し、「データ構造」を選択・採用する知識 (設計技術) を得るにはプログラムの長期的な開発・運用の経験が必要になる、といったことがその理由だと考えられます。
しかしながら、職業としての「プログラミング」においては、この「データ構造」と「アルゴリズム」の重要性が逆転します。
製品となり年単位の長期的なスパンで運用されるシステムにおいては、実装はむしろ些事であり、設計に起因する保守性・拡張性が評価に直結します。
仕様変更が起こったときに、「ああ、この変更はずいぶん前から要求されそうな気がしていたんだよなぁ…」と思うことはありませんか?
やはりここでも設計の善し悪しがものをいいます。
予測される変更を考慮して、それが実際に起こったときの手間を少なくするような設計をしておけば良いのです。
でも現実には、将来への準備を怠っているケースが多いようです。
( 中略 )
どうやら、知恵を使いさえすればしなくても済むはずの苦労が、ソフトウェア開発業界には蔓延しているようです。
これを逆に考えてみると、設計の技術を使いこなしてよけいな苦労を回避できるようになれば、人の何倍も仕事がこなせるようになるということです。
ソフトウェア開発者を目指す人は、「実装」だけでなく「設計」を学んでおくと、実際の業務において大きなアドバンテージを手にすることができるかもしれません。
担当: 成田 (コードを書き始める前に10数えろ。)