2005년 3월 12일 토요일

나는 STL이 좋다.

STL : C++ Standard Template Library


뭐 Java가 더 좋네 C가 더 좋네.
많은 말을 할 수 있지만
나는 C의 char*보다 STL string이 좋다.(I like)
C의 array보다 STL vector가 좋다.(I like)


그럼 C array와 char*를 좋아하는 사람들이 이렇게 말한다.
"그거 내가 쓰는 것보다 느리잖아.(Not good)"


물론 딱 한번만 값을 넣고, 찍는 다면 느리다.
하지만 분명히 string을 복잡하게 다를 때는 쉽고
memory 할당 문제로 머리 아파할 바에는 STL이 낫다.
(그게 STL의 존재 이유 중 하나니까.)
프로그래머가 여간 smart하고 memory에 세심하게 신경쓰지 않는 한
STL을 쓰는 게 이득이다.
우리는 memory할당, 해제 때문에 골치 아파할 시간이 없다.
내일까지 프로젝트는 완성되야 하고, 깔끔해야 이해도 쉽고, 유지도 잘된다.
눈에 잘 보이는 심플하고 멋진 디자인이 최적화도 쉽다.
pointer가 난무하는 프로그램은 처음에는 빨라도
나중에 이해하기 어려워져서 계속 시간 잡아먹고
결국 위험을 줄이기 위해 memory copy가 난무하게 되면 손해가 된다.
(It's better.)


Cache, Compiler, Function call, Garbage Collection ... 모두 같은 문제다.
정말로 간단한 case에는 이런 것들 안 쓰는 게 더 빠르지만
(Asembly로 짜든지 CPU instruction으로 박아 넣든지. General Purpose Computer를 포기하고 NAND회로로 반도체로 굽든지.)
문제가 복잡해지고 인간 머리로 커버가 안되고 신경쓰기 불가능해지면
이런 것들이 위력을 발휘한다.
(Complexity 줄이기, run-time에 동적으로 판단하기)


아무튼 그래서 내가 개발하는 환경에서는 STL이 최적이라고 생각한다.
(I Like and It's better.)
-------
buffer overflow 체크도 안하고 memory copy도 무진장 해대는 사람들이 자꾸 C가 좋다고 그러니까 적어봤다.
buffer overflow 체크 잘하고 memory 할당, 해제를 잘 하는 사람이 그렇게 말하면 아무말 안하겠다.(못하겠다.)
Rapid development가 필요한 프로젝트에서 마치 embeded system같이 제약된 환경으로 착각하면서 코딩하는 걸 못 봐주겠다.


사람들은 왜 내가 perl로 짤 때는 아무 말 안하면서
C++ STL을 쓰면 char*가 빠르니까 바꾸자고 하는 걸까?;;
STL 많이 쓴걸 pointer 덩어리로 바꾸는 거나,
perl로 짠걸 C, C++로 바꾸는 거나 비슷한데.
(난이도든, 성능이든 뭐든...)


사람들은 되게 쓸데 없는 부분을 최적화 하고 있다.
잘 안쓰는 부분을 괜히 심심해서 최적화하고 감으로 대충 찍어서 좀 고치고..
심지어는 시스템의 일부분이 성급하게 최적화되면서
개별 모듈을 빨라지지만 전체 시스템이 느려지기도 한다.
내 모듈을 빠르게 하는 짓이 다른 사람의 모듈을 느리게 만든다. (책임 전가)


의사가 응급환자를 수술하는 것 같은 딜레마에 빠지게 된다.
수술을 안하자니 그냥 죽어버릴테고, 손쓰지 못한 게 아쉽고, 유족들이 화를 낸다.
반대로 수술을 해도 잘못하면 더 빨리 죽을 수도 있다.
내가 죽인게 아니냐는 누명쓰면서 유족들이 소송 걸 수도 있다.


만신창이 중환자 코드를 리팩토링하느니 의사가 되는 게 낫겠다.
같은 딜레마에 빠지면서 월급 더 받으니까.
이런 딜레마가 싫어서 프로그래머가 된건데,
우리는 코드의 창조자로써 그런 딜레마를 피할 능력이 있는 건데,
그런 능력마저 발휘하지 못한다면 이게 무슨 행복한 창조자란 말인가.


 

댓글 없음:

댓글 쓰기