더 나은 프로그래머가 되기 위해선 여러 방법이 있습니다. 최신 기술이나 새로운 프로그래밍 언어에 대해 배우며 성장해나갈 수도 있습니다. 하지만 이번에 전할 이야기는 일반적인 프로그래밍 얘기와는 거리가 멉니다. 대신 다른 차원에서 접근해보고자 합니다.
우리가 알아가고자 하는 내용은 창의력이 뛰어난 개인(및 그룹)이 문제에 접근하는 방법, 그들의 습관과 사고 과정, 더 생산적이고 창의적인 해결책에 도달하는 방법 같은 것입니다. ‘창의적 프로그래머’라는 자격증을 취득하고 나면 그 어떤 경이로운 기술도 쉽게 이해할 수 있고 여러 프로그래밍 언어를 한 번에 배울 수도 있습니다. 적어도 이론적으로는 그렇습니다. 여러분이 이제 막 프로그래밍을 배우기 시작한 코린이든 혹은 숙련된 개발자든 간에, 이 이야기를 통해 최소한 창의적인 트릭 몇 가지는 새로 익히고 활용할 수 있으리라 기대합니다.
창의적 프로그래머의 일곱 가지 테마
이 이야기는 천재가 되는 법을 알려주지는 않습니다. 즉 ‘창의적 유전자’와는 거의 관련이 없습니다. 곧 알게 되겠지만 그런 것은 존재하지 않습니다. 대신 문제 해결 과정에 대해 다룹니다. 다양한 창의적 방법과 창의성에 대한 통찰력을 적용함으로써 더 나은 프로그래머가 될 수 있기를 바랍니다. 이들은 서로 다르지만 복잡하게 얽힌 일곱 가지 주제로 깔끔하게 묶여 있습니다.
실용주의 프로그래머이자 애자일 소프트웨어 개발을 위한 선언문의 공동 작성자인 앤디 헌트의 『실용주의 사고와 학습』(위키북스, 2015)은 손으로 그린 아름다운 마인드맵으로 시작하는데 이 마인드맵은 로드맵을 겸하고 있습니다. 그의 책은 프로그래밍에서도 좀 더 소프트웨어 공학적인 측면에 치우쳐 있기에, 저는 해당 그림에서 영감을 받아 비슷한 마인드맵을 새로 그려서 연구 보고서에 사용했습니다. 그런데 다른 사람들이 이것을 보고 매우 창의적인 것으로 간주하면서 즉시 받아들였습니다. 창의적 프로그래머 마인드맵은 다음과 같이 일곱 가지 모험으로 나뉘어 있습니다.
1. 기술 지식
창의적인 무언가를 만드는 사람이라면 누구나 자기 영역에서 일어나는 상황을 잘 파악하고 있어야 합니다. 너무 당연한 이야기라서 한 장 전체를 할애하기에 과한 주제처럼 보일 수도 있습니다. 프로그래머가 애초에 프로그래머가 아니라면 창의적인 프로그래머가 될 수 없습니다. 무언가를 하려면 그 전에 배우는 단계가 선행되어야 한다는 점은 매우 자명하지만, 정보를 소비하고, 지속해서 학습하고, 인지 편향을 인식하고, 지식을 관리하는 다양한 방법에 관해 하던 일을 잠시 멈추고 생각해 보는 과정은 여전히 유익합니다.
창의적인 프로그래머는 꾸준한 지식의 흐름을 새로운 아이디어로 전환하는 방법을 압니다.
2. 커뮤니케이션
창의성은 결코 단독으로 발휘되지 않습니다. 아이디어를 다듬는 것은 사회적 과정입니다. 독창적인 면이 있는 아이디어를 훌륭한 아이디어로 다듬기 위해서는 반드시 피드백이 있어야 합니다. 그러한 과정에서 동료들은 촉매제 역할을 할 수 있습니다. 이 주제를 다루는 장에서는 천재 클러스터의 개념, 드림 팀을 구성하는 방법, 팀의 창의성을 향상하는 기법에 대해 살펴봅니다. 제가 동료들과 함께 발표한 논문에서는 이 주제를 ‘커뮤니케이션’이라고 불렀기에 해당 용어를 그대로 사용했지만, 지금 생각해 보면 '협업’이 더 적합한 명칭일 수도 있습니다.
창의적인 프로그래머는 아이디어, 개인, 팀 간의 미묘한 상호 작용을 항상 인식합니다.
3. 제약 조건
모든 종류의 문제를 해결하려면 제약 조건을 고려해야 합니다. 그것이 자체적으로 부과된 것이든 외부에서 부과된 것이든 간에 말입니다. 일반적인 믿음과는 달리 제약은 창의성을 감소시키는 것이 아니라 오히려 창의성을 촉발하기도 합니다. 성가시고 불편한 것으로 보였던 제약 조건을 오히려 장점으로 전환한 결과 갑자기 창의력이 넘쳐난 여러 사례를 살펴보면 큰 도움이 될 것입니다.
창의적인 프로그래머는 주어진 제약에 대해 불평하기보다는 이를 주의 깊게 살펴보고 활용하는 방법을 압니다.
4. 비판적 사고
어떤 일을 이루기 위해 많은 아이디어를 떠올리는 것은 해야 할 일의 절반에 불과합니다. 나머지 절반은 최고의 아이디어가 나올 때까지 아이디어를 과감하게 덜어 내는 일인데, 이쪽이 훨씬 더 어려울 수 있습니다. 그런 다음 비로소 실행에 옮길 수 있습니다. 비판적 사고와 끊임없이 샘솟는 기발한 아이디어 사이의 공생 관계를 살펴보면 창의성은 아이디어를 창출하는 것뿐만 아니라 의사 결정과 실행에 관한 것임을 알게 될 것입니다.
창의적인 프로그래머는 무궁무진한 아이디어를 내는 것과 그 아이디어를 비판적으로 평가하는 것 사이를 자유롭게 오갈 수 있습니다.
5. 호기심
창의성 연구자인 미하이 칙센트미하이에 따르면, 호기심과 인내심은 창의성을 가장 잘 나타내는 두 가지 성격적 특성입니다. 호기심이 없으면 무언가를 배우거나 만들려는 동기가 거의 없고, 인내심이 없으면 작업을 효과적으로 마무리할 가능성이 거의 없죠. 모든 것을 시작하게 하는 처음의 호기심이 없다면 창의성은 창의성이 아닙니다.
호기심이 유전자에서 비롯된 것인지 어린 시절의 자극적인 경험에서 비롯된 것인지는 알 수 없지만, 호기심의 존재를 인정하고 소중히 여기며 창의적인 삶으로 성장할 기회를 제공하는 것이 중요합니다.
6. 창의적 마인드셋
우리는 모두 잦은 중단이 프로그래밍 흐름에 해롭다는 사실을 알고 있습니다. 이때 올바른 마음 상태, 즉 마인드셋을 유지하면 훨씬 더 창의적으로 작업할 수 있습니다. 흐름과 통찰이 서로 어떻게 작동하는지, 통찰력 점화insight priming가 어떤 효과를 가져올 수 있는지, 그리고 매우 중요하지만 자주 변하기 쉬운 아하! 순간aha-moment을 늘리는 방법을 알게 된다면 창의정 마인드셋을 더 쉽게 유지할 수 있을 것입니다.
물론 개인의 마인드셋을 개선하는 것과 팀이나 회사의 집단적 마인드셋을 향상하는 것은 별개의 문제이며, 창의적인 프로그래머에게는 두 가지 모두 똑같이 중요합니다.
7. 창의적 기법
창의성의 체계적 정의와 마찬가지로, 이러한 기법들은 창의적 문제 해결의 모든 차원과 얽혀 있습니다. 이러한 기법들이 반드시 하나의 뚜렷한 주제에 깔끔 하게 들어맞는 것은 아닙니다. 고전적인 브레인스토밍 세션과 아이디어에 도움을 줄 수 있는 더 새로운 기법을 비판적으로 살펴본다면 창의적인 프로그래머로 가는 길에 한 걸음 더 다가갈 수 있습니다.
이 글은 『크리에이티브 프로그래머』에서 일부를 발췌하여 정리하였습니다.
프로그래밍은 작곡이나 비즈니스 창업 또는 마케팅 캠페인 기획과 마찬가지로 창의적인 행위입니다. 여러 기술이나 능력이 그렇듯 창의성도 연습을 통해 익히고 개선할 수 있습니다. 창의성을 활용해 더 효과적인 문제 해결, 더 높은 생산성, 더 좋은 소프트웨어로 전환하는 실용적인 방법을 안내하는 『크리에이티브 프로그래머』에서 확인해 보세요.
최신 콘텐츠