프로그래머가 갖춰야할 덕목 - 쪼잔함
내가 생각하는 프로그래머가 갖춰야 할 가장 큰 덕목은 부지런히 새로운 것을 배우려는 자세라고 생각한다. 일단 나는 무척 게으르고 새로운 것을 배우는 것도 빠르지 못하다. 그래서 이걸 논하는 것은 너무 부끄럽고 그나마 내가 자신 있는 것을 얘기해보자. 무엇이냐면 바로:

"프로그래머는 쪼잔 해야 한다."

좀 더 풀어 쓰면, 변수 하나를 추가하거나, for 루프 하나 추가할 때도 끊임없이

- 과연 이 변수 추가가 효과적인가?
- 메모리 사용량을 많이 늘리거나 수행 속도에 영향을 얼마나 줄까?

와 같은 질문을 자신에게 물어가며 작성 해야 한다. 컴포넌트를 하나를 추가할 때도,

- 이 컴포넌트가 기존 디자인 룰에 위배되지 않은가?
- 다른 컴포넌트와의 연결은 의존성 낮게 깔끔히 이루어지는가?

와 같이 신중에 신중을 기해야 한다.


대한민국 남자들이 소위 가지고 있는 "대장부 컴플렉스"는 프로그래머는 절대 지양해야 할 대표적인 악습이다.

- 까짓 것~! 쪼잔하게 이게 뭐야~
- 배열 팍팍 잡고, 그냥 루프 뺑뺑 돌려서 하자고~

이러면 난감하다는 것이다.


이렇게 쪼잔 해지기 위해서는 컴퓨터를 잘 알아야 한다. 초등학교 시절 GW-BASIC으로 놀 때와 고2 겨울방학 때 공부 안 하고 프로그램 짤 때는 컴퓨터에 대해 아무것도 몰랐다. 그런 뒤 대학교서 '자료구조론'을 배우고 난 뒤, 나의 프로그래밍 실력은 일취월장한다(라고 쓰려니 몹시 민망하다). 알고리즘 분석법을 배우고 나니 for 하나가 그렇게 큰 의미를 가진다는 것을 깨달았다. 수 많은 자료구조를 접하면서 '최적화'라는 것에 조금 눈을 뜨기 시작한다. 적어도 for 루프 하나를 아무 생각 없이 집어넣지 않는다. 본격적으로 프로그램을 짜는데 쪼잔 해지기 시작한 것이다.

그 뒤, '컴퓨터 구조'와 '컴파일러' 과목을 배우면서 컴퓨터를 더 잘 알게 된다. 코딩 한 줄 할 때마다 이제 CPU가 고생할 것을 걱정하다. C 코드로는 한 줄이지만 이것이 번역되면 수백개의 명령어로 번역된다는 사실을 알게 되면 고민을 하게 된다. 보다 더 가볍게 이것을 해결할 수 있는 방법은 없는지 고민하게 된다. 급기야 대학원에 와서 고급 컴퓨터 구조를 배우고 나니 이제는 if 문 하나도 이걸 넣어야하나 말아야 하나 고민이 된다. if 와 같은 분기문 혹은 virtual 함수 호출이 가지는 그 깊은 함축성을 알고 나니 망설여진다. 정말 쪼잔함이 극에 달한 것이다.

물론 일반적인 경우에는 이렇게까지 쪼잔할 필요는 없다. 이런거 따지면 스크립트 랭귀지 같은 건 사용하지 못한다. 자바 스크립트와 같이 dynamic type을 지원하는 랭귀지를 볼 때 마다 가슴이 철렁거린다. "아니 이렇게 똑똑하게 타입 캐스팅을 하려면 비용이..." (그래서 내가 자바를 좀 싫어하는 것 같기도) 그러나 정말 한 사이클이라도 아껴야 하는 중요한 코드는 이런 쪼잔함이 필수다.


병특 시절 규모가 제법 큰 패키지 소프트웨어 개발에 참여했었다. 물론 시장에서 잘 나가는 제품이었지만, 소스코드를 보면 거대한 괴물이었다. 아무리 코어 엔진 개발 때는 정말 쪼잔하게 최적화를 생각해가며 주의 깊게 코딩을 하더라도, 시간이 지나면 무뎌지고 여러 유혹에 타협을 하게 된다. 생각치 못한 예외 상황이 나오면 주먹구구로 마구 해결하기 시작한다. 고객이 원하는 새로운 기능을 넣으려니 스파게티 코드로 덕지덕지 코드를 덧 붙인다. 결국 초기에 있었던 깔끔함은 사라지고 정신 없고 덩치 큰 소프트웨어가 되어버린다.

나에게 있어서 프로그래밍은 언제나 늘 나 자신과의 싸움이다. 특히 회사에서 일할 때 그랬다. 혼자서 프로그램을 짤 때는 내가 짜고 싶은 모든 것을 많은 시간을 동원해서 구현할 수 있었다. 그러나 회사는 그렇지 못한다. 최적화가 잘 된 멋진 결과물 보다도 어떻게 되었든 간에 돌아만 가는 결과물을 '제때' 내 놓는 것이 더 중요하다. 그래서 내가 목표한 그림은 이 만큼인데 이것을 위해서는 많은 시간이 필요하다. 그러나 현실은 그렇지 못하다. 나 자신이 세운 목표와 현실적인 목표 사이에서 타협을 해야 한다. 코드 한 줄 작성하면서 늘 쪼잔하게 고민하는 것도 사치가 된다.


이런 쪼잔함은 결국 '완벽함'과 일맥상통한다 볼 수 있다. 그러나 지나친 것은 늘 좋지 않다. 업무 성격상 '시간'이 생명인 프로젝트도 많을 것이다. 이런 곳에서 조차 이런 것을 강요하지 않는다. 그래 봐야 다른 사람만 피곤해지기 때문이다. 그러나 여전히 우리나라의 개발자들은 좀 더 쪼잔해져도, 좀 더 완벽해져도, 괜찮다.

내가 가진 프로그래밍 경력이라고는 풀 타임 회사 경력 3년과 알바 경험 3년 뿐이다. 그러나 적어도 내가 보기에 우리 개발자들은 너무 대범하다. 우리나라 프로그램은 항상 마지막 2%가 부족한 느낌을 받는다. 우리 개발자들이 조금만 더 쪼잔해지면 더 완성도 높은 그리고 더 최적화된 소프트웨어를 만들 수 있으리라 믿는다.


한줄요약:
근무시간에는 인터넷하지 말고 집중해서 코딩합시다.
(사실 저도 코딩 한 시간 인터넷 한 시간 했어요…)
by object | 2007/01/23 12:27 | 컴퓨터 | 트랙백(1) | 핑백(2) | 덧글(15)
트랙백 주소 : http://minjang.egloos.com/tb/842978
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from EI애LEI의 Scri.. at 2007/01/27 16:32

제목 : 그래 쪼잔하게 놀자!
프로그래머가 갖춰야할 덕목 - 쪼잔함 며칠전 C#교육 마무리즈음에서 교육을 온 강사니마가 예전에 최영의란 분이 계셨지 그 분 스타일이 이래 몇날며칠 골방에서 코딩하다 화려한 네온사인을 보고 갑자기 서글픔에 어찌할바 몰랐다면서 다시는 그러지 않겠노라고 결심하고 현재는 교육 컨설팅을 하고 있다라고 하시던데 이미 8비트 컴터가 16비트 컴터로 바뀌고 도스에서 윈도우로 바뀌고 베이직이 ......more

Linked at art.oriented : 컴.. at 2007/08/24 18:01

... 하면 할수록 그 만큼 공간을 더 쓰고 속도가 느려질 수 밖에 없다. 당연한 이야기겠지만 설계를 할 때도 항상 메모리는 얼마나 더 쓰고 수행 시간에는 어떤 영향을 미칠지 꼼꼼히 생각해야 한다. 그런데, 우리가 저장하는 형태가 XML이기 때문에 속성 값들이 모두 문자열로 바뀌어야 할 것이다. 어떠한 타입이던지 XML로 저장이 가능한 문자열 변환 함수가 제공 ... more

Linked at art.oriented : 민.. at 2007/08/29 11:54

... 었는데도 아직까지 대처가 미비하다는 것은 아쉬울 뿐이다.  흠, 너무 욕을 많이 했다. 행여나 이 프로그램을 만드신 개발자 분들이 보면 어떡하지. 아무튼 프로그래머가 갖춰야 할 덕목으로 쪼잔함에 이어 사용자에게 행복감을 주지는 못할 망정, "민폐를 끼치지 않는 프로그램을 만들자"를 더 추가하고 싶다. ps. MS Word 2007에 있는 블로깅 ... more

Commented by 학주니 at 2007/01/23 13:10
확실히 프로그래밍을 하다보면 하나하나 생각하면서 구문을 만들어야 할 경우가 많지요..
특히나 for문이나 while문같은 반복문에서부터 재귀호출문같은거 만들때는 정말 머리가 터져나갈 경우가 많지요..
요즘은 그래도 H/W 사양이 좋아서 어지간한 명령어도 잘 처리하지만..
그래도 쪼잔할 필요는 있다고 보네요..
Commented by 똘기 at 2007/01/23 13:12
네~~~
(과연 가능할까요???) ㅡ.ㅡ
Commented by abraxsus at 2007/01/23 15:43
크크크...
object군은 역시 시스템 프로그래머로서의 자격이 있읍니당..
시스템을하는 사람으로서 쪼잔함만한 미덕은 없읍죠..
어셈블리어를 왜 배워야하는지에 대한 대답을 올리셨넹..
최근에 배웠던 micro-kernel을 생각해봅시다..
이 사람 극히 쪼잔해서-_-;; L4 만들때 전체 커널을 purely 어셈블리어로만 짜던 사람입니다-_-;;..
할말 다했죠.. 논문봅시다.. performance를 쥐어짜고 쥐어짜서 instruction몇개가 하한인지를 얘기하는 사람입니다.
비싼 instruction마구 써대는 Mach가 망쳐놓은 micro-kernel의 앞길을 쪼잔함 하나로 살려내기에 이릅니다..-_-;;
쪼잔함의 힘을 보여줍니다...쿨럭...
역시,.. 어셈을 해야하나...-_-;;;
Commented by Eastwood at 2007/01/23 16:30
그 2%에 접근하기 위해 오늘부터라도 열심히 공부해야겠습니다 - 학부생
Commented by object at 2007/01/23 16:54
Knuth 선생님께서도 그래서 The Art of Computer Programming의 모든 예제를 어셈으로 올리셨죠.

Assembly language in the book
http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming#Assembly_language_in_the_book

All examples in the books use a language called "MIX assembly language," which runs on the hypothetical MIX computer. (Currently, the MIX computer is being replaced by the MMIX computer, which is a RISC version.) Software such as GNU MDK exists to provide emulation of the MIX architecture.

간단의역) 모든 예제는 RISC 형식인 MIX 어셈 언어로 쓰여있다.

Some readers are chagrined at the use of assembly language, but Knuth considers this necessary because algorithms need a context to judge speed and memory usage. It does, however, limit the accessibility of the book to many readers, and limits its usefulness as a "cookbook" for practising programmers, many of whom are not familiar with assembler, and even if they are, have no particular desire to translate assembly code into a high-level language. A number of more accessible algorithms textbooks using high-level language examples exist and are popular for precisely these reasons.

간단의역) 어떤 이들은 이거 뭐냐라고 욕한다. 어셈 모르는 사람에겐 어려운 책에 불과하다. 당장에 고급언어로 바뀔 가능성은 없다. 왜냐면 고급언어로 기술된 많은 알고리즘 책이 있기 때문이다. TAOCP는 정확함이 생명이니까.

* 요즘 컴파일러는 너무 똑똑해서 '어설프게' 어셈으로 짜면 더 역효과만 있는 것도 사실이지만.. 멀티미디어 하는 사람들에겐 MMX 어셈 코딩은 필수라고 합니다. 역시 컴공과에서는 어셈은 필수. 이상 MIPS로 3800줄 코딩 삽질 해본 사람의 답글.. -_-
Commented by 지녀 at 2007/01/23 23:53
본래 꼼꼼한 것과 쪼잔한 것은 종이한장 차이 인 것이지요(...)
Commented by 가짜집시 at 2007/01/24 04:06
전문직 종사자들에게는 가벼운 강박 경향이 있기 마련이라고 합니다. 어느정도 까지는 업무에 도움이 되지만, 도를 넘어서면 그것도 별로 좋지 않습니다. 코드에 대해 집착하는 양의 반의 반만이라도 '문서'에 집착한다면 참 좋을텐데 말입니다 *웃음*
Commented by 기욘쓰 at 2007/01/24 13:35
동감하고 갑니다 ^^ 쪼잔해져야죠. 적어도 프로그래밍할땐요.
Commented by EIOHLEI at 2007/01/27 16:17
쪼잔하다고 쓰고 꼼꼼함이라고 읽으면 되는 것이지요

기본과 원리에 충실히 코드를 짜는것이 꼼꼼함이요

대충대충에 익숙해지면 그런 꼼꼼함을 쪼잔함이라고 매도하는 것이라고

저도 우겨 볼렵니다.

트랙백 신고합니다.
Commented by object at 2007/01/27 17:29
재밌는 글 잘 봤습니다. "쪼잔해지자"라는 표현은 좀 웃길려고 그렇게 한 것이구요. "쪼잔하다고 쓰고 꼼꼼함이라고 읽으면 되는 것이지요" 제 의도를 정확하게 이해해주셔서 감사합니다.
Commented by Yarmini at 2007/01/29 10:45
하핫..쪼잔함의 표현 잘 봤습니다^^ 사실 간단한 문장 넣을 때도 내딴에는 이리저리 고민하는 데 옆에서 보면 답답해 보이죠^^ 하지만 결국 하나하나 신경을 쓰면서해야 나중에 그것이 습관이 되고, 이리저리 흔들리지 않는 완벽함에 가까워지는 것 같습니다. (저도 근무시간...뜨끔@_@)
Commented by indirock at 2007/02/02 17:37
늘 고민하는 것이네요. 개발이 늘 남보다 느리다고 생각하고 있습니다.
실제로 일 할 때도 보면 키보드에 손이 올라가 있는 시간보다는 모니터 뚤어지게
소스코드 쳐다보는 일이 더 많습니다. 열심히 연습장에 이런저런 모델을 그려보기도 하고
말씀하시는 것처럼 if를 쓸것인지 case 를 쓸 것인지.. for루프를 돌릴건지...
한줄을 추가하더라도 고민을 많이 하게 되지요. 하지만 그렇게 한번을 생각해 보면
어느정도 잘 정돈된 프로그램을 만들 수 있는 것 같습니다.
Commented by 백승우 at 2007/08/24 19:49
if문 하나더 추가는 '게으름' 때문입니다. ㅡㅡa
Commented by -A2- at 2007/08/30 00:18
정말 괴로운 습관입니다. ㅠ_ㅠ
Commented by havien at 2007/09/03 03:26
이 글을 이제야 봤네요.
저도 고민해보고는 하는데, 역시 회사일이라서 그런지 그냥 대범하게 코딩을 많이 하곤 합니다.
좋은 말씀 잘 보고 갑니다.

:         :

:

비공개 덧글

<< 이전 페이지 다음 페이지 >>





by 김민장 2008 이글루스 TOP 100
최근 등록된 덧글
개발자 입장에서의 수많은 ..
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
최근 등록된 트랙백
조엘 스폴스키의 강연 (Sta..
by 인덕원칸타타
[Redis] sds.c를 분..
by 조급하지말고 천천히
메뉴릿
이글루 파인더

website counter

Add to Google

rss

skin by 이글루스