프로그래밍의 규칙/한빛미디어

 

재미있게 읽었다. 최종 평점은 5점 만점에 4점.서커펀치사의 고민과 해결방안으로써의 규칙을 통해 더 나은 개발 방법을 되돌아볼 수 있는 계기가 되었다. 일종의 서커펀치 게임 개발사의 모범사례(Best Practice) 모음집인 셈이다. 번역은 나쁘지는 않았다. 군데군데 좀 더 매끄러운 표현이 떠오르긴 했지만, 맥락을 이해하지 못할 정도는 아니었다. 역자분이 게임 업계의 경험이 있었다면 더 좋지 않았을까 하고 생각했다. 아주 획기적인 발상의 전환을 제공해준다거나 새로운 고민을 던져 주지는 않지만, 생각의 파편을 정리해 가면서 나만의 생각, 팀만의 생각을 만들어 갈 수 있는 좋은 텍스트북이라 생각된다. 

 

어쩌다 보니 최근 읽은 책들이 코드 리팩토링에 관한 내용을 많이 다루고 있다. 반쯤 읽다가 이 책 때문에 멈춘 길벗의  <읽기쉬운 코드>도 비슷한 내용이 겹친다. 상호 보완되는 측면이 있는데... 개인적으로는 C++을 예제로 삼은 '프로그래밍의 규칙'이 C#을 예제로 삼은 '읽기쉬운 코드'에 비해 좀 더 많이 와 닿은 측면도 있다.(하지만 일부에서는 Modern C++ 이후 해결방안이 나왔는데도 불구하고 예전 방식이 소개되어서 살짝 아쉽긴 했다. 역주라도 달렸으면 좋았을텐데.. 예를 들어 c++에는 선택적 인수가 없다고 적혀있는데 C++17부터는  std::optional을 통해  인수가 '존재하지 않음'을 표시해 줄 수 있다.) 다시 '읽기 쉬운 코드'로 복귀해서 읽어볼 생각이다.

 

차례를 다시 보니 순서대로 읽어도 되지만,  문제에 대한 이해 및 (저자의) 개선 방법, 코드 리뷰와 코드 문서화, 디버깅, 개발자의 편향성과 극복 방안으로 나눠서 읽어볼 수 있겠다. 물론 겹치는 영역도 많고, 임의로 내가 구분해 본 것이니, 참조만 하시고~.

문제를 바라보는 관점 규칙 1 최대한 단순하게, 그러나 너무 단순하지 않게
규칙 4 일반화에는 세 가지 사례가 필요하다
규칙 5 첫 번째 최적화 교훈: 최적화하지 말라
규칙 8 실행되지 않는 코드는 작동하지 않는다
규칙 10 복잡성을 격리하라
규칙 14 네 가지 맛의 코드
규칙 16 코드가 아닌 결과에서부터 작업하라
규칙 17 더 쉽게 해결되는 큰 문제도 더러 있다
코드 리뷰와 문서화 규칙 3 좋은 이름은 최고의 문서다
규칙 6 코드 리뷰의 세 가지 장점
규칙 9 요약 가능한 코드를 작성하라
규칙 12 큰 팀에는 강력한 컨벤션이 필요하다
규칙 18 코드가 스스로 이야기하게 하라
디버깅 규칙 2 버그는 전염된다
규칙 7 실패 케이스를 제거하라
규칙 13 산사태를 일으킨 조약돌을 찾으라
규칙 15 잡초를 뽑으라
규칙 19 평행 재작업
개발자의 편향성 규칙 11 두 배 좋은가
규칙 20 계산하라
규칙 21 때로는 못질을 해야 한다

 

 

내용들 하나하나가 재미있는 생각거리를 던져주었는데, 에필로그의 한 문단이 와 닿았다.

 

코드를 어떻게 작성할 지에 대한 아이디어를 정리했다면 팀은 훨씬 더 효율적으로 일할 수 있을 것... 규칙은 여러분의 논의를 구조적으로 만들어 주며, 코드를 어떻게 작성할 지에 관한 합의에 이르는 프레임워크를 제공할 수있다.
....
여러분이 하는 일이 서커펀치의 프로젝트와 성격이 많이 다르다면 어떤 규칙은 잘 맞지 않을 수 있다. 그렇다면 규칙을 따르지 마라. 교리가 아니라 유용한 규칙일 뿐이다. 하지만 수용하기 어렵더라도 규칙이 잘 맞을 가능성이 있다.

 

맞는 말이다. 모두 각각의 상황과 문제가 있으니, 최적의 답을 찾아가는 과정은 달라질 수 있다. 하지만 자신에게 불편함을 무의식적으로 피하는 개인들, 특히 개발자들의 편향을 인지하고, 그에 따라 유용성을 판단하여 수용 여부를 결정해야 한다.

대체로 저자의 주장에 공감하는 편인데. 특히 '너무 엄격하게 문제의 정의에 갇히지 말고, 오히려 문제를 단순화하면 솔루션을 단순화할 수 있다'거나 '코드에 기교를 부릴 수록 컴파일러는 우리가 의도하는 바를 알아내기 어렵다' 등의 문구에는 적극적으로 찬성할 수 밖에 없었다.

 

이 책은 팀의 문화를 만들어 가고 싶은 중니어 이상의 개발자 또는 팀장이라면 비판적인 시선을 가지고 읽어보면 좋은 내용이 많다. 

 

최근 한빛에서 나오는 몇몇 책들이 손에 쥐기 쉬운 크기로 나오는데, 개인적으로 마음에 든다. (Tidy First도 이 크기)

 

밑줄 친 문구들이 꽤 있지만, 몇개만 넘겨가면서 소개하면 다음과 같다.

  • 미래의 자신은 타인과 다를 바 없다.
  • 세상 모든 일이 그렇듯이 최고의 결과는 균형에서 비롯된다.... 불확실성에 대한 반응으로 자기 자신에게 편안한 결정을 내린다면 앞으로도 매번 같은 선택을 할 위험이 있다.
  • 로그 파일은 단순히 어떤 일이 있었는지만 기록하는 것이 아니라 해당 문제를 재현하는데 필요한 모든 데이터를 ㄷ담고 있어야 한다.
  • (훌륭한 프로그래머는 쉬운 문제든 어려운 문제든 쉽게 푼다.) 단순한 솔루션을 유지하는 스펙트럼이 얼마나 더 넓은가로 프로그래머의 수준을 평가할 수 있다. 훌륭한 프로그래머의 핵심 역량은 어려워 보이는 문제를 올바른 관점에서 바라보면 사실은 쉽다는 사실을 인식하는 능력이다.
  • 프로그래머는 대개 문제를 프로그래밍으로 해결하려는 편향이 있으나, 프로그래밍이 모든 문제의 올바른 해결책인 것은 아니다.
  • 대부분의 프로그래머는 장기적 이점보다 단기적 비용을 우선시하는 경향이 있고, 그래서 나중에 후회하는 경우가 많다. 올바른 문제 해결책을 알고있지만 작업량 때문에 주저하고 있다면 용기를 내서 작업을 진행하자.

 

반응형
 
1/ 고등학교때 배웠던 기억... 나무 아미타 불 관세음 보살. 나무는 귀의를 의미하는 산스크리트어.. 즉, 아미타불과 관세음보살님에게 귀의하겠다는 주문(주기도문)이다. (남묘호량교(SGI)의 남 역시 나무의 일본식 발음이고, 묘법연화경(일본 발음 묘호렌게쿄)에 귀의하겠다는 일본 불교의 한 종파) 왜 국어시간에 배웠을까? 고문 수업이었나?

 

2/ 이번에 알게 된 사실은 관세음(觀世音)보살의 뜻. 세상의 소리를 본다는 뜻이란다. 즉 중생의 소원을 듣고 그것을 풀어주는 보살인 셈인데.. 재미있는 것은 소리를 듣는 것이 아니고 본다(觀)는 동사를 사용했다는 점이다. 왜 본다라고 했을까?
 
3/ 좀 놀라운 사실은 반야심경의 '마하반야 바라밀다 심경 관자재보살 행심반야바라밀다시..'라는 첫구절에 나오는 관자재보살이 관세음보살의 다른 이름이란다. 때로는 관세음에서 세를 떼어버리고 관음보살이라고 한다. 아! 그래서 천수관음상이었구나 하면서.. 중생들의 바램을 들어주기 위해 손이 그렇게 많았구나 하는 생각이 들었다.(4주 군사훈련 2주차에 따라갔던 불교행사에서 3시간 동안 다른 할일이 없어서 반야심경을 듣고 외웠었는데, 지금도 드문드문 생각이 난다.)
 
4/ 전국 4대 관음사찰은 강원도 낙산사 홍련암, 남해 금산 보리암, 강화도 보문암, 여수 금오산 항일암. 관음을 모시는 곳은 전부 사찰이 아니라 암자. 사찰, 암자, 가람, 정사 모두 사찰을 일컫는 말. 낙산사와 보문암을 한번 가봐야겠다.
 
5/ 현대 불교에서 풍기는 자본주의의 향기.. 소원을 비는 초 하나가 1만원. 절 곳곳에 '하나의 소원은 이루어주신다'라는 문구.. 깨달음과 해탈의 불교신앙이 결국은 세속화되면서 기복신앙이 되었구나라는 생각도 들다가, 요즘 인생사 힘듦을 덜어주는 것도 종교의 역할중 하나가 아닐까 하는 생각도 들었다.
 
6/나의 소원은 내 소원 10개를 들어주는 관세음보살이 있으면 좋겠다.... 카피카피룸룸...
 
 
 
 
작년 여수로의 워크샵 일정에서 얻었던 생각을 페북에 적어두었다가 옮겨적어본다.

 

 

23년 7월 중순. 회사 워크샵으로 방문한 여수 향일암

반응형

'0.잡담' 카테고리의 다른 글

내 마음대로 AI 책 추천  (0) 2024.01.26
[뻘짓] 대항마~  (0) 2023.06.09
환구단 - 웨스틴 조선 호텔에서 우연히 만난 역사  (0) 2023.04.06
일상 - 남해 당일 치기  (0) 2023.04.03
2023년 2월 제주의 풍경  (0) 2023.02.12

+ Recent posts