[펌] 프로그래머 필독서 64선 / 개발자가 꼭 읽어야 할 책 64선
너무 좋은 책 소개 글이 있어 업어왔습니다. 원본 출처는 아래에 있습니다.
[출처] 프로그래머 필독서 64선 / 개발자가 꼭 읽어야 할 책 64선|작성자 위키웨어
안녕하세요. 프로그래머에게 도움이 될만한 필독서 64 개를 선정하여 아래와 같이 정리를 하였습니다. 이 목록이 프로그래머에게 많은 도움이 되길 바랍니다. 선정된 책은 원서를 기준으로 제목을 적었으며, 번역본이 있는 경우는 원서와 함께 번역본 이미지를 같이 첨부하였습니다. 번역본이 있더라도 원서가 더 나은 경우는 별도로 코멘트를 달았습니다.
1. 실용주의 프로그래머; The Pragmatic Programmer: From Journeyman to Master, by Andrew Hunt (Author), David Thomas (Author)
지금까지 필자가 읽었던 컴퓨터 책 중 최고의 책 한 권만을 꼽으라면 단연 본서 Pragmatic Programmer를 꼽을 것이다. 그만큼 필자의 프로그래밍 인생에 많은 영향을 주었고, 다시 매니저가 된 필자로 하여금 팀원들에게 영향을 끼치고 있기 때문이다.
프로그래밍의 세계에는 많은 이론들이 생겨나고, 저마다 혁신적인 방법론을 제창하기도 하며, 프로그래밍의 왕도에 대한 수많은 논란이 벌어지고 있다. 도대체 더 나은 소프트웨어를 만들려면 어떻게 해야 하는 것일까? 지금까지 우리는 구조적 프로그래밍, OOP, Generic 프로그래밍, 컴포넌트 기반 개발, 디자인 패턴, 리팩터링, Aspect Oriented Programming 등등 수많은 이론과 방법을 접하고 있으며, 앞으로도 새로운 이론들은 계속 나올 것으로 보인다. 하지만 이러한 많은 이론들이 추구하는바 더 나은 소프트웨어를 만드는 더 나은 방법의 공통 요소가 있는 것은 아닐까? 그런 것이 있다면 어떤 것일까?
본서는 그 공통요소에 대해 명쾌한 비유와 설명, 실용적인 예시로 필자의 궁금증을 풀어주었다. DRY나 직교화 같은 개념을 마음속으로 이해하고 나면 위에 예로 들었던 수많은 방법론들이 어떤 필요성에서 출발해서 왜 이런 형태로 존재하고, 또 앞으로는 어떻게 나아갈 것인지에 대한 통찰을 얻을 수 있다. 깨진 창문이나 삶은 개구리 같은 식의비유를 통해서 팀원들 간 이해의 공감대를 넓힌 것은 정말 가치 있는 일이었다.
필자의 회사에서는 새로운 팀원을 채용하기 전에, 지원자에게 Pragmatic Programmer를 면접보기 전에 읽고 올 것을 요구하고 있다. 안 읽고 온 사람에게는 책에 있는 것과 똑같은 얘기를 회사에서 해줘야 하기 때문이다.
늦은 감이 있지만 이러한 명저가 한국어로 출간된다는 점에 대해 너무나도 다행스럽게 생각하며, 독자 여러분도 깨달음의 기쁨을 공유할 수 있기를 기원한다. [IMC게임즈 프로듀서 김학규]
2. Code Complete, (Second Edition) by Steve McConnell (Author)
Jolt Award 두 번 수상 영광에 빛나는 최고의 프로그래밍 실무지침서!
프로그래밍에 대한 최고의 실무적인 지침서로 널리 알려진 스티브 맥코넬의 Code Complete 제 1판은, 10년이 넘는 기간 동안 개발자들이 더 나은 소프트웨어를 만드는 데 도움을 주었다. 이제 이 고전적인 책은 소프트웨어 구현에 대한 예술과 과학을 설명하기 위해서 최신의 기법들과 수백 개의 새로운 예제 코드가 포함되어 개정되었다. 연구와 학계, 그리고 상업적인 기법들에 있는 지식들을 바탕으로, 맥코넬은 가장 효율적인 기법과 반드시 알아야 하는 원칙들을 이 실용적인 지침서에서 종합적으로 다루었다.
이 책은 여러분의 실무 경험이나 개발 환경, 또는 프로젝트의 크기에 상관없이 도움이 되는 정보를 제공하고 여러분의 사고를 자극함으로써 가장 품질이 뛰어난 코드를 작성하는 데 도움을 줄 것이다. [출판사 서평]
"초보 개발자나 숙련된 개발자 모두에게 Code Complete 제 2판은 프로그래밍에 대해서 생각할 수 있는 최고의 방법을 가르쳐준다."
- Jeffrey Richter(www.wintellect.com), Applied Microsoft .NET Framework Programming 저자
"소프트웨어 구현에 관한 최고의 지침서 - 프로그래머가 무인도에 갈 때 반드시 가져가야 할 책"
- Diomidis Spinellis, Code Reading: The Open Source Perspective 저자
3. 리팩토링; Refactoring: Improving the Design of Existing Code, by Martin Fowler (Author), Kent Beck (Author), John Brant (Author), William Opdyke (Author), Don Roberts (Author)
리팩토링은 소프트웨어를 개선하는 검증된 방법이다. 리팩토링은 외부 동작을 바꾸지 않으면서 내부 구조를 개선하는 방법으로, 소프트웨어 시스템을 변경하는 프로세스이다. 이것은 버그가 끼어들 가능성을 최소화하면서 코드를 정리하는 정형화된 방법이다. 이 책은 리팩토링에 대한 가이드이고 전문 프로그래머를 위해 쓰여졌다. 이 책에서는 자바로 된 예제를 사용하고 있다.
수년간 전문가 수준의 객체 프로그래머들은 기존 소프트웨어 프로그램의 구조적 무결성과 성능을 개선하기 위해 리팩토링이라는 기술을 사용해왔다. 문서로 정리되지 않고 일부 전문가들 사이에서만 알려져 있던 이 기술이 객체 기술의 선도자로 유명한 Martin Fowler에 의해 모든 개발자가 공유할 수 있는 형태의 문서로 정리하는 일이 시도되었다. 이 책에서 저자는 리팩토링의 주요 기술을 이해하기 쉽게 설명하고, 소프트웨어 개발자가 새로운 프로세스를 통해 이익을 실현하는 방법을 제시하고 있다.
이 책에서는 일반적으로 리팩토링을 적용할 수 있는 경우를 보이고, 나쁜 디자인의 코드를 좋은 디자인으로 바꾸는 방법을 설명한다. 리팩토링의 각 단계는 단순하다. 너무 단순해서 아무런 가치가 없어 보일 정도이다. 리팩토링에서는 필드를 한 클래스에서 다른 클래스로 옮기거나, 메소드의 특정 부분을 취해 별도의 메소드로 만들기도 하고, 어떤 메소드를 상속 구조의 위쪽 또는 아래쪽으로 옮기기도 한다. 각각의 단계는 간단하게 보이지만, 이런 작은 변화의 누적된 효과가 근본적으로 디자인을 개선할 수 있다. 보통의 소프트웨어 쇠퇴 개념과는 정확하게 반대이다. [예스24 제공]
4. GoF의 디자의 패턴; Design Patterns: Elements of Reusable Object-Oriented Software, (Addison-Wesley Professional Computing Series) by Erich Gamma (Author), Richard Helm (Author), Ralph Johnson (Author), John Vlissides (Author)
이 책은 이미 많은 책들이 잘 소개하고 있는 객체지향적인 기술이나 설계를 소개하기 위한 책이 아니다.
이 책은 여러분이 최소한 한 가지 객체지향 프로그램 언어에 관해서 꽤 숙달되었다는 가정하에 객체지향 소프트웨어를 설계할 때 겪는 특별한 문제에 대한 간결하고 명확한 솔루션을 서술한 디자인 패턴에 관한 책이다. 디자인 패턴은 오랜 시간 동안 발전되고 진화되어 온 솔루션들을 집대성한 것이다. 디자인 패턴을 이해하게 되면 다른 사람들이 경험했듯이 "아!"라는 탄성을 지르게 될 것이다. 그리고 더 이상 전과 같은 방법으로 객체지향 설계를 생각하지 않게 될 것이다. 자신의 설계를 보다 더 융통성 있고, 모듈화되고, 재사용 가능하고, 이해하기 쉬운 것을 만들 수 있는 통찰력을 지닐 것이다.
책의 내용은 두 가지 주요 부분으로 나뉜다. 첫 번째 부분은(1장과 2장) 디자인 패턴이 무엇인지와 디자인 패턴이 어떻게 객체지향 소프트웨어 설계에 도움을 주는지를 설명한다. 이 책에서는 디자인 패턴을 어떻게 실생활에서 응용할 수 있는지를 사례 연구를 들어 설명하였다. 두 번째 부분은(3, 4, 5장) 실제적인 디자인 패턴의 카달로그이다. 카달로그는 이 책의 주요 부분을 구성한다. 카달로그는 패턴을 세 가지 종류 -생성, 구조, 행위-로 분류하여 여러 방법으로 이용할 수 있다.
객체지향 시스템이 적어도 한두 개의 패턴들을 사용하지 않는 것은 거의 없고 대규모 시스템은 거의 패턴을 사용하여 설계한다. 이 책은 좁게는 디자인 패턴을 이해하는데 도움을 주고, 넓게는 훌륭한 객체지향 프로그램을 설계하도록 도와 줄 것이다. [강컴닷컴 제공]
5. The C Programming Language, (2nd Edition) by Brian W. Kernighan (Author), Dennis M. Ritchie (Author)
C 언어의 개발자인 Brian W. Kernighan이 저술한 책으로써 C 레퍼런스를 언급할때 빠지지 않는 전통적인 C 언어 책이다. C 언어 특성이 되는 문법적 내용이 명료하고 간단하게 설명되어 많은 사람들에 의해 언급되고 인용되는 책이다.
프로그래밍을 하고자 하는 사람에게 문법을 이해하는 것은 필수이다. 이 책은 ANSI 표준 C 문법에 맞추어 C언어 전반적인 내용을 설명하고 있어서 프로그래밍의 기초를 확실히 다지고자 하는 사람들에게 아주 유용한 책일 뿐 아니라 C 프로그래머라면 한권쯤 소장할만한 레퍼런스격 도서이다.
이 책의 1장에서는 C 언어의 전반적인 구조를 설명하고 있고, 2, 3, 4장에서는 C 언어의 기본적인 사항 즉, 변수, 수식, 제어흐름, 함수 등에 관하여 설명하고 있다. 5, 6장은 C 언어에서 가장 중요한 포인터, 배열, 구조 등에 관하여, 7장은 입출력에 관하여 설명하고 있다. 8장은 UNIX 시스템과의 인터페이스에 대하여 부록 A, B는 그외의 C 특성들에 관하여 설명한다. [예스24 제공]
6. 생각하는 프로그래밍; Programming Pearls, (2nd Edition) by Jon Bentley (Author)
컴퓨터 과학의 이론이 가진 맛과 유용성을 감동적으로 전하는 책.
일반적으로 우리나라 IT 분야, 특히 소프트웨어 분야에서 컴퓨터 과학의 이론이 상당히 과소평가되고 있다. 여러 가지 이유가 있겠지만 품질과 성능보다는 일단 빨리 뭔가를 만들어 시장에 먼저 출시해 선점 효과를 누리려는 이유도 그중 하나가 될 것이다. 따라서 대학 강의에서도 알고리즘과 오토마타와 같은 이론 중심 교과목이 학생들로부터 외면 받고 있으며 정부에서도 이런 한심한(?) 과목보다는 이른바 수요자 중심의 실용적인 과목을 더 권장하는 것이 사실이다. 수요자 중심의 교육(?) 사실 나는 이런 교육에 별로 찬동하지 않는 편이다 . 하여간 실제 생활에서 해결해야 할 문제가 조금만 복잡해지면 우리는 이론적인 배경지식 부족으로 헤매게 된다.
특히 컴퓨터 과학을 체계적으로 배우지 않은 사람은 알고리즘 이론을 상당히 생소하고 어려울 것으로 생각하고 그 효용 가치에 대해 반신반의한다. 예를 들어 컴퓨터가 점점 빨라지고 있으므로 빠른 알고리즘을 개발하는 것은 별로 중요하지 않고 아주 쓸데없는 일이라고 믿기 십상이다.
이 책은 바로 비전문가들을 위한 기초적인 이론 서적이다. 좀더 정확히 말하면 본격적인 이론을 소개하는 것이 아니라 컴퓨터 공학의 이론이 어떤 맛을 지니고 있는지, 이것을 제대로 이해하고 있으면 얼마나 유용한지를 구체적인 예를 들어 잘 설명하고 있다.
필자가 경험한 예를 한 가지 들어보자. 이 책을 필자가 재직하는 대학의 산업대학원 교재로 강의한 적이 있다. 산업대학원 재학생은 대부분 파트타임 대학원생들로서 낮에는 현업에 종사하는 사람들이다. 그중 한 학생이 전자계산 센터에서 일하는데 매우 빈번하게 자료의 정렬(sorting)을 한다고 했다. 그런데 이 책의 처음에 나오는 비트맵 소팅(bitmap sorting) 방식을 이용해 정렬을 해보니 그 전의 방법(버블 소팅)에 비해 무려 열 배나 속도가 빨라졌다고 한다. 비트맵 소팅은 매우 단순하다. 어떤 자료의 값이 d이면 배열 array[d]에 저장하는 것이다. 이 방식을 사용하면 O(n)만에 소팅이 가능한데, 단 반드시 d값이 서로 다른 정수가 되어야만 하고 그 크기가 지나치게 크지 않아야 한다. 그런데 보통 주민등록번호와 다른 등록번호는 대부분 서로 다른 정수이므로 이들은 비트맵 소팅을 이용하는 것이 매우 좋다. 그럼에도 많은 사람이 버블 소팅을 고집하는 것은 거의 모든 교육 과정에서 이 방법에 대해 이론적인 비판 없이 배우기 때문이다.
이 책은 우리가 실제 경험할 수 있는 프로그래밍 과정에서 조금만 머리를 쓰면 훨씬 빠르고, 정확하게 할 수 있는 다양한 테크닉을 소개한다. 일반적인 이론 서적에 비해 이 책에서 제시한 모든 예는 실제 우리의 일상적인 업무 과정에서 일어날 수 있는 것으로 구성되어 있다. 구체적인 프로그래밍 언어 매뉴얼이나 사용자 지침서와 같이 속효성이 있는 내용으로 구성된 것은 아니지만 천천히 음미해가면서, 재미있는 퀴즈를 푸는 듯한 기분으로 읽어나가면 그 감동은 오래 남을 것이다.
- 조환규(부산대학교 정보컴퓨터공학과 교수)
- 월간 마이크로소프트웨어 추천 '개발자가 놓치지 말아야할 책 베스트 10' 추천사에서
7. UML과 패턴의 적용; Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, (3rd Edition) by Craig Larman (Author)
객체지향 분석 및 설계와 Unified Process에 대한 입문서. 단순히 UML을 그리는 것이 아니라, 소프트웨어 설계에 실제로 UML을 적용하는 것을 보여준다. 본질적인 활동, 원리, 패턴을 강조하면서 동시에, OOA/D의 중요한 기술들을 점진적으로 소개하며, 하나의 응집된 사례연구를 세 번의 반복단계를 통해 자세히 보여준다. 이 책에서는 요구사항과 사용사례, 도메인 객체 모델링, 아키텍쳐, 본질적인 객체 설계, 설계 패턴, 반복적인 개발과 "민첩한 UP"에 대한 내용을 다룬다. [강컴닷컴 제공]
* 이 책은 가급적 원서로 보길 권한다. [강재우]
8. 컴퓨터 프로그램의 구조와 해석; Structure and Interpretation of Computer Programs - 2nd Edition, by Harold Abelson (Author), Gerald Jay Sussman (Author)
미국 MIT 대학에서 10년이 넘도록 입문 코스용 교과서로 사용되고 있는 유명한 고전이다. 비록 수년이 흘렀고, Scheme이라는 그다지 대중적이지 못한 언어를 사용했지만, 이 책은 여전히 고전으로서 가치가 빛나고 있다. 세월이 가도 변치 않을 프로그래밍의 근본 원리 전달을 목적으로 집필됐기 때문일 것이다. 이 책은 겉 표지에 마법사 그림이 있어서 마법사 책이라고 불리며, 에릭 레이먼드의 해커 사전에도 등재돼 있다. [월간 마이크로소프트 추천]
'마법사 책'이라 불린 SICP.
SICP(Structure and Interpretation of Computer Programs)는 한때 미국 주요 대학들의 컴퓨터학과 필수 과정 중 하나였다. 책은 매우 어려운 편이고 책의 연습문제라는 것들에는 우수한 컴퓨터 프로그래머들이 고민하던 문제들이 포함되어 있다. 그리고 다른 책과는 그 구성이 너무 다르다. 끝부분에 가면 메타 서큘러 실행기를 거쳐 언어의 컴파일러인지, 하드웨어의 컴파일러인지 경계가 애매한 지경에까지 이른다. 학생들이 당혹해 할 것은 틀림없다. SICP는 컴퓨터 교육의 패러다임을 바꾸어 놓았다는 평을 듣기도 한다.
그림에 나온 람다(lambda)와 apply-eval 개념은 책을 관통하는 주제다. 책은 http://mitpress.mit.edu/sicp/에 온라인 문서로 공개되어 있다. 그래서 SICP에 대해서는 많은 사람들의 의견이 반반으로 갈린다. 생각하고 배울 점이 많은 책이라는 의견과 배울 것도 없으면서 시간만 낭비하게 하는 괴상한 책이라는 견해다. 한때 이 책을 필수 학점의 교재로 사용하던 학교에서는 학생들이 과정을 따라가는 일 자체에 공포심을 느꼈으며 불평도 대단했다. 시종일관 생각하게 만든다는 것이 공포심을 갖게 하는 요인이었다. 필자 역시 처음에는 책이 너무나 이상하다고 생각해서, 보다가 두 번이나 집어 던진 기억이 있다. 필자는 강의를 들은 것이 아니라 혼자서 공부했기 때문에 책의 배경을 이해하지 못했다. 책에 대한 재평가는 SICP와 관련된 메모들과 문서들, 그리고 문서들의 역사적인 맥락을 조금이나마 알게 되면서부터다. 그리고 컴퓨터에 대해 다시 생각하게 되었다. [안윤호http://cafe.naver.com/orangbbok.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1372]
* 최근 이 책의 번역판이 "컴퓨터 프로그램의 구조와 해석"이라는 제목으로 나왔다. [강재우]
9. 맨먼스 미신; The Mythical Man-Month: Essays on Software Engineering, 20th Anniversary Edition by Frederick P. Brooks (Author)
이 책은 전산분야에 있어 너무나도 고전적인 책이다. 아마도 수많은 논문이나 책 등에 수없이 많이 인용되었을 것으로도 생각이 된다. 프레드릭 브룩스는 IBM 360의 아버지라고도 불리우는데, 1975년 많은 경험을 바탕으로 이 책을 썼다. 전산은 수많은 기술들이 짧은 시간 생존하고 그 다음에 나타나는 기술이나 툴 등에 자신의 영광을 물려주어야 하는 급격한 분야이다. 그런 분야에 10년, 아니 20년, 30년동안이나 명맥을 유지하는 책이 있다면 충분이 고전이라 불려도 무방하겠다. 30년 동안 유지될 수 있던 통찰력(소프트웨어 엔지니어링이 왜 근본적으로 어려울수 밖에 없는가에 대한 이유를 근본적인 것과 부수적인 것으로 구분해서 고찰한)은 앞으로도 단일한 기술이나 방법론에 의해 10배의 생산성을 낼수 없다는 저자의 주장을 뒷받침한다. [http://blog.naver.com/skkong89?Redirect=Log&logNo=90007089873]
10. The Practice of Programming, by Brian W. Kernighan (Author), Rob Pike (Author)
C 프로그래밍 언어에 대한 선구자의 한명인 Brian Kernighan과 함께 저술된 이 책은 C/C++, 자바 개발자들이 더 빠르고 유지가능한 코드를 개발할 수 있도록 좋은 프로그래밍 스타일을 소개하는 안내서 역할을 한다. 초반에서는 수많은 전문가들이 혼란스러워 하거나 잘못 작성하는 코드에 대한 문제와 C/C++ 의 단점에 대해 살펴본다. 변수명과 주석문을 만드는 원칙에 대한 안내를 포함하여 여러가지 팁과 해결방안이 제공된다. 그리고 이진정렬이나 퀵정렬과 같은 알고리즘도 다른다. 여기서 저자는 표준 C/C++ 내부에서 제공하는 함수를 이용하는 방법도 소개한다. 배열, 링크드리스트, 트리와 같은 데이터 구조에 대해 설명할때 저자는 C, C++, 자바에 대해 사용가능한 옵션을 서로 비교한다.
다음 부분에서는 코드의 정확성을 검정하기 위한 테스팅 전략과 디버깅 팁을 다루고 있다. 마지막 부분에서는 프로그래머들이 이들 코드에 대한 좀더 나은 제어권을 얻기 위해 인터프리터를 사용할수 있도록 하기 위해 좀더 이식성이 높은 C/C++ 코드를 생성하기 위한 팁들을 제공한다.
부록에서는 책 전체를 통해 제공된 많은 팁들을 요약해 두었다. [강컴닷컴 제공]
* 이 책도 꼭 원서로 보길 바란다. [강재우]
* 올해(2008년) 2월에 새로운 번역판이 나왔다. 제목은 "프로그래밍 수련법"으로 번역판도 권할만 하다. [강재우]
11. Introduction to Algorithms, by Thomas H. Cormen (Author), Charles E. Leiserson (Author), Ronald L. Rivest (Author), Clifford Stein (Author)
저명한 프로그래머와 전산학자들이 극찬한 알고리즘 분야 최고의 고전.
이 책은 많은 알고리즘을 제시하고 상당히 심도 있게 다루면서도 어떤 수준의 독자라도 이해하기 쉽게 알고리즘을 설계하고 분석했다. 각 장은 비교적 독립적으로 완결된 형식을 갖추고 있으며, 연구 주제로도 쓰일 수 있다. 각 알고리즘은 조금이라도 프로그래밍 경험이 있는 독자라면 누구라도 이해할 수 있는 '의사코드(pseudocode)'로 작성했다. 그리고 내용의 깊이나 수학적 정확성은 저해하지 않으면서 알고리즘을 가능한 쉽게 설명하려고 노력했다.
초판은 교수를 위한 표준 참고 도서로 인정받아 미국과 유럽 대부분의 대학에서 교재로 채택되었다. 개정판에는 알고리즘의 역할, 확률적인 분석과 랜덤화된 알고리즘, 선형 계획법에 대한 내용이 추가되고, 전체 내용이 새롭게 수정됐다. 미묘하지만 중요한 변화로는 초판에서는 루프 불변성을 2장에서 소개한 후 책 전반에 걸쳐 루프 불변성을 사용해 알고리즘의 정확성을 증명하는 데 사용했다. 그렇지만 이번 개정판에서는 수학적이면서도 분석적이라는 초점을 흐리지 않기 위해, 초판의 I부에 있던 수학적 배경 지식에 대한 내용 상당 부분을 부록으로 옮겼으며, 도입부에 동기를 부여하는 내용을 추가했다.
일단 원서인 Introduction to Algorithms(이하 Intro, yes24의 책 이름에 오타가 있습니다)는 제가 뭐라고 덧붙일 필요도 없을 만큼 유명한 책이므로, 책 내용에 대한 언급은 하지 않겠습니다. 대신 번역서의 최대 관심사인 번역 상태에 대해 이야기 하지요.
제목의 내용도 역시! 와 번역도 역시! 의 역시는 서로 다른 의미입니다. 내용은 "역시나 소문대로 훌륭하군"이지만 번역은 "역시나 번역서가 다 그렇고 그렇지"입니다. 최근 곽용재님을 위시한 번역가들의 훌륭한 번역에 눈높이가 맞추어져서 그런지, 이 책의 번역 수준은 그렇게 높은 편은 아니라고 느껴집니다. [예스24 제공]
12. Programming Ruby: The Pragmatic Programmers' Guide, Second Edition, by Dave Thomas (Author), Chad Fowler (Author), Andy Hunt (Author)
루비가 세상에 나온 지 벌써 12년이 넘었지만, 최근 몇 년간 루비의 위상은 정말 놀라울 정도로 변화하고 있다. 이런 변화의 중심에는 루비의 킬러 애플리케이션인 레일스(Rails)가 있다. 레일스는 루비의 장점을 잘 살렸기 때문에 현재의 위치에 이를 수 있었고, 또 레일스가 기꺼이 루비의 생산성과 실용성을 증명해준 셈이다.
이런 성공의 후면에는 루비만의 독특한 철학이 있다. 루비는 기계나 컴파일러가 아닌 '프로그래머'를 위한 언어다. 루비 개발의 가장 큰 미덕은 그 코드를 작성하는 프로그래머를 행복하게 한다는 것이다. 코드의 간결함으로 탄성을 지르게 하고, 입가에 웃음을 짓게 한다. [출판사 제공]
13. Advanced Programming in the UNIX(R) Environment, (2nd Edition) by W. Richard Stevens (Author), Stephen A. Rago (Author)
유닉스 개발 환경에서 진보된 프로그래밍 기법을 다루고 있다. 저자의 경험 많은 익숙한 C 언어의 시스템 간의 인터페이스가 잘 나타나 있다. 책은 유닉스 시스템에서의 프로그래밍 인터페이스에 관해 다루고 있다. UNIX 환경에서 프로그램을 만드는 사람들을 위해 쓰여진 책이라 할 수 있다. 대부분의 운영 시스템이 그렇듯이 UNIX는 실행 프로그램을 위해 파일 열기, 읽기, 새로운 프로그램 시작하기, 메모리 영역 할당 등의 수많은 서비스를 제공한다. 또 Standard C 리이브러리는 거의 모든 C 프로그램에서 사용할 수 있는 수많은 함수를 제공한다.
이 책에는 데이터베이스 라이브러리 작성, PostScript, 프린터 드리이버, 모뎀 다이얼러, pseudo 터미날에서 실행되는 다른 프로그램 작성하는 방법 등을 알려주고 있다.
코드에 대한 이해와 분석을 돕기 위해 또 직접 작성할 수 있도록 책에 나오는 모든 코드는 UUNET을 통해 제공된다. 20 페이지에 이르는 부록은 UNIX, POSIX, ANSI C의 세부적인 함수 프로토타입을 제공한다. 이 책은 System V Release 4와 386BSD을 포함한 4.3BSD 등 모든 주요 유닉스에서 적용이 가능하다. 실제 구현을 통해 IEE POSIX, XPG3를 포함해 내용을 좀더 분명하게 이해할 수 있을 것이다. [강컴닷컴 제공]
14. The Art of UNIX Programming, by Eric S. Raymond (Author)
책을 만드는 데에만 무려 5년이나 걸린 이 책에서 저자는 30년에 걸친 소프트웨어 공학의 지혜들을 담고 있다.
최초로 레이몬드는 UNIX를 세계에서 가장 뛰어나고 가장 혁신적인 소프트웨어의 보고로 일궈온 철학, 설계 패턴, 툴, 문화, 그리고 전통들을 한데 묶어냈으며, 이것들이 오늘날의 리눅스 및 오픈소스 운동에 미친 영향들을 설명하였다. 최신의 오픈소스 프로젝트들을 사례로 살펴보면서, UNIX와 리눅스 프로그래머들이 보다 우아하고 이식성이 높으며 재사용가능하고 오래도록 살아있는 소프트웨어를 만드는 과정에서 이러한 지혜들을 적용하는 방법을 낱낱이 살펴본다. [출판사 제공]
15. The C++ Programming Language, (Special 3rd Edition) by Bjarne Stroustrup (Author)
전 세계 수백만 개발자들이 위기의 순간마다 꺼내 드는 C++의 바이블. C++의 창시자인 Bjarne Stroustrup에 의해 쓰여진 이 책은 C++에 대하여 쓰여진 전세계에의 책중에서 가장 신뢰받고 인정받고 있다. C++을 처음 접하는 사람이라도 C++을 익숙하게 다룰 수 있도록 인도하는 한편, 전문가들을 위한 고급기법과 고품질의 정보까지 빠짐없이 소개하고 있다. C++ 표준의 모든 것과 지원 프로그래밍기법 및 설계기법을 소개하고 있다. 제 3판으로, 많은 노하우를 가진 프로그래머들 또한 책에서 더 얻어갈 수 있는 것을 찾을 수 있도록 충실한 보강과 초심자용으로의 내용 조정을 거쳤다. [강컴닷컴 제공]
16. The Art of Computer Programming, Volume 1: Fundamental Algorithms (3rd Edition), by Donald E. Knuth (Author)
알고리즘과 자료 구조에 관한 최고의 책이다. 프로그래머서로 정말 충실하게 공부해둬야만 나중에 좌절을 맛보는 경험을 피할 수 있다. 현재 세 권까지 출판돼 있고, 1997년에 세 번째 판이 나왔다. 읽을 자신이 없다면 최소한 이 책들의 목차만이라도 봐두자. 상대적으로 좀 가벼운 책으로는 로버트 세드게윅(Rovert Sedgewick)이나 토마스 코멘 외 2인 공저의 "Introduction to Algorithm"를 참고하라. [월간 마이크로소프트 추천]
알고리즘을 좀더 깊게 파고들 필요가 있는 독자를 위해 여러 권으로 이루어진 시리즈 도서 중 첫번째 책이다. 그렇기 때문에 모든 알고리즘의 수학적 원리를 아주 상세하게 기술하고 있다. 또한, 대학 교재뿐만 아니라 독학도 가능하도록 충분한 연습문제를 제공하고 있어 배운 내용을 빠짐없이 복습하고 응용해볼 수 있다.
컴퓨터 프로그래밍을 사랑하는 한국의 모든 이에게 진심으로 인사드립니다! 전산학이 끊임없이 사람들을 맺어주는 전 세계적인 분야라는 점을 행복하게 생각합니다. 이 시리즈에 남아 있는 오류를 제거하는 데 수년간 많은 한국 독자들이 저를 도와주었습니다. 새 번역서가 더 많은 사람들을 신비에 싸인 이 분야에 발을 들여놓게 하는 데, 그리고 이 분야를 더욱 발전시키는 데 도움이 되길 희망합니다.
--- 도널드 커누스Donald E. Knuth, 高德納 [예스24 제공]
17. 테스트 주도 개발; Test Driven Development: By Example, (The Addison-Wesley Signature Series) by Kent Beck (Author)
테스트 주도 개발은 최근 학계와 업계에서 많은 주목을 받고 있는 프로그래밍 방법으로, 여러 연구 논문과 실례를 통해 개발자의 생산성과 역량을 증폭시켜준다는 사실이 받아들여지고 있다.
테스트 주도 개발은 테스트가 개발을 주도하는 방법이다. 테스트가 개발을 주도한다는 것은 테스트가 코딩의 방향을 이끌어 간다는 말이다. 테스트를 실패하는 코드가 없으면 코딩을 하지 않고, 코드 상에 중복이 있으면 제거한다는 간단한 규칙을 지켜나가면 자연스레 아름다운 코드가 천변만화 펼쳐진다. 덤으로 회귀 테스트도 생기고, 개발 과정 자체가 즐거워지는 보너스도 있다.
이 책은 이런 테스트 주도 개발을 설명한 최초의 책이자, 가장 권위적인 책이다. 이 책의 저자 켄트 벡은 테스트 주도 개발을 퍼뜨린 장본인이며 객체 지향 프로그래밍의 선구자 중 한 사람이다. 이 책을 통해 독자는 켄트 벡의 옆에 앉아 함께 프로그래밍을 하는 값진 경험을 할 수 있을 것이다.
1부에서는 자바 언어를 사용해서 다중 화폐 코드를 작성하고, 2부에서는 파이썬 언어를 사용해서 단위 테스팅 프레임웍을 작성한다. 3부에는 이런 개발을 할 때 자주 등장하는 패턴들을 정리해 놓았다. [Yes24 제공]
18. 프로젝트 쾌속 개발 전략; Rapid Development, by Steve McConnell (Author)
기존 소프트웨어 공학 분야를 다루는 책과는 달리 실제 최전방에서 싸우는 개발자와 관리자들에게 구체적인 사례와 문제 해결 방법을 제시하는 실탄을 제공한다.
풍부한 배경 자료, 다양한 사례 연구, 수백편의 논문과 책을 토대로 분석한 성공 사례를 바탕으로 프로젝트를 일정에 맞추는 동시에 고품질을 유지할 수 있는 방법을 소개한다. 소프트웨어를 개발하는 과정에서 진행해야만 하는 따분한 요식 행위를 설명하는 대신 당장 적용할 수 있는 본질적이고 구체적인 실행 방법을 제시하고 있다. 기존 소프트웨어 공학 관련 서적의 틀과 한계를 뒤집어 엎어버리는 놀라운 비밀이 숨어 있다.
빌 게이츠, 리누스 토발즈와 함께 세계 소프트웨어계를 대표하는 3대 거장인 『Code Complete』 저자인 스티븐 맥코넬의 작품.
풍부한 배경 자료, 다양한 사례 연구, 수백 편의 논문과 책을 토대로 분석한 성공 사례를 바탕으로 알아본 쾌속 개발 방법.
시대가 변해도 전혀 손색이 없고 오히려 더욱 빛을 발하는 27가지의 검증된 우수 개발법. [출판사 제공]
19. The UNIX Programming Environment, by Brian W. Kernighan (Author), Rob Pike (Author)
유닉스 개발 환경에서 진보된 프로그래밍 기법을 다루고 있다. 저자의 경험 많은 익숙한 C 언어의 시스템 간의 인터페이스가 잘 나타나 있다. 책은 유닉스 시스템에서의 프로그래밍 인터페이스에 관해 다루고 있다. UNIX 환경에서 프로그램을 만드는 사람들을 위해 쓰여진 책이라 할 수 있다. 대부분의 운영 시스템이 그렇듯이 UNIX는 실행 프로그램을 위해 파일 열기, 읽기, 새로운 프로그램 시작하기, 메모리 영역 할당 등의 수많은 서비스를 제공한다. 또 Standard C 리이브러리는 거의 모든 C 프로그램에서 사용할 수 있는 수많은 함수를 제공한다.
이 책에는 데이터베이스 라이브러리 작성, PostScript, 프린터 드리이버, 모뎀 다이얼러, pseudo 터미날에서 실행되는 다른 프로그램 작성하는 방법 등을 알려주고 있다.
코드에 대한 이해와 분석을 돕기 위해 또 직접 작성할 수 있도록 책에 나오는 모든 코드는 UUNET을 통해 제공된다. 20 페이지에 이르는 부록은 UNIX, POSIX, ANSI C의 세부적인 함수 프로토타입을 제공한다. 이 책은 System V Release 4와 386BSD을 포함한 4.3BSD 등 모든 주요 유닉스에서 적용이 가능하다. 실제 구현을 통해 IEE POSIX, XPG3를 포함해 내용을 좀더 분명하게 이해할 수 있을 것이다.
20. 피플웨어; Peopleware: Productive Projects and Teams, by Tom DeMarco (Author), Timothy Lister (Author)
세계적인 IT 기업 컨설팅 회사 애틀랜틱시스템스길드의 공동 대표인 톰 디마르코, 티모시 리스터 두 사람은 지난 30 여년 동안 기업의 조직 관련 컨설팅을 하며 느꼈던 문제점과 교훈들을 모아 <피플웨어>를 펴냈다. 이 책은 90년대 최고의 IT 조직관리 책으로 꼽히며 일본, 독일 등에서 번역되어 지금도 베스트셀러에 올라 있다. 이 책은 지식 정보화 시대의 조직관리의 핵심은 제목에서 알 수 있듯이 바로 사람, 즉 직원이라고 역설한다. 어떻게 하면 직원들이 더 신나게 일할 수 있을까? 직원들이 열심히 목표를 위해 돌진하기 위해 관리자들은 무엇을 할 것인가? 이 책은 직원들을 열정적으로 일하지 못하게 하는 방해요소를 짚어보고 그 해결책을 명쾌하게 제시한다. [출판사 서평]
21. 이펙티브 STL; Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library, by Scott Meyers (Author)
C++ 표준 템플릿 라이브러리(STL)를 효과적으로 활용하는 50 가지의 명쾌한 테크닉 모음.
C++의 표준 템플릿 라이브러리(Standard Template Library: STL)는 가히 혁명적인 프로그래밍 도구로 주목을 끌고 있으나, 잘 사용하는 방법을 공부하는 일은 늘 어렵다고 알려져 왔다. 이것은 지금까지의 이야기이다. C++ 프로그래밍의 베스트 셀러 서적, Effective C++와 More Effective C++의 저자 스캇 메이어스(Scott Meyers)가 새롭게 선보이는 이 책에 의해, STL이 가진 모든 것을 끌어내는 전문가의 경험적 노하우-거의 항상 해야 하며 피해야 할 일-들이 하나씩 드러난다!
다른 책은 STL에 무엇이 들어 있는가에 대해서만 설명하고 있으나, Effective STL은 이것을 효과적으로 사용하는 방법을 가르쳐 준다. 이 책에 정리된 50 가지의 가이드라인은 메이어스 특유의 날카로운 분석과 적절한 예제로 뒷받침되어 있어, 여러분은 "무엇(what)을 해야 하는지"를 배우는 데에만 그치지 않고 "언제(when) 해야 하는지"와 "왜(why) 해야 하는지"까지 속속들이 알 수 있게 된다. [강컴닷컴 제공]
22. 조엘 온 소프트웨어; Joel on Software: And on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work with Them in Some Capacity, by Joel Spolsky (Author)
2005년 15회 JOLT상 수상작! 이 책은 개발자들에게 인기가 높은 블로그인 조엘 온 소프트웨어(http://www.joelonsoftware.com)에 수록한 주옥같은 글 중에서 특히 독자들이 관심을 보일 만한 베스트를 뽑아 엮은 책이다. 조엘은 딱딱한 소프트웨어 공학 서적에서 찾아보기 어려운 소프트웨어 개발자의 애환과 톡톡 튀는 생각을 수필에 가까운 부담 없는 필체로 기술하고 있다. 따라서 최전선에서 소프트웨어를 직접 만드는 개발자를 비롯해 후방에서 병참을 지원하는 관리자에 이르기까지 소프트웨어와 관련이 있는 누구나 부담없이 읽을 수 있는 내용으로 가득차 있다.
이 책에서는 사람을 고용하고 동기를 부여하는 방법, 작업 일정을 예측하고 관리하는 방법, 소프트웨어 기능을 설계하고 실제로 유용하게 사용하도록 명세하는 방법, 소프트웨어 개발 과정에서 생기는 함정을 피하는 방법, 팀을 구성하고 동기 부여하는 방법, 재사용과 NIH(Not-Invented-Here) 신드롬, 소프트웨어 일정이 지연되는 것처럼 보이는 이유, 여러 가지 사례를 통한 소프트웨어 회사의 명암에 대해 논하고 있다. 때로는 유머러스하게 때로는 날카롭게 문제점을 지적함으로써 당신이 아키텍트이거나 개발자거나 관리자거나 상관없이 소프트웨어 개발과 관련해서 여러 가지 각도에서 기존에 간과하고 있던 부문까지 생각이 미칠 수 있도록 도와준다. [출판사 제공]
23. 소프트웨어 개발의 지혜; Agile Software Development, Principles, Patterns, and Practices, by Robert C. Martin (Author)
이 책은 소프트웨어 개발의 세 가지 주제인, 원칙, 패턴, 방식을 다룬다. 원칙은 진리이다. 사물이 존재하는 방식에 상대되는 개념으로, 사물이 그렇게 되어야만 하는 방식을 알려준다.이것은 추구할 이상이자, 지향할 목표이다. 하지만 따라야 할 규칙도 아니고 지켜야 할 법칙도 아니다. 이 안에는 지혜가 있지만, 이 지혜가 절대적인 것은 아니다. 각 개발자와 각 개발 팀은 이 원칙을 적용할 시기와 위치를 스스로 판단해야만 한다. 패턴은 문제의 해결책이다. 이 해결책들은 특정 상황에서는 적절하지만, 다른 상황에서는 그렇지 못하다. 이득도 있지만, 비용 또한 있다. 이것은 수백 명의 서로 다른 소프트웨어 설계자들이 축적한 지식을 나타내지만, 그래도 그 지식은 여러분 각자의 지성에 의해 적용되어야 한다. 패턴은 좋은 것도 나쁜 것도 아니다. 패턴은 단지 존재할 따름이다. 어떤 패턴을 사용하고, 그 패턴을 언제 사용할 지를 결정하려면 헌신적이고 주의 깊은 소프트웨어 설계자가 필요하다.
방식은 고품질의 소프트웨어 생산을 돕는 행동 양식이다. 이는 팀 멤버들이 멤버 서로에게, 업무에, 그들이 만드는 코드에 대해 어떻게 행동해야 하는 지를 기술한다. 이 방식들은 많은 팀에서 시도되어 왔고, 주목할 만한 이득을 얻은 것으로 밝혀져 왔다. 그렇지만 모든 팀이 이 방식들을 모두 채택할 수는 없을 것이다. 각 팀은 이 방식들을 시도해보고, 그 방식이 유익한지 아닌지를 각자 판단해야만 한다. [인터파크 제공]
* 이 책은 원서로 읽길 바란다. [강재우]
24. Head First Design Patterns, by Elisabeth Freeman (Author), Eric Freeman (Author), Bert Bates (Author)
정말 쿨~ 하게 배우는 디자인 패턴 학습법!
다른 사람들이 뭔가를 만들어 놓았고, 누구든 마음대로 사용해도 되는 게 있다면, 여러분이 굳이 고생해서 똑같은 걸 만들어 써야 할 필요는 없을 겁니다. 디자인 패턴은 다른 사람들이 고생해서 만들어 놓은 것이라고 생각하면 됩니다. 소프트웨어를 디자인하는 과정에서 여러분과 똑같은 문제를 경험했던 선배들이 깨달은 교훈을 정리해 놓은 것이죠. 디자인 패턴을 사용하면 다른 사람들의 노력과 경험을 바로 활용해서 시간과 에너지를 절약할 수 있습니다. 대신 도전할 만한 가치가 있는 것, 더 복잡한 것, 더 재미있는 것에 시간과 노력을 쏟을 수 있는 거죠. 아마 디자인 패턴에 대해 공부하고자 한다면 다음과 같은 것을 배워야 할 것입니다. [출판사 제공]
25. 응용 운영 체제 개념; Operating System Concepts, by Abraham Silberschatz (Author), Peter Baer Galvin (Author), Greg Gagne (Author)
수많은 현대의 코드 예들과 연습문제, 그리고 프로그래밍 프로젝트와 함께 운영 체제의 원리에 대해 소개한 책. 이 책은 자바 프로그래밍 언어를 사용하여 실제 코드 예를 제시하고, 프로세스, 프로세스 동기화, 그리고 세마포 등 어려운 개념을 소개하기 위해 자바 기술을 사용한다. 현대 운영 체제와 자바에서 스레드의 역할을 설명하고, 또한 다중 스레드 프로그램을 작성할 기회를 제공한다. 최신의 분산 운영 체제 토픽(예를 들면, 자바의 원격 메서드 호출, CORBA, RPC)을 하나의 간결한 장에서 소개하며, UNIX, LINUX, 그리고 Windows NT에 대해 각각 한 장에 걸친 사례 연구를 포함한다. 부록으로 자바 입문서(Primer)을 제공한다.
이 책은 전통적인 운영체제 교재로 자리잡고 있는 "Operating System Concepts(OSC) 5판"에 기반하고 있다. 이 교재의 많은 내용들이 OSC로부터 파생되었다. 이들 교재들은 내용이 어떻게 제시되었는지에 차이가 있다. OSC는 시스템의 특정 구현보다는 모든 운영 체제에 기본적인 개념을 제시하는 반면 이 교재는 응용 지식을 논의하고 있다. 이 책에서는 Java와 다수의 현대적 운영 체제, 예를 들면, 솔라리스 2와 윈도우즈 NT로부터의 예를 사용하여 이들 개념을 제시하고 있다. [Yes24 제공]
* 이 책도 원본을 읽기 바란다. [강재우]
26. Unix Network Programming, Vol. 1: The Sockets Networking API, Third Edition
by W. Richard Stevens (Author), Bill Fenner (Author), Andrew M. Rudoff (Author), Richard W. Stevens (Author)
컴퓨터 통신을 전공하거나 현업에서 종사하고 있는 이들에게 도움이 된다. 특히 응용에서 직접 이용할 수 있는 많은 프로그램 예제들을 보여주고 있어 초보자에게는 문제와 해법을 이해하는 데, 전문가에게는 더욱 효율적인 해법을 모색하는 데 참고가 될 것이다. [강컴닷컴 제공]
* 이 책도 꼭 원서로 읽기 바란다. [강재우]
27. Compilers: Principles, Techniques, and Tools (2nd Edition), by Alfred V. Aho (Author), Monica S. Lam (Author), Ravi Sethi (Author), Jeffrey D. Ullman (Author)
이 책은 Alfred V.Aho 와 Jeffrey D. Ullman 이 쓴 책을 개정 증보한 것이다. 언어 번역기를 설계하는데 있어서 부딪히게 되는 문제점들을 번역을 행하는 컴퓨터나 번역된 프로그램을 실제로 수행하는 컴퓨터가 무엇이냐에 관계없이 해결하는 것에 중점을 두고, 컴파일러 설계과목을 처음 배우는 학생들을 위한 교과서로 만들어 졌다. [출판사 제공]
* 개정판에서는 저자도 2명이 추가되고 용 그림도 바뀌었다. [강재우]
28. 익스트림 프로그래밍; Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series), by Kent Beck (Author), Cynthia Andres (Author)
익스트림 프로그래밍(XP)의 목표는 탁월한 소프트웨어 개발이다. 더 낮은 비용, 더 적은 결함, 더 높은 생산성, 더 높은 투자 수익률, 더 행복한 사용자와 고객, 그리고 심지어는 더 행복한 개발자.
1999년에 Extreme Programming Explained 1판이 출판되었다. XP는 당시만 해도 이단아 취급을 받았다. 세상이 받아들이기에는 너무 급진적으로, 그야말로 익스트림하게 보였다. 하지만 지금은 상황이 많이 바뀌었다. 개발자들의 일하는 방식이 알게 모르게 상당히 XP화 되었다. 일례로, 이 책의 저자가 만든 단위 테스트 프레임워크는 이미 업계 표준이 되어서 유명한 오픈 소스 프로젝트 치고 자동화된 테스트를 갖추지 않은 것이 드물어져 버렸다.
IBM, 휴렛패커드, 모토롤라, 구글, 야후, MS 등 유명 기업에서 기민한 방법론을 사용하기 시작했다. 2005년 포레스터 연구소(Forrester Research)에서 발표한 조사 결과에 따르면 XP를 포함한 기민한 방법론(agile software development processes)은 북미 지역과 유럽의 기업들 중 14%가 공식적으로 사용 중이며, 19%의 기업은 기민한 방법론에 관심이 있거나 도입할 예정이라고 한다. 비공식적으로 사용하는 경우를 포함하면 수치는 더 높을 것이다.
학계에서도 XP와 기민한 방법론을 중요한 주제로 고려하고 있다. 소프트웨어 공학 교과서에 XP나 기민한 방법론의 내용이 몇 년 전부터 실리기 시작했고, 콘퍼런스에선 익스트림이나 애자일(agile) 같은 단어가 들리는 것이 전혀 어색하지 않다.
이제 초판이 나오고 5년 만에 두 번째 판이 나왔다. 개정판이라고는 하지만 사실상 완전히 새로 쓴 것이나 다름없다. 저자 켄트 벡은 말한다. 이 개정판은 이전 판을 완전히 대체하는 것이라고. 5년간 켄트 벡의, 그리고 XP 커뮤니티 공동의 경험과 지혜가 책으로 나온 것이다. [강컴닷컴 제공]
29. Programming Windows, Fifth Edition, by Charles Petzold (Author)
"윈도우즈의 심장부를 파고드는 명쾌한 해설"
이 책은 단순히 "이러한 API가 있으니 이런 예제를 한번 만들어서 실행해보면 이해할 수 있다" 정도의 따라하기식이 아니다. 지독히도 고집스러운 장인답게 귀찮을 정도로 알아야 할 것들에 대해 조목조목 따져서 알려준다. 성질이 급한 독자는 "이게 뭐야" 싶을 정도로 말이다.
한번의 읽음으로 끝낼 수 있다면 바이블이 될 수 없다. 내공있는 프로그래머가 추천하는 방식은 읽고 또 읽으라는 것이다. 이 책은 그렇게 현장을 떠날 때까지 여러분과 항상 같이 할 수 있는 책이다.
이미 많은 독자들이 알고 있겠지만, 모든 장에 기본 개념 및 원리를 스스로 이해하고 확인해볼 수 있는 실행 가능한 완벽한 예제가 있으며, 이번 번역서에서는 예제뿐만 아니라 본문 구석구석을 역자가 최신 윈도우즈 경향에 맞게 수정하고 보완하였다. 또한 번역 기간 동안 현업 윈도우 프로그래머가 리뷰하여 페졸드의 명성에 흠이 되지 않게 다양한 의견을 종합하여 번역의 정확성에 최대 역점을 두었다.
윈도우즈의 심층부까지 꿰뚫어 보여주는 주옥같은 예제와 원리
"내공있는 윈도우즈 프로그래머가 이 책에 대해 격찬하는 이유는 딱 두 가지다. 처음엔 몰랐는데 시간이 갈수록 구구절절 풀어놓은 한마디 한마디가 그렇게 도움될 수 없더라는 것이 첫 번째이고 윈도우즈를 손바닥 들여다보듯 하지 않고는 나올 수 없는 주옥같은 예제가 두 번째 이유다." [출판사 제공]
30. Effective Java Programming Language Guide, by Joshua Bloch (Author)
간결하고 읽기 쉽고 쉽게 찾을 수 있는 형식으로 전문가가 집대성한 자연스럽고 유창한 자바 프로그래밍 언어의 사용법.
흔히 잘 못 알고 있는 자바 프로그래밍 언어와 플랫폼 라이브러리의 미묘한 문제가 쳐놓은 함정에 빠지지 않는 방법.
java.lang, java.util, java.io 와 같은 기본 라이브러리의 올바른 사용법.
다른 어느 곳에서도 찾아 볼 수 없는 직렬화에 대한 조언과 자세한 설명.
[강컴닷컴 제공]
아! 이런 책이 십 년 전에만 나왔어도. 많은 사람들이 나는 자바 책을 읽을 필요가 없을 것이라고 생각할지 몰라도, 내게 이 책만큼은 꼭 필요하다.
- 제임스 고슬링(James Gosling), Sun Microsystems, Inc의 수석 연구원이며 부사장.
자바 프로그래밍 언어와 일반 책체 지향프로그래밍에 대한 훌륭한 조언으로 가득한 뛰어난 책
- 길라드 브라차(Gilad Bracha), Sun Microsystems, Inc의 컴퓨터 이론가이며 The Java Language Specification, 2판의 공동저자.
* Thinking in Java (4th Edition), by Bruce Eckel (Author)도 이 책과 버금가는 좋은 책이다. [강재우]
31. 소프트웨어 공학의 사실과 오해; Facts and Fallacies of Software Engineering, by Robert L. Glass (Author)
아직도 많은 관리자들이 전통적인 제조업에서 사용하던 방법으로 소프트웨어 개발자들을 통제하고 관리하려 한다. 작업 시간을 길게 하면 그만큼 하는 일도 많아질 것이라 기대하고는 밤늦게까지 퇴근하지 못하게 한다. 일정이 지연된 프로젝트에 추가 인원을 투입하면 금방 일정을 따라 잡을 수 있을 거라 생각한다. 애초에 잘못된 일정을 계획해놓고는 일정을 맞추지 못한다고 개발자들을 닦달한다. 이런 잘못된 관행으로 소프트웨어 업계 종사자들은 프로젝트란 미명하에 열악한 작업 환경에서 법정 근로 시간의 두 배에 달하는 근무로 혹사당하면서도 적절한 보상조차 받지 못하고 있다.
이 책은 소프트웨어 구축과 관련해, 우리가 꼭 알아야 할 기본적인 내용임에도 불구하고 잊고 있는 사실, 알면서도 실천하지 못하는 사실, 잘못 아는 사실(오해)을 '사실'과 '오해'란 형식을 빌어 논의한다. 그리고 이런 사실과 오해에 대한 논쟁과 문제점을 제시한다.
이 책은 입장에 따라 프로젝트에 대한 접근방식과 인식이 다른 모든 당사자들, 즉 프로젝트를 발주하는 측과 프로젝트를 수주해 시행하는 측(흔히 말하는 '갑'과 '을'), 회사의 경영진과 프로젝트 관리자와 팀원들 사이의 간극을 좁히는 데 도움이 될 것이다. 프로젝트 성공이란 공통 목표를 위해 어떻게 해야 하는가를 심도 있게 토론하기 위한 기초가 되어줄 것이다. [출판사 제공]
32. Modern C++ Design: Generic Programming and Design Patterns Applied, by Andrei Alexandrescu (Author)
모던 C++ 디자인은 그야말로 탁월한 책이다. 이 책은 '제네릭 패턴'이나 '패턴 템플릿'들을 이용하여 강력하고도 확장성 있는 디자인을 만들어 내는 방법을 제시해 준다. 이것은 템플릿과 패턴을 결합하는 전혀 새로운 접근법이다. 그 동안은 불가능하다고 여겨져 왔지만, 이제 이 책으로 이러한 방법들이 가능해 졌다! 만일 당신의 직업이 C++을 이용하여 디자인을 하거나 코딩을 하는 분야의 것이라면, 꼭 이 책을 읽어보기 바란다. 강추! - Herb Sutter
C++에 대해 지금까지 논의된 것 외에 더 남아있는 내용이 있을까? 물론 그렇다. 그것도 아주 많이... 이제 이 책을 통해 그것이 드러난다. - John Vlissides의 추천 서문에서 발췌
33. Perl 프로그래밍; Programming Perl (3rd Edition), by Larry Wall (Author), Tom Christiansen (Author), Jon Orwant (Author)
Larry Wall은 논쟁의 여지 없이 오늘날 스크립팅 언어의 왕으로 성장한 Perl(Pathologically Ecletic Rubbish Lister)의 전설적인 개발자이다. Perl의 바이블이라고 일컬어지는 이 책에서 Wall은 Perl 세계에 돌아다니는 여러 주제들을 하나로 묶어 해설하고 있다. 이와 함께 언어의 다양한 특성에 대해 새로운 식견을 제공하면서 Perl 5 버전의 새로운 비밀을 밝히고 있다.
Perl은 유닉스 환경뿐만 아니라, CGI 스크립트와 다양한 웹(WWW) 관련 업무를 위한 주요한 도구로 선택됨으로써 월드와이드 웹 프로그래밍 환경에 있어서도 주역으로 자리잡아 왔다. 이제 Perl은 다양한 플랫폼에 걸치는 탁월한 이식성과 프로젝트 지향적인 업무를 다루는 가장 뛰어난 도구로 인식되고 있다.
Perl 자체가 Larry Wall의 첫번째 전설이라면, Camel Book으로 널리 알려진 이 책은 그 두번째 전설이다. 여러분이 Perl에 관한 책을 한 권만 구입한다고 했을 때, Perl 세계의 그 누구도 이 책을 선택한 여러분의 판단에 이의를 제기하지 않을 것이다. [출판사 제공]
34. JavaScript<x>: The Definitive Guide</x>, by David Flanagan (Author)
웹 페이지에 직접 삽입할 수 있는 스크립트 언어인 자바스크립트를 다루는 핵심 레퍼런스. 이번 5판은 오늘날의 웹 2.0 어플리케이션에서 사용되는 자바스크립트를 커버하도록 완전히 개편되었다. 이 책은 예제 중심의 프로그래머 안내서이자 레퍼런스이다. 이 레퍼런스를 위해서 새 장이 추가되었고 여기서는 자바스크립트에 대해서 알아야 할 모든 것을 설명하고 있다. 또한 Scripted HTTP와 Class, Closure, Persistence, Flash, 자바 어플리케이션에 내정된 JavaScript 등 복잡한 프로그램을 작성할 때 필수적인 것들을 위해 자바스크립트에서 <canvas> 태그 네이스페이스를 이용한 클라이언트 사이트 그래픽을 처리하는 Ajax XML를 포함하고 있다. 이 책에서는 넷스케이프 6와 인터넷 익스플로러 6에서 지원하는 자바스크립트 최신 버전인 자바스크립트 1.5를 다루고 있다. 소급 호환성을 위한 레거시 레벨 0 DOM에 대한 자료를 계속해서 다루면서 W3C DOM 표준(레벨 1 및 레벨 2)도 완벽하게 다루고 있다. [강컴닷컴 제공]
35. 이펙티브 C++; Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition), by Scott Meyers (Author)
이 책은 내가 앉은 자리에서 한 번에 읽어버린 193페이지 짜리 대작이다. 나는 이 50가지 항목의 조합이 여러분을 사로잡을 것이고 많은 것을 깨우쳐 줄 것이라고 확신한다. Stan Kelly-Bootle이 이 책을 강력히 추천하는 말이다. 필자는 C++에 관한 공인된 권위자로 필자의 풍부한 지식에서 나온 50개의 항목으로 나누어 예제와 함께 C++을 완벽하게 이해할 수 있는 다양한 정보를 제공하고 있다. C에서 C++로 바꾸고자 하는 독자은 쉽게 C++을 정복할 수 있을 것이다. [인터파크 제공]
36. The Design of Everyday Things, by Donald A. Norman (Author)
Donald Norman, a retired professor of cognitive science, is bothered to no end by the fact that grappling with unfriendly objects now takes up so many of our hours. Over the course of several books, of which The Psychology of Everyday Things was the first, he has railed against bad design. He scrutinizes a range of artifacts that are supposed to make our daily living a little easier, and he finds most of them wanting. Why, he asks, does a door need instructions that say "push" or "pull"? A well-designed object, he argues, is self-explanatory. But well-designed objects are increasingly rare, for the present culture places a higher value on aesthetics than utility, even with such items as cordless screwdrivers, dresser drawers, and kitchen cabinets. In their concern for creating "art," many designers don't seem to consider what people actually do with things. Such disregard, Norman suggests, leads to few objects being standardized: think of all the different kinds of unsynchronized clocks that lurk in microwave ovens, VCRs, coffee makers, and the like--and of all the different kinds of batteries needed to drive them. Why, he wonders, must we reset all those clocks whenever the power goes off? Some designer somewhere, he ventures, ought to develop a master clock that communicates with all other electric clocks in a home--one that, when reset, synchronizes its slave units. [from Amazon]
37. Code: The Hidden Language of Computer Hardware and Software, by Charles Petzold (Author)
Charles Petzold's latest book, Code: The Hidden Language of Computer Hardware and Software, crosses over into general-interest nonfiction from his usual programming genre. It's a carefully written, carefully researched gem that will appeal to anyone who wants to understand computer technology at its essence. Readers learn about number systems (decimal, octal, binary, and all that) through Petzold's patient (and frequently entertaining) prose and then discover the logical systems that are used to process them. There's loads of historical information too. From Louis Braille's development of his eponymous raised-dot code to Intel Corporation's release of its early microprocessors, Petzold presents stories of people trying to communicate with (and by means of) mechanical and electrical devices. It's a fascinating progression of technologies, and Petzold presents a clear statement of how they fit together.
The real value of Code is in its explanation of technologies that have been obscured for years behind fancy user interfaces and programming environments, which, in the name of rapid application development, insulate the programmer from the machine. In a section on machine language, Petzold dissects the instruction sets of the genre-defining Intel 8080 and Motorola 6800 processors. He walks the reader through the process of performing various operations with each chip, explaining which opcodes poke which values into which registers along the way. Petzold knows that the hidden language of computers exhibits real beauty. In Code, he helps readers appreciate it. --David Wall [from Amazon]
38. Concepts, Techniques, and Models of Computer Programming, by Peter Van Roy (Author), Seif Haridi (Author)
This innovative text presents computer programming as a unified discipline in a way that is both practical and scientifically sound. The book focuses on techniques of lasting value and explains them precisely in terms of a simple abstract machine. The book presents all major programming paradigms in a uniform framework that shows their deep relationships and how and where to use them together.
After an introduction to programming concepts, the book presents both well-known and lesser-known computation models ("programming paradigms"). Each model has its own set of techniques and each is included on the basis of its usefulness in practice. The general models include declarative programming, declarative concurrency, message-passing concurrency, explicit state, object-oriented programming, shared-state concurrency, and relational programming. Specialized models include graphical user interface programming, distributed programming, and constraint programming. Each model is based on its kernel language -- a simple core language that consists of a small number of programmer- significant elements. The kernel languages are introduced progressively, adding concepts one by one, thus showing the deep relationships between different models. The kernel languages are defined precisely in terms of a simple abstract machine. Because a wide variety of languages and programming paradigms can be modeled by a small set of closely related kernel languages, this approach allows programmer and student to grasp the underlying unity of programming. The book has many program fragments and exercises, all of which can be run on the Mozart Programming System, an Open Source software package that features an interactive incremental development environment. [from Amazon]
39. 컴퓨터 구조 및 설계; Computer Architecture, Fourth Edition: A Quantitative Approach, by John L. Hennessy (Author), David A. Patterson (Author)
전문 프로그래머라면 하드웨어적인 지식도 절대 놓쳐서는 안된다 이러한 지식을 아는 사람과 그렇지 못한 사람의 프로그래밍 능력과 몸값은 엄청난 차이가 있다. 컴퓨터 아키텍처에 관한 한 최고의 양서로 평가받는 이 책은 학부생이나 평범한 프로그래머들이 보기엔 다소 난해할 수 있다. 그럴 경우 같은 저자의 "Computer Organization and Design"을 보는 것이 좋다. [월간 마이크로소프트 추천]
컴퓨터의 하드웨어와 소프트웨어 사이의 관련성을 보여주고 현대 컴퓨터의 기본이 되는 개념들에 대해 관심을 집중시키고 있는 교재이다. 어셈블리 언어와 논리 설계에 지식이 있으면서 컴퓨터를 어떻게 설계하는지, 시스템이 어떻게 동작하는지, 왜 그 정도의 성능을 내는지를 알고 싶어하는 사람은 물론이고, 기본적인 컴퓨터 구성에 대해 이해할 필요가 있지만 어셈블리 언어나 논리 설계에서 경험이 거의 경험이 없는 사람 모두가 독자층에 포함된다. [교보문고 제공]
40. 실시간 임베디드 퀀텀 프로그래밍; Practical Statecharts in C/C++: Quantum Programming for Embedded Systems with CDROM, by Miro Samek (Author)
기본적으로 이 책은 설계 자동화 툴에 심플하고 경량의 대안으로 구체적이고 효과적이며 입증된 상태차트의 구현을 소개함으로써, C나 C++에 익숙한 사람이라면 며칠 내로 상태차트의 구현을 시도할 수 있게끔 한다. 또한 상태차트와 상태차트 기반 컴퓨팅 모델을 구현함으로써, 새로운 프로그래밍 패러타임의 초석을 닦는다. 저자는 이것을 퀀텀 프로그래밍(Quantum Programming; QP)이라 이름 붙였다. 프로그래밍 패러다임으로써의 QP는 이 책에서 수록한 단순한 코드보다 훨씬 많은 것을 여러분에게 제공한다. 저자는 QP를 C나 C++ 같은 기존의 프로그래밍 언어의 추상화 수준을 향상시키는 기법의 모음으로 간주했으며, 또 그렇게 사용한다. QP에서 추가된 추상화를 통해, 필자는 반응형 시스템을 C++와 C를 이용해 효과적으로 모델링할 수 있다. QP의 역할은 객체지향(object-oriented, OO) 프로그래밍 언어의 역할에 견줄 수 있다. Smalltalk, C++, Java가 세 가지 OO 설계 메타패턴인 추상화, 상속, 다형성을 직접 지원함으로써 객체지향 프로그래밍(OOP)을 가능하게 해주는 것과 마찬가지로, QP는 다른 기본 메타패턴인 계층형 상태머신(hierarchical state machine; HSM)을 통해 C나 C++에서 직접 모델링할 수 있게 해준다. QP는 프로그래밍 방법론이 아닌 반응형 시스템을 모델링하고 구현하는데 필요한 구체적 기법의 모음이다. QP는 더 잘 설계되고 안전하며 효율적인 이벤트 구동형 소프트웨어로 가는 가장 빠른 길을 제공한다. 여러분이 가는 길에는 어떤 장애물도 없기 때문이다. 여러분은 QP를 사용하면서 여러가지 문제가 바뀌었음을 알게 될 것이다. 더 이상 복잡한 if문이나 switch문과 씨름할 필요가 없으며, 어떻게 상태패턴을 적용할 것이고 어떻게 문제를 능동객체로 분할할 것인지를 생각하는데 시간을 더 할애할 것이다. [강컴닷컴 제공]
41. 효율적인 웹사이트 구축을 위한 인포메이션 아키텍처; Information Architecture for the World Wide Web, by Louis Rosenfeld (Author), Peter Morville (Author)
이 책에서는 차별적이고 유용한 웹사이트를 구축하는 방법, 사이트의 분류 체계를 조직하는 방법, 네비게이션 체계를 설계하는 방법, 사이트 컨텐츠에 대한 레이블을 제작하는 방법, 특정 항목에 대한 검색과 브라우징을 동시에 지원할 수 있게 웹사이트를 조직화하는 방법, 사용자 질의에 의미 있는 결과를 제공하기 위해서 검색 체계를 구성하는 방법, 리서치와 개념적 설계에서 계획과 구축까지 인포메이션 아키텍처의 모든 개발 과정과 관리하는 방법을 제공하고 있다. [북토피아 제공]
42. 현대 데이터베이스 관리론; Modern Database Management (8th Edition), by Jeffrey A. Hoffer (Author), Mary Prescott (Author), Fred McFadden (Author)
7판은 여전히 Pine Valley Furniture(PVF)와 Mountain View Community Hospital(MVCH) 사례들을 이용하고 있으며, 이를 통해 본문의 개념들과 도구들을 설명하고 예시를 보인다. PVF는 1장에서 소개되며, 이후에도 이 책 전반에 걸쳐 지속적으로 다루어진다. MVCH는 각 장의 끝 부분에서 볼 수 있다. 여백에 위치한 아이콘들은 사례 내용이 언급되는 위치를 식별할 수 있도록 해주며, 사례들에 이용된 새로운 데이터베이스 파일들은 이용 가능하다. [인터파크 제공]
* 원서 최신판은 8판이다. [강재우]
43. Artificial Intelligence: A Modern Approach (2nd Edition), by Stuart J. Russell (Author), Peter Norvig (Author)
Artificial Intelligence: A Modern Approach introduces basic ideas in artificial intelligence from the perspective of building intelligent agents, which the authors define as "anything that can be viewed as perceiving its environment through sensors and acting upon the environment through effectors." This textbook is up-to-date and is organized using the latest principles of good textbook design. It includes historical notes at the end of every chapter, exercises, margin notes, a bibliography, and a competent index. Artificial Intelligence: A Modern Approach covers a wide array of material, including first-order logic, game playing, knowledge representation, planning, and reinforcement learning. --This text refers to an out of print or unavailable edition of this title. [from Amazon]
44. Object-Oriented Software Construction (2nd Edition), by Bertrand Meyer (Author)
The developer of the acclaimed Eiffel programming language comes through with one of the clearest and most informative books about computers ever committed to paper. Object-Oriented Software Construction is the gospel of object-oriented technology and it deserves to be spread everywhere. Meyer opens with coverage of the need for an object-oriented approach to software development, citing improved quality and development speed as key advantages of the approach. He then explains all the key criteria that define an object- oriented approach to a problem. Meyer pays attention to techniques, such as classes, objects, memory management, and more, returning to each technique and polishing his readers' knowledge of it as he explains how to employ it "well." In a section on advanced topics, Meyer explores interesting and relevant topics, such as persistent objects stored in a database. He also offers a sort of "Do and Don't" section in which he enumerates common mistakes and ways to avoid them. Management information isn't the main point of Object-Oriented Software Construction, but you'll find some in its pages. Meyer concludes his tour de force with comparisons of all the key object-oriented languages, including Java. He also covers the potential of simulating object technology in non-object-oriented languages, such as Pascal and Fortran. The companion CD-ROM includes the full text of this book in hypertext form, as well as some tools for designing object-oriented systems. If you program computers, you need to read this book. [출판사 제공]
45. 서브버전을 이용한 실용적인 버전 관리; Pragmatic Version Control: Using Subversion (2nd Edition), by Mike Mason (Author)
이 책은 서브버전이라는 버전 관리 시스템을 최대한 활용하기 위한 여러 기본적인 조리법들을 제시한다. 이 조리법들을 충실히 따른다면 독자의 프로젝트의 자산(소스 코드, 문서화, 검사 자료, 스크립트 등)을 안전하게 보호할 수 있으며, 자산을 체계적이고도 잘 제어된 방식으로 사용할 수 있다.
이 책은 Mike Mason이 쓰고 Pragmatic Bookshelf에서 낸 Pragmatic Version Control Using Subversion을 번역한 것입니다. 이 책이 서브버전에 대한 유일한 책은 아닙니다. 특히, 사실 서브버전 개발자들이 직접 쓴 Version Control with Subversion이라는 훌륭하고 권위있는 책이 있습니다. 그 책은 웹에도 공개되어 있으며, 한국어로 번역하는 작업도 진행되고 있습니다.
그럼에도 이 책이 의미를 가지는 것은, 책 제목에서도 알 수 있듯이 이 책의 초점이 서브버전 자체가 아니라 서브버전을 이용한 '실용적인 버전 관리'이기 때문입니다.
개인적으로 저는 예전에 서브버전 때문에 낭패를 본 적이 있어서 CVS를 고집해 왔습니다. 이 책 때문에 서브버전에 다시 손을 댔는데, 이 책을 통해서 예전과는(서브버전뿐만 아니라 CVS 경험까지 포함해서) 다른 세상을 만나게 된 느낌입니다.
서브버전의 어떤 난해하고 비밀스런 기능을 새로이 알게 되었기 때문이 아니라, 실제 프로젝트의 버전 관리에 정말로 필요한 기능들을 효과적으로 사용하는 방법을 알게 되었기 때문일 것입니다. [인터파크 제공]
* 이 책과 유사한 책으로 Subversion Version Control: Using the Subversion Version Control System in Development Projects, by William Nagel (Author)가 있다. 이 책은 온라인에서 Open Publication License로 공짜로도 제공되고 있다. Download Subversion Version Control in PDF [강재우]
46. 성공적인 웹 프로그래밍 PHP와 MySQL; PHP and MySQL Web Development (4th Edition), by Luke Welling (Author), Laura Thomson (Author)
이 책은 효과적이고 인터랙티브한 웹 응용 프로그램을 어떻게 구현할 수 있는지 알려준다. PHP 언어의 기초를 탄탄하게 다져주고, MySQL을 설정하고 동작시키는 방법을 설명한다. 이렇게 준비가 끝나면 PHP를 사용해서 데이터베이스 서버와 대화하는 방법을 알려준다.
이 실용적이고도 편리한 책은 현실에 바로 적용할 수 있을 만큼 실질적인 예제를 가지고 일반적으로 많이 사용되는 사용자 인증, 장바구니 구현, PDF 문서 만들기, 다이나믹한 이미지 처리, 이메일 전송과 관리, 토론방 만들기, 컨텐츠 관리와 XML을 사용한 웹 서비스까지 다루고 있어 정말 다양한 내용을 배울 수 있다.
3판에서는 PHP의 최신 버전인 5를 소개하기 위해 완전히 업데이트 되었고, 새로 개정하였으며 더 많은 내용을 담고 있다. 특히 이번 PHP 5에 도입된 새로운 객체 모델과 예외처리, 그리고 SimpleXML까지 포함하고 있을 뿐 아니라 MySQL 5에서 추가된 저장 프로시저와 같은 새 기능들도 다루고 있다. [출판사 제공]
* 원서 최신 버전은 4판입니다. [강재우]
47. Unix Power Tools, Third Edition, by Shelley Powers (Author), Jerry Peek (Editor), Tim O'Reilly (Author), Mike Loukides (Author)
How to work efficiently, elegantly, and creatively with the Unix tool suite. Tips and strategies on customization, document generation, process management, and networking abound in this wisdom-rich volume. [출판사 제공]
48. Computer Networks, Fourth Edition, by Andrew S. Tanenbaum (Author)
이 책은 컴퓨터 네트워크를 공부하는 사람들에게 필요한 기본 지식을 전달하는 책으로 네트워크에 입문하려는 사람은 누구나가 한번 쯤은 보게되는 책이다. 벌써, 세번째 개정판으로 1999년대의 최근의 내용들을 기반으로 구성되어있다. 저술가이며, 교육자이고, 연구가이기도 한 저자는 각종 상을 수상한 경력이 있고, 이 책에서는 네트워크가 내부적으로 어떻게 작동하는가를 자세히 설명하고, 가장 대중적인 네트워크 애플리케이션을 통해 하드웨어 기술에 대해서 설명한다. [강컴닷컴 제공]
49. 운영체계론; Modern Operating Systems (2nd Edition), by Andrew Tanenbaum (Author)
이 개정판에서는 새로운 주제들이 추가되었으며, 현대 운영체제를 이해하기 쉽도록 적절한 사례중심으로 기술되어 있다. 큰 그림을 명확하고 재미있게 이해시키는 Tanenbaum만의 고유한 방법은 이번 개정판에서도 여전히 그 진가를 발휘하고 있다. 저자는 3개의 운영체제 설계자 또는 공동 설계자로서의 오랜 경험과 지식을 바탕으로 다른 책에서는 볼 수 없는 유익한 실례들을 소개하고 있다. [출판사 제공]
50. Debugging: The Nine Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems, by David J. Agans (Author)
When the pressure is on to root out an elusive software or hardware glitch, what's needed is a cool head courtesy of a set of rules guaranteed to work on any system, m any circumstance. Written in a frank but engaging style, Debugging provides simple, foolproof principles guaranteed to help find any bug quickly. This book makes those shelves of application-specific debugging books (on C++, Perl, Java, etc.) obsolete. It changes the way readers think about debugging, making those pesky problems suddenly much easier to find and fix. [강컴닷컴 제공]
51. How to Design Programs: An Introduction to Programming and Computing, by Matthias Felleisen (Author), Robert Bruce Findler (Author), Matthew Flatt (Author), Shriram Krishnamurthi (Author)
An undergraduate introduction to programming and computing, focusing on the program design process. Fosters skills such as critical reading, analytical thinking, creative synthesis, and attention to detail. Also offers support materials free on the Internet. DLC: Computer programming. [from Amazon]
* 이 책에 대한 공식 사이트는 http://www.htdp.org/ 이다. 이 사이트에서는 이 책을 HTML로 제공하여 공짜로 볼 수 있다. 또한 연습문제에 대한 해답도 제공한다. [강재우]
52. Practical Common Lisp, by Peter Seibel (Author)
Lisp is often thought of as an academic language, but it need not be. This is the first book that introduces Lisp as a language for the real world. Practical Common Lisp presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code. [from Amazon]
* 이 책의 온라인 버전은 http://www.gigamonkeys.com/book/에서 구할 수 있다. (강재우)
* 이 책 외에도 On LISP: Advanced Techniques for Common LISP, by Paul Graham (Author)도 유명한 책이니 참고 바랍니다. (강재우)
53. 해커와 화가; Hackers and Painters: Big Ideas from the Computer Age, by Paul Graham (Author)
인기없는 공부벌레에서 뛰어난 프로그래머였고 사업가였으며 이제는 화가의 길을 걷고 있는 폴 그레이엄의 이단적인 통찰과 현실적인 지혜를 엮은 책이다. 프로그래머에게는 "프로그래밍이란 무엇인가?"에 대한 화두를 갖고 떠날 수 있는 가벼운 독서여행이 될 수 있고, 프로그래머가 아닌 독자에게는 컴퓨터 세상의 중심에 서있는 프로그래머의 머리속을 살펴볼 수 있는 좋은 기회가 될 것이다. [교보문고 제공]
54. 소프트웨어 프로젝트 생존 전략; Software Project Survival Guide, by Steve C McConnell (Author)
Code Complete의 저자 스티브 맥코넬(Steve McConnell)이 들려주는
프로젝트에서 생존하기 위한 생생한 노하우 - 저자는 수많은 소프트웨어 공학 연구 결과와 실무 사례로 그 효과가 입증된 귀중한 기법을 전수해 준다. 해설이 있는 프로젝트 계획서 - 이젠 이해하고 마스터하는 데만 수년씩 걸리는 복잡한 프로젝트 관리 기법을 찾아 헤맬 필요가 없다. 분량은 작지만 프로젝트 시작과 끝을 SPSG 한 권으로 끝낼 수 있다. - 이 책으로 그동안 왜 프로젝트들이 실패했는지 명확히 알 수 있고, 더 이상 실패에 대한 두려움을 갖지 않아도 된다. [강컴닷컴 제공]
55. The C++ Standard Library: A Tutorial and Reference, by Nicolai M. Josuttis (Author)
The C++ standard library는 기본 C++ 언어의 범위를 확장시켜주는 공통된 클래스와 인터페이스를 제공하고 있다. 그러나 라이브러리는 자체만으로 확장가능하지 않다. 컴포넌트를 전체적으로 활용하고 이들의 장점을 취하기 위해서는 클래스와 함수들을 리스트보다 훨씬 많은 분량의 자원이 필요하다. The C++ Standard Library는 각 라이브러리 컴포넌트에 대한 포괄적인 문서를 제공할뿐 아니라 효율적인 사용을 위해 필요한 실질적인 프로그래밍 세부사항을 설명하고 복잡한 개념들을 명확하기 잘 설명하고 있다. 그리고 실제 동작하는 코드들의 예제또한 보여지고 있다. [Yes24 제공]
56. More Effective C++: 35 New Ways to Improve Your Programs and Designs, by Scott Meyers (Author)
C++ 프로그래밍과 설계 기술을 향상시켜 주는 35 가지의 새로운 테크닉 모음. More Effective C++는 C++ 프로그래머가 언제든지 사용할 수 있고 실용적이며 뼈 속까지 스며드는 값진 조언으로 쓰여졌다. 전작인 Effective C++과 마찬가지로, More Effective C++는 C++ 언어를 사용하는 프로그래머라면 어느 누구에게도 감동을 줄 수 있는 필독서이다. 전 세계 C++ 프로그래머의 필독서, Effective C++의 저자가 또 다시 "프로그래밍과 설계 기술을 향상시켜 주는 "35 가지의 새로운 테크닉을 여기에 선보인다. 마이어스는 다년간의 경험에서 뽑아낸 통찰력을 유감 없이 발휘하여 더 효과적인(more effective) 소프트웨어를 개발하는 방법을 설명하고 있다. 효과적인 소프트웨어란 더 효율적이고, 더 견고하고, 더 표준적이고, 더 높은 이식성과 재사용성을 갖춘 소프트웨어를 뜻한다. 간단히 말해 마이어스는 "그냥 더 멋있게" C++ 프로그래밍을 할 수 있는 방법을 전하고 있는 것이다. [강컴닷컴 제공]
57. Assembly Language Step-by-step: Programming with DOS and Linux, by Jeff Duntemann (Author)
Begins with an accessible overview of the internal operations of the Intel-based PC and covers the steps involved in writing, testing, and debugging assembly programs. Presents working examples programs for the DOS and Linux operating systems using the free assembler NASM. Softcover. DLC: Assembler language (Computer program language). [출판사 제공]
58. Computer Graphics: Principles and Practice in C (2nd Edition), by James D. Foley (Author), Andries van Dam (Author), Steven K. Feiner (Author), John F. Hughes (Author)
Computer Graphics: Principles and Practice is the most exhaustive overview of computer graphics techniques available. This textbook's 21 chapters cover graphics hardware, user interface software, rendering, and a host of other subjects. Assuming a solid background in computer science or a related field, Computer Graphicsgives example programs in C and provides exercises at the end of each chapter to test your knowledge of the material. The guide has over 100 beautiful, four-color photographs that illustrate important topics and algorithms, such as ray tracing and bump maps, and also inspire you to acquire the skills necessary to produce them. Encyclopedic in its coverage, the book has a good table of contents so that you can immediately turn to information on the z-Buffer algorithm or the chapter on animation. [from Amazon]
59. Working Effectively with Legacy Code, by Michael Feathers (Author)
In this book, Michael Feathers offers start-to-finish strategies for working more effectively with large, untested legacy code bases. This book draws on material Michael created for his renowned Object Mentor seminars: techniques Michael has used in mentoring to help hundreds of developers, technical managers, and testers bring their legacy systems under control. [from Amazon]
60. Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp, by Peter Norvig (Author)
Paradigms of AI Programming teaches advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical, performance issues of writing real working programs of significant size, including chapters on troubleshooting and efficiency. A discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions are included. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer. [출판사 제공]
61. 어떻게 문제를 풀 것인가; How to Solve It: A New Aspect of Mathematical Method, by G. Polya (Author)
발견적 학습과 문제 해결에 대해서 논의하고 있는 이 책은 수학에 초점을 맞추고 있지만 소프트웨어 개발에도 적용이 가능하다. Polya의 책은 수학적인 무제를 해결할 때 발견적 학습 방법(heuristic)을 사용하는 방법에 대해서 처음으로 쓰여진 책이다. 이 책은 해결책을 발견하기 위해서 사용되는 어지러운 발견적 학습 방법과 일단 발견된 것들을 포현하기 위해서 사용되는 정돈된 기법을 명확하게 구분하고 있다. 읽기가 어렵긴 하지만, 발견적 학습 방법에 관심이 있다면 여러분의 의지와는 상관없이 이 책을 읽게 될 것이다. Polya의 책은 문제 해결이 결정적이지 않은 활동이라는 것과 한 가지 방법론에만 집착하는 것은 말에 족쇄를 채우고 걷는 것과 같다는 점을 분명히 하고 있다. 한때 Microsoft는 이 책을 새로운 프로그래머들에게 주었었다. [스티브 맥코넬/Code Complete 2 중]
* 이 책보다 좀 더 쉽고 수학적이지 않은 예를 포함시켜 Poly의 책을 향상된 방법으로 다루고 있는 다른 책 How to Solve It: Modern Heuristics, by Zbigniew Michalewicz (Author), David B. Fogel (Author)이 있다.
62. 프로그래밍 심리학; The Psychology of Computer Programming: Silver Anniversary Edition by Gerald M. Weinberg (Author)
약 40년 전 제랄드 와인버그는 '프로그래밍도 사람이 하는 것'이라는, 당연하지만 현실에선 제대로 인정받지 못하는 문제 인식을 바탕으로 『프로그래밍 심리학』을 탄생시켰다. 프로그래밍을 둘러싼 여러 부류의 사람들이 가지는 마음의 이치를 다룬 역사적인 책이다. 초판을 낸 지 25년 후, 와인버그는 25주년 기념판을 내면서 원문을 전혀 수정하지 않았다. 사람의 마음은 그만큼 잘 변하지 않는 것이라, 원문의 내용이 지금에도 여전히 유용하기 때문이다. [출판사 제공]
『프로그래밍 심리학』은 우리 분야에서 고전 중의 고전입니다. 1971년에 초판이 출간되었으니 거의 40년이 지났습니다. 그러나 아직도 많은 사람들이『프로그래밍 심리학』을 기꺼이 구매하고 있습니다. 왜일까요? 지금도 읽을 만한 가치가 있기 때문이겠죠. 고전이란 그런 것입니다. 오래 됐지만, 여전히 내용이 살아있는. [옮긴이의 글 중에서]
63. 사랑하지 않으면 떠나라!; My Job Went to India: 52 Ways to Save Your Job (Pragmatic Programmers) by Chad Fowler (Author)
예측 불가능한 IT 시장에 올바르게 대처하는 52가지 방법을 제시한, IT 관련 자기계발서. 저자는 먼저 한정된 시간과 에너지를 효과적으로 사용할 수 있도록 탁월한 안목을 가질 것을 당부하고, 무섭게 진출하는 저임금 국가의 개발자뿐만 아니라 개발자 시장에서 소위 잘 나가는 동료 개발자들과 경쟁하기 위해 체계적으로 기술을 수련해나가는 방법을 알려준다. 또한 IT 산업 현장에서 또는 회사에서 자신을 알릴 수 있는 마케팅 방법에 대해서도 함께 적고 있다. [Yes24 제공]
64. Professional 소프트웨어 개발 : 짧은 스케줄, 뛰어난 상품, 성공적인 프로젝트, 경력 개발을 위해; Professional Software Development: Shorter Schedules, Higher Quality Products, More Successful Projects, Enhanced Careers by Steve McConnell (Author)
약 25%의 프로젝트는 완전히 실패하고, 50%의 프로젝트는 프로젝트 기한을 넘기고, 예산을 초과하거나 기능 부족 상태로 출시된다. 또 일반 프로젝트라면 거의 대부분 예산 초과상황에서 취소 결정이 내려진다. 좋은 소프트웨어를 만들기 위한 기법들은 이미 잘 정립되어 근 10~20년 동안 우리 곁에 있었다. 그럼에도 불구하고 다수의 프로젝트가 실패로 끝나고, 이로 인한 엄청난 손실이 계속 벌어지는 이유는 뭘까? 이 책은 이에 대한 해답을 담고 있다. 소프트웨어 개발은 충분히 예측할 수 있고, 제어 가능하며, 경제적으로 관리할 수 있다. 이 책은 소프트웨어 공학 전문가와 경제적인 고품질 소프트웨어 생산을 뒷받침하는 소프트웨어 기법들과 함께, 현재 존재하는 컴퓨터 프로그래머라는 직업에서부터, 새롭게 등장하리라 생각되는 소프트웨어공학 전문가라는 직업까지 살펴본다. [출판사 리뷰]