SW가 인문학이 되기 위한 조건

2022. 9. 8. 11:43Integrated/코딩교육 - 스크래치 scratch

SW가 인문학이 되기 위한 조건
글 송경모 미라위즈 대표
출처: http://joongang.joins.com/article/434/18082434.html?cloc=joongang%7Cext%7Cgooglenews

20세기의 신산업은 하드웨어 중심으로 이뤄졌지만, 1970년대 이후에는 소프트웨어(SW)가 혁신의 중심에 서게 됐다. 특히 성공한 벤처 창업가 중 프로그래밍 기술에 기반을 두고 성공한 경우가 많다. 해외에서는 빌 게이츠, 스티브 잡스, 세르게이 브린과 래리 페이지, 마크 주커버그 등을 들 수 있다. 한국에서는 이찬진, 김택진, 이해진, 김범수 등이 그 중심에 있던 인물이다. 과거에는 과학지식에서 해외 선진국을 따라잡아야 한다는 추격정신이 강했다. 이제 SW 경쟁에서도 마찬가지의 인식이 생겨났다. 그래서인지 어렸을 때부터 프로그래밍 교육이 필요하다는 의견이 근래 유독 많이 나오고 있다.


우리 정부는 지난해 2015년 중학교 입학생부터 SW 교육을 의무적으로 이수하도록 하는 전략을 수립했다. 이후 초등학교와 고등학교에 SW 교과목 편성을 점차 확대하겠다는 계획이다. 머지않아 대학 수학능력시험에 SW 과목이 연계될 가능성도 배제할 수 없게 됐다. 이에 맞춰 각 학교는 교사 양성과 교육과정 개발을 위해 노력하고 있다.


대학교에서도 교양필수로 SW를 채택하는 곳이 늘고 있다. 네이버 등 민간회사에서도 다양한 교육 프로그램을 제공하기 시작했다.
SW 지식의 중요성을 인식하게 된 것은 다행스러운 일이다. 결국 교육 프로그램의 내용과 교사의 자질에 따라 그 성과가 달라지겠지만, 일부 언론에서 마치 SW 교육이 당장에 창조경제를 활성화할 수 있는 해결사이거나 개인적으로 창업을 통해 성공할 수 있는 지름길인 것처럼 호도하는 현상은 바람직하지 않아 보인다. 막상 현장에서 우리나라의 수많은 SW개발자들이 처한 고단한 현실을 알고 나면, 그런 장밋빛 전망은 잠시 접어둬야 할지 모른다.


한 가지 전제는 분명히 하고 넘어가자. SW는 사업을 성공시키는 여러 필수적인 요소 중 하나에 불과하다는 사실을 어떤 경우에든 잊어서는 안 된다. 즉 고객의 창조라는 상위의 사업목적에 비춰 서비스의 전달방식, 과금방식, 브랜드, 사용자경험(UX) 등 그 어느 것도 SW 이상으로 중요하지 않은 것이 없다. 이런 다양한 목표가 균형 있게 달성된다고 전제해야만, SW 개발활동만으로도 비로소 가치 있는 목표가 될 것이다.

새로운 인문학으로서의 가능성
이런 전제 하에서 최근 SW 교육에 대한 관심이 증가하는 현상은 미래에 새로운 인문학의 태동을 알리는 예고편이다. 이미 SW의 역사는 오래된 장대한 세계가 구축돼 있다. 하지만 SW는 인문학의 한 과목으로 대접받아 오지 못했다. SW가 인문학의 결과물로 인식되지 않은 가장 큰 이유는 프로그래밍을 자연과학 내지 공학 영역의 활동으로 분류하는 습관 때문이다.
 

고대 그리스에서 자유 시민의 양육을 뜻하는 ‘파이데이아(paideia)’가 라틴어에서 인간 본성을 뜻하는 ‘후마니타스(humanitas)’로 번역됐다. 그리고 이는 훗날 한자 문화권에서 ‘인문과학’으로 번역됐다. 자유 시민의 보편 교양을 위한 과목을 뜻하는 ‘리버럴 아츠(liberal arts)’라는 표현은 아직도 미국의 많은 대학에서 사용하고 있다. 다만 리버럴 아츠는 근대 이전에는 지식인이 보편적으로 갖춰야 할 교양으로서 문법, 수사학, 논리학, 수학, 기하학, 음악, 천문학 등을 의미했으나, 근대 자연과학이 발달하면서 자연이 아니라 인간, 언어, 사회를 연구하는 학문이라는 뜻으로 좁아졌을 뿐이다. 그런 의미에서 프로그래밍 지식은 충분히 원래 의미에서 리버럴 아츠에 포함될 자격이 있다.


인문학이 자유로운 시민을 양성하는 교육이라고 한다면, 이 말은 프로그래밍 언어의 교육에도 그대로 적용할 수 있다. 오늘날 영어로 단순히 대화를 할 수 있는 능력은 더 이상 특별한 능력이라고 보기조차 어렵게 됐다. 인문학으로서, 즉 보편 교양으로서 영어는 이렇듯 모두가 갖춰야 할 특별한 능력이 아닌 지식이어야 한다.


어느 나라에서나 어문 교육은 인문학의 기본 교과목이다. 그런 의미에서 프로그래밍 언어도 그렇게 돼야 마땅하다. 이제 사람들은 단순히 애플리케이션을 다운받아 사용하는 데 만족하지 않고, 자신이 필요한 기능을 스스로 작성하면서 사용하는 날이 올 것이다. 프로그래밍 능력은 생산성 격차, 즉 임금 격차를 낳을 가능성이 높다.

SW에 대한 인식 전환 필요
어느 분야에나 초보의 단계가 있고 고수의 단계가 있다. 높은 단계로 올라갈수록 고차원의 설계능력이 중요해진다. 코딩의 경제성, 여타 업무와의 조화, 향후 개선의 용이성, 그리고 무엇보다도 창의적인 알고리즘이 필요해진다. 그 완성도가 높아질수록 프로그래밍 작품에는 예술성이 담기게 된다. 그 정도가 되면 프로그래밍은 단순히 기능활동이 아니라 창작활동의 반열에 들게 된다.
명작이 평론의 대상이 되듯이 프로그래밍 대가들의 코딩도 수시로 전문가 사이에서 찬탄 또는 비평의 대상이 된다. 이 점을 이해해야만 인문학의 한 과목으로 충분히 대접받고도 남을 프로그래밍의 가치를 제대로 이해하게 된다.


보편 교양으로 프로그래밍을 시작하는 사람들에게도, 이런 심미안을 발휘할 궁극의 세계가 있음을 알리는 것 자체가 교육자의 큰 임무이기도 하다. 잘 짜인 프로그래밍은 한 편의 아름다운 시와 같다. 그 손이 닿기 전에는 그저 무생명의 실리콘과 쇳덩이에 불과했던 물건들을, 그 낭독이 전달되는 순간 힘차게, 오류 없이 작동하도록 하는 위력을 지닌 시다. 도널드 커누스의 프로그래밍 고전 ‘더 아트 오브 컴퓨터 프로그래밍(The Art of Computer Programming)’의 제목이 왜 ‘과학(Science)’가 아닌 ‘예술(Art)’이라 했는가를 다시 한 번 상기하자. 찰스 페졸드를 포함한 38인의 프로그래밍 거장들이 쓴 ‘Beautiful Code: 38인의 코딩 명장들이 말하는 내 생에 가장 아름다운 코드(한빛미디어, 2007)’의 서문에서 그레그 윌슨은 이렇게 말했다.
“건축가들은 다른 건축가가 만든 건물을 조사하며, 작곡가는 다른 작곡가의 악보를 연구한다. 그러나 프로그래머들은 어떠한가?”(Beautiful Code, 6p)


모든 예술 분야의 대가들이 서로의 작품을 놓고 품평하듯, 훌륭한 프로그래머들도 다른 이가 짠 코드의 예술성을 감상하고 또 그로부터 배워야 한다. 다작의 괴짜 수학자 폴 에어디쉬는 현실에 존재하지 않는 ‘그 책(The Book)’을 언급했다. 그 책이란 모든 수학 정리의 최고의 증명들이 적혀 있는 전설 속의 책이다. 모든 프로그래머도 아마 모든 계산 문제에 최고의 이상적인 증명이 적혀 있는 책이 있을지 모른다고 생각할 것이다. 모든 프로그래머는 그런 이상적인 알고리즘 예술품을 만들고자 하는 꿈을 항상 꾸고 있다.
브라이언 커니건은 벨연구소의 동료 롭 파이크가 개발한 짧은 정규표현식(regular expressions) 부합기(matcher)를 자r />

정규표현식은 텍스트의 패턴을 서술하기 위한 표기법이다. 정규표현식은 1950년대 중반 스티븐 클린이 유한자동자(Finite Automata)를 구현하기 위한 편리한 표기법으로 개발한 것이다. 정규표현식 부합기란 그 표현에 부합하는 모든 텍스트를 찾아내는 작업을 하는 프로그램이다. 정규표현식 부합기를 프로그래밍하려면 일반성, 유연성, 속도라는 조건을 다 맞춰야 하기 때문에 분량이 자연히 많아지기 마련이다. 커니건이 당시 갖고 있던 grep 오픈소스 코드는 500줄에 달했다. 롭은 군더더기를 빼고 보다 간결하게 만들 수 있지 않을까 생각했다. 그는 자신의 사무실로 들어간 지 몇 시간 만에 30줄짜리 C코드를 들고 나왔다. 이 짧은 코드만 가지고도 흔히 등장하는 대부분의 정규식을 처리할 수 있었다. 이 얼마나 경제적이면서도 효과적인 작품인가?
 
브라이언 헤이스는 단순해서 도저히 문제로 여겨지지 않을 것 같은 과제에 대해서도 얼마나 다양하고 아름다운 해법이 존재할 수 있는지 소개했다. 그가 말한 간단한 문제란 ‘컴퓨터 화면 상의 세 점이 일직선상에 있는가를 판별하는 프로그램을 만드는 일’이다.
일단 누구나 쉽게 생각할 수 있는 방법은 두 점 사이를 잇는 직선의 기울기를 구한 뒤, 이 기울기가 다른 두 점 사이를 잇는 기울기와 동일한가를 비교하는 것이다. 그러나 이렇게 하면 기울기를 구할 때 분모가 0이 되는 경우의 예외 처리 구문이 필요할 뿐만 아니라 if문을 써야 하는 절차가 생긴다. 그는 더 간결하고 효율적으로 처리할 수 있는 방법이 없을까 고민했다. 그 결과 삼각부등식을 이용한 방법을 고안해냈다.


그런데 이 문제에 대해 도서관에서 자료를 조사한 결과, 동일한 문제에 대해 이미 수많은 사람들이 고민하고 있었음을 발견했다. 그 중에서 1992년에 버나드 체이즐과 허버트 에델스브루너의 선분교차알고리즘 논문의 내용이 있었다. 그는 이에 대한 글을 써서 자신의 블로그(http://bit-player.org)에 올렸다. 그 후 독자들로부터 수없이 많은 대안 해법들이 쇄도했다.

그러던 어느 날 헤이스는 섬광 같은 깨달음을 얻었다. 세 점 사이의 면적 측정을 이용한 방법이라는 아이디어가 떠올랐고, 이 면적 계산은 너무나 간단한 2×2행렬식으로 해결될 수 있었다.
행렬식의 산식 ‘1/2×(x1-x3)(y2-Y3)-(x2-x3)(y1-y3)’이 0인지 아닌지만 판정하면 모든 것이 끝났다. 그는 결국 이 행렬식을 계산하는 단순한 3줄짜리 LISP코드로 모든 문제를 해결했다.
defun area-collinear (px py qx qy rx ry)
(= (* (- px rx) (- qy ry))
(* (- qx ry) (- py ry))))
(Beautiful Code, 697p)
if나 절편, 제곱근, 삼각함수 따위는 완전히 사라지고 더할 나위 없이 간결하고도 완벽한 함수가 만들어진 것이다.

코딩, 융합교육이 답이다
이런 사례는 컴퓨팅의 세계에서는 흔하다. 예술의 경지에서 작업해 동료들로부터 흠모의 대상이 되는 고수들이 즐비하다. 그러나 이런 능력은 단지 코딩을 기계적으로 교육한다고 길러지는 것이 아니다. 코딩에 앞서서 인문학, 예술, 자연과학의 다양한 사고 훈련과 체험을 통해 세계를 보다 다각도에서 이해하고 과제를 해결하려는 창의적인 발상의 습관을 갖춰 놓지 않으면 불가능하다.

그런 의미에서 프로그래밍 교육이 진정한 인문학의 한 분야로 인정받으려면 철저한 융합 교육에 바탕을 둬야 할 것이다. 그래야만 문학은 세계를 읽는 다양한 관점을 허용하는 창의적 활동임에 반해 수학이나 프로그래밍은 단 하나의 답만을 내놓는 비창의적 활동이라고 이야기하는 인문학자들이 사라질 것이다.