화요일, 12월 29, 2015

[독서광] 슈퍼 컴퓨터를 사랑한 슈퍼맨

권순선님의 추천으로 진작 사놓고서 읽지 못하다가 이번 크리스마스 연휴를 기념해서 번개처럼 읽은 책은 바로 '슈퍼 컴퓨터를 사랑한 슈퍼맨'이다. 책 제목을 보는 순간 이 책의 주인공이 누구인지 단번에 맞춘다면 당신은 컴퓨터 역사광!

냉전과 함께 기존 제품과 호환성이나 제품 자체의 완성도는 떨어지더라도 어떻게든 빠름을 추구하는 고객을 만족시키기 위한 군에 소속된 특수한 고객을 대상으로 하는 틈새 시장이 생겼고, 이를 차지하기 위한 스타트업(응?)의 치열한 경쟁 속에서 슈퍼컴퓨터 역사상 가장 유명한 인물이 탄생하게 되는데, 바로 시모어 크레이다. 이 책은 시모어 크레이를 중심으로 빠름에 목숨을 건 슈퍼컴퓨터의 역사를 풀어낸다. 슈퍼컴퓨터의 흥망성쇠를 생생하게 전달한다는 점이 이 책의 가장 큰 특징이다.

항상 10년 정도 뒤쳐진 기술을 토대로 10배의 기술적인 발전을 일궈냈다는 점에서 크레이의 창의력과 집중력은 실로 대단하다는 생각이다. 하지만 크레이의 은둔자적인 성향으로 인해 여러 가지 어려움에 직면하게 되는데, 의외의 숨은 인물인 레스 데이비스라는 크레이 1의 수석 엔지니어가 크레이를 충실하게 보완해준다(Oral History of Les Davis를 읽어보면 당시 생생한 이야기가 나온다). 우리는 보통 슈퍼컴퓨터 부문에서 크레이만 알고 있지만(1등이 아닌 사람은 기억도 못하는 듯. 뉴뉴)... 이 책은 앞서나가는 사람이 있으면 반드시 뒤에서 마무리를 지어주는 사람이 필요하다는 사실을 어김없이 보여준다.

상당히 오래된 이야기지만, 아직도 컴퓨터 하드웨어/소프트웨어 개발과 관련해 중요한 시사점을 던져주는 내용이 곳곳에 등장하므로 관리자들은 타인 계발서 하나 덜 읽는 대신 이 책을 읽어보면 상당한 교훈을 얻을 수 있으리라는 생각이다. 관료주의 대 엔지니어의 자유, 봉급이 아닌 프로젝트 자체에 대한 몰입, 뭔가 엄청난 일을 성취하기 위한 개인적인 희생 등과 같은 내용을 보면 데이터제네랄이라는 회사에서 32비트 컴퓨터를 만들기 위해 악전분투하는 개발자들을 그린 새로운 기계의 영혼의 슈퍼컴퓨터 판으로도 볼 수 있겠다.

스포일러를 피하기 위해 이 쯤 해두기로 하고 출판사 책 소개 페이지에 가면 미리 맛보기와 자료 모음 링크를 제공하므로 한번 방문해보시기 바란다.

결론: 컴퓨터 역사(특히 하드웨어)를 좋아하시는 분들께 강력 추천드린다.

EOB

일요일, 12월 27, 2015

[일상다반사] 소프트웨어 악취를 제거하는 리팩토링: 구조적 설계 문제를 풀어내는 최선의 실천법

연말을 맞이하여 독자 여러분들께 책 한 권을 소개해드리겠다. 오늘의 주인공은 Refactoring for Software Design Smells라는 책을 번역한 "소프트웨어 악취를 제거하는 리팩토링: 구조적 설계 문제를 풀어내는 최선의 실천법"이다. 국내에 원서가 잘 알려져 있지는 않아서 흥행은 자신하기 어렵지만, 기술 부채를 중심으로 구조적인 설계 문제에 고민이 많은 분들이라면 꼭 한 번 정독해보시기를 추천드린다. 이 책을 어떻게 설명할지 고민하다가 가장 손쉽게 역자 서문을 가져와봤다.


한국어로 번역되어 많은 분들의 사랑을 받은 로버트 C 마틴이 집필한 클린 코드(clean code)(인사이트, 2013년 출간)에서는 좋은 코드와 나쁜 코드, 그리고 나쁜 코드를 좋은 코드로 만드는 리펙터링 기법에 대해 소개하고 있다. 전문가로서 소프트웨어 개발자의 올바른 자세가 무엇인지 역설하고 있는 클린 코드는 소프트웨어 개발에 있어 나쁜 프로젝트 팀보다 더 위험한 요인으로 나쁜 코드를 짚어낸다. 이 책의 가장 멋진 특징은 바로 문제가 있는 코드에서 출발해 튼튼하고 효율적이면서 깨끗한 코드로 바꿔나가는 과정이다.

그렇다면 코드 수준이 아닌 설계 수준에서 깨끗함을 다루는 책은 없을까? 소프트웨어 설계에 대해 무척 관심이 많았기에 여러 해 동안 소프트웨어 설계와 관련된 책을 찾아다녔는데, 우연한 기회에 길벗 출판사에서 Refactoring for Software Design Smells: Managing Technical Debt라는 책의 번역을 요청해왔다. 제목에 붙어 있는 기술 부채(technical debt)라는 용어를 보면서 이 책의 내용이 범상하지 않으리라는 예감이 들었고, 1장을 펼치는 순간 이 책이 추구하는 방향에 대해 감이 왔다. 바로 기술 부채를 줄이고 소프트웨어 품질을 높이기 위한 설계 수준에서 악취 해소다!

이 책은 코드 수준보다 추상화 단계가 높은 설계 수준에서 펼쳐지는 다양한 문제점(즉, 악취), 문제점을 일으킨 원인, 이를 해소하는 방법(즉, 리펙터링), 악취가 영향을 미치는 핵심 품질 속성을 추상화, 캡슐화, 모듈화, 계층 구조라는 네 가지 대 범주에 속한 25가지 항목으로 나눠서 소개한다. 소프트웨어 개발자들이 설계 원칙을 어길 때 발생하는 악취가 무엇인지 파악함으로써 설계 과정에서 직면한 다양한 도전을 탐구한다. 단순히 악취 목록만 나열하는 이론적인 접근 방법에서 벗어나 다양한 일화와 실제 사례 연구를 중심으로 소프트웨어 개발 현장에서 어떤 문제가 발생하고 이를 어떻게 해결하는지 구체적인 방식으로 경험담을 기술하므로, 좋은 설계와 나쁜 설계가 무엇인지 제대로 보여준다.

본문에 들어가기 앞서 객체지향 소프트웨어 설계 원칙에 친숙할 필요가 있다. 부록 A에 추상화 원칙, 비순환 의존성 원칙, DRY 원칙, 캡슐화 원칙, 정보 은닉 원칙, KISS 원칙, LSP, 계층 원칙, 모듈화 원칙, OCP, 단일 책임 원칙을 소개하므로 우선 부록에 정리한 설명을 읽으면서 좋은 설계를 위해 어떤 원칙을 지켜야 하는지부터 파악한 다음에 해당 원칙을 어기는 경우 풍기는 악취에 주목하면 이해가 더 쉬울 것이다.

아무쪼록 자신도 만족스럽고 남도 만족스러운 깨끗한 설계를 위해 오늘도 끊임없이 노력하는 모든 소프트웨어 개발자 동료에게 조금이라도 도움이 되었으면 좋겠다. 이 책에서 소개하는 교훈을 바탕으로 한 단계 높은 아키텍처 구성과 설계가 가능해지면 더 바랄 나위가 없겠다.


역자 서문을 보면 이 책의 목적과 내용, 그리고 대상 독자층을 대충 파악했으리라 믿는다. 하지만 여기서 그치지 않고 애독자 여러분을 위한 보너스 선물인 세미나 자료를 준비해봤다. 비록 모든 내용을 다루지는 않지만 이 책의 분위기를 느끼기에는 부족함이 없으리라고 생각한다.

이 책과 더불어 클린 코드도 많이 사랑해주시기 바란다. 꾸벅~

EOB