最近の、いわゆるパッケージソフトウェアや、Webアプリケーションの開発においては、
必要なコンポーネントをインポートして部品を組み立てていくイメージで
コードを書いていくというのが主流だと思います。
ほとんどのプログラミング言語には、すでに便利な関数やパッケージが用意されており、「アルゴリズム」や「データ構造」といった知識はあまり必要になりません。
例えば、データをソートしたい場合、クイックソートなどで自分で実装しなくても、すでにソート関数が用意されているので、その関数を使用すれば良いわけです。
そのような環境においても、プログラマにとって「アルゴリズム」や「データ構造」の知識はやはり必須ですか?
時々、
・「優先順位付き待ち行列」くらいは、スラスラ実装できなければ、プログラマとしては半人前
・「離散数学」をしっかり理解していないと、プログラマとしては致命的
などという話も聞くのですが、皆さんの意見を聞かせてください。
No.5ベストアンサー
- 回答日時:
「作る」能力は必要はないかもしれませんが,「使う」ためにはアルゴリズムやデータ構造の存在を知っていて,理解している必要があると思います。
アクセスメソッドを例に取ると,B-treeを使った方がいい場合もあれば,ハッシュを使った方がいい場合もあります。データ集合の性質によっては,インデックス経由よりもフルスキャンした方が効率がいい場合もあります。それぞれのアルゴリズムがどういう原理で動作していて,従ってどういう特性を持っているかを理解していないと,実際に自分が使う段になって,そのアルゴリズムに適したケースなのかそれとも不適当なのか判断できないのではないでしょうか?
データ構造でも同じことで,あるアプリケーションのデータ構造として,ヒープがいいのか,配列がいいのか,リンクトリストがいいのかは,それぞれの構造の成り立ちと特性を理解していないと判断できないのではないかと思います。
ただ,場合によっては,理解しているだけではなく作れることが求められるかもしれません。例えば,使っているデータのフォーマットと,既成の部品が扱えるデータのフォーマットが微妙に違っていることもあります。こうしたケースでは,これらのアルゴリズムやデータ構造を自分で作ることが要求されるでしょう。
いずれにせよ,アルゴリズムやデータ構造の「理解」は,ベースラインとして持っておいたほうがいいように思います。
No.4
- 回答日時:
主な「アルゴリズム」「データ構造」の知識に関しては
全てを丸暗記しておく必要はありませんが、どういった
ものが有るか概要だけでも覚えておくと、それらが必要
になった時に既にあるものを新規に自作する手間が省け
ます。
「アルゴリズム」の勉強というと○○ソートとか△△法と
いった物を丸暗記する事だと思いがちですが、本当に必要
な事はどのようにして処理手順を最適化・効率化するかと
いう考え方自体です。
ちゃんとアルゴリズムを整理して作れば数十ステップ程度
でできるものを、思い付くままに作っていくだけでは数百
ステップ以上になったり、数行だけ異なる処理を複数作成
して結局は無駄な所ばかり多いが数千ステップ以上の大作
プログラムにしたりしてしまいます。
この様な大作プログラムは作るのも大変ですが、それ以上
にデバッグ・メンテナンスも困難となり深夜残業・徹夜の
連続を招く原因となります。
深夜残業・徹夜の連続が好きなのであれば、思い付くまま
未完(?)の超大作プログラムを作って下さい。
#プログラムのみでなく、仕事の手順もきちんと整理した
#物にすれば短時間に効果的な作業が可能になります。
No.2
- 回答日時:
確かに、ソートなどのアルゴリズムは、ライブラリ中に実装されていますから、「新たに実装する必要」はないでしょう。
でも、バブルソートとクイックソートの違い(計算量の違いがなぜ発生するのか)を理解して、必要に応じてどちらも実装できるだけのスキルを持っているエンジニアと理解していないエンジニア、複雑な業務用件を効率よく処理するプログラムをかけるのはどちらでしょうか。
いろんなアルゴリズムを習得していると、複雑な要件のプログラムを設計しているときに、部分的に既知のアルゴリズムを応用できることに気づいたりすると思います。その点では、経験だけで作成しているプログラマは、もっと効率のよい方法があることに気づかずに実装していたりするのでしょう。
No.1
- 回答日時:
現場によっても違うかもしれません。
また、「プログラマ」の定義によっても違うかもしれませんね。コーダーとして考えた場合、実際の現場では内部設計段階でアルゴリズムは網羅されている事も多いですから、プログラマには仕様書通りに、正当にかつ妥当に実装する事を望むだけです。平易なアルゴリズムを用いてこそ、後々のメンテ性を考えれば良いのでは?
内部設計までするとするなら...業務によるかもしれませんが、帳票を出力したり画面設計をするぐらいの普通の業務ならトリッキーな処理はこのまれませんねえ。制御系やミドルウェアなどでしたらあるかも知れませんけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- IT・エンジニアリング 不具合の現状認識をしないプログラマって信用できる人? できない人? 8 2023/07/28 09:09
- その他(プログラミング・Web制作) 論理的思考の身につけ方 プログラマ2年目です。 私は(基礎があった上で)感覚的にコードを書いています 5 2022/06/16 20:45
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- 大学受験 専門学校の志望理由書について自信が全く無くて…添削してください。 「 私は将来、IT企業の第一線で活 3 2022/10/11 01:12
- Access(アクセス) スキルシートのエクセルの項目に 2 2023/04/04 22:41
- 数学 特定の座標点を通る回帰を行う方法について。 2 2022/10/10 10:27
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- 分譲マンション オートロック内に宅配ボックス 3 2023/05/16 10:17
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- 計算機科学 アルゴリズムの問題を解く上で紙に書いて考えるのはナシですか? 紙に書いて構造をある程度組み立てた上で 3 2023/03/11 16:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
wed業界に詳しい方教えてくださ...
-
医療、バイオ系のPG
-
初心者がアプリ開発を勉強する...
-
VBはどのくらいで習得するもの...
-
Pythonを無料(安価)で学ぶ方...
-
vba クリップボードクリアにつ...
-
PythonやJavaScriptのように実...
-
VBA(えくせる)ってなんでメン...
-
DirectX SDKのダウンロード
-
授業でプログラミングのJavaの...
-
サイドワインダーのドライバ
-
gitでバージョン指定してダウン...
-
struts2環境構築で不具合が出て...
-
Pythonを勉強する道のり
-
ホームページNinjaネットショッ...
-
Windows7でVB2005の開発
-
Javaでのエラーについて
-
オブジェクト指向について
-
スプライン補間関数が実装され...
-
XMLとUMLの相違点?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラマーの適正検査落ちま...
-
Python Java,Springフレームワ...
-
今年28歳女性 プログラマー未...
-
VBはどのくらいで習得するもの...
-
wed業界に詳しい方教えてくださ...
-
Javaを仕事で使うには、J...
-
プログラマにとって「アルゴリ...
-
java上級者になるには
-
大学の情報学部でスキルは身に...
-
PHPの実務レベルはどのぐらいで...
-
Pythonを無料(安価)で学ぶ方...
-
3層構造アーキテクチャ
-
!!!「コボル」!!!教えて...
-
ソフトウェア系への転職 (初心者)
-
webデザイナーとwebプログラマ...
-
今年30歳、業務未経験がプロ...
-
VBAからのVB.NETかC#
-
TCP/IPの基礎知識というのはど...
-
文系の大学生です。SEに内定し...
-
JAVAプログラマとして入社した...
おすすめ情報