컴퓨터 과학에서 가장 어려운 과목 / 이론? [닫은]


17

가장 어려운 CS 과목 / 이론은 무엇입니까? 그리고 그 이유는?


3
나는이 크게 주제를 학습하는 사람에 따라 생각하고, 사람을 가르치는
마흐무드 호삼

답변:


37

"컴퓨터 과학에는 두 가지 어려운 문제가 있습니다. 캐싱, 이름 지정 및 off-by-1 오류"


4
스레딩을 추가합니다 ...
Carra

35

솔직히 컴파일러 구성!


13
+1 컴파일러가 가장 어려웠고 가장 보람이있었습니다.
dietbuddha

3
그것은 모든 작업에서 가장 많았고 그런 코딩을 준비하는 것이 좋았지 만 그렇게 어렵다고 생각하지는 않습니다. YACC를 사용하지 않거나 우리가 사용한 도구가 없다면 어려울 것입니다.
피터 터너

4
대부분의 이론은 엄청나게 심한 하드웨어 제약으로 거슬러 올라가고 많은 공식적인 명령이 그 이상으로 발전하지 않았기 때문에 컴파일러는 실제로 어려워졌습니다. 한 번 봐 가지고 하자 빌드 컴파일러 는 다른 각도에서 접근하는 경우가 될 수있는 방법을 쉽게 컴파일러 쓰기 볼 수 있습니다.
메이슨 휠러

1
@Martin York, 컴파일러 라이터로서 컴파일러 구현의 복잡성이 심각하게 과대 평가되었다고 생각합니다. 일반적으로 컴파일러는 인터프리터보다 훨씬 간단합니다. 나는 그것이 Dragon Book이고 그 종류가 책임이 있다고 생각합니다. 그들은 간단한 일을하고 가장 중요한 단계, 즉 파싱에 너무 많은주의를 기울이는 가장 복잡한 방법을 제안하고 있습니다.
SK-logic

1
@Martin York에는 소스 언어가 아무리 복잡하더라도 AST를 최대한 간단하고 유지 관리 할 수있는 기술이 있습니다. 또한 컴파일의 각 단계를 사소하고 격리 된 상태로 유지하기위한 매우 간단하지만 강력한 기술이 많이 있습니다.
SK-logic

22

알고리즘 설계 및 분석

나는 그 질문이 당신이 가진 선생님과 그 과목이 당신의 경력에서 어떻게 구성되었는지에 달려 있다고 생각합니다.

알고리즘 분석은 누군가가 원하는만큼 어려울 수 있습니다. 해결 될 수없는 문제들과 그뿐만 아니라 해결 될 수없는 문제들을 세어보십시오.

문제는 문제가있을 수 있으며 해결할 수 없다는 것을 알고 있다면 완벽합니다. 그러나 그렇지 않으면 어떻게해야합니까? NP-Complete임을 입증하거나이를 해결하기 위해 다항식 시간 솔루션을 찾으려고 많은 시간을 할애 할 수 있습니다.

NP-Completness를 시연하는 것은 쉽지 않습니다. 예, 많은 문제가 알려져 있지만 문제는 그것이 NP-Complete임을 입증하기위한 축소를 찾는 것입니다. 그리고 그것을 증명하기 위해 많은 시간 / 일 / 월을 보내고 다항식 시간으로 해결할 수 있다면 어떨까요? :)

컴파일러 , 그룹 이론기본 재귀 함수 와 같은 다른 주제도 있습니다. 주제 계획이나 교사가 원하는만큼 어렵습니다.)


1
s / Analisis / Analysis ... 그렇지 않으면 정확히 내가 생각하는 것 ... 원시 재귀 함수, uargh !!
Felix Dombek

합의, 나는 (내 알고리즘 클래스는 너무 간단하지만 때문에 교수) 결코 내가 성공적으로 무엇을 '증명'확신되는 없습니다 내 학사 학위를 뒤죽박죽
피터 터너

나는이 일을 보여줍니다 :) 얼마나 열심히 알고리즘을 할 수 있습니다
오스카 Mederos

18

패턴 인식, 즉 인공 지능. 이것은 광학 문자 인식, Voice to text, 얼굴 인식 등과 같은 다른 패턴 인식 도구와 함께 스마트 컴퓨팅을 말합니다.

컴퓨터로 할 수 있거나하고자하는 많은 "멋진"일들이 이러한 알고리즘에 의존하며, 우리는 많은 성공을 거두지 않고 수십 년 동안 그것들을 완성하려고 시도해 왔습니다.


결정적인 것이 아니기 때문에 어렵습니다. 좋은 AI 패턴 인식을 개발하려면 올바른 알고리즘, 올바른 기능 등을 선택하기 위해 사용하려는 모든 응용 프로그램에 대한 실험이 필요합니다.
Ken Bloom

1
나는이 특정 산을 등반하기 시작했습니다 (패턴 인식). 어렵다. 많은 수학. 위대하고 거대하고 위협적인 수학 더미가 나를 쳐다보고, 대담하게 들어갔다.
David Poole

잘 ... 패턴 recog는 적용된 통계로 볼 수 있습니다, 그것은 CS의 범위 내에서 문제가 아닙니다
aggietech

12

나의 선택은 계산 이론이다

(흠 ... 어쩌면 그렇게 중요하지는 않지만 확실히 어려웠습니다)


2
동의하며 개인적으로 en.wikipedia.org/wiki/Theory_of_computation으로 일반화하겠습니다 .
Matt H

나는 계산 이론이 어렵다는 것에 동의 할 것이다. 그러나 그것은 또한 내가 가장 좋아하는 과목 중 하나였다. 물론, 나는 수학에서 이중 전공을했다 ...
Poindexter

+1 나도 큰 전공. 나는이 물건에 대한 소개를 처리 할 수 ​​있지만 대학원 버전은 ... 내려서 기쁘다!
직업

우리는 그것에 대해 많은 것을 알지 못해서 중요하지 않았습니다.
표시 이름

10

Computer Science에는 두 가지 어려운 문제인 캐시 무효화 및 이름 지정 문제가 있습니다. - 필 칼튼



6

암호화

약간 잘못하면 회사 수백만 달러가들 수 있습니다.


점점 인기가 있지만 Crypto는 소프트웨어 고유의 것이 아닙니다.
JBR 윌킨슨

암호화는 그렇게 어렵지 않습니다. 문제는 보안을 쉽게 테스트 할 수 없기 때문에 누군가가 해킹 할 때만 실수를 발견한다는 것입니다. 그러나 테스트 가능성의 부족은 암호화뿐만 아니라 대부분의 IT 보안 형태에 적용됩니다.
코드 InChaos

4

운영 체제, 특히 스레딩과 관련이있는 부분.

그리고 그 이유는 5 명의 철학자들이 포크로 피자를 먹기 어렵 기 때문이 아닙니다. 그 이유는 멀티 스레드 코드 작성이 그 자체로는 어렵고 인간 (적어도 남성-아내에 따르면)이 계산하기가 쉽지 않기 때문입니다.


9
아내가 다중 스레드 코드를 작성하도록하십시오. :)

3
공유 메모리 멀티 스레딩과 관련하여 컴퓨터는 비열한 돼지입니다. 멀티 코어 프로세서를 다룰 때도 마찬가지입니다. 하나의 핵심은 당신이보고있는 눈 앞에서 당신을 산만하게 할 수 있고, 다른 하나는 당신의 뒤에 가서 뒤에서 찌를 수 있습니다.
Donal Fellows

3

나도 컴파일러 디자인에 투표했다. 특히 DFA와 NFA 부분이 등장하는 곳도 있습니다. 또한 NP 문제와 문제에 대해서도 명확하지 않습니다.


그래, 내가 계산 이론을 먼저 취하지 않았다면 컴파일러와 함께 힘든 시간을 보냈을 것입니다.
피터 터너

DFA와 NFA는 닭 사료입니다. LALR (1) 구문 분석을 수행해야 할 때까지 기다리십시오.
David Thornley

3

큐잉 이론

기술적으로 이것은 수학의 한 가지이지만 CS와 관련이 있습니다.

CS의 거의 모든 것은 대기열을 기반으로합니다 (표시 (명확) 및 보이지 않음 (명확하거나 암시 적이 지 않음)).

CS의 초기에는 대기열이 분명했습니다.
프로그램 대기열 (각 프로그램은 카드 덱).

오늘날 대기열은 그다지 명확하지 않습니다. 예를 들어 인터넷은 패킷 교환 네트워크이지만 패킷은 대기열을 형성하고 패킷을 라우팅하는 것은 대기열 최소화의 한 형태입니다.


야! (? 당신은 (리스프 프로그래머)
Mark C

((가능한 한 (참조), 그러나 (알고있다)).)
Martin York

3

수치 해석

코스에서 제공되는 장난감 문제는 그리 어렵지 않지만 실제 문제를 고려하기 시작하면 심각한 문제로 바뀝니다.


2

클라이언트가 실제로 원하는 것을 모르는 경우 클라이언트 요구 사항을 해석 합니다. 이것은 대학에서 가르치지 않으며, 가장 필수적인 기술 중 하나입니다.


1
나는 이것이 컴퓨터 과학 개념이라는 것에 동의하지 않습니다. 또한 과학적 방법으로 어떻게 해결할 수 있는지 알지 못합니다.
jmort253

@ jmort253-이것은 사실이지만, 컴퓨터 과학은 (제 생각에 성공적으로) 공식적인 설계 및 검증 방법으로이 분야를 조사하려고합니다.
mouviciel

나는 "컴퓨터 과학"개념이 아니라는 점에 동의합니다.하지만 제가 경력을 시작했을 때 고객이 원하는 것을 알지 못한다는 사실을 알지 못했습니다. 모든 소프트웨어 프로젝트에는 공식적인 요구 사항 문서가 포함되어 있다고 생각했습니다. 소프트웨어 공학 과정에 대한 강의 주제 일 수도 있습니다 (대학에서 다루지 않았을 수도 있음)?
Steven Striga

1

개인적으로, 저는 공식적인 논리였습니다. 시작하기는 힘들었지 만 일단 규칙을 내려 놓고 규칙을 충분히 준수하면 두뇌가 Logic++;발전하게되는데 이는 개발 과정에서 매우 좋은 일입니다.

부수적으로, 나는 그 질문에 직접 대답하고 있습니다. 이것은 제가 학위를 받았을 때 가장 어려운 주제는 아니지만, 아마도 가장 어려운 "실제 적용 가능한"주제였습니다.


공식적인 논리는 내가 사랑 / 증오 관계가있는 것입니다. 나는 개념을 생각하는 것을 좋아했지만 논리적 사고가 필요한 실제 문제에 직면 할 때까지 그것이 어떻게 도움이되었는지 이해할 수 없었습니다.
jmort253

@ jmort253-그것은 나에게 동일했습니다. 나는 그것을 실패 할 것이라고 생각하기까지 고군분투했고, 마침내 내 머리를 클릭 할 때까지 너무 오랫동안 열심히 공부했습니다 . 그 후, 그 혜택은 놀라웠습니다.
Kyle Rozendo

1

컴파일러 구성. 어렵지만 뒤에있는 개념을 이해해야합니다


5
동일한 답변을 다시 제공하지 않고 이전에 제공된 동일한 답변에 대해 투표를 실시해야합니다.
Abimaran Kugathasan

1

커널 디자인 누구? 글쎄, 나는 그것이 어떻게 수행되고 OS의 목표 기능이 무엇인지 알지 못하지만, 커널 디자인에 대한 생각은 어려운 작업이어야합니다.

또한 컴퓨터 보안에 대해서도 생각 합니다 . 물론 버퍼 오버플로, XSS 및 SQL 주입을 제외하고 시스템이 안전하지 않은 이유는 무엇입니까?

잘 모르겠지만 일부 알고리즘도 안전하지 않은 것 같습니다. MetaSploit 프로젝트를 살펴보면 모든 유형과 종류의 보안 침해가 나열되어 있습니다. 프로그램에 결함이있을 수있는 많은 방법이 있음을 알 수 있습니다.


1

이 분야에는 어색한 주제가 많이 있지만, 지속적인 어려움에 대한 나의 선택은 Global System Properties 와 관련된 주제입니다 . 이 일반적인 주제의 예는 다음과 같습니다.

  • 안전하고 교착 상태가없는 멀티 스레딩
  • 보안

모든 것이 정확할 때만 존재하는 무언가를 따르기 때문에 이것은 어렵다. 당신은 글로벌 시스템 속성이 필요하지만 사실상 사용 가능한 거의 모든 도구 (그리고 내 경험에서 실제 문제로 확장되는 모든 도구 )는 실제로 로컬 추론 만합니다. 그것은 프로그램의 조각에 대한 추론에서 어려운 전체 세방으로가는 과정입니다. 특히 그 자체로 모두 올바른 조각을 가질 수는 있지만 구성 요소가 잘못 배열되어 여전히 미묘한 버그가있는 경우가 많기 때문입니다. 버그는 바람직하지 않은 출현 특성이 될 수 있습니다…


0

경영 정보 서비스 대학 기간 동안 매 학기마다 하나의 관리 과목을 사용하여 저를 완전히 화나게했습니다.
강인한! Compiler Design , OS Design 등과 같은 주제 는 어렵지만 실제로 흥미롭고 도전적입니다. 나는 지루함으로 가득 차서 당신은 많은 이론을 거쳐야하기 때문에 관리 정보 시스템 / 서비스 등과 같은 주제를 정말로 엉망으로 만들었습니다.


2
그들은 각 시스템의 개념적 복잡성에 대해 이야기하고 있기 때문에 지루함이 가득합니다. 반면 사람들은 시스템을 직접 작성하지 않았지만 반드시 다양한 것을 사용했습니다. 또한, 정액은 너무 많은 단어를 사용하지만 평범한 영어로 실제 사례를 제공하지 못합니다. 의사 결정 지원 시스템과 마찬가지로 Google 애널리틱스 보고서 (FML)의 스크린 샷 몇 개만 삭제하면 시청자 앞에서 지적 오르가즘을 느끼기 전에 같은 페이지에 학생을 끌어 들이기 만하면됩니다.
Filip Dupanović

0

C / C ++에서 작업하는 경우 가장 중요한 개념은 포인터입니다. 그러나 어떻게 든 나는 대학에서 그것을 완전히 이해하지 못했습니다.


12
정말? 나는 각 사람이 다른, 의미,하지만 난 있다고 생각 많은 (내 말은, 많은 단지보다 더 열심히 주제의) 포인터 . 예를 들어 Computers Architecture , Assambler 는 어떤 식 으로든 포인터 와 관련이 있습니다 .)
Oscar Mederos

사실,하지만 당신은, 당신 때문에 실제로 작업 방법 쉽게 조립을 통해 참조 이해 메모리를 찾을 원시 추상화가 outspokenly 이야기하지 않기 때문에 단지 사람들의 지옥을 혼란 포인터에 대한 참조와 함께 작업 C / C ++에서 동안 포인터를, 약.
Filip Dupanović

2
Ah assambler, 최고의 프로그래머의 차
Matt Ellen

그 사람은 어렵지만 중요한 주제를 물었습니다.
Manoj R

@ 매트 : 당신은 방금 내 하루를 만들었습니다. 아니면 어레이 액세스가 어렵습니까?
back2dos

0

알고리즘의 설계 및 분석. 알려진 알고리즘 을 이해하고 분석하는 것은 그리 어렵지 않고 어려운 문제에 대한 새로운 알고리즘을 설계하고 분석하는 것은 어렵고 많은 분야에 대한 폭 넓은 이해와 많은 다른 기술을 적용하는 연습이 필요합니다.




0

가장 어려운 CS 과목 / 이론은 무엇입니까?

이산 수학.

이론은 서로 매우 느슨하게 관련되어 있지만 CS에서 사용되기 때문에 어려웠습니다. 내 생각 엔 너무 많은 암기 ...

인덕션, 빅 오, 재귀, 나누기 및 구성, 그래프 이론, blah blah .. argh로 증명!

Automata 이론을 가져야했기 때문에 컴파일러가 쉬웠습니다. ^^


0

대학에서 뇌를 다치게하는 데 사용 된 Z 표기법 / 공식적인 방법. 주로 내가 싫어했기 때문에. 열심히하는 것은 자신이하고있는 일을 즐기면 훨씬 쉬우 며 그렇지 않은 경우에는 훨씬 더 어렵습니다.


0

나는 컴파일러, 커널 등과 같은 당신의 답변을 좋아하고 (공개하는 것을 잊지 않았다), 대부분의 프로그래머는 이러한 문제를 결코 겪지 않았다. 동시성 -스레드, 잠금 같은 약간 더 쉽지만 일반적인 문제가 있습니다. 동시성 아키텍처에서 작은 버그를 만들면 마법 오류를 생성하는 프로그램을 작성하는 것은 매우 쉽습니다.

따라서 컴퓨팅에서 가장 어려운 문제는 아니지만 일반적으로 사용되기 때문에 위험한 문제입니다.


0

객체 지향 프로그래밍

아마도 FORTRAN과 APL에서 이빨을 잘라 냈기 때문일 것입니다. 그러나 엄밀히 절차 적 언어에서 객체로의 전환은 수년 동안 어려움을 겪어 왔습니다. 소위 '전문가'가 객체 지향의 의미와 객체 지향 프로그램을 구성하는 가장 좋고 적절한 방법에 대해 충돌하는 기사와 자습서를 작성하는 데 도움이되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.