나의 프로그래밍 공부법 - 1.4. 무엇보다 중요한 것은 창의력이다.

2012. 10. 28. 15:24기타/나의 프로그래밍 공부법

이 부분은 필자가 실무를 경험하면서 많이 본 사항에 대해서 다룬 부분이다. 아마도 조금이라도 실무 경험이 있다면 쉽게 이해할 수 있겠지만, 반대로 유사 경험이 없다면 이해하기가 힘든 부분일 수도 있다. 분명히 말할 수 있는 것은 창의력을 발휘하여 문제를 해결할 수 있다면 여러분의 프로그래밍 공부는 보다 쉬어질 수 있다.


아쉽게도 창의력이라는 것이 인위적으로 개발되고 발달시키는 것이 어렵다는 것이 문제이다. 요즘에는 마치 특정 교육을 받으면 창의력을 가진 인재를 만들 수 있는 것처럼 광고하기도 하지만, 필자 생각에 창의력이라는 것은 총체적인 학습, 경험, 사고 등을 기반으로 하여 자연스럽게 표출되는 능력이라고 본다. 그런 의미에서 똑똑한 공부법은 자신이 가지고 있는 창의력을 최대한 발휘하여 좀 더 빠르게 몸으로 체득하는 것이 될 수도 있을 것이다.


---------------------

무엇보다 중요한 것은 창의력이다


어느 누구에게든 제일 어려운 문제는 바로 “창의력”이다. 굳이 개발자가 아니더라도 창의적인 사고를 할 수 있는 인재는 생각보다 그렇게 많지 않다. 특히나 요즘에는 “창의력”에 포커스를 맞춘 교육을 어릴 때부터 하고 있기는 하지만, 단순히 그런 교육만으로 누구에게나 “창의력”이 갑자기 생길 수는 없을 것이다. 이러한 창의력은 다른 일을 할 때에도 큰 도움이 되는 요소이기는 하지만, 프로그래밍 공부를 할 때에도 반드시 필요한 덕목이라고 할 수 있다.


소프트웨어 개발과 관련된 학문 자체가 이공 계열의 학문이다 보니, 개발자들은 일반인에 비해 지나치게 논리적, 수학적, 기술적(엔지니어적)인 사고 방식을 가지고 있다. 이러한 이공계 출신들의 사고 방식 자체는 나쁘지 않지만, 문제는 지나치게 한쪽으로만 편중되어 있는 것이 문제라고 생각한다. , “인문학적인 사고나 통찰력 등이 가미가 된 엔지니어”와 같이 다른 분야에도 열려있고 융화될 수 있는 형태로 생각을 하고, 이것들을 바탕으로 “창의적”인 사고를 할 수 있는 개발자가 된다면 더 좋은 결과를 충분히 만들어 낼 수 있을 것이다.


두 사람의 개발자에게 동일한 프로그램의 기획서와 GUI 가이드를 전달해주고, 각자 자신의 스타일대로 프로그래밍을 하도록 시켜보면, 이러한 창의력의 차이가 가장 확실하게 드러나는 것을 확인할 수 있다. 대부분 기획자의 기획 의도와 디자이너의 디자인 의도를 저마다 다르게 해석을 해서 전혀 다른 두 개의 프로그램이 만들어지기 때문이다. 밋밋한 기획서와 디자인 가이드를 주었음에도 불구하고 톡톡 튀는 프로그램으로 만들어 내는 개발자가 있는 반면에, 완벽한 기획서를 전달해주었음에도 불구하고 아주 평범하고 심심한 프로그램을 개발하는 개발자가 있기도 하다. , 창의적인 개발자는 단순히 기획자와 디자이너가 시키는 대로만 프로그래밍을 하는 것이 아니라 자신의 다양한 아이디어를 녹여내어 더 좋은 프로그램으로 만들어 낼 수 있다는 것이다.


그리고, “소프트웨어 개발”이라는 일은 항상 어떤 문제를 해결해내는 “해결책”을 찾는 일이다. 그렇기 때문에 상대적으로 조금이라도 더 좋은 해결 방법을 찾는 개발자가 “실력이 있는 개발자”라고 불릴 수 있다. 같은 문제라고 해도 그것을 해결하려고 하는 개발자마다 저 마다 다른 방법의 해결책을 찾아낼 수 있고 이러한 문제 해결 방법이라는 것은 “정답”이 따로 있는 것이 아니기 때문에, 주어진 여건 속에서 가장 최선의 방법을 찾는 것이 중요하다고 할 수 있다. 이 때에도 절실하게 필요한 것이 바로 “창의성”이다.


창의력이 있는 개발자들은 주어진 문제를 평면적으로 보기보다는 문제 해결을 위해 다양한 접근 방법을 열어두고 검토하기 때문에, 남들보다 기발한 방법으로 손쉽게 문제를 해결해낼 수 있는 편이다. 반대로 창의력이 부족한 개발자들은 지나치게 좁은 시야로 문제를 바라보기 때문에 우회를 하면 쉽게 풀 수 있는 문제도 본의 아니게 복잡한 방식을 채택하여 어렵게 풀어 나가는 경우가 많다. 더욱 안 좋은 것은 주위에서 좀 더 나은 아이디어나 힌트를 제공해주더라도 그것을 쉽게 받아들이지 못하고 굳이 비효율적인 방법을 고집하는 경우도 종종 있다.


필자가 한때 같이 일을 했었던 A모 개발자는 프로그램의 사소한 기능의 변경이나 추가 작업을 할 때마다 “그것을 처리하기 위해서는 기존 구조를 모두 바꿔야 하기 때문에 시간이 많이 걸립니다”라는 답변을 앵무새처럼 늘 이야기 했었다. 처음에는 정말로 그렇게 많은 공수가 들어가야 하는 일이라고 생각하여, 가급적이면 기능이 변경되지 않도록 하거나 꼭 필요한 기능 이외에는 추가하지 않도록 관리를 해야 했다.


그러나, 어느 날 A모 개발자가 프로그램을 개발하는 모습을 옆에서 지켜보니 너무나도 쉽게 해결될 수 있는 문제들 조차 큰 의미도 없는 자신만의 코딩 규칙이나 원칙을 지키기 위해서 처리하지 못하고 있는 것을 발견하였다. 살짝 생각을 달리해보면 쉽게 해결될 수 있는 방법들이 많았음에도 불구하고 미처 그런 생각을 하지 못하는 것은 물론 설명을 해주어도 쉽게 이해를 하지 못한다는 문제가 있었던 것이다. 그래서 일부러 경험이 많은 선임 개발자를 붙여주어 근본적인 문제를 해결할 수 있도록 처리하였으나, 아쉽게도 A모 개발자는 이후에도 창의력이 부족한 방법으로 업무를 이해하였고 제한적인 방법으로만 문제를 해결하려고 했다.


필자는 개인적으로 창의력을 높이려면 가급적 다양한 분야에 대한 직접적/간접적인 경험들이 많아야 한다고 생각한다. 평소에 많은 것을 보고 느끼면서 배우는 것들이 있어야 정말 필요할 때 이전에 경험한 것을 바탕으로 적절한 “창의성”이 발휘될 수 있다고 보기 때문이다. 따라서, 여러분들이 비록 IT 업체에서 소프트웨어를 개발하기 위해서 프로그래밍 공부를 하고 있다고 하더라도 컴퓨터 이외의 다양한 분야에 대해서 관심을 가지고 다양한 정보를 얻으면서 색다른 시각을 가질 수 있도록 노력해야 한다.