아직 Clean Code 내용은 남아있지만, 북클럽은 이걸로 마무리된다. 중간 지점 까지 읽은것 같은데, 남은 내용도 마저 읽고 정리하는 시간을 가지면 좋을것 같다.
어쨋든 마지막 활동이니 여기까지 독후감을 작성해본다.
사실 별다른 생각은 없었다. 당시에는 개발자로 일하기 시작한지 얼마 되지 않았던 시기였는데, 개발자 필독서라는 이야기만 듣고 별 생각없이 "있어보일려고" 동료 몇몇이랑 같이 구매를 했다. 천성적으로 책을 읽는걸 그다지 좋아하지 않는 상황에서 얼마나 무모하고 어리석은 짓이었는지. 그래도 몇년이 지난 지금에서라도 읽기 시작한건 다행인것 같다.
사실 깨끗한 코드는 둘째 치더라도, 기본적으로 코드를 작성할 때 가독성에 대한 생각을 항상 가지고 있었다. 아이러니하게도 학교에서는 항상 1언어로 Java를 사용한 내가 처음 업무에서 사용한 언어는 Python이었다. 처음에는 POC 수준의 작업이었다. Python OpenCV를 사용해서 비디오에 여러가지 노이즈를 입히는 작업이었는데, 나름 재밌게 했던것 같다. 생에 처음으로 Python을 사용해 보았는데, Java에서는 경험하지 못했던 엄청난 자유를 느낄 수 있었다.
이 시기에 작성한 코드는 회사 GitHub에 고이 모셔져 있기 때문에 확인할 방도가 없지만, 처음으로 동적 타이핑 언어를 사용한 입장에서는 족쇄 풀린 망아지 같은 코드를 작성하는 것을 막을 수 없었을 것이다. 그때 팀은 서비스 개발보다는 연구조직에 가까웠기 때문에 코드의 재사용성 등은 따지지 않고 결과만 보고 코드를 작성하고 있었다.
이후 몇개월 뒤 해당 코드를 다시 들어봐야 되는 시점에서 나는 내가 작성한 코드가 너무 어색해서 도저히 손댈 염두가 나지 않았다. 그때가 처음으로 Java가 그리워진 시점이 아니었을까. 이후로 진짜로 업무를 Java로 하기 시작할 기회가 있었으니 적당한 전환이었던것 같다.
물론 이 시점에 나는 Java를 잘 쓴다고 할수 있는 수준은 아니었다. 다만 Python의 "지켜야할 규칙이 적다"는 점이 어떤 면에서는 Java보다 더 어려운 부분을 가지고 있다고 생각이 들었던게 사실이다. interface
나 abstract class
나 그런 추상화에 대해서 이론 수준으로 알고 있었지 실질적인 활용에 대한 방법은 열심히 다루지 못했다.
그런 의미에서 코드의 활용에 대해서 본격적으로 다룬 책으로 처음 접했던게 Head First: Design Pattern 이었다. 이 책은 정말로 Java 개발자를 새로운 영역으로 보내줄 수 있는 재밌는 책이다. 흥미롭다 수준이 아닌 정말 이야기를 잘 풀어가는 책이라 당장이라도 컴퓨터를 키고 싶어지게 만드는 책이다. 그리고 이 시점에서 Clean Code에 대한 본격적인 관심이 생기고 책을 구매했고, 이후 일이 바빠지면서 책을 읽을 시간이 없다는 핑계를 대기 시작했다.
물론 그렇다고 코드를 대충 작성한것은 아니다. Clean Code라는 책은 직역이 가능한 제목을 가지고 있고, 우리는 코드를 배우면서 가독성에 대한 이야기를 많이 듣게 된다. 그래서 개발자 필독서라는 Clean Code를 사면서 다시 봤을때 읽기 좋은 코드에 대한 생각을 많이 하기 시작했다. 어찌보면 책을 먼저 보지 않아서 지금 Clean Code를 보는게 더 도움이 된거 같기도 하다.
왜냐면 Clean Code 책의 저자도 이야기를 하는 부분이, 바로 진리에 대한 이야기, 정확히는 진리는 없다는 이야기였다.
우리가 가르치는 기법을 따른다면 깨끗하고 수준 높은 코드를 작성하리라 감히 장담한다. 하지만 우리 생각이 절대적으로 '옳다'라는 단정은 금물이다. 우리들 못지않게 경험 많은 집단과 전문가가 존재한다.
...
실제로도 이 책에서 주장하는 기법 다수는 논쟁의 여지가 있다.
코드를 가까이 하는 생활을 길게 하면서, 발전을 하다보면 자기 자신도 어느정도는 가독성 좋은 코드를 위해 노력을 할것이다. 물론 노력이 반드시 결과를 불러오지는 않을것이지만 어쨋든 코드를 다양한 방법으로 작성해보려고 하면서 어떤 방식이 더 깔끔한지에 대한 생각을 많이 하게 될것이다.
그 과정을 겪고 난 다음, 이 책을 읽은 지금 나는 내가 작성하던 코드가 어떤 부분이 괜찮았고, 어떤 부분이 별로였고, 어떤 부분은 책의 의견과 다른지 좀더 잘 비교할 수 있었던거 같다. 특히 대부분의 실무 영역에서는 (개발 뿐만 아니라) 사수나 선임의 방식을 따라가는 부분이 있을텐데, 그런 것들 중 어떤게 관습적인 부분이었는지, 어떤게 효율적이었는지에 대한 고민을 같이 할 기회도 주게되는 책이라고 생각된다.
즉 이제 막 개발을 배우고 있는 입장보다는 실제로 코드를 여러 방면으로 다룬 입장에서 책을 읽는것이 더 도움이 되지 않을까 싶다.
원래 일을 Java로 해와서 그런지 다른 언어에 적용하는 생각이 더 잘 안드는 느낌이다. 책이 Java를 기준으로 작성되어서 다른 언어가 잘 떠오르지 않는다는 점이다. 특히 요즘에는 JS와 Python이 많이 쓰이는데, 이들 언어 자체가 Java랑 다른 부분이 많아서 1대1로 대응되는 내용이 별로 없다는 점이다. 결국 엉클 밥이 이야기한 것처럼 절대적으로 옳은것이 아니라는 것이 맞는말인것 같다.
물론 그렇다고 전혀 도움이 되지 않지도 않을것이다. 함수냐 메서드냐 매개변수의 선언이냐 반환형이냐 함수를 길게 쓰지 말자 같은 이야기는 어떤 언어에도 다 적용되는 이야기일 것이다. 여기서 더 나아가, 언어적 특성을 고려해서 나만의 가독성을 높히는 법을 연구하는 것은 연습해볼 수 있지 않을까 싶다.
묵은 숙제를 풀어내듯 읽을 수 있었다. 다행히 내가 코드를 작성하던 방식이 완전히 이상한게 아니었고, 내가 생각하기에 잘못되었던 자주 사용되는 방식들이 완전히 옳다고 되어있지도 않았다. 결국 가독성이라는 주제를 향해 가는 과정이고, 코드의 중복을 줄이는 방향으로 발전하는것이 아닐까 싶다. 남은 부분도 마저 읽어보고, 글로 정리할 수 있으면 좋을것 같다.