컴퓨터 과학을 완전히 스스로 공부하는 방법은 무엇입니까? [닫은]


46

완전히 스스로 가르치는 프로그래머이기 때문에 전형적인 CS 대학원생에게 컴퓨터 과학 과정을 직접 학습함으로써 나 자신을 더 잘할 수 있기를 바랍니다.

인터넷에서 다양한 리소스를 쉽게 찾을 수 있었으며 MIT 오픈 코스웨어 는 물론 스탠포드 및 기타 대학의 코스 라 코스도 있습니다. 인터넷에는 수많은 다른 공개 자료가 있으며 반복해서 권장되는 좋은 책이 있습니다.

나는 많은 것을 배우고 있지만 내 연구는 심하게 조각화되어있어 실제로 버그가 있습니다. 나는 어딘가에, 내가 따라야 할 길과 내가 제한해야 할 스택을 찾을 수 있다면 내가 공부 한 컴퓨터 과학의 필수 부분을 확신 할 수 있고 내가하지 않은 부분에 체계적으로 접근 할 수있다.

Wikipedia의 문제점은 무엇이 중요한지 알려주지 않지만 완전한 참조가 필요하다는 것입니다.

컴퓨터 과학 및 전기 Engg를위한 MIT 개방형 코스웨어 . 필수 과정과 개인의 관심 / 요구 사항에 따라 선택 사항이 무엇인지 알려주지 않는 다양한 과정 목록이 있습니다. 나는 다른 과목을 공부해야하는 순서에 대해서는 언급하지 않았다.

내가 좋아하는 것은이 더미처럼 내가 따라갈 수있는 목록을 만드는 것입니다.

SUBJECTS                                                        DONE

Introduction to Computer Science                                  *
Introduction to Algorithms                                        *
Discrete Mathematics                   
Adv. Discrete Mathematics
Data structures                                                   *
Adv. Algorithms
...

분명히 알 수 있듯이 컴퓨터 과학이 특정 과목으로 구성되어 있는지는 거의 알지 못합니다.

누군가가 MIT 코스웨어 (+ MIT OCW에없는 필수 과목)의 추천 코스를 추천 학습 순서로 지적 했더라도 큰 도움이 될 것입니다.

내가 이미 겪은 게시물을 나열 할 것입니다 (그리고 내가 찾던 것을 얻지 못했습니다)

https://softwareengineering.stackexchange.com/questions/49557/computer-science-curriculum-for-non-cs-major- 최고 답변은 cse를 공부할 가치가 없다고 말합니다.

https://softwareengineering.stackexchange.com/questions/110345/how-can-a-self-taught-programmer-learn-more-about-computer-science-MIT OCW를 가리킴

https://softwareengineering.stackexchange.com/questions/49167/studying-computer-science-what-am-i-getting-myself-into

https://softwareengineering.stackexchange.com/questions/19912/overview-of-computer-science-programming


완전히? 모든 재미있는 이론적 인 것들?

그렇습니다. 실제로 재미있는 이론적 인 것들이 마음에 듭니다. 주제에 대한 이해가 높아질 것입니다. 또한 CS 친구가 CS 관련 내용에 대해 토론하거나 너무 많은 질문을하여 짜증을 내면 혼자 남겨집니다.
Optimus

2
커리큘럼에는 여러 가지 "섬"이 있습니다. 예를 들어 그래프 이론에서 람다 미적분학은 거의 필요하지 않습니다. 또한 멘토를 두는 것이 좋을 수도 있습니다. 적합한 교육 기관과 가까운 곳에 사십니까?

사실, 나는 전문가와 친숙하지만 항상 그들을 괴롭힐 수는 없습니다. 그들은 내가 처음에 가진 많은 조각난 지식에 기여했습니다.
Optimus

3
이 경우 선택한 과정을 이수 할 수 있습니다. 그러면 교수진이 항상 버그를 제기 할 수 있습니다.

답변:


24

MIT의 강의 자료를 보았는데 충격적으로 나빴습니다 . 그들은 VC5, 많은 암시 적 글로벌 변수, 32 비트 ARGB 대신 "Blue"로 색상을 전달하는 4x [0,1] 부동 소수점을 필요로하는 교재를 가지고있었습니다. 커리큘럼이나 코드는 유명 대학 출신이기 때문에 신뢰하지 않습니다.

내 CS 학위 (영국 CS에서 상위 10 위의 대학 출신)는 다음과 같이 구성되었습니다.

첫해 :

  1. OOP- 슈퍼 기본
  2. 이진 정수 표현과 같은 컴퓨터 시스템.
  3. 기본 관계형 데이터베이스 이론
  4. CS- 간단한 2D 및 3D 형상을위한 수학.
  5. 약간의 HTML / JS- 완전한 초보자 재료
  6. 똑같이 작은 PHP.
  7. 기능적인 프로그래밍

2 년째 :

  1. 사용자 데이터 보호와 관련된 법률과 같은 컴퓨팅 관련 법적 문제
  2. 프로그래밍 언어-Chomsky 계층 및 어휘 적용
  3. 운영 체제, 네트워크 및 인터넷-대부분 가상 메모리 및 페이징, IP 스택과 같은 것들
  4. 2D 컴퓨터 그래픽-대부분 기본 수학의 이론을 입증
  5. 신경망, 베이지안 신념 시스템 등의 AI 기본 설명
  6. 요구 사항 분석-UML, 기능 / 비 기능 요구 사항에 대한 간략한 개요.
  7. 팀 프로젝트

3 년째 :

  1. 알고리즘 분석-복잡성 이론, 주로
  2. 프로그래밍 언어의 구현-LL / LR 파싱 기술, CFG 등
  3. 소프트웨어 프로젝트 관리-Waterfall / Agile 모델 살펴보기
  4. 국제 컴퓨팅-유니 코드 및 기타 현지화 재미
  5. 고급 AI- 솔직히 모르겠습니다. 곧 시험을 볼 수 있습니다.
  6. 3D 컴퓨터 그래픽-주로 회전 행렬 등에 대한 이론을 증명하는 것
  7. 에이전트 기반 시스템-주로 비동기 에이전트 통신, 그룹 의사 결정 등
  8. 마이크로 프로세서 응용-디지털 신호 처리
  9. Robotics- 컴퓨터 비전 및 로봇 의사 결정과 같은 내용을 높은 수준으로 커버

알다시피, 거의 모든 것이 무언가의 "기본"이며 거의 아무것도 유용한 깊이로 다루지 않습니다.

실제로 할 가치가있는 것들, 필수 :

  1. OOP- 그리고 몇 가지 더 그리고 몇 가지 더
  2. 기능적 프로그래밍-또한 더. 두 스타일을 모두 다루기 위해 구문과 도구 등을 다시 배울 필요가없는 C ++ 또는 C #과 같은 언어를 선택하십시오.
  3. 커널 모드와 사용자 모드는 OS 부분 가상 메모리에 대해 잘 알고 있습니다. 분할 및 IP 스택을 건너 뜁니다.
  4. 요구 사항 분석-모든 프로젝트에 유용해야 함
  5. 알고리즘 분석-알고리즘 복잡성, 그것을 줄이는 방법 및 일반적인 연산의 복잡성을 아는 것이 중요합니다.
  6. 소프트웨어 프로젝트 관리 모델-많은 상점이 애자일을 수행하고 많은 오래된 상점은 여전히 ​​폭포 형 모델을 수행합니다.
  7. 국제 컴퓨팅-유니 코드는 필수

할만한 가치가있는 것들 :

  1. 프로그래밍 언어-Chomsky 계층, 어휘 분석 및 분석 도구. LL 또는 LR 파서의 이론을 건너 뜁니다. LR 파서는 사실상 모든 모호하지 않은 CFG를 수용 할 수 있으며, 그렇지 않은 경우 파서 생성기의 설명서에서 설명합니다.
  2. 3D 그래픽. "이것이 회전 행렬 공식임을 증명하는"시간 낭비를 의미하는 것이 아니라 실제 "이것은 정점 셰이더입니다"또는 GPGPU를 의미합니다. 재미 있고 흥미롭고 다릅니다.
  3. AI의 일부는 잠재적 인 필드 및 길 찾기와 유사합니다.

필수이지만 어쨌든 다루지 않은 것들 :

  1. 동시성-적어도 2012 년에 누구나 알아야 할 기본 사항입니다.

나머지는 완전한 시간 낭비였습니다. 불행히도, 내가 아는이 9 가지 포인트의 대부분은 다른 곳에서 유용한 부분을 선택했습니다. FizzBuzz 문제 와 같은 것들에 대해 읽으면 팩에서 가장 많은 것을 알 필요가 없다는 것이 분명해집니다. 내 학위와 온라인에서 본 많은 자료 때문에 운이 좋았습니다. 다른 정도는 실제로 많은 것을 가르치지 않습니다.


3
@ ThorbjørnRavnAndersen : 이론은 코드를 작성하는 도구입니다. 더 나은 코드를 만들기 위해 이론을 사용할 수 없다면 이론은 가치가 없습니다.
DeadMG

3
@Optimus : 모든 이론의 대부분은 더 나은 코드를 만드는 데 도움이 될 수 없습니다.
DeadMG 2016 년

3
이론은 어떤 코드를 작성할 수 있고 무엇을 쓸 수 없는지를 아는 기초입니다.

17
이 게시물에는 좋은 조언이 있지만 일부 필드를 시간 낭비로 선언하는 것에 대해서는 너무 독단적입니다. 요즘에는 프로그래밍 작업이 상당히 다양하며 한 작업에 소요되는 시간이 다른 작업에 필수적 일 수 있습니다. 단순히 시간 낭비로 무언가를 기각하기보다는 여러분이 관여 한 발전의 종류를 설명하는 것이 도움이 될 것입니다.
Charles E. Grant

4
지난 몇 년 동안 많은 인터뷰를 해왔으며 오늘날 대학에서 가장 큰 격차는 데이터 구조와 알고리즘을 가르치는 것 같습니다. 두 번째로 큰 차이는 도구가 내부적으로 어떻게 구현되는지 이해하는 것입니다. 제 생각에는 특정 도구를 사용하는 수업은 시간 낭비입니다. 해시 테이블 사용시기와 트리 사용시기를 설명 할 수없는 경우 C ++ 구문을 알 필요가 없습니다.
로봇 고트

5

오픈 코스웨어는 제공 한 코스 목록입니다. 학생이 무엇을 선택했는지 알고 싶다면 MIT (비 OCW) 웹 사이트를 방문하여 실제 프로그램을보십시오. 그들은 무엇이 필요한지와 무엇이 필요한지에 대한 목록을 가지고 있습니다. 여기 그들의 페이지가 있습니다.


나는 그것을 조사하고 있지만 요구 사항이 꽤 간결하다는 것을 알았습니다. 긴 코스 목록은 어디에 있습니까?
Optimus

1
web.mit.edu/catalog/degre.engin.ch6.html 큰 목록입니다. CS는 6.3에 대해 참조한다
stonemetal

고마워요, 이것 또한 도움이 될 것입니다. 커리큘럼이 무엇인지 아는 것이 좋습니다
Optimus

1
지금 버클리에서 EECS를하고 있습니다. MIT EECS 프로그램이 버클리와 같은 것으로 구성되어 있다면, 많은 안내를 얻지 못할 것입니다 : 우리는 짧은 인트로 시퀀스를 가지고 있으며, 최소한의 고급 단계를 수행하는 한 원하는 순서대로 원하는대로 무엇이든 할 수 있습니다. 과정. 나는 그것이 굉장하다고 생각하지만, 당신이 어떤 과정을 수강해야하는지 알아내는 데 도움이되지 않을 것입니다. 나는 같은 결정을 스스로해야했습니다. (교수 고문의 도움을 받았지만, 우연히 그의 조언은 대학원 세미나를받는 것이 었습니다).
Tikhon Jelvis 5

@TikhonJelvis 일단 필드의 범위가 무엇인지, 그리고 어떤 범위를 다루어야하는지에 대한 아이디어가 있다면 배우고 싶은 것과 원하지 않는 것을 선택하는 것이 더 쉽습니다. 나는 토목 공학 대학원생으로서 컴퓨터 과학과 Engg에서 무슨 일이 일어나고 있는지 거의 알지 못합니다. 필드
Optimus

5

http://www.acm.org/education/curricula-recommendations에 링크 된 ACM / IEEE의 2001 컴퓨터 과학 커리큘럼 권장 사항을 사용해보십시오 .

2008 CS 업데이트와 함께.

2001 년 보고서의 17 페이지에는 모든 "핵심"지식에 밑줄을 긋고 여전히 선택 과목을 나열하는 편리한 차트가 있습니다.

학부 프로그램은 이러한 권장 사항에 의해 핵심으로 간주되는 과정조차 포함 할 시간이 없으므로 일부 범주를 함께 묶어 학생들이 선택하도록합니다 (예 : 운영 체제, 프로그래밍 언어 및 소프트웨어 공학) 소프트웨어, 학생들은 트랙을 선택합니다).

CS 학교 웹 사이트에서 거의 모든 학교에 필요한 교과 과정을 찾을 수 있으며 일부 버전이어야합니다.


좋은, 조금 오래된,하지만 여전히 일반 커리큘럼에서 선택해야 할 많은 과목이 핵심으로 간주됩니다. 대기 한 것들이 부족할 경우 더 넓은 범위의 연구를 선택할 수 있습니다. +1.
Optimus

게으른 사람을 위해이 목록에는 다음이 포함됩니다. 이산 구조 (DS) 프로그래밍 기초 (PF) 알고리즘 및 복잡성 (AL) 아키텍처 및 조직 (AR) 운영 체제 (OS) Net-Centric Computing (NC) 프로그래밍 언어 (PL) 인간 컴퓨터 상호 작용 (HC) 그래픽 및 비주얼 컴퓨팅 (GV) 지능형 시스템 (IS) 정보 관리 (IM) 사회 및 전문가 문제 (SP) 소프트웨어 엔지니어링 (SE) 전산 과학 및 수치 법 (CN).
Damien Roche

-4

나는 할 수있다, 내가 가입 제안하고 싶습니다 github.com을부분 학습 과정.

그런 다음 관심있는 실제 응용 프로그램이있는 코드를 검색하고, 직접 복제하고, 작업하고, 코드를 작성하여 알게되고, 결국 소스 프로젝트에 패치를 제출하기 시작할 수 있습니다. , 다운 라인은 관심이있는 오픈 소스 프로젝트에서 작업하고 있습니다.

물론 git에 익숙해 질 것입니다.


5
-1 : 귀중하지만, 그가 알아야 할 컴퓨터 과학의 이론적 측면에 노출 시키지는 않습니다.
Ken Bloom

거기에, 우리는 또한 개인 git repo를 가지고 있습니다. github 주위에 매달려 있으면 더 나은 프로그래머가됩니다
Optimus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.