많은 비전공자 프로그래머들이 “나는 컴퓨터 과학을 정식으로 배우지 못했으니, 부족하다”고 느낍니다. 그리고 그 부족함을 채우기 위해 네트워크, 운영체제, 아키텍처, 알고리즘 등의 ‘전문 지식’을 학습하려고 합니다. 물론 이 지식들은 실무에서 매우 유용합니다. 하지만 정작 컴퓨터 과학의 본질은 거기에 있지 않습니다.

‘무엇인가’에서 ‘어떻게 할 것인가’로

컴퓨터 과학은 종종 컴퓨터나 프로그래밍 언어를 연구하는 학문으로 오해받곤 합니다. 물론 그런 기술적 요소들도 중요하지만, 그것이 이 학문의 본질은 아닙니다. 컴퓨터 과학의 핵심은 과정(process), 즉 무언가를 어떻게 수행할지를 다루는 데 있습니다. 문제를 해결하고, 목표를 달성하고, 시스템을 설계하는 절차적 사고가 중심입니다.

다른 전통적 과학들—예를 들어 생물학, 물리학, 화학—은 기본적으로 “이것은 무엇인가?”라는 질문에 답하려고 합니다. 이들은 세상을 설명하고, 관찰하며, 이해하려는 학문입니다. 반면 컴퓨터 과학은 전혀 다른 질문을 합니다.

  • “이걸 어떻게 작동하게 만들 수 있을까?”
  • “이런 시스템을 어떻게 설계하고 실행할 수 있을까?”

즉, “what is”가 아니라 “how to make”를 다루는 학문입니다. 컴퓨터 과학의 관심사는 존재하는 현상을 설명하는 것이 아니라, 새로운 과정을 상상하고 그것을 작동하게 만드는 데 있습니다. 이는 ‘지식’의 학문이라기보다는 ‘실행’의 학문입니다. 세상을 해석하는 학문이 아니라, 세상을 재구성하고 만들어내는 학문입니다.

이처럼 컴퓨터 과학은 ‘어떻게 할 것인가’에 대한 사고를 중심에 둡니다. 논리적이고 추상적인 기반 위에 실제적인 해결책을 쌓아갑니다. 이론과 실천이 자연스럽게 연결되어 있기 때문에, 단순한 학문적 탐구를 넘어 현실을 만들어내는 설계도가 되기도 합니다. 이 점에서 컴퓨터 과학은 “미래를 예측하는 가장 좋은 방법은 그것을 만드는 것이다”라는 앨런 케이(Alan Kay)의 말을 가장 적극적으로 실현하는 학문이기도 합니다.

다익스트라: 컴퓨터를 쓰지 않았던 컴퓨터 과학자

Edsger W. Dijkstra

컴퓨터 과학이 지식의 습득보다 사고의 구조에 가깝다는 점은 전설적인 과학자 에드가 다익스트라(Edsger W. Dijkstra)의 사례에서도 잘 드러납니다.

그는 구조적 프로그래밍, 데드락 이론, 운영체제 동기화 문제 등의 개념을 만든 인물입니다.

그런데 놀랍게도 그는 컴퓨터를 거의 사용하지 않았습니다.

다익스트라는 대부분의 연구를 펜과 종이로 수행했습니다. 그는 “컴퓨터 과학은 컴퓨터에 관한 것이 아니다”라고 말하며, 프로그래밍은 사고의 명료성을 기르는 수단이라고 강조했습니다.

그의 대표적인 사고방식은 일상적인 문제를 컴퓨터 과학적 절차로 바꾸는 방식에서도 엿볼 수 있습니다.

다익스트라가 자주 사용했던 은유와 비유는 그가 문제를 푸는 방법을 보여줍니다. 현실 세계의 사물들—기차역, 여행자, 도로망—은 다스트라에게 절차적 문제를 구조화하기 위한 인지적 도구였습니다. 그는 문제를 수학적으로 추상화하기에 앞서, 현상 속에서 작동하는 구조적 패턴을 포착하려 했습니다.

예를 들어 그는 여행자 문제(TSP)를 단순히 “최단 경로를 구하라”고 하지 않았습니다. 그는 이를 “여행자가 각 도시를 정확히 한 번씩 방문하고 돌아오는 방법을 어떻게 구성할 것인가”라는 절차로 바꾸어 설명했습니다.

예를 들어, 세마포어를 설명할 때 단순히 메모리 플래그의 개념으로 접근하지 않았습니다. 대신, 기차가 교차로에서 충돌하지 않도록 신호기를 설치하는 철도 시스템의 은유를 통해 문제를 구조화했습니다. 이 비유는 단지 이해를 돕는 장치가 아니라, 다익스트라가 문제를 바라보는 방식 그 자체를 반영한 것입니다.

그의 사고는 현실에서 시작해 추상으로 이동합니다. 그는 프로그래밍을 단순한 기술이 아니라, 명확하고 정제된 사고의 표현으로 여겼습니다. 현실 속의 복잡한 문제를 은유를 통해 간결한 절차로 바꾸고, 그것을 다시 형식적인 구조로 정리하는 과정—이것이 다익스트라가 문제를 해결하는 방식이었습니다.

컴퓨터 과학은 ‘실행 가능한 추상화’를 설계한다

컴퓨터 과학이 독특한 또 하나의 이유는, 그것이 실행 가능한 개념을 다루는 학문이라는 점입니다.

다른 과학도 이론과 모델을 만듭니다. 하지만 대부분은 그것을 현실에서 직접 실행하지는 못합니다.

  • 사회학자는 이론을 세우지만, 실험적인 사회를 만들어볼 수는 없습니다.
  • 물리학자는 방정식을 세우지만, 입자의 움직임을 실시간으로 조작하긴 어렵습니다. 아인슈타인의 일반상대성 이론이 검증되기 위해서는 일식이 필요했고, 입자물리학에서는 거대 입자가속기를 만듭니다.

반면, 컴퓨터 과학자는 “이렇게 설계하면 시스템이 잘 작동할 것이다”라는 아이디어를 바로 코드로 구현할 수 있습니다. 그리고 곧장 실행해보고 실험할 수 있습니다.

이론이 곧 실험이며, 설계가 곧 현실이 되는 세계—이것이 바로 디지털 존재(digital being)의 특성입니다.

MIT 미디어랩의 창립자인 니콜라스 네그로폰테는 __Being Digital__에서 디지털 존재를 “복제되고, 전송되며, 수정 가능한 비트의 세계”로 묘사했습니다. 이는 아이디어가 쉽게 조작되고, 테스트되고, 실행될 수 있는 환경을 의미합니다. 이런 점에서 디지털은 생각을 곧장 구현해볼 수 있는 가장 이상적인 매체입니다.

  • 우선, 디지털은 매우 유연하고 쉽게 바뀔 수 있는(moldable) 존재입니다. 어떤 구조든 바꾸어볼 수 있고, 실행 후 다시 수정하는 일이 물리적 제약 없이 반복 가능합니다. 이는 사고를 실행해보고, 실패하면 다시 고치고, 또다시 실행해보는 이론 구성의 실험실 역할을 합니다.
  • 또한 디지털 시스템은 확장성(scalability)이 뛰어납니다. 아주 작은 알고리즘 하나도 전 세계적인 규모로 확장해 실험할 수 있습니다. 이처럼 디지털은 작은 아이디어가 큰 시스템 속에서 어떻게 작동하는지를 시험할 수 있는 유일한 매체입니다.
  • 무엇보다, 디지털은 실패의 부담이 거의 없습니다. 실험이 틀리면 삭제하고, 다시 시작하면 됩니다. 물리적인 대상은 한 번 망가지면 다시 만들기 어렵지만, 디지털 객체는 언제든지 되돌릴 수 있고, 복원할 수 있고, 새로 만들 수 있습니다. 이처럼 디지털은 ‘지울 수 있는 사고의 공간’이며, 프로그래머에게 두려움 없이 반복하고 진화할 수 있는 정신적 자유를 줍니다.

이러한 특성 덕분에 디지털은 단순한 기술의 공간을 넘어서, 이론이 태어나고 실험되며 성장하는 지성의 공간이 됩니다.

구성주의 학습(constructionism) 이론가 세이모어 페이퍼트(Seymour Papert)는 그의 저서 __Mindstorms__에서 컴퓨터를 “생각을 위한 도구(an object to think with)”라고 표현했습니다. 그는 학습자가 실제로 무언가를 만들면서(construct) 사고를 실행 가능한 형태로 바꿔간다고 보았으며, 컴퓨터는 아이디어를 실험하고 구체화하는 매개체로서 강력한 교육적 의미를 지닌다고 주장했습니다.

컴퓨터 과학은 단지 아이디어를 논리적으로 정리하는 것이 아니라, 그것을 살아 움직이는 코드로 구현하고 실험할 수 있게 합니다. 생각을 실행하는 능력—이것이 바로 컴퓨터 과학이 가진 독특한 특성입니다.

지식보다 중요한 것: 추상화하고 구성하는 힘

이 모든 이야기를 종합하면, 컴퓨터 과학은 ‘이걸 알아야 한다’는 지식의 목록이 아니라, 문제를 바라보고 구성하는 능력의 훈련입니다.

비전공자든 전공자든, 많은 프로그래머들이 “컴퓨터 과학을 공부해야 한다”고 느낄 때, 그 말은 종종 “자료구조를 더 알아야 한다”거나 “TCP/IP를 공부해야 한다”는 식으로 해석됩니다. 물론 그 지식들은 중요합니다. 그러나 그것은 표면이고, 그 아래에는 더 깊은 사고의 구조가 존재합니다.

  • 문제를 구성하는 능력,
  • 과정을 절차로 나누고, 이를 추상화하는 사고,
  • 생각을 논리로 구조화하고, 그것을 실행 가능한 형태로 만들 수 있는 능력

이것이 바로 정말로 핵심적인 역량입니다.

‘지식을 많이 아는 사람’보다는, ‘질문을 바르게 던질 줄 아는 사람’, ‘문제를 작게 나누고 해결할 수 있는 사람’이 중요합니다.

결론: 컴퓨터 과학은 ‘가능성의 구조’를 설계하는 학문

컴퓨터 과학은 단순히 “컴퓨터를 다루는 법”이 아닙니다. 그것은 “이걸 어떻게 하면 작동하게 만들 수 있을까?”라는 질문에 끝없이 도전하는 학문입니다. 그리고 그 질문은 단순히 도전에서 멈추지 않습니다. 바로 실행되고, 테스트되고, 개선됩니다. 즉, 컴퓨터 과학은 아이디어를 가능하게 만드는 엔진입니다.

비전공자이기 때문에, CS를 잘 모르는 것이 핸디캡이 되어서, 그래서 CS 학위를 취득할 필요가 있다고 생각해서 CS 공부를 시작하면서 개념들을 외우기 시작하는 것보다 더 중요한 것은,

중요한 건, 여러분이 문제를 어떻게 바라보는가, 어떻게 쪼개는가, 어떻게 표현하는가입니다. 그리고 그것을 코드로 ‘살아서 동작하게’ 만들 수 있는가입니다.