비판적 사고는 아이디어를 검증하거나 거부하고, 창의적인 프로세스를 적시에 조정하고, 피드백을 요청하고 올바르게 해석하며, 우리 머릿속에 형성된 많은 인지적 편견을 극복하게 해준다.
5.2 창의적인 프로세스
1921년 그레이엄 월라스가 처음 제시한 창의적 프로세스의 5단계
참여 : 창의적인 결과물은 어느 날 갑자기 번뜩이며 떠오르는 통찰력보다는 90%의 오랜 기간에 걸친 준비 작업과 10%의 조명을 통해 만들어질 가능성이 높다.
배양 : 참여하기를 잠시 멈춘 채 거리를 두고 프로세스를 중단하는 가변적인 기간으로, 무의식적으로 통찰의 속도를 높인다.
조명 : 1단계의 땀과 눈물 없이는 결코 이루어질 수 없는 단계이다.
검증 : 결과물을 인식하는 단계로, 효과가 있는지 그만한 가치가 있는지 확인하고 그렇지 않다면 폐기하고 다시 시작해야 한다.
발표/수용 : 창작물을 동료들에게 발표하고 수락한 후에야 진정으로 창의적이라고 할 수 있다.
단계마다 번호가 매겨져 있으면 일반적으로 그 프로세스가 순차적임을 나타내지만, 창작 프로세스는 이와는 달리 재귀적이다.
창의성은 모든 단계 간의 미묘하지만 지속적인 상호 작용에 관한 것이다. 겨우 한 번 정도의 유레카! 만으로는 멀리 갈 수 없다.
5.2.1 비판적 검증
창의적 프로세스에서 비판적 사고는 어느 단계에 적합할까? 칙센트미하이는 통찰력을 검증하는 것은 한 걸음 물러나 지금까지의 창작물을 비판적으로 살펴보는 행위와 같다고 말한다.
프로그래밍을 할 때는 추측하고 가정해서는 안 된다. 몇 가지 중단점(breakpoint)을 설정하고 그 지점에서 메모리에 뭐가 있는지 꼭 확인해 한다.
불분명한 코드는 단계적으로 분석해 안개를 걷어 내야만 한다. 단위 테스트를 통해 동료와 미래의 자신을 위해 이러한 검증을 확고히 하기 바란다.
확인하고, 확인하고, 또 확인해야 한다.
5.2.2 집중적 사고
프로그래밍할 때는 코드 줄, 메서드, 멤버, 인수, 괄호, IDE의 측면에 배치된 패널 생산자, 유형, 예외 등에 주의를 집중해야 한다.
이 자명한 사고 단계를 분석적 문제 해결 또는 집중적 사고라고 한다. 즉, 성취해야 할 것과 해결책에 집중해야 한다. 심리학 연구자들에 따르면 이 단계는 점진적이고 대부분 의식적인 과정을 포함하며, 창의성의 필수적인 부분이라고 한다. 집중된 행동 없이는 그림 한 장도 그릴 수없고, 시 한 구절도 쓸 수 없으며, 코드 한 줄도 프로그래밍할 수 없다.
집중적 사고는 낮은 수준의 문제를 해결하는 데는 유용하지만, 때로는 여기저기서 몇 가지 지름길을 찾거나(전체 시스템에 큰 영향을 미치지 않을 테니 여기서는 그냥 static을 쓰자), 개요를 놓치거나(이 방법이 고객의 문제와 어떤 관련이 있을까?), 비판적 사고를 충분히 했음에도 불구하고 잘못된 결정을 내릴 수 있다. 따라서 확산적 사고와 같은 다른 사고 모드를 사용해야 할 때가 종종 있다.
5.2.3 확산적 사고
아이디어 발상 단계를 확산 모드 사고라고 부른다.
집중적 사고는 현재 당면한 문제를 세밀하게 들여다 보면서 분석하는 것이지만, 확산적 사고는 멀리서 더 큰 그림으로 바라보고 문제 자체로부터 잠시 벗어나 문제의 다양한 측면을 더 높은 수준에서 접근하는 것이다.
확산적 사고는 아이디어가 '갑자기' 떠오르는 자발성과 더 연관되는데, 이런 사고는 좀 더 관련 성 있는 통찰력으로 이어지고 이는 다시 더욱 집중적인 사고와 합쳐져 해결책에 도달할 수 있다.
5.2.4 집중적 사고와 확산적 사고의 결합
아이디어를 생성하고(창의적 프로세스의 배양/조명 단계), 가장 좋은 아이디어를 고르는(검증/수용 단계) 개념은 많은 인지 심리학 이론에 반영되어 있다.
인지 심리학 연구자인 로버트 스턴버그의 창의성에 대한 정의에도 이러한 이중성이 존재한다.
"창의성은 아이디어세계에서 낮은 가격에 사고 높은 가격에 파는 결정이다."
상황에 따라 어느 정도의 확산적 사고와 집중적 사고가 요구된다.
확산적 사고를 너무 많이 하게 되면 실행되지 못할 이상한 아이디어를 많이 만들어 내기 십상이다. 지나치게 집중된 사고는 터널 비전과 추측성 일반화로 이어진다. 문제 공간은 체계적이며 모든 것이 서로 연결되어 있다는 것을 기억해야 한다.
사고 모드를 자주 전환하는 것이 가장 바람직한 접근 방식일 수 있다.
5.3 창의성은 목표가 아닌 수단
창의성은 아이디어 발상 그 이상이며 비판적 성찰도 포함한다. 두 가지 개념 모두 기존의 모범 사례로는 해결할 수 없는 문제를 해결하거나 애초부터 문제를 인식하고 분리하는 데 필요하다.
창의성을 위한 창의성은 위험해지기 시작하는 지점입니다. 미학에 눈이 멀어 갑자기 모든 것을 아름답게 만들고 싶은 충동을 느끼면서 무의식적으로 관념적인 일반성을 더 많이 도입한다.
비판적 사고를 건강하게 수행하면 장인 정신을 일깨울 수 있다. 물론 깔끔한 코드가 가장 중요하다는 것은 감히 부정할 수 없는 사실이다. 코드는 (재)작성되는 것보다 읽히는 것이 10배는 더 많습니다. 간단하고 읽기 쉬우며 깔끔한 코드는 유지보수가 쉽다. 보기 흉한 스파게티 코드는 그 반대이다. 하지만 복사와 붙여넣기를 즐기는 평범한 프로그래머로부터 자신을 차별화하기 위해 창의성을 무기 삼아 휘두르는 것은 결국 코드베이스, 자존감, 동료에게 해를 끼치게 됩니다. 창의력은 목표가 아니라 수단입니다.
5.4 일반적인 비판적 사고 오류
인지 심리학자 스티븐 핑커(Steven Pinker)가 말하는 비판적 사고, 즉 ‘합리성'은 결코 완벽하지 않다. 사회적 환경의 영향을 받는 인지적 편견은 우리의 사고 패턴을 끊임없이 왜곡한다.
아래 예시에는 인지적 편향 중에서 프로그래머로서 우리가 자주 빠지는 편향에 대해 강조한다.
언어 간 충돌
프로그래밍 언어가 아닌 인간의 말을 새로 배울 때도 언어간 간섭이 장애가 될 때가 있다.
스페인어의 embarazada와 영어의 embarassed는 비슷해보이지만 완전히 다른 뜻이다.
숙련된 개발자를 대상으로 새로운 언어를 배우는 방법에 대해 인터뷰를 진행한 결과 드러난 다른 문제는 오래된 습관을 버리기 어렵고 패러다임을 전환할 때 사고의 전환이 필요하다는 것이다.
언어 간 간섭을 극복하려면 검증하고 또 검증해야 한다.
급격히 떠올린 아이디어
창의적 프로세스의 조명 단계에서는 충분히 발전시킬 가치가 있는 통찰력을 얻을 수 있지만, 먼저 ‘갑작스럽게' 떠오른 아이디어를 비판적으로 검증하는 것을 잊지 말아야 한다. 통찰력에는 편견이 따르기 마련이다. 번쩍이는 영감으로 얻은 아이디어는 논리적 단계로 얻어낸 아이디어보다 더 진실된 것으로 여겨질 때가 많다.
이러한 아이디어도 다른 아이디어와 마찬가지로 검증하고, 검증하고, 또 검증해야 한다.
무지와 의도적 발견
예상치 못한 일이 발생했을 때만 우리는 진정으로 무언가를 배운다. 모든 것이 계획대로 진행 된다면 우리는 단순히 이전에 작성했던 코드를 그대로 다시 작성할 것이다. 그렇게 함으로써 학습하고 있다고 착각할 수 있지만, 이미 익숙한 일련의 동작을 더 잘 수행하는 것일 뿐이다.
예상치 못한 동작이 발생하면 우리는 작업을 멈추고 생각하게 되고 디버깅하게 된다. 이를 우연한 발견이라고 부른다. 우리는 이러한 학습의 순간이 일어나기를 의도하지는 않는다.
프로젝트가 진행되는 동안 예상치 못한 예외와 그 외 에도 우연히 이루어진 학습 덕분에 우리의 무지가 줄어들 가능성이 높다.
창의적인 프로그래머는 자신의 무지에 대해 주의를 기울인다. 진정한 소크라테스적 방식으로, 그들은 자신이 무엇을 모르는지 알고, 그것이 앞으로 나아가는 데 도움이 된다면 적극적으로 수정한다
5.5 지나친 자기비판
우리 자신의 작업을 지나치게 비판적으로 바라보면 '창의적 고집'이라는 결과를 얻을 때가 있습 -니다. 예술가이자 교사인 줄리아 캐머렌ulia Cameron은 세계적 베스트셀러인 아티스트 웨이(경 당. 2012)에서 계곡에서 벗어나 내면의 창조적 비평가를 다룰 수 있는 방법을 설명한다.
많은 예술가에게는 내면의 비평가가 있고, 저 역시 마찬가지입니다. 저는 제 내면의 비평가를 엄격한 영국 인테리어 디자이너 나이절이라고 부릅니다. 제가 작품을 만들 때면 나이점은 즉시 이렇게 외칩니다. "너무 지루해, 너무 유치해, 너무 형편없어!" 그러면 저는 "나이절. 말해줘서 고마워요"라고 말하고 작업을 계속합니다.
캐머런에 따르면 창의력 회복을 위한 가장 중요한 도구는 매일 아침 글쓰기(눈을 뜨자마자 여과 없이 생각나는 것을 적는 것)와 자신과의 예술적 데이트(영감을 얻기 위해 몇 시간 동안 여행을 떠나는 것)이다.
캐머런의 고전적인 제안을 코딩 상상력을 자극하는 것으로 바꿔보기를 바란다.
강연, 깃허브에서 멋진 저장소 탐색, 게임 플레이, C++ 책 찢기
5.6 타인의 비판적 사고가 중요한 이유
창의성은 사회문화적 판단이라는 점을 기억하자.
누군가 여러분의 작업을 이는 또한 타인의 비판적 평가와 검증이 아이디어 개발 단계를 넘어 우리 자신의 작업을 타인 창의적이라고 인정하지 않는다면 여러분의 작업은 창의적인 것으로 인식되지 않을 것이다.
여러분이 작성한 코드를 아무도 이해하지 못한다면 코드를 단순화하는 것을 생각해 봐야 한다.
5.7 요약
일반적인 창의적 과정은 참여, 배양, 조명, 검증, 발표/수용과 같은 상호 연관된 단계로 이루어져 있다.
따라서 아이디어와 구현을 검증하는 비판적 사고는 창의적 프로그래머의 필수 요소이다.
창의적 과정은 여러 단계에서 다양한 사고방식, 즉 확산적 사고와 집중적 사고가 필요하며, 이 두 가지를 적절히 혼합하는 것이 이상적이다. 아이디어가 떠오르지 않는다면 사고 모드를 바꿔 보자.
소프트웨어 문제 해결의 맥락에서 창의성은 일반적으로 목표가 아닌 수단으로 사용된다. 그러나 창의성은 그 자체로 자기표현, 미화, 새로운 기술 탐색 및 활용 등의 목표가 될 수 있다. 수단으로서의 창의성과 목표로서의 창의성 사이의 경계를 잘 인식해야 한다. 제품이 아닌 코드를 위한 코드, 아름답기만한 코드는 작성하지 말아야 한다.
비판적 사고에 많은 오류가 있다는 것을 알면 가장 고치기 어려운 오류일지라도 극복하는 데 도움이 될 것이다. 소크라테스가 말했듯이 ‘무엇을 모르고 있는지’ 알아야 한다.
비판적 사고는 다른 사람이나 자신을 너무 힘들게 만들고 궁극적으로 창의적인 흐름을 방해할 수 있다. 창의성은 체계적이며 여러분은 상호 학습 생태계의 일부라는 점을 기억해라.
비판적 사고를 자신의 작업에만 국한하지 말아라. 다른 사람의 창의적인 작업에도 피드백이 필요하다. 피드백이 상대방에게 어떻게 받아들여질지 먼저 고려하는 것이 좋다. 따라서 다른 사람의 비판적 피드백을 받을 때는 열린 마음가짐을 가져야 한다.