Computer Science 이야기/Books

[실용주의 프로그래머] 서문 - 누가 실용주의 프로그래머인가?

Isaac_Lee 2023. 5. 14. 00:15

이 책은 프로그래밍이 어떠해야 한다고 주장하지 않는다.
철학적이거나 판단을 내리는 책은 아니다.
분명하고 단순하게 실용주의 프러그래머란 무엇인가를 말할 뿐이다.
- 추천사 中 -

나에게는 항상 효과적이고 생산성 높은 프로그래머가 되고자 하는 욕구가 있었다. 나의 작업물은 임팩트가 있었으면 좋겠고, 유지보수가 편하며, 다양하게 변하는/추가되는 요구사항에 유연하게 반응했으면 좋겠다.

 

특히 신입 개발자로 커리어를 시작하면서 이런 고민들의 깊이는 더욱 깊어졌다. 좋은 개발자가 무엇인지에 대한 고민, 나의 작업물을 어떻게 바라보아야 하는지에 대한 고민, 개발자로서 내가 가져야 하는 궁극적인 목표가 무엇인지 고민하게 되었다.

 

서점에서 이 책의 서문을 읽는 순간 바로 이 책을 읽어야겠다는 생각을 했다. 책의 서문의 내용을 일부 인용하자면, 개발자는 저마다 가지고 있는 강점과 약점, 취향이 있어 유일무이 하지만 실용주의 프로그래 먼 아래와 같은 특징들을 다수 공유한다는 것이다.

  • 얼리 어댑터 - 새로운 것에 빨리 적응함, 새로운 것을 시도하기 좋아함
  • 호기심이 많은 사람 - 자잘한 지식을 쌓아두며 이를 활용함
  • 비판적 사고의 소유자 - 사실 관계를 확인하기 전에 믿지 않음, 기존의 해결책에 만족하지 않음
  • 현실주의자 - 맞닥트리는 문제의 근본적인 특성을 이해함
  • 다방면에 능숙한 사람 - 다양한 분야의 기술과 환경에 친숙해지려고 함

그리고 다음과 같은 특징은 공통적으로 나타난다고 한다.

  • Tip 1 - 자신의 기예(craft)에 관심을 가져라
  • Tip 2 - 자기 일에 대해 생각하라

이 특징은 너무나 기본적인 것들이라 팁의 형식으로 소개한다. 실용주의 프로그래머가 되기 위해서는 어떤 일을 하면서 자기가 무엇을 하고 있는지 자각해야 하며, 스스로 내리는 모든 결정을 끊임없이 비판적으로 판단해야 한다. 절대 기계적으로 일하면 안 된다.

 

나는 저자의 의견에 적극적으로 동의한다. 자신의 일을 비판적으로 바라보아야 하며, 매번 내가 왜 이 결론에 도달했는지, 이 작업을 왜 하고 있는지 판단해야 한다. 그렇지 않으면 우리는 그저 주어진 일을 수행하는 기계와 다른 것이 없을 것이다. 그 결과 우리는 더 빠르고 정확하고 쉬지 않고 주어진 일을 하는 ChatGPT와 같은 거대 인공지능에 자리를 내어주게 될 것이다.

 

또한 서문에는 아주 인상 깊은 문장이 하나 적혀있었는데, "우리가 단지 돌을 자를지라도 언제난 대성당을 마음속에 그려야 한다."이다. 대성당을 하나를 짓기 위해서는 수십 년에 걸쳐 엄청난 노동력이 투입된다. 건축에 참여한 목수, 석공, 조각가, 유리기술자들 모두가 장인이었고, 대성당을 생각하며 각자 공학적인 요구사항을 나름대로 해석해 건축에 기여하였다. 이런 기여가 모여 중세 유럽의 아름다운 대성당이 되었다.

 

내가 일하고 있는 곳에는 꽤나 많은 개발자가 일하고 있다. 그리고 이런 큰 조직과 복잡한 프로젝트에는 개인의 개성을 발휘하기보다는 엄격하고 공학적인 규율이 필요하다고 말한다. 나 역시 그렇다고 생각했다. 하지만 이 책에서는 다르게 생각한다. 물론 소프트웨어의 구축은 공학적인 규율에 따라 이루어져야 한다. 하지만 그렇다고 개개인의 솜씨를 발휘할 여지가 없는 것은 아니라는 것이다.

 

프로젝트의 전체 구조 속에는 언제나 개성과 장인정신을 발휘할 여지가 있다. 지금으로부터 100년 뒤 우리의 소프트웨어 공학기술을 바라보는 미래의 개발자들은 마치 대성당을 짓던 사람들의 낡은 기법을 바라보는 현대의 토목기사와 같을 것이다. 하지만 우리의 장인정신은 유럽의 대성당처럼 존중받으며 아름다울 것이다.