조심스럽게 좋은 엔지니어는 최신 기술에 정통한 사람보다는 복잡한 문제를 해결해 내는 엔지니어라는 생각해본다. 물론 최신 기술에 무지하라는 얘기는 아니다. 당연히 좋은 엔지니어는 최신 기술동향도 파악하고 있을 것이다. 다만, 복잡한 문제를 기술적으로 해결하는 것이 엔지니어의 역할이고, 뛰어난 엔지니어는 모든 문제를 최신 기술로 해결하는 사람이 아니라, 남들이 풀지 못하는 기술적인 어려움을 풀어내는 사람이라는 것이다.
흥미로운 것은 대개의 최신 기술들은 남들이 풀지 못하는 기술적인 어려움을 풀어내는 과정에서 탄생하곤 한다. 태초에 Java가 있고 Spring이 있지 않았다. 태초에는 Java만 있었다. DI도 없었다. 사람들은 불편했다. 어떻게 하면 복잡한 코드를 효율적으로 관리하고, SOLID 원칙에 부합하는 코드를 짤 수 있을까? 사람들은 이 어려운 문제에 봉착했고, 고민의 결과로 Spring이 만들어졌다. 결국 기술도 얼마나 복잡한 문제를 얼마나 깊이 이해하고 고민하느냐를 통해 만들어 진다고 생각한다.
1962년 케네디는 말했다. “우리는 달에 갈 겁니다. 달에 가기로 결정했고, 달에 가야만 하기 때문입니다.” 그로부터 7년 뒤, 인류는 달에 갔다. 2011년 부터 NASA는 SLS라는 초대형 로켓을 개발하고 있다. 목표는 처음에는 화성이었으나, 달에 가는 것으로 변경되었다. 그로부터 10년이 더 지난 2022년, 인류는 여전히 달에 갈 수 없다. 미국을 포함한 그 어떤 나라도 달로 사람을 실어나를 수 있는 기술이 없다. 60-70년대 미국은 달에 사람을 보낼 수 있었지만, 우주에 대한 열정이 식어감에 따라 결국 우주 개발 프로그램은 축소되었고, 달에 사람을 보낼 능력을 잃었기 때문이다.
인텔이 설립된 해가 1968년이고, 그 당시 이제 막 트랜지스터와 IC칩이 보급단계였고 여전히 많은 곳에서 진공관을 썼다. C 언어가 1972년 만들어졌으니, C 언어조차 탄생하기 전이었다. 기술의 발전으로 보자면 1969년에 인류를 달로 보내는 것과 2022년에 인류를 달로 보내는 것, 명확하게 후자가 쉽게 보인다. 무어의 법칙에 따라 차근히 성장한 IC칩의 성능은 매 2년마다 거의 2배씩 성장했다. 대략 40년간 동작했다고 한다면 2의 20승, 대략 1백만 배 이상 향상되었다. 하지만 여전히 우리는 달에 가지 못한다.
하고싶은 말은 이것이다. 중요한 것은 최신 기술이 아닐 수도 있다. 중요한 것은 복잡한 문제를 어떻게든 풀어내겠다는 의지이며, 문제를 풀어내는 행위이다. 그 과정에서 최신기술은 필요하면 사용할 수도 있고, 필요없다면 사용하지 않을 수도 있는 것이다.
새로운 기술의 동향을 따라가는 것은 중요하다. 하지만, 복잡한 문제를 만났을 때, 별 고민 없이 당장 쓸 수 있는 라이브러리를 이해가 부족한 상태에서 쓰는 것은 위험하다. 백날 밀키트를 끓여본들, 요리 실력은 늘지 않는다. 요리도 직접 해봐야 늘고, 더 맛있는 요리를 만들기 위해 다양한 재료들을 고민해봐야 느는 것처럼 엔지니어링도 그렇다고 생각한다.