私は、こう見えても(皆さんから私がどう見えているのかはわかりませんが)情報工学系の学部出身の理系です。なので私も大学時代には、標題にある「アルゴリズムとデータ構造」(いや、逆だったかもしれません「データ構造とアルゴリズム」だったかな)というようなテーマの講義も聴講していました。
もうだいぶ前の話ですし、そもそも私は大学時代は落ちこぼれの部類(学部内でビリを争うようなレベル)でしたので、今となってはおぼろげにしか覚えていないのですが、たしか「ソートアルゴリズム」とか「リスト構造」「木構造」とかを習ったような気がします。
それから、時は流れ、かつて情報工学部で落ちこぼれだった私が、人様にJavaのプログラミングを教えるようになってしまいました。それも、春~夏にかけては、生まれて初めてプログラミングをするような人達に対して教えたりしているのです。
で、標題の話とそれが何の関係があるかといえば、数年前からボンヤリとは感じていたのですが、自分が関わっている新人研修案件には「アルゴリズム」と「データ構造」のカリキュラムが不足しているか、すっぽり抜け落ちているものが多いような気がするのです。
2ヶ月とか3ヶ月とかのカリキュラムで研修するんだから、当然そういうことだってガッチリ指導しているんじゃないか、と思われるかもしれません。ところがエンジニアの新人研修の場合、どうしても言語そのものの習得に重点が置かれてしまうことが多く、また日程的にも思いの外余裕がないこともあって、基本文法やAPIの使い方はわかっていても、ちょっとしたアルゴリズムやデータ構造の考え方までは伝えきれていない、ということが多いのかな、と思っています。
何もアルゴリズム、データ構造といっても、そんなに難しいものを指しているわけではないのです。プログラミングをしていくと必ずお目にかかるような、基本的なもの、たとえばフラグを使って判定するとか、ArrayListとHashMapと配列の使い分けはどうするのかとか、そういったレベルでも、新入社員にとっては未知のものだったりするのです。
今後は、そういった状況に若干の自戒の意味も込めて、アルゴリズムやデータ構造に関する教材も自社で拡充していきたいと考えております。
こんにちは。
こちらにもおじゃまします。
今回Javaを教えていただいて痛感したのは、機能ロジック自体もカプセル化されてて、いわゆるC言語とかのプログラミングとはまったく違うプログラミングだなぁと。
一生懸命、自前で線形リストを構造体の組み合わせで作っていた人間にとっては、ArrayListとHashMapとか、反則に近いラクチンさですよ(笑)。
といいながら、
>ArrayListとHashMapと配列の使い分け
といわれると自分はアヤシイかも。
なんか適当にArrayListでいいや的な選択をしてます。
ぜひ「データ構造」と「アルゴリズム」の講座も開催くださいませ。
masaさん>
コメントありがとうございます。
>一生懸命、自前で線形リストを構造体の組み合わせで作っていた人間にとっては、ArrayListとHashMapとか、反則に近いラクチンさですよ(笑)。
そうですよね。
でも使うのは楽な分、利用者にとっては中はブラックボックスなので、たとえばHashMapはなんで「ハッシュ」マップなんだ?ってわからないままになってしまうきらいもあるんですよね。
配列系の使い分けは、「可変長か固定長か」「連想配列が必要かそうでないか」といったあたりになるのかなと思います。
講座の開設は密かに検討してますので、是非気長にお待ちいただけたら幸いです。