컴퓨터공학
(♥ 0)
분류
이 학문을 가르치는 학과에 대한 내용은 컴퓨터공학과 문서 참고하십시오.
1. 개요[편집]
電算學(전산학) / Computer Science and Engineering(CSE)
컴퓨터공학(CSE)은 계산(computation), 정보(information) 그리고 자동화(automation) 등 이론적 연구에서부터 하드웨어와 소프트웨어의 계산 시스템 구현에 대한 실질적인 문제에 이르기까지 다양한 주제에 걸쳐 있다. 학문이다.
많은 과학 분야와 비슷하게 컴퓨터과학도 수학과 가장 밀접한 관계를 가지고 있을 뿐만 아니라, 수학에 기초를 둔 과학의 한 분야이다. 컴퓨터과학의 기초에 큰 영향을 미친 수학이 조지 불의 불 대수이다. 불 대수는 이진법을 기반으로 한 대수학으로, 그 외에 체론과 환론 또한 중요한 영향을 미쳤다. 초기의 컴퓨터과학은 쿠르트 괴델과 앨런 튜링 등의 수학자들이 큰 영향을 끼쳤고, 수리논리학, 범주론, 도메인 이론, 대수학과 같은 수학 분야들은 컴퓨터과학과 함께 발전하고 있다.
2. 명칭 및 분류에 대해[편집]
컴퓨터과학이 다루는 것들에 대하여
외국에서는 컴퓨터공학(Computer Engineering)을 컴퓨터과학(Computer Science) 분야 중에서 하드웨어를 다루는 세부 영역의 명칭으로 사용하는데 한국에서는 컴퓨터과학과 같은 뜻으로 자리 잡았다. Stanford의 경우 Computer Science전공에서 Computer Engineering트랙을 제공한다.홈페이지
컴퓨터과학은 우리나라에서 다양한 명칭으로 불린다. 한국에서 이 학문이 처음 소개되었던 1970년대에는 전자계산학 또는 전산학/전산과학이라고 많이 불렸으나 21세기에는 컴퓨터과학, 컴퓨터공학, 정보공학이라고 보통 불린다. 참고로 다른 한자문화권 국가에서는 '컴퓨터과학'을 '정보학/정보과학'으로 번역한다. 유럽에서는 정보학(Informatics)이라는 용어도 자주 쓰인다.
최초의 컴퓨터공학과(전산학과)는 응용수학과의 하위 부분으로 있다가 학문의 발전에 따라 분리된 개념에서 출발하였다. 다시 말해 현재는 '공학' 취급을 받지만 본질적으로 출발은 '수학'의 하위 분야이며 애초에 '컴퓨터'라는 단어 자체가 '계산하는 장치'인 것을 생각하면 전혀 이상한 일이 아니다.
대학에 컴퓨터과학(전산학)전공이 생긴 역사는 길지 않다. 세계 최초의 공식적인 'Computer Science' 학위는 1953년 영국 케임브리지 대학교에서 개설되었고, 미국 내에서는 1962년 퍼듀 대학교의 석박사과정이 그 시초인데, USC나 MIT와 같은 다른 학교들은 1968년에서 1975년 정도는 되어야 컴퓨터 과학(Computer Science)이나 컴퓨터 공학(Computer Engineering)을 개설했다. 이외에 응용수학과 또는 수학과 등의 한 부분으로 소속되어있다가 학문의 발전에 따라 분리된 경우도 많다. 대표적으로 하버드 대학교의 컴퓨터과학과(Computer Science)는 1984년 응용수학과에서 분리되었으며, 우리나라의 고려대학교와 서울대학교도 각각 수학과, 응용수학과에 뿌리를 두고 있다.
그런 이유로 컴퓨터와 관련한 저명한 인물 중엔 의외로 'Computer Science' 출신 인물이 적다. 빌 게이츠는 하버드 대학교의 'Computer Science'의 전신인 응용수학과 출신[2] 이고, 스티브 잡스는 아예 리드 칼리지의 철학과 출신이며, 스티브 워즈니악이 UC 버클리의 'Electrical Engineering and Computer Science(EECS)' 전공으로 Computer Science 출신이라 볼 수 있다. 일반적으로 학위나 합격증 또는 관련 서류에 "Computer Science"라는 용어가 나오려면 70년대 이후여야 하고, 이에 해당하는 사람은 80년대 학번인 제프 베이조스나 2000년대 학번인 마크 저커버그와 같은, 컴퓨터 관련 산업의 2세대쯤 되는 이들이다.
우리나라에선 숭실대에 처음으로 생긴 70년대 이후부터 90년대 초까지는 전산학과, 전산과학과, 전자계산학과, 정보과학과(Information Science) 정도로 불렸다. 하지만 2000년대 이후 카이스트를 제외하면 전산학과로 부르는 대학은 없다. 전산, 즉 전자계산기는 컴퓨터(Computer)의 번역명이므로 전산학, 전산과학은 사실 Computer Science(컴퓨터과학)의 번역어에 불과하지만, 국내에서는 어감의 낡은 이미지 문제로 컴퓨터공학이란 명칭이 그 자리를 거의 대체했다.
현재는 '컴퓨터공학'이라는 표현이 보편적이며, 이외에도 컴퓨터과학, 정보학, 정보과학, 정보공학 등의 명칭을 사용한다. 2020년대 들어선 소프트웨어 산업 및 인공지능의 발달에 따라 '(응용)소프트웨어학과', '인공지능학과' 등의 하위 학과로 분파된 경우도 종종 보인다.
컴퓨터공학과 종종 혼용되는 컴퓨터과학(영어: Computer Science, 컴퓨터 사이언스) 또는 전산학은 계산(computation), 정보(information) 그리고 자동화(automation)에 대한 학문이다. 컴퓨터과학은 알고리즘, 계산 및 정보에 대한 이론적 연구에서부터 하드웨어와 소프트웨어의 계산 시스템 구현에 대한 실질적인 문제에 이르기까지 다양한 주제에 걸쳐 있다.
컴퓨터 과학의 분야는 이론적인 분야와 실용적인 분야로 나눌 수 있다. 예를 들어, 컴퓨터 그래픽스나 계산 기하학은 보다 구체적인 응용을 강조하는 반면, 계산 이론은 추상적인 계산 모델과 그것들을 사용하여 해결할 수 있는 일반적인 종류의 문제에 관한 것이다. 알고리즘과 데이터 구조는 컴퓨터 과학의 심장이라고 불려왔다. 프로그래밍 언어 이론은 계산 프로세스의 설명에 대한 접근 방식을 고려하는 반면, 컴퓨터 프로그래밍은 복잡한 시스템을 만들기 위해 그것들을 사용하는 것을 포함한다. 컴퓨터 구조는 컴퓨터 구성요소와 컴퓨터 작동원리를 설명한다. 인공지능은 인간과 동물에게서 발견되는 문제 해결, 의사결정, 환경 적응, 계획, 학습과 같은 목표 지향적인 과정을 종합하는 것을 목표로 한다. 디지털 컴퓨터는 다양한 정보 과정을 시뮬레이션할 수 있다. 컴퓨터 과학의 근본적인 관심사는 자동화할 수 있는 것과 없는 것을 결정하는 것이다. 컴퓨터 과학자들은 보통 학술 연구에 집중한다. 튜링상은 일반적으로 컴퓨터 과학에서 가장 뛰어난 상으로 인정받고 있다.
미국에서는 전기전자공학과 컴퓨터과학을 합쳐 EECS(Electrical Engineering and Computer Science)학부로 운영하기도 한다.(MIT, UC 버클리가 EECS로 되어있는 대학이다.)
3. 오해[편집]
흔히 컴퓨터공학(Computer Science and Engineering)을 프로그래밍을 배우는 학문 내지는 컴퓨터의 기계적 특성에 대해 다루는 학문이라고 생각하지만, 이러한 것은 의류의상학과를 바느질을 배우는 학과, 기계공학을 용접하는 곳이라고 생각하는 것과 같다. 컴퓨터공학은 컴퓨터공학(Computer Science and Engineering)이라는 독립적인 학문 즉, 계산기계(computer)에 대한 '개념'과, 그 '응용'에 대한 본질적인 연구를 담당하는 학문이다. 우리가 흔히 쓰는 PC, 스마트폰 등은 컴퓨터공학에서 배우는 개념들을 구체화한 부산물일 뿐이다.천문학이 망원경에 관한 학문이 아니듯, 컴퓨터과학(Computer Science)은 기계에 관한 것이 아니다. 컴퓨터과학은 수학과의 본질적인 통일성이 있다.
컴퓨터과학(Computer Science) 전공 학생이 코딩에 능숙하긴 하지만 그것은 어디까지나 학생이 학습한 개념을 외부에 표현하기 위해 배우는 것에 불과하다. 영문학과나 영어교육과 학생이 영어를 잘 하긴 하지만, 오직 '영어'만을 잘하기 위해 존재하는 학과가 아닌 것처럼 컴퓨터공학과에서 '프로그래밍'이란 하나의 수단에 불과하다.
MIT EECS 교수인 할 아벨슨(Hal Abelson)은 이를 빗대어 컴퓨터과학(Computer Science)이라는 이름이 이 분야를 소개하기에 나쁜 이름이라고 한 바 있다. 이 학문을 컴퓨터과학(Computer Science)이라고 부르는 것은 마치 물리학을 입자가속기과학, 생물학을 현미경과학이라고 부르는 것과 마찬가지라 생각할 수 있으며 컴퓨터 다루는 법을 가르치는 학문으로 오해하기 쉽기 때문이다. 사실 이러한 점에선 1970년대 우리나라에 처음 컴퓨터공학 개념이 소개되었을 때 쓰이던 '전산학'이나 '전산과학'이 좀 더 오해를 불러 일으키지 않는 명칭이겠지만, 어감이 낡았다는 이유로 컴퓨터공학(과학) 명칭이 널리 쓰이고 있다.
4. 분류[편집]
4.1. 이론 컴퓨터 과학 / 수학[편집]
이론 컴퓨터 과학 또는 이론 전산학(영어: theoretical computer science)은 컴퓨터과학 및 수학의 한 분야로, 컴퓨터나 계산 과정의 추상적이고 근본적인 원리를 연구하는 학문이다. 컴퓨터과학의 이론적 토대는 수학에 기반을 두고있고, 하위 분류 중 가장 큰 줄기로 계산 이론(計算理論, Theory of computation)이 있으며 계산이론은 크게는 계산 복잡도(Computational complexity) 이론와 계산 가능성 이론(computability theory) 이론 2가지로 분류한다. 컴퓨터 관련 학문을 제대로 공부한다는 것은 수학적 논리를 공부한다는 것과 같은 말이다. 컴퓨터를 다루는 언어와 기법이 모두 수학이기 때문이다. 컴퓨터학과의 경우 색다른 커리큘럼의 수학을 배울 수 있다. 특히 다른 공학분야와는 다르게 공식을 암기하여 풀수있는 문제풀이를 익히는 게 아니라 증명에 쓰이는 논리적 사고능력을 가르는 것이 중요하다.[3] 선형대수, 이산수학, 확률론, 통계학, 정수론, 미분기하학 쪽에 치중해서 배우게 되는데...
compute의 뜻이 계산이라는 의미인 것처럼 컴퓨터과학의 이론적 토대는 수학에서 비롯되었기에 수학에 기반을 두고있고, 컴퓨터 관련 학문을 제대로 공부한다는 것은 수리논리학을 공부한다는 것과 다를 바 없다. 학부 수준에서도 어느 정도 수학 실력, 특히 다른 공학분야와는 다르게 공식을 암기하여 풀 수 있는 문제풀이를 익히는 게 아니라 증명에 쓰이는 논리적 사고능력을 가르는 것이 중요하다. 오늘날 컴퓨터과학은 그 난해한 순수수학 중에서도 가장 순수한 수리논리학, 수학기초론과 메타수학을 연구하던 철학자들이 만든 학문이라는 것을 잊으면 안된다.[5]
대개의 대학교에서는 컴퓨터학과 전공이수 과목에 미분적분학, 선형대수학, 정수론, 이산수학, 통계학, 수치해석 등이 들어간다. 알고리즘, 자료구조등 컴퓨터과학 관련 서적을 보면 처음에는 단순한 사칙연산부터 시작해 나중에는 점점 복잡한 수식이 나오는 것을 알 수 있다.
가끔 학교 수학 성적은 낮은데도 컴퓨터과학 지식과 프로그래밍 실력이 나쁘지 않은 사람이 존재하는데 실제로는 입시, 시험 같은 곳에 필요한 공식이나 문제풀이를 익히지 못한 것일 뿐, 응용과 추리 같은 것을 바탕으로 하는 사고력은 좋은 경우이다. 이런 사람은 적성이 있기에 대학수학 또한 제대로 공부하면 잘 할 확률이 높다.
분야를 막론하고 수학적인 기호들을 읽는데 능숙하지 못하거나, 수학적인 논리에 미숙하다거나 하면 전산학을 제대로 공부하기 매우 힘들다. 시스템 계열에서도 수학적 증명이 등장하는 마당에[6] , 웬만해서는 대학에서 강제 필수인 기초 이산수학, 알고리즘 디자인/분석 및 복잡도 이론 등으로 가면 더욱 그렇다. 특히나 컴퓨터 그래픽이나 온갖 기계학습류[7] 분야로 가면 모든 분야의 전산학자들이 기본적으로 우려 먹는 이산수학 알고리즘들은 물론이고 공대생들이나 물리학도들이 흔히 써먹는 선형대수학이나 다중미적분, 미분기하학 등도 아주 많이 쓴다. 특히 기계학습의 경우, 보다 이론적인 쪽으로 가면 측도론을 쓰기 시작한다. 하다못해 프로그래밍 언어론을 공부하는 데에도 쓰인다. 프로그래밍 언어에 정의되어 있는 온갖 데이터 타입들에 대한 연산 규칙 및 증명 등을 해야할 때 필요하다.
학부 졸업 후 일반 기업에 취직을 하는 것이 아닌 석박사 학위 취득을 위한 대학원[8] 에 입학하여 세부 전공으로 이론 전산학을 선택할 경우 대학 미적분학, 미분방정식, 통계학, 확률론, 수치해석학, 선형대수학, 이산수학, 정수론은 기본실력으로 깔고 가야 고생이 덜하며 심지어 시뮬레이션 영역까지 접근할 경우 미분기하학, 동역학, 유체역학이 필요할 수도 있다.
대학원, 교수/학자/연구원 등의 레벨로 가면, 하다 못해 시스템 계열 분야라도 더욱 수학을 깊게 공부해 본 사람들이 많다. 특히 이름 있는 프로그래머, 전산학자들은 열이면 열 수학과나 수학을 많이 쓰는 전공 출신이다.
아래 예시에 특별히 적혀있지 않는 한 학사나 석사에만 이름을 올린 사람들은 최종적으로 전산학 박사학위를 취득했다.
수학 혹은 응용수학
- 박사: 앨런 튜링, 존 폰 노이만, 스티븐 쿡, 리처드 카프, 래즐리 램포트, 로버트 타르잔, 존 매카시, 도널드 커누스
- 석사: 켄 톰슨[9] , 마이클 I. 조던[10]
- 학사: 데니스 리치[11] , 바바라 리스코프, 마테이 자하리아[12] , 데이비드 브럼리
물리학
- 박사: 에츠허르 다익스트라, 앤드루 태넌범, 톰미 자아콜라
- 석사: 이홍락[13]
- 학사: 존 F. 캐니[14] , 데니스 리치[15]
전기공학
- 이산수학
- 자료구조론 : 컴퓨터과학에서 컴퓨터의 메모리와 CPU를 활용해 데이터를 구조적으로 처리하는 순서와 표현하는 방식을 다루는 이론으로 알고리즘의 분류에 포함된다.
- 알고리즘론: 알고리즘의 시간 복잡도및 공간 복잡도를 주로 다룬다. 시간 복잡도의 경우 처리해야 하는 데이터가 많아질수록 필연적으로 알고리즘의 실행이 끝나는 속도가 느려지는데, 늘어나는 처리 데이터에 비례해서 얼마나 알고리즘의 실행 속도가 느려지느냐가 관건이다. 예를 들어, n 만큼의 데이터를 처리해야 할때 [math(> {\mathcal O}(n^{2}))] 복잡도를 가진다면, 처리해야 하는 데이터의 양에 제곱을 한 만큼 비례해서 알고리즘이 느려진다. 공간복잡도의 경우 처리해야하는 데이터에 비례해서 알고리즘이 얼마나 많은 양의 메모리를 필요로 하는가가 관건이다.
- 정보이론/부호이론: 정보이론은 정보의 양을 측정하고 최적화된 코드에 대한 기대 길이를 측정하는 것인데, 머신러닝에서는 확률분포를 알아내는데 쓰인다. 부호이론의 경우 유한체를 이용해 순환 코드(cyclic code)와 BCH코드를 다룬다.
- 정수론: 암호 분야에 사용 된다.
- 집합론
- 그래프 이론
- 조합론
- 확률론
- 수리논리학: 분야를 가리지 않고 등장하기 때문에 중요하다. 일부 학자들은 비표준 논리학, 오토마타, 계산이론, 증명 이론까지 다룬다.
- 도메인 이론(domain theory)
- 수치해석학
- 기하학
- 이산/계산 기하학 : 컴퓨터를 이용해서 물체를 어떻게 표현 할 할지 연구하는 분야이다. 컴퓨터 그래픽에서 대표적으로 많이 사용하고 최근에는 컴퓨터 비전, 기계학습, 인공지능 분야에서도 사용된다.
- 이산 미분 기하학
- 정보기하학
- 정보이론
- 양자정보과학, 양자컴퓨팅[18] : 양자 컴퓨팅은 컴퓨터 과학, 물리학, 수학의 여러 측면으로 이루어진 종합적 분야로서 양자역학을 활용해 기존의 컴퓨터보다 빠르게 복잡한 문제를 해결할 수 있다.
- 전산논리학(logic in computer science): 전산논리학(logic in computer science)은 기호 논리학의 확장으로서 추론 과정을 컴퓨터의 계산 능력을 이용해 진행하는 것을 함께 다룬다. 컴퓨터를 이용한 추론 과정은 자연어로 표현된 명제에 대한 추론 과정과 궁극적으로는 차이가 없다. 그러나 자연어로는 현실적으로 불가능한 복잡한 추론 과정을 다룰 수 있고, 인간이 직접 다루기에는 너무 방대한 분량의 명제들도 한꺼번에 다룰 수 있다.
- 자동정리증명 : 자동정리증명(自動定理證明, Automated theorem proving, ATP) 또는 자동 연역(Automated deduction)은 자동 추론 연구의 한 분야로, 수학적 정리들을 컴퓨터 프로그램을 통해 형식적으로 증명하는 것, 또는 그에 대한 연구를 가리킨다. 수학적 증명에 대한 자동화된 추론은 컴퓨터 과학 발전의 주요 원동력이었다.
위와 같이 수학 전반+α을 다루기 때문에 수학 전공자들의 복수전공에서 다른 공학 분야보다 용이하다. 실제로 이쪽은 교수부터 수학 전공자인 경우가 많다. 다만, 한국에서는 거의 죽은 분야에 가깝다. 한국의 경우, 교육열이 입시에 쏠려있어, 고교수학에 매우 강하며 실제 대학에서도 이런 경향이 이어져 고교 때 배우는 미적분을 많이 다루는 해석학과 같은 분야쪽에 쏠리는 경향이 강하다. 비표준 논리학은 수학에서 해석학과 거리가 가장 먼 분야로 볼 수 있으며, 덕분에 한국에서 이쪽 전공 교수 자체가 별로 없다. 다만 철학과까지 범위를 넓혀보면 그나마 숫자가 좀 늘어나긴 한다. 즉 철학과에도 수리 논리학은 물론이고, 비표준 논리학도 건드려본 논리학 전공 교수들이 있다. 참고로 논리학은 원래 철학의 한 분야지만, 국내 수학과 내에 논리학 전공 교수가 많지 않듯이, 국내 철학과에서도 논리학 전공 교수가 많진 않다. 당연히 컴퓨터과학에서도 마찬가지. 국내는 이쪽 관련 인프라가 열악하므로 이쪽을 전공하고 싶다면 해외로 나가는 수밖에 없다. 하지만 최근 대학에서 이론 전산학을 연구하는 교수들이 조금씩 늘어가고 있다.[19]
4.1.1. 계산이론[편집]
계산이론이란 컴퓨터를 이용한 작업의 가장 근본적인 면인 '계산의 자동화'에 초점을 맞춘 분야로, 컴퓨터를 이용해 각종 계산을 얼마나 빨리(계산복잡도), 얼마나 효율적으로 계산을 가능하게 할 것인지(계산가능성)를 수학 등을 활용해 모델링하는 것이다.
- 계산복잡도 이론
- 계산가능성 이론
- 오토마타 이론
4.1.2. 프로그래밍 언어론, 형식언어[편집]
언어학, 수학, 컴퓨터과학의 학제적 연구 분야이다. 기본적으로 놈 촘스키의 생성문법적 관점에서 의미론과 통사론을 배우는 것이며, 여기서 파생되는 다양한 프로그래밍 언어, 대수학(정확히는 환론과 군론, 카테고리 이론), 오토마타 이론, 컴파일러의 구현법 등을 추가로 배우게 된다. 컴파일러 작성을 통한 언어 구현을 중시하며 그에 관련된 이론은 맛보기로 배우는 경우도 있는가 하면, 아예 관련 이론만 빠삭하게 들이파는 경우도 있다. 만약 PL 교수가 학생들에게 '프로그래밍 언어론' 을 가르치고자 한다면, 보통 수업 시간에 증명을 상당히 많이 다루게 된다. 반면, 교수가 학생들에게 그냥 다양한 언어들의 특성을 가르치게 된다면, 그런 느낌은 별로 들지 않는다. 만약 후자면 프로그래밍 경험이 많으면 잘 따라갈 수 있지만, 그렇지 않고 이론, 증명 위주로 과목을 가르치게 되면, 논리적인 사고가 부족한 학생들은 죽을 맛이 된다(...)
자세한 내용은 Programming language theory 문서를 참고하십시오.
- 형식언어
- 프로그래밍 언어론
- 유형 이론 : 수학, 논리학, 컴퓨터 과학에서 유형 이론(類型理論, 영어: type theory) 또는 유형론은 유형의 개념을 사용하여, 합법적으로 사용 가능한 논리식에 제한을 두는 논리 체계들의 총칭이다. 최초의 유형 이론은 버트런드 러셀이 만든 분지 유형 이론이다.
- 함수형 프로그래밍
- 컴파일러 이론
- 프로그램 분석(program analysis) : 프로그램 분석(program analysis)은 자동으로 컴퓨터 프로그램의 동작을 분석하는 일이다. 프로그램 분석 방법은 크게 정적 프로그램 분석과 동적 프로그램 분석으로 나눌 수 있다.
4.1.3. 확률론, 통계학[편집]
학교에 따라서는 고급 통계학을 추가적으로 가르치는 곳도 있는데 대학원에 진학할 생각이 있다면 반드시 배워두자. 절대 손해 안 본다. 특히 인공지능과 이것을 응용하는 분야(영상처리, 음성처리, 정보검색 등), 자연어처리, 네트워크 프로토콜 같은 분야를 염두에 두고 있다면 확률론, 통계학은 무조건 필수이므로 학부 때 미리 빠삭하게 해 놓으면 상당히 좋다. CS는 세부 연구분야에 따라 다르지만 대학원 석,박사 과정을 진학하면 정수론, 통계학, 선형대수 등 기본적으로 수학 실력이 어느 정도 필요한 경우가 많다. 거의 Computer Science 전 영역에서 활용되나 특히 데이터 과학, 인공지능에서 집중 활용된다.
4.2. 하드웨어[편집]
아래 컴퓨터 하드웨어[20] 관련 과목들과 운영체제, 파일 시스템, 컴파일러등을 공부 할 경우, CPU, 메모리, 보조 기억 장치가 포함된 폰노이만 구조의 실물 컴퓨터 1대 설계가 가능하다. 외국에는 홈브루 컴퓨터 운동이 있다.
반도체 칩에 대해 이야기 할때 관련 학과로는 보통 전기전자공학과를 많이 떠올리지만, 프로세서 아키텍처[21] 디자인은 컴퓨터 과학자들이 많이 주도한다.
4.2.1. 전자공학[편집]
4.2.2. 컴퓨터 구조론[편집]
4.2.3. 신호 처리 및 제어[편집]
컴퓨터를 추상화 하다보면 결국 입력 신호를 출력 신호로 처리하는 시스템임을 알 수 있다. 음성 및 영상 등 멀티미디어 신호에 대한 신호처리, 코덱 등을 통한 정보 및 데이터의 압축 및 전송 기법, 음향 및 영상의 변조 및 특징 추출 등에 대한 내용을 배운다. 제어 또한 결국 일종의 신호처리이기 때문에 그 맥락을 같이한다.
- 신호 및 시스템
- 디지털 신호처리
- 오디오 신호 처리
- 뇌-컴퓨터 인터페이스
- 컴퓨터 비전
- 정보이론 및 압축이론(부호화이론)
- 제어
- 디지털 제어이론
- 로보틱스
- 강화학습 : 오래전부터 움직이는 모터, 로봇, 드론, 자율이동체 등 이 원하는 성능을 갖도록 고전적인 제어공학이 발전되어 왔다. 점차 시스템이 복잡해지고, 원하는 성능도 높아지면서, 고전적인 제어공학으로 해결하기 힘든 현실적인 제어 문제가 많이 등장하였다. 최근 기존 제어와 비슷한 피드백 형식으로 시스템을 학습하고 원하는 성능을 얻어내는 강화학습은 이런 도전적인 제어 문제 해결에 큰 역할을 하고 있다.
4.2.4. 임베디드 컴퓨팅 / 마이크로프로세서(CPU) [25][편집]
임베디드 시스템이란 컴퓨터 프로세서나 메모리, 입출력 장치를 조합해 전자기기나 하드웨어, 기계 부품등을 컴퓨터적으로 제어 가능하게 해주는 것을 말한다. 임베디드 컴퓨팅은 이러한 임베디드 시스템에 사용되는 마이크로프로세서를 공학적으로 설계한다.
4.2.5. 컴퓨터 하드웨어 응용[편집]
4.3. 소프트웨어[편집]
4.3.1. 소프트웨어 개발방법론[편집]
요구공학, 분석, 설계, 구현, 테스트, 유지보수, 형상관리, 개발 방법론, 품질 관리, 재사용성 등 소프트웨어 개발에 있어서 체계적인 접근 방법에 대해 공부하게 된다. 설명은 적지만 2010년대 후반 이후 SW엔지니어에게 중요한 능력으로 요구받는 분야이니 관련이론과 Git, GitHub같은 도구을 잘 공부해놓자. 좋은 it기업 취업에 있어서 중요한건 얼마나 클론코딩을 많이 했고 프로젝트를 많이 했냐보단 적게 했더라도 소프트웨어공학적인 방법론에 맞추어 유지보수, 배포, 버전관리, 피드백을 실행했느냐이다.
4.3.2. 계산과학[편집]
위의 계산이론 분야와는 별개로 계산과학이라는 분야가 따로 있다. 계산과학은 다양한 문제가 주어졌을 때 이를 수치해석과 컴퓨터과학을 이용해 해결하는 분야이며, 국내 대학들의 경우 서울대에서는 계산과학을 연합전공으로 운용중이고, 연세대에서는 대학원에서 운용중이다.
부경대에서는 과학컴퓨팅학과라는 이름으로 운용중이다.
4.3.3. 컴퓨터 그래픽스[편집]
컴퓨터 그래픽스는 컴퓨터 기술을 사용하여 시각적 및 기하학적 정보를 다루는 분야이다. 그 유명한 "머릿글자 B - 관악최속전설"도 그래픽스 과목 숙제로부터 기원한다. 어느 정도의 미적분 실력과 선형대수학 실력만 있어도 수업에서 배우는 내용을 따라하고 숙제를 풀어내는 데에는 별 문제가 없겠지만, 2차원 또는 3차원 세계의 내용을 컴퓨터 상으로 표현하는 것이기 때문에 보다 근본적으로 이해하려면 기하광학과 미분기하학[26] 에 대한 지식이 필요하다.
게임 엔진은 해당 분야와 연관이 깊으며, 주로 물리 세계를 표현할 일이 잦기 때문에 물리학, 특히 고전역학적 지식이 도움이 될 수 있다. 게임 프로그래머가 되고자 한다면 해당 분야를 공부하는 것이 도움이 될 수 있다.
최근에는 딥러닝과 컴퓨터 비전 기술을 활용한 연구들이 많이 진행되고 있다.
4.3.4. 운영체제[편집]
운영체제/시스템 프로그래밍 파트는 운영체제와 UNIX, Windows API/MFC 프로그래밍 등 시스템에 종속적인 프로그래밍을 배운다. 운영체제는 오만가지 부속과 모듈들이 오만가지 방법으로 얽혀있어서 디버깅이 매우 힘들며, 따라서 관련 프로그래밍 작업에 생각보다 아주 많은 시간을 소비하게 된다. 운영체제의 경우 이론만 배우는 경우가 많으나 대한민국 공대 중에서 PintOS[27] 나 xv6를 직접 코딩해보는 학교로 서울대, KAIST, GIST, UNIST, 포스텍, 성균관대, 한양대, 광운대, 서강대, 숭실대 등이 존재한다. 부산대, 홍익대에서도 원한다면 xv6와 GeekOS, 단국대에서는 GeekOS를 코딩 해 볼 수 있다. 오픈 소스 운영체제인 리눅스 커널 소스 코드를 직접 수정/컴파일/설치하여 돌려보는 학교도 있다. 최근 주요 연구토픽으로 가상머신, 클라우드 컴퓨팅 연구가 있다.
4.3.5. 데이터베이스[편집]
데이터에서 더 나아가 파일을 다루는 파일처리론(이론)을 배우고 더 나아가 파일 시스템구조에 대해 배운다. 파일 시스템이 발전하면 데이터베이스론이 되며, 최근에는 정보를 처리하는 방법 중 블록체인, 데이터 마이닝, 빅데이터 기술도 각광을 받고 있다.
4.3.6. 통신 및 컴퓨터 네트워크[편집]
네트워크, 클라우드 컴퓨팅 등이 있다. OSI 모형 및 TCP/IP에 따른 분류를 기준으로 각각의 구조를 배우기도 하며 네트워크 프로토콜을 코드로 구현하는 과제를 시키는 대학도 있다.
4.3.7. 정보보안[편집]
정보보안, 인터넷 보안, 네트워크 보안, 사이버안보 등의 이름으로 개설된다. 최근엔 정보보안학과로 독립하기도 한다. 지금까지 배웠던 것들을 모두 싸그리 뭉쳐서 응용하는 성격이 강하며, 여기에 더해 사회공학적 기법도 대략적으로 가르치는 경우도 있다.
4.3.7.1. 암호학[편집]
이산수학 특히 정수론, 선형대수학을 선행해야 한다. 블록암호, 공개키 암호, 해시 함수, 난수생성, 전자서명를 다룬다. 이런 학문은 보통 다국적 IT기업, 군사기관, 경찰기관, 정보기관의 투자를 받아서 연구되기도 한다. 주로 데이터 보안에 많이 활용된다.
4.3.8. 인공지능, 신경과학 [편집]
더 큰 범주에서는 인공지능, 인지과학(인지컴퓨팅), 신경과학, 로보틱스등과 학제간 연구를 진행하는데 컴퓨터와 연계하여 인간의 지능(뇌)을 구현하는 분야들이다. 인간의 심리를 활용하기도 한다. 또한 빅데이터와도 매우 연관이 깊다.
- 인공지능(Artificial Intelligence)
- 인공신경망(Artificial Neuron Network): 기계학습 분야에서 연구되고 있는 학습 알고리즘들 중 하나. 주로 패턴인식에 쓰이는 기술로, 인간의 뇌의 뉴런과 시냅스의 연결을 프로그램으로 재현하는 것이다. 간단하게 설명하자면 '가상의 뉴런'을 '시뮬레이션'한다고 볼 수 있는 것으로서(실제 뉴런의 동작구조와 완전히 같은 것은 아니다.), 일반적으로 신경망 구조를 만든 다음 '학습'을 시키는 방법으로 적절한 기능을 부여한다. 현재까지 밝혀진 지성을 가진 시스템 중 인간의 뇌가 가장 훌륭한 성능을 가지고 있기 때문에 뇌를 모방하는 인공신경망은 상당히 궁극적인 목표를 가지고 발달된 학문이라 볼 수 있다. 역시 자세한 내용은 기계학습 문서를 참조. 2020년대에 들어서는 컴퓨터의 계산 능력이 무서울 정도로 발전하고 있고, 그에 따라 쏟아지는 데이터의 양과 종류도 많아지고 있어 비정형 데이터[29] 를 처리하는 능력이 뛰어난 인공신경망 기술이 모든 인공지능 기술 중에서 가장 각광받고 있고 앞으로도 더 각광받게 될 기술로 대우받고 있다. 이쯤되면 인공지능에 관심이 많은 사람들은 눈치를 쳤겠지만, 수많은 인공신경망을 연결해서 계층 형태로 겹겹이 쌓은 인공신경망을 심층 인공신경망(Deep Neural Network)이라고 부르며, 이게 바로 우리가 흔히 알고 있는 딥러닝이다.
- 계산신경과학(Computational Neuroscience): 수학, 컴퓨터과학을 활용하여 신경과학을 연구하는 분야를 계산신경과학이라 부른다. 쉽게 말해 뇌의 신경지도를 만드는 분야다. 그래프와 네트워크 이론을 통해 뇌신경의 연결 구조를 파악하고, 수학적으로 모델링하여, 시뮬레이션하는 것이 계산신경과학의 목표다. 인공신경망(artificial neural network)과 이를 기반으로 한 각종 파생 기계학습 알고리즘(딥 러닝deep learning과 같은…) 역시 계산신경과학의 한 영역이다.[30]
- 계산학습이론(Computational Learning Theory): 기계학습과 계산이론이 결합된 분야.
- 인공지능 가속기
- 뉴로모픽 컴퓨팅(Neuromorphic Computing)
- 유전 알고리즘(Genetic Algorithm): 자연의 진화 과정, 즉 어떤 세대를 구성하는 개체군의 교배(CrossOver)와 돌연변이(Mutation)과정을 통해 세대를 반복시켜 특정한 문제의 적절한 답을 찾는 것. 대부분의 알고리즘이 문제를 수식으로 표현하여 미분을 통해 극대/극소를 찾는 것이 반해, 유전자 알고리즘은 미분하기 어려운 문제에 대해 정확한 답이 아닌 최대한 적합한 답을 찾는 것이 목적이다. Evolutionary Algorithm(진화 알고리즘)이라는 이름으로 불리기도 한다.
- 인공생명체(Artificial Life): 말 그대로 프로그램에 단순한 인공지능이 아닌 실제로 살아있는 유기체처럼 스스로 움직이고 생활하기 위한 능력을 부여하는 것. 실제 생명체를 갖고 실험하기에는 너무 시간이 오래걸리기 때문에 가상의 시스템(환경)을 통해 생명체에 대한 연구를 하기 위한 목적이다.
- 로보틱스(Robotics)
4.3.9. 자연어 처리[편집]
- 자연어 처리: 컴퓨터가 인간의 언어를 알아들을 수 있게 만드는 학문분야. 인공지능의 하위 분야로, 인간의 언어를 분석하고 해석하여 처리하는 인공지능이 세분화되면서 생긴 학문 분야. 흔히 우리가 아는 말하는 컴퓨터 및 인간과 대화하는 컴퓨터 관련 기술이 이쪽에 속한다. 언어학, 컴퓨터과학, 인공지능, 전산언어학(Computational Linguistics)의 연구 분야이며, 자연어를 컴퓨터로 해석하고, 의미를 분석하여 이해하고, 자동으로 생성하는 것 등에 관련된 분야다. 이 분야의 하위 분류로 정보 추출, 자동 교정, 대화 시스템, 기계 번역 등이 있다.
4.3.10. 코딩[편집]
"display: none; display: 문단=inline"를 참고하십시오.
"display: none; display: 문단=inline"를 참고하십시오.
컴퓨터공학과에서의 프로그래밍 언어는 사실상 망치, 끌과 같은 도구이다. 전공과정에서 들어야 하는 '도구'로서의 언어 수업은 C/C++정도로 1학년때 마무리하며, 프로그래밍 언어 활용에 대한 세부적인 접근이나 흔히 현업에서 사용하는 프레임워크 활용에 대한 교육은 잘 하지 않는다. 수학과 전산학이론을 정확히 숙지하고 더 나아가 실제 검증하거나 구현해 보는 것에 학부 커리큘럼이 맞춰져 있다.
물론 과제 등에 코딩 실력이 필요한 것은 사실이므로, 이쪽에 취미가 있는 학생이라면 굉장히 수월하게 커리큘럼을 이수할 수 있지만, 그것도 어디까지나 이론에 대한 습득이 진행되었을 때의 이야기다. 상위권 대학으로 갈수록 코딩은 대부분 과제로 하고 강의시간에는 수학, 전산학 이론을 다룬다.[31][32] OS,컴파일러 등 과제가 독학으로 커버하기 힘든 영역에까지[33] 이르게 되면 누구나 평등하게 머리를 쥐어짜게 된다(…).따라서 프로그래밍에 재능이 있는 학생이라도 대학 생활 내내 좋은 성적을 유지하려면 상당한 노력이 필요하다. 컴퓨터과학을 공부하다보면 알겠지만, 코딩에 능숙하다고 반드시 좋은 컴퓨터과학자(전산학자)가 되는 것은 아니다. 그렇지만 나중에 논문을 쓰거나 연구를 할때 수학적인 증명 혹은 결과물 구현으로 결국 결론이 나므로 코딩 또한 중요하다. 또한 시뮬레이터 도구 또한 C/C++/매트랩 등으로 되어 있는 경우가 많아 코딩이 중요하다.
반대로 별 생각 없이, 예를 들어 '컴퓨터는 많이 해봤고 게임 좋아하니 해봐야겠다' 같은 생각으로 입학할 경우 지옥을 맛보게 된다. 물론 근래에는 기초교육과정에서도 간단한 코딩정도는 가르쳐주므로 이정도까지 컴공을 오해하는 경우는 적지만, 불과 2010년대까지만 하더라도 신입생 중에 이런 경우가 적지 않았다. 여지껏 해왔던 내신, 수능공부와는 방향성이 상당히 다르기 때문에 오히려 포텐이 터지는 경우도 있고, 반대로 우수한 고등학교 시절 성적을 뒤로한 채 적응 못하고 전과 혹은 반수의 길로 빠지는 경우도 있다.
해커가 되겠다면 해킹툴을 다뤄서 툴키디가 되는 게 아니라 보안이론이나 암호학, 해킹기법에 대해 공부한 뒤 직접 자신만의 툴을 만들 수 있어야 한다. 문서 참조.[34]
게임 프로그래머 등 게임 개발자로 활동하고 싶다면 게임을 즐기거나 랭킹 올리는데 시간을 쏟는 게 아니라 당연히 수학,물리학, 전산학에 대한 전반적인 지식을 쌓아야한다.
쉽게 말해서 전 세부 영역에 걸쳐 코딩은 기본으로 깔고가야한다는 얘기다.
실력이 상당히 쌓일 경우 다른 사람이 작성한 소스코드가 공개된 소프트웨어인 오픈소스에 분석, 수정, 새로운 아이디어 제안도 가능하다.
4.3.11. 금융공학[편집]
인공지능, 데이터과학이 발전하면서 금융과 경제 분야에서 컴퓨팅의 중요성이 높아지고 있고, 실제로 인공지능을 이용해 주가 예측 프로그램이나 자동 주식 매매 프로그램을 만든다든가, 빅데이터를 이용해 금융 및 회계업무 처리를 효율적으로 만들기도 한다.
4.3.12. HCI[편집]
- 인간-컴퓨터 인터랙션(Human-Computer Interaction)
인간-컴퓨터 상호작용을 기반으로 인간 삶을 컴퓨팅 기술이 더 낫게 만들도록 하는데 중점이 맞춰져 있다. 앞서 설명한 인공지능과 연계하여 연구되기도 한다. 관련하여 국내에서 학부과정 컴퓨터학과에서 크게 다루는건 카이스트밖에 없다.
- 그래픽 인터페이스 연구
- 유비쿼터스
- 사물인터넷
- 모바일 디바이스
- 웨어러블 디바이스
- 앰비언트 컴퓨팅(ambient computing)
- 소셜 컴퓨팅: 인터넷 환경을 통해 이루어지는 인간들의 커뮤니케이션과 사회 현상을 사회과학적으로 분석하고, 전산학을 이용해 문제해결법을 제시한다. 관련하여 국내에서 이를 컴퓨터학과 학부 교육과정에서 크게 운용하는 대학은 카이스트밖에 없다.
5. 관련 기관, 과목[편집]
5.1. 튜링상[편집]
ACM(Association for Computing Machinery, 계산기협회)에서 컴퓨터과학(전산학) 분야에 업적을 남긴 사람에게 매년 시상하는 상. ACM 연례 회의에서 시상식을 하는데 여기서 수상자가 기념 강연을 하는 것이 관례이다. 현대 컴퓨터과학의 아버지라 불리는 앨런 튜링의 이름을 따서, 1966년 제정되었다.
컴퓨터과학의 노벨상으로 불리며 컴퓨터과학 분야 인사에게 최대의 영광으로 인식된다. 컴퓨터과학 및 연관분야를 공부한다면 교과서에서 들어본 이름이 많을 것이다. 학부때 듣지 못했다면 대학원에서 듣게 된다.
5.2. 대학[편집]
5.3. 학회[편집]
5.4. 중등교육[편집]
- 정보(교과): 정보(과목), 인공지능 기초, 정보과학, 전문 교과Ⅱ의 관련 과목[36]
- Advanced Placement: AP 컴퓨터과학 A, AP 컴퓨터과학 기본
5.5. 올림피아드[편집]
이 문서의 내용 중 전체 또는 일부는 2024-08-20 22:54:23에 나무위키 컴퓨터공학 문서에서 가져왔습니다.
[1] 학부생들 수준에서는 바로 범용 CPU로의 접근이 어렵기 때문에 비교적 명령어셋이 단순한 마이크로컨트롤러로 강의한다.[2] 법학과로 입학한 후 전과, 빌 게이츠는 대학 입학후 주로 Computer Science과목과 수학강의를 많이 수강하였다.[3] 가끔 학교 수학 성적은 낮은데도 컴퓨터과학 지식과 프로그래밍 실력이 나쁘지 않은 사람이 존재하는데 실제로는 입시, 시험 같은곳에 필요한 공식, 문제풀이를 익히지 못한 거지, 응용과 추리 같은 것을 바탕으로 하는 사고력은 좋은 경우이다. 이런 사람의 경우 적성이 있기에 대학수학을 제대로 공부하면 잘 할 확률이 높다. [4] 괜히 수학과생들의 복수전공 1지망 분야가 컴퓨터겠는가? 보통은 수학과에서 컴퓨터 같이 공부하던 학생들이 컴퓨터를 공부하러 관련대학원으로 오는 식이지만, 가끔 역으로 컴퓨터전공 학생이 수학과 강의에 맛 들이고 이쪽 과목들을 듣다가 자기 이뻐하는 수학과 교수한테 영입당하는 경우도 있다. 서로의 분야에의 진입장벽이 다른 공학계열과의 진입장벽에 비해서도 그리 높지 않기 때문에 가능한 일.[5] 수학 분야에서는 대수학, 해석학, 기하학, 위상수학 등 추상적이지만 구체적이고 순수하지만 실용적인 수학을 연구하는 수학자들을 영어로는 'Working Mathematician', 한국어로는 '실용수학자, 실전수학자, 현업수학자' 등으로 부르곤 한다. (대략 폴 코언을 제외한 모든 필즈상 수상자들의 주요 업적이 이 쪽에 해당한다 보면 된다.) 한편, 이들이 무모순이 용납하는 최대한의 자유를 누릴 수 있게끔 현대수학의 기반을 다지는 연구분야인 수학기초론, 그리고 수학 그 자체를 연구하는 '메타수학'에 집중하는 수학철학자들도 있었는데, 이들 중 네임드로는 게오르그 칸토어, 다비드 힐베르트, 버트런드 러셀, 고틀로프 프레게, 루트비히 비트겐슈타인, 알프레드 타르스키, 쿠르트 괴델, 존 폰 노이만, 앨런 튜링, 알론조 처치 등이 있었다. 이들은 치열한 논증을 벌인 끝에 러셀의 역설, 불완전성 정리, 정지 문제 등의 성과를 내놓았고, 이들의 연구 갈래 중 일부가 오늘날의 컴퓨터과학으로 발전했다. [6] 운영체계의 피터슨 해법이나 램포트 빵집 알고리즘, 분산체계의 팍소스 알고리즘 등에 등장한다.[7] 컴퓨터 비전, 자연어 처리, 데이터 마이닝 등 [8] 슈도코드 수준이 아니라 논문의 절반이 수식으로 도배되어 있는 경우가 태반이다.[9] 최종학력[10] 최종학력 인지과학 박사[11] 물리학 학사 학위도 취득[12] 전산학 복수전공[13] 전산학 석사학위도 취득[14] 전산학 복수전공; 전기공학 학사 학위를 나중에 따로 취득해서 학사 학위가 두 개다[15] 응용수학 학사 학위도 취득[16] 물리학/전산학 복수전공 및 전기공학으로 학사 학위 두개 취득[17] 전산학 학사 학위도 취득[18] 서울대학교 컴퓨터공학부 김태현 교수가 관련연구를 하고있다. 양자정보 및 양자컴퓨팅 연구실 홈페이지 [19] 연세대학교의 한요섭, 안형찬 교수, 카이스트의 마틴 지글러, 정지원 교수 ,유니스트의 Vigneron Antoine 교수, 서울대학교의 박근수 교수 등이 있다.[20] 컴퓨터 공학과에서 코딩만 하면 되지 전자공학을 왜 공부해야 하나 하고 반론하는 사람들도 많다. 전자공학을 복수전공하거나 아래 과목들을 제대로 이해해도 전자공학 자체가 하나의 컴퓨터 언어로서 활용될 경지에 이를 수도 있다. 예를 들어 칩셋설계까진 아니어도 새로 출시한 암호칩이나 지능형 반도체를 본인 연구에 접목시켜 논문을 쓸수도 있다.컴퓨터 구조를 이해하지 못할 경우 칩셋핀에 전원을 넣는 것 부터 난관이 부딧힐 것이다. 컴퓨터라는 것 자체가 하나의 거대한 전자회로임을 잊어서는 안된다. 그리고 컴퓨터 공학과(전자계산학과)라는 학과 자체가 과거의 사례들을 보면 전자공학 교수님들이 모여 설립한 사례 혹은 수학과 교수님들이 설립한 사례, 오리지널 전산학자들이 만든 경우 등 다양하다. 컴공과안에 전자공학 관련 과목들이 있는 것은 어찌 보면 당연하다. 컴퓨터공학과/수학과/전자공학과가 서로 학제간 연구를 하고 복수전공을 하는 것은 전혀 이상한 것이 아니다.[21] MIPS, RISC-V, ARM(CPU)등.[22] 학부생들은 보통 은어로 컴구라고 부른다. 이론 수업이지만 현대 컴퓨터의 기반적인 동작원리를 배우는 수업이기에 매우 중요하다.[23] 앞서 설명한 마이크로프로세서와는 학교 여건에 따라 약간 영역이 다를 수도 있다. 범용 퍼스널 컴퓨터 구조와 IBM PC 어셈블리어에 집중할 수도 있다. [24] 마이크로컨트롤러 관련 어셈블리어를 배우거나, 범용 PC에서 사용되는 x86 어셈블리어를 배우기도 한다. 학교 커리큘럼마다 조금씩 다르다. 참고로 어셈블리어는 형태는 CPU마다 거의 유사하나 변수타입등이 조금씩 다르다. 즉 하드웨어에 의존적인 언어이다.[25] 학부생들 수준에서는 바로 범용 CPU로의 접근이 어렵기 때문에 비교적 명령어셋이 단순한 마이크로컨트롤러로 강의한다.[26] 미분기하의 내용을 이산화한 이산미분기하(Discrete differential geometry)를 주로 활용한다. # [27] 90년대에는 UC 버클리에서 만든 Nachos를 많이 사용했다. PintOS는 2004년에 스탠퍼드 대학교에서 Nachos를 개량하여 대체한 실험용 운영체제이다.[28] 통신망에서 인터넷 트래픽 전송 시 오류 정정에 많이 쓰여 네트워크 카테고리에 둔다.[29] 간단히 생각하면 수치로 표현이 잘 안되는 데이터라고 생각하면 쉽다.[30] 단, 인공신경망의 경우 네트워크를 학습시키는 알고리즘이 과연 실제 뇌에서 일어나는 학습 방식과 유사한가에 대한 논란이 끊임없이 제기되어 왔다. 대표적인 논의 거리가 고전적인 인공신경망 모델인 다층 퍼셉트론(multi-layer perceptron)을 학습시키는 역전파(back-propagation) 알고리즘. 공학 관점에서 인공신경망에 접근하는 이들에게는 그리 큰 문제가 아니지만, 수리심리학/계산신경과학의 관점에서 이를 연구하는 경우는 꽤 복잡한 문제가 된다.[31] 예를 들어 컴파일러 강의를 들으면 과제로 컴파일러를 구현하라고 한다. 다만 학부수준 컴파일러의 구현 과제는 이론적 지식이 어느정도 있으면 대부분 크게 어려운 일은 아니다. 대부분 대학에서 컴파일러 구현하라는 과제는 LR 파서나 LL 파서로 전체 컴파일러를 수동 구현하라는 것이 아니라, lex/yacc 같은 툴을 이용하거나 혹은 재귀 하향 파싱 + 차량 기지 알고리즘 같은 형태가 대부분이기 때문이다. 물론 상향식 파서를 제대로 이해하는 것이 어려운 것은 사실이긴 하다.[32] 문제는 이런 수준의 컴파일러 강의조차 제대로 개설이 이뤄지지 못한 대학이 현재 국내에는 수두룩하여 기본전공지식을 습득, 훈련하지 못하고 졸업하는 컴퓨터학과 학생이 많다.[33] 물론 독학 불가능한 내용은 아니지만 어려운건 사실이다.[34] 다만 툴키디 문서에도 나오지만 툴을 만든다고 다 뛰어난 해커는 아니다.[35] Lecture Notes in Computer Science[36] 전문 교과Ⅱ에는 관련된 각종 과목들이 개설되어 있다.