마지막 업데이트 2025. 1. 22.
쓰다보니 내용이 길어져 전산학 공부자료 문서를 따로 분리하였습니다.
들어가며
전산학(Computing)에 관한 전반적인 내용을 그 분야의 질문을 통해 훑어보고, 어떻게 공부하면 좋을지, 어떠한 내용을 필수적으로 공부하면 좋을지에 대해 알아보고자 합니다. 전산학(컴퓨터공학과 컴퓨터과학)에 관한 관심이 높아지면서, 이를 어떻게 공부하면 좋을지에 대한 질문을 많이 받고는 합니다. 인터넷에는 이와 관련된 많은 자료가 올라와 있습니다. 이러한 자료 중에서 어떠한 자료가 나에게 맞는가? 어떠한 자료를 먼저 보는 것이 좋을까? 에 대한 고민도 함께 하게 됩니다. 이러한 질문에 하나의 문장으로 된 명쾌한 답을 내리기는 어려울 듯 합니다. 빠르게 발전되다보니, 유행하는 주제와 방법론이 빠르게 바뀌고 있습니다. 예를 들어, 생성 모델의 경우 생성하는 방법이 VAE(Variational AutoEncoder), GAN(Generative Adversarial Network)를 거쳐 현재는 diffusion model에 이르기까지 이러한 변화는 10년안에 변화하였습니다. 그렇지만 이러한 방법론이 근본적으로 해결하고자 하는 질문은 거의 비슷하게 흘러가고 있습니다. 그래서 각 분야를 질문을 통해 훑어보고, 이러한 질문에 작성되는 시점에서 참고할 수 있는 문헌이나 공개된 강의를 통해 알아보고자 합니다.
옛날에도 새로 생긴 학문인 Computing을 어떻게 가르칠지에 대한 고민이 있어왔습니다. Denning report라 불리우는 레포트(참고문헌 1)의 경우 이러한 과거의 고민을 엿볼 수 있습니다. “전산학 분야는 과학일까요 공학일까요?” “전산학 가르칠 때 프로그래밍이 전부일까요?” 등등 다양한 질문이 있어왔습니다. 이를 해결하기 위해 테스크포스를 만들어 하나의 가이드라인을 만들었습니다. 이 글을 중심으로 전산학을 어떻게 공부하면 좋을지에 대해 알아보고자 합니다.
전산학이란?
전산학이란 무엇일까요? 우리는 전산학을 통해서 무엇을 얻고 싶은 것일까요? 전반적인 분야를 훑어보기 전에 어떠한 분야를 다루는 학문인지를 살펴보면 좋겠습니다.
전산학을 공부하다보면 많이 마주하게될 사람이 Dijkstra 선생님입니다. 이 분이 말씀하시기를 (다익스트라 가라사데) “컴퓨터과학은 ‘천문학에서 망원경에 대한 학문’인 만큼 컴퓨터에 관한 학문이 아니다.”입니다. 천문학은 우주에 있는 천체에 관한 학문이지, 그것을 바라보는 망원경에 대한 학문은 아닙니다. 이와 마찬가지로 컴퓨터과학은 컴퓨터에 대한 학문은 아닙니다.
전산학 분야는 정보, 이론, 분석, 설계, 효율성, 구현 및 응용을 연구하고 변환하는 알고리듬 프로세스에 대한 체계적인 연구이다. 모든 전산학에 있어서 가장 기본이 되는 물음은 “어떻게 (효과적으로) 자동화 할 수 있는가?” 이다.
The discipline of computing is the systematic study of algorithmic processes that describe and transform information, their theory, analysis, design, efficiency, implementation, and application. The fundamental question underlying all of computing is “What can be (efficiently) automated?” - Denning report
짧게 이야기를 하면 전산학의 분야에 대한 기본적인 물음은 “효과적인 자동화”입니다. 컴퓨터를 언제 사용하는지에 대해 생각을 해본다면, 현실에 어떠한 문제가 있고, 이러한 문제를 보다 편하게 해결하기 위해 컴퓨터를 활용하고 있습니다. 여기서 컴퓨터는 문제를 해결하는 다양한 수단 중 하나입니다. 이러한 방법을 사람이 -시간과 비용이 많이 들긴 하지만- 직접 수행할 수 있습니다. 또한, 똑같은 문제를 해결하더라도 보다 효과적으로 일을 하는 방법도 생각해 볼 수 있을 겁니다. 이렇듯, 전산학은 컴퓨터 그 자체가 아닌 문제를 해결하는 방식으로써 바라보고자 합니다.
컴퓨터 과학?
전산학, 컴퓨터과학 (Computer Science), 컴퓨터공학 (Computer Engineering) 등 다양한 이름으로 우리의 분야는 불리우고 있습니다. 보통은 CSE, Computer Science and Engineering가 컴퓨터공학과로 불리우게 되더라고요. 어떤 학교는 CS를 강조하기 위해 컴퓨터학과나 컴퓨터과학과로 불리우기도 하며 (연세대 컴퓨터과학과, 고려대 컴퓨터학과), 어떤 대학에서는 전자과에도 이러한 부분이 붙은 흔적이 있습니다. (MIT EECS or 서울대 ECE) 이 글에서는 Computing을 공부하는 것에 대해 논하고자 하며, 전산학이라고 지칭하겠습니다.
컴퓨터 과학이라고 칭하기에는 우리가 생각하는 과학과 다른 부분이 존재합니다. 과학에 대한 명쾌하고 모두가 합치된 정의가 없고, 과학철학에서 심도있게 논의가 되고 있습니다만, 우리가 생각하는 자연과학 - 물상과 생명 - 컴퓨터 과학은 다르다고 느껴지는게 사실입니다. 컴퓨터는 인간이 만든 결과물입니다. 그렇지만 자연과학의 대상은 원자부터 우주까지 자연에 대한 전반적인 이해를 시도합니다. 다루는 대상이 다르게 느껴지기는 합니다. 그렇지만 우리는 자연과학의 대상을 이해하기 위하여 특별한 도구를 사용합니다. 수학 우리는 자연과학의 대상을 적절한 기구를 통해 측정하고 측정값을 바탕으로 우리가 알고 있는 법칙을 통해 대상에 대해 분석하고 그 결과를 내놓게 됩니다. 예시를 한 번 생각해보겠습니다. 연필 두 자루가 있는데 하나는 100원 동전 2개를 연이은 길이고, 다른 하나는 3개를 이은 길이입니다. 그렇다면 두 연필을 나란히 놓게 된다면 100원 동전 몇 개가 필요하게 될까요? 우리가 어떻게 결론을 도출하는지 생각한다면, 서로 다른 두 연필을 100원 단위로 2개 3개 추상화를 하였습니다. (2개 3개가 실제로 존재하는지에 대한 논쟁은 범위 밖이니 넘어가겠습니다.) 그리고 이 것을 잇게 된다면 각 숫자를 더해서 그 결과인 5를 내놓게 됩니다. 실제로 그 결과를 측정하면 100원짜리 동전 5개를 이은 길이가 됩니다. 이렇듯 우리는 자연과학에서 문제를 추상화하고, 추상화된 내용을 우리의 지식을 통해 새로운 지식을 내놓고, 그 결과를 실제 세계에 다시 적용함으로써 자연을 이해하고자 합니다.
컴퓨터는 우리가 아는 지식을 바탕으로 추상화된 영역에서 활약합니다. 우리는 숫자 2와 3이 있을때 더한 값이 5라는 사실을 압니다. 그렇지만 원자부터 우주까지 모든 세계를 우리의 상상만으로는 계산하기 어려운 한계점을 맞이하게 됩니다. 그래서 등장한 것이 컴퓨터입니다. 컴퓨터는 이러한 자연 시스템과 사람이 만든 시스템 사이에서 계산을 직접적으로 수행하여 문제를 해결해나가고 있기에 과학이라고도 불리우고 있습니다.
공학이라는 답도 함께 하자면, 우리는 ‘효과적’으로 계산하기를 희망합니다. 똑같은 연산을 하는데 어떤 컴퓨터(프로그램)는 1초 다른 컴퓨터는 1년 이런 경우라면 전자를 모두 희망하겠지요. (다른 비용이 동일하다고 가정한다면…) 공학도 마찬가지로 비용을 최소화하면서 문제를 해결하기에… 공학이라고도 바라볼 수 있겠습니다.
전산학의 각 영역은 어떻게 구성될까?
이 문단은 넣을까 뺄까 고민을 많이 했습니다만, 공유하면 좋을 듯 하여 공유합니다. 어떻게 전산학 각 분야를 분류하였을지에 대해 살펴보면, 보다 이해에 도움이 되지 않을까 싶어 남깁니다.
Denning report에서 흥미로웠던 부분은 전산학이 가지는 특성은 수학, 과학, 공학을 모두 아울러야 한다는 부분이였습니다. 전산학이 생기기 이전에는 수학, 과학, 공학 각자의 영역에서의 교육 및 연구 방법론이 발달하였습니다. 그렇지만 새로이 등장한 전산학은 어떻까요? 수학, 과학, 공학 각 분야와 동일하게 가르치면 될까요? 글에서는 세 가지 패러다임을 통해 전산학을 가르쳐야 한다고 주장합니다. 이론은 (theory) 수리과학에 그 기초를, 추상화는 (abstraction) 자연과학에 그 기초를, 설계는 (design) 공학에 그 기초를 두고 있습니다.
앞서 전산학이 가지는 목표는 문제를 효과적으로 해결하는 분야임을 알았습니다. 그렇다면 이러한 전산학이라는 학문을 기존의 수학, 자연과학, 공학 등의 카테고리로 분류할 수 있을까요? 현재 국내외의 많은 대학에서는 편의상 공과대학에 소속되어 있으나, 간혹 정보대학 등으로 분리된 경우도 있습니다. 이러한 부분을 넘어서 전산학을 가르치기 위해서는 어떠한 방법이 필요할까요? 기존의 다른 공학분야처럼 가르치면 되는 것일까요? Denning report로 돌아가보면, 작성된 시점에 전산학에 대한 관심이 커지면서 학과가 생겨나고, 이에 대한 학생들의 관심도 커져갔던 시점으로 파악됩니다. 이러면서 전산학에 대해 어떻게 가르치면 좋을지, 기존의 학문 분야에 비교하여서 커리큘럼을 구성하고자 하였습니다. 여기서는 비슷한 분야인 수학, 자연과학, 공학의 카테고리를 우선 각자의 교육 목표를 정의하고, 전산학에서는 이러한 세 분야가 모두 필요하다고 주장하고 있습니다.
패러다임 | 목표 |
---|---|
이론 (theory) | 1) 배우고자 하는 대상을 정의하고, 2) 이들 사이의 가능한 관계를 가정하여, 3) 이러한 관계가 참인지를 증명함으로써, 4) 이러한 결과를 해석한다. |
추상화 (abstraction) | 1) 가설을 세우고 2) 모델을 구성하고 이에 대한 예측을 하여, 3) 실험을 설계하고 데이터를 모아 4) 이러한 결과를 분석한다. |
설계 (design) | 1) 요구사항을 (requirements) 명시하고 2) 요구되는 사양을 (specification) 명시하고 3) 시스템을 디자인, 구현 하여 4) 이러한 시스템을 테스트한다. |
각 패러다임의 경우 이론은 수학분야에, 추상화는 자연과학 분야에, 설계는 공학에서 문제를 해결하는 방법으로 분석하고 있습니다. 전산학의 경우 “문제를 효과적으로 해결”하기 위하여 세 패러다임이 교차하는 지점에 위치하고 있습니다. 때로는 수학의 엄밀한 이론을, 문제를 해결하기 위하여 자연과학의 추상화를, 실제 문제를 제한된 사양 내에서 해결하기 위한 공학적 설계 패러다임을 요구할 수 있습니다. Denning report의 경우 이러한 세 패러다임 모두를 고려하면서 커리큘럼을 설계하고, 학습을 수행하는 것이 적절하다고 주장하고 있습니다. 전반적인 전산학 커리큘럼이나 공부를 수행할 때 이러한 부분에 유념하면서 공부를 한다면 보다 튼튼한 기초를 얻을 수 있습니다.
프로그래밍?
프로그래밍은 전산학 세부분야를 공부, 적용하는데 중요한 부분으로, 최소한의 역량을 달성하여야 합니다. 그렇지만, 프로그래밍이 전산학의 전부는 아닙니다. 예를 들어, 컴퓨터 시스템 구조의 디자인, 운영체제의 디자인 그리고 모델의 증명의 경우 직접적으로 프로그래밍은 아닙니다. 앞서 논의한 세 패러다임 중에서 과학과 공학의 경우를 생각해보겠습니다. 이들 전공에서는 보통 “실험 교과목”이 필수로 들어가 있습니다. 예를 들어, 일반화학실험의 경우 화학과에서 수행되는 실험을 직접 간단히 진행해보게 됩니다. 이를 통해 일반화학에서 배운 내용을 직접 실험을 통해 증명을 해보고, 그 과정에 필요한 실험 기구의 사용 및 실험 방법론을 습득하게 될 것입니다. 프로그래밍의 경우 이러한 실습에 대응된다고 할 수 있습니다. 기초적인 지식을 다양한 경로를 통해 알더라도, 이를 직접 실행에 옮겨보는 것이 보다 도움이 될 것입니다. 흔히 말하는 “과제를 통해 배운다.”, “코드를 복사 붙여넣기 하기 보다는 따라 써보는게 도움이 될 것이다.” 라는게 이러한 맥락에서 나온 것일겁니다. Denning report의 경우 필수 교과목의 경우 이러한 기본적인 프로그래밍 도구를 가르치는 것을 권고하고 있습니다. 이러한 이유로, 기초적인 과정을 습득하는데 있어서 이와 관련된 내용을 직접 실행해보기 위한 프로그래밍 지식이 필요합니다.
전산학의 분류
Denning report
Denning report의 경우 전산학의 세부 분야를 아래 9가지로 나누고 있습니다.
- 알고리듬과 데이터 구조
- 프로그래밍 언어
- 컴퓨터 구조
- 수치 및 기호 계산
- 운영체제
- 소프트웨어 방법론과 그 공학
- 데이터 베이스와 데이터 검색 시스템
- 인공지능과 로봇학
- 인간-컴퓨터 상호작용
이러한 분야 전반을 둘러보기 위해서 필수적인 개념은 아래와 같이 구성할 수 있습니다.
- 기초 알고리듬 개념
- 컴퓨터 구조 (폰 노이만 구조)
- 수학 프로그래밍
- 데이터 구조와 추상화
- 계산의 한계
- 운영 체제와 그 보안
- 분산 컴퓨팅과 네트워크
- 인공지능 모델
- 파일과 데이터베이스 시스템
- 병렬 컴퓨팅
- 인터페이스
현재에서 바라보기
2024년 글을 쓰는 현재 시점에서 바라본다면, 지금도 비슷하게 분류할 수 있겠습니다. 그렇지만, 4번의 “수치 및 기호 계산” 부분은 컴퓨터 관련 학과에서 많이 인기가 사그라들은 듯 합니다. 8번 인공지능에 어느정도 포함되어서 논의가 되기도 하고, 수학과 등에서도 다루기도 합니다. 만약 이를 대체할 새로운 분야를 넣게 된다면 “컴퓨터 보안”을 넣어보고 싶습니다. 빠르게 발전해왔으며-20년 전과 지금의 공격방식의 차이를 생각해보면-이에 대한 파급 효과가 큰 부분을 보아 어느정도 자리를 잡을 수는 있겠습니다.
필수적인 개념의 경우 보통은 아래와 같은 전공 수업에서 다루게 됩니다. bold 된 부분은 저가 다닌 학교의 전공 필수 교과목이였습니다.
- 기초 알고리듬 개념 - 알고리즘
- 컴퓨터 구조 - 컴퓨터 구조
- 수학 프로그래밍
- 데이터 구조와 추상화 - 데이터 구조
- 계산의 한계 - 계산이론
- 운영 체제와 그 보안 - 운영 체제, 컴퓨터 보안
- 분산 컴퓨팅과 네트워크 - 컴퓨터 네트워크
- 인공지능 모델 - 인공지능, 기계학습, 딥러닝 등.
- 파일과 데이터베이스 시스템 - 데이터베이스, 운영체제
- 병렬 컴퓨팅 - 병렬 컴퓨팅
- 인터페이스 - 인간-컴퓨터 상호작용(HCI)
혹은 최신의 분류방법을 알고 싶으시다면 ACM Computing Classification System을 참고하셔도 좋겠습니다.
기타 관련 자료
KAIST 강지훈 교수님의 전산학부 소개영상에서 전산학에 대한 소개를 알아볼 수 있습니다.
맺으며
이번 글을 통해서 전산학이란 무엇인가? 그리고 세부 분야에 대해 알아보았습니다. 다음 글을 통해서는 각 세부 분야 별로 어떠한 공부 자료가 있는지에 대한 추천을 알아보겠습니다. (아마도 이 부분은 틈틈이 생각나는데로 업데이트 될 듯 해요.)
참고문헌
본 블로그 글은 아래 글을 참고하여 작성되었습니다.
- P. J. Denning et al. “Computing as a Discipline”, Computer, Volume 22. Issue 2, 1989.
- ACM Classification System
- Anil Ada. What is TCS?