프로그래밍은 상상이다

  1. 프로그래밍은 혼자서 하는 벽돌 깨기 같은 게임이 아니라, 여러 명이 힘을 합쳐서 적과 맞서는 스타크래프트 같ㅇ은 게임에 더 가깝기 때문이다. pp 58

  2. 물리적인 세계는 분절적이고 이산적인 디지털이 아니라 무한한 변수를 포함하는 아날로그이다. 그렇기 때문에 ‘모든’ 경우의 수를 따지는 것이 실질적으로 불가능하다. pp 68

  3. 그때 사람은 자기가 마주하고 있는 것이 사람인지 아니면 컴퓨터인지 더 이상 구별할 수 없게 된다. 알고리즘이 도달할 수 있는 최고의 경지이다. pp 71

  4. OTL; 영문자 세 개를 합쳐서 고개를 떨어뜨리고 엎드린 사람의 형상을 만들어 내는 젊은 친구들의 재치 있는 상상력 앞에서는 감탄이 절로 나왔다. 그렇지만 마음 한 구석으로는 저런 표현이 등장한 배경이 젊은 사람들이 고개를 떨어뜨리고 좌절할 일이 많은 세상사인 것은 아닌지 하는 걱정이 들기도 했다. pp76

  5. 인식하는 나와 인식되는 나는 동일한 존재다. 따라서 이러한 자기참조는 필연적으로 이상한 고리를 형성한다. 여기에서 의식이 발생하는 것이다. 호프스태터에 의하면 스스로의 존재를 지각하는 자기인식은 인간만의 특권이 아니며, 신의 은총과도 거리가 멀다. 그것은 이상한 고리를 형성하는 패턴(pattern)일 뿐이다. 인간의 경우에는 그 패턴을 구현하는 매체가 딱딱한 두개골에 들어있는 말랑말랑한 뇌의 뉴런이지만 매체는 비트와 바이트가 될 수도 있고, 유리가 될 수도 있고, 하늘에 떠가는 구름이 될 수도 있다. 결국 자신을 인식할 수 있는 것은 인간만이 아니라, 심지어 생물인 것만도 아니다. pp 93

  6. 정도의 차이는 있지만 컴퓨터의 지능에 우리의 몸과 판단을 맡기는 사레는 차고 넘친다. 예를 들어서 음성인식, 은행 전상망, 컴퓨터 체스, 우주탐사선, 수학 프로그램, 여행 스케쥴, 그리고 게임 속에서 우리는 컴퓨터가 데이터를 분석해서 내린 결론을 의심 없이 받아들이는데 익숙하다. SF 영화나 소설은 사람을 능가하는 뛰어난 지능을 갖춘 컴퓨터를 등장시켜서 흥미를 유발시킨다ㅏ. 아직은 ‘과학’보다는 ‘공상’에 가까운 설정이다. 컴퓨터의 지능이 아무리 발전하더라도 그것이 스스로의 존재를 자각하지 못하는 이상 진정한 의미에서의 지능이 될 수 없기 때문이다. 하지만 이와 같은 철학적 물음을 유보하고 생각하면 인간의 지능을 능가하는 컴퓨터의 지능은 이미 우리의 삶 곳곳에 뿌리를 내리고 있다. pp 102

  7. 레빗의 사레는 우리에게 두 가지 사실을 알려주고 있다. 하나는 주어진 질문에 대한 답을 구하기 위해서 분석되는 데이터의 량은 많을수록 좋다는 것이다. 그리고 다른 하나는 방대한 데이터 속에 존재하는 인과관계가 연결구조는 근시안적인 직관과 추측이 아니라 다양한 각도에서 데이터를 치밀하게 분석할 때 종종 의외의 방식으로 모습을 드러낸다는 사실이다. pp 104

  8. 소프트웨어 사이에 존재하는 의존도를 최대한 낮추고 다양한 소프트웨어가 서로에게 독립적인 서비스로 존재할 수 있도록 시스템을 설계하는 것을 의미하는 서비스 중심 아키텍처(SOA)를 생각해보자. pp 123

  9. … 애자일의 원리가 가슴을 때리는 명구로 다가올 것이다.

  10. 정상적으로 동작하는 소프트웨어를 몇 주에서 몇 달에 이르는 간격으로 자주 전달하라. 간격은 짧을수록 좋다.

  11. 비즈니스와 관련된 사람과 개발자 프로젝트 기간 동안 반드시 메일 함께 일을 해야 한다. 동기부여가 확실한 개인을 중심으로 프로젝트를 구축하라. 그런 개인에게 필요한 환경과 자원을 해주고 그들이 업무를 완수할 것이라는 확신을 가져라.

  12. 개발팀 사이에서 혹은 개발팀 내부에서 정보를 전달하는 가장 확실하고 효과적인 방법은 얼굴을 마주보고 나누는 대화이다.

  13. 정상적으로 동작하는 소프트웨어가 프로젝트의 진척을 재는 가장 정확한 척도이다. 애자일 프로세스는 지원이 가능한 개발을 장려한다. 후원자, 개발자, 그리고 사용자는 일정한 호흡을 무한히 유지할 수 있는 능력을 갖추어야 한다.

  14. 기술적인 탐월함과 좋은 디자인에 대한 지속적인 관심은 민첩성(agility)을 강화한다. 이루어지지 않아도 되는 일의 분량을 극대화하는 기술을 의미하는 단순성(simplicity)은 기본이다.

  15. 최선의 아키텍처, 요규사항, 그리고 디자인은 자발적으로 조직된(self-organizing)팀으로부터 나온다.

  16. 팀은 일정한 간격으로 더 효율적인 수 있는 방법을 고찰하고, 스스로의 행동을 조정하는 과정을 밟아야 한다.

Written on March 8, 2012