web-dev-qa-db-ja.com

データ構造とアルゴリズムに投資し続ける必要がありますか?

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

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

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

28
Chiron

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

アルゴリズムとデータ構造のminimumレベルの知識は、成功するために次のことを要求します。

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

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

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

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

24
blueberryfields

いや。始めたばかりの場合は、UIプログラミングなどの全体像を把握しようとすると、気が遠くなるだけです。結局、あなたはそこに行き、より大きなフレームワークを学ぶ必要があります...他の人々が書いたデータ構造とアルゴリズムの使い方。始めたばかりの場合は、スコープの問題に限定するのがよいでしょう。

アルゴリズムとデータ構造は基本的にすべての基礎です。たとえ初心者の段階を過ぎたら、自分で独自のものを書くことはおそらくないでしょう。それらを知っているか、少なくとも知っていることは、最終的にはより良い開発者になるでしょう。それらがどのように機能するかがわかるので、それぞれをいつどのように使用するかがわかります。さらに、アルゴリズムとデータ構造をジェネリックにして、インターフェイスXの任意のタイプまたはタイプで動作できるようにするISキャリアの残りの部分で使用するもの。

Qtなど、C++の知識がまったくないことを示す質問をしてしまう人が多すぎます(たとえば)。彼らはあまりに多くのステップをスキップしようとしています、そして結局それは彼らが学ぶのにより長くかかります。私はあなたが正しい道にいると思います。

14
Edward Strange

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

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

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

私が言おうとしているのは、これは、単に学習するだけではない種類のことです。学術的な状況で、または個人的な投資を通じてlearningで学習する必要があります。あなたが今やっているように、努力の。

9
Carson63000

実際には、利用可能なデータ構造とは何か、それらの複雑さの特徴は何か、それらの適切な実装をどこで得るか、そしてIntroduction to Algorithmsのコピーをどこに保存して、後で詳細を調べるかに注意してください。

6
smithco

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

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

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

あなたは必ずしもすべての背後で計算の専門家になる必要はありませんが、この投稿の時にあなたがしていたことをすることは、プログラミングの旅で少なくとも一度は下るのに非常に必要な道です-かどうかに関係なく独学ではありません。

1
about blank

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

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

ウサギの穴を下って、ドロシー!

1
Scant Roger

もしあなたがそれらをよく知らなければ、それらを使う理由を見つけることはできないでしょう。私はいつもそれらの用途を見つけているようです。しかし、過去5年間でジェネリック医薬品が改善されたことで、独自の製品を導入する必要性がますます少なくなっていることを認めざるを得ません。それでも、それらをいつどのように使用するかを知ることのメリットが失われることはなく、複雑なコードを大幅に簡略化できます。

0
Dunk