Category Archives: 책이야기

읽기 쉬운 코드

새로운 책이 나왔습니다. 🙂

바로 직전에 나온 책이 “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#과 차이가 많고 웹 개발에 필요한 부분에 대한 이해가 필요했습니다. 최대한 해보려고 했는데, 여전히 아쉬운 부분이 있습니다. 조금 더 매끄럽고 잘 읽히게 하고 싶었는데 그렇지는 않더군요. 아마도 제가 완전하게 제 언어로 이야기하지 못해서 그런 것이라 생각됩니다. 이 부분은 번역을 마치고 나면 항상 아쉽더군요. 어떤 글을 쓰게 되어도 그렇지 않을까 하는 생각도 듭니다.

그럼에도.

많은 분들이 즐겁게 읽으시길 바랍니다.

Getting Started with UVM

오랜만에 책 소개입니다.

https://www.amazon.com/Getting-Started-UVM-Beginners-Guide/dp/0615819974

지난 연휴때 읽어볼 요량으로 샀는데, 이곳 저곳 다니다가 이번 연휴 때 읽게 되었습니다. 특이하게 스타벅스에서 읽었네요. (음.. 제 생활 패턴으로 봤을 때 안 특이한건가.. 싶기도 하네요..)

이 책은 사진을 보시면 아시겠지만 엄청나게 얇습니다. 솔직하게 이야기하면, 받고나서 좀 아까웠습니다. (뭐 두꺼운게 좋은 책이란 말은 아닙니다만, 이렇게까지 얇으면 본전 생각이 살짝… 어흠 어흠)

얇은 만큼 미덕이 있습니다. 바로 금방 읽을 수 있다는 점이죠. (딸래미와 같이 스타벅스 2번 갔다오니 다 읽었더라… 정도로..)
다른 미덕은 아주 간단한 예제 하나로 UVM에서 사용되는 주요 구성요소를 한번 후루룩 보여준다는 점, 그리고 깊이 들어가지는 않지만 코드를 전반적으로 문단별로 설명해서 어떤 동작을 하는지 설명해 주는 점 역시 장점으로 생각하고 있습니다.

따라서, SystemVerilog는 대충 알지만, 내일부터 UVM을 써야 하는데 어디서부터 해야 할지 모르겠다는 생각이 든다면, 이 책이 시작점 정도는 될 수 있습니다.

단점은 중요한 개념들 중에 몇 가지가 좀 많이 빠져 있습니다. 사실 두께로 봤을 때 당연히 많은 내용이 생략될 수 밖에 없으며, 이런 것들은 나중에 reference manual을 보면 될 것으로 생각합니다. 다만, port/export 관계 같은 건 제대로 설명하는게 좋지 않았을까 싶습니다.

사실 책을 읽으면서 이것 저것에 대한 배경 지식이 없어도 내가 이걸 쉽게 이해할 수 있었을까… 라는 생각도 듭니다. 아마도 Verilab의 교육 프로그램의 교재로 사용되면서 강사가 중간 중간 개념을 설명해주는 경우라면 문제가 없을 것이지만, 아닌 경우에는 약간 혼란스러울 수 있었을 것 같습니다.

하지만, 대충 article 하나 정도의 두께(뒷 부분은 소스코드로 장수를 채운거라.. 실제 내용은 대충 70 page 남짓)로 대략적인 개념을 훓은 건 잘했다고 봅니다.

권장대상: SystemVerilog는 알지만 UVM은 처음이고, “내일”부터 뭔가 해 볼 예정인 사람.

비권장 대상: 논리적으로 이야기가 명확히 통해야하고, 중간 중간 설명이 생략된 상태에서 그냥 따라하라고 하면 화딱지가 나는 사람.

참고로, verilab에 가면 이 책에서 사용된 예제의 source를 받을 수 있네요. 참고하시면 될 것 같습니다.

은하영웅전설과 BTL

지난 몇달간의 독서로그를 요약하자면 은하영웅 전설과 BTL을 본 기간이라 요약하고 싶다.

 

1. 은하영웅전설

이 책은 기억이 흐릿하지만, 93년에 권우 방에서인가 은하영웅전설을 읽었던 기억이 있다. 아마도 휴가나와서 보지 않았나 싶다. 이 책을 다시 읽기 전까지 가장 기억에 남는 것은 화려한 전투 장면이 아닌 민주주의와 전제주의에 대한 부분이었다. 특히 우민주의로 변질되어버린 민주주의와 매우 훌륭한 독재자가 존재하는 전제주의 사이에 대한 이야기에 대한 나름 심도 있는 이야기가 가장 기억에 남았다.

작년말쯤에 이책을 사고,  3월쯤부터 읽기 시작한건 작년의 일이 나에게는 조금 아팠기 때문일지도 모르겠다.

여하튼, 새로 읽은 은하영웅전설은 여전히 재미있고 화려한 SF의 가면을 쓴 정치 소설이었다. 안 읽어본 모든 분들께 권장..

이전에 읽어보지 못했던 외전은 자잘한 이야기를 채워준다는 점도 즐거웠다.

 

2.

테크니컬 리더 : 혁신, 동기부여, 조직화를 통한 문제 해결 리더십

솔직히 이야기하자.

이전에 읽었던 와인버그의 “AYLO: 대체 뭐가 문제야?” 라는 책에 살짝 실망한 면이 없어지않아서, 이책을 같은 시기에 샀음에도 주저했다. 하지만, 읽기 시작하면서 부터 그런생각은 씼은듯 날라갔다.

짧은 시간이지만, 올해 읽은 책 중에서 최고의 책을 하나 꼽으라면 나는 이책을 선택하겠다.

일단 책이 재미있다. 그리고, 나에게 부족한 수많은 것들을 찾을 수 있었다. 물론, 책을 읽었다고 그게 내것이 된다면 그것보다 행복한 일은 없겠지만, 일단 나에게 부족한 것들을 느낄 수 있었다는 것만으로도 큰 도움이 되었다.

엔지니어로 코드와 로직만 보고 살다가 어느날 갑자기 Technical Leader라는 직책을 같이 수행하게 된 많은 사람들에게 읽어보길 권하고 싶다.

3.

세계대전 Z

사놓기는 한참전에 샀는데(뉴로맨서를 살때 같이샀다..), 나름 장르를 돌아가면서 읽는다는 지론(사실 한 종류만 읽다보면 좀 지루해져서…) 때문에 이제서야 봤다.

읽고 있는 도중에 지하철에 월드워 Z라는 영화의 광고가 있었는데, 이게 그 영화의 원작인지는 모르고 있었다는 것이 함정…

여하튼, 초반에는 인터뷰 형식의 책 내용이 약간 지루했는데, 읽다보니 이게 인터뷰인지 그냥 서술인지 깨닿지도 못하고 봤다.

4

그외.. 몇권 더 봤는데.. 머리에 남지는 않는다..라는 건 별로 인상적이지 않았다는 반증이리라..

오히려 새로 읽은 몇권의 만화가 더 머리에 남는다..

5.

그리고 근황..

살았는지 죽었는지는 꾸준히 뭔가 끄적여대는 Facebook과 Google+를 통해서 아실 분은 아실 것이고..

정말 오랜 시간이 걸린 책의 번역이 거의 마무리 되었나보다. 인사이트 출판사의 블로그에 나온걸 보니..

공동 번역이란 형식을 취해본 첫번째 책인데..

사실 많이 힘든 기간 동안 번역을 진행했고(번역을 수락한지 얼마되지 않아서 2팀의 팀장을 같이 맡게 되어서 하루 최대 16시간을 회사에 있던 기간이다.. ),  아쉽게도 그러다보니 주말 동안에 번역을 하게 되었다.

책에 나온 것들 중 대부분의 것을 돌려보지 못했다. 그래서, 아쉽다. 즐거우려고 한 것인다 일에 치이다보니 즐겁지 못했다.

올해 초반에 번역된 것을 리뷰하면서 많은 오류를 발견했다. 즐겁지 않았기 때문일 것이다.. 그래도 읽는 사람에게 부끄럽지 않으려고 노력은 많이 했다만, 과연 마지막 모습이 어떤 모습일지는 궁금하다. 이제 곧 나올 것 같아서 더 궁금하다.

공동번역이라서 편집자님께 고생시켜드린 것도 많고..

이런 저런 것 때문에 사실 건강상의 문제도 발생했다..

고혈압에 이석증… 스트레스와 과로가 원인이란다. (하긴 요즘엔 모든 병이 스트레스와 과로가 원인이란다.. )

이석증은 최근에 생겼는데.. 음.. 솔찮이 귀찮게 만든다. 이젠 심하지는 않은데 아침에 어지럽지 않게 일어난다는 것이 이렇게 고마울 수 있다는 것을 배웠다.