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

 

재미있게 읽었다. 최종 평점은 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도 이 크기)

 

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

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

 

반응형

개발업무를 진행하다 보면 어느 순간에는 데이터베이스를 사용하게 됩니다. 데이터는 애플리케이션의 핵심이니깐요. 어느 정도 규모를 넘어서 데이터를 관리하는 시스템이 별도로 필요할 때 DBMS, 특히 관계형 DB를 먼저 떠올리게 됩니다.

개인적으로는 클라이언트에서만 사용한다면 SQLite, 서버로 이용될 경우에는 Postgresql이나 MS SQL Server를 선호합니다. 특별한 이유는 없습니다. 예전에 제가 공부할 때에는 mysql은 트랜잭션 지원이나 서브쿼리 등이 PostgreSQL에 비해 부실했기 때문입니다.

하지만 역시 오픈소스의 발전 속도는 참 빠르고 거침없습니다. 어느새 MySQL도 트랜잭션이나 고급 쿼리문에 이어 고가용성까지 지원하고 있고, 대용량 서비스에 활용되고 있다는 소식을 쉽게 접하게 되었습니다. 그래서 이번에 mysql을 중심으로 DB에 관한 지식을 재충전할 목적으로 이 책을 읽었습니다.

 

저는 1부와 2부는 설렁설렁 보았습니다. 이미 다른 DBMS를 많이 다뤄보았었기 때문에, mysql의 특이점만 살펴보면서 읽었습니다. DBMS를 처음 공부하시는 분들은 2부가 가장 중요합니다!!! 2부는 기본적인 데이터베이스 설계 및 SQL에 관한 내용을 담고 있습니다. 꽤 상세하게 단계별로 설명하고 있습니다. 웬만한 SQL 기본서적보다 괜찮다고 생각합니다.(현실적인 DB를 가지고 SQL을 설명하고 있어요.)

Learning mySQL.나비책

이 책은 크게 4부분으로 나뉩니다.

 

1부는  주로 설치에 관한 내용입니다. 이 부분은 조금 애매하다고 생각됩니다. 클라우드의 시대라 예전처럼 리눅스 패키지 관리자나 소스에서 컴파일하는 경우는 거의 없을 것 같습니다. 이런 아쉬움은  14장 클라우드 MySQL에서 조금 보완이 됩니다만, 정말 조금입니다. DBaaS내용을 다루는 게 20쪽 정도에 불과합니다. 그만큼 클라우드에서 DB 사용이 쉬운 거라고 생각해야 할까요?

 

2부는 관계형 데이터베이스 기본 내용을 익히는 부분입니다.

기본적인 SQL구문을 sakila DB를 가지고 배우게 됩니다. ER Diagram, 데이터 정규화, 기본 SQL의 DDL, DML 구문들을 mySQL 관점에서 배울 수 있습니다. 그리고 제약사항들이나 조인, 중첩 쿼리등을 배울 수 있습니다. 기본적인 내용이지만, 그래도 처음 찍먹하는 개발자들은 도움이 될 것입니다. 상세히 단계별로 다루고 있습니다.

 

3부와 4부는 운영 관점입니다. 실제 서비스 환경에서 mySQL을 사용할 때 만나게 될만한 시나리오들입니다. 3부는 DBA 관점의  이야기들이 많았던 것 같아요. 물론 트랜잭션 이야기도 있긴 한데, 사용자/권한 관리나 백업 복구, 서버 튜닝에 관한 내용이 담겨 있었어요.

 

4부는 개인적으로 이 책에서 재미있게 읽은 부분입니다.  mySQL을 사용하여 고가용성을 확보하기 위한 여러 가지 방법을 소개를 하고 있습니다. 3부는 DBA관점이라면 4부는 솔루션 아키텍처 관점에서 mySQL 관련 내용을 설명하고 있습니다. 

4부 로드밸런싱과 K8S환경의 클러스터링

이 책은 관계형 DBMS를 처음 접하시거나 MySQL전체 기능을 훑어보고 싶은 분들에게 좋은 All-In-One 서적이라 생각합니다. 수준으로 보면 초급 도서라 생각됩니다.

 

나름 열심히 정리하면서 :-) 공부했어요

 

 

  "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

반응형

+ Recent posts