제목과 번역자 이름만 보고 고민 없이 바로 구매를 한 책이다. 회사 사무실 구석에 몇 주째 방치해놨었는데 지나가던 팀원이 읽고 빌려달라고 해서, 이때다 싶어서 숙제처럼 후딱 읽었다. 제목이 "자바 개발자를 위한 97가지 제안"인데 막상 읽어보니 자바 개발자만을 위한 책은 아니었다.
자바 프로그래밍에 대한 내용뿐만 아니라... JVM, 빌드, 마이크로서비스, 테스트, 데브옵스, 팀 문화, 개발자 성장 등 개발 관련 거의 모든 주제를 다룬다. 좋게 말하면 다양한 내용을 담고 있고, 나쁘게 말하면 아주 잡다한 내용의 책이다. 심지어는 주제별로 카테고리를 나누지도 않았다. 여러 가지로 아쉬움이 남는 책이지만, 자바 개발자는 꼭 읽어보는 것을 추천한다.
이 책은 정말 좋은 다양한 주제의 내용을 담고 있지만, 각각의 주제에 대해서 상세하게 설명해주지 않는다. 즉, 이 책을 읽고 나면, 오히려 기술에 대한 더 큰 갈증을 더 느끼게 된다. 가벼운 마음으로 읽어볼 것을 추천한다.
이 글은 책 내용을 정리한 글이 아니며, 책에 대한 간단한 리뷰를 남기는 서평이다.
내돈내산 리뷰이다. 상세한 내용이 궁금하다면, 책을 직접 구매해서 읽어보길 바란다.
자바 개발자를 위한 좋은 내용이 가득하다. 컬렉션을 제대로 이해하고 사용해야 한다는 내용, Enum 사용에 대한 제안, 널을 피하는 방법 등 기본적이지만 매우 중요한 개발 지식을 소개한다. 또한, 선언적 표현식, 객체지향 프로그래밍 등 흥미로운 주제가 많다. 하지만, 각각의 주제는 상세하게 다루지 않는다. 이 책을 읽고 나면 프로그래밍에 대한 더 큰 갈증을 느끼게 된다.
15. CountDownLatch, 친구인가 적인가?
16. 선언적 표현식은 병렬성으로 가는 지름길이다.
18. 지금 몇 시예요?
20. 변수를 바꾸지 말자
22. 자바 컴포넌트 간의 이벤트
32. 널을 피하는 방법
43. 자바의 불분명한 타입들
47. 은혜로운 flatMap
48. 컬렉션을 제대로 이해하자
63. Optional 은 규칙을 위반하는 모나드지만 좋은 타입니다
64. 기본 한정자를 가진 기능 단위 패키지
71. 불리언 값은 열거자로 리팩터링 하자
73. 단순한 값 객체
97. 젊은 객체, 늙은 객체, 그리고 가비지
아쉬움이 남는 개발자는
"이펙티브 자바"를 읽어보길 바란다.
이 책의 97개의 제안 중, 자바 사용에 대한 부정적인 제안도 있다.
자바는 최선이 아니고, 자바는 더 이상 발전하지 않을 것이라는 주장을 책에서 찾을 수 있다. 대안으로 코틀린을 사용해야 한다고 주장한다. 하지만 실제로 자바는 계속 발전하고 있고, 새로운 자바 기능을 꾸준히 학습해야 한다. 중립적인 입장으로 JVM 환경에서 다양한 목적에 맞게 프로그래밍 언어를 잘 선택하자는 제안도 소개하며, 다양성을 인정해야 한다고 주장한다.
흥미로운 책이다.
자바 개발자를 위한 책이지만, 자바 개발자만을 위한 책은 아니다.
01. 자바만으로도 충분하다
06. JMH로 조금 더 쉽게 벤치마킹해 보자
14. JVM의 동시성
24. 불꽃 그래프를 이용한 성능 확인
29. 가비지 컬렉션은 나의 친구
33. JVM의 크래시를 유발하는 방법
35. 자바는 자바만의 강점이 있다
37. 코틀린과의 상호운영
40. 자바는 90년대생
41. JVM 성능 관점에서의 자바 프로그래밍
42. 자바는 재미있어야 한다
44. JVM 은 멀티패러다임 플랫폼이다
45. 최신 동향을 파악하자
49. 코틀린은 정말 물건이다
53. 새로운 자바 기능을 학습하자
57. 자바를 그루비스럽게
68. 내부를 제대로 들여야 보기
69. 자바는 재탄생
70. 클로저에 의한 JVM의 재발견
79. bin 디렉터리에는 좋은 도구가 너무나 많다
80. 자바 샌드박스를 벗어나자
81. 코 루틴에 대한 고찰
82. 스레드는 인프라스트럭처로 취급해야 한다
해당 책은 76명의 개발자에 의해서 작성된 책이다. 76인의 개발자를 한자리에 모여서 토론하게 하면 재미있을 것 같다. 토론이 잘 될까? 아니면, 싸움이 발생할까? 상상만으로도 흥미롭다.
클린 코드라는 사전적 의미를 정확히 모르겠지만, "클린 코드"라는 카테고리로 정리해봤다. 좋은 소프트웨어를 만들기 위해서 "클린 코드"는 정말 중요한 내용이다. 책에서는 "클린코드" 에 대해서 다양한 제안을 한다. 아쉽지만, 해당 제안들은 모두 한두 페이지로 짧게 끝난다. 자세히 알려주지는 않는다.
03. AsciiDoc으로 자바독 확장하기
05. 행위를 구현하는 것은 쉽지만, 상태를 관리하는 것은 어렵다
30. 이름 짓기를 잘하자.
31. 이봐 프레드, 해시맵 좀 전해 주겠는가?
46. 주석의 종류
50. 관용적인 자바 코드를 학습하고 머릿속에 캐시하자
55. 자바 API를 디자인하는 기술
56. 간결하고 가독성이 좋은 코드
58. 생성자에서는 최소한의 작업만
59. Date라는 이름은 조금 더 명확해야 했다
72. 속독을 위한 리팩토링
74. 모듈 선언에 주의해야 하는 이유
75. 의존성을 잘 관리하자.
76. '관심사 분리'가 중요한 이유
85. 예외를 확인하지 말자
89. 사용자 정의 아이덴티티 어노테이션을 자유롭게 사용하자
95. 주석은 한 문장으로 작성하라
96. 읽기 좋은 코드를 작성하자
아쉬움이 남는 개발자는,
"클린 코드", "리팩토링 1판", "클린 아키텍처"를 꼭 읽어보길 바란다.
테스트는 분명 좋은 소프트프웨어를 위해서 꼭 필요한 과정이다. 97개의 제안 중에서 8개가 테스트 관련 제안이다. 73인의 전문가들은 테스트에 대해서 매우 중요하게 생각한다는 것을 알 수 있다.
02. 확인 테스트
66. 좋은 단위 테스트에 기반한 프로그래밍
78. 테스트 주도 개발
86. 컨테이너로 통합 테스트의 숨겨진 가능성을 끌어내자
87. 퍼즈 테스트의 어마 무시한 효과
88. 커버리지를 이용해 단위 테스트 개선하기
90. 테스트를 이용해 더 나은 소프트웨어를 더 빨리 개발하자
91. 테스트 코드에 객체지향 원리 적용하기
아쉬움이 남는 개발자는
"켄트 백의 테스트 주도 개발", "테스트 주도 개발로 배우는 객체 지향 설계와 실천"을 읽어보면 좋을 것이다. 하지만, 테스트 코드는 쉽게 배우기 어렵다. 직접 작성해보고, 연습하고 꾸준히 노력하는 수밖에 없다. 글로 배울 수 있는 간단한 주제는 아닌 것 같다.
테스트 코드를 잘 작성하는 개발자는 필자에게 과외 좀 해주길 바란다...
JVM 개발자가 아니어도 흥미롭게 읽을 수 있는 내용들이 포함되어 있다. 개발 조직이 어떻게 일해면 좋은지 제안하며, 문제를 어떻게 풀어야 하는지, 소프트웨어를 어떻게 운영해야 하는지 제안한다. 정말 좋은 내용이 많다. 꼭 읽어보길 바란다.
04. 컨테이너를 제대로 이해하자
07. 아키텍처의 품질을 체계화하고 검증하는 방법의 장점
08. 문제와 업무를 더 작은 단위로 나누기
09. 다양성을 인정하는 팀 만들기
10. 빌드는 느려서도 안 되고, 불안정해서도 안 된다.
11. 아니, 내 머신에서는 잘 실행됐다니까!!
12. 비대한 JAR 은 이제 그만
17. 더 나은 소프트웨어를 더 빨리 전달하기
23. 피드백 루프
25. 지루하더라도 표준을 따르자
26. 자주 릴리스하면 위험을 줄일 수 있다
34. 지속적 전달로 반복가능성과 감사가능성 향상하기
38. 일은 끝났어요. 그런데...
52. 레거시 코드를 사랑하는 방법
54. IDE 를 활용해 인지 부하를 줄이는 방법
61. 바뀐 부분만 빌드하고 나머지는 재사용하자
65. 프로덕션 환경은 지구 상에서 가장 행복한 곳이다
84. 마이크로서비스 아키텍처의 트레이드 오프
오프라인 기술 커뮤니티에서 다양한 개발자와 다양한 주제로 대화할 수 있어서 너무 유익하다. 하지만, 코로나 시국에 오프라인 모임은 모두 중지되었다. 온라인 세미나로 전부 대체되었는데, 기술 관련 대화를 나눌 수 있는 기회가 많지 않다. 필자와 같은 아웃사이더는 더더욱 기회가 없다. 그래서, 이 책은 개발 외 다양한 주제에 대해서 다루고 있어서 너무 흥미롭다.
13. 코드 복원전문가
19. 기본 도구의 사용에 충실하자
21. SQL 식 사고 도입하기
27. 퍼즐에서 제품까지
28. '풀스택 엔지니어'는 마음가짐이다.
36. 인라인식 사고
39. 자바 자격증 : 기술 업계의 터치스톤
51. 카타를 하기 위해 학습하고, 카타를 이용해 학습하자
60. 업계의 발전에 기여하는 기술의 필요성
62. 오픈소스 프로젝트는 마법이 아니다
67.OpenJDK 소스 코드를 매일 읽는 이유
77. 기술면접은 학습할 가치가 있는 기술이다
83. 좋은 개발자의 3가지 특성
92. 커뮤니티의 힘을 빌려 경력을 개발하자
93. JCP 프로그램에 대한 이해와 참여 방법
94. 자격증에 가치를 두지 않는 이유
제목 & 번역자만 보고 바로 구매한 책이었는데, 역시 번역이 꽤 괜찮았다. (사실, 개인적인 친분은 없지만 해당 번역자의 책은 거의 항상 구매하는 편이다.) 좋은 원서는 너무 많지만, 좋은 번역서는 찾아보기 힘들다. 가끔은, 번역이 그지 같을 때 차라리 원서를 읽는 것이 더 이해가 잘 되는 경우도 있다. 하지만, 필자처럼 영어를 더럽게 못하는 사람 입장에서는 원서를 읽는 것도 쉽지 않은 일이다. 그래서, 이런 좋은 번역서는 정말 환영할 일이다. 이 책은 원서 내용 자체도 좋지만, 번역이 너무 깔끔해서 필자에게는 너무 좋은 책이었다. 비록, 각각의 제안들의 깊이가 없어서 아쉬움과 갈증을 느끼게 만들었지만, 다양한 관점에서 기술을 이해할 수 있어서 좋았던 책이다.
아무튼,
자바 개발자는 꼭 한번 읽어보길 바란다.
단,
특정 프로그래밍 언어만 사용하도록 주변에 강요하고 다른 개발자를 개무시하는 사람,
주변 개발자의 의견을 수렴하는 것을 절대적으로 싫어하고,
이해심이 전혀 없고 고집이 센 개발자는
이 책을 읽지 않는 것을 추천한다. 읽다 보면 혈압만 오를 수 있다. 읽더라도 잘 걸러서 읽기를 바란다.
다시 한번 더 말하지만, 자바 개발자만을 위한 책은 아니다.
책의 서문을 인용하면서 서평을 마무리하겠다.
알아야 할 것도, 해야 할 것도, 그 일을 수행하는 방법도 너무 많기에 어느 한 사람이나 하나의 논리도 '하나의 정답'을 주장할 수는 없다. 각기 다른 저자의 이야기는 반드시 일맥상통하지 않으며, 그럴 의도도 없다. 오히려 그 반대다. 저마다의 이야기는 그 독창성에 가치가 있다. 이 모음집의 가치는 각각의 저자가 자기 생각을 보완하고 확인하며 때로는 다른 저자의 생각에 반박하는 것에 있다. 누군가의 생각이 특별히 더 중요한 것도 아니다. 읽어본 내용에 반응하고, 서로 연관 짓고, 자기 생각과 지식, 경험에 기반해 어느 것에 더 무게를 둘 것인지는 오로지 독자 여러분에게 달렸다. - 자바 개발자를 위한 97가지 제안"