우리가 공부하는 소프트웨어 공학, 운영체제 등은 모두 ‘컴퓨터 과학’이라는 큰 학문 산하의 분야이다. 컴퓨터 과학은 알고리즘, 계산 및 정보에 대한 이론적 연구에서부터 하드웨어와 소프트웨어의 계산 시스템 구현에 대한 실질적인 문제에 이르기까지 다양한 주제에 걸쳐 있다. 이처럼 광범위하기에 '컴퓨터 과학'의 본질에 관한 학계의 논쟁은 아직도 활발하다고 한다.
모두를 위한 컴퓨터 과학 CS50 2019에서 정의하는 컴퓨터 과학
컴퓨터 과학이란 문제 해결에 대한 학문이다.
문제 해결이란 입력(input)을 전달받아 출력(output)을 만들어내는 과정이며, 그 중간에 있는 과정이 바로 컴퓨터 과학이다.
이러한 입력과 출력을 표현하기 위해선 우선 모두가 동의할 약속(표준)이 필요한데, 우리가 10진법을 당연히 여기는 것처럼 컴퓨터에도 2진법이라는 약속이 있다.
컴퓨터 과학의 주요 분야
- 수학적 기초
- 계산 이론
- 알고리즘과 자료 구조
- 프로그래밍 언어론과 정형 기법
- 병행·병렬·분산 컴퓨팅
- 소프트웨어 공학
- 컴퓨터 구조, 운영 체제
- 네트워크
- 인공지능
- 데이터베이스
- 컴퓨터 그래픽스와 시각화
- 이미지 처리와 음향 처리
- 소셜 컴퓨팅과 인간과 컴퓨터 상호 작용
- 계산과학
- 정보 보호
프로그래밍 패러다임
프로그래머에게 프로그래밍의 관점을 갖게 해 주고, 결정하는 역할을 한다. 예를 들어 객체지향 프로그래밍은 프로그래머들이 프로그램을 상호작용하는 객체들의 집합으로 볼 수 있게 하는 반면에, 함수형 프로그래밍은 상태값을 지니지 않는 함수값들의 연속으로 생각할 수 있게 해준다.
- 함수형 프로그래밍
- 명령형 프로그래밍
- 선언형 프로그래밍
- 객체지향 프로그래밍
- 절차적 프로그래밍