인간은 말을 통해서 의사 소통을 한다. 서로 의견을 교환하고, 자신의 생각을 표현하고, 설득을 하고. 사랑을 표현한다. 그래서 회사 생활에도 말은 참 중요하다. 오죽하면 말 잘하는 사람이 성공한다는 이야기도 있겠는가? 그런 말 중에도 신입 개발자들에게 참 독이 되는 말이 있다. 독이 되는 말임에도 하나같이 신기하게도 신입 개발자들은 이 말을 입에 달고 사는 것 같다. 새해에는 이런 말을 하지 않는 신입 개발자들이 좀 늘었으면 하는 바램이다.
#0. 안 됩니다.
무슨 이야기만 하면 찾아보지도 않고 안 된다는 답변을 먼저 해버리는 개발자들이 있다. 사실 좀 어처구니 없는 대답이긴 하다. 왜냐하면 회사에서 높은 비용을 지불해가면서 똑똑한 개발자를 쓰는 유일한 이유는 남들이 못하는 것을 하기 위해서지, 남들도 다하는걸 하기 위해서는 아니기 때문이다. 사사건건 하는 것마다 안 된다는 이야기를 한다면 과연 어떤 회사가 당신에게 높은 비용을 지불하겠는가?
더 안타까운 사실은 개발자에게 주어지는 요구 사항 중에 안 되는 것은 사실 거의 없다는 점이다. 나도 사회 초년생 시절에는 회사에서나 커뮤니티에서 답변을 달 때에 ‘안 된다’라는 이야기를 자주 했다. 하지만 지나고 보니 안 된다고 생각했던 건 그 당시 지식이 부족했거나 아이디어가 없었던 경우가 대부분이었다. 논리적으로 안 되는 이유를 증명할 수 있는 이야기가 아니라면 가급적 안 된다라는 말을 하는 것은 피하는 것이 좋다. 차라리 정직하게 자신이 아는 한도 내에서는 방법이 없는 것 같다고 말하고, 긍정적으로 방법을 찾아 보자고 이야기 하는 것이 좋은 방법이다.
#1. 팀장님이 작성한 코드예요.
대다수 신입 개발자들이 회사에서 처음 맡아서 하게 되는 일은 기존 코드의 유지 보수 작업이다. 선임들의 코드 뭉치를 한 덩이 받아 들고는 시작하는 경우가 태반이라는 말이다. 상황이 이렇다 보니 자신이 만든 코드가 아니라는 알량한 생각에 문제가 생기거나 기존 코드에 잘못을 지적 받으면 자연스럽게 방어기제가 발동한다. 책임 회피가 나오는 것이다. “팀장님이 작성한 코드예요”, “그 부분은 원래 이렇게 돼 있었습니다”라는 말들은 이러한 방어기제의 대표적인 형태다. 하지만 안타깝게도 이 답변은 질문에 대한 0점짜리 대답이다. 왜냐하면 이 답변은 지적 받은 문제가 제대로 된 지적인지 아닌지에 대한 생각도 없고, 또 그것을 어떻게 고쳐야 하는지에 대한 생각은 더더욱 없으며, 일말의 책임감이라고는 하나도 찾아볼 수 없는 아주 비겁한 답변이기 때문이다.
여러분이 어떤 코드 뭉치를 받았건 그것을 받아 들고 해당 코드를 관리하는 순간부터 그 코드는 여러분의 것이고, 직접 책임져야 하는 것들이다. 그 코드를 누가 만들었는지, 기존 코드가 처음부터 문제가 있었는지 없었는지는 하나도 중요하지 않다. 여러분이 알아야 할 것은 지금 문제가 있는지, 문제가 있다면 그것을 고칠 수 있는지 없는지가 중요하다.
많은 신입 개발자들이 선임의 코드를 받으면서 그 코드는 완전 무결할 것이라는 막연한 환상을 가진다. 하지만 그걸 만든 선임 개발자도 나름의 사정이 있었고, 일정에 쫓겼고, 더욱이 신은 아니다. 그는 자신의 아내가 출산을 하는 날에도 야근을 하면서 해당 코드를 작성해야 했을 수도 있고, 어처구니 없는 일정에 쫓겨가면서 급하게 코드를 만들었을지도 모른다. 상황이 이런데도 신입 개발자들은 코드가 돌아간다면 가급적 고치지 않으려는 습성이 있다. 일종의 관성이라고 할 수도 있는 이 문제는 고치다가 문제가 발생할지도 모른다는 두려움이 그 원인이다. 하지만 반드시 기억해야 할 사실은 항상 새로운 것들은 기존의 것들을 파괴하는 데서 출발한다는 점이다. 기존의 것을 변경하지 않고는 절대로 새로운 것이 탄생할 수 없다. 맡은 코드에 대해서 잘 돌아가는 것 이상을 생각할 필요가 있다. 그게 처음부터 만들지 않은 사람이 해야 할 일이다.
#2. 잘되는데요.
신입 개발자들의 코드를 보다가 문제를 지적하면 흔히 듣게 되는 대답이다. 물론 똑똑한 개발자라면 기초적인 실수는 하지 않았을 것이기 때문에 이런 실수는 아주 드물게 나타나는 현상에 대한 것이거나 이론적으로는 가능하지만 현실 세계에서 재현은 되지 않는 문제인 경우가 많다. 특히 이번 시간에 언급할 멀티 스레드 문제들도 이 범주에 속한다. 재현이 쉽지 않기 때문에 자신의 코드가 잘 동작한다는 착각에 빠지는 것이다.
하지만 코드가 잘 돌아간다고 모두 제대로 동작하는 것은 아니다. 완전한 논리로 설명할 수 없다면 불충분한 코드다. 언제든지 안될 수 있다는 말이다. 잘못을 정확하게 판단하기 위해서는 지금까지 잘됐는지 안됐는지가 아니라 그 코드의 논리가 제대로 된 논리인지 아닌지를 해명하는 것이 우선이다.
0 0