1. 프로그래밍은 상상이다 - 문제 해석편
저자의 장인정신을 통해 프로그래밍에 대한 본인만의 철학과 시선을 이야기하는 것이 감명깊었습니다. 매일같이 새로운 뉴스와 빠른 변화로 인해 따라가기에 급급할 수 있는 IT 세계의 흐름에서 자신의 시선으로 해석하고 논리적으로 표현하는 저자의 글솜씨에 감탄하여, NHN NEXT에서 프로그래밍을 공부할 당시에 가장 재미있게 읽었던 책입니다. 자기소개서에 작성한 좋은 개발자의 덕목 덕목 중 첫번째로 꼽은 '문제의 발견, 해석'의 덕목 또한 이 책을 읽으면서 생각하게 된 부분입니다.
저자는 프로그래머가 기쁨과 환희를 느끼게끔 이끌어주는 힘의 본질을 논리력, 끈기, 순발력 3가지 덕목으로 요약했습니다. 저자는 논리력과 순발력이 뛰어나지만 끈기가 없는 프로그래머는 번뜩이는 아이디어와 알고리즘을 끝까지 구현하는 뒷심이 부족하고, 끈기가 남다르지만 논리력이 부족한 사람은 많은 일은 하지만 창의적인 일을 하기는 어렵다고 봅니다. 그리고 이보다 더 중요한 것은 상자 밖에서 생각하는, 즉 주어진 환경과 조건이 강요하는 생각의 흐름을 과감하게 탈피해서 전혀 새로운 각도로 해석하는 순발력. 즉 상상력을 이야기합니다.
치밀한 논리력이나 진득한 끈기를 발휘하는 시간은 순간적이지만, 코딩을 하지 않고 있는 시간에 프로그래머들은 다른 무엇보다도 상상을 합니다. 문제의 원인이 뚜렷하지 않거나, 어려운 구현을 앞두고 있을 때 상상의 폭과 깊이는 넓고 깊어지며, 논리적 추론이 필요한 것은 상상이 충분히 일어난 다음의 일이라고 봅니다. 눈에 보이지 않는 개체들을 강렬하게 상상하고, 그 객체들이 펼치는 오케스트라를 상상하는 것.
그래서 코드 또한 지루한 산문이 아닌 상상력을 자아내는 시적인 묘사를 이야기합니다. 코드의 불필요함을 줄이고 높은 추상성을 갖는 코드는 의미가 극도로 압축되어 있기 때문에 보편성을 가져서 특정한 비지니스 논리에 밀착되지 않습니다. 그런 코드는 다른 논리와 함께 확장되기 쉽고, 코드 자체가 수행하는 일이 뚜렷해서 유닛테스트를 수행하기 용이하며, 문맥에 따라 의미가 확장될 수 있습니다.
결국 이러한 본인만의 상상력은 남들이 쉽게 해석할 수 없는 문제의 발견과 해석의 능력으로 이어질 것입니다. 이러한 주어진 현실을 돌파하는 그 정신적인 상상력의 힘은 결코 하루아침에 만들어질 수 없는 것입니다. 그래서 다시금 책을 집어들 때면 프로그래밍을 학습할 때의 초심을 생각하게 만들어주는 울림을 가져다 줍니다.
2. You don't konw js 시리즈 - 문제 해결편
매끄러운 번역 덕분에, 저자가 설명해주는 자바스크립트에서 안다고 말하기 어려웠던 개념들에 대해서 다시 짚고 넘어갈 수 있는 책이 되었습니다. 오랜시간 헷갈렸던 클로저, 스코프, this에 대한 상세한 부분들도, 이 책을 읽고서야 다른 사람들에게도 설명할 수 있게끔 이해하는 계기가 되었습니다. 책은 지식만 나열한 것이 아닌 저자의 경험 또한 같이 공감되게 작성해주어 마치 대화하듯 읽을 수 있는 것이 장점이었습니다. 그래서 교육적인 측면에서도 저자의 화법이나 사고방식을 알아가는게 흥미로운 책이었습니다. 책에서 저자는 클로저에 대해 설명하고 아래와 같이 말을 겁니다.
깨달음의 순간이 이럴 것이다.
"아, 클로저는 내 코드 전반에서 이미 일어나고 있었구나! 이제 난 클로저를 볼 수 있어."
클로저를 이해하는 것은 네오가 매트릭스를 처음 봤을 때와 같을 것이다.
단순한 지식의 암기라기 보다는 위와 같은 깨달음을 얻을 수 있는 의식의 흐름을 따라가며 저 또한 교육을 진행하면서 이런 지식의 공유를 하고 싶다는 그림을 그려주었습니다. 그리고 지식을 나눔에 있어서 그의 태도 또한 교육자 입장에서 영감을 주었습니다. 인터넷에서 누군가 책의 저자인 카일 심슨에게 'Should I listen to Kyle Simpson's opinions on Writing Javascript code?'라고 묻자 그는 아래와 같이 답변하였습니다.
You shouldn't adopt any of my opinions. That's not the point of what I teach or write.You should reason about each topic and come to your own conclusions. ...My objective is to get you to own your opinions, not adopt mine.
모르는 지식을 내가 더 많이 알려준다라는 것이 아닌, 학습자가 스스로 더 생각하고 자신만의 의견을 가질 수 있는 것을 지향하는 그의 시선은, 미션중심으로 자기주도 학습을 추구하는 우아한테크코스의 교육관과도 맞물렸습니다.
그래서 자바스크립트에 대한 지식뿐만 아니라, 교육자로써의 지식을 공유하는 태도에 대해 같이 깨달음을 얻을 수 있었던 책이었습니다.
3. 함께 자라기 - 문제 해결 공유편
프로그래머로써 어떻게 '함께' 할 수 있는지 그 방향성을 제시해준 책입니다. 팀원들과, 그리고 학생들과 1년을 보내면서 언제나 고민이었던 것은 어떻게 이 '함께'의 힘을 확장해 나갈 수 있는지였습니다. 그러한 추상적인 고민에 구체적인 행동력을 부여해준 건 책에서 이야기한 방법론들이었습니다. 그 중 실천으로 가장 빠르게 옮긴 것이 2가지 있습니다.
첫번째는 '실수는 예방하는 것이 아닌 관리하는 것'입니다. 보통은 실수를 하지 말아야 한다고 이야기 하지만, 실수가 없으면 학습하지 못한다는 관점으로 이야기 하며, 그 실수들을 대처하고 받아들이는 태도를 이야기 한점은 저에게 뿐만 아니라, 학생들과의 소통에서도 성장을 위해 큰 의미가 있는 메시지였습니다. 이 내용이 인상 깊어 저만의 실수 데이터 베이스를 만드는 작업을 시작하게 되었습니다.
두번째는 피드백의 짧은 주기로 얻음으로써 삼투압적으로 의사소통을 하는 것입니다. 삼투압적 의사소통이란 은연 중에 서로 간에 정보가 스며들게 하는 것입니다. 짧은 주기로 팀원들에게 업무의 과정을 공유하고, 피드백을 짧게 받음으로써 서로 생각의 각도가 벌어지는 것을 전보다 빠르게 조정할 수 있었고 정보를 획득하는 습관을 기를 수 있게 되었습니다.
책을 읽으면서 과거에 실수 했던 부분이나, 잘 진행되지 못했던 팀프로젝트들을 떠올릴 수 있었습니다. 그래서 그 경험들을 스스로 정리할 수 있는 계기가 되어서, 과거의 경험들에 대한 실수를 분석할 수 있게 되었고 자연스럽게 학생들과의 소통과정에서도 스며들게 되었습니다. 책에 나오는 방법론들을 의식적으로 실천해보는 노력을 통해 팀원들뿐만 아니라 학생들에게도 자연스럽게 베어들도록 노력하고 싶게 만든 책이었습니다.