본문 바로가기

기타/객체지향의 탄생(2013)

객체지향의 탄생-장인 정신이 깃든 프로그램

 

  1. 현장의 고민거리
    1. 장인 정신이 깃든 프로그램

지구는 넓고 사람은 목적지를 향해 이동한다. 사람은 넓은 지구를 빠르고 편하게 이동하기 위해 도구를 만들었다. 현대의 이동 도구는 자전거, 자동차, 비행기등이 있다. 자전거 보다는 자동차가 편하고 빠르다. 자동차 보다는 비행기가 편하고 빠르다.

 

현대의 이동 도구, 교통 수단인 자전거, 자동차, 비행기중에 자동차가 자전거보다 빠른 이유는 좀더 높은 수준의 기술을 사용했기 때문이고, 자동차가 비행기보다 느린 이유는 좀더 낮은 수준의 기술을 사용했기 때문이다. 높은 수준의 기술을 사용했기 때문에 자전거보다 자동차가 배우기 어렵고, 자동차보다 비행기가 배우기 어렵다.

 

교통수단의 예를 통해, 높은 수준의 기술일수록 배우기는 어렵지만 잘 배우면 기술의 혜택을 마음껏 누린다는 것을 알 수 있다. 프로그래밍도 마찬가지이다. 객체지향 프로그래밍에는 다른 프로그래밍보다 높은 수준의 기법이 사용되었다. 그래서 배우기는 어렵지만 잘만 배우면 객체지향 기법의 혜택을 마음껏 누릴 수 있다.

 

지금껏 높은 수준의 객체지향 프로그래밍을 이해하기 위한 몇가지 과정을 거쳤다. 객체의 가장 기본적인 요소를 이해하고, 객체지향을 객체지향 스럽게 만드는 중요한 요소도 알았다. 이제는 이 요소들을 어떻게 활용할 것인가 알아야 할 과정을 거친다. 객체지향으로 세상을 컴퓨터로 잘 쓰는 방법을 배우는 것이다.

 

우리가 프로그래머로 일하는 이유는 두가지 이다. 프로그래밍이 좋아서 프로그래머가 되었다. 어떻게든 먹고 살려다보니 밥벌이 삼아 프로그래머가 되었다. 전자는 순수한 열정이 느껴지고, 후자는 치열한 생존 전쟁의 이미지가 풍긴다.

 

어렸을 때 빌게이츠와 애플의 스티브잡스등의 IT영웅들을 잡지에서 보던 나는, 세상의 프로그래머는 단지 프로그래밍이 좋아서 프로그래머가 되었을 것이라고, 프로그래머는 뭔가 순수하고 특별한 세계를 가진 사람들일 것이라고 기대했다.

 

나는 현실과 다른 이상에 대한 꿈을 꾸었다. 우리나라는 프로그래밍이 좋아서 프로그래머가 되는 순수한 열정을 지켜주진 않는다. 우리나라 프로그래머는 밤12시 넘어서 일하고, 새벽에도 일하고, 주말에도 일하며, 명절에도 일하고, 결혼기념일에도 일하며, 심지어는 어머님 칠순잔치에도 야근하는 모습을 보았다. 마치 전쟁터의 포화로 아름다운 도시가 쑥대밭이 되듯이, 우리나라의 개발 환경은 프로그래밍이 좋아서 프로그래머로 일하는 사람들의 열정을 파괴하기도 한다.

 

그래서 우리나라 대부분의 프로그래머는 먹고 살려는 밥벌이로 프로그래머를 하고, 프로그래밍이 좋아서 프로그래머가 되었어도 결국 먹고 살려는 밥벌이의 목적으로만 프로그래머를 할 것이었다.

 

 

밥벌이의 목적으로만 프로그래밍을 할때의 문제점은 장인 정신이 사라진다는 것에 있다. 장인 정신이 깃든 프로그램은 내가 만든 프로그램에 열과 성에다가 혼까지 집어넣어 정성을 다한 프로그램이다. 마치 장인의 자부심이 깃든 도자기처럼 예술 작품을 만들기 위해 혼신의 노력을 기울인다.

 

하지만 밥벌이의 목적으로만 프로그래밍을 할 경우는, 월급과 비례하고 업무량에 반비례하여 개발자의 노력이 작동한다. 대부분의 개발자는 박봉에 비해 엄청난 업무량에 시달린다. 그래서 제대로 프로그램을 만들 생각보다는, 그저 갑의 감시를 피할 정도의 테스트 통과용 코딩에 집중한다.

 

그렇다면 우리나라 IT환경과는 상관없이 장인의 정신을 지니게 된 프로그래머가 자신의 프로그램으로 추구하는 가치는 무엇일까 생각해보았다. 먼저 내가 만든 프로그램을 고객이 만족스럽게 사용 하는 것이 중요한 가치일 것이다.

 

잘 만든 프로그램은 고객이 동작시킬때 만족스러워 한다. 그 이후에 고객이 계속 프로그램을 다룰때도 계속 만족스러워 한다. 고객의 업그레이드 요청이 쉽게 해결될때 만족한다. 이렇게 고객의 가치를 최우선으로 생각한 프로그램이 잘 만든 프로그램이다.

 

고객을 위한 프로그램은 밖을 지향한다. 프로그래머를 위한 프로그램은 안을 지향한다. 프로그래머는 자신의 프로그램이 유연하고 확장하기 쉽고 유지보수 하기 편할때 만족스러워 한다. 프로그래머는 자신과 미래에 자신의 프로그램을 다룰 다른 프로그래머를 위해, 자신의 프로그램을 유연하고 확장하기 쉽고 유지보수 하기 편하게 만들어야할 사명감을 가져야 한다. 장인 정신이 깃든 프로그래머는 이런 사명감을 가진 프로그래머이다.

 

그래서 정리하면 고객과 프로그래머가 골고루 만족할 수 있는 프로그램이 잘 만든 프로그램이며, 장인정신이 깃든 프로그램이다. 이 명제를 지키지 못한 프로그램은 대부분 척박한 개발 환경에서 이루어지는 테스트 통과용이며 밥벌이용 프로그램이다.

 

그나마 척박한 개발 환경에서도, 고객과 프로그래머를 모두 생각한 프로그램을 만들기 위해 노력하는 장인 프로그래머들을 위해, 객체지향의 다양한 디자인원칙이 도와주고 있다.

 

덧 ) 이 객체지향의 탄생 원고는 제가 책으로 내려다가 일단 잘 안되었는데요. 이유는 비문이 많다. 단락내 주제가 중복된다. 어떤 상황 설명을 과장한다.등 입니다. 그래도 원고를 일단 블로그에 몽땅 풀어보고 언젠가 제대로 교정해서 다시 도전할 생각입니다. 이점을 감안해서 읽고 객체지향을 이해하는데 도움이 되셨으면 좋겠습니다. 의견도 주셨으면 좋겠습니다. 원고 조금만 교정하면 괜찮을것 같은 출판사 관계자분의 피드백도 환영합니다.