好きなおでんの具材ドラフト会議しましょう

最近の、いわゆるパッケージソフトウェアや、Webアプリケーションの開発においては、
必要なコンポーネントをインポートして部品を組み立てていくイメージで
コードを書いていくというのが主流だと思います。

ほとんどのプログラミング言語には、すでに便利な関数やパッケージが用意されており、「アルゴリズム」や「データ構造」といった知識はあまり必要になりません。
例えば、データをソートしたい場合、クイックソートなどで自分で実装しなくても、すでにソート関数が用意されているので、その関数を使用すれば良いわけです。

そのような環境においても、プログラマにとって「アルゴリズム」や「データ構造」の知識はやはり必須ですか?

時々、
・「優先順位付き待ち行列」くらいは、スラスラ実装できなければ、プログラマとしては半人前
・「離散数学」をしっかり理解していないと、プログラマとしては致命的
などという話も聞くのですが、皆さんの意見を聞かせてください。

A 回答 (5件)

「作る」能力は必要はないかもしれませんが,「使う」ためにはアルゴリズムやデータ構造の存在を知っていて,理解している必要があると思います。



アクセスメソッドを例に取ると,B-treeを使った方がいい場合もあれば,ハッシュを使った方がいい場合もあります。データ集合の性質によっては,インデックス経由よりもフルスキャンした方が効率がいい場合もあります。それぞれのアルゴリズムがどういう原理で動作していて,従ってどういう特性を持っているかを理解していないと,実際に自分が使う段になって,そのアルゴリズムに適したケースなのかそれとも不適当なのか判断できないのではないでしょうか?

データ構造でも同じことで,あるアプリケーションのデータ構造として,ヒープがいいのか,配列がいいのか,リンクトリストがいいのかは,それぞれの構造の成り立ちと特性を理解していないと判断できないのではないかと思います。

ただ,場合によっては,理解しているだけではなく作れることが求められるかもしれません。例えば,使っているデータのフォーマットと,既成の部品が扱えるデータのフォーマットが微妙に違っていることもあります。こうしたケースでは,これらのアルゴリズムやデータ構造を自分で作ることが要求されるでしょう。

いずれにせよ,アルゴリズムやデータ構造の「理解」は,ベースラインとして持っておいたほうがいいように思います。
    • good
    • 0
この回答へのお礼

ご回答していただいた皆様、ありがとうございます。
今後の参考にさせて頂きます。

お礼日時:2008/01/29 13:24

主な「アルゴリズム」「データ構造」の知識に関しては


全てを丸暗記しておく必要はありませんが、どういった
ものが有るか概要だけでも覚えておくと、それらが必要
になった時に既にあるものを新規に自作する手間が省け
ます。
「アルゴリズム」の勉強というと○○ソートとか△△法と
いった物を丸暗記する事だと思いがちですが、本当に必要
な事はどのようにして処理手順を最適化・効率化するかと
いう考え方自体です。
ちゃんとアルゴリズムを整理して作れば数十ステップ程度
でできるものを、思い付くままに作っていくだけでは数百
ステップ以上になったり、数行だけ異なる処理を複数作成
して結局は無駄な所ばかり多いが数千ステップ以上の大作
プログラムにしたりしてしまいます。
この様な大作プログラムは作るのも大変ですが、それ以上
にデバッグ・メンテナンスも困難となり深夜残業・徹夜の
連続を招く原因となります。
深夜残業・徹夜の連続が好きなのであれば、思い付くまま
未完(?)の超大作プログラムを作って下さい。
#プログラムのみでなく、仕事の手順もきちんと整理した
#物にすれば短時間に効果的な作業が可能になります。
    • good
    • 0

安月給でこき使われてあっという間に使い捨てられるプログラマで良いのなら、その手の知識はなくても良いですよ。

    • good
    • 1

確かに、ソートなどのアルゴリズムは、ライブラリ中に実装されていますから、「新たに実装する必要」はないでしょう。


でも、バブルソートとクイックソートの違い(計算量の違いがなぜ発生するのか)を理解して、必要に応じてどちらも実装できるだけのスキルを持っているエンジニアと理解していないエンジニア、複雑な業務用件を効率よく処理するプログラムをかけるのはどちらでしょうか。

いろんなアルゴリズムを習得していると、複雑な要件のプログラムを設計しているときに、部分的に既知のアルゴリズムを応用できることに気づいたりすると思います。その点では、経験だけで作成しているプログラマは、もっと効率のよい方法があることに気づかずに実装していたりするのでしょう。
    • good
    • 0

現場によっても違うかもしれません。

また、「プログラマ」の定義によっても違うかもしれませんね。

コーダーとして考えた場合、実際の現場では内部設計段階でアルゴリズムは網羅されている事も多いですから、プログラマには仕様書通りに、正当にかつ妥当に実装する事を望むだけです。平易なアルゴリズムを用いてこそ、後々のメンテ性を考えれば良いのでは?

内部設計までするとするなら...業務によるかもしれませんが、帳票を出力したり画面設計をするぐらいの普通の業務ならトリッキーな処理はこのまれませんねえ。制御系やミドルウェアなどでしたらあるかも知れませんけど。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報