프로그래머는 엔지니어를 꿈꾼다.

한국에서는 프로그래머는 기술자로 분류된다. 이 기술자를 뜻하는 영단어는 3가지가 있는데 테크니션, 오퍼레이터, 그리고 엔지니어다. 테크니션은 수리공이다. 그리고 오퍼레이터는 컨베이어 벨트 생산직, 그리고 엔지니어는 기술 연구원을 뜻한다. 그럼 프로그래머는 어디에 속할까? 테크니션이라고 생각한다면 당신은 용팔이일 가능성이 있고, 엔지니어라고 답하면 몽상가일 것이며 오퍼레이터라고 답하면 당신은 찌들대로 찌든 한국의 개발자일 가능성이 높다.

그래서 정답이 뭐냐고 물어본다면 당연히 엔지니어다. 몽상가라고 하지 않았냐고 반문한다면, 당연히 정답이지만 현실은 시궁창이니까 몽상가라고 한거다. 뭐 사실 엔지니어라고 해도 테크니션과 오퍼레이터와 혼용해서 쓰는 일이 많다. 애초에 영어가 모국어가 아닌 한국에서 영단어를 엄밀히 구분해서 쓰는 건 무리고, 그렇다고 기술자로 퉁쳐버리기에는 섞이기에는 애매한 엔지니어만의 특성이 있다. 애초에 기술자로 그냥 묶음처리 되는 것 때문에 한국의 프로그래머들의 업무환경이 정말 프로그래머스럽지 못 한 문제가 있다고 생각한다.

하지만 프로그래머는 엄연히 기술을 연구하고 그 연구를 통해 새로운 프로그램을 내놓는 엄연한 엔지니어다. 만약 이를 간과한다면 제대로 된 프로그래머가 될 수도, 제대로 프로그래머를 이해할 수도 없다. 물론 프로그래머를 제대로 다루는 것도 불가능 할 것이다.

반복작업은 프로그래머의 영역이 아니다.

일단은 프로그래머가 가장 피해야 될 것이 반복작업이다. 똑같은 일을 반복하고 있다면 당장 몸에서 두드러기가 나고 알러지 반응이 일어나며 속이 뒤집어지지는 않더라도 거기에 대해 거부감이 들어야 한다. 만약 반복작업이 아무렇지도 않다면 당신은 지금 정신줄을 놓아서 아무 생각이 없거나, 변태이거나 둘 중 하나가 아닐까 싶다. 반복작업들을 줄일 수 있으면 좀 더 많은 시간을 아낄 수 있으며 이 시간동안 당신은 좀 더 많은 휴식을 취할 수 있다.

이 반복작업은 여러가지를 뜻한다. 단순히 작업이 반복되는 경우가 있을 수도 있고, 아니면 같은 코드를 여러번 치는 경우가 있을 수도 있다. 사실 문제로만 보면 후자가 더 심각한 문제이지만, 전자도 상당히 큰 문제가 있다.

일단 전자의 경우에는 보통 자동화된 툴로 해결을 한다. 만약 자동화된 툴이 없다면? 당연히 빠른 계산을 해야 된다. 일단 당신이 프로그래머라는 직업을 가졌다는 것을 잊지말라. 당신은 충분히 자동화 된 툴을 만들 능력이 있다. 물론 그 자동화 된 툴을 만드는 노력이 현재 반복되는 작업에 드는 노력보다 더 많이 필요할 수도 있다. 하지만 반복작업이 장기화 된다면, 아니면 차후에도 또 발생할 일이 있다면, 자동화 툴 제작도 충분히 고려해볼만 한 상황이다.

문제는 후자의 경우이다. 전자의 경우 어떻게 어떻게 커버를 칠 수도 있다. 근데 후자의 경우에는 프로그래머이면서 재사용 이라는 가장 중요한 키워드를 완전히 잊고 있는 상황이다. 프롤로그에서 말했 듯이 개발계의 수많은 선조들이 똑같은 코드를 여러번 치는 그런 뻘 짓을 막기위해 여러가지 재사용에 관한 여러 이론과 설명을 내놓았고, 그 내용들은 수많은 책들로 출간되어 프로그래머들에게 귀에 딱지가 앉도록 잔소리로 내려왔다. 당신이 반복되는 부분을 클래스와 파일로 충분히 분리시켜놓았다면 수많은 타자들은 Ctrl+C/Ctrl+V 한번으로 처리가 될 것이다.

재사용을 위한 설계는 미래를 위한 투자다.

물론 이 재사용이란게 말처럼 그냥 쉽지는 않다. 항상 프로그램에서의 요건은 일정하지 않고 바뀌기 마련이다. 이런 상황에서 사용하기 위해 나온게 디자인 패턴 이다. 프로그래머들이 재사용에 대해 고민을 할때 대학시험처럼 백지 답안지에 장문의 서술을 하지말고, 적어도 보기는 많지만 객관식으로 고를 수 있게 정리 된 것이 디자인 패턴이다.

다만 이 디자인 패턴을 적용하다보면 그냥 짤 때보다 오히려 더 복잡할 경우가 있다. 아니 사실 대부분이 그렇다. 하지만 차후 수정사항이 나왔을 때 당신이 이것저것 고치면서 고생할 것을 생각한다면, 그냥 확장성과 유지보수성을 위해 디자인 패턴을 적용하기를 추천한다.

하지만 이 디자인 패턴은 무안단물이 아니다. 라는 점을 명심하자. 디자인 패턴도 엄연히 필요한 곳이 있으며, 굳이 필요하지 않은 곳이 있다. 아니 정확히 말하자면 적당한 디자인 패턴이 있으며 부적합한 디자인 패턴이 있다. 먼저 디자인 패턴을 정하고 설계를 짜는 것이 아니라, 설계를 짜고 거기에 맞는 디자인 패턴을 적용해야 됨을 항상 명심해야 된다.

양심이 있으면 한번은 쳐보자

가끔 보다보면 인터넷에서 검색한 내용을 그대로 코드로 Ctrl+C/Ctrl+V 하는 사람들이 있다. 만약 내 밑에 사람이 그런다면 옆에서 경을 칠 일이다. 프로그래머들이 원하는 코드를 찾거나 문제를 해결하기 위해 인터넷에 검색하는 일은 흔하다. 문제는 그 코드를 적용하는 방식이다. 코드를 적용할 때 그냥 코드를 긁어서 복사해서 붙인다면 몇가지 문제가 생긴다.

먼저 그 코드내의 변수가 현재 적용할 코드내의 변수와 맞는지 보장할 수 없다. 에러가 나거나 하면 해당 변수명을 고치고는 하겠지만, 붙여넣는 코드가 길고 할당되는 변수가 많을 수록 그 영향도를 파악하기 힘들다. 거기다가 차후에 기존 코드와 붙여놓은 코드를 구분하기 힘들어지면 더 수습하기 힘들어진다.

두번째는 해당코드에 대한 이해도가 떨어지고 머릿 속에 잘 안남는다 는 것이다. 애초에 그냥 복사해서 붙여넣었는데, 제대로 읽어보기는 하였겠는가? 제대로 읽어보지도 않았으니 해당 내용에 대한 이해도 없을 것이고 기억에 남을 내용도 없을 것이다. 당장 다음날 같은 일이 발생한다면 바로 기억에 남겠지만 나중가면 기억도 못하고 똑같은 검색을 하고 똑같은 사이트에 가고 똑같은 내용을 복사 붙여넣기 할 가능성이 높다. 하지만 최소한 쳐보기라도 한다면 읽어는 보게 되며, 이해를 한다면 똑같은 검색을 반복할 일이 없을 것이다.