본문 바로가기
개발 노트/일기 겸 근황

최적화의 늪... 완벽한 코드 작성에 대한 고찰

by tokkiC 2023. 1. 13.

최적화 optiamization 듣기 참 좋은 말이다

"최적화하고 추후 유지보수가 쉽게 해야한다" 

많이 들은 말이고 당연하지! 싶었다 근데... 이게 현실에서도 항상 정답일까?

최적화... 좋은거긴한데... 생각해 볼 점이 있었네?

최근 사이드 프로젝트를 혼자 해보는 중 이전 팀프로젝트에서는 생각하지 못했던 생각이 들었다

"이거 이렇게 하면 추후 유지보수 할 때 편하겠는데? 멋진 코드야! 근데 이렇게 하니 시간이 몇 배로 걸렸네..."

"코드를 추후의 유지보수를 위해 최적화된 코드를 만드는 것은 물론 옳은 일이지만, 최적화를 적용하기 위해 드는 시간의 비용도 고려해야 하지 않을까?"

지금은 취업 전이므로 최적화에 필요한 추가적인 시간적인 비용은 나 혼자의 지출이지만, 회사에 입사했다면 회사에서는 개발 비용이 높아지게 된다. 그때도 추후 유지보수를 위해서 최적화된 코드를 짜두는 것이 옳을까? 

본인은 회사의 전체적인 부분을 보고 경험하고 배우기 좋은 스타트업에 취업을 희망하고 있다. 하지만 스타트 업의 경우 안정적이지 못하다는 단점이 있다. 아래의 그래프를 보듯 많은 스타트업 회사들이 오래버티지 못하고 사업을 접고 있다

이런 회사들은 미래에 유지 보수에 유리할 수 있는 최고의 코드로 만들어야 할까? 아니면 빠르고 생산성을 살린 코드로 만들어야 할까?
시간이 걸려도 최적화된 코드를 추구해야하는지, 그때 그때 상황에 따라 갈 수 있는 생산성 있는 코드를 추구해야 하는지... 이 두 가지 방법의 균형에 대해 생각해 보게 되었다

도널드 어빈 커누스가 1968년에 집필한 The Art of Computer Programming 에서는 이렇게 말하고 있다

premature optimization is the root of all evil
이른 최적화는 만악의 근원이다

 

최적화된 코드만을 추구해서 최적화의 늪에 빠져서 시간과 노력을 낭비한다면 빠르게 바뀌는 시장과 고객의 요구사항에 발빠르게 대응하지 못하고 요구사항의 해결이 아닌, 코드 자체의 세련됨만을 쫓게 될 수 있게 될 것이다

많은 선배 개발자와 it 창업가들은 말하는 말이 있다

"코더가 아닌 문제 해결능력이 있는 개발자를 원한다" 

 

이 말이 이제는 다르게 들린다
아, 코드 자체에 너무 얽매여 있으면 문제 해결에 제때 대처하고 답을 내기 힘들 수 있겠구나! 싶다
코드의 완벽함에 집착하여 문제 해결이 미뤄지면 코드 잘짜는 기술자에 불과하니
코드 자체의 퀄리티에 너무 연연하지 말고 올바른 답을 내는 것에 더 집중하는 사람을 원한다는 말이구나!

영화 기생충에서 송강호는 아래와 같이 말한다

개발도 계획대로만 흘러가지는 않는다

개발도 아무리 완벽하게 기획했다고 하더라도 시장의 상황과 고객의 요구사항 변화, 기술의 변화, 디테일의 추가 등으로 처음 계획과는 다른 일정과 결과물이 산출되는 경우가 많을 것이다. 당장 개발 방법론에도 애자일 방법론과 같이 요구사항의 변화에 빠르게 대응하는 방법이 대세가 되지 않았는가? 그만큼 결과물은 초기 계획과는 많이 다를 것이다

또한 스타트업 등의 경우는 회사 사정상, 장기적인 유지보수에 유리한 비싸고 오래걸리는 제품보다 당장 빠르게 시장 트랜드에 맞게 내놓을 수 있는 제품이 더 필요할 것이다

이런 상황에서도 개발 프로젝트에서 최적화된 코드의 추구가 옳다고 할 수 있을까?

나는 개발자다. 그것도 스타트업 취업을 희망하는 웹 프론트엔드 개발자이다
프론트엔드는 기술의 변화가 빨라 1년 전 코드도 지금은 사용하지 못하는 코드가 되기도 한다
내가 1년 후의 미래를 대비해서 오랜 시간과 공을 들인 최적화된 코드를 완성했다 하더라도, 그 코드를 사용할 회사가 1년 뒤에도 존재할지, 1년 뒤에도 그 코드가 제대로 작동할 지, 1년 뒤에도 제품이 같은 로직을 사용할지, 1년 후의 내 코드를 보는 누군가도 내 최적화의 답에 동의할지(스스로도 1년간 성장한다면 1년 전의 코드는 한숨이 나올 텐데 말이다)는 미지수이다
이런 나에게 최적화란 도덕 교과서처럼 보인다. 올바른 코딩의 방법이며, 이론적으로는 따르면 좋을 것이다. 하지만 인생도 코딩도 도덕 교과서대로만 할 수는 없다. 시간이 변함에 따라 상황도 바뀌므로 교과서 외적인 상황도 고려하여 유연하게 대응해야 하기 때문이다.(심지어 시간이 지나면 교과서도 바뀌잖아?!!)

따라서 나는 최적화의 늪에서 벗어나 완벽한 코드를 짜야한다는 생각을 조금 내려놓으려 한다

개발자는 코드만 완벽하게 잘 짜는 사람이 아니라 완성된 프로그램으로 문제를 해결하고 수익을 창출해 낼 수 있어야 한다. 말을 조리있게 잘하는 것이 아니라, 그 말로 얻어내야 할 것에 더 집중해야 한다는 말이다.

제한된 돈과 시간하에서 문제 해결을 해야하니 선택해야만 한다

있을지 모를, 정답일지 모를 지금의 답으로 미래의 변화를 대비하느라 비용을 들이는 것보다, 발빠르게 시장과 고객에게 가치를 전달하는 것이 옳을 수도 있다는 것을 글을 쓰며 깊게 생각할 수 있어 좋았다

댓글