컴퓨터 과학, 컴퓨터 공학, 전자 공학?

아직 IT 산업이 태동기에 있을 무렵인 1980년대에는 컴퓨터와 소프트웨어를 다루는 학과는 전산학과(Computer Science)로 불렸다. 당시 우리나라에 주업이 소프트웨어 개발인 회사는 거의 없었으므로 전산학과 졸업생들은 거의 대부분 기업이나 은행의 전산 업무 담당자로 취직을 했다.

1990년대 이후 IT 산업의 형성과 더불어 각 대학은 학과명을 전산학과에서 컴퓨터 공학과로 개명하기 시작했다. 전산학과는 왠지 기업의 전산 업무만을 연상시키므로, IT 산업을 이끄는 인재를 길러내는 학과의 이름으로는 적합하지 않다고 생각한 것이다.

컴퓨터 공학과의 영문 표기는 Computer Science & Engineering인 경우가 보통인데, 전산학과의 영문 표기에 공학(Engineering)이 단어가 추가 되었다. 공학은 과학 기술을 이용하여 인간에게 유용한 물건을 시간과 비용을 고려하여 만들어내는 학문을 일컫는다. 그렇다면 개명 이후 각 대학의 컴퓨터 공학과는 기존의 전산학과 무엇이 달라졌을까?

일단 커리큘럼만 살펴보면 큰 변화가 없었다. 전산학과의 교과목은 보통 프로그래밍 입문, 객체지향 프로그래밍, 자료 구조, 프로그래밍 언어, 데이터베이스, 컴파일러, 소프트웨어 엔지니어링 등을 포함한다. 물론 하드웨어를 다루는 학문인 디지털 시스템 설계, 어셈블리 프로그래밍, 컴퓨터 아키텍처 등도 공부한다. 컴퓨터 공학과의 교과목은 무엇이 다를까? 유감스럽게도 그다지 바뀐 것이 없다.

우리나라의 경우 삼성 전자나 LG 전자 등 대기업을 중심으로 전자 산업이 발달해 있다. 가전용 소형 전자 기기와 휴대폰, MP3 등을 중심으로 임베디드 시스템이 주류다. 또 한편에서는 중소규모의 벤처 회사를 중심으로 웹 어플리케이션이나 이동통신사와 관련된 콘텐트를 개발한다. 이런 소프트웨어는 하드웨어 지식이 별로 필요가 없다.

우선 컴퓨터공학과 졸업생이 하드웨어와 밀접한 연관이 있는 임베디드 시스템이 분야에 진출한다고 가정하자. 이 학생이 실무에 적응하는데 가장 큰 장벽은 하드웨어 지식이다. 어셈블리 프로그래밍, 시스템 프로그래밍, 컴퓨터 아키텍처 쪽 지식뿐만 아니라 일부 전자 공학의 지식도 필요하지만 학부 수준에서 이를 체계적으로 학습할 수 있는 경우가 드물다.

그렇다고 순수 소프트웨어 개발 쪽 경쟁력이 있는 것도 아니다. 대학에서 가르치는 전통적인 전산 과목은 그야말로 소프트웨어 개발을 위한 기초 도구일 뿐 실제 개발 방법론이나 프로그래밍 기술의 습득이 어렵다. 학과에 프로그래밍 관련 수업은 한 두 개 일뿐 거의 대부분 이론 습득에만 치중하기 때문이다.

커리큘럼만 놓고 본다면 대학 과정은 소프트웨어도 하드웨어도 아닌 어정쩡한 경계선에서 양쪽 모두를 놓치고 있는 셈이다. 대안은 무엇일까? 각 대학은 컴퓨터 공학과 내부에서도 세부 분야별로 전문성을 강화하고 실용적인 교육도 병행해야 한다. 해답은 선택과 집중에 있는 것이다.

컴퓨터 공학으로 미국 내 10위 권인 메릴랜드 대학의 경우 우리나라의 컴퓨터공학, 전자 공학의 스펙트럼을 전산학(Computer Science), 컴퓨터공학(Computer Engineering), 전자공학(Electrical Engineering)이라는 삼분법으로 접근하고 있다.

전산학(CS)의 경우 졸업생들이 필드에서 주로 소프트웨어 개발을 할 것이라고 가정하고 교육한다. 따라서 기존 전산학과의 교육 과정과 아울러 실용적인 프로그래밍 개발 방법이나 기술을 가르친다. 예컨대 ‘CMSC433 Programming Language Technologies and Paradigms’이란 과목에서는 자바를 중심으로 이클립스(Eclipse)와 같은 통합개발환경(IDE), 디자인 패턴, 멀티 쓰레드 프로그래밍, XML 등을 가르친다. 수업은 철저히 실기 중심으로 이루어지고 학기 중 6-7개의 프로젝트를 진행하고 성적의 50% 이상을 반영한다.

반면에 파격적으로 제한을 없앤 부분도 있는데 우리나라에서 컴퓨터공학과에서는 거의 필수 과목인 운영체제(OS)가 메릴랜드 전산학과 학생에게는 필수가 아니다. 운영체제가 복잡한 소프트웨어를 이해하고 컴퓨터의 동작 원리를 파악하는데 많은 도움을 주는 것은 사실이지만, 대부분의 프로그래머가 운영 체제의 코어까지 알 필요가 없다는 것이다. 대신 멀티 쓰레드 프로그래밍이나 세마포어, 뮤텍스와 같은 개념은 자바를 통해 다른 과목에서 배우는 식이다.

반면에 임베디드 시스템이나 시스템 프로그래밍을 중심으로 소프트웨어와 하드웨어의 접점에서 일하고 싶은 학생들을 위한 코스가 바로 컴퓨터공학(CE)이다. 컴퓨터 공학과 학생은 운영체제와 컴퓨터 아키텍처, 시스템 프로그래밍 등을 필수로 하고 깊게 배운다. 그렇다고 일부 전자과 커리큘럼처럼 복잡한 전자기적 현상을 모두 다루는 것은 아니다. 컴퓨터 시스템을 이해하고 이용하는데 필요한 수준의 전자공학적 지식을 습득하는 것이다.

기존의 전산학과 학생들이 소프트웨어는 알지만 하드웨어 지식이 부족해 어려움을 겪었고, 대부분의 임베디드 시스템은 전자 공학 출신들이 만들었다. 전자 공학 출신들은 자신들의 원하는 프로그램을 만들 순 있었지만, 소프트웨어 관련 지식의 부족으로 안정적이지 못한 소프트웨어를 만들었다. 컴퓨터 공학(CE)는 이런 상황에서 필요한 인재를 길러내는 학과인 셈이다.

실무와 이론을 모두 갖추기 위해서는 메릴랜드의 예처럼 범위를 좁힐 필요가 있다. 이에 대한 반론도 물론 있을 수 있다. 대학은 기초 교육을 하는 곳인 만큼 포다 폭넓고 전반적인 이론 교육이 이루어져야지, 실무 교육이 강조되어서는 안 된다는 관점이다. 하지만 컴퓨터 공학은 어디까지나 실용 학문이다. 대학원이나 연구소에서 연구를 하더라도 자신의 논문이나 생각을 실제로 구현할 수 있어야만 하고 이런 교육은 대학에서 이루어져야 한다.

전산학이나 컴퓨터 공학이라는 학문은 다른 학문에 비해 역사가 짧은 반면에 다른 어떤 학문보다도 빠른 속도로 발전하고 있다. 그에 비해 전산학의 교육 과정은 그 변화의 속도를 따라가지 못하고 있다. 학생들에 어떤 이유로 컴퓨터 공학과에 지원하는지, IT 산업에서 어떤 인재를 원하는지를 분명히 파악하지 못하는 대학들은 쇠퇴하고 말 것이다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s