brunch

You can make anything
by writing

C.S.Lewis

by 안영회 습작 Feb 26. 2024

소프트웨어 설계는 길닦기와 유사하고 유익한 관계 맺기다

한국의 켄트 벡이 되기

번역 작업 초기에 굉장히 멋진 문구를 만났는데, 베타 리더 한 분도 비슷한 공감을 해 주어서 깊은 인상을 받았던 순간이 있었습니다.

척도가 정해지지 않은 길닦기와 유사한 작업

두 달이 지나고 번역 막바지 작업을 하는데, 이번에는 다른 구절에서 비슷한 느낌을 받습니다.

두 가지 영감을 하나로 합치면 다음 매듭말[1]이 탄생합니다.

척도가 정해지지 않은 길닦기와 유사한 작업


언젠가 제가 창발적인 설계에 대해 말했을 때, 누군가 그게 말이 되냐고 반기를 들었던 적이 있었습니다. 당시 '창발적 설계'란 아이디어를 제가 내놓은 것은 아니고, 영어로 된 책 제목에서 보고 '좋은 발상이다. 왜 그 생각을 못했을까?'라고 관심을 두고 적용해 보려고 하던 시절이었습니다.


하지만, 그에 대한 논리적 대답을 10 년이 지나서야 할 수 있게 된 느낌입니다.


소프트웨어 설계는 유익하게 요소들의 관계를 맺는 일

며칠 후, 또 번역 막바지 작업 중에서 설계에 관한 주옥같은 포기말[2]과 다발말[3]이 있습니다.

소프트웨어 설계는 인간관계 속에서 벌어지는 활동소프트웨어 설계는 인간관계의 연습입니다.

이 포기말은 2021년부터 2022년에 걸쳐, 18편이나 썼던 <도메인 스토리텔링 연구> 연재를 떠올리게 합니다. 그때 탐구하려던 주제이기도 하니까요. 하지만, 이 포기말은 앞부분부터 나온 것이고, 22장에서 주제가 가장 두드러지게 드러난 포기말은 이겁니다.

소프트웨어 설계는 요소들을 유익하게 관계 맺는 일입니다. <중략> 마법은 여기서 일어납니다. 하나의 설계 작업은 작은 하위 요소로 만든 거대한 수프를 만드는 일과 같은 것입니다

손때[4]를 묻혀 봅니다.


한국의 마틴 파울러에서 한국의 켄트 벡으로

메모하듯이 글을 쓰다가 퍼뜩 요즘IT에 썼던 글에서 '설계의 정의는 변해야 한다'라고 주장했던 사실을 기억해 냈습니다. 하지만, 구체적인 아이디어가 부족할 뿐 아니라 생업과 소프트웨어 설계가 거리가 있는 터라 시간을 투자할 동기도 부족했습니다.


그랬는데 뚜렷한 목적 없이 시작한 번역으로 인해 의도치 않게 진도를 나갈 수 있을 듯합니다. 어쩌면 이미 지난 글 <소프트웨어 설계 프로세스를 만들기 위한 아기 발걸음>에서 나도 모르게 한 발 나갔는 지도 모릅니다.


너무 진지하지 않은 상징적 의미였지만, 지금까지 썼던 <한국의 마틴 파울러가 되기> 연재는 지난 글인 <소프트웨어 설계 프로세스를 만들기 위한 아기 발걸음>을 마지막으로 끝내기로 합니다. 이제부터는 <한국의 켄트 벡이 되기>입니다.


주석

[1] 왜 매듭말인지는 <언어에 대한 일반이론>에서 일부 답을 얻을 수 있습니다.

[2] 왜 포기말인지는 <언어에 대한 일반이론>에서 일부 답을 얻을 수 있습니다.

[3] 왜 다발말인지는 <언어에 대한 일반이론>에서 일부 답을 얻을 수 있습니다.

[4] <학습법과 창의성 모두 기억이 핵심이다>에서 인용한 박문호 박사님의 말, '내 감정의 손때를 묻히라는 겁니다'에서 유래합니다.


지난 한국의 마틴 파울러가 되기 연재

1. 현실과 시스템의 불일치, 그리고 UX의 역할

2. 대상과 조건 그리고 자기 속도에 부합하는 조건 만들기

3. Code Smells 비유와 기술 부채

4. 기술 부채를 Code Smell로 관리할 수 있는가?

5. 형상 구성단위로 TestCase 유용할까?

6. 설계 요소의 사분면

7. 입자와 파동의 이중성을 소프트웨어 설계에 응용하기

8. 즉흥적으로 그린 그림에 입자와 파동 이중성 적용하기

9. 소프트웨어 설계에서 입자의 응용

10. 소프트웨어 설계에서 파동의 응용

11. 설계란 무엇인가 IV Part.1

12. 설계란 무엇인가 IV Part.2

13. 설계는 변화에 대한 준비인가?

14. 대상이 되는 사태의 주요 내용을 한 장에 담다

15. 스윔레인으로 경계와 상호작용 드러내기

16. 짝 프로그래밍처럼 함께 설계하기

17. 짝 모델링으로 탄생한 상태도 초안

18. 동료의 상태도를 검토하기

19. 분산 환경 무결성 문제와 상태도 연결하기

20. 후배 덕분에 한 번 더 생각하는 객체 지향

21. 소프트웨어 설계와 간접 연결성 그리고 모듈화

22. 기능을 무시한 디자인 그리고 소비자 관점의 기능 정의

23. 콘텐츠성 정보 자산 vs 기준 정보 자산

24. 코드 정돈과 시스템 규모 리팩터링 사이

25. 소프트웨어 설계 프로세스를 만들기 위한 아기 발걸음

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari