E D R , A S I H C RSS

프로그래머�길

마소 7월달 (1999년꺼로 기억) �승용씨� 글. �유게시�� �용� 글 옮김. (�유게시� 200번 대 글�군. -_-;)

��중 한 사람� 필��게 �런 질문� 한�� 있다.

"어떻게 하면 프로그래�� 잘 할 수 있습니까? 만약있다면 그 해답� 가르� 주세요"

필�� 답변� '해답� 없습니다.'였다. 하지만 어렵게 질문해온 ���게 어설픈 답변� 할 수 없기 때문� 프로그래머� 길�란 어떤 것�가� 대해 답변� 보낸 �� 있다.
프로그래�� 대한 정�는 여러가지가 있지만, 필�는 �와 같� �하고 싶다.

'프로그래��란 정열로 시작해 �기로 �나는 �련� 작업니다. 정열� 짧고 높지만 �기는 길고 낮다.'

프로그래머는 화가와 같다. 화가� 그림� 대한 ��� 프로그래머� 코드� 대한 ���며, 화가� 화�� 프로그래머� ��� 것�다. 단지 프로그래머는 화가가 사용하는 붓대신 �� �용한 코딩� 한다는 차�� ��다. 맨처� 코딩� 대한 ��� 단순하게 시작한다. 하지만 그 ��� 현실�으로 �어내기 위해서는 많� 시행착오를 거치게 �다. �신� 실력� 한탄하기� 하면서 �신� 만들어낸 알고리즘� �뻑 취하기� 한다.
초반� 정열� 무섭다는 표현� 맞� 것�다. 정� �신� ��해낸 알고리즘� 성공 여부를 알아보기 위해 무섭게 그 �� 매달린다. 밤과 낮� 서로 바뀌고, 모든 사회� 문화권�서 소외�다. �와 같� 초반� 정열� 그 �� 어디�지� 모르는 �아�취� 행�� 것�다. 하지만 �러한 정열� 바로 시들어 버린다. 현실�� 안주할 것�가 아니면 ��� 선�할 것�가 하는 기로� 놓�게 �기 때문�다.

현실 �� 안주는 시간과� 싸움�다. 모든 프로�트는 정해진 시간� 갖고 있다. 초반 설계 단계� 수립� 계�� 불가피하게 수정�는 경우가 태반�다. �는 코딩중� 예�치 못한 복병(?)� 만나게 �는 경우가 있� 수 있으며, 관리�� 무리한 계�으로 초반 계�� 수정�는 경우� 있다. 모든 프로그래머들� 항� 후�� 치중하게 �다. 현실�피를 위한 ��양으로 몰아세우는 격�지만, 대부분� 경우는 관리�� �해 부족� �한 비현실� 계�� 주를 �루기 때문�다.

�와 반대로 ��� 선�하는 프로그래머는 그 다�부타 �신과� 싸움� 시��다. �기 바로 �것�다. �히 우리는 능력� �월한 사람보다는 성실한 사람� � 높� �가해중다. 프로그래머 역시 �기가 없으면, 완성� 높� 프로그램� 만들지 못한다. �신� 만든 알고리즘� 아무리 �월하다고 해� �를 �용한 애플리케�션� 완성�가 높지 않으면, 아무리 �월하다고 해� �를 �용한 애플리케�션� 완성�가 높지 않으면, 아무� 알아주지 않는다. 필�는 수많� 디버깅과 요구사항� 수용해 나가면서 �신� ��� 실현해 나가는 프로그래머를 높� �가하고 싶다. 그리고 그러한 사람�야�로 발전 가능성� 있으며, 신뢰할 수 있는 프로그램� 만들기 때문�다.

사실 완벽한 코딩�란 존재하지 않는다. 다만 완벽� 위해 프로그래머는 키보드를 애�으로 삼� ��다. �기있게 코드를 디버깅하는 프로그래머는 그만� 버그� 수를 줄� 수 있고, �한 추가 요구사항� 대한 대비� 충분히 할 수 있다. 따�서 필�는 프로그래머란 정열보다는 �기가 � 필요하다고 �하고 싶다. 정� 진정한 프로그래머란 �신� 역량보다는 한 주제� 대한 완벽� 가까운 해결책� 찾아내는 �기있는 사람��고 ��한다. 우리 모� 학창시절 어려운 수학문제를 풀� 때를 ��하면서, 그 �미를 �새겨보�.


사람� 누구나 어떤 �� 하든 넘어야 할 벽� 만나기 마련�다. 프로그래머역시 여러가지 벽� 만나게 �는�, 필�는 컴퓨터� 벽� �게 �해� 벽과 창조� 벽, 그리고 마�� 벽으로 구분하고� 한다. �해� 벽� 초보�가 넘어야 하는 벽�고 창조� 벽� 중급�가, 그리고 마지막 벽� 마�� 벽� 전문가가 넘어야 하는 벽�다.

� 글� �고 있는 ���면 어� 정� 프로그래�� 해본 경험� 있� 것�다. 초보�� 함� 프로그래�� 입문하고� 하는 사람� �한다. 즉 컴퓨터 사용부터 천천히 배워나가고 있는 사람들�다. �들� 특정 학� 혹� 학�� 정규 과정� 통해 �료들과 함께 배우기� 하고, �는 개��으로 학습해 나가는 경우� 있다. 초보�들� 공통�� 전문가들� 논�� 아� �해 할 수는 없지만� 관심� 갖고 있으며, 컴퓨터로 모든 �� 가능할 것��는 부푼 기대� 차있다는 것�다. 여기서 그들� 기대�� 문제시 �다. 기대가 �면 �수� �아오는실��� 비례한다.바로 컴퓨터로 할 수 있는 �� 한정� 버리는 시��서 � ��� 진전� 없게 �는 것�다.

초보� 들 중 주위 사람들 보다 좀� 많� 내용� 알고 있다는 �만심� 갖고 있는�들� 특히 그럴 확률� 높다. �들� �종� 유틸리티를 �용해 남들� 하지 못하는 기법� �혀 �를 �랑하면서 우월�� 사로 잡히게 �다. 하지만 그러한 우월�� 그리 오래 가지 않는다. �신보다 � 뛰어난 전문가를 만나면 '�대체 내가 무엇� 하고 있는가?'하는 반문� �기기 때문�다. 여기서 �들� '�해� 벽'� 피부로 ��며, 컴퓨터를 �용한 새로운 �전� 받아들�게 �다. 물론 � 시��서 �해� 벽� 뛰어넘지 못하는 �들� 있� 것�다.하지만 프로그신머� 길� 걸어가기를 �하는 �는 �신�게 닥친 �황� �파하기 위한 해결책� 찾는다. �것� 바로프로그램�다. 필�는 �들�게 �렇게 �하고 싶다.

"프로그래���는 것� 단순히 코딩한다는 �미보다는 컴퓨터를 �해한다는 �미로 받아들여야 한다."

프로그램� 컴퓨터가 �해할 수 있는 기계어를 사람� 좀� 쉽게 알아볼 수 있�� 만든것� 불과하다 �를 다시 표현하�면, 기계와 언어소통하기 위해 프로그램� 배운다는 것�다. 우리는 외국어를 공부하면서 문화� �질�으로 �해 단어� �미를 파악하기 힘들때가 종종 있다. �는 그 나�� �습과 역사를 �해하지 못하기 문�다. 컴퓨터� 마찬가지 �다. 컴퓨터를 �해하지 못하면 프로그램 역시 서투른 번역� �버린다. 다시 한번 논하지만, 프로그램� 배우는 과정� 컴퓨터를 �해한다는�미로 받아들�면 좀� 쉽게 중급�� 길로 �약할 수 있� 것�다.

첫번째 벽� �해� 벽� 뛰어넘� 중급�는 그들만� 고유 �역� 갖게 �다. �것� 바로 코딩�다. 코딩� 그 방법만 알면 쉽게 처리할 수 있다. 방법� 경륜�� 해� 과언� 아니다. �공� �신� 만든 ��기를 보며, 완벽하지 않� 것들� �반�� �해할 수 없� 정�로 부셔 버린다. 우리는 아무리 보아� 그것 들� 차��� 알아낼 수가 없다. 하지만 경륜� 많� �공� ��기� 빛깔과 형태만 보아� 좋� ��기�지 아니면 버려야할 ��기�지 알아낸다. 프로그램� 마찬가지�다. 컴퓨터를 �해하고 있는 프로그래머는 실행�고 있는 �용 프로그램만 보다� 어떻게 그것� 만들어 냈는지 알 수 있다 그리고 어떤 어려운 문제가 닥치��� 해결�� 찾아낸다.

그렇다면 � 정�� 실력� 갖추기 위해서는 어떻게 해야할까? 아마� 많� ��들� �금해하는 문제� 것�다. 정확한 해답� 있� 수 없는 질문�다. �어� 왕�는 없다�는 표현� 빌어 프로그램�는 왕�가 없다�고 표현하는 것� 정답� 것�다. 하지만 왕�는 없지만 방법� 있다. 바로 �신� 할 수 있다고 �단하는 것보다 항� � 많� �� 만들어 내�는 것�다. �미는 �전 정신� 필요하다는 뜻�다. 예를 들어 �신�게 주어진 �� 10만�� �기�면 �신� 목표를 20정�로 세우는것�다. 그러면 10만�� 하기 벅차다고 ��� 것� 어�날 목표한 10� �루고 20으로 다가가고 있는 �신� 발견하게 �것�다. 만약 목표한 10� �루지 못했다고 해서 실�하지는 ��. ��켜 보면 프로�트가 실패했다고 해서 잃는 것보다는 얻� 것 � 많다는 것� 알게 �것�다. 필�는 중급�� 벽�'창조� 벽'� 해결하기 위해서는 무엇보다� �전 정신� 필요하다고 주장하고 싶다.

프로그래머들� 마지막 벽� 마�� 벽, � 벽� �당한 �미를 가진다. 전문가로 성장한 프로그래머들� 누구보다� 마�� 굳게 닫혀 있는 경우가 많다. �신만� 완벽한 코드를 작성해 낸다는 마��세가 �들� 그렇게 만들어 버린다. 프로그래머� 고집� 가히 �로 표현할 수 없� 정�로 완강하다. 아니 고집� 아닌 아집� 가�다. 고집� �신� 스스로 잘못� �정할 수 있는 수준�지만, 아집� 그 잘못� �신� 아닌 다른 사람� �향� �해 발�한 것�� �하는 것�다. 고집� 없는 프로그래머는 프로그래머� 할 수는 없지만, 그 고집� 아집� �서는 안�다.

만약 �신� 만들어낸 �론� 우수하다고 ���다면 약간� 고집으로 �신� �견� 관철시킬 수 있는 �세가 �들�게 필요하다. 다른 팀�� 사고를 �신� �론으로 집중시키고, 그 �론� 타당성� 타진해 보는 것� 바람�하다. �때 고집�아집으로 바뀌지 않� 시��거 차협�� 찾아야 할 것�다. 만약 �신� �론� 채��지 않��� 실�하지는 ��. 다만 �러한 것� 만들 수 있다는 확신만 버리지 않는다면 언젠가 �신� �론� 옳다는 사실� 남들� �정해 줄것�다.

지금까지 프로그래머가 걸어가면서 만나게 �는 세가지 벽� 대해서 살펴 보았다.물론 모든 �들� �러한 벽� 만난다는 것� 아니다. 하지만 필�가 지금까지 프로그래�� 해오면서, 그리고 많� 사람들과 같� 프로�트를 진행해 오면서 경험한 �� 토대로 나름대로 정리해 본것�다. 아� 필�� 세번째 벽� 마�� 벽� 완전히 뛰어 넘었다고 ��하지 않는다. 만약 �벽� 뛰어넘는다면 � 다른 제4� 벽� 다가올지� 모른다.

불�� 경전� 반야심경(般若心經)� '색즉시공 공즉시색(色�是空 空�是色)��는 용어가 있다. �를 풀�하면 '얻는다는 것� 공 잃��요, 잃어버리는 것� 곧 얻���'고 �할 수 있다. 필�가 � 깊� �뜻� �해하고 있다는 것� 아니다. 그렇다고 종�� 가치관� 뚜렷하다는 것� ��욱 아니다. 하지만 프로그램� �성해 오면서 반야심경� 전하는 � �뜻� 조금�나마 �해하게 �다는 표현� �절할 것�다.

�간� 욕심� �� 없다는 표현�기� 한 � �� '어떻게(어떤게? - 문맥� 어�게 � 어울릴까요 - 오타수정하� 임��) 프로그래머들� 가져야 할 �세�가'�고 반문하는 ��들� 있� 것�다. 지금까지 프로그래머� 길� 연재해 오면서 필�는 프로그래머�면 욕심� 갖고 있어야 한다고 강조했고, �한 �전정신� �해 그 욕심� 실현하�고 표현했다. 그렇다면 역설�� 표현� 아닌가!

만약 �와 같� ��한 ��가 있다면 필�가 ��하는 내용� 정확하게 파악한 것� 아니다. 버리�고 표현한 것� �기 �신� 가지고 있는 ��, 즉 프로그램� 대한 ��� 버리�는 것�다. 우리 �간� 변화� 대한 불안함� 내�하고 있다 특히 나�가 들수� 그 정�는 심화�고, 젊� 사람들� 사고를 �해하기보다는 왜곡�다고 �하게 �다. �는 그 사람� 가치관� 고정� 버렸기 때문� �신� 사고와 �치하지 않는 다른 모든 행�� 잘못�다고 ��한다.

프로그래머들� 가장 쉽게 빠져드는 유혹� 바로 �런 ��다. �신� 지금까지 프로그램� 해�� 방��야�로 정��며, 진리�고 ��한다. 컴퓨터는 하루가 다르게 변하고 있지만 아�까지� 구시대 유물� 전부�고 ��한다. 필�는 단호하게 �하고 싶다.

"�신� 작성한 코드를 버려�"

�신� 지금까지 작성한 코드를 버린다는 것� 실로 엄청난 ��다. 하지만 프로그래머�면 �신� 만든 코드를 �기 �신� 관�� 아닌 다른 관��서 �신� 코드� 대해 비�할 수 있는 능력� 키워야한다. �러한 비�� �신� 대한 코딩 가치관� 변화를 가져야한다� 것�고, 변화� 물결� �참할 수 있어야 한다는 뜻�다.

그렇다면 어떤 시�� 코드를 버려� 하는가? 필�는 �게 � 가지 시�� 대해 논하고� 한다. 첫번째 시�� 프로�트를 진행하고 있는 과정�서 발�한다. 정확하게 표현하면, 새로운 기능� 가능성� 타진해 보는 프로토타입 프로그램� 완성한 시�� �다. 소프트웨어 공학�서 설계� 중요성� 강조하기 위해 �체지향��는 패러다임� 만들 만� 코딩�전� 설계 단계를 강조하고 있다 물론 잘 작성� 프로그램 설계는 프로토타입��는 중간 프로그램 �성� 필요 없� 설계 명세서� �한 코딩만 하면 완벽한 �용 프로그램� 개발할 수 있다.

하지만 필�� 경험� 미뤄보면 �러한 경우는 업무 ��화와 같� 특정한 형�� 있는 �용 프로그램� �용�다. 만약 프로�트 설계�가 경험� 없는 �용 프로그램� 만들어야 한다는 가정� �면 �황� 반전�다. 즉 설계�� 미경험� �한 시행착오가 발�하는 것�다. �러한 시행착오를 줄�는 방법� 새로운 기술� 대한 프로토타입� 개발�기는 하지만, 프로토타입으로 �나야 한다. 하지만 우리� 실정� 아�까지� 프로토타입� 완성� 프로그램으로 ��하고 있는 경향� 지배��것 같다.

코드를 버러야 하는 �번째 시�� 완성� 프로그램� 버젼 업그레�드�서 발�한다. 첫번째 경우보다 � 많� 용단� 필요로 하는 시��기� 하다. �용 프로그램� 버전업� �미 만들어진 �용 프로그램� 사용�� 추가 요구사항� 수렴해서 개발한다는 �미와 �전 버전�서 발�� 문제�� 해결한다는 �미를 �시� 가지고 있다. 간혹 사용�� 추가 요구사항� 프로그래머가 ��할 수 없는 경우� 때� 있다. 그 모든 요구사항� 다 수렴해 프로그램� 만들수 는 없기 때문� 프로그래머는 타협�� 찾아 다�버전� 기능� 제한시키게 �다.

바로 사용�와 프로그래머 사��서 발��는 타협�� 결정하는 시��서 프로그래머� 마� 가�� 능��� �세�지 수��� �세�지 따� 코딩� 방향� 결정�다. 능���고 �극�� 프로그래머는 사용�� 요구사항� 검토해 참신한 아�디어� 경우 �를 �극 수렴한다. 하지만 수��� 프로그래머는 현재 버전�서 지��수 있는 사항만� 검토하는 성향� 있다.

프로그래머들� � 시��서 ��하는 것� 시간�다. 주어진 시간� 어떻게 그 기능� 추가할 것�가를 걱정한다. 너무 많� 코드� 변화는 주어진 시간� 완성할 수 없다는 것�다. 따�서 �당한 타협�� 찾는 것� 프로그래머� 보편�� 경향�다. 하지만 사용�� 요구사항� 수렴하는 방향으로 전환한다면, 프로그래머는 �신� 코드를 다시 한번 ��하게 �것�다. 필�는 �것� 바�는 것�다. 지신� 코드를 다시한번 ��켜 보면 , �신� 오류를 찾�수 있고, � 사용�들� 바�는 방향� 예측할 수 있게 �다. 바로 �것� 완벽� 가까운 코드를 작성하는 방법� 것�다.

한정� 시간안� �미 작성� 코드를 버리는 것� 낭비란 ��하지 ��. 코드를 버리고 다시 작성한다고 �전 만� 시간� 많� 소비�지는 않는다. 만약 프로그래머가 10� �안 작성한 코드를 겸허한 마�으로 다시 작성한다면 2��서 4� 안� � 좋� 코드를 작성할 수 있� 것�다. 물론 코드를 버리고 다시 작성하기 때문� 시간� � 필요한 것� 사실�다. 하지만 시간� 종�� 코드가 아닌 시간� 지배하는 코드를 만든다는 신�으로 �활하�. 모든 프로�트� 시간� 유���수 있다. 코딩� 사람� 하는 창조�� 작업�기 때문� 그 누구� 시간� 예측할 수는 없다. 다만 �기 �신 스스로 잘못� 부분� 찾아 수정해 잘 다듬� 코드를 보면 나름대로 누구� �껴보지 못한 �신�� �길 것�다.

�기가 작성한 코드� 대한 �신�, 바로 � �신�� 프로그래머� �존심�고 코딩하는 �거움� 아�까!

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:25
Processing time 0.0110 sec