정보 이론 - 나무위키 - jeongbo ilon - namuwiki

수학 (공업수학 · 해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 대수학 (환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학 (형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학

하드웨어 구성

SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품

기술

기계어 · 어셈블리어 · C(C++ · C#) · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍(디자인 패턴) · 해킹 · ROT13 · OTP · IoT · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화

연구및 기타 문서

논리 회로(보수기 · 가산기 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 디자인 패턴 · 데이터베이스 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 정보처리이론 · 재귀 이론 · 자연 언어 처리(기계 번역 · 음성인식)

이론 컴퓨터 과학

Theoretical Computer Science

[ 펼치기 · 접기 ]

이론

기본 대상

수학기초론(수리논리학 · 계산 가능성 이론 · 범주론 · 집합론) · 이산수학(그래프 이론)

다루는 대상과 주요 토픽

계산 가능성 이론

재귀함수 · 튜링 기계 · 바쁜 비버

오토마타 이론

FSM · 푸시다운 · 튜링 머신(폰노이만 구조) · 정규 표현식 · 콘웨이의 생명 게임

계산 복잡도 이론

점근 표기법 · 튜링 기계고전, PRAM, 양자, 비결정론적 · 알고리즘 · 자료구조 · 알고리즘 패러다임(그리디 알고리즘, 동적 계획법)

수학적 최적화

조합 최적화

TSP · 담금질 기법 · 유전 알고리즘 · 기계학습

볼록 최적화

내부점 방법 · 경사하강법

선형계획법

심플렉스법

주요 알고리즘 및 자료구조

기초

정렬 알고리즘 · 순서도

추상적 자료형과 그 구현

배열벡터 · 리스트연결 리스트 · 셋(set)레드-블랙 트리, B-트리 · 우선순위 큐힙, 피보나치 힙

계산 수론 및 암호학

밀러-라빈 소수판별법 · Pollard-rho 알고리즘 · 쇼어 알고리즘 · RSA · AES · LLL 알고리즘 · 해시(암호화폐) · 사전 공격(레인보우 테이블)

계산기하학

볼록 껍질 · 들로네 삼각분할 및 보로노이 도형Fortune의 line-sweeping 알고리즘 · 범위 탐색vp-tree, R-tree · k-NN

그래프 이론

탐색BFS, DFS, 다익스트라 알고리즘, A* 알고리즘 · 에드몬드-카프 · 크루스칼 알고리즘

정리

정지 문제대각선 논법 · 암달의 법칙 · P-NP 문제미해결 · 콜라츠 추측미해결

틀:이산수학 · 틀:수학기초론 · 틀:컴퓨터공학

프로그래밍 언어 JavaScript

ENIAC

알파고


1. 개요2. 명칭 및 분류에 대한 논의

2.1. 과학인가 공학인가2.2. 기타 컴퓨터공학을 지칭하는 명칭들

3. 오해4. 분류

4.1. 기초 이론

4.1.1. 이론 컴퓨터 과학 / 수학4.1.2. 프로그래밍 언어론4.1.3. 통계학

4.2. 하드웨어

4.2.1. 회로이론4.2.2. 컴퓨터 구조론4.2.3. 제어공학

4.3. 소프트웨어

4.3.1. 운영체제4.3.2. 데이터베이스4.3.3. 컴퓨터 네트워크 4.3.4. 소프트웨어 개발방법론4.3.5. 이미지 처리와 음향 처리4.3.6. 컴퓨터 그래픽스4.3.7. 금융공학4.3.8. 정보보안

4.3.8.1. 암호학

4.3.9. 계산과학4.3.10. AI, 신경과학 4.3.11. 자연어 처리4.3.12. 사회과학 분야4.3.13. 코딩

5. 학회6. 교육과목7. 같이 보기


1. 개요[편집]

電算學(전산학) / Computer Science & Engineering(컴퓨터공학)

컴퓨터공학(Computer Science & Engineering) / 전산학(電算學)은 알고리즘, 계산 및 정보에 대한 이론적 연구에서부터 하드웨어와 소프트웨어의 계산 시스템 구현에 대한 실질적인 문제에 이르기까지 다양한 분야에 걸쳐 연구하는 학문이다.

대한민국에서는 컴퓨터과학과 컴퓨터공학을 총칭하는 표현으로 쓰이며, 초중고 교육과정으로는 정보(교과)로도 불린다. 그외에는 경우에 따라서 전산학으로 번역하여 전산학/전산과학으로 부르기도 한다. 참고로 다른 한자문화권 국가에서는 '컴퓨터과학'을 '정보학/정보과학'으로 번역한다.

2. 명칭 및 분류에 대한 논의[편집]

2.1. 과학인가 공학인가[편집]

과학의 범위

[ 펼치기 · 접기 ]

좁은 의미

자연과학

물리학 · 화학 · 생물학 · 지구과학 · 천문학

넓은 의미

형식과학

수학 · 통계학 · 전산학 · 논리학 · 암호학 · 언어학(생성이론)

응용과학

거대과학 · 공학 · 건축학 · 의학 · 치의학 · 한의학 · 간호학 · 약학 · 수의학 · 농학 · 임학 · 수산학

사회과학

법학 · 행정학 · 정책학 · 정치학 · 경제학 · 경영학 · 사회학 · 인류학 · 심리학 · 지리학 · 사회복지학 · 신문방송학 · 종교학

인문과학

언어: 언어학 / 예술: 문학 · 미술사학 / 역사: 사학 · 과학사학 · 고고학 / 사상: 철학

비과학

변경지대의 과학 · 신학

비학문

병적 과학 · 쓰레기 과학 · 유사과학 · 반과학

형식과학의 일반적 분류

수학

전산학

통계학

논리학

암호학

생성언어학
(형식주의 언어학)


최초의 전산학과는 응용수학과의 한 부분으로 있다가 학문의 발전에 따라 분리된 경우가 많다. 다시 말해 현재는 '공학' 취급을 받지만 본질적으로 출발은 수학의 하위 분야이며 애초에 '컴퓨터'라는 단어 자체가 '계산하는 장치'인 것을 생각하면 전혀 이상한 일이 아니다.

실제로 해외의 하버드 대학교 컴퓨터과학과(Computer Science)는 1984년 응용수학과에서 분리되었으며, 우리나라의 서울대학교도 응용수학과에 직간접적으로 뿌리를 두고 있다. 그런 이유로 해외에서도 저명한 인물 중 이 시기 대학을 나온 인물들 중에는 'Computer Science' 출신 인물이 적다. 마이크로소프트의 창립자이자 컴퓨터 분야의 대부로 유명한 빌 게이츠도 하버드 대학교 응용수학과 73학번으로 앞서 언급했다시피 컴퓨터과학과로 분리되기 전에 졸업했다. 학위증, 합격증 또는 학위관련 기타 문서에 '컴퓨터과학(Computer Science)'이라는 용어가 나오려면, 최소 80년대 학번인 제프 베조스나 2000년대 학번인 마크 저커버그 정도 시대의 인물이어야 한다.

우리나라에선 숭실대에 처음으로 생긴 70년대 이후부터 90년대 초까지는 전산학과, 전산과학과, 전자계산학과, 정보과학과(Information Science) 정도로 불렸다. 하지만 2000년대 이후 카이스트를 제외하면 전산학과로 부르는 대학은 없다. 전산, 즉 전자계산기는 컴퓨터(Computer)의 번역명이므로 전산학, 전산과학은 사실 Computer Science(컴퓨터과학)의 번역어에 불과하지만, 하술한 바와 같이 국내에서는 어감의 낡은 이미지 문제로 컴퓨터공학이란 명칭이 그 자리를 거의 대체했다.

분야

컴퓨터과학

컴퓨터공학

설명

응용 수학,컴퓨팅 이론을 주로 다루는 분야

컴퓨터과학과 전자공학을 이어주는 분야

영문

Computer Science

Computer Engineering

배우는 학과
(한국기준)

컴퓨터과학과, 전산학과
일부학과를 제외한 대부분의 컴퓨터공학과

정보통신공학과
정보통신공학과는 Computer Engineering을 메인으로 한다.
전기전자공학과

배우는 학과
(미국기준)

컴퓨터과학과(Computer Science)

컴퓨터공학과(Computer Engineering)또는
전기전자공학과(Electrical Engineering)


컴퓨터과학(영어: computer science, 컴퓨터 사이언스) 또는 전산학은 알고리즘 과정, 계산 기계 그리고 정보 및 계산 자체에 대한 학문이다.

컴퓨터 과학은 알고리즘, 계산 및 정보에 대한 이론적 연구에서부터 하드웨어와 소프트웨어의 계산 시스템 구현에 대한 실질적인 문제에 이르기까지 다양한 주제에 걸쳐 있다.

전산 이론 및 시스템 설계를 다루는 전문가를 컴퓨터 과학자 또는 전산학자라 부른다.

컴퓨터 과학의 분야는 이론적인 분야와 실용적인 분야로 나눌 수 있다. 예를 들어, 컴퓨터 그래픽스나 계산 기하학은 보다 구체적인 응용을 강조하는 반면, 계산 이론은 추상적인 계산 모델과 그것들을 사용하여 해결할 수 있는 일반적인 종류의 문제에 관한 것이다. 알고리즘과 데이터 구조는 컴퓨터 과학의 심장이라고 불려왔다. 프로그래밍 언어 이론은 계산 프로세스의 설명에 대한 접근 방식을 고려하는 반면, 컴퓨터 프로그래밍은 복잡한 시스템을 만들기 위해 그것들을 사용하는 것을 포함한다. 컴퓨터 구조는 컴퓨터 구성요소와 컴퓨터 작동원리를 설명한다. 인공지능은 인간과 동물에게서 발견되는 문제 해결, 의사결정, 환경 적응, 계획, 학습과 같은 목표 지향적인 과정을 종합하는 것을 목표로 한다. 디지털 컴퓨터는 다양한 정보 과정을 시뮬레이션할 수 있다. 컴퓨터 과학의 근본적인 관심사는 자동화할 수 있는 것과 없는 것을 결정하는 것이다. 컴퓨터 과학자들은 보통 학술 연구에 집중한다. 튜링상은 일반적으로 컴퓨터 과학에서 가장 뛰어난 상으로 인정받고 있다.

한국에서는 컴퓨터과학과 컴퓨터공학을 크게 구분하여 말하지 않는다. 하지만 북미•유럽권에서는 컴퓨터과학(Computer Science)과 컴퓨터공학(Computer Engineering)이라고 나뉘어 구분한다.

미국에서는 전기전자공학과 컴퓨터과학을 합쳐 EECS(Electrical Engineering & Computer Science)학부로 운영하기도 한다.(MIT, UC 버클리가 EECS로 되어있는 대학이다.)

대한민국의 컴퓨터공학과에서 컴퓨터공학(Computer Engineering)보다는 실질적으로는 컴퓨터과학(Computer Science) 위주로 배우는 경우가 대부분이다.[1]

2.2. 기타 컴퓨터공학을 지칭하는 명칭들[편집]

  • 정보학, 정보과학, 정보공학

3. 오해[편집]

컴퓨터과학은 천문학이 망원경에 관한 학문이 아니듯, 기계에 관한 것이 아니다. 수학과 컴퓨터과학 사이에는 본질적인 통일성이 있다.

에츠허르 다익스트라

흔히 컴퓨터공학을 프로그래밍을 배우는 학문 내지는 컴퓨터의 기계적 특성에 대해 다루는 학문이라고 생각하지만, 이러한 것은 의류의상학과를 바느질을 배우는 학과, 기계공학을 용접하는 곳이라고 생각하는 것과 같다. 컴퓨터공학과는 컴퓨터공학(Computer Science & Engineering)이라는 독립적인 학문을 배우는 학과 즉, 계산기계(computer)에 대한 '개념'과, 그 '응용'에 대한 본질적인 연구를 담당하는 학문이다. 우리가 흔히 쓰는 PC, 스마트폰 등은 컴퓨터공학에서 배우는 개념들을 구체화한 부산물일 뿐이다.

컴퓨터전공 학생이 코딩에 능숙하긴 하지만 그것은 어디까지나 학생이 학습한 개념을 외부에 표현하기 위해 배우는 것에 불과하다.

이를 일컫어 Hal Abelson은 컴퓨터과학(Computer Science)이라는 이름이 이 분야를 소개하기에 나쁜 이름이라고 한 바 있다. 이 학과를 컴퓨터과학(Computer Science)이라고 부르는 것은 마치 물리학을 입자가속기과학, 생물학을 현미경과학이라고 부르는것과 마찬가지라 생각할수 있기 때문이다.

4. 분류[편집]

4.1. 기초 이론[편집]

4.1.1. 이론 컴퓨터 과학 / 수학[편집]

이론 컴퓨터 과학

Theoretical Computer Science

[ 펼치기 · 접기 ]

이론

기본 대상

수학기초론(수리논리학 · 계산 가능성 이론 · 범주론 · 집합론) · 이산수학(그래프 이론)

다루는 대상과 주요 토픽

계산 가능성 이론

재귀함수 · 튜링 기계 · 바쁜 비버

오토마타 이론

FSM · 푸시다운 · 튜링 머신(폰노이만 구조) · 정규 표현식 · 콘웨이의 생명 게임

계산 복잡도 이론

점근 표기법 · 튜링 기계고전, PRAM, 양자, 비결정론적 · 알고리즘 · 자료구조 · 알고리즘 패러다임(그리디 알고리즘, 동적 계획법)

수학적 최적화

조합 최적화

TSP · 담금질 기법 · 유전 알고리즘 · 기계학습

볼록 최적화

내부점 방법 · 경사하강법

선형계획법

심플렉스법

주요 알고리즘 및 자료구조

기초

정렬 알고리즘 · 순서도

추상적 자료형과 그 구현

배열벡터 · 리스트연결 리스트 · 셋(set)레드-블랙 트리, B-트리 · 우선순위 큐힙, 피보나치 힙

계산 수론 및 암호학

밀러-라빈 소수판별법 · Pollard-rho 알고리즘 · 쇼어 알고리즘 · RSA · AES · LLL 알고리즘 · 해시(암호화폐) · 사전 공격(레인보우 테이블)

계산기하학

볼록 껍질 · 들로네 삼각분할 및 보로노이 도형Fortune의 line-sweeping 알고리즘 · 범위 탐색vp-tree, R-tree · k-NN

그래프 이론

탐색BFS, DFS, 다익스트라 알고리즘, A* 알고리즘 · 에드몬드-카프 · 크루스칼 알고리즘

정리

정지 문제대각선 논법 · 암달의 법칙 · P-NP 문제미해결 · 콜라츠 추측미해결

틀:이산수학 · 틀:수학기초론 · 틀:컴퓨터공학


컴퓨터의 수학적 기반에 대해 다룬다. 컴퓨터과학의 이론적 토대는 수학에 기반을 두고있고, 컴퓨터 관련 학문을 제대로 공부한다는 것은 수학적 논리를 공부한다는 것과 같은 말이다. 컴퓨터를 다루는 언어와 기법이 모두 수학이기 때문이다. 컴퓨터학과의 경우 색다른 커리큘럼의 수학을 배울 수 있다. 특히 다른 공학분야와는 다르게 공식을 암기하여 풀수있는 계산문제 풀이를 익히는게 아니라 증명에 쓰이는 논리적 사고능력을 가르는것이 중요하다.[2] 수치해석, 선형대수, 이산수학, 통계학, 정수론, 미분기하학 쪽에 치중해서 배우게 되는데... 이쯤되면 그냥 수학과 아닌가???[3] 게다가 컴퓨터 과학의 경우 공부하는 분야에 따라서 필요한 수학도 천차만별이다.

분야를 막론하고 수학적인 기호들을 읽는데 능숙하지 못하거나, 수학적인 논리에 미숙하다거나 하면 전산학을 제대로 공부하기 매우 힘들다. 시스템 계열에서도 수학적 증명이 등장하는 마당에[4], 웬만해서는 대학에서 강제 필수인 기초 이산수학, 알고리즘 디자인/분석 및 복잡도 이론 등으로 가면 더욱 그렇다. 특히나 컴퓨터 그래픽이나 온갖 기계학습류[5] 분야로 가면 모든 분야의 전산학자들이 기본적으로 우려 먹는 이산수학 알고리즘들은 물론이고 공대생들이나 물리학도들이 흔히 써먹는 선형대수학이나 다중미적분, 미분기하학 등도 아주 많이 쓴다. 특히 기계학습의 경우, 보다 이론적인 쪽으로 가면 측도론을 쓰기 시작한다. 하다못해 프로그래밍 언어론을 공부하는 데에도 쓰인다. 프로그래밍 언어에 정의되어 있는 온갖 데이터 타입들에 대한 연산 규칙 및 증명 등을 해야할 때 필요하다.
대학원 이상으로 갈 경우 거의 예외 없다. 대학원, 교수/학자/연구원 등의 레벨로 가면, 하다 못해 시스템 계열 분야라도 더욱 수학을 깊게 공부해 본 사람들이 많다. 특히 이름 있는 프로그래머, 전산학자들은 열이면 열 수학과나 수학을 많이 쓰는 전공 출신이다. 아래 예시에 특별히 적혀있지 않는 한 학사나 석사에만 이름을 올린 사람들은 최종적으로 전산학 박사학위를 취득했다.

수학 혹은 응용수학

  • 박사: 앨런 튜링, 존 폰 노이만, 스티븐 쿡, 리처드 카프, 래즐리 램포트, 로버트 타르잔, 존 매카시, 도널드 커누스

  • 석사: 켄 톰슨[6], 마이클 I. 조던[7]

  • 학사: 데니스 리치[8], 바바라 리스코프, 마테이 자하리아[9], 데이비드 브럼리


물리학

  • 박사: 에츠허르 다익스트라, 앤드루 태넌범, 톰미 자아콜라

  • 석사: 이홍락[10]

  • 학사: 존 F. 캐니[11], 데니스 리치[12]


전기공학

  • 박사: 마틴 헬맨, 리 페이페이

  • 학사: 존 F. 캐니[13], 지텐드라 말리크, 김태수 [14]


  • 이산수학: 공대 학과 중 전산계열에서만 배우는 수학.

    • 자료구조론 : 프로그래밍에서 컴퓨터의 메모리와 CPU를 활용해 데이터를 구조적으로 처리하는 순서와 표현하는 방식을 다루는 이론으로 알고리즘의 분류에 포함된다.

    • 알고리즘: 알고리즘의 시간 복잡도및 공간 복잡도를 주로 다룬다. 시간 복잡도의 경우 처리해야 하는 데이터가 많아질수록 필연적으로 알고리즘의 실행이 끝나는 속도가 느려지는데, 늘어나는 처리 데이터에 비례해서 얼마나 알고리즘의 실행 속도가 느려지느냐가 관건이다. 예를 들어, n 만큼의 데이터를 처리해야 할때 >O(n2)> {\mathcal O}(n^{2})>O(n2) 복잡도를 가진다면, 처리해야 하는 데이터의 양에 제곱을 한 만큼 비례해서 알고리즘이 느려진다. 공간복잡도의 경우 처리해야하는 데이터에 비례해서 알고리즘이 얼마나 많은 양의 메모리를 필요로 하는가가 관건이다.

    • 정보이론/부호이론: 정보이론은 정보의 양을 측정하고 최적화된 코드에 대한 기대 길이를 측정하는 것인데, 머신러닝에서는 확률분포를 알아내는데 쓰인다. 부호이론의 경우 유한체를 이용해 순환 코드(cyclic code)와 BCH코드를 다룬다.

    • 정수론: 암호 분야에 사용 된다.

    • 집합론

    • 그래프 이론

    • 조합론

    • 이산 확률론

    • 수리논리학: 분야를 가리지 않고 등장하기 때문에 중요하다. 일부 학자들은 비표준 논리학, 오토마타, 계산이론, 증명 이론까지 다룬다.

      • 오토마타 이론: 기초적인 automaton과 결정가능성, 그리고 튜링머신에 대해 배운다.

      • 유형론(type theory)

  • 최적화 이론

  • 해석학

    • 미적분학

      • 미분방정식: 컴퓨터 그래픽스에서 물체의 움직임에서 사용하기도 하고, 계산 과학 분야에서도 사용한다.

    • 함수와 측도론: 기계학습에 쓰인다.

  • 대수학

    • 선형대수학

    • 환론: 논리 연산이 대수 구조와 공리가 잘 정의되어 있는 환이므로, 환론을 어느 정도 공부해야 한다.

    • 범주론

  • 기하학

    • 이산/계산 기하학 : 컴퓨터를 이용해서 물체를 어떻게 표현 할 할지 연구하는 분야이다. 컴퓨터 그래픽에서 대표적으로 많이 사용하고 최근에는 컴퓨터 비전, 기계학습, 인공지능 분야에서도 사용된다.

    • 이산 미분 기하학

  • 양자컴퓨팅[15]

위와 같이 수학 전반+α을 다루기 때문에 수학 전공자들의 복수전공에서 다른 공학 분야보다 용이하다. 실제로 이쪽은 교수부터 수학 전공자인 경우가 많다. 다만, 한국에서는 거의 죽은 분야에 가깝다. 한국의 경우, 교육열이 입시에 쏠려있어, 고교수학에 매우 강하며 실제 대학에서도 이런 경향이 이어져 고교 때 배우는 미적분을 많이 다루는 해석학과 같은 분야쪽에 쏠리는 경향이 강하다. 비표준 논리학은 수학에서 해석학과 거리가 가장 먼 분야로 볼 수 있으며, 덕분에 한국에서 이쪽 전공 교수 자체가 별로 없다. 다만 철학과까지 범위를 넓혀보면 그나마 숫자가 좀 늘어나긴 한다. 즉 철학과에도 수리 논리학은 물론이고, 비표준 논리학도 건드려본 논리학 전공 교수들이 있다. 참고로 논리학은 원래 철학의 한 분야지만, 국내 수학과 내에 논리학 전공 교수가 많지 않듯이, 국내 철학과에서도 논리학 전공 교수가 많진 않다. 당연히 컴퓨터 과학에서도 마찬가지. 국내는 이쪽 관련 인프라가 열악하므로 이쪽을 전공하고 싶다면 해외로 나가는 수밖에 없다. 하지만 최근 대학에서 이론 전산학을 연구하는 교수들이 조금씩 늘어가고 있다.[16]

4.1.2. 프로그래밍 언어론[편집]

언어학, 수학, 전산학의 학제적 연구 분야이다. 기본적으로 놈 촘스키의 생성문법적 관점에서 의미론과 통사론을 배우는 것이며, 여기서 파생되는 다양한 프로그래밍 언어, 대수학(정확히는 환론과 군론, 카테고리 이론), 오토마타 이론 ,컴파일러의 구현법 등을 추가로 배우게 된다. 컴파일러 작성을 통한 언어 구현을 중시하며 그에 관련된 이론은 맛보기로 배우는 경우도 있는가 하면, 아예 관련 이론만 빠삭하게 들이파는 경우도 있다. 만약 PL 교수가 학생들에게 '프로그래밍 언어론' 을 가르치고자 한다면, 보통 수업 시간에 증명을 상당히 많이 다루게 된다. 반면, 교수가 학생들에게 그냥 다양한 언어들의 특성을 가르치게 된다면, 그런 느낌은 별로 들지 않는다. 만약 후자면 프로그래밍 경험이 많으면 잘 따라갈 수 있지만, 그렇지 않고 이론,증명 위주로 과목을 가르치게 되면, 논리적인 사고가 부족한 학생들은 죽을 맛이 된다(...)

  자세한 내용은 프로그래밍 언어론 문서

의 번 문단을

의 부분을

참고하십시오.

  • 프로그래밍 언어론

  • 오토마타 이론

  • 컴파일러 이론

4.1.3. 통계학[편집]

학교에 따라서는 고급 통계학을 추가적으로 가르치는 곳도 있는데 대학원에 진학할 생각이 있다면 반드시 배워두자. 절대 손해 안 본다. 특히 인공지능[17]과 이것을 응용하는 분야(영상처리, 음성처리, 정보검색 등), 자연어처리, 네트워크 프로토콜 같은 분야를 염두에 두고 있다면 확률통계는 무조건 필수이므로 학부 때 미리 빠삭하게 해 놓으면 상당히 좋다. CS는 세부 연구분야에 따라 다르지만 대학원 석,박사 과정을 진학하면 정수론, 통계학, 선형대수 등 기본적으로 수학 실력이 어느 정도 필요한 경우가 많다. 거의 Computer Science 전 영역에서 활용되나 특히 데이터 과학, 인공지능에서 집중 활용된다.

4.2. 하드웨어[편집]

회로, 컴퓨터 구조 등 전자공학 과목들. 아래 컴퓨터 하드웨어 관련 과목들과 운영체제,파일 시스템,컴파일러등을 공부 할 경우, CPU, 메모리, 보조 기억 장치가 포함된 폰노이만 구조의 실물 컴퓨터 1대 설계가 가능하다. 외국에는 홈브루 컴퓨터 운동이 있다.

4.2.1. 회로이론[편집]

  • 회로이론

  • 전자회로

  • 논리회로

4.2.2. 컴퓨터 구조론[편집]

  • 컴퓨터 구조론 [18]

  • 마이크로프로세서 (CPU)[19]

    • 임베디드 시스템 (시스템 프로그래밍) [20]

  • 어셈블리어 [21]

4.2.3. 제어공학[편집]

  • 디지털 제어이론

  • 로봇공학

4.3. 소프트웨어[편집]

4.3.1. 운영체제[편집]

운영체제/시스템 프로그래밍 파트는 운영체제와 UNIX, Windows API/MFC 프로그래밍 등 시스템에 종속적인 프로그래밍을 배운다. 운영체제는 오만가지 부속과 모듈들이 오만가지 방법으로 얽혀있어서 디버깅이 매우 힘들며, 따라서 관련 프로그래밍 작업에 생각보다 아주 많은 시간을 소비하게 된다. 운영체제의 경우 이론만 배우는 경우가 많으나 대한민국 공대 중에서 PintOS[22]나 xv6를 직접 코딩해보는 학교로 서울대, KAIST, GIST, UNIST, 포스텍, 성균관대, 한양대, 서강대 등이 존재한다. 부산대, 홍익대에서도 원한다면 xv6와 GeekOS, 단국대에서는 GeekOS를 코딩 해 볼 수 있다. 숭실대에서도 PintOS를 코딩할 수 있는 과목이 있다. 오픈 소스 운영체제인 리눅스 커널 소스 코드를 직접 수정/컴파일/설치하여 돌려보는 학교도 있다. 최근 주요 연구토픽으로 가상머신, 클라우드 컴퓨팅 연구가 있다.

4.3.2. 데이터베이스[편집]

데이터에서 더 나아가 파일을 다루는 파일처리론(이론)을 배우고 더 나아가 파일 시스템구조에 대해 배운다. 파일 시스템이 발전하면 데이터베이스론이 되며, 최근에는 정보를 처리하는 방법 중 블록체인, 데이터 마이닝, 빅데이터 기술도 각광을 받고 있다.

  • 파일처리론

  • 데이터베이스

  • 데이터 마이닝

  • 검색 엔진

  • 빅데이터

  • 블록체인

4.3.3. 컴퓨터 네트워크 [편집]

네트워크, 클라우드 컴퓨팅 등이 있다. OSI 모형 및 TCP/IP에 따른 분류를 기준으로 각각의 구조를 배우기도 하며 네트워크 프로토콜을 코드로 구현하는 과제를 시키는 대학도 있다.

  • 데이터 통신 [23]

  • 컴퓨터 네트워킹

  • 정보이론 [24]

4.3.4. 소프트웨어 개발방법론[편집]

요구공학, 분석, 설계, 구현, 테스트, 유지보수, 형상관리, 개발 방법론, 품질 관리, 재사용성 등 소프트웨어 개발에 있어서 체계적인 접근 방법에 대해 공부하게 된다. 설명은 적지만 2010년대 후반 이후 SW엔지니어에게 중요한 능력으로 요구받는 분야이니 관련이론과 git, GitHub같은 도구을 잘 공부해놓자. 좋은 it기업 취업에 있어서 중요한건 얼마나 클론코딩을 많이 했고 프로젝트를 많이 했냐보단 적게 했더라도 소프트웨어공학적인 방법론에 맞추어 유지보수, 배포, 버전관리, 피드백을 실행했느냐이다.

  • 객체지향 이론

  • 소프트웨어 공학

4.3.5. 이미지 처리와 음향 처리[편집]

영상 신호처리, 코덱, 미디어의 압축[25]과 전송, 음향과 관련된 내용을 배운다. 절대로 포토샵, MAYA 같은 툴 사용법을 배우는게 아니다! 상당한 양의 수학이 필요하기 때문에 얕잡아보면 후회하게 될 것이다.

  • FFT알고리즘

  • 이미지 처리

  • 컴퓨터 비전

  • 음성 인식

  • 영상, 음성 데이터 압축, 인코딩, 디코딩

  • 음성 합성

4.3.6. 컴퓨터 그래픽스[편집]

컴퓨터 그래픽스는 컴퓨터 기술을 사용하여 시각적 및 기하학적 정보를 다루는 분야이다.- 그 유명한 "머릿글자 B - 관악최속전설"도 그래픽스 과목 숙제로부터 기원한다. 어느 정도의 미적분 실력과 선형대수학 실력만 있어도 수업에서 배우는 내용을 따라하고 숙제를 풀어내는 데에는 별 문제가 없겠지만, 보다 근본적으로 이해하려면 기하광학과 미분기하학에 대한 지식이 필요하다.

  • 2차원 컴퓨터 그래픽스

  • 3차원 컴퓨터 그래픽스

  • 컴퓨터 애니메이션

  • 렌더링

  • 혼합 현실

  • 가상 현실

  • 솔리드 모델링

4.3.7. 금융공학[편집]

인공지능, 데이터과학이 발전하면서 금융과 경제 분야에서 컴퓨팅의 중요성이 높아지고 있고, 실제로 인공지능을 이용해 주가 예측 프로그램이나 자동 주식 매매 프로그램을 만든다던가, 빅데이터를 이용해 금융 및 회계업무 처리를 효율적으로 만들기도 한다.

4.3.8. 정보보안[편집]

정보보안, 인터넷 보안, 네트워크 보안, 사이버안보 등의 이름으로 개설된다. 최근엔 정보보안학과로 독립하기도 한다. 지금까지 배웠던 것들을 모두 싸그리 뭉쳐서 응용하는 성격이 강하며, 여기에 더해 사회공학적 기법도 대략적으로 가르치는 경우도 있다.

4.3.8.1. 암호학[편집]

이산수학 특히 정수론, 선형대수학을 선행해야 한다. 블록암호, 공개키 암호, 해쉬함수, 난수생성, 전자서명를 다룬다. 이런 학문은 보통 다국적 IT기업, 군사기관, 경찰기관, 정보기관의 투자를 받아서 연구되기도 한다.

4.3.9. 계산과학[편집]

위의 계산이론 분야와는 별개로 계산과학이라는 분야가 따로 있다. 계산과학은 다양한 문제가 주어졌을 때 이를 수치해석과 컴퓨터를 사용해 해결하는 분야이며, 국내 대학들의 경우 서울대에서는 계산과학을 연합전공으로 운용중이고, 연세대에서는 대학원에서 운용중이다.

  • 바이오인포매틱스 (생물정보학)

  • 계산경제학

4.3.10. AI, 신경과학 [편집]

더 큰 범주에서는 인공지능, 인지과학(인지컴퓨팅), 신경과학 등과 학제간 연구를 진행하는데 컴퓨터와 연계하여 인간의 지능(뇌)을 구현하는 분야들이다. 인간의 심리를 활용하기도 한다. 또한 빅데이터와도 매우 연관이 깊다.

  • 인공지능(Artificial Intelligence)
    최근 머신러닝, 딥러닝 관련 연구가 활발하다.

  • 인공신경망(Artificial Neuron Network): 기계학습 분야에서 연구되고 있는 학습 알고리즘들 중 하나. 주로 패턴인식에 쓰이는 기술로, 인간의 뇌의 뉴런과 시냅스의 연결을 프로그램으로 재현하는 것이다. 간단하게 설명하자면 '가상의 뉴런'을 '시뮬레이션'한다고 볼 수 있는 것으로서(실제 뉴런의 동작구조와 완전히 같은 것은 아니다.), 일반적으로 신경망 구조를 만든 다음 '학습'을 시키는 방법으로 적절한 기능을 부여한다.

  • 인공생명체(Artificial Life): 말 그대로 프로그램에 단순한 인공지능이 아닌 실제로 살아있는 유기체처럼 스스로 움직이고 생활하기 위한 능력을 부여하는 것. 실제 생명체를 갖고 실험하기에는 너무 시간이 오래걸리기 때문에 가상의 시스템(환경)을 통해 생명체에 대한 연구를 하기 위한 목적이다.

4.3.11. 자연어 처리[편집]

  • 자연 언어 처리: 컴퓨터가 인간의 언어를 알아들을 수 있게 만드는 학문분야. 인공지능의 하위 분야로, 인간의 언어를 분석하고 해석하여 처리하는 인공지능이 세분화되면서 생긴 학문 분야. 흔히 우리가 아는 말하는 컴퓨터 및 인간과 대화하는 컴퓨터 관련 기술이 이 쪽에 속한다. 언어학, 컴퓨터과학, 인공지능, 전산언어학(Computational Linguistics)의 연구 분야이며, 자연어를 컴퓨터로 해석하고, 의미를 분석하여 이해하고, 자동으로 생성하는 것 등에 관련된 분야다. 이 분야의 하위 분류로 정보 추출, 자동 교정, 대화 시스템, 기계 번역 등이 있다.

4.3.12. 사회과학 분야[편집]

  • 소셜 컴퓨팅
    인터넷 환경을 통해 이루어지는 인간들의 커뮤니케이션과 사회 현상을 사회과학적으로 분석하고, 전산학을 이용해 문제해결법을 제시한다. 관련하여 국내에서 이를 컴퓨터학과 학부 교육과정에서 크게 운용하는 대학은 카이스트 밖에 없다.

  • 인간-컴퓨터 인터랙션(Human-Computer Interaction)
    인간-컴퓨터 상호작용을 기반으로 인간 삶을 컴퓨팅 기술이 더 낫게 만들도록 하는데 중점이 맞춰져 있다. 앞서 설명한 인공지능과 연계하여 연구되기도 한다. 관련하여 국내에서 학부과정 컴퓨터학과에서 크게 다루는건 카이스트 밖에 없다.

    • 사용자그래픽 인터페이스 연구

    • 유비쿼터스

    • 사물인터넷

    • 모바일 디바이스

    • 웨어러블 디바이스

4.3.13. 코딩[편집]

컴퓨터공학과에서의 프로그래밍 언어는 사실상 망치, 끌과 같은 도구이다. 전공과정에서 들어야 하는 '도구'로서의 언어 수업은 C/C++정도로 1학년때 마무리하며, 프로그래밍 언어 활용에 대한 세부적인 접근이나 흔히 현업에서 사용하는 프레임워크 활용에 대한 교육은 잘 하지 않는다. 컴퓨터 구조론, 자료구조와 알고리즘, 운영체제, 컴파일러 등 전산학 이론을 정확히 숙지하고 더 나아가 실제 구현해 보는 것에 학부 커리큘럼이 맞춰져 있다.

물론 과제 등에 코딩 실력이 필요한 것은 사실이므로, 이쪽에 취미가 있는 학생이라면 굉장히 수월하게 커리큘럼을 이수할 수 있지만, 그것도 어디까지나 이론에 대한 습득이 진행되었을 때의 이야기다. 상위권 대학으로 갈수록 코딩은 대부분 과제로 하고 강의시간에는 수학, 전산학 이론을 다룬다.[26][27] OS,컴파일러 등 과제가 독학으로 커버하기 힘든 영역에까지[28] 이르게 되면 누구나 평등하게 머리를 쥐어짜게 된다(…).따라서 프로그래밍에 재능이 있는 학생이라도 대학 생활 내내 좋은 성적을 유지하려면 상당한 노력이 필요하다. 컴퓨터과학을 공부하다보면 알겠지만, 코딩에 능숙하다고 반드시 좋은 컴퓨터과학자(전산학자)가 되는 것은 아니다. 그렇지만 나중에 논문을 쓰거나 연구를 할때 수학적인 증명 혹은 결과물 구현으로 결국 결론이 나므로 코딩 또한 중요하다. 또한 시뮬레이터 도구 또한 C/C++/매트랩 등으로 되어 있는 경우가 많아 코딩이 중요하다.

반대로 별 생각 없이, 예를 들어 '컴퓨터는 많이 해봤고 게임 좋아하니 해봐야겠다' 같은 생각으로 입학할 경우 지옥을 맛보게 된다. 물론 근래에는 기초교육과정에서도 간단한 코딩정도는 가르쳐주므로 이정도까지 컴공을 오해하는 경우는 적지만, 불과 2010년대까지만 하더라도 신입생 중에 이런 경우가 적지 않았다. 여지껏 해왔던 내신, 수능공부와는 방향성이 상당히 다르기 때문에 오히려 포텐이 터지는 경우도 있고, 반대로 우수한 고등학교 시절 성적을 뒤로한 채 적응 못하고 전과 혹은 반수의 길로 빠지는 경우도 있다.

해커가 되겠다면 해킹툴을 다뤄서 툴키디가 되는 게 아니라 보안이론이나 암호학, 해킹기법에 대해 공부한 뒤 직접 자신만의 툴을 만들 수 있어야 한다. 문서 참조.[29]

게임 프로그래머 등 게임 개발자로 활동하고 싶다면 게임을 즐기거나 랭킹 올리는데 시간을 쏟는 게 아니라 당연히 수학,물리학, 전산학에 대한 전반적인 지식을 쌓아야한다.

쉽게 말해서 전 세부 영역에 걸쳐 코딩은 기본으로 깔고가야한다는 얘기다.

실력이 상당히 쌓일 경우 다른 사람이 작성한 소스코드가 공개된 소프트웨어인 오픈소스에 분석, 수정, 새로운 아이디어 제안도 가능하다.

  • 오픈소스

  자세한 내용은 프로그래밍 문서

의 번 문단을

의 부분을

참고하십시오.

  자세한 내용은 코딩 문서

의 번 문단을

의 부분을

참고하십시오.

5. 학회[편집]

  • ACM

  • 한국정보과학회

  • 한국정보처리학회

6. 교육과목[편집]

  • 정보(교과): 정보(과목), 인공지능 기초, 정보과학, 전문 교과Ⅱ의 관련 과목[30]

  • Advanced Placement: AP 컴퓨터과학 A, AP 컴퓨터과학 기본

7. 같이 보기[편집]

  • 국제 과학 올림피아드: 국제정보올림피아드, 아시아태평양정보올림피아드, 한국정보올림피아드, 국제 대학생 프로그래밍 대회, 튜링상, 정보대학

  • 컴퓨터공학과

  • 컴퓨터과학

  • 전자공학/정보통신공학

  • 수학/물리학



[1] 물론 시립대 전전컴 처럼 정말 Computer Engineering에 초점이 맞춰진 학과도 있다. 실제로 시립대에서는 컴퓨터과학은 아예 별도의 학과로 편성되어 있다.[2] 가끔 학교 수학 성적은 낮은데도 컴퓨터과학 지식과 프로그래밍 실력이 나쁘지 않은 사람이 존재하는데 실제로는 미적분학 시험 같은곳에 필요한 공식,문제풀이를 익히지 못한거지, 응용과 추리같은것을 바탕으로 하는 사고력은 좋은 경우이다. [3] 괜히 수학과생들의 복수전공 1지망 분야가 컴퓨터겠는가? 보통은 수학과에서 컴퓨터 같이 공부하던 학생들이 컴퓨터를 공부하러 관련대학원으로 오는 식이지만, 가끔 역으로 컴퓨터전공 학생이 수학과 강의에 맛 들이고 이쪽 과목들을 듣다가 자기 이뻐하는 수학과 교수한테 영입당하는 경우도 있다. 서로의 분야에의 진입장벽이 다른 공학계열과의 진입장벽에 비해서도 그리 높지 않기 때문에 가능한 일.[4] 운영체계의 피터슨 해법이나 램포트 빵집 알고리즘, 분산체계의 팍소스 알고리즘 등에 등장한다.[5] 컴퓨터 비전, 자연 언어 처리, 데이터 마이닝 등 [6] 최종학력[7] 최종학력 인지과학 박사[8] 물리학 학사 학위도 취득[9] 전산학 복수전공[10] 전산학 석사학위도 취득[11] 전산학 복수전공; 전기공학 학사 학위를 나중에 따로 취득해서 학사 학위가 두 개다[12] 응용수학 학사 학위도 취득[13] 물리학/전산학 복수전공 및 전기공학으로 학사 학위 두개 취득[14] 전산학 학사 학위도 취득[15] 서울대학교 컴퓨터공학부 김태현 교수가 관련연구를 하고있다. 양자정보 및 양자컴퓨팅 연구실 홈페이지 [16] 연세대학교의 한요섭, 안형찬 교수, 카이스트의 마틴 지글러, 정지원 교수 ,유니스트의 Vigneron Antoine 교수, 서울대학교의 박근수 교수 등이 있다.[17] 현재 인공지능은 통계적 기법이 대세다. 룰이나 논리 기반 추론은 이미 연구될 만큼 연구되었고 더 이상 주목할 만한 학문적 성과가 나오고 있지 않기 때문이다.[18] 학부생들은 은어로 '컴구'라고 하며, 이론수업이지만 매우 중요한 수업이다.[19] 학부생들 수준에서는 바로 범용 CPU로 접근이 어려워 명령어셋이 단순한 마이크로 컨트롤러로 강의한다.[20] 앞서 설명한 '마프'와는 학교 여건에 따라 약간 영역이 다를 수도 있다. 범용 퍼스널 컴퓨터 구조와 IBM PC 어셈블리어에 집중할 수도 있다. [21] 상기 마이크로 컨트롤러 관련 어셈블리어(명령어셋를 배우나, PC에서 범용 CPU 인 x86어셈블리어를 배우기도 한다. 학교 커리큘럼마다 조금씩 다르다. 참고로 어셈블리어는 형태는 CPU마다 거의 유사하나 변수타입등이 아주 조금식 다르다. 즉 하드웨어에 의존적인 언어이다.[22] 90년대에는 UC 버클리에서 만든 Nachos를 많이 사용했다. PintOS는 2004년에 스탠퍼드에서 Nachos를 개량하여 대체한 실험용 운영체제이다.[23] 네트워크 하위단에서 동작하는 통신의 개념 오류 정정 코드, 부호화, MAC 등 간단한 이론을 배운다. 전산학 전공은 보통 네트워크 프로토콜쪽에 집중한다.[24] 통신망에서 인터넷 트래픽 전송 시 오류 정정에 많이 쓰여 네트워크 카테고리에 둔다.[25] JPEG라든지 [26] 예를 들어 컴파일러 강의를 들으면 과제로 컴파일러를 구현하라고 한다. 다만 학부수준 컴파일러의 구현 과제는 이론적 지식이 어느정도 있으면 대부분 크게 어려운 일은 아니다. 대부분 대학에서 컴파일러 구현하라는 과제는 LR 파서나 LL 파서로 전체 컴파일러를 수동 구현하라는 것이 아니라, lex/yacc 같은 툴을 이용하거나 혹은 재귀 하향 파싱 + 차량 기지 알고리즘 같은 형태가 대부분이기 때문이다. 물론 상향식 파서를 제대로 이해하는 것이 어려운 것은 사실이긴 하다.

관련 게시물

Toplist

최신 우편물

태그