
2008/07/23 20:36
프로그래밍에서 내가 가장 중요하게 여기는 것
제목을 달기 참으로 마땅치 않아서 저렇게 뽑긴 했지만, 첫 줄의 마침표를 채 찍기도 전에 이렇게 제멋대로이고 자의식에 가득찬 글을 당당히 올려도 좋을까 하는 고민부터 둥실 떠오른다. 이 대한민국에만, 아마 그 수를 모아보면 왠만한 광역시 인구는 훌쩍 넘길만큼 많은 "프로그래머"라는 직업을 가진 "전문가"분들이 나 같은 햇병아리가 부리는 혈기의 편린에 부디 불쾌하시지는 않았으면 좋겠다.
이 글은 내 주제에 넘는, 굉장히 잘난체 하는 소리가 될테니 혹 그런 종류의 글에 면역이 없거나, 이 글을 다 읽고도 내 안티가 되지 않을 자신이 있는 사람만 편안한 마음으로 읽어주길 희망한다.

내가 보기에 많은 사람들이 프로그램을 만드는 것을 보면 크게 세 가지 정도의 요소를 염두에 두는 것 같다.
어떤 언어로 작성할 것인가, 어떻게 하면 더 강력하게(빠르게) 만들 것인가, 어떤 기능을 넣을 것인가.
언어 선택의 논쟁은 언제나왼손은언어는 거들뿐 이라는 한마디로 정리가 되는 듯 하지만, 항상 개발자 게시판에서 잊을만 하면 꼭 떠오르는 논제다. PHP가 좋겠는가, Java로 개발하는 것이 좋겠는가. "몸값"이라 부르는 평균 연봉으로 대부분 Java 개발자가 더 많이 받지 않나? 라는 출처 및 사실 확인이 거의 어려운 이야기1가 오가며 인터넷에서 벌어지는 싸움의 패턴 {(짜장이 좋아 vs 짬뽕이 좋아) + 난 우동}을 반복하곤 한다.
다른 한편으로는 0.0001초라도 Elapsed Time을 깎아내기 위해, 어떤 구조로 어떤 함수를 어떤 형태로 써야 좋을지 많이들 고민한다. for ($i=0; $i < count($array); $i++) 보다는 for ($i=0,$n=count($array); $i < $n; $i++) 이 낫다든가, eregi 보단 preg_match 를 쓰거나 strpos 로 대신 할 수 있다든가 하는 기초 레퍼런스적인 것이나, DB설계에 있어 SQL에 function 사용이 많거나 잘못된 JOIN 사용은 Query 속도를 많이 저하시킨다든가 하는 것 같은것에서부터 적절한 AJAX 사용과 Caching, Include에서 발생하는 오버로드를 계산한 파일 구조 등등 Architecture 적인 것들까지.
어떻게 하면 더 많은 기능을 넣을까 고민하는 사람들도 있다. 덧글에 덧글이 달리면 원래 덧글을 달았던 사람에게 ping 할 수 있는 기능이나 (TT/TC의 덧글알리미), 분산된 시스템에 배포 설치된 소프트웨어로부터 특정 Central 에 Sync 할 수 있는 기능이라든가(TNC이전의 태터툴즈-이올린, 그것을 흉내내기 시작한 zbxe Live 등). 개발자도 사람이고 취향에 방향성이 있다보니 개발자마다 Cool하다고 생각하는 아이템이 있다. 그것을 떠올리며 "나도 이런 기능을 넣고 싶다"고 해서, 그저 기능을 넣는데에 급급한 사람들이 의외로 많다.
하지만, 내가 프로그램의 설계와 개발에 있어서 제일 중요하게 생각하는 것은 "개발자의 의도"가 아닐까 한다. 좀 그럴싸하게 말하자면 철학적, 사상적 기반이라는 것이다. 아무리 많은, 멋진 기능이 빠르게 동작하도록 잘 설계를 했고, 또 그 목적에 부합하는 언어와 플랫폼을 선택했다 하더라도, 본질적으로 무엇을 추구하는가, 무엇을 이루고자 하는가가 분명치 않다면 그 소프트웨어의 가치는 개발에 들인 노력에 비해 너무 많이 떨어질 수 밖에 없다. 욕먹을 각오하고 폼재는 소리 하자면, "영혼없는 육체는 단백질 덩어리, 철학없는 소프트웨어는 코드 덩어리"라는 것으로 요약하고 싶다.
물론 많은 개발자들이 나름의 비전과 이상향을 갖고 프로그래밍을 한다 (물론 먹고 살기 위해 부득이하게 마음이 아닌 목구멍과 위장이 그리는 이상향을 위해 개발을 하는 경우가 종종 발생하기는 하지만). 하지만 혹여 너무 좁은 시야로, 특정한 기능을 그저 더 빠르고 그럴싸하게 개발하면서 "난 이런 기능feature도 만들 수 있어"라고 자신만만해 하는 분이 계시면.. 자신이 그 기능을 만듦으로서 "누가", "왜" 그 기능을 "어떻게" 쓸 것인지 마음속으로 그려보라고 권하고 싶다. 남이 말하는 프로그래밍 철학에 그저 매몰되어 오렌지를 어린쥐로 읽어야 한다는 어느 엘리뜨와 같이 광신도가 되지 말고, 스스로의 머리와 마음으로 생각하는 버릇을 들이라 권유하고 싶다.
당신은 무엇을 위하여, 어떤 마음으로 오늘도 개발을 하는가?
이 글은 내 주제에 넘는, 굉장히 잘난체 하는 소리가 될테니 혹 그런 종류의 글에 면역이 없거나, 이 글을 다 읽고도 내 안티가 되지 않을 자신이 있는 사람만 편안한 마음으로 읽어주길 희망한다.

릴렉스 릴렉스!
내가 보기에 많은 사람들이 프로그램을 만드는 것을 보면 크게 세 가지 정도의 요소를 염두에 두는 것 같다.
어떤 언어로 작성할 것인가, 어떻게 하면 더 강력하게(빠르게) 만들 것인가, 어떤 기능을 넣을 것인가.
언어 선택의 논쟁은 언제나
다른 한편으로는 0.0001초라도 Elapsed Time을 깎아내기 위해, 어떤 구조로 어떤 함수를 어떤 형태로 써야 좋을지 많이들 고민한다. for ($i=0; $i < count($array); $i++) 보다는 for ($i=0,$n=count($array); $i < $n; $i++) 이 낫다든가, eregi 보단 preg_match 를 쓰거나 strpos 로 대신 할 수 있다든가 하는 기초 레퍼런스적인 것이나, DB설계에 있어 SQL에 function 사용이 많거나 잘못된 JOIN 사용은 Query 속도를 많이 저하시킨다든가 하는 것 같은것에서부터 적절한 AJAX 사용과 Caching, Include에서 발생하는 오버로드를 계산한 파일 구조 등등 Architecture 적인 것들까지.
어떻게 하면 더 많은 기능을 넣을까 고민하는 사람들도 있다. 덧글에 덧글이 달리면 원래 덧글을 달았던 사람에게 ping 할 수 있는 기능이나 (TT/TC의 덧글알리미), 분산된 시스템에 배포 설치된 소프트웨어로부터 특정 Central 에 Sync 할 수 있는 기능이라든가(TNC이전의 태터툴즈-이올린, 그것을 흉내내기 시작한 zbxe Live 등). 개발자도 사람이고 취향에 방향성이 있다보니 개발자마다 Cool하다고 생각하는 아이템이 있다. 그것을 떠올리며 "나도 이런 기능을 넣고 싶다"고 해서, 그저 기능을 넣는데에 급급한 사람들이 의외로 많다.
하지만, 내가 프로그램의 설계와 개발에 있어서 제일 중요하게 생각하는 것은 "개발자의 의도"가 아닐까 한다. 좀 그럴싸하게 말하자면 철학적, 사상적 기반이라는 것이다. 아무리 많은, 멋진 기능이 빠르게 동작하도록 잘 설계를 했고, 또 그 목적에 부합하는 언어와 플랫폼을 선택했다 하더라도, 본질적으로 무엇을 추구하는가, 무엇을 이루고자 하는가가 분명치 않다면 그 소프트웨어의 가치는 개발에 들인 노력에 비해 너무 많이 떨어질 수 밖에 없다. 욕먹을 각오하고 폼재는 소리 하자면, "영혼없는 육체는 단백질 덩어리, 철학없는 소프트웨어는 코드 덩어리"라는 것으로 요약하고 싶다.
물론 많은 개발자들이 나름의 비전과 이상향을 갖고 프로그래밍을 한다 (물론 먹고 살기 위해 부득이하게 마음이 아닌 목구멍과 위장이 그리는 이상향을 위해 개발을 하는 경우가 종종 발생하기는 하지만). 하지만 혹여 너무 좁은 시야로, 특정한 기능을 그저 더 빠르고 그럴싸하게 개발하면서 "난 이런 기능feature도 만들 수 있어"라고 자신만만해 하는 분이 계시면.. 자신이 그 기능을 만듦으로서 "누가", "왜" 그 기능을 "어떻게" 쓸 것인지 마음속으로 그려보라고 권하고 싶다. 남이 말하는 프로그래밍 철학에 그저 매몰되어 오렌지를 어린쥐로 읽어야 한다는 어느 엘리뜨와 같이 광신도가 되지 말고, 스스로의 머리와 마음으로 생각하는 버릇을 들이라 권유하고 싶다.
당신은 무엇을 위하여, 어떤 마음으로 오늘도 개발을 하는가?
- 객관적으로 통계를 내 본적도 없고, 그렇게 할 수 있는 여건도 아니니, 주변에 어떤 종류의 개발자들이 포진해 있는가에 따라 판단이 많이들 달라진다. 그리고 또 그 판단은 자신이 서 있을 위치를 바꾸어 놓기도 한다. [돌아가기]
http://blog.laziel.com/trackback/802












0
5
