프레임워크 공부를 멈춰라

(아래 글의 제멋대로 번역입니다)

우리는 개발자다. 최신 기술에 늘 깨어 있어야 한다. 매일 우리는 프로그래밍 언어와 프레임워크, 라이브러리들을 익힌다. 우리는 새로운 도구들을 더 많이 익힐 수록 유리하다.

앵귤러(Angular), 리액트(React), 라이엇(Riot), 뷰(Vue), 엠버(Ember), 넉아웃(Knockout) 등에 대해 최신 동향을 유지하는 것은 흥미로운 일이다.

하지만 우리는 시간을 낭비하고 있다.

시간은 우리가 가진 가장 소중한 자원이다. 시간은 제한적이며, 재활용할 수도 없고 원한다고 더 살 수도 없다.

기술은 패션의 유행처럼 빛의 속도로 변화한다. 변화를 따라잡기 위해서는 우리도 정신없이 달려야 한다. 이 경쟁엔 끝이 없으므로 승자도 없다.

나의 멘토가 내게 한 가지 가르쳐 준 것이 있다.

멘토: “에드, 뭐하고 있어?”

나(자랑스럽게): “GWT로 최신 자바 앱을 만들 수 있는 책을 읽는 중입니다.”

멘토: “뭐하려고?”

나: “자바 개발자라면 트렌드를 놓치지 않아야죠. GWT가 그런 것 중의 하나고요.”

멘토: “GWT 전에는 어떤 기술 서적을 읽었었지?”

나: “500페이지짜리 아파치 태피스트리(Apache Tapestry, 자바 웹 어플리케이션 프레임워크 — 역주) 책이었죠. 그 땐 태피스트리가 그런 거였고요.”

멘토: “태피스트리는 여전히 트렌디한 프레임워크야?”

나: “이젠 아니죠. GWT가 그런 쪽이죠.”

멘토: “태피스트리 기술을 현재 문제를 해결하는 데에 재사용할 수 있겠어?”

나: “아뇨, 이제 아무도 그거 안 써요.”

멘토: “태피스트리 지식은 GWT를 이해하는 데에 좀 더 도움이 되나?”

나: “아뇨, 하지만 몇몇 비슷한 패턴은 보이는 것 같아요.”

멘토: “그런게 디자인 패턴이야. 그것들은 현재의 문제들을 해결하는데 도움이 될까?”

나: “네, 꽤 많이요.”

멘토: “기술은 나타났다 금방 사라지지만 그것들은 많은 부분에서 공통점을 가지고 있어. 우선순위를 올바로 잡아야 해. 학습 시간의 80%는 본질적인 것에 투자하고 나머지 20%를 프레임워크나 라이브러리 등의 도구를 배우는 데에 투자하는 식으로.”

나: “음… 프레임워크나 라이브러리 같은 것들에 겨우 20%요?”

멘토: “그래, 어쨌거나 실제 업무에서 문제를 해결하면서 그것들은 익혀지게 되니까.”

나: “감사합니다."

멘토: “나중에 더 감사하게 될걸."

이 충고는 내 인생을 바꾸었다. 나는 내 Goodreads 계정의 서재에서 모든 프레임워크 책들을 없애버렸다. 내 죄책감 더미는 50권에서 0권이 되었다. 휴~!

나는 대신 여러 권의 기술 고전 서적들을 구입했다. 이제 내 학습 시간의 80%를 여기에 투자한다.

그리고 추가적으로 현재의 기술에 대한 책도 한 권 사긴 했다. 린디 효과(Lindy Effect)에 따르면 스프링 프레임워크가 좋은 선택이 아닐까.

어떤 기술의 미래의 기대 수명은 현재 시대에서 갖고 있는 영향력에 달려있다. 그 기술이 현재까지 살아남는 동안 겪은 모든 시간들에서 더 긴 기대 수명이 남아 있을 것이라 예측할 수 있다.

즉 기술이 시장에서 오래 존재했었다면 그에 대한 투자도 더욱 안전하다.

새로운 기술에 무작정 달려들지 말자 — 그만큼 사장될 위험도 크다.

어떤 기술이 투자할 만한 기술인지는 시간이 가르쳐 줄 것이다. 시간은 당신의 가장 믿을만한 조언자이다. 기다리는 법을 배우자.


그리고 10년이 지났다. 나는 50 여가지의 소프트웨어 프로젝트에 참여했다. 그 조언 덕택에 내가 공부한 모든 것은 회사와 팀과 도메인을 넘나들며 도움이 되어 주었다. 나의 지식은 현재에도 여전히 도움이 된다. 나는 시간을 낭비하지 않았던 것이다.

당신이 내부를 들여다보지 않는다면 모든 프로젝트는 서로 다르게 보일 것이다.

  • 프로그래밍 언어들은 다르지만, 잘못된 설계에서 풍기는 악취는 유사하다.
  • 프레임워크들은 서로 다르지만, 동일한 디자인 패턴들이 그 안에서 빛난다.
  • 개발자들은 서로 다르지만, 사람을 대하는 규칙에는 일관성이 있다.

기억하라 — 프레임워크, 라이브러리, 그 외 여러 도구들은 나타났다 사라지며 시간은 소중하다.

당신의 황금같은 시간을 유연한 기술에 투자해라. 항상 도움이 될 수 있는 그런 기술들에.

  • 마이크로서비스 프레임워크(X) -> 새로운 아키텍처(O)
  • 새로운 프로그래밍 언어(X) -> 클린 코드, 디자인 패턴, DDD(O)
  • LeSS, SAFe(X) -> 린(Lean) 개발 원칙들
  • Hystrix(X) -> 장애 극복 패턴(O)
  • 도커, Docker(X) -> 지속적인 배포(O)
  • 앵귤러(X) -> Web, Http, REST(O)

번역은 여기까지…

세부적인 부분은 동의하지 않지만 fundamentals를 중시하자는 부분은 공감하기 때문에 (그리고 별로 안 길어서…) 번역해 봄.