익명 기고 | 컴퓨터 전공자만으로는 개발팀을 꾸리면 안되는 이유

CIO

컴퓨터와 과학이라는 두 단어를 생각해보라. 첫 번째는 인류에게 아주 큰 선물을 줬다. 그 범위도 생명을 살리는 전자 의료 기록(EMR)의 보편화부터 ‘시간에 구애받지 않는 트위터의 가상 싸움’까지 아주 광범위하다. 두 번째 단어인 과학은 소아마비 백신, 달 탐사 등 큰 ‘발전’을 전달한 ‘지성’의 변화와 발전을 대변한다. 그렇다면 프로그래밍 팀을 꾸릴 때, 이 두 단어를 결합한 ‘컴퓨터과학’ 전공자만으로는 ‘부족’한 이유가 무엇일까?

이 분야가 전달하는 발전과 성과가 미흡해서가 아니다. 지금 세상에는 새로운 프로그래밍 언어, 매우 영리한 검색 알고리즘, 머신 비전 알고리즘 같은 새로운 것들이 가득 들어 있는 페타바이트급 레이텍(LaTeX) 파일과 수많은 개념이 존재한다. 멋진 것들이 아주 많다.

그러나 문제는 이 수많은 것들을 정말 필요로 하는 사람이 극소수에 불과하다는 것이다. 한 친구의 고백에 따르면 CS(컴퓨터과학) 전공자는 채용하지 않고 물리, 회계, 기타 수학에 정통한 인재들만 채용해 큰 성과를 일궈낸 개발팀이 있다. 이런 신입 직원들은 훨씬 더 ‘실무적’이다. 머신이 결과를 전달하도록 만드는 데에만 집중한다. 아마 대부분 기업이 원하는 인재일 것이다.
 

ⓒCredit: GettyImages


CS 학위가 나쁘다는 이야기는 아니다. 대부분 사람이 풀고 싶어 하는 문제에 대해 이야기하지 않을 뿐이다. 지금부터 CS 학위 소지자보다 다른 전공자가 더 나은 몇 가지 이유를 설명한다.

이론이 오히려 시장을 혼탁하게 하고 헷갈리게 한다
본질적으로 수학자 같은 컴퓨터 과학자가 많다. 이론에 사로잡힌 사고방식이 체화되어 있다. 한 ‘이론가’는 모든 수학적 증명이 프로그램이고, 프로그램도 수학 증명이라고 생각한다고 말한 적이 있다. 그는 실제 작동하는 코드를 전달하는 것에는 큰 관심이 없다. 그보다는 코드 증명이 적절하다는 것에 더 큰 관심을 둔다. 좋다.

NP-완전 문제(NP-completeness)튜링 머신(Turing machines)을 충분히 이해하지 않은 상태에서 졸업하게 되는 CS 전공자는 많지 않다. NP-완전 문제와 튜링 머신은 ‘나쁜 행동 성향’이 초래되지 않았다면 유익할 수 있는 2개 이론 분야다. 한 생물학자가 필자에게 DNA 염기 순서 매칭 문제 하나를 해결해 달라고 요청했다. 필자는 이를 푸는 데 아주 많은 시간이 소요될 수 있는 NP-완전 문제라고 말했다. 그는 개의치 않았다. 어떻게든 풀어야 하는 문제였다. 사실 대부분 경우, 대부분 NP-완전 문제를 아주 쉽게 해결할 수 있다는 점이 밝혀졌다. 알고리즘을 망치는 병리학적 인스턴스는 소수에 불과하다. 그러나 ‘이론가’들은 일상에서 관측되는 경우가 거의 없고, 단순한 알고리즘을 방해하는 빈약한 세트에 강박적으로 매달린다.

튜링 머신과 관련해서도 동일한 문제가 발생한다. 본분을 지키는 CS 전공자는 우리가 컴퓨터 알고리즘을 전혀 분석할 수 없다고 말하는 라이스의 정리(Rice’s Theorem) 같은 ‘허무주의적’ 결과를 학습한다. 그러나 튜링 머신은 보통의 머신이 작동하는 방식에서는 매우 나쁜 모델이다. 또 코드로 스마트한 일을 하는 소프트웨어를 쉽게 개발할 수 있는 경우가 많다. 이론적 결과를 유익하게 수용하지 않는 CS 전공자는 완벽하게 사용할 수 있는 해답이 가까이 있는 경우에도 포기하는 위험을 초래할 수도 있다.

학교에서 사용하는 ‘언어’가 실제로 쓰이는 경우는 드물다
학교는 ‘속물근성’을 키우고, ‘불가해한 해법’을 좋아하도록 만든다. 우리는 이를 부인하기 어렵다. 모든 분야에서 이렇다. 필자는 한 MIT 졸업생에게 선호하는 프로그래밍 언어를 물은 적이 있다. 그는 CLU라고 답하며 필자가 무슨 의미인지 모를 것이라고 말했다. 그 졸업생이 맞았다. 필자는 CLU가 뭔지 모른다. 

언어에 강박 관념을 가진 사람들이 내놓은 좋은 아이디어들이 무수히 많다. 그러나 때때로 이런 아이디어가 혼란과 혼동을 초래하는 경우도 있다. 한 팀원이 조금은 이상한 피처를 좋아해서, 코드 기반에 이를 포함하기 시작했다고 가정하자. 나머지 사람들도 이를 배워야만 할 것이다. 모든 사람이 이런 식으로 일을 하면, 모두가 보조를 맞추는 데 많은 시간을 낭비하게 될 것이다.

구글이 고(Go)를 구현하면서 ‘로우 로드(경제적이고 단순한)’ 방식을 선택한 이유가 여기에 있다. 개발자는 언어에 포함된 구성 요소가 소수여야 하며, 가능한 짧은 시간에 학습할 수 있을 만큼 단순해야 한다고 강조했다. 이런 단순성은 모든 사람을 도왔다. 모든 사람이 핵심을 정확히 이해했기 때문이다.

많은 CS 교수들은 프로그래머가 아닌 수학자다
많은 컴퓨터 과학 전공 학부에 해당하는 ‘어두운 비밀’이 하나 있다. 많은 교수가 컴퓨터를 프로그래밍하지 못한다는 것이다. 교수가 하는 일은 강의와 그랜트(연구 보조금)를 놓고 벌이는 경쟁이다. 스프레드시트와 그랜트 제안서에 대해서는 잘 안다. 그러나 실제 제대로 연구를 수행하지 않는다. 신이 교수들에게 ‘대학원생’을 선물한 이유가 여기에 있다. 마지막으로 컴퓨터 프로그래밍을 실제 해본 시기가 대학원 재학 시절이었던 교수들이 많다. 이후 실력이 녹슬었을 것이고, 컴퓨터에 설치된 컴파일러는 작동조차 되지 않을 수도 있다.

실제 활용되는 경우가 드문 ‘필수 과목’들이 많다
데이터 구조는 컴퓨터과학 전공 학생들이 종종 2학년 때 배우는 주요 과목이다. 유감스럽게도 우리는 이제 데이터 구조를 많이 사용하지 않는다. 이제 우리를 위해 사고하는 데이터베이스에 집어넣거나, 객체 해시 테이블에 집어넣는다. 아직도 알고리즘 측면의 복잡성에 대해 생각해야 하는 사람들에게는 꽤 유용하다. 그러나 B-트리, 심지어 연결된 리스트에 대해 걱정해야 하는 사람들은 정말 극소수다. 그뿐만 아니라, 많은 사람이 데이터 구조를 직접 다루기보다 표준 라이브러리를 믿는 것이 더 낫다는 사실을 깨달았다. 쉽게 실수를 저지르기 때문이다. 많은 기업과 기관이 독자 개발한 데이터 구조 배포를 금지하고 있는데, 여기에는 그럴만한 이유가 있다.

이 밖에도, 더는 중요하지 않게 되어버린 ‘과목’들이 구식 커리큘럼에 많이 남아 있다. 컴파일러는 복잡하고 필수적이다. 그렇지만 실제 컴파일러를 작성하는 사람들은 학생들뿐이다. 한 학기 과정에서 강제로 ‘장난감 같은 버전’을 만든다. 심지어 애플조차 스위프트(Swift)용 컴파일러를 구현할 때 기본 오픈소스 도구들을 사용했다.

수학 모델이 잘못된 길로 인도할 수 있다
데이터베이스 이론을 배운 사람이라면 정교한 데이터 구조를 작은 테이블로 분해하는 방법인 보이스 코드 노멀 폼(Boyce–Codd Normal Form)의 ‘영리함’을 발견했을 것이다. 아주 명쾌하고 효율적이다. 그러나 문제가 있다. JOIN 명령으로 채워지는 SQL 쿼리에 대한 응답 시간이 정말 길다.

대부분의 개발팀은 데이터베이스를 ‘비정규화’해서 성능을 높이는 방법을 터득한다. 다시 말해, 모든 ‘영리함’을 없애버리고 데이터를 하나의 큰 테이블에 집어넣는다. 지저분하고 낭비적이지만, 놀랍도록 빠를 때가 많다. 그리고 디스크 공간이 저렴하다.

교육받은 내용을 실무에 적용하기 시작한 후, CS 과정에서 배운 수학적 ‘영리함’을 없애는 데 몇 년을 소비하게 되는 개발자들이 많다.


학교라는 제도가 ‘오만’을 키운다
우리는 모두 자신이 옳다고 생각한다. 그러나 학위는 본질적으로 학위를 딴 졸업생에게 자신이 우수하다는 ‘권위’를 부여할 수 있도록 만들어져 있다. 때론 이것이 사실일 수도 있다. 그러나 빠르게 변화하는 현장을 중심으로 정말 옳은 것이 무엇인지 파악하기 어려운 경우가 대부분이다.

필자의 과거 동료 중 하나는 자신이 부서에 도입한 ‘코딩 기준’을 너무 좋아했다. 기회가 있을 때마다 코드 검토 시 이 기준에 관해 이야기했다. 사실 ‘까다로운 개인 의견’이나 다름없는 기준이었다. 화이트 스페이스의 위치 같은 기준이다. 그러나 ‘학술적인 정밀함’을 바탕으로 이야기한 후, 코드 검토 때 이를 엄격히 적용하기 시작했다. 화이트 스페이스가 잘못된 코드를 폐기하면서, 코드가 기준을 충족하지 못했다고 주장했다. 결국 모두 화이트 스페이스를 계산해야만 했다. 모든 것이 ‘반 학술적인 기준’에 부합하도록 말이다.

많은 현대적인(최신) 기술이 무시된다
현대적인 기술 가운데 상당수를 다루지 않는 전공 학부들이 많다. Node.js, 리액트(React), 게임 디자인, 클라우드 컴퓨팅에 대해 배우고 싶을지 모르겠지만, 일반적인 커리큘럼에서 이를 발견하기 힘들다. 일반적인 커리큘럼 과정들은 ‘기초’에 초점이 맞춰져 있다. Node.js나 리액트같은 단어들이 잊힌 이후에야 컴퓨팅 일부가 될 레이스 컨디션 같은 아주 깊은 지식을 의미한다. 숭고한 목적이 있다. 그러나 프로그래머들이 하는 일 가운데 99%는 현재의 ‘버즈워드’와 씨름하는 것이다.

컴퓨터과학 전공 학부는 보통 직장인들의 일상을 지배하는 ‘디테일’에 대해서는 얇은 지식조차 없이, 기초적인 도전과제만 이해하는 ‘깊은 사고’를 하는 사람들만 배출하는 경우가 많다. 기업이 파이썬을 사용해 기기에서 데이터 스트림을 처리하는 일을 했던 물리 실험실 출신을 채용하는 것이 나은 이유가 여기에 있다. 결국은 얕은 ‘디테일’ 학습에 드는 시간이 CS를 전공한 천재와 같기 때문이다.

학교에서는 ‘첨단 기술’이 실현되는 데 오랜 시간이 걸린다
머신러닝과 인공지능에 대한 관심이 아주 높다. 많은 이들이 서둘러 이에 대한 실험과 시험을 하고 있다. 그런데 CS 전공 학부에서는 수십 년간 연구된 기술이다. 현재 학교에서 시작된 아이디어와 개념들을 지금 조사하는 것이 합리적이지 않을까? 일반적으로 사용될 때까지 무작정 기다리기만 해야 하나?

교수들의 ‘정년 보장’은 ‘자기 안위’를 초래한다
정년 보장이라는 제도를 정당화하는 이유가 많다. 이런 ‘고용 보장’을 향유하는 교수들 가운데 상당수는 그럴 자격을 갖췄다. 아주 오래전에 많은 공로를 쌓았기 때문이다. 그러나 문제점도 있다. 빠르게 변화하는 현장에서, 학생들에게 수십 년 전의 인사이트가 필요한 경우는 드물다. 그런데 정년 보장이라는 제도는 많은 교수가 놀라운 인사이트를 가졌던 시절로부터 10년, 20년, 30년 동안 자리를 유지할 수 있게 만든다.

교수 자리를 잃게 만드는 ‘집중 분산’도 존재한다. 한 정년 보장 교수는 여러 포커 토너먼트에 대해 무수히 많은 블로그를 작성하면서 시간을 보내면서, 구설에 올라 교수를 그만둬야 했다. 마이너리그 야구팀에 투자하고, 선수들과 어울리며, 타격 연습을 하는데 정신이 팔린 교수도 있다.

‘지성주의’가 결과로 이어지는 경우는 드물다
필자는 정년이 보장된 교수 한 명에게 ‘앵귤러 앤 리액트(Angular and React)’에 대한 몇몇 강의 덕분에 학생 한 명이 일자리를 얻었다고 말한 적이 있다. 그러자 그 교수는 웃으면서 “우리 학교를 직업 학교로 만들 생각은 없어!”라고 대답했다. 

좋다. 그렇지만 다항식과 지수각과 관련된 ‘무용지물의 복잡한 난제’를 해결하기 위해 수십만 달러를 지출하는 것이 정당화될 수 있는 사람들은 많지 않다. ‘인문학적’ 전통은 숭고하다. 그러나 실무 지식을 경시하게 만들 수도 있다. 깊은 진실, 불멸의 진실에 대한 것이기 때문이다. 기업이 다음 주 일정에 맞춰 상품을 출하하기 위해 서둘러야 하는 경우, 철학적 명상과 불멸의 진실에 관심을 기울일 시간은 없을 것이다.

* '익명 기고' 말머리의 기사는 현업의 IT 전문가들이 익명을 전제로 기고해온 글을 편집해 게재한 것이다. 기고한 글이 웹에 게재될 경우 기고자에게 소정의 사례금을 제공한다. 물론 기고자의 익명성은 보장된다. (이 원칙은 IDG 산하 미디어에서 운영하는 것으로, CIO Korea에서는 아직 검토 중이다. – 편집자 주) ciokr@idg.co.kr