공통점

로버트 마틴(이후 밥)은 밥 아저씨라는 별명으로 불리며 "Clearn Code"[1]로 유명하다. 또한 마틴 파울러(이후 마틴) 하면 "Refactoring"[2]으로 유명하다. 이 두 사람은 많은 공통점을 가지고 있다. 앞에서 말한데로, 소프트웨어 개발자가 공부를 하다 보면 알게 되는 유명한 책의 저자이다.

둘다 애자일리스트이다. 즉, 애자일 소프트웨어 개발을 지지하는 사람들이다. 이 두 사람은 애자일 소프트웨어 개발 선언(Manifesto for Agile Software Development)[3], 소위 애자일 선언문(Agile Manifesto)에 서명한 17명에 포함되어 있다. 두 사람은 모두 애자일 소프트웨어 개발 중에서 의 가장 엔지니어링 실천법(engineering practices)에 집중하는 익스트림 프로그래밍(Extreme Programming, XP)의 추종자이다.

밥의 블로그인 The Clean Code Blog의 글[4]를 보면 그는 Extreme Programming(XP)을 지지하는 것을 알 수 있다. 그의 글이 2013년도 이고, 글에서도 15년 전 이야기라고 언급 하고 있으니 1998년도 즈음의 이야기를 회고(reflection)하면서 XP를 제외한 Scrum, Kanban 그리고 Lean에서 일어나고 있는 일들을 비판하고 있다. 그는 마틴의 축 늘어진 스크럼(Flaccid Scrum)[5]이라는 비판에 동의 하고 있다. 특히, 밥은 XP의 12개의 실천법 중에서 다른 애자일 신천법은 단 하나, 플래닝 게임(Planning Game, 소위 반복 Iteration)만을 도입하고 있다고 비판한다. 그는, XP를 넘어서 소프트웨어 장인 선언[6]을 지지하고 있다. 특히, 그의 블로그의 첫번 째 글[7]을 보면, "Clean Code"가 바로 이 소프트웨어 장인 정신을 실천하기 위한 것임을 알 수 있고, 그의 유명한 책[1]도 서문에서 부터 그 내용을 다루고 있다.

마틴의 웹페이지(martinfolwer.com)의 글[8]에서 알 수 있듯이, 그도 XP 추종자이다. 그는 XP와 관련된 책의 주요 저자인 켄트 벡(Kent Beck)과 함께 일하였다. 그 때, 켄트 벡에게서 리팩터링을 배우면서, 그의 유명한 책[2]으로 만들어 낸 것이다. 그의 웹페이지에는 주요 관심사로 보이는 항목들이 있다. 첫 번째가 리팩터링이고 두 번째가 애자일[9]이다. 여기서는 바로 그가 애자일에서 중요하다고 생각하는 부분이 드러난다.

"Agile Development
is adaptive rather than predictive
is people-oriented rather than process-oriented"

애자일이 예측(predictive)보다는 대응(adpative)하고, 프로세스에 기반(process-oriented)을 두기 보다는 사람에 기반(people-oriented)하다는 것이다. 특히, 나의 개인적인 경험으로도 후자가 매우 중요하다는 생각이 든다. 처음 커리어를 시작했을 때, Software Engineering을 전공하던 선배의 말이 아직도 기억이 난다. "설계 (문서)를 아주 꼼꼼하게(detail)하게 (작성)하면 코딩은 그냥 되는 거야". 이 말은 전형적인 프로세스 위주의 말이었다. 즉, 프로세스에서 필요로 하는 설계 문서를 만드는 것이었다. 내가 없어도 다른 사람이 프로세스의 산출물(artifact)인 그 문서가 중요한 것이었다. 거기에 사람은 없었다. 즉, 대체 가능한 것이었다.

차이점

밥과 마틴의 차이점에 대해 [10]에서 이야기를 하는 부분이 매우 인상적이다. 글을 쓴 사람이 Anonymous로 누가 작성한 것인지 모르지만, 매우 공감이 가는 부분이다. 한마디로 밥은 순수주의자(Purist) 그리고 마틴은 실용주의자(Progmatist)라고 한다. 밥이 정리한 OOP의 원칙인 SOLID 혹은 관심사 분리(seperation of concerns)와 같은 실천을 바라 보는 관점이 다르다.

밥은 실천이 원칙와 떨어져서는 안된다고 한다. 이러한 원칙은 법이다. 이를 지켜야만 한다는 것이다. 이것이 한마디로 소프트웨어 장인이다. 밥은 이러한 입장에서 마틴을 비판[11]하기도 한다.

마틴은 실천도 중요하지만, 원칙 혹은 가치가 더 중요하다고 한다. 이러한 실천은 모범 사례(Best Practice)이지 이해 관계자(고객)이 요구하는 실제 문제를 해결이 더 중요하다는 입장이다.

사실 두 사람의 블로그 및 웹페이지를 보면 애자일을 보는 관점에서도 차이가 난다. XP 추종자였던 둘은 이 관점에서도 달라진다. 밥은 애자일 선언문을 넘어서 더 소프트웨어 장인으로 갔고, 마틴은 엔지니어링 기반의 XP에서 애자일 개발에서 스크럼이나 칸반과 같은 다른 분야에도 관심을 보이면서, 애자일 능숙도 모델(Agile Fluency Model)[12]을 제안하기도 했다. 그는 XP도 능숙도 측면에서 4단계 중 2번 째 단계로 이야기 하고 있다. 여기서, 3단계 이 후는 린 스타트업과 같은 비지니스 및 조직 관점에서 차이가 난다고 이야기 하고 있다.

재미있는 부분은 두 사람 모두 소프트웨어 아키텍처에 관해서도 관심을 가지고 있다. 하지만, 둘의 입장에서 보는 아키텍처는 또한 다르다. 밥은 클린 아키텍처[13]에서 도달해야 하는 아키텍처의 모습을 제안한다. 마틴은 리팩터링이 그의 전문 분야인 만큼 기존에 초기에 충분한 시간을 들여 특정 기간(Phase)에서 설계하는 계획 설계(Planned Design)과 대비하여 애자일 개발에서 점진적인 개발에서 나오는 소프트웨어 설계 혹은 아키텍처가 진화적 설계(Evolutionary Design)이라고 했다[14].

결론

초창기 애자일의 경우, 학문적으로 인정 받기는 어려웠다. 하지만, 두 사람의 말대로 애자일은 주류가 되었고, 소프트웨어 엔지니어링 분야의 학계에서도 반복적 접근, 리팩터링, 테스트 기반 개발(TDD)와 같은 XP의 엔지니어링 실천법들이 학계에서도 받아 들여 지고 있다. 그런면에서 두 사람이 기반을 두고 있는 XP는 아주 의미있는 분야가 되었다.

소프트웨어 개발을 하는 사람으로서, 밥을 목표로 할 수 있다. 하지만, 그렇다면 실재로 업무를 수행하면서 죄책감을 느낄 수 있다. 그가 말하는 것은 내가 도달하기 어려운 이상향일 수 있다. 반대로 마틴을 목표로 할 수 있다. 내가 드디어 대가가 이야기 하는 것을 적용할 수 있을 것 같다. 하지만, 여전히 고객과 이해 관계자들에게 휘둘리다 보면 내가 정말 잘하고 있는 것인가 회의가 들기도 한다.

소프트웨어 개발을 하는 사람으로서 여러 분은 이 두사람에 가까울 수도 있거 좀 더 멀 수도 있다. 하지만, 이 두 사람을 좀 더 잘 이해하고 자신이 어떤지 고민하면서 성장한다면 그 또한 충분하지 않을까?

참고자료

[1] 로버트 마틴, "Clean Code 클린 코드 애자일 소프트웨어 장인 정신", 인사이트(insight), 박재호, 이해영 역
[2] 마틴 파울러, "리팩터링 2판 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기", 한빛미디어, 개앞맵시, 남기혁 역
[3] 애자일 소프트웨어 개발 선언, https://agilemanifesto.org/iso/ko/manifesto.html
[4] Extreme Programming, a Reflection, https://blog.cleancoder.com/uncle-bob/2013/12/10/Thankyou-Kent.html
[5] Flaccid Scrum, https://martinfowler.com/bliki/FlaccidScrum.html
[6] Manifesto for Software Craftmanship, https://manifesto.softwarecraftsmanship.org/
[7] What Software Craftsmanship is about, https://blog.cleancoder.com/uncle-bob/2011/01/17/software-craftsmanship-is-about.html
[8] Extreme Programming, https://martinfowler.com/bliki/ExtremeProgramming.html
[9] Aigle Software Guide, https://martinfowler.com/agile.html
[10] Robert C. Martin vs Martin Fowler, https://social.msdn.microsoft.com/Forums/en-US/4cdf6e1c-2f9a-46ca-b457-11d588d52850/robert-c-martin-vs-martin-fowler?forum=asparchitecture
[11] The Tragedy of Craftsmanship, https://blog.cleancoder.com/uncle-bob/2018/08/28/CraftsmanshipMovement.html
[12] The Agile Fluency Model, https://martinfowler.com/articles/agileFluency.html
[13] 로버트 마틴, "클린 아키텍처 소프트웨어 구조와 설계의 원칙", 인사이트(insight), 송준이 역
[14] Is Design Dead?, https://martinfowler.com/articles/designDead.html

+ Recent posts