인트로


두 번째 기술서 서평이다. 지난 <처음 만난 자바스크립트>에 이어 역시 자바스크립트 책이다. 최근 내가 속한 CODEF에서 프론트엔드 개발을 하고 있고, 생각 보다 보면 볼수록 자바스크립트가 간단한 언어가 아니란 것을 알게 됐다. 괜찮은 입문서로 많은 추천을 받은 <러닝 자바스크립트>를 선택했다.

결과부터 말하면, 2017년 7월 출판한 책이기에 다소 오래된 지식이 있었다. 가볍게 훑어보고, 중요한 부분을 다시 보는 전략을 펼치려 했다. 하지만 생각보다 내용이 괜찮다고 느꼈고, 그렇게 정독하게 됐다. 종종 내용을 페이스북에 공유했고, 많은 관심을 받았다. 그렇게 이 책의 문제가 드러났다.

몇몇 시니어가 현재 자바스크립트와 책 속 자바스크립트와 다른 부분을 댓글로 알려줬다. 이는 시간이 흘러 보완이 된 부분이기도 했고, 원래 잘못 기록된 부분이기도 했다. 덕분에 책을 절반가량 읽은 지금, 책 읽기를 중단할 수밖에 없었다. 아무리 좋은 책이어도 지난 지식이며, 오류가 있는 지식을 계속 볼 이유는 없었다.

그럼에도 <러닝 자바스크립트>는 내게 많은 지식을 줬다. 세세한 부분은 변경이 있었지만, 자바스크립트 큰 뼈대는 3년 사이 크게 바뀌지 않았다. 때문에 가볍게 기초를 훑어보려는 이에겐 나쁘지 않은 선택이 될 수 있다.

어쨌든, 내가 읽은 두 번째 기술서이자, 두 번째 자바스크립트 책을 소개한다. 아, 이 책은 CODEF 동료 개발자가 추천하면서 빌려준 책이다. 감사 동키.

http://ohseyong.com/?p=2285

서평


지난 <처음 만난 자바스크립트> 책을 리뷰하며 나름의 기술서 서평 포맷을 만들었다. 크게 불편하다는 피드백을 받지 않았기에, 지난 달 정해둔 포맷대로 서평을 적어본다.

1. 이 책을 읽고 뭐가 나아졌나?

<러닝 자바스크립트>는 내용을 꽤 상세하게 다룬다. 예를 들면, null과 undefined는 어떻게 다른지, for 루프 패턴은 얼마나 다양한지, typeof 연산자는 어떻게 활용할 수 있는지 등. 평소 단순한 코딩을 선호하는 내게 꽤 다양한 선택지를 제공했다.

나는 어느새 8년 차 개발자지만, 기술적 깊이를 더하는 것을 선호하진 않았다. 간단한 if 문과 for 문으로 대부분의 코드를 짜는 비즈니스 로직이 주 업무였기 때문에 큰 어려움을 겪진 않았다. 지금까진 그랬다.

하지만 연차가 쌓이고, 솔루션 회사에 입사해 퍼포먼스도 신경 써야 할 시간이 됐다. 또한, 마냥 더 나은 코드를 위한 시간을 부여받을 수도 없게 됐다. 우리는 평생 숨을 쉬지만, 숨 쉬는 기술이 더 나아지지는 않듯, 신경 쓰지 않으면 결코 기술이 더 나아지지 않는 것을 알아야 한다. 언제까지 그저 그런 개발자로 살 순 없었다. 때문에 러닝 자바스크립트에서 소개하는 다양한 코딩 기법이 눈에 들어왔다.

이 책을 읽고 나는 더 나은 코딩에 내가 관심이 있음을, 또한 관심을 둬야 함을 알게 됐다. 더 나은 개발자가 되는 것은 분명히 가치가 있다는 것을 명확히 인지하게 됐다. 늘 그렇지만, 현재를 인지하는 것이 성장의 시작이다.

2. 실무에 당장 적용할 수 있었던 파트는 어디인가?

ES6를 사용하면서 처음 만난 장벽은 화살표 함수였다. 도대체 이 표기법은 왜 만들었는지, 왜 나를 불편하게 하는지 이해가 되지 않았다. 함께 일하는 동료 개발자는 익숙해지면 즐겨 사용할 거라 했지만, 익숙하지 않은 표현식이 계속 불편했다.

<러닝 자바스크립트>에서 ES6를 계속 소개한다. 다양한 화살표 함수를 따라서 타이핑하고, 눈으로 계속 보다 보니 꽤 익숙해졌다. 동료 개발자 말처럼 익숙해지니 화살표 함수의 장점도 이해하게 됐다. 같은 기능을 단축해 사용할 수 있다면, 사용하지 않을 이유가 없다.

const f1 = function() { return "hello!"; }
// 또는
const f1 = () => "hello!";
const f2 = function(name) { return `Hello, ${name}!`; }
// 또는
const f2 = name => `Hello, ${name}!`;
const f3 = function(a, b) { return a + b };
// 또는
const f3 = (a, b) => a + b;

간단한 어드민 페이지를 업무로 개발하고 있었는데, 동료가 사용한 화살표 함수를 이해할 수 있게 됐고, 나 역시 서툴지만, 화살표 함수를 사용할 수 있게 됐다. 이게 도화선이 돼 다른 ES6 기법도 하나, 둘 익히게 됐다.

3. 놀랍지만, 전혀 안 쓸 것 같은 파트는 어디인가?

for 루프는 생각보다 다양하게 사용될 수 있었다. <러닝 자바스크립트>에 나오는 for 루프는 무척 다양했고, 도대체 이렇게까지 for 루프를 사용해나 할 정도로 의문이 들었다. 그래서 SNS에 공유도 했다.

let i = 0;
for(; i < bigArrayOfNumbers.length; i++) {
   if(isPrime(bigArrayOfNumbers[i])) break;
}
if(i === bigArrayOfNumbers.length) console.log('No prime numbers!');
else console.log(`First prime number found at position ${i}`);

주변 개발자들은 못생긴 for 루프를 보며, ‘나는 그렇게 안 쓸 것 같다’ 등 나와 비슷한 의견을 보였다. 굳이 for 루프를 못생기게 만들면서 쓸 이유는 없다. 이런 것도 가능한 것을 이해했지만, 나는 안 쓸 것 같다.

4. 불편했던 파트는 어디인가? (오탈자 등)

크게 불편한 부분은 없었다. 다만, 내가 자바스크립트 지식이 깊었다면, 불편할 부분이 꽤 있었을 것 같다.

앞서 말했듯, 몇몇 시니어 개발자는 SNS에서 책의 오류를 짚어줬다. 짚어진 오류가 시간이 흐르며 오류가 된 것도 있지만, 그렇지 않은 것도 있는 듯했다. 자세한 내용은 나도 공부하는 과정이기에 자신 있게 어느 부분이다 말할 순 없다.

굳이 내가 느낀 불편함을 꼽자면, 너무 자세하게 풀어낸 것이다. 이는 내 취향이니, 내가 적절히 원하는 부분까지만 읽으면 되겠다.

5. 이 책을 누구에게 추천하고 싶은가?

처음 언어를 자바스크립트로 배우는 주니어에게 추천하고 싶다. 단, 깊이 보지는 말고, 대략적인 그림을 파악하는데 적절한 책이다.

대부분의 언어는 변수와 클래스, 조건문, 반복문 등이 있다. 나는 자바 개발로 시작했고, 학부 시절 C언어와 PHP 등을 배웠다. 필드에서 파이썬 등을 가볍게 익혔지만, 간단한 비즈니스 로직을 다루는 개발자까지는 앞서 말한 변수, 클래스, 조건문, 반복문 등을 알면 큰 어려움은 없다.

이런 측면에서, 자바스크립트의 기본기를 다지는 데 나쁘지 않은 선택이 되겠다. 나는 자바를 알기 때문에 자바와 다른 부분을 비교하는 방식으로 책을 읽었다. 다른 언어를 아는 개발자라면, 역시 비교를 하며 읽는 게 좋은 학습법이 되겠다.

단, 계속 말했듯 본문 내 이미 개선된 오류가 남아있을 수 있다. 이는 MDN이나 스택오버플로 등을 활용하며 적절히 걸러야겠다.

총평


앞서 첫 기술서인 <처음 만나는 자바스크립트>에서 말했듯, 첫 도서 이후 나는 많은 것을 얻게 됐다. 그리고 두 번째 도서 역시 많은 것을 얻을 수 있었다.

두 번째 기술서는 다소 시간이 흐른 책이 갖는 아쉬움을 느낄 수 있었다. 자바스크립트는 인기 있는 기술이고, 인기 있는 기술은 빠르게 발전한다. 때문에 오프라인 서적으로 나오는 시점에는 많은 부분이 개선될 수 있다. 그래서 온라인 콘텐츠를 찾는 능력이 개발자에게 중요한 것이다.

하지만 시간이 흘렀음에도 변하지 않는 부분은 어느 부분인지, 변한다면 어떤 부분이 변하는지 등을 이 책을 통해 알 수 있었다. 역시 도전은 많은 경험치를 남긴다.

다음 도서는 되도록 최신 도서로 선택해보련다.