Books

앵버박사 2017. 9. 12. 10:24



서론

  개발은 상상을 현실화하는 힘이다. 내 상상은 현실에 기반하고 있기 때문에 우선은 현실 세계를 모방할 수 있어야 한다. 그렇기에 선택한 책이 바로 Nature of Code : 자연계 법칙을 디지털 세계로 옮기는 컴퓨터 프로그래밍 전략 이다. 이 책을 처음 발견하고 목차를 보는 순간 마음이 즐거웠다. 이런저런 재밌는 일들을 해볼 수 있을 것 같은 기대감에 가득했다. 위에서 책을 선택한 이유로 그럴듯한 말을 꺼내 놓았지만 사실은 그냥 재밌어 보였기 때문인지도 모르겠다.


구성

  이 책은 자연계 구현이라는 큰 주제 아래 물체, 생물, 지능의 세 가지 파트로 나뉘어 있다(챕터 1~5 물체 시뮬레이션, 챕터 6~8 생물 시뮬레이션, 챕터 9~10 지능).

  처음 챕터 0의 제목이 소개라고는 하지만 자연계에서 중요한 임의성에 대한 공부를 한다. 확률분포, 정규분포, 펄린노이즈 등 수학적 개념을 실제 코드로 적용해보며 그동안 필요성을 느끼지 못하고 막연하게 공부했던 부분에 대한 인식이 좋아졌다. 1장은 모든 구현의 기본이되는 벡터라는 수학적 개념을 배우고 코드로 구현해본다. 특히 가장 핵심이 되는 오일러 적분을 통해 가속도로 속도를 구하고 속도로 위치를 구해 움직이는 물체를 만들어 본다. 2장은 뉴턴의 운동 법칙을 배우고 이를 실제로 코드로 적용한다. 3장의 주제는 진동으로 각도와 삼각법을 공부하고 진자운동, 용수철 등 여러 예제를 시뮬레이션 해본다. 4장은 파티클 시스템으로 연기, 불꽃 등 형체가 없는 입자들을 표현하는 방법을 배운다. 5장은 다른 사람이 만든 물리엔진의 사용법을 배워보지만 직접 하나하나 만드는 것 보다는 재미가 없다. 6장은 생물의 특징인 주변 환경을 인식하여 스스로 움직이는 방향을 결정하는 자율 에이전트에 대해 배우며, 7장은 세포라는 0과 1의 상태를 가지는 객체의 상태를 변화시켜 다양한 패턴을 생성해내는 세포 오토마타를, 8장에서는 자연계에 등장하는 다양한 모양을 만들 수 있는 프랙털을 배운다. 9장은 개체를 점점 진화시켜 발전된 방향으로 이끄는 유전 알고리즘을, 10장은 최근에 핫한 딥러닝의 기본인 뉴럴네트워크를 배우며 마무리된다.

  책의 내용을 쭉 나열했는데 아무것도 보지 않고 술술 써내려갔다. 아무래도 친구들을 상대로 강의도하며 여러번 복습한 효과가 있는 듯 하다.


난이도

  처음 목차에 나오는 키워드만 보았을 때는 넘사벽이라는 느낌을 받았지만 리뷰를 읽어보니 어려운 주제를 쉽게 풀어썼다는 내용이 많아 도전하게 됐다. 실제로 경험해보니 생각했던 것 만큼 어렵지는 않았다.


결론

  나는 이 책의 예제를 베이스 코드로 하여 나만의 물리엔진으로 발전시켜나갈 계획이다. 이렇게 예제로 시작해서 점차 발전시켜나가면 막연히 어려워만 보였던 주제를 내것으로 만들기에 효과적이다. 앞으로도 다른 책들을 통해서 여러 엔진을 개발해 볼 생각이다.


별점 ★★★★★