메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

Nature of Code: 자연계 법칙을 디지털 세계로 옮기는 컴퓨터 프로그래밍 전략

한빛미디어

번역서

절판

  • 저자 : 다니엘 쉬프만
  • 번역 : 윤인성
  • 출간 : 2015-04-27
  • 페이지 : 620 쪽
  • ISBN : 9788968481901
  • 물류코드 :2190
  • 초급 초중급 중급 중고급 고급
5점 (1명)
좋아요 : 33

자연계의 법칙을 소스 코드로 풀어내는 데 필요한 개념을 이해하자


로봇의 동작, 게임 캐릭터의 움직임은 대부분 우리가 배웠던 자연계 법칙을 토대로 구현한 것이다. 그런데 이를 배울 때는 보통 딱딱한 법칙을 암기한 후 무미건조한 코드를 작성하고 실행 결과를 반복해서 살펴보게 되는 편이다. 그래서 알고리즘 구성과 코딩을 자연스럽게 이해하면서 프로그래밍을 배우려는 욕구가 많다.

이 책은 벡터, 진동, 물리 라이브러리, 프랙털, 신경망 등 자연계 법칙을 재밌고 쉽게 구현하면서 프로그래밍을 이해할 수 있도록 구성되어 있다. 이를 위해 비전공자도 비교적 가볍게 접근할 수 있고, 실행 결과를 바로바로 확인할 수 있는 프로그래밍 언어인 프로세싱(Processing)을 사용한다. 실력 있는 프로그래머라면 코딩 실력도 훌륭하지만 위에서 설명한 자연계 법칙의 기본이 되는 물리나 수학 지식에도 강하다. 그리고 실생활의 여러 가지 현상을 코딩해보려는 습관을 지닌다. 이러한 습관이 몸에 익으면서 실력 있는 프로그래머로 성장하는 것이다. 이 책은 이러한 관점에서 프로그래머로 성장할 수 있는 기초를 다지게 한다.

Tech DIY를 추구하는 메이커나 미디어 아티스트 등의 프로그래밍 비전공자, 자연계 법칙을 기초로 시뮬레이션을 구성하려는 응용과학 연구원, 기초 수학이나 물리에 약한 게임 프로그래머에게 많은 도움이 될 것이다.

 

 

이 책의 특징과 장점

  • 개념 소개: 벡터, 힘, 진동, 프랙털 등 실생활에서 벌어지는 자연 현상을 분석해서 정리하는 과정을 다룬다.
  • 코드 구현: 설명한 개념을 실제 코드로 구현해본다. 그리고 어떤 응용 효과가 나오는지를 주석 형태로 설명해준다.
  • 결과 확인: 구현된 코드의 결과를 보여준다. 이 책 홈페이지에서는 실제 실행 결과를 눈으로 확인할 수 있다.
  • 연습문제 풀이: 지금까지 배운 개념의 응용 성격인 연습문제를 제시한다.

 

【어떤 독자를 위한 책인가?】

  • 실생활에 필요한 창작물을 만드는 미디어 아티스트
  • 실무에 막 뛰어든 초/중급 게임 프로그래머
  • 아두이노 스케치 구성이 약하다고 생각하는 메이커

 

다니엘 쉬프만 저자

다니엘 쉬프만

뉴욕대(NYU) 아트 스쿨인 Tisch School of the Arts에서 ITP(Interactive Telecommunications Program)의 교수로 재직 중이다. 볼티모어 출생으로, 예일대에서 수학과 철학 학사 학위를 수료했고 ITP에서 석사 과정을 마쳤다. 케이시 리아스와 벤 프라이가 만든 오픈 소스 프로그래밍 언어인 프로세싱(Processing)에 관한 지침서와 예제, 라이브러리 등을 개발하고 있다. 『프로세싱, 날개를 달다』 (비제이퍼블릭, 2011)의 저자이자, 각광받기 시작한 극작가들의 작품을 소개하고 발전시키기 위한 Page Seventy Three Production, Inc.라는 비영리조직의 설립자이기도 하다.

윤인성 역자

윤인성

출근하는 것이 싫어서 책을 집필하기 시작했습니다. 현재 직업 특성상 집에서 나갈 이유가 별로 없다는 것에 굉장히 만족하고 있습니다. 홍차와 커피를 좋아하며 기타, 가야금, 그림 그리기, 스컬핑 등이 취미입니다. 책의 소개말을 쓰는 시점을 기준으로 해서 이 책은 73번째 도서입니다.

저서로는 『자바스크립트 프로그래밍 입문(2판)』(한빛아카데미, 2022), 『C# 프로그래밍(2판)』(한빛아카데미, 2021)과 『혼자 공부하는 파이썬(개정판)』(한빛미디어, 2023) 등이 있습니다. 역서로는 『내 코드가 그렇게 이상한가요?』(인사이트, 2023), 『이펙티브 코틀린(인사이트, 2022)』 등이 있습니다.

 

CHAPTER 0 소개
    0.1 Random Walks
    0.2 Walker 클래스
    0.3 확률과 비균등 분포
    0.4 임의 숫자의 정규 분포
    0.5 임의 숫자의 사용자 정의 분포
    0.6 펄린 노이즈
    0.7 이어지는 내용


CHAPTER 1 벡터
    1.1 벡터 기본
    1.2 프로세싱 프로그래밍과 벡터
    1.3 벡터 덧셈
    1.4 벡터와 관련된 수학
    1.5 벡터 크기
    1.6 벡터 정규화
    1.7 속도와 벡터를 활용한 이동
    1.8 가속도와 벡터를 사용한 이동
    1.9 static 함수
    1.10 가속도와 상호작용


CHAPTER 2 힘
    2.1 힘과 뉴턴의 운동 법칙
    2.2 힘과 프로세싱: 뉴턴의 운동 2법칙
    2.3 힘 축적
    2.4 질량
    2.5 힘 생성
    2.6 중력 모방
    2.7 마찰력
    2.8 공기 저항과 유체 저항
    2.9 중력 끌림
    2.10 모든 객체의 만유인력


CHAPTER 3 진동
    3.1 각도
    3.2 회전 운동
    3.3 삼각법
    3.4 이동 방향의 목적지
    3.5 극 좌표계와 직교 좌표계
    3.6 진동의 진폭과 주기
    3.7 각속도와 진동
    3.8 파동
    3.9 삼각법과 힘: 진자
    3.10 용수철 힘


CHAPTER 4 파티클 시스템
    4.1 파티클 시스템을 사용하는 이유
    4.2 입자 하나
    4.3 ArrayList 클래스
    4.4 ParticleSystem 클래스
    4.5 여러 개의 파티클 시스템
    4.6 상속과 다형성 소개
    4.7 상속 기본
    4.8 상속을 활용한 입자
    4.9 다형성 기본
    4.10 다형성을 사용한 파티클 시스템
    4.11 힘을 활용하는 파티클 시스템
    4.12 서로 밀어내는 파티클 시스템
    4.13 이미지 텍스처와 가산 합성


CHAPTER 5 물리 엔진 라이브러리
    5.1 Box2D 물리 엔진의 의미와 유용하게 사용하는 법
    5.2 프로세싱 전용 Box2D 설치
    5.3 Box2D 기본
    5.4 Box2D 월드 생성
    5.5 Box2D 보디 생성
    5.6 보디, 셰이프, 픽스처
    5.7 Box2D와 프로세싱
    5.8 직선 경계와 고정 객체
    5.9 곡선 경계
    5.10 복잡한 모양
    5.11 Box2D Joint 객체
    5.12 힘의 필요성
    5.13 충돌 이벤트
    5.14 잠시 휴식 - 적분법
    5.15 toxiclib의 VerletPhysics
    5.16 toxiclibs의 파티클과 스프링
    5.17 정리: 반응하는 실
    5.18 연결 1: 실
    5.19 연결 2: 힘 지향 그래프
    5.20 끌어당김과 밀어냄


CHAPTER 6 자율 에이전트
    6.1 내부로부터의 힘
    6.2 차량과 조향
    6.3 조향력
    6.4 도착 행동
    6.5 원하는 속도
    6.6 흐름장 추적
    6.7 내적
    6.8 경로 추적
    6.9 여러 개의 선분이 있는 경로 추적
    6.10 복잡계
    6.11 군집 활동
    6.12 행동 합성
    6.13 군집
    6.14 알고리즘의 효율성
    6.15 추가적인 최적화 방법


CHAPTER 7 세포 오토마타
    7.1 세포 오토마톤이란?
    7.2 기본적인 세포 오토마타
    7.3 기본적인 울프램 CA 프로그래밍
    7.4 기본적인 CA 그리기
    7.5 울프램 분류
    7.6 생명 게임
    7.7 생명 게임 프로그래밍
    7.8 객체 지향 세포
    7.9 고전적 CA의 변형 형태


CHAPTER 8 프랙털
    8.1 프랙털이란?
    8.2 재귀
    8.3 재귀 함수를 사용한 칸토어 집합
    8.4 코크 곡선과 ArrayList를 활용한 기술
    8.5 나뭇가지
    8.6 L 시스템


CHAPTER 9 진화
    9.1 유전 알고리즘: 실제 자연에서의 진화
    9.2 유전 알고리즘을 사용하는 이유
    9.3 다윈의 자연 선택
    9.4 유전 알고리즘의 첫 번째 요소: 집단 생성
    9.5 유전 알고리즘의 두 번째 요소: 선택
    9.6 유전 알고리즘의 세 번째 요소: 생식
    9.7 집단을 생성하는 코드
    9.8 유전 알고리즘: 정리
    9.9 유전 알고리즘: 적용
    9.10 진화하는 힘: 스마트 로켓
    9.11 스마트 로켓: 정리
    9.12 대화형 선택
    9.13 생태계 시뮬레이션


CHAPTER 10 뉴럴 네트워크
    10.1 인공 뉴럴 네트워크: 간단한 소개와 적용 사례
    10.2 퍼셉트론
    10.3 퍼셉트론을 사용한 간단한 패턴 인식
    10.4 퍼셉트론 구현
    10.5 운전하는 퍼셉트론
    10.6 네트워크의 의미
    10.7 뉴럴 네트워크 그림
    10.8 피드포워드 애니메이션
    맺는 말


부록 A 프로세싱 기초
    A.1 설치
    A.2 실행
    A.3 프로세싱 기본
    A.4 추가 내용


부록 B 참고문헌
    B.1 서적
    B.2 참고 문서와 기사

모든 일에는 속도보다 방향성이 중요하다고 생각한다.

비록 느리게 가더라도, 올바른 방향으로 갈 수만 있다면 오래도록 방향성을 고민하고 들인 많은 시간은 그만큼 가치가 있다고 생각한다.

요즘은 많은 취업준비생과 현업에서 일하는 사람들이 융합인재, 통섭적인재를 지향하며 프로그래밍에 많은 관심을 가지고 있다.많은 사람들이 저마다의 가치를 높이고자 노력하는 건 긍정적인 사회적 현상이라고 생각한다.

단, 목적을 이루기 위한 수단으로서만 프로그래밍을 접하는 게 아니라 조금 더 근본적으로 논리적인 사고를 요구하는 프로그래밍을 공부하는 동기와 재미를 깨닫고 사물의 원리를 깨달아가는 지식인으로서 성장해나가길 기원한다.

이 책을 읽고자 집어들었을 때, 가장 먼저 든 생각은 "아 이 책은 컴퓨터가 이해하는 프로그래밍이 아니라 사람이 이해할 수 있는 프로그래밍을 할 수 있게 도와줄 수 있는 책일 것 같다..."라는 생각이다.




어려운 코드를 어렵게, 컴퓨터가 이해할 수 있는 코드를 컴퓨터만 이해할 수 있게 코딩하는 건 오히려 쉬운 일이라고 생각합한다.

정말 어려운 것은 어려운 코드를 쉽게, 컴퓨터가 이해할 수 있는 코드를 사람도 이해할 수 있게 코딩하는 게 정말 어렵고 고난한 일이라고 생각한다.




이 책을 통해 사람을 생각하고, 사람이 이해하기 쉬운 코드를 만드는 사람들이 많아질 거라고 생각하고 그런 사람들에게 많은 도움을 줄 것이라고 확신한다.




이 책은 11개의 장과 2개의 부록으로 구성되어 있다.

1번째 장은 프로세스를 사용한 프로그래밍이 어렵다고 느껴지시는 분들을 위해 기본적인 수학적 사고를 소개하는 장이다.

2번째 장부터 6장까지는 물리와 관련된 기본적인 내용을 설명하고 있으며, 2번째 장에서는 벡터라는 요소에 대해 설명하고 있다.

3번째 장에서는 힘과 가속도의 관계를 설명하고 있다.

4번째 장에서는 삼각법 혹은 삼각형의 수학이라고 하는 것을 활용한 사인 함수와 코사인 함수를 살펴보며 진동에 관해 설명하고 있다.

5번째 장에서는 컴퓨터 그래픽에서 일반적으로 사용되는 파티클 시스템이라는 기술을 코드로 표현하는 방법에 대해 설명하고 있다.

6번째 장에서는 지금까지 설명한 각각의 물리 엔진을 살펴보며 장 단점을 알아보고 왜 사용해야 하는지 알아보도록 한다.

7번째 장부터는 조금 내용이 바뀐다.

6장까지가 움직인이나 물리현상을 구현하는 무생물적 방법을 살펴보았다면, 7장에서부터는 객체 스스로가 내부에서 어떤 행동을 할 지 결정하는 객체에 대해 설명한다. 이 부분이 많이 이해하기 힘들었지만 굉장히 흥미있는 부분이었다.

8장부터는 시스템과 알고리즘에 관한 이야기로써, 8장은 세포 오토마타라는 새로운 용어에 대해 설명하고 있다.

9장에서는 기하학과 관련있는 프랙털 이라는 용어에 대해 설명하고 있다.

10장에서는 변수에 대해 설명하며, 유전 알고리즘에 대해 관련성있게 설명하고 있다.

마지막 11장에서는 객체가 어떻게 학습하고 어떻게 학습한 내용을 기반으로 의사결정을 하는지 인간의 뇌(뉴럴 네트워크)와 빗대어 설명하고 있다.




자연현상을 프로그래밍으로 코드화하고 표현하는 일련의 작업들이 다소 어색하고 어떤 의미가 있을 지 계속 갸우뚱하게 하면서도 신기한 내용의 연속이었다.

또한 제가 프로그래밍의 만들어지게 된 취지나 자연현상의 기원에 대해 궁금증을 갖게 된 일은 기대하지 않았지만 상당히 고무적인 성과라고 생각한다.




부록에서는 "프로세싱"이라고 하는 책에 나온 이론들을 실습해 볼 수 있는 프로그램을 설치하는 방법과 간단한 사용법이 가이드되어 있어서 눈으로 읽고 머리로 떠올리는 것 뿐만 아니라, 손으로 입력하고 코드로 출력되는 실습을 병행할 수 있어서 좋았다.




비록 이 책이 많이 어렵고, 추상적인 자연현상을 정적인 코드로 표현하는 데는 한계가 있다고 생각한다.

하지만 전공자 뿐 아니라 비전공자에게 있어 시뮬레이션을 구상하고, 수학이나 물리법칙을 가지고 구현하고 실행결과를 반복해서 원리를 깨닫게 하는 방법은 어떤 방법보다 논리적이고 효율적으로 연구에 몰두할 수 있게 기반을 만들어줄 수 있다고 생각한다.




방향성을 제대로 세우기 위해 책을 집어들었지만, 원리를 꺠우치는 재미와 자연현상을 탐구하고 싶은 욕구가 생기게 해 준 이 책이 무척이나 고맙게 느껴진다.




깊지 않은 이해와 짧은 리뷰시간이었지만 앞으로도 반복과 결과분석을 통해 어제보다 조금 더 나은 내일을 꿈꾸며 공부해보고자 한다.

사실 어떻게 보면 가장 단순한 (프로그래밍)책일지도 모르는 이 책처럼 저도 언젠가는 가장 단순할 지 모르지만 초보자들의 마음을 관통하는 그런 책을 쓰고 싶다.

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
Nature of Code: 자연계 법칙을 디지털 세계로 옮기는 컴퓨터 프로그래밍 전략
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
Nature of Code: 자연계 법칙을 디지털 세계로 옮기는 컴퓨터 프로그래밍 전략
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
Nature of Code: 자연계 법칙을 디지털 세계로 옮기는 컴퓨터 프로그래밍 전략
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실