프로그래밍의 본질

Posted by 大山 Mon, 17 Jul 2006 06:59:00 GMT

중학교 3학년때 쯤이었나, 통일장 이론을 완성하면 삶에 대한 모든 깨달음을 얻게될 거라고 굳게 믿었던 시절이 있었다. 뭐 대학생 때도 크게 다르진 않았던 것 같다. 인간이 자유의지가 있는지 없는지를 계산 가능성 문제로 이해한답시고 자바로 튜링머신을 구현해 놓고 한참을 끙끙댔었으니. (로저 펜로즈황제의 새마음 참고)

근데 학부때 교수랑 프로젝트를 잠깐 해보니까 대학원에 가도 내가 하고싶은 연구를 맘대로 할 수 있는게 아닌 것 같더라. 아카데미아에 대한 환상을 깨고 돈부터 벌기로 했다. 빨리 돈벌고 은퇴해서 통일장 이론 연구해야지, 뭐 지금도 계획은 그렇다.

수학, 물리 빼놓으면 할 줄 아는게 컴퓨터밖에 없으니 돈 벌려면 이걸로 뭔가 해야겠는데, 수학하던 버릇이 어디 가려나. 처음에는 알고리즘에만 관심이 있었다. 그냥 단순한 계산 알고리즘 말고 뭔가 심오한 깨달음을 줄 수 있는 그런 알고리즘을 찾아 헤맸다. 사실 재귀함수나 메타프로그래밍은 그런 느낌을 일부 주기도 했다. 이들의 피드백 루프는 인간이 스스로의 존재를 깨닫는 자아 인지 과정과 뭔가 유사한 면이 있기도 하니까.

근데 거기쯤에서 끝이더라. 프로그래밍에 그보다 더 심오한 것은 없었다. 실무에서는 퀵소트 보다 더 복잡한 알고리듬을 구현할 일도 없다. 몇달 전에는 루비 BBCode 파서 라이브러리를 구현하다 참고하려고 PunBB의 파서 코드를 들여다보다 깜짝 놀랐다. 재귀함수를 써서 트리 파싱을 하는게 아니라, 여는 태그와 닫는 태그 갯수를 세어서 숫자가 일치하나 안하나만 확인하더라. HTML로 변환하는 것도 정규식을 써서 앞태그 따로 뒷태그 따로 대치하는 식이었다. (솔직히 알고리듬 자체는 꽤나 촘촘하게 구현되어 있었다. 에러나는 예외 케이스 생각해 내려고 5분 정도 고민하다가 그만둬 버렸으니까.)

지난 30년간 Lisp으로 인공지능을 구현한다던 MIT의 천재들도 결국은 실패했다. (실패가 아니라고 이뤄낸 것도 많다고 우기는 사람도 있는데 실패라는 관점이 우세하다. AI의 그랜드 플랜은 인간 지능의 재현이었지 지식 구조의 설계가 아니었다.)

요지는 이거다. 프로그래밍은 공학이 아니고 과학은 더더욱 아니다. 해커와 화가에서 말하듯 프로그래밍은 공학보다는 미술에 가깝다. 작업 내용만 놓고 보면 건축에 더 가깝지만, 전 과정을 거의 혼자서 작업한다는 측면에서는 미술에 더 가깝다. 하지만 단순히 감상하기 위해서 만드는게 아니라 도구로써 사용하기 위해 만드는 것이니 공예에 가장 가깝다고 할 것이다.

물론 보통의 공예 작품을 만드는 것보다는 수학적, 공학적 지식이 엄청나게 많이 요구된다. 하지만 대부분의 프로그래머들이 이공계 출신이니 이것이 큰 문제는 아니다. 오히려 대부분의 개발자에게는 예술적 균형감각이 부족하다는게 문제이다.

더 이상 개발자의 경쟁력은 알고리즘 구현이나 복잡한 코드를 해독하는데 있지 않다. 해독하기 힘든 코드를 작성하는 개발자는 어디서도 환영받지 못할 테니까 말이다. 나는 앞으로 개발자의 경쟁력이 다음 세가지에 있다고 생각한다.

  • 기술적으로 옳바르게 설계하는 능력
  • 몇만 줄의 코드로 작성된 프로젝트도 쉽게 이해할 수 있게 직관적으로 설계하는 능력
  • 사용성이 뛰어난 소프트웨어를 설계하는 능력

프로그래밍 언어가 발전할수록 개발에 요구되는 기술적 전문성은 급격히 줄어든다. 더 이상은 포인터를 이해하지 못해도 개발에 지장이 없다. 메모리 관리도 직접 할 필요가 없다. 기술적 전문성이 중요하지 않다는 이야기가 아니다. 기술적 전문성은 기본이되 그것만으로는 충분하지 않다는 얘기이다.

요즘 프로그래밍에서 눈에 띄는 추세 중의 하나는 아마추어의 부상이다. Linux는 학부생이 만들어 냈다. 루비는 일본의 한 아마추어가 취미 삼아 만든 프로그래밍 언어이다. 레일스의 개발자는 PHP로 아르바이트를 하던 학부생이었다. 엘리트 개발자들은 무엇을 하고 있었을까? 윈도우 NT, 자바, 그리고 스트럿츠를 만들어내고 있었다.

오늘날 개발자의 최대 경쟁력은 균형감각이다. 어셈블리어를 이해하는 능력이 경쟁력이던 시대는 이미 지나갔다. 정신을 바짝 차리고 미술 감각도 익히고 마케팅도 공부해야 한다. 안그러면 아마추어에게 밀릴지도 모를 일이다.

Posted in  | Tags  | 5 comments | no trackbacks

Comments

  1. 1.
    이삼구 said about 1 hour later:

    아마 시간이 지나도 저같은 아마추어가 프로를 능가하는 일은 없을 것 같습니다. NT, 자바, 스트럿츠 등을 만들지는 않을 것 같거든요. 이유는? 재미가 없잖아요.
    아마추어가 만드는 것들을 보면 하나같이 필요하거나 아니면 재미있거나... 둘 중에 하나라도 없으면 아마추어는 움직이지 않을 것 같아요. 저부터도 그렇구요.
    개인이 집중해서 만들 수 있을 정도의 것이면 아마 프로가 아마추어를 이기기는 힘들지 않을까 합니다. 돈을 받고 코딩을 해주는 프로는 시간으로 보나 자신이 하고 싶은 코딩을 하진 않는 것 같더군요. 헤어디자이너도 남편 머리는 절대 안 깍아주기도 하구요 ^^
    아, 글은 잘 읽고 있습니다. 재밌어요 대단히 ^_^


  2. 2.
    Rantro said about 1 hour later:

    컴퓨터 공학도로서 정말 가슴에 와 닿는 글입니다. 이전에도 몇 차례 다른 사람이 보고 별도의 설명 없이 이해할 수 있는 설계가 가장 좋다는 글을 읽었습니다. 그와 비슷한 맥락의 글이네요. 그리고 언제 읽어도 무심히 지나칠 수 없는 글이기도 합니다.

    좋은 글 읽을 수 있게 해주셔서 고맙습니다.


  3. 3.
    大山 said about 7 hours later:

    이삼구님, Rantro님 답글 감사합니다.

    모든 일이 그렇듯이 가장 중요한 것은 열정인 것 같습니다. :)


  4. 4.
    hyun군 said 8 months later:

    제겐 배고픈 아마추어가 될 것인지 고민해 봐야할 문제네요. 좋은글이였습니다.


  5. 5.
    大山 said 8 months later:

    아마추어가 아니라도 아마추어의 열정만은 잊지 말아야 하겠지요. hyun군님 반갑습니다. :)


Trackbacks

Use the following link to trackback from your own site:
http://beyond.daesan.com/articles/trackback/180

Comments are disabled