새로운 책이 나왔습니다. 🙂
바로 직전에 나온 책이 “CODE”라서 비슷한 내용이 아닐까 생각하실 수 있는데, 하드웨어 부분은 전혀 가지고 있지 않은 책이며, 원제인 Code that fits in your head에 맞게 ‘이해하기 쉬운’ 코드란 어떤 것이며, 이런 코드를 만드는 관례(practices)에 대한 대한 책입니다. 사실 이해하기 쉬우면 읽기도 쉬워지기 때문에 책 제목이 이해할 만 합니다.

- 교보문고: https://product.kyobobook.co.kr/detail/S000212756007
이 책은 저자가 경험한 방법들 중에서 모두 알아야 할만한 프랙티스들을 체계적으로 정리해서 코드를 작성할 때 어떤 식을 적용할 수 있는지 알려주는 책입니다.
소프트웨어 엔지니어 분들은 Clean Code라던지, 조엘 온 소프트웨어라던지, Code complete라던지, 혹은 refactoring, design patterns 같은 책을 통해서 이미 여러가지 프로그래밍 방법론과 관례에 익숙하실 것이라 생각합니다.
이 책은 Clean Code를 쓴 로버트 마틴 시리즈(https://www.amazon.com/Robert-C.-Martin-14-book-series/dp/B085D95SX5) 중의 하나로, (제 생각에는) 코드라는 것이 왜 복잡할 수 밖에 없는지, 그리고 이전부터 가지고 있던 코드에 대한 잘못된 생각이 실제 코딩을 바라볼때 어떤 문제를 일으키고 있는지에 대한 이야기부터 시작해서, 아주 간단한 프렉티스들, 그리고 이 작업들이 내포하고 있는 의미를 체계적이고 단계적으로 하나 씩 설명해 줍니다.
저는 개인적으로 이 책에서 가장 중요한 교훈은 다음과 같다고 생각합니다.
“여러분은 보통 코드를 작성하는 것보다 읽는데 더 많은 시간을 사용합니다.”
따라서, 작성하기 편한 코드를 만드는 것보다 “읽기 쉬운(잘 이해될 수 있는)” 코드를 만드는 것이 조직의 관점에서 훨씬 효율적일 수 밖에 없습니다 .
이 지점이 정말 중요한 부분이라 생각하며, 조직에서는 이 부분을 지원하기 위한 방법을 찾아내야만 합니다. (이 부분은 뒤에 더 이야기하죠)
잘 읽히는 코드는 코드 자체가 잘 읽히는 것도 중요하지만(이 부분을 위한 관례들은 Code complete에서 잘 설명되어 있습니다.), 잘 이해되는 코드를 작성하는 방법이 필요하다고 할 수 있는데, 이 책은 여기에 조금 더 집중하고 있습니다. (이 책과 비슷한 결의 책으로 “프로그래머의 뇌“라는 책이 있는데, 프로그래머의 뇌가 조금 더 과학적인 근거에 집중했다면, 이 책은 많은 사람들이 사용하는 프랙티스들을 설명하고 이게 어떤 근거를 가졌는지 설명한 후 예제를 보여주는 형식으로 구성되어 있습니다.)
사실 이 책은 대부분의 프로그래머분들과 “관리자”분들께 권하고 싶습니다.
앞에서 설명한 것처럼 작성하기 편한 코드를 만드는 것보다 “읽기 쉬운(잘 이해될 수 있는)” 코드를 만드는 것이 조직의 관점에서 훨씬 효율적이라는 점을 잘 알아야 하기 때문이죠. 이 부분을 왜 알아야 하냐 하면, (최근에는 한물 가기는 했지만) 성과 주의를 강조하면 ‘개인이 얼마나’ 빠르게 코드를 작성하는지에 초점이 맞춰지는 경우가 생길 수 밖에 없으며, 이는 코드를 망쳐버리는 일을 발생시킵니다.
문제는 ‘이미 동작하는 좋지 않은 코드가 만들어 졌을 때 입니다.’ 보통 ‘잘 돌지않냐’는 거센 저항에 부딛치는 근거가 되기 때문이며, 조직에서도 코드의 구조나 가독성 등을 위해서 리뷰와 리펙토링, 혹은 새로 코드를 작성하는 부분에 대해서 자신의 성과에 대한 ‘이의 제기’로 받아들여질 여지가 커진다는 부분입니다.
물론 이 책에 나온 것처럼 linter 등을 잘 사용해서 ‘안 고치면 안되는 것처럼’ 이야기할 수 있습니다. 하지만, 이 부분 역시 개발자 간에 문화가 있어야 하는 부분이겠죠. 즉, 최대한 문화가 지원해 주어야만 하며, 이런 문화가 만들어 질 수 있도록 만드는 것이 조직에서 고민해야 할 부분일 것입니다.
그럼, 이 책을 하드웨어 IP 개발자인 제가 번역하게 되었는지 궁금하실 수 있는데요. 이 내용은 거의 정확히 HDL을 이용해서 하드웨어 IP를 개발하는 것에도 적용될 수 있다고 생각했습니다. 사실 HDL을 기반으로 하는 Soft IP들의 개발 과정은 점진적으로 잘 개발되어 있는 소프트웨어 개발 방법론을 사용하고 있기 때문입니다.
개인적으로 저는 오랜 시간 동안 HDL이라는 언어를 이용해서 재사용 가능한 코드인 하드웨어 IP를 개발해왔습니다. 이런 개발 과정은 하드웨어 개발이지만, 개발 과정에서는 소프트웨어 개발론이 적용되면 훨씬 더 체계적이 될 수 있는데, 이외로 잘 안되는 부분들이 많았기 때문에 항상 부딛치는 수 밖에 없었기 때문이죠. (다행히 좋은 매니저 분들과 경영진을 만나서 적어도 제가 있던 직장들에서는 버전관리 시스템과 이슈 트래킹 시스템, 지식 관리 시스템이 잘 적용되었고, 원활하지 않더라도 여러가지 방법론이 시도되었습니다. 물론 일부는 실패하기도 했고 일부는 변형이 필요한 부분이 있었다 하더라도 말이죠.)
하드웨어에서는 여기 나온 모든 것을 적용할 수는 없는 부분이 있기는 하지만, 정말 많은 부분에서 도움이 됩니다. 정말입니다. 도움이 필요하시다면 불러주세요. 어떤 부분에서 도움이 되는지 알려드리겠습니다.
이 책은 많은 부분에서 하드웨어에서도 적용할 만 합니다. 책에서 사용한 언어가 C#이고, 웹 개발을 예제로 사용한 것은 중요하지 않습니다. 내용은 정말 참고할 만 합니다. 다양한 부분에서 말이죠. 이 책의 번역을 해야겠다고 결심한 지점 중의 하나가 바로 이 부분입니다. 물론, 당시에 있던 junior 엔지니어 들에게 도움 될만한 내용이 많았다고도 생각했습니다.
이 책의 번역을 시작한 것이 이전 책 “CODE”보다 빠른데요. 제가 이 책에서 예제로 사용한 C# (특히 web 개발을 위한 library들)을 그리 잘 알지 못하는 관계로 오래 걸렸습니다. C#을 사용했던 것이 워낙 오래전인데, 지금 C#과 차이가 많고 웹 개발에 필요한 부분에 대한 이해가 필요했습니다. 최대한 해보려고 했는데, 여전히 아쉬운 부분이 있습니다. 조금 더 매끄럽고 잘 읽히게 하고 싶었는데 그렇지는 않더군요. 아마도 제가 완전하게 제 언어로 이야기하지 못해서 그런 것이라 생각됩니다. 이 부분은 번역을 마치고 나면 항상 아쉽더군요. 어떤 글을 쓰게 되어도 그렇지 않을까 하는 생각도 듭니다.
그럼에도.
많은 분들이 즐겁게 읽으시길 바랍니다.