| 개발자 책꽂이 |
여름맞이 책 2선: 아키텍처와 프로그래밍 언어 관련 |
 |


박재호 jrogue@gmail.com
임베디드 소프트웨어 개발자로 일하고 있다. 블로그 '컴퓨터 vs. 책'과 '프로젝트 관리'를 운영하고 있으며, "조엘 온 소프트웨어"를 비롯한 IT 전문서적 번역가로 활동 중이다.
2007년 6월 12일
|
|
 |
|
2007년도 벌써 절반이 지나가고 있다. 여름이 되면 아무래도 야외 활동이 많아지므로 책과 멀어지기 쉬운데, 이럴 때일수록 의식적으로 책에 가까이 하려는 노력이 필요하지 않을까 싶다. 개발자에게 도움이 될만한 내용이 담긴 신간을 두 편 소개하고자 한다. 지난번과는 조금 다른 각도에서 접근하기 위해 이번에는 컴퓨터 아키텍처와 프로그래밍 언어 관련 주제를 뽑아보았다.
1번 타자
인사이드 머신: 그림으로 배우는 컴퓨터 아키텍처와 마이크로프로세서
존 스토크스 지음, 전동환/안익진 옮김, 에이콘출판사 2007년 출간
전산이나 컴퓨터 공학 전공이라면 컴퓨터 아키텍처 과목을 수강했을 것이다(대다수 전산이나 컴퓨터 공학과에서는 아키텍처를 전공 필수로 지정하고 있다). 하지만 시대에 뒤떨어진 내용, 현실과 동떨어진 예제, 따분한 구성으로 인해 많은 사람들이 울며 겨자 먹는 심정으로 교과서를 읽었음이 틀림 없다. 요즘 나오는 아키텍처 교과서도 별반 다르지 않았다.
그렇다면 아키텍처 서적을 재미있게 만들지 못하는 이유는 무엇일까? 여러 가지 이유가 있겠지만 교과서는 무겁고 수식도 곁들이고 검증된 내용이 들어가야 한다는 편견이 가장 크게 작용한다는 생각이다. 하지만 매일 컴퓨터를 활용하는 입장에서 이런 편견은 엄청난 장애물로 다가온다. 코어 2 듀오를 탑재한 노트북이 책상 위에 놓여있는데, 사용은 고사하고 실물을 구경조차 하기 힘든 PDP-11 어셈블리어를 배우고 있어서야 말이 되겠는가?
하지만 이런 답답한 상황은 점점 개선되고 있는 듯이 보인다. 특히 이번에 새로 출간된 ‘인사이드 머신’은 부제인 ‘그림으로 배우는 컴퓨터 아키텍처와 마이크로프로세서’가 암시하듯이 어렵고 딱딱한 컴퓨터 아키텍처와 마이크로프로세서를 그림을 곁들여 쉽게 설명하고 있다. 대학교 2~3학년 수준을 독자 대상으로 염두에 두고 만든 책이지만, 전산 전공자는 물론이고 CPU에 관심이 많은 비전공자도 즐겁게 읽을 수 있도록 수식은 최대로 줄이는 대신 풍부한 그림을 통해 현실적인 예를 들면서 독자 호기심을 북돋운다. 독자들의 즐거움을 극대화하기 위해 개인용 컴퓨터 관련 벤치마크와 각종 새소식을 전하는 멋진 사이트인 아르스 테크니카(Ars Technica: The Art of Technology) 공동 설립자이자 수석 CPU 편집자인 존 ‘한니발’ 스토크스는 다양한 CPU를 다뤄본 풍부한 경험을 토대로 비교분석법을 도입해 각 CPU 별로 어떤 설계 철학이 있는지를 핵심부터 꿰뚫어준다.
이 책에서 다루는 CPU는 크게 인텔 펜티엄 계열(오리지널 펜티엄, 펜티엄 II, III, IV, 펜티엄 M, 코어 듀오, 코어 2 듀오)과 파워PC 계열(600, 700, 7400, G4, G4e, G5)로 나뉘어지며, 같은 계열 내 CPU 변천사는 물론이고 다른 계열 CPU 아키텍처끼리 공통점과 차이점을 비교 분석함으로써 CPU 관련 엔지니어들 앞에 놓여진 문제점과 해결 방안을 속 시원하게 풀어헤친다. 요즘 나온 복잡한 CPU만 다룬다고 지레 겁먹을 필요는 없다. 기본 개념을 빼놓지 않기 위해 DLW라는 아주 간단한 이론적인 CPU를 소개함으로써 몸풀기에도 신경을 써주니까.
이 책을 읽고 나면 x86 아키텍처가 끈질기게 살아 남아 아까운 실리콘 면적을 낭비하는 이유, 파이프라인과 분기 예측이 중요한 이유, 캐시 크기가 CPU 성능에 직접적인 영향을 주는 이유, 인텔과 AMD가 두 손 두발 다 들고 CPU 클럭 속도 개선을 포기한 이유, 듀얼 코어가 클럭 주파수가 낮음에도 불구하고 CPU 성능을 개선해 주는 이유, 컴파일러가 중요한 이유에 대해 이해도가 한 단계 높아진 자신을 발견할 것이다.
아쉽게도 이 책은 주로 전반적인 컴퓨터 아키텍처가 아니라 CPU에 밀접한 아키텍처만 다루기 때문에 기존 아키텍처 교과서를 100% 대체하지는 못하겠지만, CPU 부문만 놓고 보면 기존 교과서에 비해 충분히 경쟁력을 갖추고 있다는 생각이다.
노파심에서 이야기하겠는데, 이 책을 읽는 도중에 각별히 주의할 사항이 있다. 그림과 표가 워낙 많은 관계로 인해 번역과 편집 과정에서 발생한 실수가 독자 여러분을 괴롭힐지도 모르겠다. 따라서 반드시 출판사에서 제공하는 정오표를 확인해 미리 오탈자를 수정하기 바란다.
2번 타자
Effective C#: 강력한 C# 코드를 구현하는 개발지침 50가지
빌 와그너 지음, 김명신 옮김, 한빛미디어 2007년 출간
며칠 전 위키피디아에서 ‘Sapir–Whorf and programming languages’라는 흥미로운 항목을 찾았다. 특정 프로그래밍 언어에 익숙한 개발자는 다른 언어의 몇몇 개념을 심도 깊게 이해하는 과정에서 어려움을 겪을지도 모른다는 이론이다. 여기서 흥미로운 인용구 두 개를 짚고 넘어가자.
“프로그래밍 과정에서 생각하는 방식에 영향을 미치지 않는 언어는 배울 가치가 없다.”
“훌륭한 포트란 프로그래머는 어떤 언어를 사용해도 포트란 코드를 작성할 수 있다.”
물론 아주 똑똑한 프로그래머가 수십 가지 프로그래밍 언어를 자유자재로 언어 특성에 맞춰 사용한다는 이야기를 듣기도 하지만, 일반적인 현상으로 보기는 곤란하다. 모든 사람이 일반적인 프로그래밍 언어 이론만 습득해서는 특정 프로그래밍 언어 특성에 맞춰 프로그램을 제대로 작성하기 어렵기 때문에 고전적인 ‘The C Programming Language(2판)’, ‘이펙티브 C++(3판)’, ‘정석으로 배우는 Thinking in Java(개정판 JDK 1.4)’와 같은 책들이 꾸준하게 인기를 얻고 있다.
그렇다면 마이크로소프트 .Net 프레임워크에서 동작하는 C# 언어는 어떨까? 물론 C#을 접해본 개발자마다 이 프로그래밍 언어가 환상적으로 쉽고 생산성이 높다고 칭찬을 하고 있지만, 정말 C#답게 프로그램을 만들어야 하는 상황에 부딪히면 답답한 심정이 들 것이다. 물론 C++나 자바를 이미 익힌 개발자라면 C#에 접근하기가 훨씬 쉽겠지만, 아무래도 C#만이 풍기는 맛을 느끼기에는 자료가 충분하지 않았다.
다행히 이런 어려운 상황을 지원하기 위해 ‘이펙티브 C++’를 오마주한 ‘이펙티브 C#’이 등장했다. 이미 ‘이펙티브 C++’를 읽어본 독자라면 충분히 눈치채겠지만, ‘이펙티브 C#’도 C#을 C#답게 활용하는 여러 가지 힌트와 조언을 담고 있다.
이 책은 단순히 C# 프로그래밍 언어 특징을 설명하는 수준을 넘어 닷넷 환경, 프레임워크, C#을 활용한 설계 방법, 이진 컴포넌트 작성까지 소개하고 있으므로 C# 언어를 둘러싼 거대한 에코 시스템에서 C#을 제대로 활용하는 방법을 다룬다고 생각하면 된다. 물론 언어 특징과 에코 시스템을 절묘하게 엮어놓았기 때문에 C# 구문만 따분하게 설명하는 서술 방식보다 위력이 배가된 느낌이다. 시대가 바뀌면 책을 구성하는 철학도 바뀌듯이 기존에 출간된 ‘이펙티브 C++’과 비교해보면, 이런 식으로 프로그래밍 언어 차원과 에코 시스템을 혼합해 다루는 특성이 가장 큰 차이점이 아닌가 싶다.
이 책의 가장 큰 미덕은 이렇게 해라 저렇게 해라 시시콜콜 간섭하는 대신 실제 하부 동작 원리를 보여주고 이에 따른 장단점을 설명하는 구성 방식에 있다. 물론 이와 같은 장점을 희석시키는 몇 가지 단점으로 인해, 읽다 보면 한 끝 부족한 설명(조금만 더 명쾌하게 다루면 좋았을 부분이 눈에 들어온다), 다소 딱딱한 문체(번역서에 국한된 문제가 아니라 원서도 그렇다고 보인다), 너무 단순화된 예제(예제 깊이가 떨어지므로 현실에 바로 적용하기가 어렵다)라는 부족함이 느껴지기도 한다.
하지만 이런 몇 가지 단점에도 불구하고 C# 개발자라면 이 책을 반드시 읽고 넘어가기 바란다. 당장은 화려한 IDE와 강력한 라이브러리에 가려 필요성을 느끼지 못하겠지만 결정적인 순간에 여러분을 도와줄 내용이 담겨있을지도 모를 테니까.
[지난 developerWorks Column 보기]
|