Top

새로 보는 프로그래밍 언어 [개발자의 가치를 높이는 프로그래밍 언어 대백과]

  • 원서명Programming Language Pragmatics, Second Edition (ISBN 9780126339512)
  • 지은이마이클 스콧
  • 옮긴이민병호, 김진혁
  • ISBN : 9788960770546
  • 45,000원
  • 2008년 08월 21일 펴냄
  • 페이퍼백 | 1,004쪽 | 188*250mm
  • 시리즈 : 프로그래밍 언어

책 소개

소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/programming-language)

지금까지 이런 프로그래밍 언어론 책은 없었다!!

가상 기계, 스크립팅 언어, 모바일 코드, 그래픽 사용자 인터페이스가 주목받으면서 그 어느 때보다 언어 설계와 언어 구현을 통합적으로 다룰 필요성이 더 커졌다. 『새로 보는 프로그래밍 언어』는 프로그래밍 언어 설계에 초점을 두고 전체적인 통합을 강조한다. 근래 주목받는 언어 대부분의 기초가 되는 기본 개념을 광범위하게 다룬 이 책의 내용은 학생과 전문 개발자 모두에게 도움이 될 것이다. 내용을 완전히 개정한 이 책에는 스크립팅 언어에 대한 새로운 장이 포함되어 있으며 C99, C# 2.0, 자바 5도 다룬다.


[ 소개 ]

핵심만 놓고 보자면 『새로 보는 프로그래밍 언어』는 프로그래밍 언어의 동작 원리에 대한 책이다. 많은 언어의 상세를 나열하기보다는 학생이나 개발자가 접할 만한 모든 언어의 기초가 되는 개념에 초점을 맞춘다. 이 책은 다양하고 구체적인 예를 이용하며 여러 언어가 각각 다른 방법으로 설계된 이유를 알게 해주는 트레이드오프(tradeoff)를 살펴본다. 또 컴파일러나 해석기(interpreter)를 만드는 방법(극소수 개발자가 수행하는 업무)을 설명하기보다는 컴파일러가 입력 프로그램에 무엇을 왜 하는지에 초점을 맞춘다. 그러므로 『새로 보는 프로그래밍 언어』는 언어 설계와 구현을 함께 살펴보며 특히 이들의 상호작용 방법에 중점을 둔다.


그림: 이 책에서 다루는 프로그래밍 언어의 간추린 계보


[ 추천의 글 ]

컴퓨터 과학은 추상화 위에 추상화를 쌓는 데 있어 탁월한 분야다. 단순화된 인터페이스 뒤로 상세한 구현을 감추는 컴퓨터 과학 분야의 추상화는 미덕인 동시에 필수 불가결한 것이다. 운영체제, 데이터베이스, 컴파일러는 지난 40년 동안의 이론과 개발을 통해 나온 매우 복잡한 프로그램이다. 대부분의 경우 프로그래머가 소프트웨어를 생산적으로 사용하기 위해서 소프트웨어의 내부 구현이나 구조를 이해할 필요는 거의 없거나 전혀 없다. 대개는 모르는 게 약이다.

그러나 불투명한 추상화는 새로운 것을 탄생시키기 위한 좋은 기초가 아니라 진보를 막는 장애물이 될 수도 있다. 이 책의 주제인 프로그램과 프로그래밍 언어에 대해 생각해보라. 프로그램의 실행은 너무 느린데 프로파일링(profiling)을 통해 병목지점을 정확히 판단할 수 없거나 병목지점이 알고리즘으로 설명되지 않는 경우 어떻게 하겠는가? 생각해 볼 수 있는 몇 가지 문제점으로는 언어 구성소를 기계 명령어로 변환하는 부분, 프로세서와 기계 명령어가 상호작용하는 부분 등이 있다. 이런 문제를 해결하기 위해서는 각 추상화 단계와 그 연결성을 이해해야 한다.

추상화는 학습에도 필요하다. 영어의 극히 작은 부분만을 이용해서 작성한 프로그램이 어떻게 이진법만 사용하는 기계를 제어할 수 있는지, 프로그래밍 언어가 굉장히 다양해지고 그 수도 늘었지만 왜 모두 비슷한지 등과 같은 질문은 컴퓨터, 컴파일러, 프로그래밍 언어와 그 상세를 구분하지 않고는 답할 수 없다.

전반적인 컴퓨터 과학 교육 과정을 통해 이러한 질문에 답할 수 있게 된다. 대부분의 학부 과정에는 컴퓨터 구조, 운영체제, 프로그래밍 언어 설계, 컴파일러에 대한 과목이 들어있다. 모두 들을 만한 가치가 있는 좋은 과목이지만 다른 과목에 비해 결코 쉽지는 않다. 게다가 가끔 이 교과목들의 강의는 서로 독립적으로 이뤄지며, 강의에서 서로의 연관성에 대한 부분이 빠지곤 한다.

이 책은 컴퓨터 구조, 운영체제, 컴파일러 등을 구분 짓는 추상화 그 이상을 살펴봄으로써 앞서 언급한 질문에 대한 답을 제시한다. 마이클 스콧은 언어 구현, 실행 시간 시스템, 컴퓨터 구조에 유능한 연구자로 컴퓨터 과학의 다양한 분야를 모두 이용해서 현대 프로그래밍 언어에 대한 일관성 있는 이해를 도모하는 데 탁월하다.

이 책은 언어의 다양한 개념과 구현 상세를 매우 명확히 설명할 뿐만 아니라 컴퓨터 구조와 컴파일러가 언어의 설계 및 구현과 어떻게 연관되는지 잘 설명한다. 더욱이 언어가 해결하려는 문제점이 언어 설계에 어떤 영향을 주는지 명확히 설명하기 위해 다양한 언어가 실질적으로 사용되는 예를 잘 설명하고 있다.

고백하자면 이 책을 처음 읽었을 때는 걱정되었던 것이 사실이다. 당시 나는 마이클 스콧의 접근 방식이 교과 과정에서 프로그래밍 언어와 컴파일러의 중요성을 퇴락시키며, 학생들로 하여금 이 분야를 표면적으로만 이해하게 만든다고 생각했다. 그러나 다시 한번 책을 읽은 지금은 그 반대라는 걸 알게 되었다. 이 책은 프로그래밍 언어와 컴파일러를 적절한 상황에 등장시킴으로써 프로그래밍 언어가 프로그래머와 컴퓨터를 연결해주는 다리며 컴퓨터 과학의 진정한 중심이라는 것을 보여준다.

제임스 라루스 / 마이크로소프트 리서치


[ 이 책의 구성 ]

1부는 프로그래밍 언어의 기초적인 내용을 다룬다.
(1) 언어 설계와 구현에 대한 소개, (2) 프로그래밍 언어 구문(syntax), (3) 이름, 유효 범위, 바인딩, (4) 의미 분석(semantic analysis), (5) 목표 기계의 구조(target machine architecture). 이 중에서 항목 (2)와 (5)에서는 주로 구현에 대한 내용을 다룬다. 항목 (1)과 (4)에는 언어 설계와 구현에 대한 내용이 섞여 있으며, 항목 (3)에서는 언어 설계에 대한 핵심 쟁점을 주로 다룬다.

2부에서는 프로그래밍 언어의 핵심 요소를 다룬다.
(6) 제어 흐름, (7) 자료형, (8) 서브루틴과 제어 추상화, (9) 자료 추상화와 객체지향. 마지막 항목은 초판에서보다 좀 더 앞부분에서 다루었는데, 이는 객체지향 언어가 현대 컴퓨팅에서 차지하는 중심적 위치를 반영한 것이다.

3부는 다른 관점에서 바라본 프로그래밍 모델을 다룬다.
(10) 함수형 언어(functional language), (11) 논리형 언어(logic language), (12) 병행, (13) 스크립팅 언어. 초판에서는 함수형 언어와 논리형 언어를 한 장에서 다뤘다.

4부는 언어 구현이라는 주제를 다시 다룬다.
(14) 실행 가능한 프로그램 만들기(코드 생성, 어셈블리, 링킹), (15) 코드 개선(최적화).


그림: 책을 읽는 다양한 순서


[ 개정판에서 추가된 내용 ]

● C99, C# 2.0, 자바 5 등 프로그래밍 언어 설계 분야의 최신 내용을 다룬다.
● 스크립팅 언어를 새로 추가된 장과 책 전반에서 설명하며, 펄, 파이썬, 루비, Tcl, PHP, 자바스크립트, XSLT 등을 다룬다.
● 병행처리를 광범위하게 설명하며 C#과 자바의 새로운 병행 패키지(JSR 166)를 다루는 장도 포함한다.
● 반복자, 예외, 다형성, 템플릿/제네릭, 유효 범위 규칙, 선언 정렬, 분리 컴파일, 가비지 콜렉션, 쓰레드와 동기화 등 새로운 내용이 추가됐다.
● 부록 CD에 추가 자료를 제공한다. 고급/선택적인 내용, 수백 개의 실제 용례를 담고 있으며, 검색 도구, 인터넷상의 사용설명서, 튜토리얼, 컴파일러, 해석기에 대한 링크도 제공한다.


[ 부록 CD 소개 ]

● 독자가 선택해 볼 수 있는 심화학습과 보충설명
● 300개 이상의 소스파일
● 공개 컴파일러와 해석기 링크 모음

저자/역자 소개

[ 저자 소개 ]

마이클 스콧
로체스터 대학의 교수며 컴퓨터 과학부의 학부장을 역임했다. 1985년에 위스콘신 메디슨 대학에서 컴퓨터 과학 박사학위를 받았다. 프로그래밍 언어, 운영체제, 고수준의 컴퓨터 구조가 접목되는 분야를 주로 연구하며, 특히 병렬 및 분산 컴퓨팅에 중점을 두고 있다. 링스(Lynx)라는 분산 프로그래밍 언어를 설계했으며 병렬 운영체제 샬럿(Charlotte)과 프시케(Psyche), 병렬 파일시스템 브릿지(Bridge), 공유 메모리 시스템 캐시미어(Cashmere)와 인터위브(InterWeave)를 공동 설계했다. 존 멜러 크러미와 공동 설계한 MCS 상호배제 잠금(MCS exclusion lock)은 다양한 상용이나 학문 목적의 시스템에 이용되었다. 메기드 마이클, 빌 쉐러와 함께 설계한 다양한 알고리즘은 java.util. concurrentstandard 라이브러리에 사용된다.
스콧 박사는 미국 컴퓨터 학회(ACM), 전기전자학회(IEEE), 사회적 책임을 위한 컴퓨터 전문가들 모임의 회원이다. 다양한 프로그램의 위원과 자격 교부 검토 위원을 맡아왔으며 NSF, ONR, DARPA, NASA, 에너지 및 국방부(the Department of Energy and Defense), 포드 파운데이션(Ford Foundation), 디지털 이큅먼트(Digital Equipment Corporation, 현재의 HP), 썬 마이크로시스템즈, 인텔, IBM 등에서 지원하는 프로젝트의 제1 연구자 혹은 공동 연구자로 활동해왔다. GRE의 컴퓨터 과학 분야 시험에 기여했으며, 95개의 논문을 발표했다. 2003년에는 ACM의 운영체제 원리에 대한 심포지엄에서 의장을 맡기도 했다. 1983년에 벨 연구소(Bell Lab)의 박사과정 장학금을 받았으며, 1986년에는 IBM의 능력 개발상을 받았다. 2001년에는 로체스터 대학에서의 우수한 업적 및 학부생 교육의 탁월함에 대한 로버트와 파멜라 괴르겐 상(Robert and Pamela Goergen Award for Distinguished Achievement and Artistry in Undergraduate Teaching)을 받았다.


[ 옮긴이의 말 ]

외국에서 생활하고 그 나라의 문화를 배우려면 일단 그 나라의 언어부터 익혀야 하듯이 컴퓨터가 이해하는 언어부터 배워야 컴퓨터를 이해하고 전문적으로 다룰 수 있게 된다. 이것이 개발자나 컴퓨터를 전공하는 사람에게 우선 프로그래밍 언어부터 가르치는 이유 중 하나다. 이 책을 읽고 있는 여러분도 C, C++, 자바 등과 같은 언어 중 한두 개는 잘 다룰 것이다. 그런데 지금 다룰 줄 아는 언어를 어떤 식으로 배웠는지 생각해보자. 아마도 “Hello, World!”를 출력하는 예제로 시작해서 자료형, 제어 흐름, 구조체, 포인터 등의 순서로 각 언어 구성소를 어떻게 사용하는지 배웠을 것이다. 누구도 프로그래밍 언어가 왜 자료형을 가지며, 어째서 특정 제어 흐름이 많이 쓰이는지, 또 포인터가 일부 언어에서는 매우 선호되지만 다른 언어에서는 아예 존재하지도 않는 이유는 무엇인지를 배우지는 않았을 것이다. 적어도 우리나라 대부분의 대학이나 개발자를 양성하는 기관에서는 프로그래밍 언어 자체를 넓고 깊게 다루는 강의는 찾아보기 힘든 것 같다.

이 책은 바로 프로그래밍 언어를 배우며 궁금할 수 있는 부분들, 왜 이런 식으로 언어가 정의됐을까 하는 의문을 품게 만드는 언어 구성소나 규약 등을 명확하고 쉽게 설명해준다. 또 프로그래밍 언어는 어떻게 분류할 수 있으며, 어떠한 것들이 주로 사용되고 어떤 개념들이 중요한지 등을 상세하고 친절하게 알려준다. 그렇기에 이 책은 초보자에게는 프로그래밍 언어의 개념을 확실히 잡아줄 수 있는 지침서이며, 이미 일부 프로그래밍 언어를 능숙히 다룰 줄 아는 독자에게는 다양한 언어의 특징과 장단점을 명확히 정리해주는 참고서다. 특히 이 책을 통해 다양한 언어의 강점과 약점을 분명히 알게 되어 어떤 방식의 프로그래밍 업무/과제가 주어져도 그에 맞는 최적의 언어를 선택해 가장 효율적으로 구현할 수 있게 될 것이다. 역자의 경우에도 머릿속에 산재해 있는 여러 언어들의 지식이 이 책을 통해 깔끔하게 정리되었다(사실 그 전까지는 가끔 여러 언어의 문법을 섞어 써서 컴파일 오류를 발생시키곤 했다).

『새로 보는 프로그래밍 언어』는 프로그래밍 언어 자체뿐만 아니라 이와 관련된 이슈를 모두 다룬다는 점에서도 큰 의미를 가진다(프로그래밍 언어 분야에 이런 책은 여태껏 없었다!). 특히 컴파일러, 컴퓨터 구조, 시스템 프로그래밍, 논리학 등과 같은 내용도 훑어봄으로써 소프트웨어 분야 전체를 정리할 수 있는 기회도 제공해준다. 그러면서도 각 주제를 비교적 깊게 다루고 있으며, 풍부한 예를 통해 독자의 이해도 도모하고 있다. 프로그래밍 언어 분야의 정석으로 자리 잡을 수 있을 만큼 잘 쓰여진 책이다. 개발자라면 꼭 읽어 봐야 할 책이다.

이 책을 읽고 나면 여러분이 알고 있는 프로그래밍 언어의 세계, 그리고 컴퓨터의 세계가 한층 더 넓어질 것이다.

『새로 보는 프로그래밍 언어』는 방대한 내용을 다루는 만큼 책에서 미처 다루지 못한 심화 내용을 부록 CD에서 다룬다. 각 장에서 좀 더 깊게 다루는 내용을 CD에 담은 것이므로 책의 내용이나 흐름을 따라가기 위해 CD를 바로 참고할 필요는 없다. 물론 CD에 있는 내용도 중요하므로 꼭 읽어보자.


[ 옮긴이 소개 ]

민병호
서울대학교 컴퓨터공학부를 졸업하고 동 대학원에서 석사 학위를 취득했다. 현재 국방과학연구소에서 다양한 분야의 소프트웨어 개발을 담당하고 있다. 컴퓨터 분야 전체에 관심이 많고 특히 보안, 네트워크, 프로그래밍 언어, 인공지능 분야를 연구 중이다. 누구나 이해할 수 있는 컴퓨팅 환경을 만드는 것이 꿈으로, 비전문가도 컴퓨터를 이용해서 생각을 현실로 쉽게 구현할 수 있는 날을 그리며 열심히 개발 중이다. 역서로 에이콘출판사에서 펴낸 『TCP/IP 완벽 가이드』가 있다.

김진혁
서울대학교 컴퓨터공학부를 졸업하고 동 대학원을 졸업했다. 현재 삼성전자 반도체총괄에서 FLASH 저장장치 기반 소프트웨어를 개발하고 있다. 역서로 에이콘출판사에서 펴낸 『TCP/IP 완벽 가이드』가 있다.

목차

목차
  • 1부 프로그래밍 언어의 기초 36
  • 01장 소개 39
    • 1.1 언어 설계의 기술 41
    • 1.2 프로그래밍 언어의 스펙트럼 45
    • 1.3 프로그래밍 언어를 공부해야 하는 이유 47
    • 1.4 컴파일과 해석 50
    • 1.5 프로그래밍 환경 57
    • 1.6 컴파일 개요 59
    • 1.7 정리 68
    • 1.8 연습문제 69
    • 1.9 탐구문제 71
    • 1.10 참고자료 73
  • 02장 프로그래밍 언어 구문 75
    • 2.1 구문 명시: 정규식과 문맥 자유 문법 77
    • 2.2 어휘 분석 85
    • 2.3 구문 분석 101
    • 2.4 이론적 기초 사항 138【CD-14】
    • 2.5 정리 139
    • 2.6 연습문제 140
    • 2.7 탐구문제 146
    • 2.8 참고자료 147
  • 03장 이름, 유효 범위, 바인딩 149
    • 3.1 바인딩 시점의 의미 151
    • 3.2 객체 수명과 저장 공간 관리 153
    • 3.3 유효 범위 규칙 161
    • 3.4 유효 범위의 구현 183【CD-23】
    • 3.5 참조 환경의 바인딩 184
    • 3.6 유효 범위 내에서의 바인딩 190
    • 3.7 분리 컴파일 198【CD-30】
    • 3.8 정리 199
    • 3.9 연습문제 200
    • 3.10 탐구문제 209
    • 3.11 참고자료 212
  • 04장 의미 분석 213
    • 4.1 의미 분석기의 역할 214
    • 4.2 속성 문법 218
    • 4.3 속성 평가 220
    • 4.4 동작 루틴 232
    • 4.5 속성을 위한 저장 공간의 관리 234【CD-37】
    • 4.6 구문 트리 장식 235
    • 4.7 정리 241
    • 4.8 연습문제 242
    • 4.9 탐구문제 248
    • 4.10 참고자료 250
  • 05장 타겟 머신의 구조 251
    • 5.1 메모리 계층 252
    • 5.2 자료 표현 255
    • 5.3 명령어 집합 구조 257
    • 5.4 구조와 구현 261
    • 5.5 최신 프로세서를 위한 컴파일 267
    • 5.6 정리 279
    • 5.7 연습문제 281
    • 5.8 탐구문제 285
    • 5.9 참고자료 288
  • 2부 프로그래밍 언어의 핵심 요소 290
  • 06장 제어 흐름 293
    • 6.1 수식의 값 계산 294
    • 6.2 구조화된 흐름과 구조화되지 않은 흐름 316
    • 6.3 열거 321
    • 6.4 선택 323
    • 6.5 반복 333
    • 6.6 재귀 352
    • 6.7 비결정성 360【CD-65】
    • 6.8 정리 361
    • 6.9 연습문제 363
    • 6.10 탐구문제 371
    • 6.11 참고자료 373
  • 07장 자료형 375
    • 7.1 유형 시스템 376
    • 7.2 유형 검사 389
    • 7.3 레코드(구조체)와 베리언트(공용체) 406
    • 7.4 배열 420
    • 7.5 문자열 438
    • 7.6 집합 439
    • 7.7 포인터와 재귀형 441
    • 7.8 리스트 462
    • 7.9 파일과 입력/출력 465【CD-65】
    • 7.10 등가 검사와 대입 466
    • 7.11 정리 469
    • 7.12 연습문제 471
    • 7.13 탐구문제 479
    • 7.14 참고자료 480
  • 08장 서브루틴과 제어 추상화 483
    • 8.1 스택 배치의 복습 484
    • 8.2 호출 순서 486
    • 8.3 매개변수 전달 494
    • 8.4 제네릭 서브루틴과 모듈 512
    • 8.5 예외 처리 520
    • 8.6 동시 실행 루틴 532
    • 8.7 정리 539
    • 8.8 연습문제 540
    • 8.9 탐구문제 549
    • 8.10 참고자료 551
  • 09장 자료 추상화와 객체지향 553
    • 9.1 객체지향 프로그래밍 555
    • 9.2 캡슐화와 상속 566
    • 9.3 초기화와 종결화 575
    • 9.4 동적 메소드 바인딩 584
    • 9.5 다중 상속 599【CD-135】
    • 9.6 객체지향 프로그래밍 다시 보기 600
    • 9.7 정리 601
    • 9.8 연습문제 603
    • 9.9 탐구문제 608
    • 9.10 참고자료 609
  • 3부 다른 관점에서 바라본 프로그래밍 모델 612
  • 10장 함수형 언어 615
    • 10.1 역사적 기원 616
    • 10.2 함수형 프로그래밍의 개념 618
    • 10.3 스킴 복습/개관 620
    • 10.4 계산 순서 다시 보기 632
    • 10.5 고차 함수 639
    • 10.6 이론적 기초 643【CD-152】
    • 10.7 한눈에 보는 함수형 프로그래밍 643
    • 10.8 정리 646
    • 10.9 연습문제 647
    • 10.10 탐구문제 653
    • 10.11 참고자료 654
  • 11장 논리형 언어 657
    • 11.1 논리형 프로그래밍의 개념 658
    • 11.2 프롤로그 659
    • 11.3 이론적 기초 678【CD-163】
    • 11.4 한눈에 보는 논리형 프로그래밍 679
    • 11.5 정리 683
    • 11.6 연습문제 684
    • 11.7 탐구문제 687
    • 11.8 참고자료 689
  • 12장 병행 처리 691
    • 12.1 배경과 동기 692
    • 12.2 병행 프로그래밍 기초 704
    • 12.3 공유 메모리 724
    • 12.4 메시지 전달 749
    • 12.5 정리 768
    • 12.6 연습문제 770
    • 12.7 탐구문제 777
    • 12.8 참고자료 778
  • 13장 스크립팅 언어 781
    • 13.1 스크립팅 언어란 782
    • 13.2 문제 영역 788
    • 13.3 월드 와이드 웹 스크립팅 814
    • 13.4 혁신적인 기능 838
    • 13.5 정리 866
    • 13.6 연습문제 868
    • 13.7 탐구문제 874
    • 13.8 참고자료 875
  • 4부 로우레벨로 되짚어본 프로그램의 비밀 878
  • 14장 실행 가능한 프로그램 작성 881
    • 14.1 후단 컴파일러 구조 881
    • 14.2 중간 형태 886【CD-169】
    • 14.3 코드 생성 889
    • 14.4 주소 공간 구조 895
    • 14.5 어셈블리 897
    • 14.6 링킹 902
    • 14.7 동적 링킹 906【CD-175】
    • 14.8 정리 907
    • 14.9 연습문제 909
    • 14.10 탐구문제 911
    • 14.11 참고자료 913
  • 15장 코드 개선 915【CD-180】
    • 15.1 코드 개선의 여러 단계 【CD-182】
    • 15.2 국소적 최적화 【CD-184】
    • 15.3 기본 블록에서의 중복 제거 【CD-187】
    • 15.4 전역 중복과 자료 흐름 분석 【CD-196】
    • 15.5 루프 개선 I 【CD-207】
    • 15.6 명령어 스케줄링 【CD-212】
    • 15.7 루프 개선 II 【CD-216】
    • 15.8 레지스터 할당 【CD-228】
    • 15.9 정리 【CD-233】
    • 15.10 연습문제 【CD-234】
    • 15.11 탐구문제 【CD-239】
    • 15.12 참고자료 【CD-241】
  • 부록 A 이 책에서 다룬 프로그래밍 언어 917
  • 부록 B “설계와 구현” 목차 929
  • 부록 C “예” 목차 935
  • 참고자료 951

관련 블로그 글

『새로 보는 프로그래밍 언어』로 이제 몸만들기 시작!
사용자 삽입 이미지
몸값을 올려주는 바로 그책. 『새로 보는 프로그래밍 언어』가 드디어 출간됐습니다. 책 내용이야 저번 블로그 글에서 상세히 설명 드렸으니 잘 아실 테죠? 1004페이지에 달하는 책으로 양으로 보나 질로 보나 가히 그 "값"을 하는 책입니다.
사용자 삽입 이미지
사용자 삽입 이미지
역자 민병호님이 어제 책을 보러 득달같이 달려오셨습니다. 이번에도 이 책을 함께 번역한 김진혁님은 못 오셨어요. (S기업에 다니신다면서요! 얼굴 좀 보여주세요~) 지금 미국에서 공부하느라 여념이 없어 우리 역자풀에 큰 구멍을 내주신 강유님에 이어 민병호님이 괴력(!)을 발휘해주셔서 앞으로도 함께 좋은 책 선보일 수 있을 것 같네요. ^^;

분야를 가리지 않는 병호님께선 요샌 해킹 보안 분야의 따끈따끈한 신간을 번역하고 계십니다. 어제 그 책 이야기로 한바탕 경각심을 불러 일으켜 주셨는데요. 지금 번역하고 있는 "" 책에도 나오는 얘기지만, "길에 떨어진 USB 신난다고 주워서 컴퓨터에 넣고 자신도 모르는 사이 오토런을 실행시켰을 때 벌어지는 엄청난 사태" 등 "USB 경계령, 나아가서는 길에서 주운 아이팟이나 mp3 플레이어 공짜라고 좋아말고 꺼진불도 다시보자"라는. 혹은 메신저 공격 등, 흠.. 제가 한참 이야기를 듣고 난 후에 내린 결론은. "해커들과 온라인에서 떠들면 큰코 다칠지도 모르겠다"는 거.--; 저보고도 무조건 샅샅이 "필독"하라고 강추하신 "" 책은 올해가 가기 전에 여러분께 선보일 수 있을 것 같네요. 병호님께서 매일 새벽 4시반에 일어나 일일 할당량을 채우고 계시거든요.ㅋㅋ 멋져요!

"새로 보는 프로그래밍 언어"의 부록 CD에 260페이지에 달하는 심화학습과 공개 컴파일러, 해석기 링크 모음, 예제 코드 소스파일 등이 들어있다고 말씀드렸죠. 이 CD를 실행하면 다음과 같은 화면이 뜹니다.
사용자 삽입 이미지
 각 메뉴를 클릭하면 한글로 (가능한 한 성의를 다해) 번역한 우리말로 된 문서를 보실 수 있습니다. 왼쪽 메뉴 중 심화학습 메뉴를 클릭해서 목차를 선택하면 "책 본문과 똑같이" 편집한 내용을 보실 수 있구요.
사용자 삽입 이미지
책을 읽으시다가 좀더 깊은 내용을 알고 싶은 분들께서는 부록CD를 열어 열공하시기 바라겠습니다.

부록 CD를 만들면서 부리나케 역자분의 도움을 얻어 모든 내용을 번역해서 실었기에 모양이 좀 예쁘게 잘 빠졌습니다. :) 다만 부록CD에서 한 가지 아쉬운 부분은, "검색" 메뉴에 대한 것인데, 이게 영문만 검색이 가능하고 한글 검색은 되질 않습니다. 가장 마음에 걸리는 부분이죠. --; 검색엔진 프로그램을 자바스크립트로 작성해뒀던데, 텍스트 파일로 몇 메가나 되어서 마감에 닥쳐 수정할 여력이 없었네요. 어쨌든 원하는 단어를 "영어로 검색"하시면 해당 문서를 찾아가긴 합니다. 여러분의 열화와 같은 성원에 힘입어 다음 번에 증쇄를 하게 되면 꼭 한글 검색을 반영해서 수정하겠습니다. 실력파 개발자 분들이 주위에 즐비한데, 뭐 어렵겠어요~? 하지만 아이러니하게도 "풍요 속의 빈곤"이라고 누가 해주실는지 얼른 찾아봐야겠습니다.

또 한 가지, 번역서를 만들다보면, 사실 조판 디자인 이나 페이지 여백을 보기 좋게 만들면서 원서보다는 쪽수가 좀 늘어나기도 합니다. 요새 용지값이 너무 비싸기에 일부러 늘리려는 건 절대 아니고, 먹기도 좋고 보기도 좋은 떡을 만들기 위해 불가피한 일인데요. 이번 책도 원서 910페이지에서 100여페이지가 늘어나서 1004페이지가 되면서 영문으로 검색을 하면 찾아주는 페이지 번호가 번역서에서는 약간 다를 수도 있습니다. 이 점 양해하셔서 잘 봐주시면 감사하겠습니다. m(_._)m 꾸벅. ^^/

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
어제는 병호님께서 역자 기근인 에이콘에 좋은 친구분을 한 분 소개해주셨습니다. 대학원 동기인 친구분인데 "해킹보안" 쪽 책을 저희와 함께 번역하시기로 하셨습니다. 곧 봇물 터지듯 쏟아지는 에이콘의 해킹보안 명서들을 기대하셔도 좋을 거에요. 노란 옷을 입은 "장재현"님은 대전에서 학부를 마치신 후 "게임회사"에서 병특을 하셨다고 하셔서 "아하,『게임회사 이야기』병특 에피소드를 장식하는 그분!이시군요"라고 얘기하기도 했죠.
사용자 삽입 이미지
이야기 들어보니 엄청난 에이콘 책 애독자셨는데, 역자분으로 모시게 되면서 독자를 한 분 잃게 되는 게 아닌가 하는 아쉬움도 있었지만, 어쨌든 장재현님! 에이콘 역자진에 발을 내딛으신 데 대해 진심으로 "환영"합니다! ^^/ (마치 동방신기나 슈퍼주니어 같은 아이들 그룹 멤버로 방송 촬영을 막 마치고 에이콘에 오신 듯한 미모셨습니다.ㅎㅎ)

병호님께서 친구 재현님께 "번역은 말이지~"라고 나름의 노하우를 전수해주시다가, 재현님이 맡게될 책을 보더니 "와, 이 책 정말 좋네요!!"라고 감탄을 하셔서, 전 또 속으로 '그렇죠~ 저희가 책을 쩜 잘 고르잖아요'라며 으쓱했는데....

병호님 왈... "와, 이 책 그림도 많고 코드도 많고 번역하기 진짜 좋은 책이다! 킹왕짱! 하하하..." -0-;;;

사실 역자분이 오면 꼭 물어봐야지 하는 게 있어서 병호님께 물었습니다. "제가요, 우리 블로그에 이 책 읽으면 몸값이 올라간다고 큰소리 뻥뻥쳤는데요, 이 책을 그렇게 꼼꼼히 번역하고 수십번 읽으신 역자분의 몸값은 도대체 얼마나 올랐나요?..."
그러자 바로 돌아오는 대답! "100배요! 진짜에요~" 흠. 그렇다네요. 소명은 늘 진실만 말하는 역자분께서 직접 해주실 거라 믿습니다!ㅋㅋ

민병호님, 김진혁님 두 역자분 모두 고생하셨습니다.
이 따끈따끈한 신간 『새로 보는 프로그래밍 언어』는 지금 YES24, 교보문고, 인터파크, 강컴, 알라딘을 비롯한 전국 유명서점에서 판매중입니다.
CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

몸값이 올라가는 책? 『새로 보는 프로그래밍 언어』

사용자 삽입 이미지

새로 보는 프로그래밍 언어
개발자의 가치를 높이는 프로그래밍 언어 대백과
마이클 스콧 지음 | 민병호 김진혁 옮김 | 1004페이지 (부록CD 260페이지 추가수록)
45,000원 | 2008년 8월 21일 출간 예정

이 책을 한 마디로 표현해볼까요?
괴물!
프로그래밍 언어를 다룬 책 중에 여태까지 이런 책은 한 권도 없었습니다.
여기서 "이런"은 뭘 의미할까요? eRun? 자, 이제부터 차근차근 하나씩 설명해드리죠.

정말 몸값을 높이고 싶으신가요? 단지 코드 몇 줄을 잘 짠다고 몸값이 올라간다고 생각하시나요? 개발자로서 자신의 앎이 부족하다고 느끼신 적은 없으신가요? 학교에서 배우는 프로그래밍 언어론이 수박 겉핥기에 지나지 않는다고 느껴보신 적은 없습니까.

이 책의 원서 목차를 보고 난다긴다 하는 개발자분들이 모두 혀를 내두르셨습니다. 심지어 어떤 프로그래밍 언어를 전공하셨다는 일급 자바 개발자께선 "이런 '발칙한 책'을 봤나"라는 반응을 하실 정도였으니까요. (사실은 좀더 저급한 표현을 쓰셨지만, 여기서는 조금 정제해서 말씀드려야겠죠 -0-)
사용자 삽입 이미지
이 책에서 다루고 있는 프로그래밍 언어의 "간추린" 계보입니다. 이 책에서는 명령형 언어, 함수형 언어, 논리형 언어, 병행/병렬 프로그래밍, 그리고 최근 부쩍 떠오르는 스크립팅 언어까지 거의 "모든" 언어를 다루고 있습니다. 그저 다루는 정도가 아니라 각 언어로 구현한 코드 사례를 보여주며 그 언어의 장단점까지를 파헤치고 있습니다. 개발자가 빠지기 쉬운 함정과 오류를 낱낱이 보여줍니다.
사용자 삽입 이미지
그림이 좀 보이세요? 이 책에서 다루는 간단 목차입니다. 네, 이 책의 당초 집필 목적은 교과서입니다. 학부 3,4학년, 혹은 대학원생을 위한 아주아주 훌륭한 교과서입니다. 잠깐만요! 그렇다고 단지 교과서로 지루하게 나열된 책은 결코 아닙니다. 기존 프로그래밍 언어론 책에서는 다루지 않았던 정석과 기본기를 차근차근 쌓아가게 하는 책입니다.

1부. 프로그래밍 언어의 기초에서는 컴파일러와 컴퓨터 아키텍처, 프로그래밍 언어 설계와 구현에 대한 기본기를 닦아줍니다. 2부. 프로그래밍 언어의 핵심요소에서는 명령형 언어 C와 C++등을 중심으로 프로그래밍 언어의 공통적인 사항과 기본 개념을 다룹니다. 이어지는 3부. 다른 관점에서 바라본 프로그래밍 모델에서는 함수형 언어, 논리형 언어, 병행 프로그래밍 등과 함께 이 책의 (원서) 개정판에서 추가된 내용으로 PHP, 루비, 파이썬 등 스크립팅 언어들까지 다루며 내용을 이어갑니다. 4부에서는 드디어 로우레벨 관점에서 바라본 프로그램 되짚기가 등장합니다. 중간언어 등을 훑어보며, 프로그램을 컴파일 후 기계어로 변환된 코드를 분석해 코드를 개선하는 프로그램 최적화까지 다루게 됩니다.

그야말로 프로그래밍 언어의 개념, 이론, 설계, 구현, 최적화 등 전체적인 프로그래밍 언어의 전반을 꿰뚫고 각 사례를 모든 프로그래밍 언어로 구현해 그 언어들의 강점과 취약점을 분석해줌으로써, 결국 개발자가 프로그래밍 과정에서 가장 적절한 언어를 어떻게 선택해내 얼마나 효율적인 프로그램을 만들 수 있을까를 알려주는 것을 최종 목표로 합니다.

이제 왜 책의 제목에 "새로 보는"이라는 수식어가 붙었는지 이해가 가세요? 저희도 처음엔 아주 쉽게 "완전정복"이라든가 "완벽 가이드" "총서" 등의 아주 식상한 문구를 생각했었습니다. 하지만 이 책은 기존에는 전혀 볼 수 없었던 프로그래밍 언어론에 대한 절대(!)적이고도 상식(!)적인 프로그래밍 언어 대백과라고 할 수 있습니다. 기존 관념을 깨고 혜안을 갖게 해주는, 프로그래밍 언어의 비밀을 한꺼풀 벗겨내는 책이거든요. 자, 이 정도면 왜 자신있게 여러분의 몸값을 높여주는 책이라고 큰 소리를 쳤는지 조금은 동의를 하시나요? 아직도 이해를 못 하시겠다면 8월 21일 서점에 가셔서 직접 확인하시기 바랍니다. :)

게다가 함께 제공하는 부록CD에는 책의 분량(이미 1004페이지, 천사에요. angel ^^)이 비대해지는 것을 막기 위해 중간중간 좀더 심도깊은 심화학습에 해당하는 내용을 옮겨 담았습니다. 260페이지에 달하는 분량인데요. 이것만 해도 웬만한 책 한 권 분량은 족히 됩니다. 부록 CD에는 그밖에도 공개 컴파일러와 해석기 링크 모음, 책에 나온 300개 이상의 코드의 완전한 소스파일 등이 가득가득 들어있습니다. 지금 CD 메뉴 내비게이션까지 한글로 옮겨내는 마무리 작업 중인데요. 독자를 감동시킬 만한 세심한 작업에 최선을 다하고 있습니다. 원서보다 나은 번역서, 에이콘 책이 늘 지향하는 바죠.

이 책을 번역한 역자 민병호님과 김진혁님은 강유님과 함께 『TCP/IP 완벽 가이드』를 공역하셨던 분들인데 드디어 이제 두 분만의 멋진 작품을 만들어내셨습니다. 그때만해도 대학원생 신분이셨는데 이제 한 분은 국방과학연구소에서 한 분은 삼성전자에서 열혈 근무중인 사회인이 되셨어요. 공교롭게도 이 분들의 번역 작품 두 권이 모두 1000페이지가 넘어가는 방대한 작업이었습니다. TCP/IP 완벽 가이드가 1,600쪽이었고, 이 책 『새로 보는 프로그래밍 언어』는 CD에 담긴 내용까지 합치면 1,260쪽을 넘어서니 정말 어마어마하죠. 그간 정말 고생 많으셨어요. TCP/IP 책을 마치고 출판사를 찾아오셔서 "한우 꽃등심 사주세요"하셨었는데, 이번에 책이 나오면 뭔가 미리 준비를 해둬야 할 것 같습니다. ㅎㅎ

제조물 책임법(Product Liability Law) 일명 PL법이라는 게 있습니다. "고양이를 렌지에 넣고 돌려 털을 말리지 마세요"(전자렌지)라든가 "에어콘에서 나오는 물은 마시지 마세요"(에어콘) 등 기상천외한 경고문을 삽입해둠으로써 소비자가 제품 오용으로 인한 피해를 막기 위하고 불가피한 소송을 피하기 위함이라고 하는데요. 정말 기상천외하고 황당한 경고문이 많습니다. 세상은 요지경이잖아요. 별의별 일이 다 일어나는 별천지 세상.

저희도 판권지쪽에 문구하나를 삽입해야 할까요?

"누워서 이 책을 읽으시다가 책을 놓치시면 머리에 심각한 상해를 입을 수 있습니다"
(대처법: 반드시 엎드려서 읽으세요!)
"베고 주무시다가 목 부분에 경련이 일어나 며칠간 고생을 할 수 있습니다"
(대처법: 좀더 얇은 다른 책을 고르세요.)
"책을 읽고 났는데도 가치가 높아지지 않았다구 느끼신다구요? 제대로 꼼꼼히 읽으셨는지 다시 한번 확인해보세요. 그럴 리가 없습니다. :) "


모두 열공하셔서 정말 훌륭한 개발자 되세요! 고고싱!!

CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

[ p55 아래에서 6행 ]
서커 1970(circa 1970)라는 → 1970년대를 풍미한

[ p57 1.5 '프로그래밍 환경' 절 4행 ]
좋은 프린터는 형식화(formatting) 규약의 시행을 돕는다. → 코드 형식 지정기를 사용하면 코드 관례를 지킬 수 있다.

[ p57 아래에서 3행 ]
"핵심" 파일을 → "core" 파일을

[ p65 아래에서 4행 ]
나이브(naive)한 → 소박한

[ p66 아래에서 9행 ]
# (j < ispan style="background-color: #faffa9">가) 아니면 분기 → # (j < ispan style="background-color: #faffa9">)가 아니면 분기

[ p66 아래에서 3행 ]
# store i → i 저장

[ p67 14행 ]
exit status → 종료 상태

[ p67 그림 1.5 제목 ]
나이브한 → 소박한

[ p71 탐구문제 1.9 (a) ]
-s → -S

[ p919 5번째 문단 1행 ]
라 3 → 모라 3

[ p925 C 절 4행 ]
도적 의미 검사는 → 동적 의미 검사는

[ p925 C++ 절 1행 ]
"산업 강도"의 → 업계에서 널리 쓰이는