나는 코더다
운도 좋다. 이번 한국방문 일정 중에 켄트 벡이 방한해서 세미나와 워크숍을 진행한다고 한다. 워크숍까지는 힘들겠지만 가족행사랑 시간이 겹치지만 않는다면 세미나에는 참석할 생각이다.
켄트 벡을 처음 가까이에서 본 것은 재작년 샌프란시스코 QCon에서이다. 그 때는 키노트 발표자로 나와서 Agile의 최신경향에 대해서 이야기했다. 그 전에 보았던 사진이나 동영상의 모습과는 달리 머리를 확 밀었던 때라 매우 강한 포스가 느껴졌던 것 같다. 열정과 감정이 넘쳐 항상 흥분해 있는 것 같은 마틴 파울러나 밥 마틴과는 완전히 반대로 중얼중얼 교수 스타일의 그의 발표는 사실 재미도 없고 지루해 보인다. 하지만 그 내용을 제대로 이해하고 듣는다면 그만큼 짜릿하고 흥분되는 이야기를 해주는 사람도 없을 것이다.
이번 세미나는 그의 블로그의 글을 통해서 가끔 공개했던 설계에 관한 그의 생각과 그 동안 연구해왔던 주제들에 관해서 깊이 있게 다루는 시간이 되지 않을까 기대된다. 그 동안 보았던 그의 강의나 글을 생각해보면 내용은 결코 쉽지 않을 것이다. 전문 동시통역이 제공된다고는 하나, 과연 통역을 통해서 깊이 있는 발표 내용을 따라 잡을 수 있을지 의문이다. 켄트 벡은 상세한 발표 슬라이드를 준비하는 것을 본 적이 없다. 주제어나 간단한 그림 정도만 가지고 한참씩 이야기 할 터이니 슬라이드를 보면서 발표 내용을 따라잡기도 불가능할 것이다. 따라서 세미나에 가려는 사람은 사전에 그의 공개된 동영상 또는 음성 강의를 많이 들어보고, 최근의 그의 블로그 글들을 읽어보면서 충분히 사전지식을 갖추고 가는 것이 좋을 것이다. 그냥 유명한 사람 얼굴 한번 보고 싸인이나 받고 왔다고 만족할게 아니라면 말이다.
신청을 할까 하고 STEN의 세미나 등록안내를 찾았갔다. 내용을 읽던 중에 "대상"이 눈에 들어왔다. 참석대상은 "아키텍트, 설계자, 코더, 테스트 외 열정있는 사람"이라고 한다. 나는 그 중 어떤 사람인가 잠시 생각을 해봤다. 나는 "경영진을 상대한다"고 하며 "공중에 떠 다닌다"는 아키텍트가 되기를 거부하는 사람이니 아키텍트는 아니다. 그럼 설계자? 설계만을 전문적으로 해본 적도 없으니 설계자라고 하기도 뭐하다. 그렇다고 테스터이냐 하면 테스터를 자처해본 적도 없고, 테스트만 전문적으로 하는 책임을 맡아본 적도 없으니 테스터도 아니다. 그럼 남은 것은 코더뿐. 그럼 코더인가보다.
그러고 보면 내가 가장 좋아하고 즐거워하는 일은 코드를 만지는 것이다. 코드를 작성하고 다듬으면서 그 것이 동작하는 것을 보는 것이 가장 즐겁다. 코드를 가지고 함께 이야기를 나누며, 코드를 나눌 수 있는 상대가 가장 정이 간다. 반대로 개발,설계에 대해서 각종 버즈워드를 늘어놓으면서 붕 떠 있는 얘기들을 있어보이고 화려하게 하지만 코드는 한 줄도 보여주지 않는 사람들을 보면 거부감이 들고 짜증이 난다.
한편으로는 코더란 공장의 조립 라인에서 기계적인 일을 하듯이 아키텍처와 설계자들이 이미 다 만들어서 화려한 문서를 제공해주면 그것을 가지고 기계적으로 프로그래밍 언어로 변환하는 단순 노동자처럼 이야기하는 사람들이 있다. 좀 뒤져보니 코더->프로그래머->개발자(developer) 순으로 실력이 향상되는 것이며, 코더는 단순 노가다이고 프로그래머는 조금 생각을 가지고 코드를 만드는 사람이고, 개발자는 뭔가 멀리 내다보고 큰 뜻을 품고 프로그래머와 코더를 지휘하는 급쯤 된다고 설명하는 글들이 제법 눈에 띈다. 그 다음에는 아키텍트가 있으니 나는 아키텍트가 되는 것이 꿈이다라고 하면서 뭔가 열심히 하겠다는 글도 보인다. 외국 사이트도 크게 다를바 없는 것 같다. 코더란 고등학교 졸업 정도의 학력을 가진 사람들이나 하는 단순 작업이고 프로그래머란 학위를 가진 수준의 사람이 하는 것이라는 글도 보인다.
같은 코드를 만지는 사람을 그런식으로 분류하고 차이를 두는 이유는 무엇인지 나는 도무지 알 수가 없다. 그렇게 무자르듯이 코더와 프로그래머, 디벨로퍼를 나눌 수 있는 것일까? 또 코드를 만지는 사람은 가장 열등하고 낮은 수준의 사람이라고 보는 시각도 그렇다. 갈 수록 현장에서 개발자에 대한 시선과 대우는 형편없어지고 있다고 한다. 그 위에 UML과 CBD 등으로 무장한 설계자, 각종 아키텍처 이론과 지식으로 무장했다는 아키텍트 또는 화려한 말빨로 고객을 사로잡을 수 있는 컨설턴트들이 자리 잡고 있고, 코드를 만지는 사람은 가장 비천한 직종으로 빨리 탈출해야 하는 위치인 듯하게 말하는 사람을 자주 보게 된다.
그래도 나는 코드를 만지는게 제일 좋다. 코드를 통해서 가치를 만들어 내는 일을 할 때가 가장 즐겁고, 코드를 만들어 팀원들과 또는 다른 사람들과 나눌 때가 가장 행복하다. 또 다른 사람의 코드를 보며 그 안에서 배우는 것이 가장 많다. 로드 존슨은 J2EE Design & Development라는 자바엔터프라이즈 기술에 관한 전반적인 통찰을 주는 책을 쓰면서 모든 것을 코드를 통해서 말했다. 자신이 주장하는 바를 그대로 담은 3만라인에 달하는 코드로 된 예제를 책과 함께 제공해주었고, 그때의 코드가 거의 그대로 유지된 채로 발전해서 지금의 스프링이 되었다. 스프링을 공부하면서 AOP가 무엇인지 제대로 이해하고 싶다면 스프링의 트랜잭션 AOP를 지원하는 코드를 공부하는 것이 가장 빠르다고 믿는다.
내가 마틴파울러의 리팩토링 책에서 기억나는 것은 폼나게 써먹기 좋은 리팩토링 이름들이 아니고(이건 맨날 헷걸린다) 리팩토링으로 깔끔하게 다듬어져 가는 비디오대여 예제 코드이며, 밥 마틴의 책에서 기억나는 것은 OO설계로 재탄생하는 커피메이커 예제와 그의 카타로 등장하기도 하는 볼링게임 코드이다. 켄트 벡 하면 먼저 떠오르는 것은 그의 xUnit코드이다. JUnit 1.0의 코드가 TDD로 만들어져가는 과정을 머리 속으로 그려보는 것은 항상 즐거운 일이다. 내가 이 사람들을 좋아하는 이유는 자신의 주장과 의견을 항상 코드로 만들어서 설명하기를 즐겨하고 있고, 또 스스로 코드를 만드는 것을 즐거워한다는 점이다. 얼마전 스프링소스 시드니 사무실을 방문하고선 CEO로서의 업무를 보러 사무실 안으로 들어가지도 않고 구석에 앉아서 ROO의 테스트 지원모듈을 코딩하느라 시간가는 줄도 몰랐다고 하던 로드 존슨이나 긴 컨설팅 일정을 마치고 돌아와서 FitNesse 코딩을 하고 있다면서 지금이 제일 행복하다고 말하는 밥 마틴의 이야기를 들으면 기분이 좋다.
아무튼 다른 대상이 없으니 나는 "코더"로서 켄트 벡 세미나에 참석하게 될 것 같다.
참, 호주에서 만난 사람들에게 "developer”라고 자신을 소개하면 대부분 부동산 개발업자(property developer)라고 생각한다.
그런 풍토가 만연해 진 이유 중 하나가
고급 코더을 만나기 어려워서 아닐까요?
아참 한국 시장에 고급 아키텍쳐나 고급 프로그래머 자체도 만나기 힘들기는 하네요.. ㅎㅎ
저는 어릴적 꿈이 프로그래머 였기 때문에
지금도 프로그래머 라고 자신을 소개하고 있습니다.
코더라고 말 붙이기에도 제 코드에는 헛점들이 너무 많네요..
저도 참가해요~
회사에서 보내줬어요 ^0^;
결국 화가는 화폭에 자신의 사상/철학을 그린다는 아주 간명한 진리를 간과해서는 안될 것이며, 개발 분야에도 이 논리가 적용되어야 할 것으로 생각합니다.
세계적인 소프트웨어는 말과 글로 자신을 나타내지 않고 오직 코드로 자신의 표현한다는 것 또한 지나쳐서는 안 될 것 같습니다. 물론, 이의 전제는 혼이 담겨져 있는 코드를 전제로 하겠지만요…
전.ㅡ.ㅡ 코더도 못되겠군요ㅠ.ㅠ 그냥 재미있어서 코딩하는 저로서는.ㅡ.ㅡ;;
그냥 치고 있는게 즐거운데요^^..ㅋㅋ
역시 기계부로 가야되는건가ㅠ.ㅠ….
아…TDDBE가… 책 이름입니까??
한번 찾아서 봐야겠네요^^..
좋은 글 써주셔서 감사합니다.
생업에 조금은 잊고 살았던
옛날 코딩의 순수한 즐거움을 다시 떠오르게 합니다.
다시 그 마음을 품어야 지요. ^^
Toby님은 아키텍트신거 같은데요?
제가 생각하는 아키텍트는 설계와 구현을 모두 할수 있는 사람입니다.
아키텍트나 개발자나 차이가 없죠.
Software world에서는
구현을 전혀 못하는 사람이 설계를 잘 한다는건
있을수 없는 일이라는걸 다들 아실테니…
Eternity께서 쓰신글에 나오는데로,
제조와 건축에서 가져온 개념을 소프트웨어 개발 분야에 적용을 해서
생긴 문제가 아닌가 싶습니다.
Software is soft. 를 간과하고,
맞지도 않는 개념을 그냥 가져다 적용했으니…
소위 아키텍트나 설계자라고 하는 사람들이 작성해 내는
UML이나 기타 문서들이 절대 소프트웨어의 설계도가
될수 없는데 말이죠. 단지 참고용이면 모를까…
다른 한편으로는 프로그래머도 프로그래밍뿐 아니라
그런 문서를 통해서 개발을 수월하게 할수 있어야겠죠.
결국,
아키텍트==개발자==프로그래머
설계만 할줄 아는 아키텍트/설계자 라는 사람들하고
얘길 해보면, 진짜 헛소리를 늘어놓는다던가,
말도 안되는 말만 하면서 마치 입으로 소프트웨어
제작 할것 같은 분위기를 풍기는데…
사실 PhD 중에도 이런 사람들 몇 보고나니
공부 더 하려던 생각이 싹 가십니다.
근데 코더는 코딩만 가능하고 설계는 못하는 사람이란 얘긴가요?
근데 코딩만 하고 설계를 못할 정도면
이제 Software engineering 갓배우기 시작한
학생 아닌가요?ㅡ_ㅡ?
Toby님은 역시 아키텍트 (설계+구현) 쪽이 맞는거 같습니다.
근데, 만약 저 위에서 말하는 아키텍트/설계자 란게
설계만 하고 구현을 못하는 사람을 일컷는다면
이건 돌파리란 얘긴데, 그렇다면 역시 코더가 되는게 낫겠군요.
전 직업 물어보면, Software Engineer 라고 소개합니다.
가끔은 프로그래머라고도 얘기하구요.
그나저나, UML등을 작성하면서 좀더 구현에
도움을 주는 작업을 하는것도 나름대로 재밌지만,
역시 최고의 재미는 Toby님 말씀대로 코딩이 아닐까 합니다.
진짜 그 순간이 제일 행복하죠.
세상에 그런 행복을 원할때 자주 느낄수 있는
저는 굉장히 행운아가 아닐까 생각해 봅니다.
Kevin/ 저는 그런 구분에 동의할 수 없다는 얘기였습니다. 그렇게 수직적인 계층을 만들고 우월감을 가지기 위해서 역할을 구분하겠다면 저는 차라리 코더라고 하겠다는 것이지요. 물론 수평적이고 유연한 역할의 배정은 어느 정도 필요하다고 생각하지만 요즘 흔히 하는 그런 식의 구분은 별로 맘에 안듭니다.
네, 말씀하신 그런 구분이 제조나 건축에서 따온 개념을
(적용하지 말아야할 소프트웨어 개발에) 적용시킨
때문이 아닌가 생각합니다.
설계자가 설계해서 도면주면,
그 설계대로 건물 세우는 사람 따로있는 형태 말이죠.
말씀하신데로 보편적으로 대부분 사용하는
그런 구분을 저도 좋아하지 않습니다.
소프트웨어 분야는 설계자가 프로그래머고
프로그래머가 설계자인데 말이죠.
토비님의 글을 보고 제 생각을 정리해보려합니다.
http://kimhn.tistory.com/74
아키텍트,개발자,코더…..
참 애매하네요. ^^
저도 직접 설계부터 코딩까지 모두 하지만서두…
이런 말이 나온것에 대해서는 개발자들도 반성을 해야하는 부분이
있다고 생각합니다.
( 물론 경험으로 봤을때의 개인적인 생각입니다.)
점점 편한것만 찾아가는 경향이 더 강하게 나타나고
있죠. 생산성이라는 변명아래 프레임웍에 종속되어가는 개발자들
그 프레임웍 밖으로 나오면 아무것도 할 수 없는 개발자들이 점점
늘어가는것을 보면 안타깝네요. 요구사항이 나오면 누군가가 만들어놓은 소스를 찾아 구글을 헤매고 다니는….ㅜㅜ 슬프죠
이런 분들로 인해서 자부심을 가지고 일하시는 개발자 ( 코더 )분들의 얼굴에 떵칠을 하는것은 아닌가 하네요.
이런 것을 보고있는 윗분들은 당연히 등급을 나누고 싶어하실테고
설계는 물론 자료구조와 알고리즘을 적시적소에 적용하는 개발자 ( 아키텍트 + 코더 )와 오픈코드를 디립다 붙여대는 ( 검증없이 ) 개발자 ( 코더 )로 나눈것이 아닌가하는 생각도 드네요.
개인적인 생각이었습니다. 10년차 웹어플 프로그래머가 프레임웍에서 지원하지않는 파일핸들링 업무를 구현 못하는 모습을 보고나서 더 이런 생각을 더욱 굳어지네요 ㅜㅜ 슬퍼요…..
이런 분류가 필요한 곳이 있기는 하겠죠. 흔히 말하는 미 국방성..;;
하지만 대부분은 이런 분류가 무의미하거나 안 좋은 부작용만 생기지 않나 싶습니다.
S/W 공학이 만들어낸 쓰레기…
켄트벡 세미나에는 특히나 어울리지 않네요.