アルゴリズムとデータ構造を徹底的に勉強すべき3つの理由
真に開発ができるエンジニアとして一生を生きていくには、アルゴリズムとデータ構造に関する深い知識は必要不可欠である。僕が考える、3つの理由についてまとめてみた。
1. どのようなレイヤーのシステムを開発にするにしても必要である
アルゴリズムとデータ構造に関する書籍を勉強すると必ず出てくる、スタックやキューについての知識は、どのようなシステムを開発するにしても重要なものであるし、これらを知らずに開発をしている人はいないだろう。
ソートに関する知識も同様で、さまざまなソートアルゴリズムを勉強しオーダーに関する知識を十分に持っているエンジニアが書いたSQLと、そうでないエンジニアが書いたSQLは全く異なるものだろう。後者のSQLが、後々にどのような問題を生み出すかは、ある程度経験のあるエンジニアなら想像がつくだろう。
2. 陳腐化しない
アルゴリズムは普遍的なものであり、陳腐化することはない。一方、プログラミング言語やフレームワークは流行り廃りが少なからずある。
特に、プログラミング言語はともかくとしてフレームワークはライフサイクルが短い。今から新規開発をする人でStrutsやsmartyを利用する人はおそらくいないだろう。
僕としては、流行の新しいプログラミング言語やフレームワークの勉強に時間を費やすくらいであれば、アルゴリズムとデータ構造の勉強を徹底的に行うことをおすすめする。また、特定のプログラミング言語について言語仕様や言語処理系も含めて徹底的に解析し勉強することも重要だろう。
常に、新しい言語やフレームワークを追い回し、表面的な知識だけをつけて開発をし続けていくと、いつか若い人たちの学習速度には勝てなくなり、開発することができなくなってしまうだろう。 プログラマ35歳定年説に抗いたいのであれば、普遍的な知識を身につけるべきだ。
3. アルゴリズムとデータ構造の知識が十分であれば実装は容易である
アルゴリズムとデータ構造の勉強をきっちりとしていれば、実は業務アプリケーションをはじめとしたシステム開発は簡単であることが多い。それにもかかわらず多くの開発プロジェクトが失敗しているのは、上流工程である要件定義などがうまくいってないからである。
レガシーな開発スタイルでは、詳細設計以降を下流工程の担当者に投げているつもりが、そもそも要件定義ができておらず、プログラマが要件定義と設計をしながら実装をすることが多い。そういったときに、要件の検討にパワーを回せるように、技術的な知識は十分につけておくことが重要である。
本質的な問題はそこではないと思うだろうが、古くから続く開発スタイルを直すのは難しいし、できるエンジニアはプログラミングをしながら設計をしている。どうせならできるエンジニアを目指そう。
逆に、技術的な知識が十分ではなく、不十分な要件定義書を下流工程の担当者に投げるようなエンジニアには絶対になってはいけない。今後もそのようなエンジニアの需要があるかどうかはわからない。
おわりに
今回は3つの理由としたが、業界や年齢によってさまざまな理由が考えられると思う。しかし、アルゴリズムとデータ構造が重要な知識であることは間違いないので、エンジニアとして生きていくには徹底的に勉強することを強くおすすめする。