最近の、いわゆるパッケージソフトウェアや、Webアプリケーションの開発においては、
必要なコンポーネントをインポートして部品を組み立てていくイメージで
コードを書いていくというのが主流だと思います。
ほとんどのプログラミング言語には、すでに便利な関数やパッケージが用意されており、「アルゴリズム」や「データ構造」といった知識はあまり必要になりません。
例えば、データをソートしたい場合、クイックソートなどで自分で実装しなくても、すでにソート関数が用意されているので、その関数を使用すれば良いわけです。
そのような環境においても、プログラマにとって「アルゴリズム」や「データ構造」の知識はやはり必須ですか?
時々、
・「優先順位付き待ち行列」くらいは、スラスラ実装できなければ、プログラマとしては半人前
・「離散数学」をしっかり理解していないと、プログラマとしては致命的
などという話も聞くのですが、皆さんの意見を聞かせてください。
No.5ベストアンサー
- 回答日時:
「作る」能力は必要はないかもしれませんが,「使う」ためにはアルゴリズムやデータ構造の存在を知っていて,理解している必要があると思います。
アクセスメソッドを例に取ると,B-treeを使った方がいい場合もあれば,ハッシュを使った方がいい場合もあります。データ集合の性質によっては,インデックス経由よりもフルスキャンした方が効率がいい場合もあります。それぞれのアルゴリズムがどういう原理で動作していて,従ってどういう特性を持っているかを理解していないと,実際に自分が使う段になって,そのアルゴリズムに適したケースなのかそれとも不適当なのか判断できないのではないでしょうか?
データ構造でも同じことで,あるアプリケーションのデータ構造として,ヒープがいいのか,配列がいいのか,リンクトリストがいいのかは,それぞれの構造の成り立ちと特性を理解していないと判断できないのではないかと思います。
ただ,場合によっては,理解しているだけではなく作れることが求められるかもしれません。例えば,使っているデータのフォーマットと,既成の部品が扱えるデータのフォーマットが微妙に違っていることもあります。こうしたケースでは,これらのアルゴリズムやデータ構造を自分で作ることが要求されるでしょう。
いずれにせよ,アルゴリズムやデータ構造の「理解」は,ベースラインとして持っておいたほうがいいように思います。
No.4
- 回答日時:
主な「アルゴリズム」「データ構造」の知識に関しては
全てを丸暗記しておく必要はありませんが、どういった
ものが有るか概要だけでも覚えておくと、それらが必要
になった時に既にあるものを新規に自作する手間が省け
ます。
「アルゴリズム」の勉強というと○○ソートとか△△法と
いった物を丸暗記する事だと思いがちですが、本当に必要
な事はどのようにして処理手順を最適化・効率化するかと
いう考え方自体です。
ちゃんとアルゴリズムを整理して作れば数十ステップ程度
でできるものを、思い付くままに作っていくだけでは数百
ステップ以上になったり、数行だけ異なる処理を複数作成
して結局は無駄な所ばかり多いが数千ステップ以上の大作
プログラムにしたりしてしまいます。
この様な大作プログラムは作るのも大変ですが、それ以上
にデバッグ・メンテナンスも困難となり深夜残業・徹夜の
連続を招く原因となります。
深夜残業・徹夜の連続が好きなのであれば、思い付くまま
未完(?)の超大作プログラムを作って下さい。
#プログラムのみでなく、仕事の手順もきちんと整理した
#物にすれば短時間に効果的な作業が可能になります。
No.2
- 回答日時:
確かに、ソートなどのアルゴリズムは、ライブラリ中に実装されていますから、「新たに実装する必要」はないでしょう。
でも、バブルソートとクイックソートの違い(計算量の違いがなぜ発生するのか)を理解して、必要に応じてどちらも実装できるだけのスキルを持っているエンジニアと理解していないエンジニア、複雑な業務用件を効率よく処理するプログラムをかけるのはどちらでしょうか。
いろんなアルゴリズムを習得していると、複雑な要件のプログラムを設計しているときに、部分的に既知のアルゴリズムを応用できることに気づいたりすると思います。その点では、経験だけで作成しているプログラマは、もっと効率のよい方法があることに気づかずに実装していたりするのでしょう。
No.1
- 回答日時:
現場によっても違うかもしれません。
また、「プログラマ」の定義によっても違うかもしれませんね。コーダーとして考えた場合、実際の現場では内部設計段階でアルゴリズムは網羅されている事も多いですから、プログラマには仕様書通りに、正当にかつ妥当に実装する事を望むだけです。平易なアルゴリズムを用いてこそ、後々のメンテ性を考えれば良いのでは?
内部設計までするとするなら...業務によるかもしれませんが、帳票を出力したり画面設計をするぐらいの普通の業務ならトリッキーな処理はこのまれませんねえ。制御系やミドルウェアなどでしたらあるかも知れませんけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラマーの適正検査落ちま...
-
【不安】VBのみ6年経験【将来】
-
vba クリップボードクリアにつ...
-
Javaでのエラーについて
-
VBAの「for i=1 to cells(…」...
-
IISワーカープロセスが原因でCP...
-
EclipseでJavaコンパイラのバー...
-
unzip32.dllの利用について(64b...
-
gitでバージョン指定してダウン...
-
javaからデータベースに接続 エ...
-
使用しているJUnitのバージョン...
-
Tmocatのバージョン
-
Eclipseソース開発画面の行番号...
-
JavaScriptでタワーディフェン...
-
JSPファイルで生じるエラーをど...
-
プラグインとパッチの違いは?
-
visual stadio 参照問題
-
エクリプスのプログラミングに...
-
Javaのプログラミングについて
-
URLDownloadToFileのコピペで64...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
wed業界に詳しい方教えてくださ...
-
VBはどのくらいで習得するもの...
-
就職についてとても悩んでいます。
-
VBAからのVB.NETかC#
-
Javaの仕事したいのにC言語を・...
-
職業訓練でiphoneかandroidのア...
-
JavaとCのどっちがいい???
-
プログラマーの適正検査落ちま...
-
文系サラリーマンが挑戦すべき...
-
言語の勉強
-
Javaのスクール
-
プログラマーとネットワーク・...
-
3層構造アーキテクチャ
-
WEBプログラマーについて
-
プログラマー・SEについて
-
学校でJAVAを習ったらサイ...
-
phpの質問です
-
java習得 について悩んでいます
-
PHP+MySQLを使ってお寺の檀家管...
-
ACCESSからJAVAに置...
おすすめ情報