시리즈명: 날개를 달다 시리즈 001
이 책의 독특한 방식의 설명은 그래픽 & 웹 디자이너, 아티스트, 그리고 일러스트레이터 모두가 프로세싱 프로그래밍을 바로 시작할 수 있도록 프로그래밍 언어에 대한 기초적인 개념을 알려주며, 선별되어 선택된 고급 기술들에 대해서도 세심하게 설명해 주고 있다.
ITP(Tisch School of the Arts, New York University)의 교수인 다니엘 쉬프만(Daniel Shiffman)이 컴퓨터 그래픽스 세계에서 무엇이 가능한지에 대한 여러분의 생각을 확장시켜 줄 프로그래밍의 기본에 대해 설명한다. 오픈소스 무료 소프트웨어의 한계를 뛰어 넘는 효과를 경험함으로써 여러분 자신들만의 디자인 도구를 충분히 만들 수 있게 될 것이다.
이 책은 어떤 책인가?
이 책은 이야기로 꾸며진다. 기존의 다른 소프트웨어 툴들을 사용하지 않으면서 컴퓨터 기초를 이해할 수 있도록 하고, 자기 자신만의 코드를 쓰고, 자신만의 미디어를 창작하게끔 만드는 어떤 해방감(liberation)에 대한 이야기다. 이 이야기는 단지 컴퓨터 과학자와 공학자만을 위한 이야기가 아니다. 바로 여러분을 위한 이야기다.
그렇다면 이 책은 누구를 위한 책인가?
이 책은 초보자를 대상으로 쓰인 책이다. 만일 여러분이 살면서 단 한 줄의 코드도 작성해 본 적이 없다면 바로 이 책에 적합한 사람이라고 할 수 있겠다. 이 책의 처음부터 9장까지는 아무런 기초지식을 필요로 하지 않는 상태에서도 쉽게 접근할 수 있도록 프로그래밍의 기초를 하나하나씩 천천히 설명하고 있다.
이 책은 여러분에게 컴퓨터를 작동하기 위한 기초지식─컴퓨터를 켜고, 인터넷을 사용하고, 프로그램을 시작할 수 있을 정도─외에 어떤 다른 배경지식도 요구하지 않는다. 이 책은 프로세싱(processing)을 기본 개발 툴로 사용하고 있으므로, 주로 그래픽디자인, 회화, 조각, 건축, 영상, 비디오, 일러스트레이션, 웹 디자인 등과 같은 시각 분야를 공부하거나 그와 관련된 일을 하는 사람들에게 특히 유용하다.
만일 여러분이 이와 같은 (적어도 컴퓨터를 사용하는) 분야에 종사하고 있다면 포토샵(Photoshop), 일러스트레이터(Illustrator), 오토캐드(AutoCAD), 마야(Maya), 애프터 이펙트(After Effects)와 같은 소프트웨어를 한 가지 이상 사용하는 데 익숙할 것이다. 이 책은 기존의 이미 만들어진 소프트웨어들로부터 최소한 일부분이라도 여러분을 해방시키는 데 중점을 두고 있다.
“만약 내가 기존의 툴들을 사용하지 않고 스스로 직접 작업할 수 있다면 무엇을 만들 수 있고, 무엇을 다자인할 수 있을까?”
만일 이와 같은 질문을 한 번이라도 해 본 경험이 있다면, 이 책은 바로 여러분을 위한 것이다. 프로그래밍을 좀 해 봤고 프로세싱이라는 개발 툴을 배우는 것에 관심이 있다면, 이 책은 여러분에게 매우 유용할 것이다. 이 책의 전반부에서는 프로그래밍 기초에 대해서 빠르게(그리고 핵심적으로) 설명하고 후반부에서는 난이도가 있는 주제들을 다룬다.
웹 사이트
이 책의 웹 사이트는 http://www.learningprocessing.com이다. 이곳에서 여러분은 다음과 같은 것을 찾게 될 것이다:
- 모든 예제의 정답
- 모든 코드의 내려 받을 수 있는 버전
- 예제의 온라인 버전 (온라인에서 써 넣을 수 있다.)
- 책 안의 모든 오류의 수정본
- 책의 내용에 대한 추가 팁
- 질의응답 페이지
이 책에 사용된 색상과 영상은 흑백에 멈춰 있는 스크린샷이지만, 웹 사이트에서는 여러분이 읽는 대로 여러분의 컴퓨터에 다운로드할 수 있을 뿐 아니라 브라우저에서 열어 그것들이 실제로 움직이는 것을 볼 수도 있다.
이 책의 웹 사이트는 방대한 자료가 있는 공식적인 프로세싱 웹 사이트인 http://www.processing.org를 대신하지는 못한다. 온라인 사이트에서는 프로세싱의 레퍼런스 및 많은 예제들과 공개 토론 등을 살펴볼 수가 있다.
독자대상
초중급
저자소개
다니엘 쉬프만(Daniel Shiffman)
뉴욕대(NYU) 아트스쿨인 Tisch School of the Arts에서 ITP(Interactive Telecommunications Program)의 교수로 재직중이다. 볼티모어 출생으로, 예일대에서 수학과 철학 학사 학위를 수료했고 ITP에서 석사 과정을 마쳤다. 《프로세싱, 날개를 달다》(Learning Processing)의 저자이자, 부각 받는 극작가들의 작품을 소개하고 발전시키기 위한 Page Seventy Three Production, Inc.라는 비영리조직의 설립자다.
역자소개
랜덤웍스
건축, 공연, 공공예술, 그리고 미디어아트/공예를 위한 데이터 비주얼라이징 애플리케이션을 디자인/개발하고 교육하는 크리에이티브 스튜디오다. 생활, 도시, 그리고 환경 데이터를 시각화하는 과정을 통해 인식, 행동의 변화를 추구하는 다양한 미디어 예술품들을 제작하고, 미디어 디자인/예술의 사회적 역할에 대한 질문과 생각을 통해 다양한 교육 활동도 하고 있다.
목차
역자의 글
감사의 글
책 소개
Lesson 1 시작하기
- Chapter 1 픽셀
- Chapter 2 프로세싱
- Chapter 3 인터랙션
Lesson 2 알아야 할 모든 것
- Chapter 4 변수
- Chapter 5 조건문
- Chapter 6 반복
Lesson 3 구조
- Chapter 7 함수
- Chapter 8 객체
Lesson 4 똑같은 것
- Chapter 9 배열
Lesson 5 모두 함께 뒤섞기
- Chapter 10 알고리즘
- Chapter 11 디버깅
- Chapter 12 라이브러리
Lesson 6 세계는 여러분을 중심으로 돌아간다
- Chapter 13 수학
- Chapter 14 삼차원에서의 이동과 회전
Lesson 7 현미경으로 픽셀 관찰하기
- Chapter 15 이미지
- Chapter 16 비디오
Lesson 8 외부 입력 데이터
- Chapter 17 문자
- Chapter 18 데이터 입력
- Chapter 19 데이터 스트림
Lesson 9 소리를 내다
- Chapter 20 사운드
- Chapter 21 내보내기
Lesson 10 프로세싱, 그 이후는?
- Chapter 22 고급 객체지향 프로그래밍
- Chapter 23 자바
부록 일반적인 에러들
프로세싱이란 과연 무엇인가?
프로세싱은 로고(Logo)와 숫자에 의한 디자인(Design by numbers)의 다음 단계로, 2001년 MIT의 미디어랩(Massachusetts Institute of Technology Media Lab)에 있는 ‘미학과 계산(Aesthetics and Computation)’ 이라는 연구소에서 탄생했다. 이 프로젝트는 John Maeda의 학생이었던 Casey Reas와 Benjamin Fry가 개발한 오픈 소스 프로그램이다.
“프로세싱은 프로그램 이미지, 애니메이션, 사운드 인터랙션을 원하는 사람들을 위한 오픈 소스 프로그램 언어이자 환경이다. 이것은 학생, 예술가, 디자이너, 건축가, 연구원 및 무언가를 만들어 내는 것을 취미로 하는 사람들을 위한 프로그램이다. 프로세싱은 시각적 컨셉을 주로 다루는 컴퓨터 프로그래밍의 기초를 가르치는 소프트웨어 스케치북으로서, 그리고 전문가들이 그들의 작업을 할 수 있게 해주는 생산 툴로서 개발되었다. 프로세싱은 동일한 영역의 다른 상용 소프트웨어 툴들의 대안으로 예술가와 디자이너를 위해 개발되었다.” ─ www.processing.org
요약하자면, 프로세싱은 정말 대단한 프로그램이다. 첫째, 프로세싱은 무료이다. 어떠한 비용도 들지 않는다. 둘째, 프로세싱은 자바 프로그램 언어를 바탕으로 만들어졌기 때문에(이것은 이 책의 마지막 장에서 자세히 설명한다) 로고(Logo)나 숫자에 의한 디자인(Design by Numbers)에서 발생하는 제약이 없다. 프로세싱으로 할 수 없는 일은 거의 없다. 마지막으로, 프로세싱은 오픈 소스이다. 지금 언급한 내용 대부분이 이 책에서 다루는 중요한 내용은 아니다. 하지만 여러분은 지금 막 프로세싱을 시작한 단계에 있기 때문에, 이러한 개발 배경과 원리를 먼저 알아 두는 것은 매우 중요하다. 이러한 프로세싱의 이점 덕분에 개발자 커뮤니티와 교사 및 예술가들은 서로의 작업을 공유하고 의견을 제시해 가며 프로세싱 기능을 넓혀 갈 수 있다.
웹 사이트 processing.org를 살펴보면 활기차고 창의적인 커뮤니티들이 얼마나 왕성하게 활동하고 있는지 잘 알 수 있다. 커뮤니티의 열린 공간을 통해 초보자이든 전문가이든 간에 모두의 아이디어와 작품들의 코드가 서로 공유되고 있다. 이 웹 사이트에는 프로세싱을 시작하기 위한 방대한 예제들과 뛰어난 참고자료가 탑재되어 있지만, 맹초보를 위한 단계적인 자습서로서는 약간 부족한 감이 없지 않아 있다. 이 책은 프로그래밍의 기초뿐만 아니라 몇몇 고급 주제들에 대해 살펴봄으로써 여러분이 이러한 커뮤니티에 함께 참여하고 기여하는 것을 바로 시작할 수 있게 해 줄 것이다.
비록 프로세싱 없이는 이 책이 존재할 수 없었겠지만, 이 책은 프로세싱만을 위한 책이 아니다. 이 책의 목적은 여러분에게 프로그래밍을 가르치는 것이다. 단지 프로그래밍을 배우는 도구로서 프로세싱을 선택한 것뿐이다. 이 책의 근본 목적은 여러분이 다른 프로그래밍 언어 및 환경을 탐구하고 그것들을 응용하여 여러분만의 디지털 방식으로 발전해 나가도록 하는 것이다.
나는 ____을 배워야 한다?
어떤 언어를 배울까? 어떤 언어를 배우면 내가 하고 싶은 것을 가장 쉽고 빠르게 해결할 수 있을까? 이것은 새로운 언어를 배우고자 시작할 때 아마 모두가 고심하는 문제일 것이다. 특히 주변에서 계속 얘기하는, 쉽고 빠르며, 피씨나 매킨토시 등의 모든 환경에서 사용 가능하며, 다른 개발 언어로는 하루가 걸릴 일도 단 5분 만에 끝낼수 있는, 세상에 존재하지 않을 것 같은 놀라운 언어와 개발 환경에 대해서 당신은 끊임없이 듣게 될 것이고, 결정하기가 점점 더 어려워져 갈팡질팡 하는 과정을 겪게 될 것이다.
그러나 여러분의 문제를 전부 해결하는 마술 언어는 존재하지 않는다. 어떤 언어도 완벽하지 않고, 프로세싱 또한 제한과 결함이 있기 마련이다. 그러나 프로세싱은 좋은 출발점이 될 수 있다. 이 책이 여러분에게 프로그램의 기본을 가르쳐 줄 것이고, 여러분은 프로세싱, 자바, 액션스크립트(Actionscript), C언어, PHP, 그 외 또 다른 언어를 사용하든 상관없이 이를 적용할 수 있다. 어떤 프로젝트에는 특정한 언어 및 환경이 더 적합하다는 것은 사실이다. 그러나 프로세싱은 다양한 장르, 특히 미디어와 관련된 화면 출력을 기반으로 하는 일에 더없이 좋다. 프로세싱이 단순한 작업에만 사용된다는 것은 흔한 오해일 뿐, 사실이 아니다. 사람들(나를 포함한)은 그들의 프로젝트 첫날부터 마지막 날까지 프로세싱을 사용한다. 프로세싱은 웹 애플리케이션, 박물관 및 갤러리, 공공장소의 전시 및 설치에 사용된다. 실제로 최근에, 나는 프로세싱을 이용해서 IAC 뉴욕지사의 로비에 있는 12피트×120 피트 크기의 벽에 실시간으로 영상 콘텐츠를 전시할 수 있는 그래픽 시스템인 ‘비디오 월(http://www.mostpixelsever.com)’을 만들었다.
프로세싱은 실제 작업을 하는 데 유용할 뿐 아니라 배우는 데도 단연 탁월한 프로그램이다. 이것은 무료인 오픈 소스이며 간단하다. 프로세싱은 시각적이고 재미있다. 프로세싱은 객체지향적이다(이것에 대해서는 나중에 배울 것이다). 그리고 프로세싱은 매킨토시, 피씨 및 리눅스 기반의 모든 환경에서 작동한다. 따라서 나는 여러분에게 프로세싱을 배우고 사용하는 것에 대해 더 이상 걱정하지 말라고 말하고 싶다. 왜냐하면 나는 이 책이 여러분을 원하는 위치까지 올려 놓을 것이라고 확신한다.
이 책에 직접 써 보도록 하자!
여러분이 소설가 아니면 시나리오 작가라고 생각해 보자. 컴퓨터나 타이프라이터 앞에 앉아 타자를 치는 시간만이 여러분이 글을 쓰는 데 소요되는 유일한 시간일까? 아마 아닐 것이다. 아이디어는 밤에 침대에 누웠을 때 당신의 머릿속에서 소용돌이칠 것이다. 어쩌면 당신은 공원 벤치에 앉아 있거나 비둘기에게 먹이를 주는 때에도 수많은 공상을 하고 있을 것이다. 그리고 어느 늦은 밤, 술집에서 머릿속에 떠오른 훌륭한 계획을 냅킨 위에 끄적거리는 자신을 발견하게 될 수도 있다. 소프트웨어를 짜고 프로그래밍을 하고 코드를 작성하는 것도 이와 다르지 않다. 그러나 일 자체가 본질적으로 컴퓨터에 묶이기 때문에 우리는 다음과 같은 중요한 일을 종종 망각하기도 한다. 여러분은 컴퓨터에서 벗어나, 그리고 책상 앞에서 벗어나, 생각하는 시간을 가져야만 한다. 논리적으로 생각할 수 있는 시간을 찾아야 한다. 그리고 아이디어를 생각해 보아야 한다. 개인적으로, 나는 조깅을 하는 동안 프로그래밍에 대한 생각을 정리한다.
물론, 컴퓨터에 실제로 타이핑을 하는 것도 매우 중요하다. 내 말은, 여러분이 마치 한량인 것처럼 한가하게 때를 즐기라는 뜻이 아니다. 여러분이 생각하는 프로그래밍에 대한 기초 구조 작업이 항상 컴퓨터 앞에서만 이루어지는 것이 아니므로 가끔은 그곳에서 빠져나올 필요가 있다는 것이다. 여러분이 컴퓨터 키보드를 떠나서 이 책에 직접 무언가를 써 보는 것은 쓰기를 통해 코드를 생각하는 연습을 해 볼 수 있는 때이다. 이 책에는 많은 ‘빈칸 채우기’ 예제들이 있다(이 빈칸의 모든 답은 책의 웹 사이트인 http://www.learningprocessing.com에서 확인할 수 있다). 이 페이지들을 적극적으로 활용하자! 여러분의 아이디어가 샘솟을 때 노트에 적어라. 컴퓨터 관련 아이디어를 위해 업무노트나 스케치북과 같은 책을 만들어라(개인 스케치북 사용은 필수!).
나는 여러분이 예정된 시간의 반은 컴퓨터를 떠나서 이 책을 읽는 데 사용하고, 나머지 절반은 예제 코드들을 따라 컴퓨터로 연습해 보는 데 사용하길 제안한다.
이 책을 어떻게 읽어야 하는가?
이 책은 1장, 2장, 3장 등 순차적으로 읽는 것이 제일 좋다. 그렇게 여러분이 9장까지 모두 끝내게 되면, 그 다음부터는 이 책을 좀 더 편하게 읽을 수 있을 것이다. 하지만 처음에는 우선 순서대로 일단 끝내는 것이 매우 중요하다. 이 책은 여러분에게 1차원 방식으로 프로그래밍을 가르치도록 고안되었다. 고급 수준의 책들은 책 전체를 통해 여기저기, 앞뒤로 조각들을 연결해 다 읽었을 때 효과가 더 좋을 수도 있지만, 이 책은 처음에서 중간까지는 하나의 예제를 만들고 그 후엔 앞선 예제의 특징을 발전시켜 나가는 것에 초점을 두고 있다. 또한 컴퓨터 프로그래밍의 기본요소들을 일정 순서로 제공하고 있는데, 이것은 뉴욕대학교(NewYork University)의 티쉬(Tisch) 예술학교(http://itp.nyu.edu)에 있는 ITP(Interactive Telecommunications Program)의 참을성 있고 훌륭한 학생 그룹과 몇 년간 시행착오를 겪으며 만든 것이다. 이 책은 모두 23개의 장으로 이루어져 있으며, 10개의 레슨으로 나누어져 있다.
1장부터 9장까지는 컴퓨터 그래픽의 소개와 컴퓨터 프로그래밍의 기본원리에 대해 말하고 있다. 10장부터 12장까지는 어떻게 큰 프로젝트를 개발하는지 연구하기 위하여 새로운 요소를 배우며 잠시 쉬어간다. 13장부터 23장까지는 고급 주제 범위를 선택하여 기초를 확장하고, 실제 영상과 결합하여 데이터를 시각화하는 것을 제안한다.
‘레슨(Lessons)’은 소화하기 쉽게 책을 나누는 것과 같다. 학습의 끝에는 프로젝트 안의 각 장들을 읽고 그것을 통합할 수 있는 프로젝트들을 위한 제안이 제공된다(그러나 단지 제안일 뿐이다).
이 책에서 테스트를 할 수도 있는가?
이 책은 프로그래밍이라는 긴 여행에서 시작과 함께 앞으로의 방향을 제시해 준다. 진짜 열쇠는 연습, 연습, 연습이다. 여러분이 10살이고 바이올린 레슨을 한다고 가정해 보자. 선생님은 여러분에게 매일 연습하라고 말씀하실 것이다. 연습만이 습득한 지식을 완전하게 내 것으로 만들 수 있다. 이 책 안의 모든 예제들을 풀어 보고 가능하다면 매일 연습해 보자.
때때로, 여러분은 무엇인가를 배울 때 자신만의 아이디어를 떠올리는 것이 어려울 수 있다. 이 예제들에서 여러분은 굳이 그렇게 하지 않아도 된다. 그러나 만일 여러분이 무언가를 만들기 위한 아이디어를 발전시키고 싶다면, 이곳에 나와 있는 예제들을 한 번 더 꼬고 비틀면서 더 좋은 예제들을 자유롭게 만들어낼 수 있다. 많은 예제들은 짧은 시간 안에 답을 쓸 수 있는 것들이다. 어려운 몇 개의 예제는 답하는 데 1시간이 걸릴 수도 있다. 그러나 몇 시간, 하루, 한 주 이상으로 너무 많은 시간이 소요되면 일단 멈추는 것이 좋다. 이미 언급했듯이, 이것은 ‘학습’ 구조를 위한 것이기 때문이다. 나는 각 학습의 사이사이마다 프로세싱에서 읽고 무언가를 만드는 것으로부터 잠시 휴식을 취할 것을 제안한다. 이 책에서는 각각의 학습을 위한 예제들을 통해 프로젝트를 구상해 볼 수 있는 시간을 제공한다. 다시 한 번, 모든 예제의 정답은 이 책의 웹 사이트에 있음을 말해 둔다.
한 번에 한 걸음씩 떼어라: 점진적 발달의 철학
우리가 프로그래밍이라는 여행을 시작하기 전에 먼저 생각해야 할 것이 하나 있다. 그것은 이 프로그램을 배우는 중요한 원동력이 될 수 있으며, 이 책을 공부하는 데도 상당히 큰 도움이 될 것이다. 선배 교수들은 그것을 ‘점진적 발달의 철학’이라고 불렀다. 쉽게 말하자면, ‘한 번에 한 단계씩 접근하는 것’이다. 여러분이 완전 초보이든 아니면 어느 정도 경력이 있는 프로그래머이든, 어떤 프로그램 프로젝트를 할 때 한 번에 너무 많이 하려고 시도하는 함정에 빠지지 않는 것이 중요하다. 예를 들어, 굉장히 복잡한 프로그래밍 프로젝트가 있다고 해 보자. 그것은 펠린 노이즈와 3D 벌텍스 모양을 사용하고, 인공지능을 통해 진화한다. 또한 오늘의 뉴스를 웹에 올려 주고 텍스트와 이야기를 실제 영상을 통해 알려 주며, 마이크를 잡고 노래 부르는 것과 함께 컨트롤할 수 있는 매우 복잡한 프로그래밍이다.
이러한 큰 프로그래밍 프로젝트를 만들고자 하는 이상을 갖는 것이 잘못된 것은 전혀 아니다. 그러나 여러분이 자신을 위해 할 수 있는 가장 중요한 것은 그 이상을 작은 부분으로 나누고 각 부분을 천천히 공략하는 방법, 즉 한 번에 하나씩 배우는 것이다. 여러분이 자리에 앉자마자 한 번에 그것의 프로그램 기능을 모두 하려고 시도한다면 스트레스에 의한 두통이 일어날 것이라고 확신한다.
철통보안, 윈도우즈 레지스트리 포렌식: 보안 전문가를 위한 디지털 포렌식 분석 (0) | 2011.08.02 |
---|---|
철통보안, SQL Injection: SQLi 공격과 방어의 원리 (0) | 2011.05.13 |
대규모 병렬 프로세서 프로그래밍: NVIDIA의 CUDA를 이용한 실용적 접근 (0) | 2011.02.24 |
댓글 영역