2004년 2학기 공학수학 숙제 #2 EXERCISE 1

2003-11907 강신행

사실 이번에 우리가 읽어야 했던 글들은 마치 다양한 주제의 이야기들을 써 놓은 것같지만, 중심 줄기가 명확했다. 네 개의 글이 마치 Tree를 그려가듯이, 하나의 root에서 만나는 데, 그것은 바로 “컴퓨터 공학도에게 수학이 필요하다”는 것이었고 이를 위해 다양한 예를 들어가며, 또한 다양한 각도로 바라보며 강조해주는 글들이었다.

먼저, 처음에 읽었던 글은 "Proof and Programs 19th Century Logic and 21st Century Computing"(19세기 논리학, 20세기 계산학) 이라는 글이었다. 주로 우리가 현재 배우고 있는 Logic의 역사에 대한 개략적인 글이었다. 처음에는 George Boole(1815-1864)의 Boolean algebra로부터 시작하여서, Modern logic의 창시자인, Gotlob frege(1848-1925)의 Frege's inferences를 거쳐, 우리를 지금도 끊임없이 괴롭히고 있는 Gerhard Gentzen의 Natural Deduction(1934), 첫번째 프로그래밍 언어의 researcher라고 해도 과언이 아닌, Alonzo Church(1903-1995)의 lambda calculus와, Church's typed lambda calculus, 그리고, Haskell Curry(1900-1982)와, William Howard의, 역시 수업시간에도 나온 Curry-Howard Isomorphism, 그리고 그 이후의 현대적인 여러가지 tools까지에 대하여서 간단한 설명들과 그를 보충하기 위한 예들이 나와있었다. 비록 방금의 나열에서 어떤 사람은 활동시기로, 또 어떤 사람은, paper의 발표시기 등으로 나열하여 일관성이 없긴 하지만 위의 연도들을 잘 살펴보면, 지금 우리가 배우고 있는 logic이 채 200년도 안 된 것이며, Gentzen을 통하여서, Natural Deduction 등이 완성된 것도 채 100년이 지나지 않았음을 볼 수 있다. 개인적으로 수학이라는 학문의 여러 분야들이 대부분 몇 천년씩 된 것들이라고 생각하고 있었는데, 이 logic이라는 분야는 매우 역사가 짧은 학문이었다는 사실에 일단 놀라면서 글을 읽었다.

앞의 역사와, 각 인물들의 업적들, 성과들을 읽으면서, 많은 도전을 받았다. 20세기 초의 양자역학이 태동하던 시기의 물리학자들의 눈부신 연구들을 보며 “나도 언젠가 저런 사람들 사이에 껴서, 하루 이틀 사이로 먼저 논문을 내서 노벨상을 받고 ,사람들이 많은 곳에 나가, 내 연구결과를 주장하고, 물리학 책에 이름이 나고 그랬으면 정말 좋겠다” 란 생각을 했었던 것이 기억난다. 지금도 그 생각은 변함없다. 다만 그 분야가 어떻게 될 것이냐 하는 것이 문제가 되겠지만......(물리학은 안 될 것같고, 아마 컴퓨터공학일 것이라고 생각하고만(!) 있다)

특히, Gentzen과, Church는 거의 같은 연구를 한 셈이었지만, 그것을 각 둘은 미처 모르고 있었다는 것을 보고 웃음을 지음과 동시에, 이는 다른 기타 학문에서도 동시에 나타나는 현상임을 보고 주의를 기울여서 보았다. 마치 학문을 하는 것은, 엄청 높은 산을 향해 등산을 하는 것같아서, 다른 등산로로 시작했지만, 어느 샌가 만나서 같이 올라가는 것이라는 생각을 했다. Curry와 Howard는 그 둘이 같은 중간지점을 향해 걸었다는 사실을 발견한 것이고 말이다.

나는 원래부터 논리라는 학문을 상당히 싫어하는 편이었다. 이것은 논리 그 자체가 싫었다기보다는, 내 자신이 논리적이지 못하기 때문에, 다른 논리적인 사람에게 눌릴 때가 많았었고, 그리고 성격 상 자신의 의견을 잘 개진하지 않는 편이고, 주로 다른 사람들의 말에 귀를 기울이는 편이기 때문에, 논리적으로 말할 수 있는 기회가 거의 없었기 때문일 것이다(다시 이건은 역으로 논리적으로 말할 수 없었기 때문에 이런 성격을 가지게 된 것일 수도 있을 것이다).

하지만 이렇게 이번 수업을 들어가면서, 그리고 이런 Logic의 역사에 관한 글을 읽어가면서, 또한 이 글에서 이해되지 않는 부분들에 대해 더 심층적으로 잘 알기 위해 논문이나 자료들을 찾아가면서,  Logic이라는 학문의 필요성, 아니 학문 습득의 필요성을 뼈저리게 느끼게 되었다. 수업시간에 교수님께서 “설득됐어요? 그럼 증명한 거예요”라고 하셨던 것이 기억난다. 이와 연관하여 생각해보았을 때 Logic이라는 것은, 설득을 하기 위한 도구이다. 위의 선진들이 개발해놓은 레고블럭들을 사용하여서 설득을 하는 것이었다. 레고블럭이 많으면 많을 수록 좋은 것이다(물론 soundness, completeness를 지켜야 겠지만) 나도 언젠가 하나의 레고블럭을 더 할 수 있으면 좋겠다. 일단은 지금 내게 주어진 레고블럭을 제대로 사용하는 것이 더 급하긴 하지만 말이다.

나머지 세 개의 글. “Why Universities Require Computer Science Students to Take Math” , “Why Math” , “Mathematical Reasoning in SW Engineering Education” 은 제목을 바꿔놓아도 전혀 어색함이 없을 정도로, 비슷한 주제의 내용이었다. 통틀어서 몇 개의 키워드를 가지고, 정리를 해 보고자 한다.

"Discrete mathematics, especially logic, plays an implicit role in software engineering

similar to the role of continuous mathematics in traditional physically based engineering disisplines"

이 글을 읽기 전까지 이산수학이라는 과목(본인은 학문이라기 보다는 중간 과목으로 받아들였다)을 내심 무시하고 있었다. 정말 말그대로 과정이라는 생각을 했다. 명확하게 이산수학이 쓰일만한 다른 과목이 있는 것도 아닌 것같고, 언제부턴가 들리는 소리로는 이산수학을 고등학교에서도 배운다는 말에, “고등학생들도 배운다는 것을 대학와서 배워야해?” 그렇게 생각하여 더욱더 그리하였다. 또한 책을 읽어봐도 당연한 이야기, 당연한 이야기들로 가득하였고, 고등학교 때, 모의고사 문제를 풀면서, 혹은, 미적분학(Calculus)나, 공업수학에서의 미분 방정식을 풀 때처럼의 기쁨이나 명쾌한 답도 없는 것처럼 보였고, 선배들도 “이산수학”을 그리 대단치 않게 여기는 것처럼만 보였다.

하지만 이 글에서는 컴퓨터 공학에서의 이산수학을 물리에서의 미적분학(글에서 continuous calculus라고 하였지만 미적분학이라고 생각하고 소감을 풀어가겠다)과 같은 레벨에 두었다. 오히려 아직까지는 본인이 컴퓨터 공학에 관한 이해보다는 물리학에 대한 이해가 더 깊을 것이라고 믿고 물리학에서 미적분을 빼면 뭐가 남을 까 생각해 봤다. 생각만 해도 끔찍하지 않을까? 시중에 도는 책으로 “수학 없는 물리”라는 책이 있긴 하지만, 사실 상 그 책은 공식이 없다 뿐이지, 공식을 다 말로 풀어놓은 것에 불과했다. 컴퓨터 공학에서의 이산수학을 빼면 컴퓨터 공학은 성립할 수 없다고 하는 말이나 다름없다. 솔직히 말해 지금은 전혀 다가오지 않는다. 프로그램을 짤 때, 그냥 손으로 그림이랑 글씨를 몇 개 끄적여 보고, 바로 컴퓨터에 앉아 코딩을 하는데, 여기에 이산수학이랑 논리가 들어올 여지가 뭐가 있단 말인가 하는 생각.

또 다른 키워드를 보자.

The goal of education is to improve minds,

enabling them to acquire abilities and skills to do thing they could not do previously

갑자기 수학과 논리에 관한 글에서 왠 뜬금없이 교육에 관한 키워드냐 하겠지만, 이 말이 나는 크게 다가왔다. 우리과의 공식 이름은 다음과 같다.

컴퓨터 공학부의 영어 이름은, SCHOOL OF COMPUTER ENGINEERING이 아니다. SCIENCE도 포함되어 있다. 정확히 말하자면 “컴퓨터 과학 그리고 컴퓨터 공학부”라고 해야 옳을 것이다. 우리가 프로그램을 짜고 코딩을 하는 그 작업 자체는 공학일지도 모른다.(물론 공학의 범위를 매우 줄였을 때) 하지만 그 이전에 논리적으로 생각을 하고, 알고리즘을 생각해내는 것은 과학, 그리고 수학이다. 글에 나온 대로 implicit하게 수학을 사용하는 셈이다. 직접, natural deduction 등을 사용하여, 내가 짠, “지하철 최단 노선 검색 프로그램”이 잘 돌아간다고  explicit하게 증명하지는 못하지만, 그 알고리즘을 사용하면 논리적으로 우리가 원하는 기능을 수행해줄 것이라고 생각한다. 수학은 필요없다 필요없다 하지만 수학을 사용하는 셈이다. 교수님들도 자주 하셔서 많이 듣는 이야기이지만 사실 코딩같은 것은 학원에서도 배울 수 있는 것이다. 학원에서 몇달만 열심히 배우면 대학에서 2년동안 컴퓨터 공학을 배운 나보다도 코딩을 잘 하게 될지도 모른다. 하지만, 그 바닥에 깔려있는 수학은, 논리는 전혀 다를 것이다. 글에서도 나온 것처럼 대학교육은, 언론 등에서 공격하는 바처럼 졸업 후의 곧바로의 취직을 위한 것이 되기 보다는, 학문연구의 기초를 깔아주는 역할을 해야 한다고 생각한다. 전에 하지 못했던 것을 배울 수 있게 하는 마인드, 기초 지식을 주는 것이다. 그  마인드와 기초 지식이 수학인 것이다.

Computing is a rapudly shifting sand. Mathematics, in contrast, has a long history and is stable and well tested

논리의 역사에 관한 글을 읽으면서 논리의 역사가 상당히 짧다는 생각을 했지만, 컴퓨터 공학의 역사는 그보다도 훨씬 짧다. 나는 잘 모르겠지만 교수님들이 하시는 말씀으로는 아직도 이해되지 않는 영역이 무한히 있고, 해결해야 할 문제들이 많다고 들었다. 심지어는 우리들이 스스로 만들었지만, 그걸 이해하지 못할 때도 있다고 한다. 전세계의 전문가가 10에 꼽을 만하다는 기술도 있다는 소리를 들었다. 축구로 비유하자면 컴퓨터 공학은 경기 초반 5분이라고 할 수 있다. 보통 이 때에 골을 제일 먹을 가능성이 많다고 조심해야 한다고 하지 않는가? 선수들이 몸이 확실히 풀리기 전에, 경기에 완전히 집중하기 전이 가장 위험한 것처럼 컴퓨터 공학도, 까딱하면 금방 무너져 버릴지 모른다. 한 사람의 세계관에서 컴퓨터 공학이 무너져 버릴 수도 있고, 희박하지만 어떤 심각한 오류나 복구할 수 없는 에러 때문에 컴퓨터 공학 전체가 무너질 수도 있다. 하지만 수학은 역사 상대적으로 훨씬 깊고, 안정적이다. 수학에서부터 갈라져 나온 컴퓨터공학과, 스스로 생겨난 컴퓨터 공학은 다를 것이다. 그런 안정적인(stable) 수학으로 아직 유동적인(dynamic)한 컴퓨터 공학을 증명하고 받혀준다면, 세월이 더욱더 흘렀을 때 컴퓨터공학도 언젠가는 수학처럼 뿌리깊은 학문이 될 것이라고 생각한다.

글이 두서가 없었지만, 요약하자면 이거다. “지금까지는 수학의 중요성을 몰랐지만, 지금은 수학이 중요하다는 것을 알겠다고, 컴퓨터 공학에서는 수학이 필요없는 줄로만 알았지만 수학은 컴퓨터공학에서 쓰이는 툴 이상의 것이라고”

미적분학I, 미적분학II, 이산수학, 공학수학I, 공학수학II까지 수강했다. 앞으로는 원하지 않는다면 수학과목을 수강하지 않을 것이라고 생각했지만, 더욱더 수학을 들어야 하겠다는 생각이 든다. 더욱더 공부를 해야 겠다는 생각이 든다. 비록 당장은, 아무것도 아닌 것처럼 보일지라도 말이다.