[독서록] Clean Architecture

클린 아키텍쳐, 소프트웨어 구조와 설계의 원칙, 로버트 C.마틴 지음, 송준이 옮김
Clean Architecture : A Craftsman’s Guide to Software Structure and Design

작년에 회사에서 일괄로 나누어준 아주 고급 진 책을 가을쯤부터 시작해서, 일독 하였습니다. 총평은. 그동안 내가 배워 왔던 모든 것, 그 자체를 동의하지 않을 수 없는 깔끔한 문체와 설명으로 제 마음을 사로잡았음. 정도 되겠습니다. 지난번의 TDD서적도 그렇지만, 아주 훌륭합니다. 정말로 평생 소장’해야’할 책입니다. 설게 원칙, 객체지향, 개발, 소프트웨어가 갖추어야 할 모습, 왜 여러가지 일들이 벌어지고, 그것이 소프트웨어에 녹아 스며들게 되는지 모든 것들이 넘치지 않고, 부족하지 않고, 딱 적당하게 표현되어 있습니다. 초반부부터 아주 재미가 있어서, 반절을 후다닥 하루만에 읽게 되어서, 따로 참조 문구등을 빼놓은 건 몇가지 않되어, 일단 찬사만으로 이번 후기를 끝내고, 두번째 읽어볼 때 조금 더 이야기를 해보도록 하겠습니다. 책 말미에 부록으로 Jason Gorman의 부록이 있는데, 부록 전체의 저자인게 아마 맞을겁니다. 익숙한 이름이 또 나오는군요. 레베카 워프브루과 그녀의 저서 <Designing Object Oriented Software> , p.378 에 대해 나오는데, 사실 제가 이 책을 읽었는지 아닌지는 잘 모르겠습니다. 제목은 익숙한데, 사실 레베카를 만나오면서도 그녀의 저서에 대해서는 생각을 못했거든요. OOPSLA->SPLASH에서 잠시 지나치면서 보았던, James O. Coplien의 <Advanced C++ Programming Styles and Idioms> 도 한번 더 찾아서 읽어봐야겠습니다. 대부분 C/C++/OOP관련서적들을 대학전후로 읽고, 그 뒤로는 Modern 시리즈 외에는 잘 본게 없어서, 기억들이 아련하니, Refresh해야겠네요.

COM+ 서적도 참 좋았는데, 무거워서, 버린게 조금 후회가 되긴합니다. 지금 이책에서 이야기하는 컴포넌트 개념에 대해서 그 문을 열어 줬던게 저에게는 Microsoft의 COM+였습니다. 그 뒤로 그 앞선 역사와 뒷 역사들을 찾아봐가면서 공부를 했었지요. 아직도 새내기 어린시절에 Ivar Jacobson의 한국 특별 강좌를 기회 좋게 들었던 것이 아직도 제 몸속 뿌리 깊이 자리하고 있다는데 어느 정도 자부심도 가지고 있습니다. 그 때 당시 여러 기업들에서 교육 받으러 오신 분들이 계셨는데, 요즘은 어떻게 지내시는지 궁금하기도 하네요. 다들 훌륭하게 소프트웨어를 만드시고 계시겠죠. 그때 전 쪼꼬미, 대학졸업할까말까 한 풋내기였고, 그분들은 이미 현역 프로그래머들이셨으니까요. 이제 한번 책을 다 읽어보았으니, 주변 사람들에게 널리널리 알리고 추천하고 다녀야 하겠습니다. 그게 의무고 사명이라는 생각이 듭니다.

[독서록] 테스트 주도 개발(Test Driven Development : by example)


저자 : 켄트벡지음, 김창준,강규영 옮김

꽤 오래된 서적입니다. 한 십 몇 년 전에 읽어보고, 대충 감만 몸에 익힌 상태에서, 최근 신입사원들이 들어와서, 회사보유 서적으로 다시 읽어보게 되었는데요. 예전에 읽은 것과는 확연히 다른 느낌, 이해가 되었습니다. 무엇보다 이제는 익숙한 이름들이 몇몇 보이니까 반갑네요. Ward Cunningham, Richard Gabriel, Rebecca Wirfs-Brock, 모두 PLoP에서 만나보고, 이야기해본 분들입니다. Agile과 XP등도 이제는 익숙해지고, 주변도 대충 감은 알고 있는 상황에, 은근 개발환경/ 문화에 살짝 녹아져가고 있다는 느낌도 듭니다. 이런중에 텍스트를 다시 읽어봤는데, 솔직히 1장은.. 좀.. 따라가긴 힘드네요. 예제를 기반으로 한다고는 하지만, 뭐랄까 지독히 대화체로 되어 있고, 번역체가 여전히 남아 있는게 보여서, 껄끄럽달까요? 그냥 원문을 읽어보는게 어떨까라는 생각이 드네요. 그리고 좀. 지루합니다. 일단 리팩터링을 모르는 분이라면 코드를 하나씩 봐가면서 따라가는게 좋을 수도 있겠지만, 거꾸로. 아는 사람은 굳이 왜? 라는 생각이 들 수도 있겠다 싶었습니다. 기본적으로 예제의 작성 흐름은 순수 저자의 마음과 설계대로 흘러가는 것이라서, 독자가 쉽게 인정(?) 혹은 동의하기는 어려울 수도 있겠다 싶었습니다.

제게는 2장 이후의 이야기 그리고 3장에서의 이야기가 이제는 좀 더 와닿고, 도움이 되겠다 싶은 내용들이었습니다. 일종의 팁 들이 주어졌다고 할까요? 약간의 마음가짐을 다시 잡도록 도와주는 문구들도 있었구요. 아래는 그 일부분 들을 발췌 해봤습니다.

“데밍: 품질에 대한 책임을 그 누구보다도 작업자에게 맡겨야 한다”. 역. P1
사실 요즘 다시 TDD를 들여다보는 것은 Test할 일이 많아져서 입니다. 품질에 대해서 다시 여기저기서 압박이 들어오는 상황이라서, 기존 방법론들 설계방법, 우리의 개발 문화들을 다시 돌아보고 있는 상태이지요. 이전까지는 테스트가 한참 모자랐다고 할 수 있겠고, 이제는 모자라다는 수준은 아니지만, 조금, 뭐랄까 중복되었다라는 느낌이 많습니다. 테스트 리팩토링을 할 때라고 할 수도 있겠네요.

“xper.org의 TDD수련법”
일종의 공식이자, 단순화된 절차랄까. 일을 좀더 빠르게 진행할 수 있도록 도와주는 행동요령정도가 되겠네요.
1. 가능한 하나의 테스트를 빠르게 추가하고
2. TC를 돌려보고, 코드가 테스트에 의해 실패하는 것을 확인하고
3. 코드를 고쳐서
4. TC를 수행 시, 모두 성공하도록 만들고
5. 중복을 제거한다.(Refactoring) p.71
* 가짜구현. 뭐든 만들자, TC가 패스하면 OK. 그리고 고친다.

“Clean code that works by Ron Jeffries”, p.21

“용기를 갖는 것 두려움을 뛰어넘는 것”

“Metaphor Gardening 워드 커닝햄”

“느낌(부작용에 대한 혐오)을 테스트로 변환하는 것은 TDD의 일반적인 주제다”. p.57

testEquality $5 != $6
value object $5 == object $5
object != value p.62

equal null, equal object p.63

위험한 상황 동치성 테스트 실패 -> 곱하기 테스트 실패로 이어짐 p.67

Dollar -> Franc testform분열 Copy&Paste에 대한 활용과 경계. p.70

“TDD로 구현할 땐 테스트 코드의 줄 수와 모델 코드의 줄 수가 거의 비슷한 상태로 끝난다. TDD가 경제적이기 위해서는 매일 만들어 내는 코드의 줄 수가 두 배가 되거나 동일한 기능을 구현하되 절반의 줄 수로 해내야 할 것이다. TDD가 자신의 방법에 비해 어떻게 다른지 측정. 이때 디버깅, 통합작업, 설명하는데 걸리는 시간.” P.145

“잠시 실험을 시도했는데, 제대로 되지 않아서 버렸다.” p.148

Agile Manifesto

http://agilemanifesto.org/iso/ko/manifesto.html

책을 읽고 난 후 떠오른 생각을 정리해봅니다.
경험(=Object)의 중첩(Superposition) : ObjectLifeCycle
+—- Aging ———–+
O1 S————————-E
+-Overlap-+ Communication, Energy Exchange, Resembling
O2 S—————————E
+–Replication-+ Legacy, Inheritance, Heritage, History, Legendary

O3 S——————————-E
Most Longest and repeated Object/Feature becomes legacy and firm infrastructure.

독서록: 30분에 읽는 비트겐슈타인

30분에 읽는 비트겐슈타인, 신 셰한 지음, 김종승 옮김, 랜덤하우스중앙

문고판전집중 한권으로 150페이지가 채 안되는 위대한 사상가중 비트겐슈타인에 관하여 아주 함축된 표현즐로 전체 삶과 전기 후기 철학등을 설명하고 있습니다. 몇몇 일화와 주변의 다른 학자들 시대상황등을 오밀조밀하게 이야기하고 있고, 특히 여러 비유적인 표현들, 아마도 비트겐슈타인 본인의 표현들이 주이고 저자의 비유 표현까지 더해, 나름 난해한 그의 철학을 쉽고 오해하지 않도록 하기위해 노력한 흔적이 여기저기 보입니다.

사실 30분을 기대하지는 않았지만 너무 얕보고 읽다말다를 반복해서 거진 석달이 넘은듯 합니다. 전반부는 조금 매끄러운듯 글들이 이어져있고 비트겐슈타인의 전반의 삶 자체가 매끄럽고 깔끔하다보니 잘 넘어 갔는데 후기철학부분부터는 생각보다 문맥이 어렵고 난해한 내용과 중복되는 비유적 표현들로 페이지가 잘 안넘어갔습니다. 저자는 후기철학을 완성으로 보고 그 시대의 영향을 받은 현대 철학자까지 끌어들여 설명을 하고 있어 한편으로는 이어지는 다른 사상, 대비되는 사상등으로 좀더 쉽게 이해할법도 했지만 비교대상들에 대한 지식이 전무하다보니 비트겐슈타인 본의의 표현외에는 설명들이 잘 와닿지는 않았습니다.

비트겐슈타인에 관한 표현중 몇가지를 적어봅니다.

“비트겐슈타인에게 있어어 철학이란 감춰진 무의미를 노출된 무의미로 바꾸어 놓음으로써 형이상학적 사고의 오류들을 몰아내는 일종의 치료였다. 한번은 그가 철학을 프로이트 정신치료학에 비유했다. 이것이 그가 고통의 언어와 사전 언어개념 등을 탐구한 이유였다.”, pp. 134

제가 느끼는 비트겐슈타인의 좀더 행동가에 가까웠던것 같습니다. 시대상황이 그랬겠지만 단순히 언어에 의해 미혹된 사람들이 너무 많고 그에 올바르지 못한 행동들이 넘쳐나는 일들을 보고, 아마도 철학으로 이런행동들을 교정할수 있지 않을까 했던것 같습니다.

“우리의 탐구가 흥미로운 모든 것, 즉 위대하고 중요한 모든 것을 파괴하기만 하는 것 같이 보이는데 우리 탐구의 중요성은 어디에서 오는가? (마치 폐허가 된 건물들 같다) 우리가 파괴하고자 하는 것은 카드로 만든 집들뿐이며, 우리는 그들이 서 있는 언어 기반을 정비하는 것이다” pp.135

《철학적탐구》의 구절을 번역하여 인용한 부분을 재인용하였습니다. 실체에 대한 견해 본질에 관하여, 그 자체를 존재한다고 근거 없이 확정하는것이 아닌 상황과 문맥에 따라 달라지며 그 기반을 계속 안정적으로 정비해야 한다는 의미로 이해했읍니다. 데카르트와도 다르고 해체주의와도 다른 좀더 실용행동주의에 가까운 철학으로 와 닿습니다. 다음엔 해설서등이 아는 저서를 직접 읽어 봐야겠습니다.