コンピュータサイエンスで最も難しい科目/理論ですか?[閉まっている]


17

勉強したが分野にとって重要な最も難しいCS科目/理論はどれですか?そしてその理由は?


3
これは主に科目を学んでいる人とそれを教えている人にかかっていると思う
マフムード・ホッサム

回答:



35

正直なところ、コンパイラの構築!


13
+1コンパイラは最も難しく、最もやりがいのあるものでした。
ダイエット仏

3
それはすべての作業で一番上にあり、うっとうしいコーディングの準備ができていましたが、それほど難しいことではないと思います。YACCを使用したり、私たちが使用したツールがないと、もっと難しくなるかもしれません。
ピーターターナー

4
コンパイラは本当に難しいだけです。なぜなら、理論のほとんどは非常に厳しいハードウェア制約の時代にさかのぼり、多くの正式な命令はそれを超えてあまり進んでいないからです。見てみましょうビルドAコンパイラあなたは別の角度からそれに接近する場合、コンパイラ書き込みがいかに簡単に参照すること。
メイソンウィーラー

1
@Martin York、コンパイラライターとして、コンパイラの実装の複雑さは過大評価されていると思います。一般に、コンパイラはインタプリタよりもはるかに単純です。私はそれがドラゴンブックであり、その種類が原因であると思う、彼らは単純なことをする最も複雑な方法を提案し、最も重要でないステップ、すなわち構文解析に注意を払いすぎている。
SKロジック

1
@Martin York、ソース言語がどれほど複雑であっても、ASTを可能な限りシンプルで維持可能な状態に保つ技術があります。また、コンパイルの各段階をささいで孤立した状態に保つための非常に単純だが強力な手法がいくつかあります。
SKロジック

22

アルゴリズムの設計と分析

その質問は、あなたが持っていた教師と、その科目があなたのキャリアでどのように構成されたかに依存すると思います。

アルゴリズムの分析は、誰かが望むほど難しい場合があります。未解決の問題だけでなく、解決できない問題もあることを考慮してください。

問題は、問題が発生する可能性があることであり、解決できないことがわかっている場合、それは完璧です。しかし、そうしないとどうなりますか?NP完全であることを実証するために、またはそれを解決するための多項式時間解を見つけるために、多くの時間を費やすことができます。

NP完全性の証明は簡単ではありません。はい、多くの問題が知られていますが、問題は、NP完全であることを示すために削減を見つけることです。そして、あなたがそれを実証しようとして多くの時間/日/月を費やし、それを多項式時間で解決できるとしたらどうでしょうか?:)

コンパイラグループ理論原始再帰関数など、主題計画や教師が望むほど難しいものもある他の主題もあります;)


1
s / Analisis / Analysis ...それ以外の場合はまさに私が思うに...原始再帰関数、arhgh !!
フェリックスドンベック

同意しました。私は学士号をいじりました。私はこれまでに何かを「証明」することに自信がありませんでした(ただし、アルゴリズムのクラスは教授のせいであまりにも単純でしたが)
Peter Turner

最近では、アルゴリズムがどれほど難しいかをお見せします:)
オスカーメデロス

18

パターン認識、つまり人工知能。これは、スマートコンピューティングと、光学式文字認識、音声からテキスト、顔識別などのような他のパターン認識ツールを指します。

コンピューターで実行できる、またはできることを望む「クールな」ことの多くは、これらのアルゴリズムに依存しており、何十年も完全な成功を収めることなくそれらを完成させようと試みてきました。


それは決定論的なものではないので難しいです。適切なAIパターン認識を開発するには、適切なアルゴリズム、適切な機能などを選択するために、使用するすべてのアプリケーションを実験する必要があります。
Ken Bloom

1
私はこの特定の山に登り始めたところです(パターン認識)。それは難しい。たくさんの数学。素晴らしく、巨大で、恐ろしい数学の山、私を見つめ直し、大胆に入場する。
デビッドプール

まあ...パターン認識も応用統計として見ることができます、それはCSの範囲内の問題だけではありません
-aggietech

12

私の選択は計算可能性理論です

(うーん...それはそれほど重要ではないかもしれませんが、それは確かに困難でした)


2
私は同意し、個人的にはen.wikipedia.org/wiki/Theory_of_computationとして一般化します。
マットH

計算の理論は難しかったが、それは私のお気に入りのテーマの1つでもあったことに同意する。確かに、私は数学を二重に専攻してい
Poindexter

+1私もダブルメジャーです。私はこのようなもののイントロを扱うことができましたが、大学院バージョンは...私がそれを落としたことをうれしく思います!
ジョブ

それは大変でしたが、それについてあまり知らないので、それほど重要ではありません。
表示名


7

カテゴリー理論(離散数学)、しかしそれだけの価値


カテゴリー理論の学習から得た具体的なメリットは何ですか?
zvrba

@zvrba:抽象化技術と問題マッピングのより深い理解
スティーブンA.ロウ

どこから学びましたか?
zvrba

@zvrba:私は私の本棚の本を見ていない、それが(改造)ストレージにおそらくまだだが、私はそれがこの本だったと思うamazon.com/Category-Computer-Scientists-Foundations-Computing/...
スティーブンA. Loweの

6

暗号化

少し間違えただけでも、会社に何百万ドルもかかる可能性があります。


ますます人気が高まっていますが、Cryptoはソフトウェアに固有のものではありません。
JBRウィルキンソン

暗号はそれほど難しくありません。問題は、セキュリティを簡単にテストできないため、誰かがあなたをハッキングしたときだけ間違いに気付くということです。しかし、テスト容易性の欠如は、暗号化だけでなく、ほとんどの形式のITセキュリティに当てはまります。
CodesInChaos

4

オペレーティングシステム、特にスレッドに関係する部分。

理由は、5人の哲学者がフォークでピザを食べるのが難しいからではありません。その理由は、マルチスレッドコードの記述自体が困難であり、人間(少なくとも男性-私の妻によると)の心にとっては必ずしも簡単に計算できないからです。


9
妻にマルチスレッドコードを記述させてください:)

3
共有メモリマルチスレッドに関しては、コンピューターは卑劣な豚であり、あなたを狙っています。マルチコアプロセッサを扱う場合、二重にそうです。一方のコアは、あなたが見ている目の前であなたの注意をそらし、もう一方のコアはあなたの後ろに行って後ろを刺すことができます。
ドナルドフェローズ

3

私もコンパイラ設計に投票します。特に、DFAとNFAの部分の出番です。NPの問題や問題についてもあまり明確ではありません。


ええ、もし私が最初に計算理論をとっていなかったら、コンパイラで苦労していたでしょう。
ピーターターナー

DFAとNFAは鶏の飼料です。LALR(1)解析を行う必要があるまで待ちます。
デビッドソーンリー

3

キューイング理論

技術的にはこれは数学の分野ですが、CSには非常に関連性があります。

CSのほぼすべてがキューに基づいています(目に見える(明白な)および目に見えない(それほど明白または暗示的ではありません))。

CSの初期には、キューは明らかでした。
プログラムのキュー(各プログラムはカードのデッキ)。

現在、キューはそれほど明確ではありません。たとえば、インターネット:パケット交換ネットワークですが、パケットはキューを形成し、パケットのルーティングはキューの最小化の一形態です。


おい!(?あなたは(Lispプログラマー)
マークC

しない((可能な限り)(参照)、しかし(それは(既知)である。)起こる))。
マーティンヨーク

3

数字的分析

コースで与えられたおもちゃの問題はそれほど難しくありませんが、実際の問題を検討し始めると、それは深刻な骨の折れる作業に変わります。


2

クライアントが実際に何を望んでいるかわからない場合のクライアント要件の解釈。これは大学では教えられておらず、最も重要なスキルの1つです。


1
これがコンピューターサイエンスの概念であることに同意するかどうかはわかりません。また、科学的な方法を使用してどのように解決できるかわかりません。
jmort253

@ jmort253-これは事実ですが、コンピューターサイエンスは、設計と検証の正式な方法でこの分野を調査しようとします(私の意見では失敗しました)。
mouviciel

「コンピューターサイエンス」の概念ではないことに同意しますが、キャリアを始めたとき、クライアントが何を望んでいるのかわからないという事実に気づきませんでした。すべてのソフトウェアプロジェクトには、何らかの正式な要件ドキュメントが付属していると思いました。ソフトウェアエンジニアリングコースの講義トピックかもしれません(私の大学はそれをカバーしていなかったかもしれません)?
スティーブンストライガ

1

個人的に、私のものはフォーマルロジックでした。開始するのは大変でしたが、ルールをいったん下し、それで十分に遊ぶことができたら、あなたの脳は進みますLogic++;。これは開発中は非常に良いことです。

補足として、私は質問に直接答えています-これは間違いなく私の学位を取得したときに最も難しい科目ではありませんでしたが、おそらく最も現実的な「現実に適用可能な」科目でした。


フォーマルロジックは、私が愛と憎しみの関係にあったものです。概念を通して考えるのが好きでしたが、論理的な思考を必要とする実世界の問題に出くわすまで、それがどのように私を助けているのか理解できませんでした。
jmort253

@ jmort253-それは本当に私にとって同じでした。私はそれを失敗するだろうと思うまで苦労し、それが最終的に私の頭の中をクリックするまで、とても長く、一生懸命勉強ました。その後、そのメリットは驚くべきものになりました。
カイル・ロゼンド

1

コンパイラー構造。難しいが、背後にある概念を理解する必要がある


5
同じ答えを再度与えるのではなく、前に提供された同じ答えに賛成票を投じるべきです。
アビマランクガタサン

1

カーネルデザインは誰ですか?それがどのように行われ、OSのターゲット機能が何であるかはよくわかりませんが、カーネルの設計について考えることは困難な作業でなければなりません。

コンピューターのセキュリティについても考えます。もちろん、明らかなバッファオーバーフロー、XSS、およびSQLインジェクションを除き、システムが安全でない理由はわかりません。

確かではありませんが、一部のアルゴリズムも安全ではないようです。MetaSploitプロジェクトを見ると、すべての種類と種類のセキュリティ侵害がリストされています。プログラムに欠陥がある方法はたくさんあります。


1

この分野には多くの厄介なトピックがありますが、私が絶え間ない難しさを選んだのは、グローバルシステムプロパティに関するものです。この一般的なトピックの例は次のとおりです。

  • 安全でデッドロックのないマルチスレッド
  • セキュリティ

あなたはすべてが正しいときにのみ存在する何かを求めているため、これらは難しいです。あなたは、グローバルシステムプロパティとはまだ、事実上すべての利用可能なツール(および必要なすべての私の経験では、実際の問題にスケールがあることのもの)だけは本当に地元の推論を行うことを。それは、プログラムの断片についての推論からシバン全体へと進むプロセスです。特に、それ自体がすべて正しい断片を持つことは完全に可能ですが、コンポーネントが誤って配置されているために微妙なバグが残っているためです。バグは、望ましくない緊急特性である可能性があります…


0

経営情報サービス 大学時代、学期ごとに1つの経営学科を持っていたので、完全に怒っていました。
タフ!Compiler DesignOS Designなどの科目は難しいですが、本当に面白くてやりがいがあります。経営情報システム/サービスなどは退屈に満ちており、多くの理論を経験しなければならないので、私は本当に混乱しています。


2
彼らは各システムの概念の複雑さについて話しているので退屈だらけで、半分の人は自分でシステムを書いたことはありませんでした(しかし、彼らは確かにさまざまな使い方をしました)。また、精液は非常に多くのロードされた単語を使用しますが、平易な英語で実際の例を提供できません。意思決定支援システムのように...聴衆の前で知的オルガスムを実行する前に、学生を同じページに導くために、Google Analyticsレポートのスクリーンショットをいくつかドロップすることはできませんでした。
フィリップデュパノビッチ

0

C / C ++で作業している場合、ポインターは知っておくべき最も重要な概念です。しかし、どういうわけか私は大学でそれを完全に理解していませんでした。


12
本当に?つまり、それぞれの人は異なっていますが、単なるポインターよりも難しいトピックがたくさんある(つまり、たくさんある)と思います。例えば、コンピュータのアーキテクチャAssambler何らかの形でに関連していることをポインタ ;)
オスカーMederos

確かに、アセンブラーによるメモリ参照の理解は簡単です。C/ C ++ではポインターへの参照を使用して実際にポインターを操作するためです。約。
フィリップデュパノビッチ

2
最高のプログラマーのお茶、アサンブラー
マットエレン

その男は、難しいが重要なトピックを尋ねたので、ポインターです。
マノジR

@Matt:あなたはちょうど私の日を作りました:D @Manoj R:ポインタを配列アクセスと考えるだけで簡単です。または、アレイへのアクセスは難しいですか?
back2dos

0

アルゴリズムの設計と分析。既知のアルゴリズムを理解して分析することはそれほど難しくありません。難しい問題のために新しいアルゴリズムを設計および分析することは困難であり、多くの分野を広く理解し、多くの異なる技術を適用する練習が必要です。




0

勉強したが分野にとって重要な最も難しいCS科目/理論はどれですか?

離散数学。

理論は互いに非常に大まかに関係しているが、CSで使用されているため、困難でした。暗記が多すぎる...

帰納法による証明、ビッグO、再帰、分割と獲得、グラフ理論、何とか.. argh!

私にとってコンパイラは簡単でした。オートマトンの理論を採用しなければならなかったからです。^^


0

大学で私の脳を傷つけるために使用されるZ表記法/正式な方法。主に私がそれを嫌ったからです。ハードは、自分がやっていることを楽しんでいるときはずっと簡単で、そうでないときはずっと難しいです。


0

コンパイラ、カーネルなど、あなたの答えが気に入っています(そして、それらを支持することを忘れていませんでした)が、ほとんどのプログラマはこれらの問題に遭遇しませんでした。少し簡単ですが、より一般的な問題があります:並行性 -スレッド、ロック。並行性アーキテクチャに小さなバグを作成するだけでも、魔法のエラーを生成するプログラムを作成するのは非常に簡単です。

ですから、コンピューティングで最も難しい問題ではありませんが、一般的に使用されているため、危険な問題です。


0

オブジェクト指向プログラミング

FORTRANとAPLに歯を切ったからかもしれませんが、厳密な手続き型言語からオブジェクトへの移行は長年苦労してきたものです。いわゆる「専門家」が、オブジェクト指向とは何か、オブジェクト指向プログラムを構築する最良/適切な方法について、矛盾する記事やチュートリアルを書くことは助けになりません。

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