임백준 지음 | 16,000원 | 한빛미디어 | 2016.11.20
세상 모든 프로그래머에게 전하는 행복 보따리 이제는 유명해진 임백준 저자는 2003년, 그의 인생 첫 책인 『행복한 프로그래밍』을 출간한다. 그로부터 십여 년이 훌쩍 지난 2016년, 마침내 개정판이 탄생했다.
(주로 4대강과 골프장 때문이지만) 확실히 강산도 변한 오늘, 저자가 말하고자 하는 ‘행복한’ 프로그래밍은 무엇이 달라졌을까? 놀랍게도 사실 많은 것이 변하진 않았다. 행복의 본질, 프로그래머의 본능인 뜨거운 도전 정신, 그 열기에 기름을 붓고 중독되게 하는 성취감은 해를 거듭해도 변하지 않기 때문이다.
프로그래밍은 재미있는 놀이요, 상상을 현실로 만드는 마법이다. 세상을 창조한 신도 분명 우리와 같은 프로그래머일 것이다. 우리도 이 책과 함께 미래를 프로그래밍하는 행복한 프로그래머가 되어보자.
★ 누구를 위한 책인가
- 젊은 시절의 끓어오르던 열정을 그리워하며 수년 뒤 미래를 걱정하는 중년 개발자
- 연이은 야근에 지쳐 어느덧 쳇바퀴 도는 신세가 된 것 같은 젊은 직장인
- 멋진 프로그래머가 되기를 꿈꾸는 파릇한 학생
- 나만의 세상을 창조하는 신이 되어보기를 꿈꾸는 자
- 『누워서 읽는 알고리즘』의 팬
안드레아스 뮐러, 세라 가이도 지음 | 박해선 옮김 | 한빛미디어 | 30,000원
사이킷런 핵심 개발자에게 배우는 머신러닝 이론과 구현
현업에서 머신러닝을 연구하고 인공지능 서비스를 개발하기 위해 꼭 학위를 받을 필요는 없습니다. 사이킷런(scikit-learn)과 같은 훌륭한 머신러닝 라이브러리가 복잡하고 난해한 작업을 직관적인 인터페이스로 감싸주는 덕분이죠. 이 책에서는 사이킷런의 핵심 개발자가 복잡한 수학을 동원하지 않고 실용적으로 머신러닝을 구축하는 모든 단계를 설명합니다. 미적분, 선형대수, 확률 이론을 공부하지 않았어도 이 책을 통해 머신러닝을 활용할 수 있게 될 것입니다.
사이토 고키 지음 | 개앞맵시(이복연) 옮김 | 24,000원 | 한빛미디어 | 2017.01.03
"직접 구현하고 움직여보며 익히는 가장 쉬운 딥러닝 입문서 "
이 책은 라이브러리나 프레임워크에 의존하지 않고, 딥러닝의 핵심을 ‘밑바닥부터’ 직접 만들어보며 즐겁게 배울 수 있는 본격 딥러닝 입문서입니다. 술술 읽힐 만큼 쉽게 설명하였고, 역전파처럼 어려운 내용은 ‘계산 그래프’ 기법으로 시각적으로 풀이했습니다. 무엇보다 작동하는 코드가 있어 직접 돌려보고 요리조리 수정해보면 어려운 이론도 명확하게 이해할 수 있습니다. 딥러닝에 새롭게 입문하려는 분과 기초를 다시금 정리하고 싶은 현업 연구자와 개발자에게 최고의 책이 될 것입니다.
"파이썬 성능 잠재력을 끌어내는 실용적인 개발 전략서"
미샤 고렐릭,이안 오스발트 지음 / 김영근,오현석 옮김 | 한빛미디어 | 2016년 8월 | 30,000원
★ 파이썬 3 대응
★ 프로토타이핑에서 실무 운영까지 살아가는 파이썬 코드의 비밀
아이디어 무한경쟁이 펼쳐지는 대(大)스타트업 시대! 높은 생산성으로 유명한 파이썬은 최우선 고려사항이다. 한 가지, 컴파일 언어 대비 느린 성능 때문에 성공한 서비스나 성능이 중요한 기능은 컴파일 언어로 다시 작성하곤 한다. 하지만 실무 운영까지 파이썬 코드를 계속 이어가는 방법이 있다면?
이 책은 파이썬을 둘러싼 설계와 작동 원리를 설명하고 이에 기반한 실용적인 구현 전략을 소개한다. 멀티코어 아키텍처와 클러스터의 이점을 활용하려면 어떻게 해야 하는가? 안정성을 잃지 않고 확장하는 방법은 무엇인가? 여러분은 이에 대한 명확한 해법을 찾고 방대한 소셜 데이터까지도 눈부신 속도로 처리해내는 파이썬 코드를 얻게 될 것이다.
★ 주요 내용
● numpy, Cython, 프로파일러 활용하기
● 파이썬의 시선으로 바라보는 컴퓨터 아키텍처 이해하기
● CPU 시간과 메모리 사용량을 프로파일링하여 병목 지점 찾기
● 상황에 맞는 컬렉션으로 효율적인 프로그램 작성하기
● 행렬과 벡터 연산 가속하기
● 네이티브 코드로 컴파일하기
● 대량의 I/O와 연산 동시 수행하기
● 원격 클러스터로 병렬 처리하기
● 적은 메모리로 대규모 데이터 처리하기
박상은, 권한철, 서양주 옮김 | 한빛미디어 | 26,000원
다양한 현실 세계 예제로 스파크 2의 진면목을 경험한다.
이 책은 독자에게 대량의 데이터셋을 가지고 스파크 2를 활용해 복잡한 분석과 머신러닝 학습을 실제로 해보는 생생한 느낌을 전달한다. 단순히 모델을 구축하고 평가하는 데 그치지 않고, 데이터 정제부터 전처리, 데이터 조사, 실제 제품을 만들기까지의 전체 파이프라인을 보여준다. 이러한 과정을 다양한 분야에서 가져온 현실 예제에 맞게 교차 최소 제곱 추천 알고리즘, 의사 결정 나무, K-평균 군집화, 숨은 의미 분석, 세션화, 몬테카를로 시뮬레이션 등의 기법을 동원해 풀어본다.
골빈해커(김진중) 지음 | 한빛미디어 | 22,000원
텐서플로 코드로 맛보는 딥러닝 핵심 개념!
이 책은 신경망 기초부터 CNN, Autoencoder, GAN, RNN, DQN까지 딥러닝의 가장 기본이 되는 모델들을 직접 구현하며 몸으로 익히도록 구성했습니다. 이론을 깊이 파헤치기보다는 다양한 딥러닝 모델의 기초 개념과 기본적인 텐서플로 사용법을 학습하는 데 초점을 두고, 각 모델의 논문에 수록된 복잡한 코드들을 그 핵심이 잘 드러나도록 재구현했습니다. 간결해진 예제들이 여러분을 딥러닝과 텐서플로의 세계로 즐겁고 편안히 모실 것입니다.
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기복연 이
샌디 라이자, 유리 레이저슨, 션 오언, 조시 윌스 지음 | 박상은, 권한철, 서양주 옮김 | 한빛미디어 | 2016년 07월 | 26,000원
예스24 링크: http://www.yes24.com/24/goods/29081416
★ 스파크 실전편! 실무와 가장 가까운 경험을 제공한다.
이 책은 기능과 API를 단조롭게 나열하지 않는다. 현실과 동떨어진, 예제를 위한 예제를 따라 하지도 않는다. 대신 우리 주변에서 찾을 수 있고 우리 삶과 밀접한 실제 데이터를 가져와 함께 분석하고 다듬어본다. 그것도 하나가 아니라 9가지다. 음악 추천부터 이상 감지, 교통, 금융, 영상 데이터 등. 관심 가는 장을 먼저 봐도 좋고, 차례대로 천천히 따라 해봐도 좋다. 그럼 가장 진보한 분석 도구인 스파크로 다 함께 데이터의 바다를 항해해보자!
★ 현실 세계 데이터셋과 스파크의 만남
1. 오디오스크로블러(AudioScrobbler) 데이터셋으로 음악 추천하기
2. 의사 결정 나무로 산림 식생 분포 예측하기
3. K 평균 군집화로 네트워크 이상 감지하기
4. 숨은 의미 분석으로 위키백과 이해하기
5. 그래프엑스(GraphX)로 동시발생 네트워크 분석하기
6. 뉴욕 택시 운행 데이터로 위치 및 시간 데이터 분석하기
7. 몬테카를로 시뮬레이션으로 금융 리스크 추정하기
8. BDG 프로젝트와 유전체학 데이터 분석하기
9. 파이스파크(PySpark)와 썬더(Thunder)로 신경 영상 데이터 분석하기
스티븐 블랙히스, 앤서니 존스 지음 | 오현석 옮김 | 한빛미디어
함수형 반응형 프로그래밍에 관한 최초의 종합 안내서
프로그램은 ‘어떻게’가 아니라 ‘무엇’을 기술하는 선언적인 문서여야 한다는 주장을 받아들이는 사람이 점점 늘고 있다. 이런 흐름은 함수형 언어의 부흥으로 이어졌다. 함수형 언어로는 프로그램을 더 선언적인 방식으로 작성할 수 있고, 이를 이벤트 처리에 결합한 것이 함수형 반응형 프로그래밍(FRP)이다. 지난 수십 년 동안 이벤트 처리 인프라를 책임진 관찰자 패턴은, 한편으로는 버그의 온상이 되기도 했다. FRP는 관찰자 패턴의 잠재적 버그 원인을 근본적으로 차단하여 더 복잡한 시스템으로 쉽게 확장할 수 있도록 해준다.
이 책의 저자는 FRP 프레임워크인 소듐(Sodium)의 창시자로서, FRP의 기초부터 기존 프로젝트를 점진적으로 FRP 시스템으로 탈바꿈시키는 방법까지 친절히 안내한다.
이 책은 본격적인 알고리즘 공부보다는 알고리즘을 소재로 풀어가는 재미난 이야기를 담았다. 새로운 알고리즘 이론을 소개하는 것도, 독자에게 알고리즘을 ‘강의’하는 것도 아니다. 오히려 알고리즘은 맛있는 읽을거리의 ‘재료’로 쓰였을 뿐이다. 현실 세계와 유사한 재미있는 퀴즈로 독자의 흥미를 유도하기도 하고 때로는 딱딱한 수학 문제로 긴장감을 고조시킨다. 어떤 곳에서는 지저분한 펄 코드가 등장하기도 하며 깔끔하고 읽기 쉬운 C 코드 또한 자주 등장한다. 정렬이나 탐색 리스트 등의 정통 알고리즘도 책의 곳곳에 녹아 있다. 익살스럽고 특이한 그림을 보는 재미 또한 쏠쏠하다는 점도 이 책의 부수적인 장점이다.
“소프트웨어를 개발하는 사람에게 알고리즘은 취업이나 승진을 위해서 억지로 공부하는 대상이 아니라 퍼즐이나 수수께끼처럼 자체로 재미있고 신나는 놀이가 되어야 한다. 내 책 중에서 이 책이 가장 많은 사랑을 받은 배경에는 알고리즘을 딱딱한 공부가 아니라 말랑말랑한 놀이로 다루었다는 측면이 놓여 있을 것이다. 그런 의미에서 나는 이 책이 이미 개발자인 사람은 물론이고, 이제 막 소프트웨어 개발과 코딩을 배우려는 사람들에게 많이 읽히기를 희망한다.”
-- 지은이의 말 중에서
★ 대상 독자
- 휴식과 상식 쌓기와 공부를 동시에 원하는 바쁜 직장인
- 학문으로서가 아닌, 개발자의 삶에 녹아든 알고리즘 이야기가 궁금한 개발자
- 알고리즘이 재미있는 개발자
안드레아스 뮐러, 세라 가이도 지음 | 박해선 옮김 | 한빛미디어 | 30,000원
사이킷런 핵심 개발자에게 배우는 머신러닝 이론과 구현
현업에서 머신러닝을 연구하고 인공지능 서비스를 개발하기 위해 꼭 학위를 받을 필요는 없습니다. 사이킷런(scikit-learn)과 같은 훌륭한 머신러닝 라이브러리가 복잡하고 난해한 작업을 직관적인 인터페이스로 감싸주는 덕분이죠. 이 책에서는 사이킷런의 핵심 개발자가 복잡한 수학을 동원하지 않고 실용적으로 머신러닝을 구축하는 모든 단계를 설명합니다. 미적분, 선형대수, 확률 이론을 공부하지 않았어도 이 책을 통해 머신러닝을 활용할 수 있게 될 것입니다.
사이토 고키 지음 | 개앞맵시(이복연) 옮김 | 24,000원 | 한빛미디어 | 2017.01.03
"직접 구현하고 움직여보며 익히는 가장 쉬운 딥러닝 입문서 "
이 책은 라이브러리나 프레임워크에 의존하지 않고, 딥러닝의 핵심을 ‘밑바닥부터’ 직접 만들어보며 즐겁게 배울 수 있는 본격 딥러닝 입문서입니다. 술술 읽힐 만큼 쉽게 설명하였고, 역전파처럼 어려운 내용은 ‘계산 그래프’ 기법으로 시각적으로 풀이했습니다. 무엇보다 작동하는 코드가 있어 직접 돌려보고 요리조리 수정해보면 어려운 이론도 명확하게 이해할 수 있습니다. 딥러닝에 새롭게 입문하려는 분과 기초를 다시금 정리하고 싶은 현업 연구자와 개발자에게 최고의 책이 될 것입니다.
"파이썬 성능 잠재력을 끌어내는 실용적인 개발 전략서"
미샤 고렐릭,이안 오스발트 지음 / 김영근,오현석 옮김 | 한빛미디어 | 2016년 8월 | 30,000원
★ 파이썬 3 대응
★ 프로토타이핑에서 실무 운영까지 살아가는 파이썬 코드의 비밀
아이디어 무한경쟁이 펼쳐지는 대(大)스타트업 시대! 높은 생산성으로 유명한 파이썬은 최우선 고려사항이다. 한 가지, 컴파일 언어 대비 느린 성능 때문에 성공한 서비스나 성능이 중요한 기능은 컴파일 언어로 다시 작성하곤 한다. 하지만 실무 운영까지 파이썬 코드를 계속 이어가는 방법이 있다면?
이 책은 파이썬을 둘러싼 설계와 작동 원리를 설명하고 이에 기반한 실용적인 구현 전략을 소개한다. 멀티코어 아키텍처와 클러스터의 이점을 활용하려면 어떻게 해야 하는가? 안정성을 잃지 않고 확장하는 방법은 무엇인가? 여러분은 이에 대한 명확한 해법을 찾고 방대한 소셜 데이터까지도 눈부신 속도로 처리해내는 파이썬 코드를 얻게 될 것이다.
★ 주요 내용
● numpy, Cython, 프로파일러 활용하기
● 파이썬의 시선으로 바라보는 컴퓨터 아키텍처 이해하기
● CPU 시간과 메모리 사용량을 프로파일링하여 병목 지점 찾기
● 상황에 맞는 컬렉션으로 효율적인 프로그램 작성하기
● 행렬과 벡터 연산 가속하기
● 네이티브 코드로 컴파일하기
● 대량의 I/O와 연산 동시 수행하기
● 원격 클러스터로 병렬 처리하기
● 적은 메모리로 대규모 데이터 처리하기
박상은, 권한철, 서양주 옮김 | 한빛미디어 | 26,000원
다양한 현실 세계 예제로 스파크 2의 진면목을 경험한다.
이 책은 독자에게 대량의 데이터셋을 가지고 스파크 2를 활용해 복잡한 분석과 머신러닝 학습을 실제로 해보는 생생한 느낌을 전달한다. 단순히 모델을 구축하고 평가하는 데 그치지 않고, 데이터 정제부터 전처리, 데이터 조사, 실제 제품을 만들기까지의 전체 파이프라인을 보여준다. 이러한 과정을 다양한 분야에서 가져온 현실 예제에 맞게 교차 최소 제곱 추천 알고리즘, 의사 결정 나무, K-평균 군집화, 숨은 의미 분석, 세션화, 몬테카를로 시뮬레이션 등의 기법을 동원해 풀어본다.
골빈해커(김진중) 지음 | 한빛미디어 | 22,000원
텐서플로 코드로 맛보는 딥러닝 핵심 개념!
이 책은 신경망 기초부터 CNN, Autoencoder, GAN, RNN, DQN까지 딥러닝의 가장 기본이 되는 모델들을 직접 구현하며 몸으로 익히도록 구성했습니다. 이론을 깊이 파헤치기보다는 다양한 딥러닝 모델의 기초 개념과 기본적인 텐서플로 사용법을 학습하는 데 초점을 두고, 각 모델의 논문에 수록된 복잡한 코드들을 그 핵심이 잘 드러나도록 재구현했습니다. 간결해진 예제들이 여러분을 딥러닝과 텐서플로의 세계로 즐겁고 편안히 모실 것입니다.
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기복연 이
샌디 라이자, 유리 레이저슨, 션 오언, 조시 윌스 지음 | 박상은, 권한철, 서양주 옮김 | 한빛미디어 | 2016년 07월 | 26,000원
예스24 링크: http://www.yes24.com/24/goods/29081416
★ 스파크 실전편! 실무와 가장 가까운 경험을 제공한다.
이 책은 기능과 API를 단조롭게 나열하지 않는다. 현실과 동떨어진, 예제를 위한 예제를 따라 하지도 않는다. 대신 우리 주변에서 찾을 수 있고 우리 삶과 밀접한 실제 데이터를 가져와 함께 분석하고 다듬어본다. 그것도 하나가 아니라 9가지다. 음악 추천부터 이상 감지, 교통, 금융, 영상 데이터 등. 관심 가는 장을 먼저 봐도 좋고, 차례대로 천천히 따라 해봐도 좋다. 그럼 가장 진보한 분석 도구인 스파크로 다 함께 데이터의 바다를 항해해보자!
★ 현실 세계 데이터셋과 스파크의 만남
1. 오디오스크로블러(AudioScrobbler) 데이터셋으로 음악 추천하기
2. 의사 결정 나무로 산림 식생 분포 예측하기
3. K 평균 군집화로 네트워크 이상 감지하기
4. 숨은 의미 분석으로 위키백과 이해하기
5. 그래프엑스(GraphX)로 동시발생 네트워크 분석하기
6. 뉴욕 택시 운행 데이터로 위치 및 시간 데이터 분석하기
7. 몬테카를로 시뮬레이션으로 금융 리스크 추정하기
8. BDG 프로젝트와 유전체학 데이터 분석하기
9. 파이스파크(PySpark)와 썬더(Thunder)로 신경 영상 데이터 분석하기
스티븐 블랙히스, 앤서니 존스 지음 | 오현석 옮김 | 한빛미디어
함수형 반응형 프로그래밍에 관한 최초의 종합 안내서
프로그램은 ‘어떻게’가 아니라 ‘무엇’을 기술하는 선언적인 문서여야 한다는 주장을 받아들이는 사람이 점점 늘고 있다. 이런 흐름은 함수형 언어의 부흥으로 이어졌다. 함수형 언어로는 프로그램을 더 선언적인 방식으로 작성할 수 있고, 이를 이벤트 처리에 결합한 것이 함수형 반응형 프로그래밍(FRP)이다. 지난 수십 년 동안 이벤트 처리 인프라를 책임진 관찰자 패턴은, 한편으로는 버그의 온상이 되기도 했다. FRP는 관찰자 패턴의 잠재적 버그 원인을 근본적으로 차단하여 더 복잡한 시스템으로 쉽게 확장할 수 있도록 해준다.
이 책의 저자는 FRP 프레임워크인 소듐(Sodium)의 창시자로서, FRP의 기초부터 기존 프로젝트를 점진적으로 FRP 시스템으로 탈바꿈시키는 방법까지 친절히 안내한다.
이 책은 본격적인 알고리즘 공부보다는 알고리즘을 소재로 풀어가는 재미난 이야기를 담았다. 새로운 알고리즘 이론을 소개하는 것도, 독자에게 알고리즘을 ‘강의’하는 것도 아니다. 오히려 알고리즘은 맛있는 읽을거리의 ‘재료’로 쓰였을 뿐이다. 현실 세계와 유사한 재미있는 퀴즈로 독자의 흥미를 유도하기도 하고 때로는 딱딱한 수학 문제로 긴장감을 고조시킨다. 어떤 곳에서는 지저분한 펄 코드가 등장하기도 하며 깔끔하고 읽기 쉬운 C 코드 또한 자주 등장한다. 정렬이나 탐색 리스트 등의 정통 알고리즘도 책의 곳곳에 녹아 있다. 익살스럽고 특이한 그림을 보는 재미 또한 쏠쏠하다는 점도 이 책의 부수적인 장점이다.
“소프트웨어를 개발하는 사람에게 알고리즘은 취업이나 승진을 위해서 억지로 공부하는 대상이 아니라 퍼즐이나 수수께끼처럼 자체로 재미있고 신나는 놀이가 되어야 한다. 내 책 중에서 이 책이 가장 많은 사랑을 받은 배경에는 알고리즘을 딱딱한 공부가 아니라 말랑말랑한 놀이로 다루었다는 측면이 놓여 있을 것이다. 그런 의미에서 나는 이 책이 이미 개발자인 사람은 물론이고, 이제 막 소프트웨어 개발과 코딩을 배우려는 사람들에게 많이 읽히기를 희망한다.”
-- 지은이의 말 중에서
★ 대상 독자
- 휴식과 상식 쌓기와 공부를 동시에 원하는 바쁜 직장인
- 학문으로서가 아닌, 개발자의 삶에 녹아든 알고리즘 이야기가 궁금한 개발자
- 알고리즘이 재미있는 개발자
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
『이펙티브 디버깅』 디버깅 지옥에서 탈출하는 66가지 전략과 기법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
『데이터 분석을 통한 네트워크 보안』 - 맛보기복연 이
마이클 콜린스 지음 | 문성건 옮김 | 한빛미디어 | 2016년 04월 | 30,000원
예스24: http://www.yes24.com/24/Goods/25411084
진화하는 네트워크에 대처하는 진보된 보안 기술을 익힌다.
모바일 기기의 범람에 IoT까지, 오늘날의 복잡한 네트워크를 보호하려면 전통적인 침입 탐지와 로그 분석만으로는 충분하지 않다. 이 책에서 보안 전문가인 마이클 콜린스는 점점 더 거대해지는 네트워크에서 트래픽 데이터를 수집, 정리, 분석하는 여러 기법과 도구를 선보인다. 네트워크가 어떻게 이용되는지 이해하고 이를 보호하고 개선하기 위한 조치가 무엇인지 배울 수 있다.
- 네트워크, 호스트, 서비스 센서에서 보안 데이터 얻기
- RDB, 그래프DB, 레디스, 하둡에 트래픽 데이터 저장하기
- SiLK, R 등의 도구로 분석 및 시각화하기
- 탐구적 데이터 분석으로 이상 현상 탐지하기
- 그래프 분석으로 경보와 포렌식 개선하기
- 트래픽 양과 행위를 살펴 DDoS와 데이터베이스 급습 검진하기
- 네트워크 지도와 장비 목록의 단계별 활용 방법
프랭크 D. 루나 지음 | 류광 옮김 | 한빛미디어
3D 그래픽 프로그래밍의 기초부터 최신 기법까지
이 책은 DirectX 12로 게임을 개발해가며 대화식 컴퓨터 그래픽 프로그래밍을 익히는 입문서다. 1부는 기본적인 수학적 도구들을, 2부는 Direct3D의 기본 과제들을 수행하는 방법을, 그리고 3부는 여러 응용 기법과 특수 효과를 설명한다. 그 과정에서 명령 목록, 파이프라인 상태 객체, 서술자 힙과 테이블, CPU 추가부담 감소 및 다중 CPU 코어를 효율적으로 사용하기 위한 명시적 자원 관리 같은 DirectX 12의 새 기능을 활용하는 방법을 보여준다. 하드웨어 테셀레이션, 계산 셰이더, 주변광 차폐, 실시간 반사, 법선 매핑과 변위 매핑, 그림자 렌더링, 캐릭터 애니메이션 같은 현대적인 특수 효과와 기법도 이 책으로 배울 수 있다.
안드레아스 비티히, 미하엘 비티히 지음 | 모파상(백영상) 옮김 | 한빛미디어 | 2017. 05. 01
AWS 입문자를 위한 시원시원한 실습서 -
이 책은 AWS를 클라우드 인프라의 핵심인 컴퓨팅, 저장소, 네트워킹을 중심으로 소개한다. 구체적으로는 클라우드 컴퓨팅 개론과 계정 생성 같은 기초, AWS API로 AWS의 모든 기능을 프로그램적으로 제어하는 인프라 자동화, 데이터를 안전하게 보관하는 다양한 기법, 사설 네트워크로 시스템을 격리하는 방법, 고가용성과 장애허용 설계 기법 등을 설명한다.
Music, Horse's Wellness and training in Equestrian SportshorseCom USA
horseCom® is the first horse and rider ®Bluetooth connected device using music to enhance the horse riding experience.
We work with equine specialists, instructors, trainers and top riders in Europe to create effective music playlists to heal the horses' stress and to offer improved training programs for both horse and rider.
Our solution will be available soon in the US.
Check our website for more information: http://www.horsecom.us/
1-1 청년창업사관학교
1-2 창업맞춤형 사업
1-3 선도벤처연계 창업지원 사업
1-4 글로벌 청년창업 활성화 사업
1-5 창업선도대학육성
1-6 대한민국 창업리그-슈퍼스타V(왕중왕전)
1-7 민․관 공동 창업자 발굴․육성(창업기획사)
1-8 남북협력지원
2-1 창업인턴제(Venture For Korea)
2-2 청소년 비즈쿨
2-3 창업아카데미
2-4 창업대학원
2-5 대학 기업가센터 지원사업
2-6 시니어창업 지원
2-7 창업보육센터 지원사업
2-8 재택창업시스템 운영
2-9 중소기업모태조합출자
3-1 ICT 기반 지식서비스 개발 및 창업지원
3-2 앱/콘텐츠/SW융합 실전 창업 지원
3-3 스마트 스타트업 글로벌화 지원
3-4 참살이 서비스 기업지원
3-5 1인 창조기업 비즈니스 센터
3-6 1인 창조기업 마케팅 지원
4-1 재도약 지원자금
4-2 중소기업 진로제시컨설팅
4-3 중소기업 회생컨설팅
4-4 재창업기업 전용 기술개발자금
4-5 중소 · 벤처기업 자산거래 중개장터
기업보안 및 개인정보보호 동향
1. 기업보안 배경 및 목적
2. 개인정보보호법
3. 위반사례
4. 보안의 범위
5. 보안체계 수립 절차
Ⅱ. 기술적 보안수준 현황 (As-Is)
Ⅲ. 기업보안 및 개인정보보호를 위한 기술적 조치방안 (To-Be)
Ⅳ. 상세솔루션 방안(案) – ( ISMS PIMS )
1.1 UTM (NW 통합보안 시스템)
1.2 DLP(정보유출방지)
1.3 DRM(문서암호화)
1.4 DB암호화
1.5 WIPS (무선침입방지시스템)
1.6 EMM (모바일 보안)
1.7 물리적 보안 (보안스티커, 보안 봉인커버)
Ⅵ. 최종 제언
아래의 9권 책 리뷰를 포함하고 있습니다.
리팩토링 코드 품질을 개선하는 객체지향 사고법
빅데이터의 충격 (거대한 데이터의 파도가 사업 전략을 바꾼다)
헤드 퍼스트 데이터 분석 (당신을 최고의 데이터 분석가로 이끌어줄 마법 같은 학습서)
왓슨 인간의 사고를 시작하다
소프트웨어 누가 이렇게 개떡같이 만든 거야
앱만장자 (부를 거머쥔 인디 개발자들의 성공 비법)
애자일 마스터 (프로젝트 인셉션 추정과 계획 그리고 실행)
읽기 좋은 코드가 좋은 코드다 (더 나은 코드를 작성하는 간단하고 실전적인 테크닉)
프로그래머, 열정을 말하다
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기복연 이
크리스 크로퍼드 저/최향숙 역 | 한빛미디어 | 2015년 11월 | 22,000원
게임 개발자 회의(GDC) 창립자가 들려주는 인터랙티브 스토리텔링
1980년대부터 다양한 게임을 제작해온 크리스 크로퍼드는 스토리의 중요성에 매료되어 20년 넘게 인터랙티브 스토리텔링을 연구하며 대중화에 앞장서왔다. 이 책은 그의 모든 노하우와 가장 최근의 성과를 집대성한 것으로, 진정한 인터랙티브 스토리텔링에 대한 고찰부터, 이를 위한 사고의 전환, 올바로 구현하기 위한 추상화와 수학적 설계 기법, 플레이어의 자유의지와 작가가 의도한 운명 사이의 균형잡기 등에 관한 실용적 지침을 담았다.
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
『이펙티브 디버깅』 디버깅 지옥에서 탈출하는 66가지 전략과 기법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
『데이터 분석을 통한 네트워크 보안』 - 맛보기복연 이
마이클 콜린스 지음 | 문성건 옮김 | 한빛미디어 | 2016년 04월 | 30,000원
예스24: http://www.yes24.com/24/Goods/25411084
진화하는 네트워크에 대처하는 진보된 보안 기술을 익힌다.
모바일 기기의 범람에 IoT까지, 오늘날의 복잡한 네트워크를 보호하려면 전통적인 침입 탐지와 로그 분석만으로는 충분하지 않다. 이 책에서 보안 전문가인 마이클 콜린스는 점점 더 거대해지는 네트워크에서 트래픽 데이터를 수집, 정리, 분석하는 여러 기법과 도구를 선보인다. 네트워크가 어떻게 이용되는지 이해하고 이를 보호하고 개선하기 위한 조치가 무엇인지 배울 수 있다.
- 네트워크, 호스트, 서비스 센서에서 보안 데이터 얻기
- RDB, 그래프DB, 레디스, 하둡에 트래픽 데이터 저장하기
- SiLK, R 등의 도구로 분석 및 시각화하기
- 탐구적 데이터 분석으로 이상 현상 탐지하기
- 그래프 분석으로 경보와 포렌식 개선하기
- 트래픽 양과 행위를 살펴 DDoS와 데이터베이스 급습 검진하기
- 네트워크 지도와 장비 목록의 단계별 활용 방법
프랭크 D. 루나 지음 | 류광 옮김 | 한빛미디어
3D 그래픽 프로그래밍의 기초부터 최신 기법까지
이 책은 DirectX 12로 게임을 개발해가며 대화식 컴퓨터 그래픽 프로그래밍을 익히는 입문서다. 1부는 기본적인 수학적 도구들을, 2부는 Direct3D의 기본 과제들을 수행하는 방법을, 그리고 3부는 여러 응용 기법과 특수 효과를 설명한다. 그 과정에서 명령 목록, 파이프라인 상태 객체, 서술자 힙과 테이블, CPU 추가부담 감소 및 다중 CPU 코어를 효율적으로 사용하기 위한 명시적 자원 관리 같은 DirectX 12의 새 기능을 활용하는 방법을 보여준다. 하드웨어 테셀레이션, 계산 셰이더, 주변광 차폐, 실시간 반사, 법선 매핑과 변위 매핑, 그림자 렌더링, 캐릭터 애니메이션 같은 현대적인 특수 효과와 기법도 이 책으로 배울 수 있다.
안드레아스 비티히, 미하엘 비티히 지음 | 모파상(백영상) 옮김 | 한빛미디어 | 2017. 05. 01
AWS 입문자를 위한 시원시원한 실습서 -
이 책은 AWS를 클라우드 인프라의 핵심인 컴퓨팅, 저장소, 네트워킹을 중심으로 소개한다. 구체적으로는 클라우드 컴퓨팅 개론과 계정 생성 같은 기초, AWS API로 AWS의 모든 기능을 프로그램적으로 제어하는 인프라 자동화, 데이터를 안전하게 보관하는 다양한 기법, 사설 네트워크로 시스템을 격리하는 방법, 고가용성과 장애허용 설계 기법 등을 설명한다.
Music, Horse's Wellness and training in Equestrian SportshorseCom USA
horseCom® is the first horse and rider ®Bluetooth connected device using music to enhance the horse riding experience.
We work with equine specialists, instructors, trainers and top riders in Europe to create effective music playlists to heal the horses' stress and to offer improved training programs for both horse and rider.
Our solution will be available soon in the US.
Check our website for more information: http://www.horsecom.us/
1-1 청년창업사관학교
1-2 창업맞춤형 사업
1-3 선도벤처연계 창업지원 사업
1-4 글로벌 청년창업 활성화 사업
1-5 창업선도대학육성
1-6 대한민국 창업리그-슈퍼스타V(왕중왕전)
1-7 민․관 공동 창업자 발굴․육성(창업기획사)
1-8 남북협력지원
2-1 창업인턴제(Venture For Korea)
2-2 청소년 비즈쿨
2-3 창업아카데미
2-4 창업대학원
2-5 대학 기업가센터 지원사업
2-6 시니어창업 지원
2-7 창업보육센터 지원사업
2-8 재택창업시스템 운영
2-9 중소기업모태조합출자
3-1 ICT 기반 지식서비스 개발 및 창업지원
3-2 앱/콘텐츠/SW융합 실전 창업 지원
3-3 스마트 스타트업 글로벌화 지원
3-4 참살이 서비스 기업지원
3-5 1인 창조기업 비즈니스 센터
3-6 1인 창조기업 마케팅 지원
4-1 재도약 지원자금
4-2 중소기업 진로제시컨설팅
4-3 중소기업 회생컨설팅
4-4 재창업기업 전용 기술개발자금
4-5 중소 · 벤처기업 자산거래 중개장터
기업보안 및 개인정보보호 동향
1. 기업보안 배경 및 목적
2. 개인정보보호법
3. 위반사례
4. 보안의 범위
5. 보안체계 수립 절차
Ⅱ. 기술적 보안수준 현황 (As-Is)
Ⅲ. 기업보안 및 개인정보보호를 위한 기술적 조치방안 (To-Be)
Ⅳ. 상세솔루션 방안(案) – ( ISMS PIMS )
1.1 UTM (NW 통합보안 시스템)
1.2 DLP(정보유출방지)
1.3 DRM(문서암호화)
1.4 DB암호화
1.5 WIPS (무선침입방지시스템)
1.6 EMM (모바일 보안)
1.7 물리적 보안 (보안스티커, 보안 봉인커버)
Ⅵ. 최종 제언
아래의 9권 책 리뷰를 포함하고 있습니다.
리팩토링 코드 품질을 개선하는 객체지향 사고법
빅데이터의 충격 (거대한 데이터의 파도가 사업 전략을 바꾼다)
헤드 퍼스트 데이터 분석 (당신을 최고의 데이터 분석가로 이끌어줄 마법 같은 학습서)
왓슨 인간의 사고를 시작하다
소프트웨어 누가 이렇게 개떡같이 만든 거야
앱만장자 (부를 거머쥔 인디 개발자들의 성공 비법)
애자일 마스터 (프로젝트 인셉션 추정과 계획 그리고 실행)
읽기 좋은 코드가 좋은 코드다 (더 나은 코드를 작성하는 간단하고 실전적인 테크닉)
프로그래머, 열정을 말하다
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기복연 이
크리스 크로퍼드 저/최향숙 역 | 한빛미디어 | 2015년 11월 | 22,000원
게임 개발자 회의(GDC) 창립자가 들려주는 인터랙티브 스토리텔링
1980년대부터 다양한 게임을 제작해온 크리스 크로퍼드는 스토리의 중요성에 매료되어 20년 넘게 인터랙티브 스토리텔링을 연구하며 대중화에 앞장서왔다. 이 책은 그의 모든 노하우와 가장 최근의 성과를 집대성한 것으로, 진정한 인터랙티브 스토리텔링에 대한 고찰부터, 이를 위한 사고의 전환, 올바로 구현하기 위한 추상화와 수학적 설계 기법, 플레이어의 자유의지와 작가가 의도한 운명 사이의 균형잡기 등에 관한 실용적 지침을 담았다.
스마트폰, 태블릿 PC 등 새롭게 시작하는 디지털 혁명이 암시하는, 아직 오지 않은 그러나 머지않은 미래에 대해 이야기하는 책으로, 애플, 구글, 페이스북 등 새로운 IT 강자들이 만들어 갈 IT 산업과 사회 전체에 걸쳐 일어날 혁명과 트위터, 페이스북과 같은 새로운 온라인 서비스가 우리 삶에 미칠 변화를 이야기한다.
또한 영화와 음반 산업에 불어닥친 디지털 혁명이 출판, 통신 산업 등에 미칠 영향을 예견하고, 한 걸음 더 나아가 인터넷이 온라인에서 오프라인으로 그 영향력의 무대를 확장함에 따라 나타나는 새로운 비즈니스를 전망한다. 그러나 동시에 디지털 혁명에 대해 우리가 쉽게 판단하고, 기대하는 부분의 맹점을 지적함으로써 다가올 미래에 대해 더욱 냉철한 분별력을 갖출 수 있도록 돕고자 한다.
코디 범가드너 지음 | 강재준, 신원석, 오성근, 이준섭, 조영준 옮김 | 32,000원 | 한빛미디어 | 2016.10.01
★ 오픈스택 핵심 구성요소의 기능과 상호작용을 철저히 파헤친다.
오픈스택의 가장 큰 장점은 모듈성이다. 컴퓨트, 스토리지, 네트워크, 대시보드, 오케스트레이션 등 다양한 구성요소를 조합하여 각자가 제공하려는 서비스를 위한 최상의 맞춤형 인프라를 구축할 수 있다. 하지만 단순한 따라 하기식 설치 경험만으로는 실제 운영 시에 마주하는 복잡 다양한 요구에 제대로 대처할 수 없다. 이 책은 오픈스택 핵심 구성요소들을 다양한 방식으로 배포해보며 응용력을 키우고, 상용 환경에 필요한 구성과 오케스트레이션까지 살펴볼 수 있도록 구성했다. 이를 통해 독자들은 오픈스택 핵심 구성요소가 제공하는 기능과 설치 옵션의 의미와 효과, 다른 구성요소와 상호작용하는 방식을 확실히 이해하게 될 것이다.
데이터베이스 수업도 듣고 선임자가 건네준 모델대로 구현해본 경험이 제법 있더라도, 막상 자신이 책임자가 되어 백지 위에 엔터티 박스와 관계선을 그려야 한다면 막막함이 앞을 가린다. 이전에 본 듯한 패턴을 흉내 내 그림을 그려보지만 수백, 수천의 엔터티 홍수 속에서 제대로 가고 있다는 확신이 서지 않는다.
저자는 이처럼 너무도 거대한 현업의 복잡함에 압도되어 길을 잃고 고생하는 후임들의 안타까운 모습에 직접 멘토가 되어주고자 이 책을 쓰기 시작했다. 내공이 깊어야 연공이 자유롭듯, 그 본질을 꿰고 있다면 어떤 업무가 주어지든 막힘없이 헤쳐나갈 수 있다. 짧은 호흡으로 경쾌하게 풀어낸 이야기들을 통해 따스한 온기가 묻어 있는 저자의 노하우를 내 것으로 만들자.
인터넷에는 수없이 많은 PHP 튜토리얼이 있다. 이들 대부분은 이미 낡고 쓸모없어진 지 오래지만 불행히도 구글 검색 결과에 살아남아 여전히 참조자료로 활용된다. 이런 낡은 정보를 무분별하게 받아들인 PHP 프로그래머는 자신도 모르는 사이에 느리고 보안에 취약한 PHP 애플리케이션을 만들게 된다.
이 책에서는 슬림(Slim) 프레임워크의 제작자이자 ‘PHP The Right Way’의 창안자인 조시 록하트가 최신 PHP 기술을 소개하는 한편, 자신의 오픈소스 프로젝트와 일상 업무에서 매일 사용하는 최신 기술을 보여준다. 독자 여러분도 이 책을 통해 PHP의 짜릿한 변화의 순간에 동참하고 진보된 PHP를 온전히 활용할 수 있게 될 것이다.
- 네임스페이스, 트레이트, 제너레이터, 클로저 등의 모던 PHP 기능
- PHP 컴포넌트를 검색, 사용, 작성하는 방법
- 보안, 데이터베이스 작업, 문자열, 스트림, 에러와 예외 등에 대한 모범 사례
- 프로비저닝, 배포, 튜닝, 테스팅, 프로파일링에 필요한 도구와 기술
- 페이스북이 선보인 HHVM과 Hack이 최신 PHP에 미친 영향
- 프로덕션 서버에 대응하는 로컬 개발 환경 구축
★ 대상 독자
- PHP에 대한 기본적인 이해가 있으며 자신의 기량을 강화하고 싶은 모든 개발자
- 수년 전부터 같은 패턴으로 개발하고 있는 PHP 개발자
- PHP의 최신 변화가 궁금하고 미래를 적극적으로 준비하고 싶은 개발자
- 호환되지 않는 여러 PHP 버전의 설명이 혼재된 인터넷 자료에 고생하고 있는 개발자
★ 추천사
나는 PHP 언어와 커뮤니티의 현 상황을 제대로 반영한 서적을 찾느라 수년을 보냈다. 이제 주저하지 않고 『Modern PHP』를 추천한다.
─ 에드 핀클러, 개발자 겸 블로거(funkatron.com)
프로그래밍에서 절대 변하지 않는 진리는 ‘프로그래밍은 변한다’는 사실뿐이다. PHP는 변하고 있고 여러분의 개발 방법 역시 변해야만 한다. 조시는 최신 PHP로 작성하기 위해 알아야 할 도구와 개념을 제시한다.
─ 캘 에번스, E.I.C.C. CEO
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기복연 이
조대협, 최명근, 최유석, 윤성재, 김영균 지음 | 한빛미디어 | 2016.09.10
구글 클라우드 플랫폼을 처음 사용하는 사람을 위한 실습형 입문서.
이 책은 구글 클라우드를 처음 사용하는 사람이 가상 머신(VM) 기반의 클라우드 서비스 기능들을 빠르게 사용할 수 있도록 도울 목적으로, 실습 위주로 속도감 있게 구성하였다.
구글 클라우드의 가상 머신 서비스인 컴퓨트 엔진을 사용하기 위해 가입부터 VM 설정, 네트워크 설정, 오토 스케일링(자동 확장)과 모니터링, 그리고 MySQL 매지니드 서비스인 Cloud SQL의 사용법을 소개한다. 마지막으로 구글 클라우드만의 장점인 빅데이터 서비스, 전 세계를 덮는 전용 네트워크망, 합리적인 가격 정책을 소개한다.
라쎄 코스켈라 지음 | 이복연 옮김 | 한빛미디어 | 2013년 11월 | 25,000원
예스24: http://www.yes24.com/24/goods/1136108
테스트 라이브러리 사용법에서 나아가 ‘좋은 테스트란 무엇인가’, ‘좋은 테스트를 작성하려면 어떻게 해야 하는가’에 관한 현장의 물음에 해답을 제시한다. 테스트가 갖춰야 할 요건에 따라 나눈 테스트 카탈로그가 수록되어, 필요할 때마다 원하는 목록을 참고하여 자신이 작성한 테스트에서 문제를 발견하고 수정해 나갈 수 있으며 더욱 응용력 높은 학습을 할 수 있다.
『클라우드 시스템을 관리하는 기술』 - 맛보기복연 이
토머스 리몬첼리 외 공저 / 류광 옮김 | 한빛미디어 | 2016년 2월 | 36,000원
예스24: http://www.yes24.com/24/goods/24557610
“클라우드 규모 서비스를 실현하는 이론과 실전 노하우를 정리한 지침서”
이 책은 대규모 클라우드 인프라와 서비스의 구조와 설계 패턴, 그리고 이를 운영하는 방법까지, 시스템과 팀이 유기적으로 움직이는 비법을 제시한다.
저자들의 구글, 엣시(Etsy), 트위터, 페이스북, 넷플릭스, 아마존 등 거대 기업에서의 사례와 경험에서 시기를 타지 않는 근본적인 원리(principle)와 관행(practice), 특정 제품이나 시스템을 선택할 때 독자가 반드시 살펴봐야 할 품질 요소들을 이 책에 담았다. 이러한 접근법 덕분에 시간이 흘러 기술이 변해도 독자는 이 업계에서 여전히 준비된 전문가로 남게 될 것이다.
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기복연 이
MEAN 스택, 서버와 클라이언트를 넘나드는 풀스택 엔지니어의 선택
MEAN은 서버와 클라이언트 양쪽을 모두 다루는 풀스택 엔지니어를 위한 기술이며, 한번 익혀두면 여러 상황에서 돌파구를 발견할 가능성을 높여준다. 그만큼 개발자의 경쟁력을 높일 수 있음을 의미한다. 스택의 모든 구성 요소가 자바스크립트를 사용하므로 진입 장벽이 낮고 팀 내 협업, 노하우 공유, 의사소통에 큰 도움을 준다.
이 책은 오랜 개발과 번역 경험을 두루 갖춘 베테랑 역자가 원서의 예제를 완결된 형태로 재구성해서 독자의 시간을 절약해주고 아쉬운 설명을 보강해 완성도를 높였다. 책의 흐름에 발맞춰 예제를 조금씩 확장해 나가다 보면 어느 순간 자신만의 멋진 풀스택 앱을 만들 수 있을 것이다.
- 지은이 : 애덤 브레츠, 콜린 J. 이릭
- 옮긴이 : 박재호
- ISBN : 978-89-6848-218-2 93000
- 발행일 : 2015년 9월 1일
- 페이지수 : 348
- 정가 : 28,000원
- 구매(예스24) : http://goo.gl/KNlRGg
『게임 매니악스 액션 게임 알고리즘』 - 미리보기복연 이
액션 게임 기술을 총망라한 알고리즘 백과사전
게임의 백미는 역시 액션 게임! 이 책은 100개 이상의 상용 게임을 분석하여 이동, 점프, 공격, 무기, 지형 이용, 아이템 등 화끈하고 박진감 넘치는 액션을 선사하는 알고리즘 94가지를 총정리하였다.
『게임 매니악스 액션 게임 알고리즘』, 『게임 매니악스 퍼즐 게임 알고리즘』, 『게임 매니악스 슈팅 게임 알고리즘』, 『게임 매니악스 탄막 게임 알고리즘』으로 구성된 <게임> 시리즈는 게임 장르별 핵심 알고리즘을 일목요연하게 정리하여 이제 막 게임 개발에 뛰어든 이에게는 좋은 입문서가, 경력 많은 개발자에게는 옆에 두고 필요할 때 바로 찾아볼 수 있는 훌륭한 레퍼런스가 되어줄 것이다.
- 지은이 : 마츠우라 켄이치로, 츠카사 유키
- 옮긴이: Wisdom Teeth
- ISBN : 978-89-6848-206-9 93000
- 발행일 : 2015년 7월 1일
- 기타 : <게임> 시리즈
- 페이지수 : 564
- 정가 : 34,000원
안드로이드 앱/플랫폼 개발자가 알아야 할 종합 보안 안내서
안드로이드는 전 세계에서 가장 인기 있는 모바일 플랫폼으로 거의 모든 개인 정보의 허브가 되었다. 이미 해커들의 제1 공격대상이 된 안드로이드에서 신뢰받는 서비스로 성공하려면 플랫폼뿐 아니라 앱 개발자도 보안에 대해 적극적으로 배우고 대처해야 한다.
이 책은 안드로이드의 '앱 권한'과 '샌드박스 모델', '보안 강화 안드로이드'는 물론이고 좀처럼 정보를 얻기 힘든 dm-verity와 같은 기능까지 훌륭히 설명한, 안드로이드 개발자에게 꼭 필요한 지침서다.
- 지은이 : 니콜라이 옐렌코프
- 옮긴이: 강권학
- ISBN : 978-89-6848-197-0 93000
- 발행일 : 2015년 6월 1일
- 페이지수 : 488
- 정가 : 38,000원
이 책은 안드로이드를 임베디드 기기에 포팅, 확장, 커스터마이징하는 데 필요한 각종 기술적 궁금증을 해소해 주는 안내서다. 다가오는 사물인터넷 시대의 핵심 플랫폼이 될 안드로이드의 구조와 동작 원리를 이해하여 나만의 안드로이드 기반 제품을 만들 수 있는 지식과 기술을 습득하게 도와준다.
- 저자 : 카림 야크무르
- 역자 : 이성주
- ISBN : 978-89-6848-177-2 93000
- 발행일 : 2015년 4월 1일
- 페이지수 : 460
- 정가 : 27,000원
<철권> 개발자가 전하는 쉽고 재미난 게임의 원리
‘CEDEC AWARDS 2013 특별상 수상도서’
이 책은 게임기의 구조부터 애니메이션, 3D 그래픽, 수학과 물리까지, 게임 개발에 필요한 기본 기술과 원리를 가장 쉽게 설명한 개론서이다. 2000년부터 매년 열리고 있는 일본 최대의 개발자 콘퍼런스 CEDEC에서 2013년 특별상을 수상했다.
- 저자 : 도마에 요시키
- 역자 : 고승희
- ISBN : 978-89-6848-154-3 93000
- 발행일 : 2015년 1월 2일
- 페이지수 : 336
- 정가 : 25,000원
4. 행복한 프로그래밍(개정판) :
행복, 성취감, 도전정신! 신나는 프로그래밍 이야기
초판발행 2003년 5월 19일
개정판발행 2016년 11월 20일
지은이 임백준 / 펴낸이 김태헌
펴낸곳 한빛미디어(주) / 주소 서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부
전화 02–325–5544 / 팩스 02–336–7124
등록 1999년 6월 24일 제10–1779호 / ISBN 978–89–6848–470–4 93000
총괄 전태호 / 책임편집 김창수 / 기획・편집 이복연
디자인 표지 천승훈, 내지 강은영, 삽화 윤병철, 일러스트 홍혜은, 조판 이경숙
영업 김형진, 김진불, 조유미 / 마케팅 박상용, 송경석, 변지영 / 제작 박성우, 김정우
이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로
알려주십시오. 잘못된 책은 구입하신 서점에서 교환해 드립니다. 책값은 뒤표지에 표시되어 있습니다.
한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr
Published by HANBIT Media, Inc. Printed in Korea
Copyright 2016 임백준 & HANBIT Media, Inc.
이 책의 저작권은 임백준과 한빛미디어(주)에 있습니다.
저작권법에 의해 보호를 받는 저작물이므로 무단 복제 및 무단 전재를 금합니다.
지금 하지 않으면 할 수 없는 일이 있습니다.
책으로 펴내고 싶은 아이디어나 원고를 메일(writer@hanbit.co.kr)로 보내주세요.
한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.
6. 4 /
14년 전에 쓴 『행복한 프로그래밍』의 개정판을 내려니 감회가 새롭다. 책을
쓰던 내 모습이 기억에 선명한데, 그새 14년이 흘렀다는 것이 믿기지 않는다.
2003년, 미국에서 첫 직장인 루슨트테크놀로지스에 다니며 열심히 일하던
나는 어느 날 HR팀으로부터 연락을 받았다. 비자의 기한이 만료되었기 때문
에 당장 회사 일을 그만두어야 한다는 내용이었다. 회사 측의 실수였지만 다른
방법이 없었다. HR로부터 연락이 올 때까지 집에서 쉬어야 했다. 1달인가 1달
반 정도를 그렇게 쉬게 되었는데, 그땐 속이 상했지만 지금 생각하면 소중하고
의미 있는 휴식이었다. 내 인생에서 첫 책인 이 책을 쓸 수 있었기 때문이다.
이 책을 쓰고 나서 얼마 지나지 않아 월스트리트에 있는 금융회사로 자리
를 옮겼다. 그 이후 10년 동안 월가의 여러 회사에서 근무했고 지금은 애드
텍(ad tech) 분야의 스타트업에서 개발 업무를 총괄하고 있다. 이 책을 쓰던
2003년 무렵에는 확실히 프로그래밍이라는 행위에 대한 열정과 사랑이 온몸
을 휘감고 있었다. 그런데 지금은 코딩이 아닌 일에 대부분의 시간을 쓰는 사
지은이의 말
7. / 5
람이 되어버렸다. 14년 전에는 나 자신이 프로그래밍을 사랑하는 사람이었다
면, 지금의 나는 프로그래밍을 사랑하는 사람을 사랑하는 일종의 메타 프로그
래머가 된 느낌이라고 할까.
한빛미디어와의 인연은 그때부터 지금까지 계속되었다. 한빛미디어와 함
께 여러 책을 출간했고, 최근에는 <팟캐스트 나는 프로그래머다>의 후원도 받
고 있다. <RT:FM>이라는 한빛미디어의 개발자 행사와 <나프다>의 행사를 합
쳐서 하나의 행사를 진행하는 것도 횟수를 거듭하고 있다. 14년 전에 앞니가
빠진 채 무릎이 튀어나온 잠옷을 입고 집을 돌아다니며 까불던 딸은 지금 대학
생이 되었고, 당시 김대중 대통령이었던 한국의 대통령이 3번 바뀌는 동안 내
가 애용하는 프로그래밍 언어도 여러 번 바뀌었다.
작년인가 올해 초에 한빛미디어와 이 책의 개정판을 내자는 계획을 처음 논
의한 후 마음속에 욕심이 생겼다. 첫 책인 이 책을 전보다 예쁘게 다듬어서 내
보내고 싶은 생각을 하게 된 것이다. 14년 전에 쓴 내용 중에서 지금 보기에 낡
은 부분을 대폭 잘라내고 2016년의 시점에 맞는 이야기를 채워 넣고 싶은 생각
이 들었다. 그런 생각을 품은 채 몇 달의 시간을 보냈다. 그러는 동안 계속 팟캐
스트 방송 활동을 하고, 다른 책을 쓰고, 컨퍼런스를 위해 한국을 방문하고, 점
점 분주해지는 회사 일을 열심히 했다. 그렇게 지내면서 ‘그분’이 오기를 기다
렸다.
도저히 글을 쓰지 않고는 배길 수 없는 순간. 너무 낯설고 강렬하기 때문
에 내면에서 올라오는 힘이라고 믿기 어려운 힘. 미지의 영역에서 일부러 나를
찾아온 ‘그분’이 전해주는 힘이라고 밖에 설명할 길이 없는 그 힘이 온몸을 휘
8. 6 /
감는 순간. 그때 키보드를 들고 글을 써 내려 가기 위해서 열심히 그분을 기다
렸다. 지금까지 쓴 10여 권의 책은 늘 그분이 와서 힘을 전해줄 때, 비로소 쓸
수 있었기 때문이다. 하지만 너무 분주한 탓인지 그분은 끝끝내 나를 찾지 않
았다. 그래서 책의 내용을 대폭 수정하는 대신, 1장부터 4장에 이르는 내용을
읽으면서 오류를 바로잡고, 지나치게 오래된 사실이나 비유를 수정하고, 군데
군데 현재의 생각과 이야기를 추가하는 데 만족할 수밖에 없었다. 그런 면에서
이 책은 개정판이지만 개정의 폭은 소폭에 그쳤다.
어쩌면 그게 더 나을지도 모르겠다. 14년 전에 탄생한 이 책에는 자기만의
운명이 있는 것일지도 모르니까. 원고 작업은 부분적인 개정에 그쳤지만 수정
된 원고는 지금 읽어도 그렇게 어색하지 않다. 독자 여러분의 눈에도 그럴 거
라고 믿는다. 프로그래밍 세계의 기술은 지난 14년 동안 엄청나게 변했지만,
‘행복’과 ‘프로그래밍’이라는 두 개의 핵심 주제는 조금도 달라지지 않았기 때
문이다. 『행복한 프로그래밍』이라는 이 책의 주인공은 앞으로도 아주 오랫동안
달라지지 않을 것이다.
게으름을 부리는 나를 참을성 있게 기다려준 한빛미디어의 이복연 님께 특
별한 고마움을 전하고 싶다. 개정판에 담고 싶었지만, 그분이 찾아와 주지 않
은 탓에 쓸 수 없었던 이야기는 다른 책을 통해서 쓸 것을 약속한다. 휴식이 필
요한 모든 프로그래머에게 이 책을 바친다. 지치지 말고 행복하자.
2016.9.17
뉴저지에서임백준
9. / 7
프로그래밍의행복과매력
지은이의 말
(초판)
책 제목에 ‘프로그래밍’이라는 말이 들어가면 사람들은 대개 기술적이거나 전
문적인 내용을 다루는 책을 떠올리기 마련이다. 하지만 ‘행복한 프로그래밍’이
라는 제목에서 내가 중점을 둔 부분은 ‘프로그래밍’이라는 명사가 아니라 ‘행복
한’이라는 형용사다. 다시 말해서 이 책은 특정한 기술이나 전공 지식이 아니
라 컴퓨터 프로그래밍 속에 담긴 미학(美學)을 전달하려는 ‘소프트’한 이야기를
담았다. 여기서 ‘미학’이란 대단한 것이 아니다. 그것은 바로 프로그래머라면
누구나 느끼기 마련인 프로그래밍이라는 행위 안에 담겨 있는 ‘행복’이나 ‘매력’
을 지칭하는 말이다.
한 분야의 ‘미학’을 다루는 일은 보통 그 분야에서 일가(一家)를 이룬 사람
이거나 아니면 그 분야의 미학적 측면을 전문적으로 공부한 사람이라야만 할
수 있는 일이라고 여긴다. 그렇지만 나는 프로그래밍에서 ‘일가’는 커녕 그 근
처에도 가지 못한 평범한 프로그래머로서 프로그래밍의 ‘미학’에 대해서 전문
적으로 공부한 적도 없다. 그럼에도 감히 프로그래밍의 ‘미학’을 이야기하는 책
10. 8 /
을 쓰려고 한 이유는 단지 하나였다. 프로그래밍이라는 나의 ‘연인’이 지닌 아
름다움을 독자에게도 소개해주고 싶었기 때문이다.
이 책의 독자로 가장 적절한 사람들은 평소에 컴퓨터나 프로그래밍에 관심
이 있었지만 프로그래밍을 본격적으로 시작할 기회를 미처 갖지 못했던 사람
이나 프로그래밍을 이미 전문적으로 수행하고 있는 직업 프로그래머가 될 것
이다. 또한 기술적이고 전문적인 이야기를 최대한 절제하면서 쉽게 읽히는 글
을 쓰려고 노력했으니 프로그래밍과 관련이 없는 일반 독자도 컴퓨터 프로그
래밍에 대한 최소한의 흥미와 호기심만 있으면 큰 어려움 없이 읽을 수 있을
것이다.
‘행복’과 ‘매력’이라는 것은 칼로 무를 베듯이 정확하게 나눌 수 있는 대상
이 아니기 때문에 이야기를 풀어내기 위한 소재를 되도록이면 여러 곳에서 찾
으려고 노력했다. 그렇게 선택한 이야기의 소재는 프로그래밍 언어, 객체, 알
고리즘 속도 분석, 비밀번호 해킹, 이진수 원리, 생활 속에 숨어 있는 알고리
즘, C++ 언어와 자바(Java) 언어의 탄생 배경, 흥미로운 버그(bug) 이야기,
여러 가지 퀴즈, 콘웨이(John Conway) 교수의 인생 게임(Game of Life),
암호화, 가상 화폐 등에 이르기까지 다양하다. 이야기할 때는 가급적 골치 아
픈 수식이나 프로그램 소스 코드를 최소화하는 대신 쉬운 비유를 많이 이용해
서 분위기를 부드럽게 유지하려고 노력했다.
노력은 했지만 부족한 실력으로 여러 가지 이야기를 다뤘기 때문에 독자
여러분이 읽기에 다소 산만한 부분도 있을 것이다. 그리고 원론적인 이야기를
아주 피해갈 수는 없었기 때문에 자칫 지루하게 느껴지는 부분도 있을 것이다.
11. / 9
또한 이론적이거나 기술적인 부분은 쉽게 설명하려고 노력했지만 프로그래밍
경험이 없는 사람들이 이해하기에는 어렵고 딱딱하게 느껴지는 부분도 있을
것이다. 본문에서 등장하게 되는 ‘전문 용어’를 쉽게 풀어쓸 것인가를 놓고도
많이 고민했지만 혹시라도 내용의 정확성을 해칠까 염려되어 그냥 두기로 했
다. 이런 부분은 모두 내 역량이 부족하기 때문에 극복하기 어려웠던 사항이므
로 독자 여러분의 너그러운 이해를 구할 뿐이다.
정보나 사실을 이야기할 때는 내용의 정확성을 위해서 자료와 출처를 거
듭 확인하면서 신중을 기했지만 날카로운 독자들의 눈에는 여전히 허점이나
부정확한 부분(버그!)이 발견될 수도 있을 것이다. 이런 부분을 발견한 분들은
한빛미디어의 웹사이트(http://hanbit.co.kr)를 방문하거나 baekjun.lim@
gmail.com으로 이메일을 보내서 지적해주기 바란다.
출판의 기회를 주신 한빛미디어 김태헌 사장님과 유해룡 편집장님 그리고
늑장을 부리는 나를 참을성 있게 기다려주면서 여러 가지 조언을 아끼지 않은
한빛미디어의 임성춘 팀장과 홍원규 팀장께 감사한다.
엉성한 초고를 검토하고 유익한 비평을 해준 신경근, 조미정, 박기원, 이
경호, 이창신 그리고 김병준, 김우식 님께 감사를 드린다. 끝으로 책을 쓰는 동
안 깊은 사랑과 격려를 보내준 아내 김희성에게 고마움을 전한다.
인류 문명의 젖줄인 티그리스 강, 유프라테스 강 유역에서 벌어진 전쟁은
이라크 땅의 생명을 시들게 할 뿐만 아니라 전 인류의 양심과 영혼을 황폐하게
하였다. 특히 미국 땅에서는 전쟁의 불가피성을 거론하면서 미국의 군사 행동
을 지지하는 사람과 이라크 침략을 수치스러운 범죄 행위로 간주하는 사람들
12. 10 /
사이의 논쟁이 끊이지 않았다. 이제 (끔찍한) 논쟁의 초점이 우리의 땅인 한반
도로 옮겨가고 있어서 마음이 무겁다. 부디 전쟁으로 무고한 생명이 고통받는
일이 지구상에서 다시는 되풀이되지 않기를 진심으로 기원한다.
2003.5.6
뉴저지에서임백준
13. / 11
모든 로직은
프로그래머의 머릿속에서 나오고
모든 미래는
프로그래머의 손끝에서 이루어진다.
진정 행복한 프로그래머만이
행복한 미래를 만들 수 있다!
14. 12 /
목차
1장.
아침7시카페오레
프로그래밍의세계
첫번째. 행복과 성취감 / 18
두번째. 프로그래머가 느끼는 성취감의 본질 / 28
세번째. 이진수로 이뤄진 가상의 세계 / 38
네번째. 이진수 시스템의 발견 / 47
다섯번째. 비트의 법칙 / 54
여섯번째. 영혼을 녹여서 만드는 아름다운 공식 / 62
알고리즘1-1. 피보나치 수열 알고리즘 / 68
알고리즘1-2. 러시아 농부 알고리즘 / 72
지은이의 말
15. / 13
2장.
오전10시에스프레소젤라틴
행복한프로그래밍
첫번째. 알고리즘의 이해 / 78
두번째. 생활 속에 숨어 있는 알고리즘 / 85
세번째. 프로그래밍 언어와 컴파일러 / 94
네번째. 언어의 모호성 / 100
다섯번째. 북풍표국의 냉혈독마 / 108
여섯번째. 빠르게 점점 빠르게 / 113
일곱번째. 소프트웨어 공포 이야기 / 122
여덟번째. 뫼비우스의 띠 / 132
알고리즘2-1. 알고리즘의 속도 비교하기 / 147
알고리즘2-2. 우주왕복선 버그 찾기 / 149
16. 14 /
3장.
오후1시카페에스프레소
알고리즘과해킹의세계
첫번째. 세일즈맨의 여행 / 156
두번째. 복잡성 이론 / 164
세번째. 블록버스터 해킹하기 / 172
네번째. 비밀번호 해킹 / 181
다섯번째. 인터넷 뱅킹은 안전한가 / 191
여섯번째. 가상 화폐 알고리즘 / 202
일곱번째. 비트코인 / 211
여덟번째. 콘웨이의 인생 게임 / 217
알고리즘3-1. 숫자 바꾸기 알고리즘 / 226
알고리즘3-2. 단어 뒤집기 알고리즘 / 229
목차
17. / 15
4장.
오후4시카페그린
소프트웨어바깥이야기
첫번째. 프로그래머의 손끝 / 234
두번째. 소설처럼 읽히는 프로그램 / 239
세번째. 비야네 스트롭스트룹의 삼단 논법 / 246
네번째. 웹 브라우저 혁명 / 252
다섯번째. 듀크, 세상을 놀라게 하다 / 258
여섯번째. 프로그래머의 논쟁 / 266
일곱번째. 소프트웨어 설계자 / 275
여덟번째. 인터넷 대란 / 281
아홉번째. 전설의 해커, 케빈 미트닉 / 289
에필로그
18.
19. 커피와 우유라는 의미인 카페오레는 프랑스식 모
닝 커피다. 대개 에스프레소와 같은 진한 커피를
마시는 유럽 사람들이 아침에 위의 부담을 줄이
기 위해서 커피에 우유를 타서 먹은 것이 카페오
레의 시작이라고 한다. 한 잔의 부담 없는 카페오
레를 마시면서 가상 세계와 비트의 법칙 등을 통
하여 프로그래밍의 세계를 알아본다.
1.
장.
아침7시카페오레
프로그래밍의세계
20. 18 / 행복한 프로그래밍
벨 연구소(Bell Labs)는 프로그래머들에게 C, C++ 언어와 유닉스
(Unix) 운영체제의 산실로 유명하다. 이 벨 연구소가 속한 통신 장비 회
사인 루슨트테크놀로지스(Lucent Technologies)는 미국 동부의 뉴저지
(New Jersey) 주에 있다. 지금은 프랑스의 통신 회사인 알카텔(Alcatel)
에 합병되어 알카텔-루슨트로 이름이 바뀌었지만 인터넷 열풍이 한창이
던 1990년대 말 루슨트의 위상은 라이벌인 시스코, 노벨과 더불어 대단한
위치를 차지했다.
남부나 서부의 커다란 주에 비하면 크기가 작은 편에 속하는 뉴저지
주는 남북으로 흐르는 허드슨 강을 끼고 뉴욕 맨해튼과 마주 보고 있다.
밤에 차를 타고 강변으로 나서면 아름다운 뉴욕의 스카이라인을 볼 수 있
다. 루슨트의 본사는 뉴저지 한복판에 있는 머레이 힐(Murray Hill)이라
는 도시에 있다. 그 밖에 다른 도시에도 루슨트의 건물이 존재한다.
그중에서 광통신과 관련된 그룹은 홈델(Holmdel)이라는 작고 아담한
행복과성취감
첫 번째.
21. / 191장. 아침 7시 카페오레 - 프로그래밍의 세계
마을에 자리 잡고 있었다. 홈델은 미국의 전형적인 중산층(혹은 상류층)이
모여 사는 조용하고 차분한 시골 마을이다. 가을이 되면 근처의 호박 농장
에서 ‘할로윈’을 위한 상점이 열려서 아이들과 함께 호박을 구경하고, 호박
으로 만든 주스나 파이를 먹고 오리, 닭, 돼지, 말 같은 친근한 동물들과
어울려 하루를 보낼 수도 있다. 밤늦게 퇴근하는 날에는 커다란 회사 주차
장을 돌아서 좌우에 나무가 우거진 좁은 길로 들어서면 숲에서 무리 지어
걸어 다니는 야생 사슴의 눈이 환하게 빛나는 것을 볼 수 있을 정도다.
홈델에 있는 루슨트 빌딩은 작은 도시를 연상케 할 만큼 여러 시설을
갖추고 있었다. 언제든지 책을 빌려 볼 수 있는 도서관부터 은행, 우체국,
식당, 카페, 피트니스 클럽, 극장식 강당에 이르는 다채로운 시설은 언제
나 이용하는 사람들로 북적거렸다. 벨 연구소의 연구원들과 엔지니어들은
생기가 넘쳤고 세계에서 몰려든 손님과 견학 온 외부 사람들은 건물 구석
구석을 활기차게 돌아다녔다.
7,000여 명을 수용하는 건물에 자리가 모자라서 복도를 막고 칸막이
를 세워서 방을 만들기도 했다. 더 나은 일자리를 찾아서 떠나는 사람도
많았지만 (1990년대 후반에는) 새로 들어오는 사람이 훨씬 더 많았다.
그렇지만 내가 입사한 후 2~3년 만에 모든 것이 달라졌다. 닷컴 거품
의 붕괴와 더불어 미국과 유럽의 통신 시장은 전례가 없는 극심한 불황에
빠졌다. 자본주의 시스템의 어쩔 수 없는 한계가 겉으로 드러나며 통신 시
장은 ‘과잉 투자’ 혹은 ‘중복 투자’라는 직격탄을 맞았다. 시장의 추락은 2
년이 넘도록 끝을 모르고 계속되었다. 경기의 전반적인 후퇴가 빠른 속도
로 내려앉는 행글라이더였다면 루슨트를 비롯한 통신 장비 회사가 맞이한
위기는 아무런 장애가 없는 수직 낙하와 다름없었다. 급속도로 진행된 구
조 조정은 홈델 건물에 있던 직원에게도 예외가 아니어서 7,000명을 넘던
22. 20 / 행복한 프로그래밍
사람들은 순식간에 불과 수백 명 정도로 줄어들었다.
많은 사람이 자기가 쓰던 물건을 커다란 박스에 담아서 차에 싣고 회
사를 떠났다. 직장을 잃은 한국 엔지니어 중에서는 미국에서 다른 일자리
를 찾다가 합법적인 비자 상태를 유지하지 못해 어쩔 수 없이 고국으로 돌
아가는 경우도 발생했다. 어수선한 와중에 미국 대통령이 새로 선출되었
고 얼마 뒤에 발생한 세계 무역 센터 붕괴 사건(일명 9.11 테러 사건)을
기점으로 ‘테러’라는 말과 ‘전쟁’이라는 말은 모든 이성적인 논의를 압도하
면서 미국 사회를 흉흉하게 만들었다. ‘주식 투자’와 ‘벤처 회사’에 쏠리던
사람들의 관심은 ‘대량 살상 무기’와 ‘전쟁’ 그리고 ‘경기 회복 가능성’에 집
중됐다. 사무실의 80% 이상이 비어서 깊은 어둠에 잠긴 홈델의 건물처럼
사람들의 머리 위에는 검은 구름이 짙게 모여들었다.
검은 구름이 본격적으로 모여들기 전인 2001년 어느 여름날, 나는 사
무실에 밤늦게 남아서 서너 명의 프로그래머와 함께 조그만 노트북 컴퓨
터의 화면을 뚫어지게 바라보고 있었다. 저녁을 부실하게 먹은 사람은 밤
참이 생각날 만한 밤 10시쯤이었으니 아마 사람들의 손에는 피자 조각이
나 팝콘 봉투 같은 것이 들려 있었을 것이다. 아무도 말을 하지 않아서 침
삼키는 소리가 들릴 정도로 조용한 가운데 내 손은 인터넷 익스플로러의
주소창에 빠른 속도로 어느 웹 서버의 주소를 입력했다. 그러자 모두에게
낯익은 페이지가 나타나서 사용자 아이디와 비밀번호를 물어봤고 내 손은
더욱 빠른 속도로 아이디와 비밀번호를 입력한 다음 엔터키를 힘차게 눌
렀다.
로그인 이후에 나타난 화면은 가운데에 엑셀 스프레드시트와 같은 모
양의 테이블을 보여주고 있었는데, 속은 비어 있었다. 이 화면이 모니터에
완전히 나타나는 데에는 대략 2초의 시간이 걸렸다. 사람들의 시선은 텅
23. / 211장. 아침 7시 카페오레 - 프로그래밍의 세계
비어 있는 테이블에 집중되었고 그런 상태에서 3초 정도의 시간이 더 흘
렀다. 3초의 시간이 흐르는 동안 사람들의 눈은 화면에 좀 더 가까워지고
눈동자도 조금씩 더 커졌다. 누군가는 침을 꿀꺽 삼키기도 했을 것이다.
그렇게 3초가 흐르자 마술이라도 부린 것처럼 비어 있던 테이블에 숫
자와 문자로 이뤄진 데이터가 가득 나타났다. 데이터로 꽉 찬 테이블은 우
리의 눈앞에서 으스대기라도 하는 것처럼 당당한 표정을 지었다. 나는 자
리에서 벌떡 일어나면서 주먹을 쥐었고 사람들은 서로 ‘하이파이브’를 주
고받았다. 영국의 시골 마을인 맘스베리(Malmesbury)와 홈델을 오고 가
면서 수 개월에 걸쳐서 설계하고 프로그래머 여러 명이 매달려서 다시 수
개월 동안 개발한 소프트웨어가 마침내 눈앞에 살아 있는 생물로 태어나
는 순간이었다.
내가 엔터키를 두드렸을 때 인터넷 익스플로러는 문자로 입력된 웹사
이트 주소를 근처에 있는 DNS 서버로 보내서 숫자로 된 주소 값(IP 주소)
을 알아냈을 것이다. 다음에는 입력된 정보를 HTTP에 맞게 재구성하여
노트북에서 사용하는 운영체제인 윈도우 2000에 넘겨주었을 것이다. 윈
도우 2000에서 네트워크를 담당하는 프로그램은 다시 그 정보를 패킷이
라는 작은 조각으로 나눠서 컴퓨터에 연결된 랜선을 통해 컴퓨터의 바깥
으로 내보냈을 것이다. 그러면 회사 내부의 네트워크와 회사 바깥의 네트
워크를 구분하는 관문(gateway) 역할을 하는 프록시(proxy) 서버가 패
킷을 읽어서 웹 서버의 주소를 알아낸 다음 그 패킷을 해당 웹 서버로 보
냈을 것이다.
아직 더 남았다. 웹 서버가 실행되고 있는 컴퓨터의 운영체제인
HP-UX라는 유닉스 시스템은 자기에게 전달된 패킷을 모두 모아서 원
래의 HTTP에 맞는 정보로 재구성한 다음 그것을 아파치(Apache)라
24. 22 / 행복한 프로그래밍
는 웹 서버로 전달했을 것이다. 아파치 웹 서버는 다시 그 정보를 톰캣
(Tomcat)이라는 귀여운 이름을 가진 프로그램에 전달했을 것이고, 톰캣
은 그렇게 전달된 정보를 이용해서 HTML 문서를 만들고 그것을 다시 아
파치에 돌려주었을 것이다. 이렇게 아파치에 전달된 HTML은 HP-UX
유닉스 시스템에 전달되어 작은 패킷들로 나뉘고 그것이 노트북 컴퓨터
의 윈도우 2000 시스템에 전달되어 원래의 HTML 문서로 재구성된 다음,
마침내 인터넷 익스플로러 화면 위에 나타나게 된 것이다. 이 모든 과정에
걸린 시간이 처음의 2초에 해당한다.
그 다음에 일어난 3초 동안의 여행은 더 복잡하다. 이 여행은 톰캣에
서 끝나는 것이 아니라 톰캣을 넘어서 자바라는 프로그래밍 언어로 작성
된 소프트웨어에 연결되고, 코바(CORBA)라는 통신 소프트웨어를 지나
서 저 멀리 깊은 곳에 숨어 있는 데이터베이스의 주머니를 꼼꼼하게 뒤져
서 데이터를 꺼내 와야 하는 멀고도 험난한 여행이다. 이렇게 긴 여정 동
안 우리의 비트와 바이트가 아주 작은 돌부리에 발이 채여 넘어지기만 해
도 노트북 컴퓨터 화면에는 우리가 기다리고 있는 데이터 대신 반갑지 않
은 오류 메시지가 나타났을 것이다.
이렇게 여러 계층의 소프트웨어들이 네트워크를 통해서 정보를 주고
받는 복잡한 소프트웨어 시스템을 개발할 때에는 프로그래머 여러 명이
일을 나눠 맡는 ‘분업’이 불가피하다. 그렇지만 여러 사람이 개발한 소프트
웨어를 연결해서 하나의 시스템으로 통합하는 과정도 간단하지 않다. 소
프트웨어가 갖춰야 하는 기본적인 기능에 대한 분석부터 필요한 기술의
선택, 설계 방향과 철학, API(Application Programming Interface) 구
현에 이르는 모든 단계가 사람과 사람 사이의 의사소통과 협력을 끊임없
이 요구하기 때문이다.
25. / 231장. 아침 7시 카페오레 - 프로그래밍의 세계
당시에 내가 있는 홈델 팀과 프로젝트를 나눠 맡았던 다른 프로그래머
들은 런던에서 서쪽으로 자동차로 1시간 정도 달리면 나오는 맘스베리라
는 아담하고 고풍스러운 도시에서 일하고 있었다. 소프트웨어에 대한 고
객의 요구사항을 분석하는 단계와 초기의 설계 과정은 너무나 중요하기
때문에 대서양(그리고 6시간에 이르는 시차)을 사이에 두고 전화와 이메
일만으로 소통하며 작업하기에는 불편한 점이 많았다. 그래서 초기의 설
계 과정에 참여한 홈델의 리더들과 맘스베리의 리더들은 비행기를 타고
대서양을 수시로 넘나들며 만나 끊임없이 토론하고 논쟁했다.
∶ 3초 동안의 여행
26. 24 / 행복한 프로그래밍
∶ 맘스베리 시내 한복판에 있는 15세기 석조 건물 마켓 크로스
맘스베리는 5분 정도 걸으면 시내를 전부 돌아볼 수 있을 정도로 아담
하고 오래된 도시였다. 시내 외곽의 집들은 옛날에 도시를 방어하기 위한
성벽으로 이용되었기 때문에 한 치의 빈틈도 없이 다닥다닥 붙어 있었다.
말하자면 오늘날의 사람들이 과거의 성벽을 집으로 삼아서 살고 있는 셈
이다. 시내를 내려다보는 언덕 위에는 800살이 넘었음에도 지금까지 예배
에 이용되고 있는 애비(Abbey)라는 고풍스러운 교회가 서 있다. 아름다
운 애비의 모습은 마치 중세와 현대의 아름다운 조화를 바라보는 듯한 느
낌을 주었지만 한편으로는 이미 기운을 잃은 과거의 영화를 쓸쓸하게 바
27. / 251장. 아침 7시 카페오레 - 프로그래밍의 세계
라보는 것 같은 느낌을 주기도 했다. 오래된 역사의 흔적이 전해주는 깊은
맛 같은 것은 있었지만 미국에서 느끼게 되는 오만에 가까운 강자의 여유
나 우리나라에서 느끼게 되는 부글부글 끓는 뜨거운 열기 같은 것을 영국
에선 찾아보기 어려웠기 때문이었을 것이다. 하지만 밤에 좁고 가느다란
찻길을 꾸불꾸불 돌아서 시내에 나가 마셨던 이름 모를 맥주의 맛은 너무
나 상쾌했고 아담한 바의 다정하고 이국적인 분위기는 아직도 기억에 생
생하게 남아 있다.
초기의 설계 과정은 전혀 평탄하지 않았다. 서로 이견이 좁혀지지 않
아서 토론이 격해지면 자리에서 벌떡 일어나 문을 닫고 나가는 사람이 있
을 정도로 힘든 과정이었다. 차세대 네트워크 관리 프로그램을 인터넷
기반으로 만들 것인가 아니면 기존대로 클라이언트-서버 방식으로 만
들 것인가, 데이터 프로토콜은 XML을 이용할 것인가 아니면 직렬화된
(serialized) 자바 객체를 사용할 것인가, 분산 객체 사이의 통신은 RMI를
이용할 것인가 아니면 코바를 이용할 것인가 등 어느 것 하나 쉽게 결정하
기 어려웠다.
한쪽에서 작성한 보고서나 제안에 대해서 다른 한쪽은 상당히 날카롭
고 깊이 연구된 기술적인 비평을 가했다. 그러한 비평에 대한 체계적인 반
론이 가해지면 한층 심화된 논쟁이 시작되었다. 말하자면 초기의 설계 과
정은 대서양을 사이에 둔 전면적인 포격전 양상으로 진행됐다. 프로그래
머라는 사람들이 무엇 하나에 대해서도 쉽게 동의를 하지 않는 것으로 정
평이 나있지만, 영국 프로그래머들의 꼼꼼하고 철두철미한 문제 제기는
배울 점이 많은 반면 상대하기 힘들 때도 많았다.
그렇지만 출장을 가면 저녁에 가까운 바에 나가서 맥주나 포도주를 같
이 마시기도 하고 집으로 초대해서 저녁을 같이 먹기도 하는 정겨운 모습
28. 26 / 행복한 프로그래밍
은 어쩐지 한국 사람들의 정서와 많이 가깝다는 인상을 주었다(특히 술이
오르면 직장 상사를 안주 삼으며 즐거워하는 모습은 완전히 똑같았다).
한번은 홈델에서 함께 일하던 여성 개발자와 함께 맘스베리로 출장을
갔다. 영국 측 기술 리더인 아하도가 우리 둘을 저녁 식사에 초대했다. 미
국에 비해서 모든 것이 작고 아담한 유럽의 나라답게 집도 저녁 테이블도
매우 아담했다. 아하도 부부와 초대된 우리 둘이 자리에 앉자 더 이상 움
직일 공간이 없을 정도로 작은 다이닝룸이었다. 서로 얼굴이 닿을 지경으
로 둥그렇게 둘러앉아 빵을 수프에 찍어 먹으며 안주인의 생선요리를 칭
찬했던 기억이 난다. 미국 생활 초기이기도 했지만, 그들 부부의 영국식
발음을 이해하는 것이 너무 힘들어서 대화는 어려웠다.
식사가 끝나자 맥주와 차를 마시며 잡담을 나누었다. 술이 오르자 기
술 리더가 담배를 꺼내서 피우기 시작했고, 함께 갔던 여성 개발자가 자기
도 피우고 싶다며 동참하고, 왠지 나도 그래야 할 것 같아서 동참하는 바
람에 좁은 부엌이 순식간에 너구리굴이 되었다. 맥주를 많이 마신 주인은
기타 비슷하게 생긴 작은 악기인 우쿨렐레를 꺼내 들고 이상한 노래를 흥
얼거렸고, 우리는 계속 맥주를 마시며 목소리를 높였다. 그때의 그 이상한
조합과 분위기가 내 기억에 강한 인상을 남겼다.
노인에 가까운 키가 작고 깡마른 영국 개발자, 그의 부인, 쾌활하고 아
름다운 미국의 젊은 여성 개발자, 그리고 영어를 제대로 못해서 어리바리
한 한국 개발자. 이렇게 이상한 조합이 모여서 묘하게 흥겨운 분위기를 연
출했다. 기술 리더는 홈델에서 제안하는 내용에 대해서 지나칠 정도로 꼼
꼼하게 비평을 하는 맘스베리쪽 선임 개발자를 이해해달라며 화해의 제스
처를 취하기도 했다.
이렇게 힘들고 어려운 과정을 거쳐서 탄생한 설계도는 마침내 여러 프
29. / 271장. 아침 7시 카페오레 - 프로그래밍의 세계
로그래머가 참여하는 개발의 과정을 거치면서 살아 있는 소프트웨어로 성
장해나가기 시작했다. 프로그램을 짜는 사람들에게 ‘개발’의 과정은 가장
힘이 들면서도 동시에 제일 즐거운 과정이다. 새로운 프로그래밍 언어를
습득하고, 새로운 도구를 손에 익히고, 절묘한 프로그래밍 기법을 터득하
고, 자신이 작성한 프로그램이 매끄럽게 실행되어 원하는 결과를 내놓는
것을 확인하는 일 속에는, 프로그램을 짜는 사람만 알 수 있는 말로 표현
할 수 없는 행복이 고스란히 녹아들어 있다.
프로그램을 짠다는 것은 말하자면 얼굴을 두 손에 파묻고 머리를 벽에
찧어가면서 깨달은 어떤 아름다운 공식을 컴퓨터에게 다정하게 가르쳐주
는 행위다. 프로그래머가 프로그래밍 언어를 통해서 컴퓨터에게 할 일을
가르쳐주면 컴퓨터는 이 세상에서 가장 성실한 일꾼의 모습으로 주어진
일을 묵묵히 수행한다. 이렇게 컴퓨터와 단둘이 남아서 대화를 나눌 때,
혹은 컴퓨터가 자신이 시킨 일을 성실하게 수행하는 모습을 지켜볼 때, 프
로그래머는 이 세상에서 가장 행복한 사람이 된다.
그 여름 밤 좁은 사무실에 모여서 모니터 위에 뿌려진 데이터를 지켜
보며 환호성을 지른 우리의 기쁨은 프로그래머라면 누구나 공감할 성취감
의 절정이었다. 축구 선수가 골을 넣었을 때, 혹은 야구 선수가 홈런을 때
렸을 때, 아니면 정치가가 선거에서 자신의 승리를 확인했을 때 느끼는 환
희가 아마 이와 비슷할 것이다. 한국 같았으면 나는 내 방에 있던 사람들
에게 근처에 있는 ‘소줏집’에라도 가자고 했을 것이다. 하지만 풀벌레 울음
소리만 가득한 잔디밭과 사슴들이 사는 숲이 우거진 시골에서, 그것도 한
밤중에 축하주를 마시러 나간다는 것은 무리였기 때문에 우리는 조용히
각자의 집으로 돌아갔다. 그렇지만 그 자리에 있던 프로그래머들은 모두
달콤한 성취감을 느끼면서 깊은 단잠을 잘 수 있었을 것이다.
30.
31. / 772장. 오전 10시 에스프레소 젤라틴 - 행복한 프로그래밍
뜨겁고 진한 에스프레소 커피 위에 달콤한 젤라
틴을 띄워서 크림처럼 녹여 먹는다. 이탈리아풍
의 빈 커피라고도 불린다. 오전 10시면 하루 중에
서 일의 능률이 가장 높을 때다. 에스프레소 젤라
틴을 마시면서 알고리즘이 무엇인지, 프로그래밍
언어가 무엇인지를 알아보자. 참, 재미있는 버그
이야기와 무협지도 한 꼭지 들어있다.
2.
장.
오전10시에스프레소젤라틴
행복한프로그래밍
32. 78 / 행복한 프로그래밍
도널드 커누스 교수의 「컴퓨터 프로그래밍의 기술(The Art of
Computer Programming)」은 <아메리칸 사이언티스트(American
Scientist)>가 1999년에 선정한 20세기를 빛낸 논문 12개에 이름을 올렸
다. 이 12개에는 아인슈타인의 상대성 이론, 만델브로트의 프랙털, 러셀
과 화이트헤드의 수학적 기초, 폰 노이만과 모르겐스턴(Morgenstern)의
게임 이론, 파인만의 양자 전기역학(quantum electrodynamics)에 대한
논문 등이 포함되어 있었다. 말하자면 컴퓨터 프로그래밍 알고리즘을 집
대성한 커누스 교수의 책은 양자역학이나 상대성 이론과 같은 과학적 성
과와 어깨를 나란히 한 셈이다.
프로그래밍을 처음 시작하는 사람들이 브라이언 커니핸(Brian
Kernighan)과 데니스 리치(Dennis Ritchie)의 『C 언어 프로그래밍』(휴
먼싸이언스, 2016)을 찾아서 읽는다면, 프로그래밍 실력이 일정 수준에
도달한 사람들은 대개 한 번쯤은 커누스 교수의 책을 찾는다. 두툼한 책
알고리즘의이해
첫 번째.
33. / 792장. 오전 10시 에스프레소 젤라틴 - 행복한 프로그래밍
네 권으로 이뤄진 커누스 교수의 책은 깊이 있는 프로그래밍을 원하는 사
람들에게는 필독서로 통하기 때문이다. 그렇지만 책의 제목만 보고 이 책
에서 특정한 프로그래밍 언어로 작성된 프로그램 코드를 기대하는 사람은
실망하게 될 것이다. 책을 읽은 사람은 알겠지만 커누스 교수의 책은 프로
그램 소스 코드가 아니라 수학적 명제와 명제에 대한 증명, 연습 문제, 그
리고 알고리즘만으로 가득 차 있기 때문이다.
이것은 ‘컴퓨터 프로그래밍의 기술’과 ‘프로그래밍 언어’가 동일한 대
상이 아니라는 사실을 의미한다. 프로그램을 처음 시작하는 사람이 주
로 관심을 갖는 부분은 특정한 프로그래밍 언어의 문법과 API인 경우가
많지만, 프로그래밍의 본질은 프로그래밍 언어에 담겨 있는 것이 아니
라 수학적 논리 체계, 즉 알고리즘에 담겨 있다. 『The Art of Computer
Programming(개정3판)』(한빛미디어, 2006)이라는 선언적인 제목을 달
고 있는 커누스 교수의 책에는 그래서 (붕어빵에 붕어가 없는 것처럼) 프
로그래밍 언어가 등장하지 않는다.1
대신 프로그래밍에 필요한 여러 알고
리즘을 깊이 있고 풍부한 수학 공식을 이용해서 해설하고 있다.
프로그래밍 세계에서 널리 사용하는 용어인 알고리즘은 8~9세기 아
랍에서 유명한 수학자였던 아부 압둘라 무함마드 이븐 무사 알콰리즈미
(Abu Abdullah Muhammad ibn Musa al-Khwarizmi)의 이름에서
유래한 말이다. 옛날에 코미디언 서영춘 씨가 즐겨 부르던 ‘김 수한무 거
북이와 두루미 삼천갑자 동방삭 치치카포 사리사리센타’에 버금가는 기
다란 이름인데, 그의 마지막 이름인 ‘알콰리즈미’가 변형되어 ‘알고리즘’이
된 것이라고 한다.
1 물론 알고리즘을 설명하기 위한 유사(pseudo) 프로그래밍 언어나 어셈블리(Assembly)어 정도는 등장한다.
34. 80 / 행복한 프로그래밍
: 1983년 소비에트 연방에서 발행한 알콰리즈미 우표
생각해보면 알고리즘이라는 말의 기원을 제공한 알콰리즈미가 수학자
였다는 사실과 커누스 교수의 책이 수학 공식으로 가득 차 있다는 사실은
우연이 아니다. 그것은 알고리즘 자체가 사실은 수학의 일부기 때문이다.
수학을 좋아하지 않는 사람에게는 별로 반가운 소식이 아니겠지만 프로그
래밍과 수학은 서로 뗄 수 없는 밀접한 관련이 있다. 컴퓨터를 탄생시킨
비트의 법칙 자체가 사실은 수학의 일부이기 때문에 컴퓨터 역사에 이름
을 올리고 있는 라이프니츠, 불, 튜링, 노이만과 같은 사람들을 봐도 컴퓨
터학자기 이전에 우선 수학자였다.
영화 <파이(Pi)>의 주인공 맥스 코헨(Max Cohen)은 수(數) 안에 숨어
있는 패턴에 깊이 매료되어 이 세상에서 일어나는 모든 일을 수학으로 설
명할 수 있다고 믿었다. 그렇지만 그의 믿음은 물론 사실이 아니다. 그것
35. / 812장. 오전 10시 에스프레소 젤라틴 - 행복한 프로그래밍
은 지나친 일반화가 초래한 오류일 뿐이다. “신이 있다면 그는 수학자일
것이다”라는 말이 있을 만큼 세상의 많은 일이 수학으로 표현될 수 있는
것은 사실이지만 그렇다고 해서 세상의 모든 것이 수학으로 표현될 수는
없다. 예를 들어서 매력적인 이성을 만났을 때 마음속에 일어나는 감정의
변화마저 수학으로 표현할 수는 없지 않은가! 물론, m은 남자(male), f는
여자(female), 그리고 b는 아기(baby)라고 했을 때 ‘m + f = f(b)’라는 절
묘한 공식이 있긴 하지만 이것은 어디까지나 농담에 불과하다. 더구나 이
공식은 아름다운 감정의 변화가 아니라 신체상의 변화만을 포착하고 있을
뿐이다.
수학으로 표현할 수 없는 예는 그 밖에도 얼마든지 많다. 따라서 세상
의 모든 것을 수학으로 환원할 수 있다고 믿는 것은 잘못된 미신이다. 그
렇긴 하더라도 수학적 진리가 다른 어떤 것보다도 확실하고 보편적이라
는 사실은 분명하다. “내일도 태양이 뜰 것이다”라는 표현은 우주 반대편
에서는 사실이 아닐 수도 있지만, ‘1 + 1 = 2’라는 수학적 진리는 우주 끝
에서도 사실일 것이다. 칼 세이건(Carl Sagan)의 소설을 기초로 한 영화
<콘택트(Contact)>에서 베가라는 머나먼 별에서 보내온 메시지가 소수
(prime number)의 나열로 시작되는 것으로 설정한 것은 그러한 믿음을
반영한 것이라고 볼 수 있다. 이러한 설정은 언어가 통하지 않는 존재끼리
‘문명’의 존재를 알리기 위한 방법으로 수학보다 확실한 것은 없을 것이라
는 생각에 기초하고 있다.
사실 세이건의 이러한 설정은 소설적 상상에 그치는 것이 아니라 현
실의 일부였다. 인류는 1974년에 푸에르토리코 북부의 항구 도시인 아레
시보(Arecibo)에서 M13 성단에 사는 (혹은 살 것으로 믿는) 벗들을 향
해 메시지를 보낸 적이 있다. 캄캄하고 광활한 우주에서 혼자 살아가는 것
36. 82 / 행복한 프로그래밍
은 외롭고 막연한 일이기 때문에 인류가 친구를 찾으려고 하는 것은 어쩌
면 당연한 노력일지도 모른다. 항구 도시의 이름을 따서 아레시보 메시지
(Arecibo message)라고 불리는 이 메시지는 비트 1,679개로 이뤄져 있
다. 비트 8개가 모여서 1바이트를 구성하고 1바이트는 한 글자를 표현하
는 데 사용되므로 이것은 209바이트, 혹은 글자 209개로 이뤄진 대단히
짧은 메시지였다.
: 이진수로 된 아레시보 메시지(왼쪽)와 해독된 모습(오른쪽) (출처 : www.matessa.org)
그림에서 볼 수 있다시피 짧은 메시지 안에는 아레시보 망원경, 태양
계, 우리의 DNA 구조, 사람의 모습, 그리고 화학 성분에 대한 정보를 포
함하는 풍부한 내용이 담겨 있다. 하지만 가장 중요한 메시지의 시작 부분
에는 1부터 10까지의 수를 이진수로 헤아려 나가는 방법이 적혀 있다. 우
리가 M13 성단의 벗들에게 건네게 될 첫 마디는 다른 것이 아니라 바로
‘이진수’인 것이다. M13 성단의 벗들이 수학을, 혹은 이진수를 이해하고
있다면 아레시보 메시지에 담긴 우리의 모습을 볼 수 있을 것이고 그렇지
37. / 832장. 오전 10시 에스프레소 젤라틴 - 행복한 프로그래밍
않다면 그들은 머나먼 별 지구에서 날아온 절실한 신호를 한낱 시끄러운
잡음쯤으로 여기고 그냥 지나치게 될 것이다.
001
010
011
100
101
110
111
1000
1001
1011
이것이 인류가 M13 성단의 벗들에게 보내는 인사말이다.
그쪽에서 뜨는 태양이 하나인지 두 개인지, 밥을 먹으면서 사는지 흙
을 먹으면서 사는지조차 알지 못하는 상태에서 수학은 이처럼 서로에게
38. 84 / 행복한 프로그래밍
의미를 전달할 수 있는 유일한 언어가 된다. 수학은 그만큼 절대적이고 확
실한 범우주적 언어인 것이다. 라이프니츠는 이러한 범우주적 언어 속에
서 이진수 체계라는 가느다란 실을 뽑아 올렸고, 불은 그 실을 엮어서 논
리 회로라는 부드러운 옷감을 만들었다. 그리고 프로그래머들은 그러한
옷감을 자르고 붙여서 알고리즘이라는 간편하고 아름다운 옷을 만든다.
그러므로 알고리즘 속에는 수학의 명증성을 토대로 하는 논리의 거미줄이
올마다 박혀 있다.
알고리즘이 특정한 문제를 해결하기 위한 작업의 절차를 정의하고 있
다는 점에서 본다면 음식을 만들기 위한 조리법이나 결혼식의 식순과 별
로 다를 바가 없다. 하지만 알고리즘이 조리법이나 식순과 구별되는 지점
은 바로 수학과의 관련성에 있다. 조리법에서 어떤 단계 하나가 잘못 처리
되면 맵거나 싱거운 음식을 먹으면 그뿐이다. 하지만 알고리즘은 어느 한
단계에서 오류가 발생하면 논리 체계 전체가 붕괴할 수도 있다. 그러므로
알고리즘을 작성하는 프로그래머는 단 한 순간도 긴장의 끈을 늦출 수가
없다.
그렇지만 여기에서 말하는 수학적 논리라는 것이 반드시 복잡하고 심
오한 수학적 체계를 의미하는 것은 아니다. 알고리즘을 구성하는 수학적
논리는 때로 평이하고 단순해서 우리의 일상에서도 쉽게 발견할 수 있는
것이 의외로 많다. 수학 공식을 사용하지 않고도 쉽게 이해할 수 있는 생
활 속에 숨어 있는 알고리즘을 생각해보면 프로그래머들이 프로그래밍할
때 고민하는 알고리즘의 정체를 쉽게 이해할 수 있을 것이다.
39. / 15505 북풍표국의 냉혈독마
카페 에스프레소는 정통 이탈리아 커피로 ‘크림
카페’라고도 한다. 지방이 많은 요리를 먹은 식후
에 즐겨 마시는 에스프레소와 함께 세일즈맨의 여
행, 블록버스터 벌금 시스템 해킹, 암호화, 전자
화폐, 콘웨이 씨의 인생 게임 등을 통해서 복잡하
고 신기한 알고리즘과 해킹의 세계를 알아본다.
3.
장.
오후1시카페에스프레소
알고리즘과해킹의세계
40. 156 / 행복한 프로그래밍
삼성 SDS에서 일할 때의 일이다. 선배들의 어깨너머로 코드를 훔쳐
보면서 열심히 프로그램을 작성하던 초보 프로그래머 시절이었다. 기업
의 물류 관리에 사용할 소프트웨어를 개발하는 프로젝트가 막바지로 접어
들자 우리가 개발한 제품을 테스트도 할 겸해서 실제로 이용하는 고객들
이 걸어오는 전화를 (막내였기 때문에) 직접 응대하는 일이 많았다. 전화
를 받는 일은 프로그램을 작성하는 것에 비해서 어려울 때도 있었지만 고
객들이 주로 젊은 여직원(!)이었기에 재미있을 때가 더 많았다. 층이 달라
도 대부분 같은 건물에 있었기 때문에 목소리가 고운 고객이 전화하면 사
소한 문제임에도 직접 방문해서 도와준 적도 많았다.
하루는 전화를 건 고객이 “마우스로 화면에 있는 마우스 포인터를 움
직이는데, 마우스가 책상 끝에 다다라서 더 이상 오른쪽으로 움직일 수가
없다”고 했다. 마우스 포인터는 현재 어디에 있느냐고 물었더니 화면 한
가운데에 있다고 하고, 자기는 마우스 포인터를 화면의 오른쪽으로 더 움
세일즈맨의여행
첫 번째.
41. / 1573장. 오후 1시 카페 에스프레소 - 알고리즘과 해킹의 세계
직이고 싶은데, 마우스가 책상 끝에 걸려 있어서 더 이상 움직일 수가 없
다는 사연이었다. 믿기 어렵겠지만 이것은 실화다. 그래서 나는 그 고객에
게 친절한 목소리로 해결책을 설명해 주었다. “오른쪽에 다른 책상을 끌
어다 붙이세요. 그럼 마우스를 더 움직일 수 있을 겁니다.”
루슨트에 입사해서 일을 시작한 지 얼마 지나지 않았을 때 나보다 몇
년 선배인 프로그래머와 나란히 앉아서 디버깅을 수행한 적이 있다. 큼직
한 모니터에 vi를 이용해서 프로그램 소스 코드를 띄워놓고 코드를 신중
하게 분석했다. 그런데 그 프로그램은 여러 사람이 이곳저곳을 뜯어고친
흔적이 역력해서 읽기에 불편한 점이 한둘이 아니었다. 변수 이름은 일관
성 없이 임의로 붙여져 있었고 줄 간격이나 들여쓰기와 같은 부분은 전혀
지켜지지 않았다. 그래서 프로그램을 읽는 것이 피곤하게 느껴진 나는 (예
를 들어) 다음의 코드를 내 코딩 스타일대로 바꿨다.
42. 158 / 행복한 프로그래밍
fakeObject.firstMethod(param1,param2).secondMethod(param3);
바로 firstMethod와 secondMethod 바로 뒤에 공백(space)을 하나
씩 집어넣어서 수정한 것이다. 다음은 수정한 코드다.
fakeObject.firstMethod (param1,param2).secondMethod (param3);
그러자 선배 프로그래머가 고개를 저으면서 그렇게 공백을 집어넣으
면 곤란하다고 말하는 것이었다. 어째서 곤란하냐고 묻자 “It’s going to
be a compilation error(컴파일 오류가 날 거야)”라고 대답하여 내게 충
격을 줬다. 대부분 언어에서 공백은 의미가 없기 때문에 위의 코드는 심지
어 다음과 같이 작성해도 아무런 상관이 없다.
fakeObject . firstMethod (param1, param2) . secondMethod (param3);
반면 단어를 구별하기 위한 공백은 의미가 있다. 즉 fakeObject는 단
어 하나지만 fake Object는 단어 두 개기 때문에 서로 의미가 달라진다.
후자의 경우에서 fake와 Object 사이에 존재하는 공백은 단어를 서로 구
별하는 데 사용되기 때문에 생략할 수 없다. 그렇지만 미리 약속된 토큰
주위에 존재하는 공백은 아무런 의미가 없다. 즉 있어도 그만, 없어도 그
만이다. 앞에서 예로 든 코드에서 . ( ,)와 같은 기호는 모두 자바 프로그
래밍 언어에서 미리 약속된 토큰에 해당한다. 따라서 이러한 토큰 주변의
공백은 의미가 없으므로 컴파일러는 다음 두 줄을 완전히 같은 코드로 인
식한다.
fakeObject.fakeMethod();
fakeObject . fakeMethod ( ) ;
43. / 1593장. 오후 1시 카페 에스프레소 - 알고리즘과 해킹의 세계
단어를 구별하려면 두 단어 사이에 공백이 최소한 하나가 존재해야
한다는 규칙을 제외하면 프로그래밍 언어의 문법에서 공백이 의미가 있
는 경우는 별로 없다(물론 예외적인 언어도 있겠지만 C, C++, 자바와 같
은 언어들 대부분 그렇다. 요즘에는 파이썬이나 F# 같은 언어에서 들여쓰
기(indentation)를 통해 블록을 구분할 때는 공백이 문법적 의미를 갖는
다). 따라서 ‘박’, ‘지’, ‘성’이라는 글자가 각각 독립된 단어 혹은 토큰으로
취급된다면 ‘박 지 성’과 ‘박지성’은 동일한 의미를 갖는다. 하지만 ‘박지성’
이라는 세 글자가 모여서 단어 하나를 구성한다면 ‘박지성’과 ‘박 지 성’은
다른 의미를 지니게 된다. 이러한 내용은 따로 공부해서 알게 되는 사실이
아니고 프로그래밍을 하다 보면 자연스럽게 깨닫는 매우 기초적인 사항이
다. 그렇기에 절묘한 알고리즘을 척척 만들어내는 선배 프로그래머가 이
렇게 단순한 사실을 착각하고 있다는 사실이 당시의 나에게는 매우 혼란
스럽게 느껴졌다.
두 얘기는 사실 웃고 넘어갈 수도 있는 단순한 에피소드지만, 한 가지
주목할 만한 공통점이 있다. 그것은 바로 두 사람이 모두 아주 단순한 사
실을 모르고 있거나 잘못 알고 있었으면서도 그것을 극복하려는 실천적
인 노력을 기울이지 않았다는 사실이다. 전화를 건 고객은 마우스를 들어
서 책상의 한복판으로 옮겨보는 너무나 쉬운 노력을 스스로 해보지도 않
고 전화를 걸었고, 선배 프로그래머는 촘촘한 코드 사이에 공백을 넣어보
는 간단한 실험을 해보지도 않고 지레 그것을 ‘컴파일 오류’라고 단정 짓고
있던 것이다.
아이가 뜨거운 물을 직접 만져보고 나서야 비로소 물이 뜨겁다는 사
실을 알게 되듯이 정확한 인식의 뿌리는 실천 속에 놓여 있다. 특히 구체
적인 비트의 법칙 속에 존재하는 진실을 다루는 프로그래머에게는 당연
44. 160 / 행복한 프로그래밍
한 사실마저 끊임없이 의심하고 그 의심을 확인하고자 부단히 실천(실험)
하는 노력이 중요하다. 아마 나도 분명히 뭔가 잘못 알고 있으면서 스스로
깨닫지 못하고 있는 것이 있을 것이다. 그래서 다른 사람과 마음을 열고
토론하고 협력하는 것은 실천 활동의 소중한 일부가 된다.
이러한 실천과 실험 속에는 새로운 기술적인 내용이나 변화를 학습하
는 일도 포함되지만, 지나치게 새로운 것만 쫓는 것은 가볍고 무망하다.
진정한 힘은 인기를 끄는 프로그래밍 언어의 문법적인 측면이나 단편적인
기교를 습득하는 데서 나오는 것이 아니라 근본적이고 고전적인 내용을
학습하는 데서 더 많이 쌓이기 때문이다. 따라서 요즈음 프로그래밍과 관
련한 출판 업계에서 단편적인 기술적 내용을 뛰어넘어 더 깊이 있는 문제
와 근본적인 원리를 생각해보는 책이 전보다 많이 나오고 있는 것은 반가
운 흐름이 아닐 수 없다.
프로그래머에게는 잘 알려져 있는 ‘세일즈맨의 여행 문제(Traveling
Salesman Problem, TSP)’는 컴퓨터 알고리즘을 진지하게 고민해보는
사람이라면 한 번쯤 짚고 넘어갈 만한 고전적인 문제의 예다. 보통 영어의
앞글자를 따서 TSP라고 하는 이 문제에서는 기하학과 컴퓨터 알고리즘이
만나서 현대의 전자식 컴퓨터가 수행할 수 있는 계산 능력의 한계를 드러
낸다. 1장에서 용이 냈던 문제 세 개 중에서 서울, 평양, 북경, 동경을 여
행하는 경로를 찾으라던 세 번째 문제가 사실은 TSP 문제였다. 알고리즘
이나 복잡성 이론(complexity theory)을 공부할 때 단골 메뉴로 등장하
는 세일즈맨의 여행 문제는 다음과 같이 정의된다.
“N개의 도시가 있고, 이들은 모두 도로로 연결되어 있다. 모든 도시는 N-1개의
도로를 통해서 다른 모든 도시와 연결되어 있는 것이다. 이들 도로의 길이는 각
기 다르다. 세일즈맨은 한 도시에서 출발해 모든 도시를 한 번씩 방문한 다음 처
45. / 1613장. 오후 1시 카페 에스프레소 - 알고리즘과 해킹의 세계
음 출발했던 지점으로 되돌아와야 한다. 이 세일즈맨이 취할 수 있는 여러 여행
경로 중에서 가장 짧은 경로는 무엇인가?”
점 여러 개가 선으로 연결된 도형을 기하학에서는 그래프(graph)라고
한다. 만약, 각 꼭짓점이 다른 모든 꼭짓점과 선으로 연결되어 있으면 ‘완
전 그래프(complete graph)’라고 한다. 예를 들어서 삼각형은 완전 그래
프지만, 사각형은 대각선이 빠져 있으므로 완전 그래프가 아니다. 세일즈
맨 문제에는 여러 변형이 있는데, 앞의 세일즈맨 문제는 모든 도시가 서로
연결된 완전 그래프를 대상으로 한다.
어떤 그래프 위에서 모든 점을 한 번씩 전부 방문할 수 있는 경로
(path)가 존재하면 그것을 아일랜드 태생의 수학자 해밀턴(William
Rowan Hamilton)의 이름을 따서 ‘해밀토니언 경로(Hamiltonian
path)’라고한다. 여행은 화살표가 가리키는 방향으로만 가능하다고 할
때, 다음 그래프에서 해밀토니언 경로를 찾아보자.
: 해밀토니언 경로 찾기
46. 162 / 행복한 프로그래밍
답은 평양, 동경, 북경, 서울을 차례로 방문하는 경로다. 그 외에는 다
른 방법이 없음을 확인해보기 바란다. 그러나 도시를 잇는 선이 모두 양
방향 도로거나 그래프가 더 복잡해지면 그래프에는 해밀토니언 경로가 둘
이상 존재하게 된다. 물론 해밀토니언 경로를 하나도 갖지 않는 그래프도
존재한다.
그래프에 존재하는 선에 값이 매겨져 있으면 그것을 무게(weight)라
고 하고, 이러한 그래프를 무게를 갖는 그래프(weighted graph)라 한다.
예를 들어서 도로의 길이가 저마다 다르다면 도로의 길이가 선의 무게가
될 수 있을 것이다. 이제 이러한 여러 개념을 이용해서 세일즈맨의 여행
문제를 다시 정의해보자.
“꼭짓점이 N개이고 무게를 갖는 완전 그래프에서 무게가 최소인 해밀토니언 경
로를 찾아라.”
아주 간단해졌다. 하지만 ‘무게’, ‘그래프’, ‘꼭짓점’, ‘해밀토니언 경로’
와 같은 개념을 모두 정확하게 이해하지 못하면 “뭘 찾으라시는 건지?”하
고 되묻기 바쁠 것이다. 언뜻 보면 추상적인 개념의 유희처럼 보이는 세일
즈맨의 여행 문제는 컴퓨터 세계에서 복잡성 이론, 프랙털(fractal), 유전
자 알고리즘 등을 연구하는 데 훌륭한 도구가 될 뿐 아니라 비행기의 여행
경로나 화물 운송 경로를 결정하는 일과 같은 실질적인 문제를 해결하는
데도 도움을 준다.
따라서 수학자와 컴퓨터학자들은 첨단 이론을 총동원해서 이 문제를
해결하는 여러 절묘한 알고리즘을 발표하고 있다. 비교적 간단하면서도
널리 알려진 알고리즘으로는 최소 신장 트리(Minimum Spanning Tree,
MST) 알고리즘과 언제나 가장 가까운 도시로 이동하는 경로를 선택하는
47. / 1633장. 오후 1시 카페 에스프레소 - 알고리즘과 해킹의 세계
탐욕(Greedy) 알고리즘 등이 있다.
그러나 세일즈맨 문제에 대한 가장 확실한 답(즉, 어떤 경로가 가장 짧
은 경로인가에 대한 답)을 내놓는 방법으로는 모든 경로의 길이를 전부 계
산한 다음 서로 비교하여 그중에서 가장 짧은 경로를 선택하는 ‘무식한 힘
(brute force)’ 방법이 최고다. MST나 탐욕 알고리즘 등은 물론, 첨단 이
론으로 무장한 알고리즘들은 어디까지나 가장 짧은 경로에 근접한 답을
구해줄 뿐, 진짜로 가장 짧은 경로를 구하는 경우는 거의 없다. 하지만 앞
서 본 것처럼 모든 경로의 무게를 일일이 구한 다음에 서로 비교해보는 무
식한 힘 방법은 정확한 답을 확실하게 구할 수 있도록 보장해준다. 그렇지
만 무식한 힘 방법은 엄청난 양의 계산을 동반하기 때문에 N의 값이 4처
럼 작다면 모를까, 값이 커지면 사용할 수 없다.
그런데 잠깐만, ‘엄청난 양의 계산’이라고?
48.
49. / 2334장. 오후 4시 카페 그린 - 소프트웨어 바깥 이야기
녹차 가루의 은은한 향기와 커피의 향이 어우러
져 깊은 맛을 내는 커피다. 노곤해지기 쉬운 늦은
오후, 담백한 카페 그린 한잔을 마시면서 프로그
램 코드를 작성하는 방법, 객체의 등장 배경, 웹
브라우저와 자바 언어의 탄생 배경, 인터넷 대란,
전설의 해커 케빈 미트닉 이야기 등을 통하여 소
프트웨어를 둘러싼 흥미로운 담소를 나눠보자.
4.
장.
오후4시카페그린
소프트웨어바깥이야기
50. 234 / 행복한 프로그래밍
조금 늦은 유학을 떠난 나는 대학원에서 내 프로그래밍 스타일에 깊은
영향을 준 스승 두 명을 만났다. 그중 한 명은 매주 금요일 저녁에 만나 바
둑을 두던 폴 퍼듐(Paul Purdom)이라는 교수였다. 한국에 있을 때 동네
기원에서 3급(요즘 인터넷 바둑 기준 3~4단) 정도의 바둑을 두던 내게 다
섯 점을 놓고 버티던 퍼듐 교수는 미국 중서부 지역에서 바둑으로 자기를
이기는 사람은 거의 없었다는 믿기 어려운 이야기를 하면서 나를 붙들고
놔주지 않았다. 매주 금요일 저녁이 되면 학교 안의 카페테리아 구석에서
퍼듐 교수에게 바둑을 배운 동네 아저씨들이 모여서 서로 시합을 하기도
하고 나와 순서대로 접바둑을 두기도 했다.
퍼듐 교수가 가르치던 알고리즘 분석 과목은 학생들 사이에서 어렵고
지루한 과목으로 소문나 있었다. 하지만 내가 봤을 때는 아주 재미없을 것
같지도 않고 또 무엇보다도 평소에 친분이 있던 터라 피해 가기도 곤란하
고 해서 그 과목을 수강했다. 그가 수업 시간에 사용한 교과서는 자신의
프로그래머의손끝
첫 번째.
51. / 2354장. 오후 4시 카페 그린 - 소프트웨어 바깥 이야기
스승인 도널드 커누스 교수의 『The Art of Computer Programming』을
기초로 해서 스스로 저술한 책이었다. 그는 교단 앞에 의자를 놓고 앉아서
자기 책을 읽어나갔는데, 맨 앞에 앉은 학생들은 퍼듐 교수의 입에서 심하
게 튀어나오는 ‘파편’ 때문에 책과 노트가 (운 나쁘면 얼굴까지) 젖는 것을
감수해야만 했다.
소문대로 수업은 지루했다. 칠판을 이용하지 않고 책만 읽어나가는 수
업 방식은 여간 노력하지 않으면 정신을 집중하기가 어려웠다. 하지만 시
간이 흐르자 수업 내용이 점점 어려워지고 호흡이 가빠지면서 좀처럼 지
루함을 느낄 틈이 없게 됐다. 수업이 진행되는 학기 중에도 나는 금요일
저녁마다 카페테리아에서 바둑을 두었고, 내가 다른 사람과 바둑을 두고
있으면 그는 옆에 앉아서 「사이언스(Science)」를 읽으면서 가끔 바둑판
을 넘겨보았다. 퍼듐 교수와 바둑을 두고 나면 두었던 바둑을 다시 놓아보
면서 수를 분석하는 ‘복기’를 할 때도 가끔 있었는데, 그럴 때면 나는 그의
스승이 되었고 그는 내 학생처럼 행동했다. 지금은 익숙해졌지만 처음에
는 낯설었던 문화적 충격, 아니 그냥 문화적 차이 중 하나는 바로 이 사람
들에게서 나이나 신분에 따른 형식적인 권위 의식을 찾기 어려웠다는 점
이었다.
우리는 가끔 바둑을 컴퓨터 프로그램으로 만드는 알고리즘에 대해서
도 토론했다. 나보다 선배가 되는 그의 한국인 제자 중에는 실제로 바둑
프로그램을 연구한 논문을 쓰고 한국의 어느 대학에 교수로 들어간 사람
도 있다고 했다. 나이가 60줄에 접어든 퍼듐 교수는 더 이상 프로그램을
직접 작성하는 일은 하지 않는 것처럼 보였다. 하지만 알고리즘의 효율성
을 강조하는 그의 강의에서는 배울 점이 많았다. 학기말 시험에는 주어진
입력을 가장 빠르게 정렬하는 프로그램을 작성하는 프로젝트 있었는데,
52. 236 / 행복한 프로그래밍
말하자면 일종의 경진대회였다.
프로그램을 실행할 컴퓨터는 미리 정해져 있었으므로 모두가 공정한
조건에서 평가를 받도록 되어 있었다. 프로그래밍 언어는 자유롭게 선택
할 수 있었다. C 언어를 이용하든 C++ 언어를 이용하든 아니면 (그런 사
람은 없었지만) 자바 언어를 이용하든, 그것은 자유였다. 나는 C 언어를
사용했지만 최고로 빠른 속도는 어셈블리어를 이용한 알고리즘이 차지했
다. 이 콘테스트에서는 언어의 선택도 중요하지만 무엇보다도 정렬 알고
리즘을 최적화하는 것이 가장 중요한 핵심이었다. 그뿐만 아니라 자신이
작성한 프로그램을 컴파일하는 컴파일러도 신중하게 선택해야 하고 컴파
일러를 실행할 때 지정할 수 있는 여러 옵션에 대해서도 완전히 이해할 필
요가 있었다. 실제로 정렬 알고리즘을 작성하는 것 자체는 큰 문제가 아니
었지만 프로그램이 단 1밀리초라도 더 빠르게 동작하도록 만드는 작업은
생각보다 많은 내용을 함축하고 있었다.
자바 언어를 이용하는 프로그래머들은 하드웨어의 발전을 이유로 내
세우면서 알고리즘의 속도에 크게 신경 쓰지 않는 경향이 있다. 이러한
자세가 꼭 잘못되었다고 볼 수는 없지만 1밀리초 혹은 1바이트라도 소중
하게 다루는 프로그램이 훌륭한 프로그램이라는 사실은 분명하다. C나
C++를 이용하는 프로그래머들은 CPU나 메모리와 같은 하드웨어에 수
시로 접근하기 때문에 프로그램의 속도와 메모리 사용량에 대해서 자바
프로그래머보다 민감하다. 예를 들어서 자바 프로그래머가 모든 정수형
변수에 ‘int’를 사용할 때에 C/C++ 프로그래머들은 ‘int’와 ‘byte’를 신중
하게 구분해서 사용한다. 이러한 차이는 아무것도 아닌 것 같지만, 경우에
따라서는 프로그램 전체의 성능에서 차이를 가져온다.
하지만 소프트웨어의 구성이 복잡해지고 규모가 커지면서 쉽게 읽을
53. / 2374장. 오후 4시 카페 그린 - 소프트웨어 바깥 이야기
수 있는 코드를 작성하는 것이 1밀리초나 1바이트를 절약하는 것보다 훨
씬 더 시급한 요청이 된 것도 사실이다. 프로그램의 ‘겉모습’이 적어도 프
로그램의 ‘속도’보다는 더 중요한 세상이 된 것이다. 이러한 변화의 배경에
는 컴퓨터 하드웨어 자원이 풍부해지고 소프트웨어의 구성이 복잡해지면
서 컴퓨터가 소비하는 시간보다 프로그래머가 소비하는 시간이 더 값지고
소중해졌다는 현실이 놓여 있다. 이것은 앞서 봤던 Y2K 버그의 경우를
생각해보면 금방 이해할 수 있다. 지금 당장 1밀리초와 1바이트를 절약할
수 있는 기법이 있다고 해도 그것이 장차 프로그램을 관리하기 어렵게 만
들 가능성이 있다면 다시 생각해봐야 하는 것이다.
이러한 기법의 문제는 반드시 알고리즘이나 논리의 구현을 의미하는
것이 아니라 프로그램 코드의 진짜 겉모습, 즉 프로그램이 적혀 있는 방식
자체를 의미하기도 한다. 이러한 겉모습을 일정한 방식으로 통일해서 프
로그램의 관리를 조금이라도 쉽게 하기 위해서 프로그래머들은 ‘코딩 관
습’ 혹은 ‘코딩 규약’이라는 내부 규칙을 정해서 따르기도 한다. 변수의 이
름을 정하는 방식에서부터 괄호를 열고 닫는 방식에 이르는 많은 부분을
통일해서 코드의 겉모습이 프로그래머마다 달라지지 않도록 규정하는 것
이다. 예를 들어서 다음 코드를 읽어보자.
public static int[] swapWithoutTemp(int[]
numbers)
{numbers[0]=numbers[0]+numbers[1];numbers[1]=numbers
[0]-numbers[1];numbers[0]=numbers[0]-
numbers[1];return numbers;}
이 코드보다는 다음 코드가 훨씬 잘 읽힐 것이다.
54. 238 / 행복한 프로그래밍
public static int[] swapWithoutTemp (int[] numbers)
{
numbers[0] = numbers[0] + numbers[1];
numbers[1] = numbers[0] - numbers[1];
numbers[0] = numbers[0] - numbers[1];
return numbers;
}
하지만 프로그램의 겉모습을 코딩 관습으로 강제하는 데는 한계가 있
다. 프로그램이 프로그래머의 손을 통해서 수동으로 작성된다는 엄연한
사실이 변하지 않는 한 프로그램의 내용은 어디까지나 프로그래머의 손끝
에 달려 있기 때문이다. 그래서 중요한 것은 결국 프로그래머 각자가 가지
고 있는 프로그래밍에 대한 철학이다. 프로그래머 스스로 남들이 읽기에
편하고 깔끔한 프로그램을 작성하려는 의지가 없으면 코딩 관습(혹은 일
정한 코딩 스타일을 강제하는 소프트웨어 도구)은 별로 의미가 없다.
55. / 2974장. 오후 4시 카페 그린 - 소프트웨어 바깥 이야기
열대지방에서 마시는 트로피칼 커피. 커피에 아
이스 민트를 첨가한 아이스 커피다.
저녁7시커피민트줄렙
따뜻한세상을꿈꾸며
에필.
로그.
56. 298 / 행복한 프로그래밍
마지막 원고를 출판사에 보내고 나서 수년간 없던 몸살감기를 심하게
앓았다. 몸살을 앓더라도 회사를 빼먹을 만큼 심한 적이 없었는데, 이번에
는 아예 이불을 펴고 그 속에서 이틀 동안을 진드기처럼 꾸물거렸다. 책을
쓰는 동안에는 흥에 겨워 신나게 썼는데, 첫 책이라는 부담감이 알게 모르
게 몸을 긴장시키고 있었나 보다.
책을 쓰는 일이 즐겁긴 했어도 낮에는 회사에서 복잡한 프로그래밍을
하고 집에 돌아와서 저녁에 글을 쓰는 일은 육체적으로 힘들 때가 종종 있
었다. 특히 최근의 심각한 불황과 그에 따른 대량 해고로 인해서 회사가
요구하는 노동 강도가 점점 강해지면서, 글을 쓸 수 있는 시간은 그에 반
비례해서 급격하게 줄어들 수밖에 없었다. 그러나 글쓰기는 대체로 프로
그램을 만드는 일만큼이나 즐겁고 유쾌한 놀이에 가까웠기에 내겐 잊을
수 없는 소중한 ‘첫 경험’이 되었다.
책을 본격적으로 쓰기 시작한 때는 아마 작년 12월 무렵이었다. 올해
3월까지 원고를 작성했는데, 모두 쓰고 나서 보니 부족한 곳이 많아서 원
고를 검토하다가 얼굴이 후끈 달아오른 적이 한두 번이 아니었다. 그런데
도 막상 원고를 떠나보내는 순간이 되자 마치 사랑하는 연인을 떠나보내
는 것처럼 섭섭함과 허전함을 느끼게 되어 놀랐다.
내가 원고를 쓰던 넉 달 남짓의 시간은 참으로 격변의 순간이었다. 한
국에서는 12월에 대통령 선거가 있었고 멀리 이라크에서는 결국 전쟁이
일어났다. 그리고 미국에서는 이라크 전쟁에 반대하는 크고 작은 반전 시
위가 연일 끊이지 않았다. 사람의 목숨이 오가는 ‘전쟁’이라는 화두는 너무
나 끔찍하고 심각했기에 프로그래밍과 글쓰기라는 ‘가상 세계’에 숨어 지
내던 나는 마음이 편치 않고 항상 무둑했다. 프로그래밍은 전쟁과 아무런
상관이 없는 것처럼 보이지만 현대전에서 사용되는 거의 모든 첨단 무기
57. / 299에필로그. 저녁 7시 커피민트 줄렙 - 따뜻한 세상을 꿈꾸며
가 프로그램으로 제어된다는 점에서 나는 어쩐지 견딜 수 없는 죄책감마
저 느끼고 있었다.
사실은 바로 이러한 이야기들, 즉 프로그래밍이 갖는 사회적 의미, 역
사, 미래, 책임, 철학, 숨어 있는 이야기들, 혹은 프로그래밍과 전쟁과의
관계 같은 것, 그리고 프로그래밍을 둘러싼 여러 사람의 숨결과 체취를 생
생하게 드러내는 이야기 같은 것을 써보고 싶었다. 한빛미디어에서 소중
한 기회를 마련해줬으나 역량이 부족하여 일단 이 책에서는 논의의 초점
을 프로그래머가 프로그래밍 속에서 느끼는 ‘행복’의 근거를 약간은 기술
적인 이야기를 섞어서 부각하는 쪽으로 집중했다.
그럼에도 본래의 욕심을 절제하지 못하고 다른 이야기를 집적거리다
가 이야기를 산만하게 만든 부분이 더러 있는 것 같아서 부끄럽다.
소설가 김영하의 산문집 『포스트 잇』(현대문학, 2002)을 보면 “등산안
내서, 여행가이드북, 컴퓨터 매뉴얼, 농사교본을 쓰는 저자들이 단지 그
런 책을 쓰고 있다는 이유만으로 소설가나 철학자보다 폄하되어야 할 이
유는 없다. (중략) 이들은 진심으로 자신의 지식과 경험을 세상과 공유하
고 그것으로 사람들이 지금보다 나은 삶을 살아가기를 바라고 있다”라는
말이 나온다. 나는 이 말에 적극 공감했고 따라서 ‘컴퓨터 매뉴얼’을 쓰는
사람들이 진실로 다른 사람들의 삶이 나아지기를 진지하게 바라는 사람이
기를 희망한다.
프로그래머는 노동자지만 ‘창조적인’ 노동을 하는 사람이기에 사회에
이바지할 바가 많다. 그렇기 때문에 나는 프로그래머들의 마음이 따뜻해
지면 세상이 따뜻해질 것이라고 믿는다. 부족한 이 책이 프로그래머들의
마음을 따뜻하게 하는 데 조금이라도 도움이 되었기를 바랄 뿐이다.
58.
59.
60.
61.
62. www.hanbit.co.kr
이것이
프로그래밍이다!
이것이 안드로이드다
진정한 안드로이드 개발자로
이끌어줍니다.
SDK 5.0 롤리팝 호환!
책만 보고,
동영상 강좌로도 만족하지 못했다면 Daum
카페 '슈퍼드로이드'에서 만나요
cafe.daum.net/superdroid
박성근 저 | 1,164쪽 | 45,000원
이것이 C언어다
세상에 없던 새로운
C언어 입문서 탄생!
삼성, LG에서 펼쳐졌던
전설의 명강의를 풀타임 동영상 강좌로!
이보다 더 확실한 방법은 없다, 칠판강의
전체 동영상 강좌 유투브 전격 공개!
http://goo.gl/tJK3Tu
서현우 저 | 708쪽 | 25,000원
이것이 자바다
가장 중요한 프로그래밍 언어를 하나
배워야 한다면, 결론은 자바다!
중급 개발자로 나아가기 위한 람다식,
JavaFX, NIO 수록
자바의 모든 것을 알려주는 인터넷 강의
궁금한 것은 카페에서!
cafe.naver.com/thisisjava
신용권 저 | 1,224쪽 | 30,000원
저자직강동영상 제공!
63. 지금은
모던 웹 시대!
모던 웹을 위한
JavaScript +
jQuery 입문
HTML5 분야 부동의 1위 도서
HTML5 표준안 확정에 맞춘 완전 개정판의 귀환!
HTML5 권고안과 최신 웹 브라우저 환경 대응
윤인성 저 | 624쪽 | 30,000원
모던 웹 디자인을 위한
HTML5 +
CSS3 입문
자바스크립트에서 제이쿼리, 제이쿼리 모바일까지
한 권으로 끝낸다!
시대의 흐름에 맞춰 다시 쓴 자바스크립트 교과서
윤인성 저 | 980쪽 | 32,000원
페이스북, 월마트, 링크드인은 왜
Node.js를 선택했는가?
이 물음에 대한 답은 Node.js가 보여주는 빠른 처리 능력 때문이다.
윤인성 저 | 484쪽 | 25,000원
모던 웹을 위한
Node.js
프로그래밍
필요한 것만 배워
바로 현장에서 쓰는 HTML5
순서대로 읽으며 실습할 수 있는 HTML5 자습서
김상형 저 | 700쪽 | 32,000원
HTML5 +
CSS3 정복
www.hanbit.co.kr
64. Hanbit eBook
Realtime
DRM free!
어떤 디바이스에서도 자유롭게
eBook Oriented!
전자책에 꼭 맞는 최적의 내용과 디자인
Hanbit eBook
Realtime 70
김세훈 지음
MFC
프로그래밍
주식분석 프로그램 만들기
이연복 지음
Hanbit eBook
Realtime 49
Hanbit eBook
Realtime 89
자바 개발자를 위한
Vert.x
애플리케이션 개발
Hanbit eBook
Realtime 49
Hanbit eBook
Realtime 92
모바일/웹 메시징
STOMP와 MQTT로 개발하는 IoT
모바일/웹 애플리케이션
제프 메스닐 지음 / 조건희 옮김
Mobile and Web Messaging
Hanbit eBook
Realtime 90
JavaScript
Promise
azu 지음 / 주우영 옮김
www.hanbit.co.kr/ebook
www.hanbit.co.kr
65. 전자부품 백과사전 vol.1
찰스 플랫 지음 / 배지은 옮김 / 30,000원
취미공학에 필요한 핵심 전자부품을
사전식으로 정리한 안내서.
Zero to Maker
: 누구나 메이커가 될 수 있다
데이비드 랭 지음 / 장재웅 옮김 / 14,000원
일반인에서 메이커로. 날백수에서 무인 잠
수정 회사 CEO가 된 사나이, 데이비드
랭의 메이커 도전기.
처음 시작하는 센서
키모 카르비넨,
테로 카르비넨 지음
임지순 옮김 / 13,000원
세상을 수치로 읽어내는
부품인 센서를 알려주
는 책. 이 책을 통해 자신
만의 프로젝트에 다양한
센서를 사용해보자.
프로젝트로 배우는 라즈베리 파이 도날드 노리스 지음 / 임지순 옮김
다양한 실전 프로젝트를 통해 라즈베리 파이를 쉽고 재미있게 배워본다.
Maker Pro
존 베이첼 지음 / 가격미정
메이커라면 반드시 읽어야 할 필수 계발
서. 프로 메이커들과의 인터뷰 및 에세이
수록.
Make: 센서
키모 카르비넨, 테로 카르비
넨, 빌 발토카리 지음
/ 가격미정
필수 전자부품인 센서를
마이크로 컨트롤러 보드
에 응용하는 방법을 담
았다.
전자부품 백과사전 vol.2 찰스 플랫 지음 / 가격미정
<전자부품 백과사전> 시리즈의 두 번째 도서다.
즐거운 상상이 가득! 2015년 화제의 신간
전자부품 백과사전 vol.1
찰스 플랫 지음 / 배지은 옮김 / 30,000원
취미공학에 필요한 핵심 전자부품을
사전식으로 정리한 안내서.
Zero to Maker
: 누구나 메이커가 될 수 있다
데이비드 랭 지음 / 장재웅 옮김 / 14,000원
일반인에서 메이커로. 날백수에서 무인 잠
수정 회사 CEO가 된 사나이, 데이비드
랭의 메이커 도전기.
처음 시작하는
키모 카르비넨,
테로 카르비넨 지음
임지순 옮김 / 13,000
세상을 수치로 읽어
부품인 센서를 알
는 책. 이 책을 통해
만의 프로젝트에 다
센서를 사용해보자
Maker Pro
존 베이첼 지음 / 가격미정
메이커라면 반드시 읽어야 할 필수 계발
Make: 센서
키모 카르비넨, 테로
넨, 빌 발토카리 지음
/ 가격미정
필수 전자부품인 센
마이크로 컨트롤러
에 응용하는 방법
았다.
전자부품 백과사전 vol.2 찰스 플랫 지음 / 가격미정
<전자부품 백과사전> 시리즈의 두 번째 도서다.
즐거운 상상이 가득! 2015년 화제의 신간
www.hanbit.co.kr