アルゴリズムとかデータ構造とか
2009.05.25
「ITエンジニアとしての適正を見抜く言葉」の記事の中に次のようなきじゅつがあります。
プログラミングの学習経験がある学生なら、自分の得意なプログラミング言語を使って、手書きでプログラムを書いてもらいます。テーマは「配列a[0]〜a[99]に格納された値を昇順にバブルソートする」「整数nの階乗を求める」くらいのシンプルなものがよいでしょう。
最近、面接の時や、3年目ぐらいのプログラマの人と話をするときに、バブルソートのコードを書いてみて、と頼んだことがあります。そのときの反応で、「バブルソートって聞いたことがありますが、わかりません」や「バブルソートって何ですか?」と反応されることがあります。まあ、クイックソートを書けとかは、無理かもしれませんが、バブルソートぐらいはと思ってしまいました。
その話を会社でしたら、「配列をソートするプログラムを書け 」だったら結果的にバブルソートのコードができるんじゃない?と言われました。確かにそうかもしれません。ただ、アルゴリズムをちゃんと学ばないでjava.util.Listのsortを使っているとしたら悲しいです。
また、「リンクリストのコードを書いてみて」とお願いしたときがあります。そのときも「リンクリストって何ですか?」と聞かれたことがあります。「ArrayListを自分で実装してみて」と言えばよかったのかも知れません。
会社でこの話をしたら、「ArrayListとLinkedListの違いがわからなければデータ構造を考えられないじゃん」と言われました。でも、社内のコードのほとんどはArrayListだし、今のCPUスピードだとLinkedListじゃなきゃいけないものってほとんどないと反論するとQueueを使う場合はそうかもしれないけど、そのぐらいかも、と。
僕がCを初めて最初にやったのがこの辺りのことでした。この辺からやらないとどうしようもなかったからなのか、このぐらいの基本的なことは押さえておくべきだったからなのか、 今となってはわかりません。APIの使い方を学ぶのも大事ですが、それだけに走ってはもったいないです。
投稿者 : 大谷 弘喜 | 投稿日時 : 2009.05.25 19:58
あすなろBLOGのトラックバック・コメントは承認制になっています。
すぐにブログに反映されませんので、ご了承ください。






名前:anaka2009年05月25日 20:58
CPUが速くなった分、DRAMは相対的に遅くなっているので、メモリコピーが発生するようなデータ構造やアルゴリズムは最小限に抑えるのがいいと思うのですよ。