알립니다. 2003년도에 권용래 교수님의 소프트웨어 공학 개론 수업 때 썼던 에세이 독후감입니다. 지금 보면 아는 것도 없이 주절거렸구나.
라는 생각이 듭니다. 하지만 더 나은 전산학도가 되었다는 뜻이겠죠. 제가 쓴 글보다는 에세이에 주목해주세요.
이것은 권용래 교수님의 소프트웨어 공학의 딜렘마을 읽고 쓴 글입니다.
저자가 제시한 문제해결 방향은 당위적인 측면에서 한치의 그릇됨도 없어 보인다. 대학의 사회적 역할이 강조되는 오늘날, 대학은 산업체와의 긴밀한 관계를 유지하고, 언제라도 산업 현장에서 자신의 역할을 수행할 수 있는 인력을 배출할 수 있어야 할 것이다. 하지만 당위적인 입장에서만 바라본다면 문제의 또다른 측면을 간과하기 쉽다. 모든 선택에는 기회비용이 따르는 법이다.
산업 현장에서 요구하는 인력을 양성하기 위해서는 많은 노력이 필요하다. 날이 갈수록 산업계의 요구 사항이 점점 다양해지고 있기 때문이다. 불과 4년이라는 짧은 시간 안에 그들이 필요로 하는 인력을 배출하기 위해서는 대학의 본래 기능 중 상당 부분을 포기해야만 할 것이다. 본래부터 연구와 교육이라는 대학 본연의 기능은 서로 배치되는 점이 많았다. 대학의 발전사는 이 두 가지를 적절히 융합하기 위한 노력 그 자체라고 해도 과언이 아니다. 그런데 산업계의 요구를 모두 받아들여서 현재의 대학교육과정을 개편한다면, 연구 분야의 약화를 가져올 것이 분명하다.
사실 4년이라는 시간은 전산학의 기본이 되는 컴퓨터 구조론, 자료구조와 알고리즘, 프로그래밍 언어론, 컴파일러, 데이터베이스론, 그리고 운영체제론을 수박 겉핥기 식으로 배우기에도 벅찬 시간이다. 산업계의 요구를 받아들이는 과정에서, 이러한 전산학의 기초학문에 대한 교육이 약화될 수 있다. 우리는 이 점을 우려하지 않을 수 없다. 자칫 잘못하면 당장의 문제에 대처하느라 미래 사회가 요구하는 인력 양성에는 실패할 수도 있는 것이다.
대학의 사회적 역할이 강조되는 상황에서 교육체제의 개편은 피할 수 없을 듯 하다. 그러나 동시에 기초학문과 연구에 대한 투자를 소홀히 할 수도 없다. 결국 기회비용을 고려했을 때 실보다 득이 많은 문제해결 방안을 모색해보아야 한다. 각 대학이 추구하는 교육 목표가 다르고 여건이 상이한 탓에 천편일률적인 해결책을 적용시킬 수는 없을 것이다. 그래서 미흡하나마 한국과학기술원(이하 KAIST)의 경우에 합당한 방법을 제시하고자 한다.
현재 KAIST 전산학전공 과정의 특징이라 할만한 것이 있다면 Computer Science와 Engineering의 ‘균형’이다. 전산학의 기본이 되는 이론을 필수 과목으로 지정하고, 동시에 Software Engineering 등의 과목을 선택 과목에 포진시킴으로써 ‘균형’을 맞추려 하고 있다. 그러나 관점을 바꾸어 보면, 이 같은 방법론은 주먹구구식 대응에 불과할 수 있다. 교과 과정만을 두고 봤을 때, 연구자를 양성하는 것이 목표인지 아니면 공학자를 배출하는 것을 염두에 두고 있는지 알기 어렵기 때문에 교육 목표를 제대로 확립하지 못했다는 지적을 받을 수도 있다. 그렇다면 차라리 전산학 전공을 Science와 Engineering으로 세분화하는 편이 나을 듯하다. 이렇게 함으로써 교육 목표가 분명해질 수 있다. 또한 산업계의 요구를 수용함과 동시에 전산학의 학문적 발전을 도모할 수 있을 것이다. 다만 지나친 전공 세분화에 따른 폐해를 경계해야 한다.
전산학 분야는 다른 학문에 비해 역사가 짧고 정립이 덜 되어 있는 탓에 당면한 문제점이 많다. 하지만 눈 앞에 보이는 문제 해결에만 집착하면, 얻는 것보다 잃는 것이 많을 수 있다. 어디까지나 균형감각을 살리는 정책이 필요할 것이다.
2000년도 쯤, 소공이 한창 유행이었던 시절이 있었습니다. 3학년, 4학년 수업이 소공관련 수업들로 가득차 있었죠. 제가 다니던 대학은 소공 관련 수업을 타 대학보다 일찍 시작했으며, 이를 자랑스럽게 생각(학교측에서)하기도 했습니다. 후배들에게 들어보니, 요즘은 소공관련 수업이 거의 없다고 합니다. 제작년에는 관련 수업시간에 토익수업을 했다는 소리까지 들을 정도니, 소공 과목 자체의 입지가 상당히 줄어들었다고 볼 수 있습니다.
개인적으로 소프트웨어공학이라는 학문은 대학원쯤가서 들어야 할 항목이 아닌가 생각합니다. 학생들이 전산학에 대한 기초가 익숙해지기도 전에 소공을 배운다는 것은 잘못된 부분이라고 생각합니다. 게다가 유행도 한몫했지만, 점수따기 쉬운 과목중에 하나였기에 학생들이 대거 몰려들었고, 결국 말씀하시는 science와 engineering의 균형이 깨져버린 것 같습니다.
“소프트웨어공학 전공자는 코딩 못해도 된다”라는 말이 생길정도니까요. <- 가장 싫어하는 소리입니다.
한 페이지짜리 독후감이다 보니 명확한 용어 설명이 안 되어 있었던 것 같습니다. 제가 이 글을 쓸 때 화학과와 화공과를 염두에 두고 Science와 Engineering라는 용어를 썼습니다. 프로젝트 관리 같은 것도 포함되지만 실용적인 교육을 말하려 쓴 단어입니다. KAIST에선 C++이나 자바 같은 프로그래밍 언어는 알아서 익히라는 식으로 놔두고, 이론을 강조합니다. 그래서 석사 나온 모군은 리팩토링이나 디자인패턴을 모르더군요. 요즘엔 조금 바뀌긴 했지만 데이터베이스만 해도 Engine과 알고리즘 위주로 가르쳤는데, 실제 제품을 써 본적이 없으니 뜬구름 잡기 같았습니다. 그래서 순수 전산 과학(수학에 가까운)과 공학(산업계의 요구에 가까운)을 나눠야 한다고 생각했습니다.
여하튼 Karkata님 말씀대로 학부를 (흔히 말하는) 소프트웨어 공학 과목으로 채우는 건 제가 봐도 아닌 것 같습니다. 저는 학부생이 바로 소프트웨어 공학 랩으로 가는 것도 마땅찮게 생각합니다. 실무 경험없는 컨설턴트를 보는 기분이랄까요.