最近では、データ構造とアルゴリズムに多額の投資をして、プログラミングのパズルを解こうとしています。
JavaとClojureを使用してコーディングと解決を試みています。
時間を無駄にしていますか?より深い知識(インとアウト)を獲得し、より迅速にそれらを使ってコーディングできるようにするために、既に知っているテクノロジーとフレームワークにもっと投資すべきですか?
データ構造とアルゴリズムを研究することで、私はより良いプログラマーになるのでしょうか、それとも大学時代にのみ重要な科目になりますか?
最近では、データ構造とアルゴリズムに多額の投資をして、プログラミングのパズルを解こうとしています。
JavaとClojureを使用してコーディングと解決を試みています。
時間を無駄にしていますか?より深い知識(インとアウト)を獲得し、より迅速にそれらを使ってコーディングできるようにするために、既に知っているテクノロジーとフレームワークにもっと投資すべきですか?
データ構造とアルゴリズムを研究することで、私はより良いプログラマーになるのでしょうか、それとも大学時代にのみ重要な科目になりますか?
回答:
アルゴリズムとデータ構造に関する最小限の知識だけで、あなたのキャリアのほとんど/すべてを重要で有用な仕事に費やすことは完全に可能です。
アルゴリズムとデータ構造の最小レベルの知識は、成功するためにあなたがする必要があります:
* maximum *はありません。必要に応じて、研究を博士課程レベル以上に進めることができます。有用性は、あなたが興味を持っている仕事の種類と、最も興味深くやりがいのある仕事の種類に直接関係しています。
ただし、大まかな(絶対ではない)ガイドラインとして、作業中の言語、フレームワーク、およびアプリケーションの低レベル化、リソース集約化、および自動化の削減により、必要なスキルレベルは高くなりますアルゴリズム、およびデータ構造。たとえば、アセンブリにUkkonenのアルゴリズムを実装すると、必ずしもそうとは限りませんが、関係するアルゴリズムとデータ構造をマスターレベルで理解する必要があります。
Java開発のバックグラウンドからiOの作業に至る特定の状況では、他のすべての条件が同じであれば、アルゴリズムとデータ構造の一般的な理解に対する要求が少し高くなることが予想されます。使用可能なリソースが少ないデバイスで効率的に実行できるようにする必要があります。また、武器庫にいくつかの新しいカテゴリを追加することを期待してください-最も顕著なのは、メモリ管理についてもっと知りたいと思うでしょう。
いや 始めたばかりの場合は、UIプログラミングなどの大局的なことをしようとすると、あなたを妨げます。最終的には、そこに行き、より大きなフレームワークを学ぶ必要があります...他の人が書いたデータ構造とアルゴリズムの使用方法。開始したばかりの場合は、スコープの制限の問題に固執するのが良いでしょう。
アルゴリズムとデータ構造は基本的にすべての基盤です。ただし、初心者の段階を過ぎたら、おそらく独自のコードを作成することはないでしょう。それらを知っているか、少なくとも知っていれば、最終的にはより良い開発者になります。それぞれがどのように機能するかを知っているので、それぞれをいつ、なぜ使用するかがわかります。さらに、アルゴリズムとデータ構造を汎用化して、あらゆるタイプまたはインターフェースXのタイプで動作できるようにすることは、これからのキャリアで使用するものです。
Qtのようなものに飛びついて、最終的にC ++の知識がまったくないことを示す質問をする人があまりにも多いようです(たとえば)。彼らはあまりにも多くのステップをスキップしようとしており、最終的には学習に時間がかかります。私はあなたが正しい道にいると言うでしょう。
あなたは時間を無駄にしていません。
仕事の途中で、以前に使用したことがないツールまたはフレームワークを使用する必要がある場合は、学習して使用します。
ただし、以前に使用したことのないデータ構造またはアルゴリズムを使用する必要がある場合、それが存在することさえ知らない可能性があり、さらに多くを要する恐ろしく準最適な手法を使用して問題を解決します努力とスケールがものすごく。
私が言うことをしようとしているが、これはあなただけで行うことによって学習しないことをものの一種である、である、あなたはでそれを学ぶ必要がある学習あなたがしているとして、学術的な状況で、または努力の個人投資を通じてのいずれか、今やっている。
それがあなたを幸せにするものなら、あなたは間違いなくそれに固執するべきです。十分な理論を適用していないことが心配な場合は、理論に重点を置いたプロジェクトを検討してください。Potionのような小さなプログラミング言語をゼロから構築します。完全な実装では、ハッシュテーブル、グラフ、ツリー、および膨大なアルゴリズムを使用します。興味深いと思われる場合は、最適化、ネイティブコードの生成、またはユーザーの拡張性をさらに深く掘り下げることができます。
実用的で少し退屈なプロジェクトに取り組むときではなく、興味を持って集中することで、より良いプログラマーになります。
うさぎの穴を下りて、ドロシー!
OpenGLを使用してC / C ++をハッキングするのに多くの時間を費やしました。私は言語とAPIを十分に知っています...そしてその経験から、私は合理的な開発者およびプログラマーになりました。とはいえ、遭遇したさまざまな問題を解決するために必要な実際のアルゴリズムの知識は、私が本当に本当に理解できただけです。
個人的な経験から言えば、構築しようとしているものに関係する問題領域の背後にある理論を知らなければ、アプリケーションの構築に集中することは時間の無駄になります。
さまざまな種類のソフトウェアの場合、これらのドメインは、独自の特定のニッチベースの理論(たとえば、コンピューターグラフィックスの線形代数、暗号の数/情報理論など)に加えて、アルゴリズムの学習から学んだ基礎から生じます。
あなたは必ずしもすべての背後にある計算の賢者になる必要はありませんが、この投稿の時点で行っていたことを行うことは、プログラミングの旅で少なくとも一度はダウンするために非常に必要なパスです-独学ではありません。