データ構造とアルゴリズムに投資し続けるべきですか?[閉まっている]


28

最近では、データ構造とアルゴリズムに多額の投資をして、プログラミングのパズルを解こうとしています。
JavaとClojureを使用してコーディングと解決を試みています。

時間を無駄にしていますか?より深い知識(インとアウト)を獲得し、より迅速にそれらを使ってコーディングできるようにするために、既に知っているテクノロジーとフレームワークにもっと投資すべきですか?

データ構造とアルゴリズムを研究することで、私はより良いプログラマーになるのでしょうか、それとも大学時代にのみ重要な科目になりますか?


5
どのデータ構造とアルゴリズムを使用していますか?どのプログラミングパズルを使用していますか?
-oosterwal

私は、ハッシュテーブル、マップ、ヒープ、グラフ、ツリー、および付随するアルゴリズム(トラバース、ハッシュ、検索、挿入、削除、およびいくつかの並べ替えアルゴリズム)に取り組んでいます。パズルはTopCoderとGoogle Code Jamのコンテストのものです。
カイロン

回答:


24

アルゴリズムとデータ構造に関する最小限の知識だけで、あなたのキャリアのほとんど/すべてを重要で有用な仕事に費やすことは完全に可能です。

アルゴリズムとデータ構造の最小レベルの知識は、成功するためにあなたがする必要があります:

  • それらのほとんどに注意してください(新しいものが出てくるときに時々読むことを含む)
  • 優れた、テスト済みの、機能する実装を見つける場所を知る
  • アルゴリズムとその有用性を比較できる
  • オープンソースの例から特定の環境に、わずかな調整で正しくコピーできるようにする

* maximum *はありません。必要に応じて、研究を博士課程レベル以上に進めることができます。有用性は、あなたが興味を持っている仕事の種類と、最も興味深くやりがいのある仕事の種類に直接関係しています。

ただし、大まかな(絶対ではない)ガイドラインとして、作業中の言語、フレームワーク、およびアプリケーションの低レベル化、リソース集約化、および自動化の削減により、必要なスキルレベルは高くなりますアルゴリズム、およびデータ構造。たとえば、アセンブリにUkkonenのアルゴリズムを実装すると、必ずしもそうとは限りませんが、関係するアルゴリズムとデータ構造をマスターレベルで理解する必要があります。

Java開発のバックグラウンドからiOの作業に至る特定の状況では、他のすべての条件が同じであれば、アルゴリズムとデータ構造の一般的な理解に対する要求が少し高くなることが予想されます。使用可能なリソースが少ないデバイスで効率的に実行できるようにする必要があります。また、武器庫にいくつかの新しいカテゴリを追加することを期待してください-最も顕著なのは、メモリ管理についてもっと知りたいと思うでしょう。


2
強く同意します。必要なアルゴリズムの大部分は既に基本ライブラリに含まれているため、アルゴリズムを直接扱う必要はほとんどありません。しかし、特定のユースケースに適したアルゴリズムまたは構造を選択するのに十分なパフォーマンス特性を理解していなければ、問題が発生します。OP、アルゴリズムで作業したい場合を除き、他のライブラリとツールとテクニックの学習に費やした時間に対して、はるか多くの投資収益率を得ることができます。
クエンティン・スターリン

1
うーん、PythonでUkkonenのアルゴリズムを書くのは非常に難しいです。アセンブリでそれを行うことを想像することさえできます。
rjzii

2
これは「アルゴリズムの比較」のポイントに該当しますが、スペースと時間の複雑さのトレードオフを知っておく必要があることを詳しく説明したかっただけです。速度のためにデスクトップで一般的に使用される多くのアルゴリズムは、大きなデータ構造を必要とするため、iOSでは実行できない場合があります。
カールビーレフェルト

3
同意しません。単純な理由は、誰かがアルゴリズムや設計やアーキテクチャの学習に時間を費やすとき、いつ、どこでそれを使用するかではありません。それは単に人を賢くし、彼は他の問題を解決しながら学習を使うかもしれません。また、物事を最適に行う感覚を促進します。例えば すべてに手作りのアルゴリズムはないかもしれませんが、多くのことを知っているので、自分で何か特別なものを持ってくるかもしれません。
オタク

14

いや 始めたばかりの場合は、UIプログラミングなどの大局的なことをしようとすると、あなたを妨げます。最終的には、そこに行き、より大きなフレームワークを学ぶ必要があります...他の人が書いたデータ構造とアルゴリズムの使用方法。開始したばかりの場合は、スコープの制限の問題に固執するのが良いでしょう。

アルゴリズムとデータ構造は基本的にすべての基盤です。ただし、初心者の段階を過ぎたら、おそらく独自のコードを作成することはないでしょう。それらを知っているか、少なくとも知っていれば、最終的にはより良い開発者になります。それぞれがどのように機能するかを知っているので、それぞれをいつ、なぜ使用するかがわかります。さらに、アルゴリズムとデータ構造を汎用化して、あらゆるタイプまたはインターフェースXのタイプで動作できるようにすることは、これからのキャリアで使用するものです。

Qtのようなものに飛びついて、最終的にC ++の知識がまったくないことを示す質問をする人があまりにも多いようです(たとえば)。彼らはあまりにも多くのステップをスキップしようとしており、最終的には学習に時間がかかります。私はあなたが正しい道にいると言うでしょう。


私は2007年からJavaプログラミングを専門的にやっています(つまり、雇用されているということです)。
-Chiron

9

あなたは時間を無駄にしていません。

仕事の途中で、以前に使用したことがないツールまたはフレームワークを使用する必要がある場合は、学習して使用します。

ただし、以前に使用したことのないデータ構造またはアルゴリズムを使用する必要がある場合、それが存在することさえ知らない可能性があり、さらに多くを要する恐ろしく準最適な手法を使用して問題を解決します努力とスケールがものすごく。

私が言うことをしようとしているが、これはあなただけで行うことによって学習しないことをものの一種である、である、あなたはでそれを学ぶ必要がある学習あなたがしているとして、学術的な状況で、または努力の個人投資を通じてのいずれか、今やっている。


6

実際には、利用可能なデータ構造とは何か、その複雑さの特性は何か、それらを適切に実装する場所、およびアルゴリズム紹介のコピーをどこに保管して後で詳細を調べるかを知っておいてください。


1

それがあなたを幸せにするものなら、あなたは間違いなくそれに固執するべきです。十分な理論を適用していないことが心配な場合は、理論に重点を置いたプロジェクトを検討してください。Potionのような小さなプログラミング言語をゼロから構築します。完全な実装では、ハッシュテーブル、グラフ、ツリー、および膨大なアルゴリズムを使用します。興味深いと思われる場合は、最適化、ネイティブコードの生成、またはユーザーの拡張性をさらに深く掘り下げることができます。

実用的で少し退屈なプロジェクトに取り組むときではなく、興味を持って集中することで、より良いプログラマーになります。

うさぎの穴を下りて、ドロシー!


1

OpenGLを使用してC / C ++をハッキングするのに多くの時間を費やしました。私は言語とAPIを十分に知っています...そしてその経験から、私は合理的な開発者およびプログラマーになりました。とはいえ、遭遇したさまざまな問題を解決するために必要な実際のアルゴリズムの知識は、私が本当に本当に理解できただけです。

個人的な経験から言えば、構築しようとしているものに関係する問題領域の背後にある理論を知らなければ、アプリケーションの構築に集中することは時間の無駄になります。

さまざまな種類のソフトウェアの場合、これらのドメインは、独自の特定のニッチベースの理論(たとえば、コンピューターグラフィックスの線形代数、暗号の数/情報理論など)に加えて、アルゴリズムの学習から学んだ基礎から生じます。

あなたは必ずしもすべての背後にある計算の賢者になる必要はありませんが、この投稿の時点で行っていたことを行うことは、プログラミングの旅で少なくとも一度はダウンするために非常に必要なパスです-独学ではありません。


0

それらをよく知らなければ、それらを使用する理由を見つけることができないと思います。私は常にそれらの用途を見つけているようです。しかし、ここ半年ほどのジェネリック医薬品の改善により、独自のロールを行う必要性はますます少なくなっていることを認めざるを得ません。それでも、それらをいつどのように使用するかを知っているという利点は失われず、そうでなければ複雑なコードを大幅に簡素化できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.