あなたが研究した中で最も難しいCSの主題/理論はどれですか?そしてその理由は?
「コンピューターサイエンスには2つの難しい問題があります。キャッシング、ネーミング、オフバイエラーです。」
正直なところ、コンパイラの構築!
アルゴリズムの設計と分析
その質問はあなたが持っていた先生、そしてその科目があなたのキャリアの中でどのように組織されたかに依存すると思います。
アルゴリズムの分析は、誰かが望むほど難しい場合があります。未解決の問題があることを考慮に入れてください。それだけでなく、解決できない問題もあります。
問題は、問題が発生する可能性があり、それが解決できないことがわかっている場合、それは完璧です。しかし、そうでない場合はどうなりますか? NP完全であることを実証したり、それを解決するための多項式時間解を見つけたりするために、多くの時間を費やすことができます。
NP完全性の実証は容易ではありません。はい、多くの問題が知られていますが、問題はそれがNP-Completeであることを示すために削減を見つけることです。そして、それを実証するために多くの時間/日/月を費やし、それが多項式時間で解決できる場合はどうでしょうか? :)
コンパイラ、グループ理論やプリミティブ再帰関数のような他のサブジェクトもあります。 )
パターン認識つまり、人工知能。これは、光学式文字認識、Voice to Text、顔識別など、他のパターン認識ツールとともにスマートコンピューティングを指します。
コンピュータで実行できる、または実行したい「クールな」ことの多くは、これらのアルゴリズムに依存しており、私たちは何十年もの間、それらを完璧なものにしようと試みてきましたが、大きな成功はありませんでした。
私の選択は 計算能力理論 です
(うーん...それはそれほど重要ではないかもしれませんが、確かに困難でした)
コンピュータサイエンスには、キャッシュの無効化と名前の付け方という2つの難しい問題しかありません。 - Phil Karlton
カテゴリー理論(離散数学)、しかしそれだけの価値がある
暗号化
あなたがそれをほんの少し間違って行う場合、それは会社に何百万もの費用がかかる可能性があります。
オペレーティングシステム、特にスレッド処理に関係する部分。
そして、その理由は、5人の哲学者がフォークでピザを食べるようにするのが困難だったからではありません。その理由は、マルチスレッドのコードを書くこと自体が難しく、人間(少なくとも男性-私の妻によれば)の計算が必ずしも容易ではないからです。
コースで与えられるおもちゃの問題はそれほど難しくありませんが、実際の問題を検討し始めると、それは深刻な困難に変わります。
技術的には、これは数学の分野ですが、CSとの関連性は非常に高くなります。
CSのほぼすべてがキューに基づいています(可視(自明)および不可視(それほど明白または暗黙ではありません))。
CSの初期の頃には、キューは明白でした。
プログラムのキュー(各プログラムはカードのデッキ)。
現在、キューはそれほど明白ではありません。たとえばインターネット:パケット交換ネットワークですが、パケットはキューを形成し、パケットのルーティングはキューの最小化の形式です。
私もコンパイラーデザインに投票します。特にDFAとNFAの部分が関係しているところです。私もNP問題とかについてはあまり明確ではありません。
クライアント要件の解釈クライアントが自分が何を望んでいるのか本当にわからない場合。これは大学では教えられておらず、最も重要なスキルの1つです。
この分野には厄介なトピックがたくさんありますが、まったく難しい問題を解決するために私が選んだのはGlobal System Propertiesに関するものです。この一般的なトピックの例は次のとおりです。
あなたがすべてが正しいときだけ存在する何かを求めているので、これらは難しいです。グローバルなシステムプロパティが必要ですが、実質的にすべての利用可能なツール(およびall私の経験で実際の問題に対応するもの)は、実際にはローカルな推論のみを行います。これは、プログラムの一部についての推論からシバン全体への移行プロセスです。特に、コンポーネント自体が正しく配置されていないにもかかわらず、コンポーネントが正しく配置されていないために微妙なバグが存在する可能性があるためです。バグは望ましくない緊急の特徴である可能性があります…
コンパイラ構造。難しいが背後にある概念を理解する必要がある
カーネル設計誰か?まあ、それがどのように行われ、OSの対象となる機能が何であるかは本当にわかりませんが、私にとっては、カーネルの設計を考えることは困難な作業でなければなりません。
私もコンピュータセキュリティについて考えます。もちろん、明らかなバッファオーバーフロー、XSS、SQLインジェクションを除いて、何がシステムを危険にさらしているのかは本当にわかりません。
よくわかりませんが、一部のアルゴリズムも安全ではないようです。 MetaSploitプロジェクトを見ると、すべてのタイプと種類のセキュリティ違反がリストされています。プログラムに欠陥がある可能性がある理由はたくさんあります。
個人的には、私はフォーマルロジックでした。初めは大変でしたが、ルールを理解し、それをうまく使いこなせるようになると、あなたの脳はLogic++;
、これは開発において非常に良いことです。
余談ですが、私は質問に直接回答しています。これは、学位を取得するときに間違いなく最も難しい主題ではありませんでしたが、おそらく「現実に適用できる」最も難しい主題でした。
アルゴリズムの設計と分析。 既知のアルゴリズムを理解して分析することはそれほど難しいことではありません。難しい問題のための新しいアルゴリズムの設計と分析は困難であり、多くの領域の幅広い理解と多くの異なるアプリケーションの実践を必要としますテクニック。
私はコンパイラやカーネルなど、あなたの答えが好きです(そして私はそれらに投票することを忘れていませんでした)が、ほとんどのプログラマはこれらの問題に会ったことはありません。少し簡単ですが、より一般的な問題があります:concurrency-スレッド、ロック。並行性アーキテクチャに小さなバグを作成した場合でも、魔法のエラーを生成するプログラムを書くのは非常に簡単です。
ですから、これはコンピューティングで最も難しい問題ではありませんが、一般的に使用されているので危険です。
アルゴリズムの最適化は挑戦的なトピックです。
大学で脳を傷つけるために使用されたZ表記/正式な方法。主に私がそれを嫌っていたからです。ハードは、自分がしていることを楽しむときはずっと簡単で、そうでないときはずっと難しくなります。
あなたが研究した中で最も難しいCSの主題/理論はどれですか?
離散数学。
理論は互いに非常に緩やかに関連しているため、困難でしたが、CSで使用されています。暗記が多すぎると思います...
帰納法による証明、ビッグO、再帰、分割と征服、グラフ理論、何とか何とかなんとか!
Theory of Automataを使わなければならなかったので、私にとってコンパイラは簡単でした。 ^^
制約プログラミング。組み合わせ問題、NP完全問題を扱います。
経営情報サービス大学時代には、学期ごとに1つの経営学科を持っていたので、完全に腹を立てていました。
タフ! コンパイラの設計、OSの設計などの主題は難しいですが、本当に興味深く、やりがいがあります。彼らは退屈でいっぱいであり、あなたは多くの理論を通過しなければならないので、私は本当に管理情報システム/サービスなどのような主題にめちゃくちゃになりました。
C/C++で作業している場合は、ポインタが最も重要な概念です。しかし、どういうわけか私は大学でそれを完全に理解していませんでした。
オブジェクト指向プログラミング
それはおそらくFORTRANとAPLに夢中だったからかもしれませんが、厳密に手続き型の言語からオブジェクトへの移行は、私が長年苦労してきたものです。いわゆる「エキスパート」がオブジェクト指向であることの意味と、オブジェクト指向プログラムを構築するための最良/適切な方法について、矛盾する記事とチュートリアルを書くことは役に立ちません。