컴퓨터 과학 ()은 전산 이론, 하드웨어 및 소프트웨어에 중점을 둔 정보과학의 한 분야이다. 정보 자체보다는 정보의 수집ㆍ전달ㆍ축적ㆍ가공을 하는 도구로서의 기계를 연구 대상으로 삼는다. 전산 및 그 응용기술에 대한 과학적이고 실용적인 접근을 의미하며 전산 이론 및 시스템 설계를 다루는 전문가를 컴퓨터 과학자라 부른다. 컴퓨터 과학의 하위 분야는 컴퓨터 프로그램 실행의 실용적인 기술과 컴퓨터 시스템의 응용 그리고 순수하게 이론적인 분야로 나뉠 수 있다. 몇몇 계산 문제의 기본적인 속성을 공부하는 계산 복잡도 이론과 같은 것은 매우 추상적이고, 이것과 다른 컴퓨터 그래픽스은 현실 세계 응용에 중점을 둔다. 또 다른 하위 분야는 계산 실행에 중점을 둔다. 예를 들어, 프로그래밍 언어 이론은 계산 서술의 접근을 공부하고, 컴퓨터 프로그래밍 학문 그 자체는 프로그래밍 언어와 복잡한 시스템 사용의 다양한 측면을 조사하고, 인간-컴퓨터 상호작용은 컴퓨터와 계산을 유용하고 인간들에게 보편적으로 접근이 쉽게 만드는 데 중점을 둔다. 링크=프로그래밍 언어 링크=계산 복잡도 이론 링크=컴퓨터 그래픽스 링크=인간-컴퓨터 상호작용 컴퓨터 과학은 정보 및 전산의 이론적 기초와 그것의 구현 및 응용을 위한 실용적인 기술을 다룬다 컴퓨터 과학의 역사는 현대의 디지털 컴퓨터의 역사만을 가리키는 것이 아니다. 주판과 같이 계산을 수행하는 기계는 오래전부터 있었다. 1623년에는 최초의 계산기계가 만들어졌고, 찰스 배비지는 19세기 초에 차분기관을 만들었다. 1900년대에 들어서 IBM사가 펀치카드 시스템(PCS)을 개발하여 회계에 관련된 일을 하도록 보급하였다. 하지만 이들 모두는 주어진 한 가지의 일만 수행할 수 있었다. 1920년 이전까지 컴퓨터 (computer)는 계산(compute)을 담당하는 사무관을 일컫는 용어였다. 쿠르트 괴델, 알론조 처치, 앨런 튜링과 같은 컴퓨터 과학 초기의 학자들은 계산 가능성 문제(종이와 연필만을 가진 사무관이 철저하게 어떠한 지시에 따라 행동하여 계산할 수 있는 것들은 어떤 것들인가?)에 흥미를 느꼈다. 이러한 흥미는 계산이라고 하는, 지겨울 수도 있고 오류율이 높은 작업을 자동화하고자 하는 욕구로부터 비롯되었다. 그들은 이리하여 한 가지의 종류의 작업만 수행할 수 있었던 기존의 기계들과는 다른, 이론적으로 어떠한 계산도 가능한 기계를 만들고자 했다. 이러한 노력이 현대 컴퓨터 과학의 지평을 열었다. 1940년대에 들어서자 더욱 강력한 기능을 지닌 계산기들이 등장했고, 이때부터 컴퓨터 는 사람이 아닌 이들 기계를 부르는 용어로 굳어졌다. 컴퓨터가 단순한 숫자 계산보다 더 다양한 기능을 할 수 있는 것들이 알려지면서 컴퓨터 과학이라는 분야가 더욱 넓어지기 시작했다. 1960년대부터 여러 대학에 컴퓨터 과학 학과와 전공 과정이 생기면서 컴퓨터 과학이 학문으로 인정받기 시작하였으며, 학문의 쓰임새에 따라 세분되었다. 컴퓨터 과학은 오늘날 많은 사람들이 사용하는 컴퓨터라는 기계에 대한 학문으로 한정되지 않는다. 유명한 컴퓨터 과학자 에츠허르 데이크스트라는 "컴퓨터 과학에서 컴퓨터란, 천문학에서 망원경 이상의 것이 아니다."라고 하였다. 일반적으로 컴퓨터 시스템을 디자인하고 보급하는 것은 컴퓨터 과학의 범주내에 포함되지 않는 것으로 알려져있다. 예를 들면 컴퓨터 하드웨어와 소프트웨어를 연구하는 분야는 컴퓨터 공학으로 불리고, 컴퓨터의 보급과 사용에 관한 연구는 정보 기술 또는 정보 시스템의 분야에 속한다. 하지만, 컴퓨터와 연관된 이러한 분야들은 컴퓨터 과학과의 상호작용을 통해 발전해왔다. 컴퓨터 과학 연구는 인공지능, 인지 과학, 물리학, 그리고 언어학과 같은 학문과 공생한다. 많은 과학 분야와 비슷하게 컴퓨터 과학도 수학과 가장 밀접한 관계를 가지고 있을뿐만 아니라, 수학에 기초를 둔 과학의 한 분야이다. 컴퓨터 과학의 기초에 큰 영향을 미친 수학이 조지 불의 불 대수이다. 불 대수는 이진법을 기반으로 한 대수학으로, 그 외에 체론과 환론 또한 중요한 영향을 미쳤다. 초기의 컴퓨터 과학은 쿠르트 괴델과 앨런 튜링 등의 수학자들이 큰 영향을 끼쳤고, 수리논리학, 범주론, 도메인 이론, 대수학과 같은 수학 분류들은 컴퓨터 과학과 함께 발전하고 있다. 스탠 켈리-부틀은 "과학과 컴퓨터 과학의 관계는 유체동력학과 납공업의 관계와 같다" 라고 말하였다. 이는 컴퓨터 과학이 과학의 특성을 충분히 갖지 않는다는 오해에 기인한다. 컴퓨터 과학과 소프트웨어 공학의 관계에 대해서는 논란이 많다. 컴퓨터 과학과 소프트웨어 공학의 용어 정의가 많은 사람들에게 다소 모호하게 보이기 때문이다. 소프트웨어 공학은 컴퓨터 과학의 한 분야에 불과하다고 말하는 사람들이 있는 반면, 소프트웨어 공학은 다른 분야에 대한 응용이나 자원을 운용하는 방법 등 실용적인 특징에서 컴퓨터 과학의 다른 분야와 잘 구분된다. 컴퓨터 과학은 그 이론의 적용법에 따라 여러 분야로 나뉜다. 일반적인 분류는 다음과 같다. *정보철학 정보의 본질및 기본 원리에 대한 탐구및 정보이론과 계산 방법론의 정교화및 적용 *정보심리학 인간이 수행하는 정보 기술 행위를 심리학 관점과 연구 방법론으로 해결 *인지과학 *언어학 이산수학 이산적인 데이터를 취급하는 컴퓨터를 분석하기 위한 수학 그래프 이론 자료 구조와 검색 알고리즘, 네트워크 모델링 등의 바탕이 되는 이론 정보 이론 정보의 처리와 통신의 바탕이 되는 이론 수리논리학 불 대수와 같이 논리적인 정보 처리의 바탕이 되는 이론 도메인 이론 확률론과 통계학 계산 가능성 이론 계산모델을 이용하여 어떤 문제가 계산이 가능한지를 연구하는 이론 계산 복잡도 이론 계산 문제의 소요 시간, 메모리 사용량 등을 연구하는 이론 오토마타 이론 알고리즘 어떠한 문제를 해결하기 위한 여러 동작들의 유한한 모임과 그 효율성 알고리즘 분석 알고리즘의 시간 복잡도와 공간 복잡도의 연구 자료 구조 자료를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 구조 프로그래밍 언어 알고리즘을 표현하기 위한 프로그래밍 패러다임, 그러한 언어의 속성 컴파일러 (흔히 수리논리학에 의지하여) 컴퓨터 프로그램을 번역하는 작업 동시 처리 다수의 계산을 한꺼번에 처리하는 것과 관련된 연구, 그럴 때의 정보의 보호 병행 처리 다수의 계산을 여러개의 스레드로 나누어 처리하는 방법 분산 처리 한 가지 일을 네트워크를 통해 여러 컴퓨터로 분산하여 처리하는 방법 소프트웨어 공학 소프트웨어의 디자인, 개발, 시험, 엔지니어링에 관한 연구 요구 공학 소프트웨어공학의 한 분야로, 소프트웨어의 요구사항을 분석하는 분야에 관한 연구 정형 기법 소프트웨어 디자인에 대한 수학적 접근 역공학 임의의 소프트웨어의 디자인을 역으로 알아내는 방법 컴퓨터 프로그래밍 프로그래밍 언어를 사용하여 알고리즘을 설계하는 방법 컴퓨터 구조 컴퓨터 시스템의 디자인, 구성, 최적화하는 작업의 연구 운영 체제 컴퓨터 프로그램과 하드웨어의 관리를 담당하는 시스템 폰 노이만 구조 컴퓨터 네트워크 컴퓨터끼리의 정보교환과 관련하는 통신 프로토콜과 알고리즘의 연구 암호학 정보를 보호하기 위한 언어학적 및 수학적 방법론 인공지능 인공적인 지능을 만들 수 있는 방법론이나 실현 가능성 등을 연구 자동 추론 컴퓨터가 일련의 논리적 사고를 행하여 무언가를 추론해내기 하기 위한 연구 로봇학 로봇의 디자인, 설계, 기능에 관한 연구 컴퓨터 비전 컴퓨터가 카메라 등의 시각적 센서를 통해 얻은 신호의 의미를 해석하게끔 하는 연구 기계 학습 기계 또는 컴퓨터가 센서를 통해 새로운 정보와 지식을 얻고, 파악하게 하는 기술 데이터베이스 데이터를 쉽게 접근, 처리, 갱신할 수 있도록 구성한 데이터의 집합체와 그에 관한 연구 데이터 마이닝 대규모로 저장된 데이터 속에서 특정 패턴을 자동적으로 찾고자 하는 노력 컴퓨터 그래픽스 컴퓨터를 이용해 실제 세계의 영상을 조작하거나 새로운 영상을 만들어내는 기술 영상 처리 영상을 변화시켜 어떠한 효과를 내는 기술 인간과 컴퓨터 상호작용 인간(사용자)과 컴퓨터 간의 상호 작용에 대해 연구 컴퓨터 과학자 *루치아노 플로리디, 정보철학( The Philosophy of Information) 분류:응용과학