창의성 연구자인 제임스 카우프만과 로버트 스턴버그는 창의성을 다음과 같이 요약한다.
1.1 창의성이란 정확히 무엇일까?
- 참신하고 독창적일 때
- 품질이 우수할 때
- 당면한 과제와 관련이 있을 때
학문적으로 정의하려면 복잡해지지만, 맥락을 고려하면 창의성에 대한 정의는 단순해진다.
어떤 것을 보고 다른 사람이 창의적이라고 말한다면 그것은 창의적이다. 참 쉽죠? 창의성은 사회적 판단이다. 여러분의 프로그래밍 노력이 창의적인 결과물로 이어졌는지는 여러분 자신이 아니라 여러분의 동료들이 결정한다. 여러분의 결과물이 창의적이라고 여러분 스스로 결정할 수는 없다. 창의성은 사회문화적 현상이기 때문이다.
시간과 장소는 창의성에 똑같이 중요한 영향을 미친다.
1.2 왜 창의성일까?
- 창의적인 개발자로 살아야 하는 주된 이유
- 첫번째, 고용주가 요구하기 때문이다. 수년 동안 거의 모든 소프트웨어 개발자 구인 광고에는 창의적이라는 단어가 포함되어 있다.
- 창의력이 요구되는 이유는 문제 해결 때문이다. 기존의
창의적인 프로그래머는 문제 발견자이자 해결사이다.
- 두 번째 이유는 동료의 의견이 중요하기 때문이다.
1.3 다양한 수준의 창의성
- 연구자들은 다양한 수준의 창의성을 분류하려고 노력한 결과 다음과 같은 분류법을 제시했다.
- LittleC 또는 일상적인 창의성: 개인적인 창의성으로서, 이전에 해보지 않은 독창적인 무언가를 하는 것을 의미한다. 예를 들어 자신이 가장 좋아하는 게임이 C++11로 구현되어 있다면 이것을 휴대용 게임기인 게임보이 어드밴스로 크로스 컴파일하는 행위가 이에 해당한다.
- BigC 또는 저명한 창의성: 이전에 아무도 해보지 않은 독창적인 작업을 수행하는 것을 의미한다. 예를 들어 루비 3을 486 컴퓨터의 DOS 6.22 실행하기 위해 포팅하는 것이다.
- 세상의 모든 것이 그렇듯이 분류 체계에 대한 비판이 있을 수밖에 없다. LittleC는 때때로 너무 평범하고 단조로운 것으로 묘사되기도 합니다. BigC의 위대함 때문에 일상의 창의성은 도외시하고 더 거대한 창의성을 발휘하는 것에 압박감을 느낄 수도 있다.
- 어떤 사람들은 이에 대응하여 다른 분류를 제안했다. 역사적 창의성을 뜻하는 H-창의성과 개인적 창의성을 뜻하는 P-창의성으로 구분하자는 제안이 있었고, LittleC와 BigC 사이에는 MiniC와 ProC라는 숨겨진 층이 더 있다는 주장도 있었다.
- 요컨대, 창의성에 대한 학문적 연구는 다소 혼란스럽다는 것이다.
- 그럼에도 불구하고, 아래 그림처럼 창의성을 다양한 수준의 관점에서 생각하는 것은 도움이 될 수 있다.
1.4 더 창의적이 되기 위한 로드 맵
- 이 책은 천재가 되는 방법을 알려주지 않는다. 즉 '창의적 유전자'와는 거의 관련이 없다. 곧 알게 되겠지만 그런 것은 존재하지 않는다. 대신 문제 해결 과정에 관해 다룬다. 다양한 창의적 방법과 창의성에 대한 통찰력을 적용함으로써 더 나은 프로그래머가 될 수 있기를 바란다.
기술 지식
- 창의적인 무언가를 만드는 사람이라면 누구나 자기 영역에서 일어나는 상황을 잘 파악하고 있어야 한다.
- 프로그래머가 애초에 프로그래머가 아니라면 창의적인 프로그래머가 될 수 없습니다.
- 무언가를 하려면 그 전에 배우는 단계가 선행되어야 한다는 점은 매우 자명하지만, 정보를 소비하고 지속해서 학습하고, 인지 편향을 인식하고, 지식을 관리하는 다양한 방법에 관해 하던 일을 잠시 멈추고 생각해 보는 과정은 여전히 유익하다.
커뮤니케이션
- 창의성은 결코 단독으로 발휘되지 않는다.
- 아이디어를 다듬는 것은 사회적 과정이다.
- 독창적인 면이 있는 아이디어를 훌륭한 아이디어로 다듬기 위해서는 반드시 피드백이 있어야 한다.
- 창의적인 프로그래머는 아이디어, 개인, 팀 간의 미묘한 상호 작용을 항상 인식한다.
제약 조건
- 모든 종류의 문제를 해결하려면 제약 조건을 고려해야 한다. 그것이 자체적으로 부과된 것이든 외부에서 부과된 것이든 간에 말입니다.
- 일반적인 믿음과는 달리 제약은 창의성을 감소시키는 것이 아니라 오히려 창의성을 촉발하기도 한다.
- 창의적인 프로그래머는 주어진 제약에 대해 불평하기보다는 이를 주의 깊게 살펴보고 활용하는 방법을 안다.
비판적 사고
- 어떤 일을 이루기 위해 많은 아이디어를 떠올리는 것은 해야 할 일의 절반에 불과하다. 나머지 절반은 최고의 아이디어가 나올 때까지 아이디어를 과감하게 덜어 내는 일인데, 이쪽이 훨씬 더 어려울 수 있다
- 창의성은 아이디어를 창출하는 것뿐만 아니라 의사결정과 실행에 관한 것임을 알게 될 것이다.
- 창의적인 프로그래머는 무궁무진한 아이디어를 내는 것과 그 아이디어를 비판적으로 평가하는 것 사이를 자유롭게 오갈 수 있다.
호기심
- 호기심은 새로운 것(기술적인 지식)을 배우려는 암묵적인 동기와 '왜'라는 질문(비판적 사고)으로 이어진다.
창의적 마인드셋
- 올바른 마음 상태, 즉 마인드셋을 유지하면 훨씬 더 창의적으로 작업할 수 있다.
- 흐름과 통찰이 서로 어떻게 작동하는지, 통찰력 점화가 어떤 효과를 가져올 수 있는지, 그리고 매우 중요하지만 자주 변하기 쉬운 아하! 순간을 늘리는 방법은 무엇인지 살펴보자.
- 개인의 마인드셋을 개선하는 것과 팀이나 회사의 집단적 마인드셋을 향상하는 것은 별개의 문제이며, 창의적인 프로그래머에게는 두 가지 모두 똑같이 중요하다.
창의적 기법
- 마지막으로, 앞의 모든 장에서 설명한 개념에 긍정적인 영향을 줄 수 있는 몇 가지 실용적인 창의적 기법을 논의할 것이다.
- 창의성의 체계적 정의와 마찬가지로, 이러한 기법들은 창의적 문제 해결의 모든 차원과 얽혀 있습니다.
- 고전적인 브레인스토밍 세션과 아이디어에 도움을 줄 수 있는 더 새로운 기법을 비판적으로 살펴볼 것이다.