프로그래머를위한 이론적 컴퓨터 과학자가 학습 자료


14

저는 꽤 능숙한 소프트웨어 엔지니어이지만 많은 이론을 모릅니다. 더 많은 이론을 배우고 싶습니다. 내가 관심이있는 특정 주제는 계산 복잡성, 형식 언어 및 유형 이론입니다. 그러나 나는이 분야들에 대해 배우기 시작하는 방법에 대해 잃어 버렸습니다.

자율 학습을 통해 더 많은 이론을 배우고 싶은 사람에게 어떤 자료를 추천 하시겠습니까? 소프트웨어 엔지니어를위한 이론적 인 컴퓨터 과학자가 학습 안내서가 있습니까?


3
배우고 싶은 내용에 따라 다릅니다. Arora-Barak 은 계산 복잡성 이론에 대한 철저한 소개를 제공하며 온라인에서 무료로 제공됩니다. 그래서 시작하기에 좋은 곳입니다.
토마스는

4
데이터 구조, 알고리즘 등과 같은 대학 / 대학에서 이론 과정을 수강 했습니까? 일반적으로 필수 학부 이론 과정을 이수하 지 않은 경우 해당 과정의 교과서가 좋은 출발점이 될 것입니다. 그 후 wikipedia 기사, 우리 의 서적비디오 목록 , Coursera / Udacity / EdX / ... 온라인 코스를 볼 수 있습니다. Coursera는 꽤 훌륭한 이론 코스를 제공합니다.
Kaveh

대학에서 무엇을 공부 했습니까?
Omar Shehab

어떤 언어로 프로그래밍합니까? 대부분의 이론적 CS는 구체적인 내용과 함께 배울 수 있습니다. 예를 들어 공식 언어에 대해 더 배우고 싶다면 정규 언어 / 표현 (예 : 정규 표현식)을 컴파일러에 대해 배우는 것부터 시작하는 것이 좋습니다. 타입 이론의 경우, haskell, F # 또는 ML과 같이 정적으로 유형이 지정된 언어로 플레이하고 싶을 수 있습니다.
Baby Dragon

Dewdney의 New Turing Omnibus 를 광범위하고 접근 가능한 소개 심판 / 측량 / 단면으로 사용해보십시오 . 또한 TCS에 영감을주는 대중 과학 서적
vzn

답변:


7

상당히 다른 영역을 가진 넓은 분야입니다.

컴퓨터가 무엇인지에 대한 가장 기본적인 아이디어부터 시작하겠습니다. Hopcroft와 Ullman, "Automata 이론, 언어 및 계산 소개".

특히 권장하는 이유는 증거에 대한 강조입니다. 그들은 엄격한 사고 방식을 통해 당신을 안내합니다. 그것은 프로그램 작성과 과학적인 것의 차이점입니다.


1
감사! 이것이 어떻게 바뀌는 지 모르겠지만 실제로 증명 기반 수학에 대한 배경 지식이 있습니다 (아마도 질문에서 언급했을 것입니다). 증명 기반의 실제 분석, 포인트 세트 토폴로지 및 추상 대수를 수행했습니다.
Henry H.

그럼 당신은 매우 빨리 그것을 통해 작업 할 수 있습니다 :)
케이트 F

차이가 아니라 차이. CS는 다른 많은 원칙들도 수반합니다
vzn

나는 엄격한 요구가 실제로 프로그래밍과 수학의 차이라고 생각하지 않습니다. 이론을 프로그래밍하고 증명하는 것은 매우 관련이있는 작업이며 (참조. Curry-Howard Isomorphism), 수학 이외의 작업은 프로그래밍보다 더 엄격하지 않아도됩니다. 컴파일러는 증거를 읽는 사람보다 오류에 대해 훨씬 덜 용서합니다.
Jan Johannsen

2
@JanJohannsen 매우 동의하지 않습니다. 예를 들어 C에 대한 정의되지 않은 동작을 참조하십시오.
Kate F

9

유형 이론을 배우는 방법에는 여러 가지가 있습니다. 일하는 프로그래머에게는 B. Pierce의 타입과 프로그래밍 언어 가 좋은 출발입니다. R. Harper의 프로그래밍 언어대한 실질적인 기초 도 좋습니다. 운영 의미론에 대한 약간의 이해하기 쉬운 배경 지식을 원한다면 G. Winskel의 프로그래밍 언어의 공식 의미론 : 소개를 추천 합니다. T. Nipkow, G. Klein, 콘크리트 시맨틱, Winskel의 책의 변형이 Isabelle / HOL 대화 형 증거 보조를 위해 공식화되었습니다. 이 책 (혹은 어떤 책)에서든 증명을 다루기가 정말 어렵다고 생각합니다. 가까운 전문가가 질문을하도록하세요. 타입 이론에 대한 수학적 접근 방식을 더 원한다면 JR Hindley, JP Seldin, Lambda-Calculus and Combinators : Introduction 또는 H. Barendregt의 Lambda Calculi with Types를 살펴볼 수 있습니다 . Barendregt에서 시작하는 것은 좋지 않습니다.

단일 권장 사항을 원한다면 Part VI (고급 주문 시스템)를 제외한 모든 Pierce를 읽고 책에서 설명하는 장난감 언어를 구현하십시오. 유형 이론에 대한 강력한 근거가 될 것이며 아마도 더 나은 프로그래머가 될 것입니다.


2

나는 추천 계산 가능성, 복잡성 및 언어 마틴 데이비스, 론 시갈과 일레인 웨 여커에 의해.


구식 TCS를위한 아름다운 책입니다. 도메인 이론적 의미론의 일부를 제외하고는 건너 뛸 수 있습니다.
Martin Berger

1

나는 이론과 알고리즘을 좋아합니다. 한 번 인도 마드라스 (IIT-M)에 위치한 Indian Institute of Technology의 이론적 컴퓨터 과학을 방문 할 기회가있었습니다. IIT-M에는 많은 이론가들이 있습니다. 내가 거기에 갔을 때 나는 이론이 무엇인지 전혀 몰랐지만, 오늘 나는 그것을 완전히 사랑한다.

포인터에 대한 @Kate F 덕분에 Hopcroft와 Ullman은 시작하기에 훌륭한 장소입니다.

그러나 여기 제가 시작한 방법이 있습니다.

  1. Cormen의 알고리즘 소개를 읽으십시오. <\ br> 시작하기에 좋은 곳입니다. 공부할 때 가능한 한 오랫동안 각 증거를 이해하려고 노력하십시오. 증명을 잘 이해하면 원하는 언어로 동일한 논리를 코딩하십시오. (약간 시간이 걸리지 만 시도해 볼 가치가 있습니다)

  2. 같은 이론에서 최고 회의에 따라
    FOCS
    SODA
    STOC
    알고리즘 게임 이론 - EC (전자 상거래)
    COLT (학습 이론에 회의) - 학습 이론
    CRYPTO - 암호화
    전산 기하학 - SOCG (전산 기하학 심포지엄)
    에 (회의 CCC를 계산 복잡도)-복잡성 이론

많은 것을 이해하지 못하더라도 가능한 한 많이 읽고 생각 하십시오. 최대한 많은 증거를해야합니다 ..

  1. 특히 계산 복잡성을 생각하고 있다면 ( 이것은 스탠포드 출신입니다 ) 놀라운 곳 입니다.
  2. Sanjeev Arora 교수, 보아스 바락, 젤 라니 넬슨, 마두 수단
  3. 다음은 계산 복잡성 분야의 종합 정보입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.