今、コンピュータ サイエンスのコースを 1 つ受講する機会があり、その結果、ある分野の知識が大幅に増えるとしたら、何にしますか? 学部または大学院レベル。
コンパイラ?分散アルゴリズム? 並行理論?高度なオペレーティング システム?
理由を教えてください。
(これは大げさなシナリオではないことを理解していますが、時間と慣性により、人々がコースを受講したり、本を読んだりすることを妨げている可能性があることに注意してください)
今、コンピュータ サイエンスのコースを 1 つ受講する機会があり、その結果、ある分野の知識が大幅に増えるとしたら、何にしますか? 学部または大学院レベル。
コンパイラ?分散アルゴリズム? 並行理論?高度なオペレーティング システム?
理由を教えてください。
(これは大げさなシナリオではないことを理解していますが、時間と慣性により、人々がコースを受講したり、本を読んだりすることを妨げている可能性があることに注意してください)
コンパイラ。
外国語を学ぶと母国語をこれまで以上に詳しく考えるようになるのと同じように、コンパイラを書くことで、普段書いているすべてのコードについて大きな洞察が得られると私は信じています。
データ構造とアルゴリズム - このコースでは、より効率的なコードを作成する方法と、複雑な問題を解決するための一般的なアプローチについて説明します。私はそれが得意ではありませんが、このタイプのコースが複雑な問題についてどのように考えるかを教えてくれる方法は、他の多くの分野で役立つと信じています.
ハードコア ( John Carmackハードコアのように) グラフィックス プログラミング コースを受講したいと思っています。ハードウェア レベルから、ラスタライゼーションとレンダリング アルゴリズム、そして 3 次元でのデータ操作とデータ ストレージ技術の仕上げまで、すべてをカバーするもの。私が大学にいたときに提供されたものはかなり平凡でした。
アルゴリズムクラス、伝承。
「世界クラスのプログラマーになりたければ、10 年間毎日プログラミングするか、2 年間毎日プログラミングしてアルゴリズムのクラスを受講することができます。」- エリック・デメイン教授 (MIT)
アルゴリズムの複雑さ、ソート、マージ、および検索アルゴリズムを学習することは非常に重要です。
引用元のビデオへのリンクは、MIT のOpenCourseware アルゴリズム クラスビデオです。
オペレーティングシステム。下位レベルで開発しているボックスがどのように開発されているかを知ることは、後で上位レベルの概念をすべて把握するのに役立ちます。特に何か問題が発生した場合に役立ちます。
ネットワーキング。(ソーシャルネットワーキングではありません....とにかく、それは楽しいクラスかもしれませんが。)
独学では難しいとわかっている内容をカバーするコースを受講します。たとえば、私は量子コンピューティングに完全に魅了されており、専門的には役に立たないかもしれませんが、それについてもっと知りたいと思っています.
計算幾何学。本から拾ったものでうまくいきますが、機会があれば本当に深く理解できたらいいなと思います。
計算理論に誰も行かないことに驚いています。それは私が大学で学んだ最もオタクな科目です。確かにここの誰かが私と同じ食欲を共有しています。:-)
CS-> 1.計算理論、2。計算モデリング、3。プログラミング言語
それは私に全体的な問題解決についてのはるかに抽象的な視点を与えてくれます。私の経験から、抽象的であるほど、問題に対してより良い解決策を考案できることがわかります。:-)
モデリングは非常に強力であるため、ほとんどの問題解決は依存しています。これにより、通常は低レベルの方法で問題を解決します。通常、これは最善の解決策ではありません。
これは、コンピューターとプログラマーのインターフェースです。そして、私はすべての人にとってプログラミングをより簡単にすることに興味があります。したがって、インターフェースを改善できれば、すべてのメリットが得られます。
並列プログラミング。関数型プログラミングである必要はないと思います。関数型ではない言語でトピックを関数型プログラミングすることに同じように興味があります。
「ソフトウェアのライセンスと関連する著作権法」は来年ヒットする
遺伝子プログラミング?
CPUはすぐにはそれほど速くは進まないので、並列/分散プログラミング。マルチコアとインターネットはしばらくの間存在するでしょう。私には事前の知識がないので、学部課程。
オペレーティングシステム。オペレーティング システムの知識を持っている人は、ソフトウェア システムのコンポーネントやサービスをつなぎ合わせたり、パフォーマンスを計画したり、パフォーマンスのボトルネックを診断/解決したりする際に、大きなアドバンテージを得ることができます。
最初の 2 つ (OS とコンパイラ) は既に使用されています。私の次の選択は、データベース設計に関する優れたコースです。データベースは、あらゆる Web プロジェクトの大きな部分を占めています。それらが内部でどのように機能するかを理解すると、後でそれらを使用するのがずっと簡単になります。
セキュリティまたは暗号化
エクストリームプログラミング。プログラミングコンテストの問題。たくさんコーディングする。すばやくコーディングする。効率的にコーディングする。バージョン管理の使用が含まれています:)
おすすめできるコースです(遠隔学習コースです)。
ロジック、再帰、バイナリ ツリー/BST、真理値表、効率、関数の正式な定義について学びます。学校レベル以上の数学のバックグラウンドは必要ありません。ビット操作、バイナリでのカウントなどに関する基本的なトピックは、1 年目のモジュールでカバーされています。
多くの大学が使用していると聞いたが、あなたは haskell を使用していない - それは Java で解釈される関数型言語だ。
コンピュータアーキテクチャ。最終的にソフトウェアが実際にどのように動作するかをよりよく理解するため。
統計学。ログを見て、エラーを数え、成功を数え、将来の失敗の確率を与えることができることは、「これを今すぐ修正する必要があるのか、それともしばらく待つことができるのか」を判断するのに役立ちます。
コンピュータ グラフィックスおよび/または画像処理。アルゴリズムの並列化について考えるのにこれ以上の方法はありません。
コンパイラとオペレーティング システム
大学で取りたいと思ったとき、ニューラルネットワークがいっぱいだったので、まだがっかりしています
最新の言語を使用して、アルゴリズムだけでなく言語も教える現代のアルゴリズムクラス!