Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.

[Book] 유시민의 글쓰기 특강

블로그에 글을 오랫동안 썼지만 글쓰기를 제대로 배우거나 어렸을 때부터 글쓰기에 관심을 가졌거나 했던 건 아니다. 그냥 오랫동안 글을 쓰거나 번역을 하면서 조금씩 어색하다고 느낀 부분을 고치면서 글을 썼고 글쓰기에 관한 공부라고는 오래전 번역의 탄생을 보고 어떤 한국어가 자연스러운가 정도를 배우고 몇 년 전 책을 쓰면서 좋은 글에 대해서 많이 고민했던 것이 전부이다.

글을 쓰는 게 업은 아니므로 너무 많은 노력은 들이지 않으려고(그렇지 않아도 할게. 산더미인데!) 하고 있어서 글을 쓸 때도 많은 퇴고를 거치지는 않는다. 그냥 설명한 내용이랑 흐름을 어느 정도 생각하고 쓰면서 어색한 부분만 수정하고는 맞춤법 정도를 교정하고 나면 발행을 한다. 그래서 아직 발행 안 한 글을 쌓아두고 있거나 하진 않은 편이다. IT나 개발 관련 책만 보다가 좀 다른 책을 볼까 하고 구매해 논 책을 보다가 눈에 띈 게 이 책이다. 이 책의 이름은 많이 듣기도 했고 글을 많이 쓰고 하다 보니 한번 읽어보자는 생각으로 책을 펼쳤다.

이 책은 좋은 글을 쓰는 실용적인 팁을 알려주는 책은 아니다.(물론 약간은 포함되어 있다.) 번역의 탄생을 볼 때는 구체적으로 "어떤 문장이 좋지 않으므로 어떻게 써야 한다"같은 류의 내용이 가득했기 때문에 하나하나 맘에 새겨두고 글을 쓸 때 주의하면서 쓸 수 있었고 바로 써먹을 수 있었지만, 이 책은 그보다는 더 장기적인 내용 혹은 포괄적인 내용을 다루고 있다. 책의 표현을 빌리자면 글쓰기 근육을 단련하는 방법을 설명하는 책이다. 그냥 퉁쳐서 말을 하자면 글을 잘 쓰려면 좋은 글을 많이 읽고 많이 써봐야 하는데 몸의 근육처럼 단기간에 습득되는 것이 아니라 오랫동안 노력해서 글쓰기 근육이 생겨야 한다는 것이다. 그 과정을 위해서 어떻게 해야 하는지 어떤 부분을 신경 쓰면 더 좋은지를 설명하고 있다.

첫째, 많이 읽어야 잘 쓸 수 있다. 책을 많이 읽어도 글을 잘 쓰지 못할 수는 있다. 그러나 많이 읽지 않고도 잘 쓰는 것은 불가능하다.
둘째, 많이 쓸수록 더 잘 쓰게 된다. 축구나 수영이 그런 것처럼 글도 근육이 있어야 쓴다. 글쓰기 근육을 만드는 유일한 방법은 쓰는 것이다. 여기에 예외는 없다. 그래서 '철칙'이다.

책의 초반에 유시민 작가가 자신도 글을 잘 쓰는 사람이 아니고 그냥 많이 쓰다 보니 글을 쓰는 게 직업이 되었다는 얘기가 나온다. 그렇게 오랫동안 잘 쓴다는 소리를 듣지만, 자신의 글이 좋다는 확신은 없다고 하는데 (유시민 작가와 비할 바는 아니지만) 나도 글을 많이 노출하다 보니 가끔 그런 얘기를 들어서 동감이 꽤 됐다. 그냥 많이 썼을 뿐이지 잘 썼는지는 모르겠다.

어쨌든 유시민 작가가 문학 글쓰기를 하는 사람이 아니라 어떤 논증이나 사설 같은 글을 많이 쓰므로 기술 관련 글을 쓰는 나한테는 도움이 되는 내용이 꽤 있었다. 팁처럼 바로 써먹을 수는 없더라도 곱씹어 볼수록 도움이 될 내용이 많이 담겨있다.

첫째, 취향 고백과 주장을 구별한다.
둘째, 주장은 반드시 논증한다.
셋째, 처음부터 끝까지 주제에 집중한다.
이 세 가지 규칙을 잘 따르기만 해도 어느 정도 수준 높은 글을 쓸 수 있다.

블로그에 글을 오래 썼지만 대부분 기술 소개나 코드 동작을 설명하는 글이므로 딱히 어려운 글은 아니라고 생각한다. 내 생각은 아주 간단히만 들어가고 대부분은 코드나 문제의 실행 절차에 따라 설명을 건조하게 넣을 뿐이다. 그 외에 서비스나 어떤 트랜드에 대한 글도 써보려고 여러 번 노력하고 그중에 몇 가지는 실제로 쓰기도 했지만, 이전 글과는 성격이 많이 달라서 꽤 어려웠다. 글을 쓰려고 내용을 정리하다가 결국 내 생각이 꼬여서 다 쓰지 못하고 지운 글도 있고 생각은 머릿속에 있는데 글로 쓰려니 정리 안 된 경우도 많았다.

첫째, 무슨 이야기를 하는지 주제가 분명해야 한다.
둘째, 그 주제를 다루는 데 꼭 필요한 사실과 중요한 정보를 담아야 한다.
셋째, 그 사실과 정보 사이에 어떤 관계가 있는지 분명하게 나타내야 한다.
넷째, 주제와 정보와 논리를 적절한 어휘와 문장으로 표현해야 한다.

효과적으로 논증하면 생각이 달라도 소통할 수 있고 남의 생각을 바꿀 수 있으며 내 생각이 달라지기도 한다.

글을 쓸 때는 주제에 집중해야 한다. 엉뚱한 곳으로 가지 말아야 하고 관련 없는 문제나 정보를 끌어들이지 않아야 한다. 원래 쓰려고 했던 이유, 애초에 하려고 했던 이야기가 무엇인지 잊지 말고 처음부터 끝까지 직선으로 논리를 밀고 가야 한다. 이것이 논증의 미학을 실현하는 세 번째 규칙이다.

그런 부분에서 논증하는 글에 대한 설명이 많이 있어서 참고할 내용이 많았다.

문학 글쓰기는 재능의 영향을 많이 받는다. 무언가를 지어내는 상상력, 남들과는 다른 방식으로 느끼는 감수성이 있어야 한다. 그러나 논리 글쓰기는 훨씬 덜하다. 조금 부풀리면 이렇게 말할 수 있다. 문학 글쓰기는 아무나 할 수 없다. 그러나 논리 글쓰기는 누구나 할 수 있다.

이 책을 보고 내가 읽는 글이(독서량이 많지는 않지만) 너무 IT 쪽에만 치중되어 있어서 이 부분은 반성을 좀 하게 되었다. 중간에 도움이 될만한 책 추천 등이 나오는 게 그중에서 내가 읽어본 책은 별로 없었다. 내가 읽는 글은 대부분 인터넷에 올라온 아티클이나 번역서로 나온 것이 대부분이므로 내가 쓰는 글도 영어나 일본어식 번역체 문장 구조 등을 가지고 있는 것도 어쩔 수 없겠다는 생각이 들었다. 내가 읽어볼 때도 이상하다는 느낌을 많이 받지 못하니까...

독서량이 늘어 아는 게 많아지고 생각이 깊어져야 텍스트를 읽는 속도가 빨라지고 비판적·창의적으로 독해할 능력이 생긴다. 글을 잘 쓰려면 먼저 높은 수준의 독해 능력을 길러야 한다.

못난 글을 쓰지 않으려면 흉한 문장을 알아보는 감각과 면역력이 있어야 한다.

물론 글쓰기를 위해서 관심 없는 책을 읽기도 쉽지 않으므로 이 문제를 해결하기 위해서 내가 취할 수 있는 방법을 고민을 해봐야 할 것 같다.

긴 글보다는 짧은 글쓰기가 어렵다. 짧은 글을 쓰려면 정보와 논리를 압축하는 법을 알아야 하기 때문이다. 가장 중요한 압축 기술은 두 가지다.
첫째, 문장을 되도록 짧고 간단하게 쓴다.
둘째, 군더더기를 없앤다.

군더더기를 없애는 것이다. 문장의 군더더기란 무엇이며 군더더기인지 아닌지 어떻게 알 수 있을까? 간단하다. 없애버려도 뜻을 전하는 데 큰 지장이 없으면 군더더기다. 문장의 군더더기는 크게 세 가지다. 첫째는 접속사(문장부사), 둘째는 형용사와 부사, 셋째는 여러 단어로 이루어져 있지만 형용사나 부사와 비슷한 역할을 하는 문장 요소다. 굳이 없어도 좋은 접속사는 과감하게 삭제해야 한다. 단문으로 글을 이어나갈 때 문장 사이에 매번 ‘그러나’ ‘그리고’ ‘그러므로’ ‘그런데’ ‘그렇지만’ 같은 접속사를 넣는 것은 나쁜 습관이다.

멋진 문장을 구사한다고 해서 글을 잘 쓰는 게 아니다. 읽는 사람이 글쓴이의 마음과 생각을 느끼고 이해하고 공감할 수 있게 써야 잘 쓰는 것이다. 그렇게 하려면 표현할 가치가 있는 그 무엇을 내면에 쌓아야 하고, 그것을 실감 나고 정확하게 표현할 수 있는 능력을 갖추어야 한다.

글쓰기 근육 만들기만 얘기하는 것은 아니고 안 좋은 글의 예시를 보여주고 어떻게 고치면 좋은지 어떤 점이 안 좋은지도 책에서는 설명하고 있다.

마지막으로 아래 내용은 나도 종종 빠져들게 돼서 그렇게 하지 않으려고 노력을 해야 하는 터라 공감이 가서 나중에 이글을 다시 볼 때 새겨보려고 남겨둔다.

글 쓰는 사람이 빠지기 쉬운 허영심은 지식과 전문성을 과시하려는 욕망이다. 이 욕망에 사로잡히면 난해한 글을 쓰게 된다.

2016/07/23 22:50 2016/07/23 22:50

npm-check를 이용한 npm 의존성 관리

Node.js로 애플리케이션을 만들면 의존성 모듈을 package.json에 관리하게 되는데 Node.js는 유닉스 철학을 따르므로 패키지를 잘게 쪼개서(이 때문에 얼마 전 패키지가 대규모로 깨지는 문제가 있었지만... 애플리케이션이 커지면 금세 package.json에서 관리하는 의존성 목록도 많아지게 된다.

토이프로젝트가 아니라면 버전 범위를 구체적으로 지정하게 되므로 금세 구 버전이 되고 새 버전에서 충돌이 날 수도 있으므로 자주 업데이트 못 하고 금방 레거시가 되게 된다.

npm outdated

많은 의존성 모듈에서 새로운 버전이 나오는 모듈을 일일이 확인하기 어려운데 npm outdated 명령어를 사용하면 의존성 모듈 중에 업데이트가 필요한 모듈을 확인할 수 있다.

npm outdated를 실행한 화면

위처럼 업데이트가 필요한 모듈만 정리되어 나온다. "Current"는 현재 설치된 버전이고 "Wanted"는 package.json에 지정한 버전 범위로 설치되는 최대 범위를 의미한다. 즉, npm update를 실행하면 설치되는 버전이다. "Latest"는 모듈의 최신 버전이다. 위 화면에서는 "Wanted"와 "Latest"가 같은 모듈이 빨간색으로 표시되었고 "Latest"가 "Wanted"보다 높은 모듈은 구별할 수 있게 노란색으로 표시되었다.

여기서 확인을 한 뒤에 일일이 원하는 모듈을 업데이트해도 되지만 꽤 귀찮은 일이다.

npm-check

npm-check는 의존성 관리의 불편함을 덜어주는 cli 모듈로 npm install -g npm-check를 이용해서 전역으로 설치하면 사용할 수 있다.

npm-check를 실행한 화면

npm-check를 실행하면 npm outdated와 비슷한 정보를 볼 수 있지만, 훨씬 풍부한 정보가 나온다. 자세히 보면 앞에서 본 정보와 똑같은데 각 모듈의 상세내용을 볼 수 있는 링크와 업데이트를 위한 npm 명령어로 안내가 나온다. npm update를 하면 최신 버전이 설치되는 모듈은 "UPDATE!"라고 나오고 지정한 버전 범위가 넘는 최신 버전이 있으면 "NEW VER!"이라고 표시된다.

기본 설정으로 사용하지 않는 모듈까지 확인해 준다. 위에서 보면 debug 모듈을 설치는 했지만 사용하지 않아서 경고가 나왔고 jaderequire()형식으로 사용하지 않고 express에서 선언했으므로 사용하지 않다고 경고가 나왔다. 사용하지 않는 모듈은 확인하고 싶지 않으면 --skip-unused 옵션을 지정하면 된다.

npm-check가 편한 점은 인터랙티브 모드를 지원한다는 점이다. npm-check -u를 입력하면 다음과 같이 모듈을 선택할 수 있는 화면이 나온다.

nom-check -u를 실행한 화면

잘 만들어진 npm 모듈이라면 SemVer를 따르므로 이에 따라 Patch Update, Minor Update, Non-Semver를 구분해서 보여준다. 여기서 커서를 이용해서 원하는 모듈을 선택한 뒤 엔터를 누르면 해당 모듈만 업데이트하게 된다.

선택한 모듈을 설치하는 명령어가 자동으로 입력된다

앞에서 npm outdated로 업데이트할 모듈을 찾아서 업데이트하는 것보다 훨씬 편하게 업데이트할 수 있다. 이렇게 관리를 하면 코드가 깨질 걱정이 없는 패치 버전 업데이트는 자주 업데이트를 할 수 있다.

2016/07/22 23:44 2016/07/22 23:44