|
내가 생각하는 프로그래머가 갖춰야 할 가장 큰 덕목은 부지런히 새로운 것을 배우려는 자세라고 생각한다. 일단 나는 무척 게으르고 새로운 것을 배우는 것도 빠르지 못하다. 그래서 이걸 논하는 것은 너무 부끄럽고 그나마 내가 자신 있는 것을 얘기해보자. 무엇이냐면 바로:
"프로그래머는 쪼잔 해야 한다." 좀 더 풀어 쓰면, 변수 하나를 추가하거나, for 루프 하나 추가할 때도 끊임없이 - 과연 이 변수 추가가 효과적인가? - 메모리 사용량을 많이 늘리거나 수행 속도에 영향을 얼마나 줄까? 와 같은 질문을 자신에게 물어가며 작성 해야 한다. 컴포넌트를 하나를 추가할 때도, - 이 컴포넌트가 기존 디자인 룰에 위배되지 않은가? - 다른 컴포넌트와의 연결은 의존성 낮게 깔끔히 이루어지는가? 와 같이 신중에 신중을 기해야 한다. 대한민국 남자들이 소위 가지고 있는 "대장부 컴플렉스"는 프로그래머는 절대 지양해야 할 대표적인 악습이다. - 까짓 것~! 쪼잔하게 이게 뭐야~ - 배열 팍팍 잡고, 그냥 루프 뺑뺑 돌려서 하자고~ 이러면 난감하다는 것이다. 이렇게 쪼잔 해지기 위해서는 컴퓨터를 잘 알아야 한다. 초등학교 시절 GW-BASIC으로 놀 때와 고2 겨울방학 때 공부 안 하고 프로그램 짤 때는 컴퓨터에 대해 아무것도 몰랐다. 그런 뒤 대학교서 '자료구조론'을 배우고 난 뒤, 나의 프로그래밍 실력은 일취월장한다(라고 쓰려니 몹시 민망하다). 알고리즘 분석법을 배우고 나니 for 하나가 그렇게 큰 의미를 가진다는 것을 깨달았다. 수 많은 자료구조를 접하면서 '최적화'라는 것에 조금 눈을 뜨기 시작한다. 적어도 for 루프 하나를 아무 생각 없이 집어넣지 않는다. 본격적으로 프로그램을 짜는데 쪼잔 해지기 시작한 것이다. 그 뒤, '컴퓨터 구조'와 '컴파일러' 과목을 배우면서 컴퓨터를 더 잘 알게 된다. 코딩 한 줄 할 때마다 이제 CPU가 고생할 것을 걱정하다. C 코드로는 한 줄이지만 이것이 번역되면 수백개의 명령어로 번역된다는 사실을 알게 되면 고민을 하게 된다. 보다 더 가볍게 이것을 해결할 수 있는 방법은 없는지 고민하게 된다. 급기야 대학원에 와서 고급 컴퓨터 구조를 배우고 나니 이제는 if 문 하나도 이걸 넣어야하나 말아야 하나 고민이 된다. if 와 같은 분기문 혹은 virtual 함수 호출이 가지는 그 깊은 함축성을 알고 나니 망설여진다. 정말 쪼잔함이 극에 달한 것이다. 물론 일반적인 경우에는 이렇게까지 쪼잔할 필요는 없다. 이런거 따지면 스크립트 랭귀지 같은 건 사용하지 못한다. 자바 스크립트와 같이 dynamic type을 지원하는 랭귀지를 볼 때 마다 가슴이 철렁거린다. "아니 이렇게 똑똑하게 타입 캐스팅을 하려면 비용이..." (그래서 내가 자바를 좀 싫어하는 것 같기도) 그러나 정말 한 사이클이라도 아껴야 하는 중요한 코드는 이런 쪼잔함이 필수다. 병특 시절 규모가 제법 큰 패키지 소프트웨어 개발에 참여했었다. 물론 시장에서 잘 나가는 제품이었지만, 소스코드를 보면 거대한 괴물이었다. 아무리 코어 엔진 개발 때는 정말 쪼잔하게 최적화를 생각해가며 주의 깊게 코딩을 하더라도, 시간이 지나면 무뎌지고 여러 유혹에 타협을 하게 된다. 생각치 못한 예외 상황이 나오면 주먹구구로 마구 해결하기 시작한다. 고객이 원하는 새로운 기능을 넣으려니 스파게티 코드로 덕지덕지 코드를 덧 붙인다. 결국 초기에 있었던 깔끔함은 사라지고 정신 없고 덩치 큰 소프트웨어가 되어버린다. 나에게 있어서 프로그래밍은 언제나 늘 나 자신과의 싸움이다. 특히 회사에서 일할 때 그랬다. 혼자서 프로그램을 짤 때는 내가 짜고 싶은 모든 것을 많은 시간을 동원해서 구현할 수 있었다. 그러나 회사는 그렇지 못한다. 최적화가 잘 된 멋진 결과물 보다도 어떻게 되었든 간에 돌아만 가는 결과물을 '제때' 내 놓는 것이 더 중요하다. 그래서 내가 목표한 그림은 이 만큼인데 이것을 위해서는 많은 시간이 필요하다. 그러나 현실은 그렇지 못하다. 나 자신이 세운 목표와 현실적인 목표 사이에서 타협을 해야 한다. 코드 한 줄 작성하면서 늘 쪼잔하게 고민하는 것도 사치가 된다. 이런 쪼잔함은 결국 '완벽함'과 일맥상통한다 볼 수 있다. 그러나 지나친 것은 늘 좋지 않다. 업무 성격상 '시간'이 생명인 프로젝트도 많을 것이다. 이런 곳에서 조차 이런 것을 강요하지 않는다. 그래 봐야 다른 사람만 피곤해지기 때문이다. 그러나 여전히 우리나라의 개발자들은 좀 더 쪼잔해져도, 좀 더 완벽해져도, 괜찮다. 내가 가진 프로그래밍 경력이라고는 풀 타임 회사 경력 3년과 알바 경험 3년 뿐이다. 그러나 적어도 내가 보기에 우리 개발자들은 너무 대범하다. 우리나라 프로그램은 항상 마지막 2%가 부족한 느낌을 받는다. 우리 개발자들이 조금만 더 쪼잔해지면 더 완성도 높은 그리고 더 최적화된 소프트웨어를 만들 수 있으리라 믿는다. 한줄요약: 근무시간에는 인터넷하지 말고 집중해서 코딩합시다. (사실 저도 코딩 한 시간 인터넷 한 시간 했어요…) 이 글과 관련있는 글을 자동검색한 결과입니다 [?]
최근 등록된 덧글
개발자 입장에서의 수많은 ..
by Jiyoon at 02/04 저도 아들 돌잔치때 돌잡이 .. by 박상욱 at 01/18 미국 대학원 원서 작성중에 p.. by 태클사이야 at 01/13 TO: 박PD 로그인 하지 않아.. by 박응용 at 01/10 http://gigglehd.com/zbx.. by dhunter at 12/28 우와.. 좋네요. 태반이 .. by 윤광배 at 12/17 항상 좋은 글 잘 보고 있습니.. by y2k at 11/23 글이 좋아서 제 블로그에 담.. by 쏭섭 at 11/23 최근 등록된 트랙백
메뉴릿
이글루 파인더
|