프로그래밍은 상상력이다.

프로그래밍 2008/02/21 09:58

프로그래밍은 상상력이다.
  상상력 프로그래밍을 추구하며 - 2008년 2월 20일 , 황의범

많은 사람들은 프로그래밍은 기술과 관련된 것이라고 생각하지만
내가 생각하는 프로그래밍은 상상력이다.

기술은 그 상상력을 실현하기 위한 기본 재료와 같은 것이다.
이것은 기술이 중요하지 않다라는 의미가 아니라 기술은 기본이 되어야 하는 것이라는
뜻이다.

상상력이 없는 프로그래밍은 죽은 프로그래밍이고 이러한 프로그래밍은
프로그래머에게 아무런 재미를 주지 못하며 더더욱 새롭고 뛰어난 제품을 만들어
내는 것은 애초부터 불가능하다.

프로그램은 기본적으로 프로그래밍 언어로 만들어진다. 하지만 프로그래밍언어와
모든 기법을 알고 있다고 해서 새로운 프로그램이 만들어지지 않는다.

다른말로 이야기 해보자면
소설은 기본적으로 언어로 만들어진다. 하지만 언어와 표현 기법을 모두 알고
있다고 해서 새로운소설이 만들어지지 않는다. 소설을 쓰려면 상상력이 필요하다
쓰고자 하는 이야기를 생각하고 어떻게 표현하고 묘사하고 어떻게 전개시킬지
어떤 주제를 표현할지 등등의 그러한 작업들이 필요하다.

그렇다 비단 소설이 아니여도 작은 수필 작은 시 또는 산문 자신만의 상상력을
넣어서 만드는 것들은 활기차고 재미있다.
하지만 미리 정해진 어떤 텍스트를 비슷하게 베끼거나 흉내내거나 하는 것은
자연적으로 재미가 없게 되는 것이다.

프로그래밍이 재미가 없어지는 이유는 위의 경우를 생각해보면 알 수 있다.
처음에 언어를 배우고 어린아이 자기의 생각을 표현하고 동시 같은것을 작성하고
작은 글을 쓰는 것은 재미가 있다. '자발성'이 바탕이 된것이고
'언어'와 '기교'은  내가 생각하는 것을 위한 '재료' 일 뿐이기 때문이다.
그러나 어느단계에 이르러 문학이론을 배우고 규칙을 배우고 하다보면
이러한 초심을 사라지고 상상력은 사라지고 자신의 만들고자 하는 것에대한
수많은 규칙에 얽매이게 된다. 그리고 이것에서 헤어나지 못하면 그 작업은
무척이나 고통스럽고 더디고 힘든 작업이 되어버리게 된다.

상상력이 사라지는 시점에 이르러서 작업은 흥미있고 재미있는 것이 아닌
단순한 조립작업과 같은 무미건조한 일이 되어버리는 것이다.

어떠한 규칙과 툴과 기법들은 우리가 어떤것을 창조하는데 있어서 기본이
되게 하고 궁극적으로 도움을 주기 위한 것이지만 이런것에 얽매이다 보면
결국 화성인 아키텍트가 되버리게 되는것이다. 그러한 단계에 이르러서는
더 이상 프로그래밍의 작업이 프로그래밍아닌 단순한 코딩의 작업이 되고
그렇게 재미있었던 작업은 끔찍한 노가다가 되버리는 것이다.

아 정말 끔찍하지 않는가?
이미 모든 하부모듈 몇년 또는 수십년간의 정교한 추상화로 설계되어있고
그 규칙을 모두 공부해야되고 그것을 모두 이해 하였어도
그 설계스펙에 맞추어서 조립을 하는 것이 무엇이 어떻게 재미가 있을수
있을 것이란 말인가?
이것은 이미 만들어져있는 백과사전을 배끼는 것과 같은 작업이다.

대부분의 프로그래머가 소설쓰는 재미에 프로그래밍에 뛰어들었다가
주제만 조금씩 달라지는 정교한 문서형식이 있는 레포트를 쓰게 되니
이것이 재미있을수 있겠는가?

이것은 죠앨온 소프트웨어에서 나온 소프트웨어 회사의 발전과정과
비슷하다. 초기의 뛰어난 슈퍼프로그래머는 자기의 상상력을 발휘하여
뛰어난 제품을 만들고 이것이 성공하여 큰 회사를 만든다.
그리고 더 많은 프로그래머를 모집하지만 결국 평균화된 출력을 얻기
위하여 맥도날드 햄버거와 같이 모든 지점에서 최대한 똑같은 맛을
내는 정규화된 제품을 만들기위한  지침서와 메뉴얼이 가득찬
상상력의 여지는 없는 그러한 회사가 되버린다.
요리사의 체인화에서 생기는 개성과 새로운 맛의 개발이 사라지는
과정을 설명한다.


이미 다 설계되고 정해진 코딩규약과  입력과 출력이 정해지고 기능이 정해진
대규모 프로젝트의 정해진 하나의 모듈을 프로그래밍 하는 작업을 맡았을때
여기서는 전해 상상력의 여지가 없기 때문에 당연히 코딩 노가다라고 생각할 수
도 있을것이다. 물론 그런것들이 정해지지 않는 것보다 훨씬 제약이 있다는것은
부인없는 사실이다.

하지만 그러한 환경에서도 상상력을 발휘할 여지는 얼마든지 있다.
예를들어 학교나 처음 프로그래밍공부를 할때 프로그램의 서적의 간단한 예제들을
생각해보면 , 이 문제들은 단순한 문제들여서 전혀 상상력의 여지가 없을 듯 하다.
그러나 그러한 문제의 해답들을 보면 대부분 비슷한 답중에서도 전혀 다른 사고방식의
코드들이 나오는 경우도 많다.

마치 똑같은 비너스상을 가지고 스케치공부는 미술학원 학생들의 다양한 비너스
모습을 볼 수 있는것과 같은 경우이다.



PS. 대규모 프로젝트에 정확한 설계스펙이 있을때 , 언뜻 코딩 노가대라고
     생각할 수 있겠지만 그것이 아니다라는 것을 그 뒤에 설명하려고 한부분에서
     글을 마치지 못한 글이어서 언뜻 앞뒤가 안맞는 포스트라
     포스트 공개를 하지 않았었지만 ,
     공개하게 되었습니다. 끝이 좀 이상하죠.

     즉 상상력을 망치는 것은 프로젝트의 규모나 설계스펙 정밀함이 문제가
     아닌 다른요소가 있음을 설명하려고 한것인데 그 부분을 정확히 글로
     꺼내지 못해서 중단된 글이었습니다만 뒤늦게 공개했습니다.
     
PS 이어지는 대목은 그렇다면 무엇이 상상력을 없애고 무엇이 프로그래밍을
    재미없게 하는가였습니다.

  그것은 빡빡한 일정에 휘뒬려서 '만들기만 하면' 되는 '구현만 해내면'
  되는 생각없는 프로그래밍 이라는 것이지요.

이글은 NIH 신드롬에 대한 이야기가 아닙니다.

또한 개발방법론에 대한 이야기가 아닙니다. 윈래 쓴 의도는 개념없이 개발자가
아닌사람으로부터 전략적으로 정해지는 일정에 의해서 상상력을 포기해야만
되는 개발에 대한 이야기입니다.



top