필자도 IT 업계에 종사하는 한사람으로서 연초를 맞이하여 여러 가지의 신년 계획을 하게 된다. 금연, 금주, 다이어트 등등 일상적인 결심을 포함해서 업무적인 계획도 세우고 프로젝트 수행 계획과 일정, 개발 내용 등등 많은 계획과 생각을 하게 된다. 그러면서 한가지 의문이 들었다. 매년 초마다 똑같이 반복되는 계획과 반성 속에서, 과연 나 스스로의 발전을 위한 계획은 무엇일까. 가족과 건강을 챙기고 주어진 업무를 효과적으로 수행하기 위한 계획과 준비를 하면서도, 정작 엔지니어로서 그리고 작은 조직의 리더로서 나 스스로를 업그레이드시키기 위한 계획을 소홀히 하고 있는 것은 아닐까.

자기 개발과 인재 양성의 양면성
왠만한 규모의 회사라면 도서 구입비를 포함해서 체력 단련이나 각종 자기 개발을 위한 소정의 지원을 하고 있다. 굳이 자기 개발비라는 명목이 아니더라도 업무상 필요한 서적이나 물품들은 회사에서 지원해주는 것이 관례이다. 이러한 것들은 회사에서 직원들에게 해줄 수 있는 혜택 중의 하나이며, 인재 양성 정책의 일환이라는 포장을 하기도 한다. 그러나 이러한 소정의 자기 개발을 통해서 본인 스스로의 인성이나 자질이 향상되었다고 생각하는 사람이 있을까? 아마도 거의 없을 것이라고 생각한다. 정확하게 표현하자면, 회사에서 인재 육성의 일환으로 직원들에게 자기 개발과 업무 지원을 해준다고 믿고 있지만 정작 이러한 것들을 받아들이는 직원의 입장에서는 복리 후생의 작은 부분정도로만 인식하는 것이 현실이 아닐까. 이러한 입장 차이와 괴리는 어디서 오는 것일까.

나는 인재인가?
여러분 스스로 자문자답을 했을 때 본인이 인재라고 생각하는가? 작게는 회사내에서, 약간 넓게 보자면 우리나라 IT 업계에서 여러분 스스로가 인재의 반열에 올랐다고 자부할 수 있는가? 만일 숙고 끝에 '그렇다'라는 대답을 할 수 있다면 앞으로 자신의 분야에서 성공할 수 있는 '가능성'을 충분히 가지고 있으며, 주위 여러 사람으로부터 부러움과 존경을 받고 있는 사람일 것이다.

필자가 이대목에서 말하고 싶은 것은, 과연 바람직한 '인재상'이란 무엇인가라는 문제를 제기하고 싶다. 작게는 회사라는 조직에서, 그리고 넓게는 국가 차원에서 툭하면 나오는 말이 '인재 육성'인데 과연 그들이 원하는 인재란 어떤 사람일까.
필자의 짧은 경험에 비추어봤을 때 IT 현업에서 바라보는 엔지니어의 인재상은 다음과 같다 :

  • 자신의 분야에서 최고라고 자부할 수 있을 만큼의 기술적인 지식과 기술을 가지고 있다 (약간의 자만심도 포함).
  • 어떠한 문제나 위기에 맞닥뜨리면 일단 해결할 수 있다는 자신감을 가지고 최선 아니면 차선의 방법으로라도 문제를 해결하려고 노력한다(끈기와 오기 필요).
  • 주위 사람들로부터 일인자 또는 멘토(mentor)라는 말을 들어도 거만하지 않고 동료나 후배를 정성껏 도와준다.
  • 자신의 작업 결과물(실적)이 조직에 긍정적인 영향을 준다 (비전과 가능성 제시 등).
  • 좌절하지 않는다.
  • 대인 관계가 원만하다.

    생각나는대로 몇가지 적어보긴 했지만, 개발이나 관리등 현업에 쫓기다보면 자기 앞가림 하기도 어려운 것이 현실이며 이러한 인재가 만들어질 수 없는 현실적인 이유를 몇가지 나열해보자면 다음과 같다:

  • 일 잘한다고 소문나면 그사람한테 일을 몰아준다.
  • 회사 실적(매출)과 직결되지 않은 분야나 업무에 소신을 가지고 매진하면 쓸데없는 일을 한다고 상급자로부터 경고를 받는다. 또는 퇴사할 준비를 하는 것처럼 여겨질 때도 있다.
  • 대인 관계가 원만하면 IT 엔지니어로서의 자질이 부족하다고 여겨지거나, 아예 영업직으로 돌린다.
  • 어떠한 문제를 해결하기 어려운 상황이 오면 실무 담당자나 리더의 판단과 결정보다는 경영진이나 고위 관리자의 지시와 방법에 의해서 해결 (또는 중단)된다.

    이러한 현실을 단지 이상과 현실의 괴리라고 치부하고 덮어두기에는 이미 너무나 심각해버린 상황인것 같다. IT 업종이 3D(Dirty) 업종에 비유되고, 업체간의 경쟁은 더욱 치열해지고, 정부에서는 나름대로 IT 육성/지원 정책을 내세운지도 수년이 지났지만 현실은 점점 더 어려워져만 가는것 같다.

    길이 없으면 길을 만들어간다
    '길이 없으면 길을 만들어간다.' 이 말은 몇년 전이던가, 광화문 교보문고 건물에 크게 걸려있던 문구이다.
    여러분들은 자신만의 꿈과 희망이 있으며, 현실의 어려움과 고민으로 괴로와하고 있을 것이다. 필자 스스로도 그런 경우가 종종 있다. 그러나 한편으로는 이 분야에서 전문가가 되고 인정을 받는, 바로 인재가 되고 싶은 욕구도 분명 있을 것이다.

    이 글의 제목이 다소 자극적으로 보이겠지만, 적어도 필자가 경험하고 듣고 본 바에 의하면 국가나 회사와 같은 조직에 의해서 전략적으로 키워진 인재는 본적이 없다. 물론 아주 가끔 매스컴을 타는 훌륭한 과학자나 엔지니어분들에게는 죄송한 말씀이겠지만, 감히 짐작컨데 그러한 분들도 상급 조직에 의해서 도움이나 가르침을 받아서 인재가 되었다기보다는 본인 스스로의 노력의 결과가 많은 부분을 차지할 것이다.

    아쉬운 사람이 우물파고 우는 아이한테 먼저 떡준다는 말이 있다.
    회사나 조직이 나를 인재로 키워주지 않고 일만 시킨다고 체념하기 전에 필자 스스로 다음의 몇가지는 2005년 한해동안 꾸준히 실천해서 2006년에는 스스로 인재가 되어보려는 꿈을 이루어 보고자 한다 :

  • 매일 30분씩 나 스스로의 발전을 위해서 뭔가를 하는 시간을 갖는다.
  • 매일 20분씩 활자화된 뉴스를 본다 (지면, 웹 사이트 등).
  • 매달 1권의 자기개발과 관련된 서적을 읽는다.
  • 나의 멘토를 찾아서 한달에 1회 직접 만나서 이야기를 나눈다.
  • 매일 밤 잠들기 전에 누워서 2분 정도 오늘 하루 있었던 일을 리뷰해본다.

    자신이 속한 분야의 기술에 대해서는 최고를 자부할 만큼 전문적인 지식과 실력을 쌓아가는 것은 당연한 항목이기 때문에 굳이 포함시키지 않았다. 위의 내용들은 대부분의 자기개발/자기관리 서적에 자주 나오는 내용이며 누구나 한두번쯤은 들어봤고 결심을 해봤음직한 매우 쉽고 상식적인 것들이다. 중요한 것은 이러한 쉬운 일을 실천 하느냐 못하는냐이다.

    전문 지식도 풍부하고 일도 잘하고 성격 좋고 인간 관계도 좋은 전형적인 프로페셔널 인재는 태어나는 것이 아니라 의지(意志, will)에 의해서 만들어지는 것이라고 믿고 싶다. 그리고 이러한 믿음이 옳았는지 틀렸는지는 금년 말 또는 내년 초에 서서히 드러날 것이다. @
  •  

    출처 : ZDNet

    저자 : 한국썬마이크로시스템즈 차장 김영남

     

    나는 프로그래머가 알아야 할 것들을 돼지 삼형제에게서 배웠다.

    내겐 29개월된 딸아이가 하나 있다. 이제 겨우 말하기에 흥미를 갖게된 딸아이를 위해서 아주 가끔씩(?) 동화책을 읽어주곤 하는데, 다 아는 그저그런 얘기들이지만 실감나게 얘기를 들려주기위한 나의 처절한 노력은 정말 가상하기 그지 없을 정도이다. 그 중에서도 우리 딸아이가 가장 좋아하는 동화중 하나가 바로 돼지 삼형제이다. 이 이야기의 하이라이트는 바로 늑대의 집부수기 이벤트인데, 온 힘을 다해서 입으로 바람을 일으키며 집을 날려버리는 장면을 재현할라치면 우리 딸아이는 너무나 좋아하면서, “또 또 ((주) 다시 해달라는 표현) “ 를 연발한다.
    왜 내가 자바 프로그래머의 Career Path를 얘기하기전, 돼지 삼형제를 얘기하는 지 의아해 하는 사람들이 있을 터인데.... 바로 그 곳에 Java 프로그래머로가 가장 먼저 무엇을 염두해야 하는 가에 대한 나의 생각이 숨어있기 때문이다.

    자, 돼지 삼형제의 집짓기 프로젝트를 훔쳐보자.


     
    어떤 집을 지을까 : 고객이 원하는 것을 만든다

     

    무엇을 만들든지 간에, 가장 중요한 성공 포인트는 그 물건을 사용하게 될 사람의 맘에 쏘~ 옥 드는 물건을 만드는 것이라 할 수 있다. 우리가 프로젝트를 수행함에 있어서, 가장 많은 시간과 노력을 투자해서, 고객의 생각을 도출해 내고, 또 우리가 이해한 바가 고객의 생각과 일치하는 지 끊임없이 확인하는 작업을 하는 이유가 바로 여기에 있다고 생각한다. 여기서 “사용자의 마음에 든다는 것”은 여러 차원에서 얘기가 될 수 있다. 이를 좀더 전문용어로 설명을 해 본다면 바로 시스템의 품질(Quality)을 만족하는 것이다. 품질을 만족하기 위해서는 고객의 요구사항을 잘 정의해야 하는데, 요구사항에는 크게 기능(functional)과 비기능(non-functional)요구사항이 있다. 기능 요구사항을 집짓기를 예를 들자면, 모든 방에는 창문이 있을것, 부엌과 욕실에는 수도장치가 되어있을 것 등이 될 것이다. 비기능 요구사항은 같은 기능이라 해도 서로 다른 품질(성능)을 요구하게 되는 것인데, 예를 들자면 모든 방의 창은 방음 및 방열기능을 최대(실제 프로젝트에는 이렇게 애매하게 정의해서는 안되겠지만)로 보장할 것, 최소 늑대 두 마리의 입김(초속 XX Km)에도 절대 지붕이 날아가지 말 것 등이 될 수 있겠다. 소프트웨어 개발 방법론의 입장에서 이러한 요구사항을 도출해 내는 과정을 분석(Analysis)이라고 하는 것 쯤은 다 알고 있을터이지만, 대부분의 프로그래머 혹은 개발자들은 이러한 분석 과정은 분석가들의 전유물인양 다소 등한시 하는 경우가 있는 듯하다. 그러나 요즘의 추세를 보면 프로그래머가 갖추어할 소양 중에서, 기술적인 능력은 물론이고 의사소통능력, 문서작성능력, 프리젠테이션 능력 등 커뮤니케이션과 관련된 스킬을 요구하고있는데, 이 중의 한 면이 바로 고객과의 의사소통을 통해서 요구사항을 잘 이해하고 고객의 생각, 고객의 만족을 이끌어내는 시스템을 만들 수 있는 프로그래머를 원하기 때문이라고 해도 과언이 아닐 것이다.
    여기에 하나 더 중요한 것은 도메인 지식을 쌓으라는 것이다. 고객과 아무리 의사소통이 잘 된다해도 고객의 비즈니스에 대한 지식이 없다면, 올바른 시스템을 구축하기란 하늘에 별따기보다 더 어려운일이 되고 말것이기 때문이다. 따라서, 프로그래머들도 금융, 국방, 공공 등 가능한한 전문 영역에 대한 비지니스 지식을 다지는데 노력할 필요가 있다.


     
    늑대의 바람을 이겨내자 : 튼튼한 집의 핵심, 아키텍처를 이해하자

     

    자 다시 돼지 삼형제에게로 돌아가보자. 삼형제 모두 기능면에서 자신들이 원하는 집을 지었다고 한다면, 막내만이 집의 안정도면에서 만족할 만한 집을 지었다고 할 수 있다. 이것을 시스템 구축과 한 번 비교해보자. 아키텍처라함은 앞에서도 얘기했듯이 시스템의 기능은 물론 시스템의 성능을 보장할 수 있는 전체 시스템 구조의 근간을 구축하는 것을 말한다. 좋은 아키텍처를 구축하기 위해서는 무엇보다 아키텍처를 좌우하는 비기능요건을 잘 파악하는 것이 중요하다. 막내돼지가 첫 번째 아키텍처 요소를 늑대의 바람에도 견딜 수 있는 것으로 식별했듯이 말이다. 그렇게 일단 아키텍처에 대한 요건들을 파악하고 난 후에는 어떤 재료들을 선택해서, 어떤 방식으로 집을 만드는 것이 좋은가에 따라서 집의 틀을 만들어야 하는 것이다. 이때, 아키텍트는 자신의 경험, 축적된 설계 패턴 등 기존의 자산을 십분발휘하여 가능하면 검증된 방식으로 집을 구축할 것이다. 또한 검증되지 않는 솔루션에 대해서는 Mokup작업이나 모형작업등을 해가면서 솔루션 선택에 대한 검증 과정을 거쳐 아키텍처를 구축할 것이다. 일단 아키텍처가 구축되었다면 나머지 집을 짓는 일꾼들은 아키텍트가 선택한 설계방식이나 재료의 특성에 대한 충분한 이해를 바탕으로 최고의 기술을 발휘하여 멋지고, 튼튼한 집을 짓게 될 것이다. 막내 돼지가 집을 짓는 재료로 벽돌을 선택했지만 벽돌로 집을 짓는 방법을 잘 몰랐다면 벽돌은 그저 좋은 재료일뿐, 늑대의 바람을 이겨낼 수 있는 집을 만들 수는 없었을 것이다. 따라서 여전히 프로젝트 팀을 구성할 때, 프로그램을 잘 할 수 있는 프로그래머의 역할이 중요하고 또 뛰어난 프로그래머와 함께 일하는 기쁨을 얻을 수 있는 이유가 여기에 있다고 하겠다. 즉, 아키텍처가 중요하긴 하지만, 좋은 프로그래머 없이 좋은 시스템은 구축될 수 없는 것이다. 프로그래머들은 이러한 시각에서 아키텍처에 대한 이해를 할 수 있는 능력을 갖추어야 한다. 아키텍처를 이해하기 위해서는 무엇보다 기존의 좋은 아키텍처들을 많이 볼 필요가 있다. 소위 말하는 참조 아키텍처(Reference Architecture)나 Sun에서 발표하고 있는 J2EE, Web Service 아키텍처, 기술 스펙등을 충분히 숙지하고 이해 할 수 있는 능력을 갖추어야 한다. 좋은 아키텍처를 많이 보고 경험한 사람만이 언젠가 좋은 아키텍처를 만들 수 있을테니까 말이다.


       
    에이 !!! 벽돌이 뭐야? : 변화의 흐름을 파악해라.

     

    돼지 삼형제 중에서 첫째와 두째는 각각 지푸라기와 나무로 자신만만하게 자신들의 집을 지었다. 그러면서 벽돌로 어렵게 집을 짓는 세째를 나무랬다. 너무 힘들게 쓸데없는 시도를 한다고. 자 우리 자신을 돌아보자. 이미 알고 있고, 또한 너무 익숙한 나머지 새로운 기술 변화나 시도는 외면한 채, 현재에만 너무 안주하려고 하는 것은 아닌지. 거기에 더하여 새로운 기술을 습득하고 적용하는 사람들을 향해 비난과 배척의 눈길을 주지는 않았는지. 그러나 분명한 것은 새로운 기술 동행에 대한 시각을 반드시 가져야 한다는 것이다. 어찌보면 이미 여러분은 Java라는 훌률한 도구를 선택하는 눈을 가지고 있다고 볼 수 있다. 과거를 돌아보면 Java가 처음 국내 도입 될 시점에 지금의 전성기를 예상하는 사람은 그리 흔치 않았으니 말이다. 그래서 프로그래머는 Java 자체에 대한 기술 수준 향상도 중요하지만, 전반적인 IT 기술의 흐름을 항상 주시하고 있어야 한다. 정기적인 세미나나(요즘은 webinar 형태로 진행되는 것들도 많이 있는 것으로 안다) 커뮤니티 활동 등을 통해서 최신 정보를 교환하고 새로운 기술에 대한 예측을 놓고 토론도하고 평가도 하는 그런 활동이 분명하게 값진 경험이 될 것이다.


       
    예전 보다 빨리 더 좋은 벽돌집을 다시 지을 수 있을까? : 항상 개발 프로세스를 염두하라.

     

    셋째 돼지는 첫째나 둘째 돼지에게 예전보다 더 빨리 그리고 튼튼한 벽돌집을 다시 짓도록 도와 줄 수 있을까? 이러한 면에서, 필자의 마음속에서 일관되게 떠오르는 실타래 같은 이야기의 핵심이 있다. 그것은 바로 “프로세스”이다. 앞에서 설명한 모든 것들이 한 번을 수행하나 열번을 수행하나 어느 수준 이상의 품질을 보장할 수 있는 것은 바로 경험을 기반으로 정립된 프로세스를 기반으로 수행되기 때문이라고 생각한다. 그렇기 때문에 처음보다는 두번째, 세번째에 개선된 방식(프로세스)으로 고객이 원하는 품질의 시스템을 보다 빠르게 구축할 수 있는 것이다. 이러한 개발 프로세스를 가장 잘 보여주고 있는 것이 바로 소프트웨어개발방법론이라고 할 수 있겠다. 몇 몇 프로그래머들은 방법론이라는 소리만 들어도 두드러기 반응을 보이는 사람들도 있다. 방법론은 프로젝트 비용을 받기 위한 개발 문서 작성 도구 정도로 생각을 하니 말이다. 그러나 방법론은 문서화만을 강요하는 것이 아니다. 앞에서 말했던 분석, 설계 상의 과정은 물론, 아키텍처 수립 과정, 어떻게 프로젝트의 위험을 관리해야 하는가에 대한 가이드라인을 제시하는 등 프로젝트의 성공을 위한 베스트프렉티스를 담고 있다. 좋은 프로그래머로서, 고객의 감동을 이끌어 낼 수 있는 프로젝트를 수행하고자 한다면, 한 번 쯤은(아니 그 이상) 본인이 속해있는 회사나 조직의 개발방법론을 이해해서 프로젝트에 적용할 수 있는 능력을 갖추어야 한다고 생각한다. 개발방법론을 시간을 내어 보게된다면, 다음 내용을 주의깊게 살펴보기 바란다. 가장 먼저 정의되어있는 것이 당연히 개발 프로세스이고(언제, 무엇을 입력물로, 어떤 활동을 순서로 수행하며, 그 결과로 어떤 결과물을 산출하는지)그 중에 또 하나 관심있게 봐야 할 것이 프로세스를 수행하는 역할(Role)에 대한 정의이다. 역할은 특정 개발 활동을 수행하는 논리적인 수행주체를 말하는 것으로서, 일반적으로 프로그래머라고 하면, 한 프로젝트에서 구현자(Implementer)로서의 역할을 수행하게 된다. 지난 호에 게재된 글에서도 언급을 했지만 프로그래머와 개발자를 구분하는 하나의 요소가 바로 “설계”능력이 된다. 설계서를 이해하여 올바르게 구현을 할 수 있다면 프로그래머로, 구현은 물론이고 자신의 구현경험을 바탕으로 시스템의 특정 부분을 설계할 수 있다면 개발자로 구분을 하는 경우도 있다. 또한 향후 개발자에서 시스템 전체의 성능(품질)을 고려한 시스템의 아키텍처를 설계할 수 있게 되었다고 하면 그런 사람은 이제 아키텍트(Architect)로서의 능력을 갖추었다고 한다.


      
     
    자, 마지막으로, 이 시점에서 주변을 한 번 둘러보자. 그대의 주변엔 어떠한 역할을 수행하는 사람들로 프로젝트가 구성되는가를. 앞에서 언급한 Implementer, Designer, Architect외에 Project Manager, Quality Assurance 담당자 등이 있음을 알 수 있을 것이다. 시간을 내어서 다양한 역할을 수행하고 있는 주변 동료나 선배들과 이야기를 해보라. 공통점을 찾을 수 있을 것이다. 그것은 바로 개발 언어가 무엇이 되었든, 프로그래머로서의 경험을 보유하고 있다는 사실일 것이다. 그것이 의미하는 바가 무엇일까? 자바 프로그래머로서 시작을 했다면, 앞으로 본인의 career path는 굉장히 다양하다는 것이다. IT업계의 선배로서 가장 하고 싶은 말은 , 프로그래머서로서 기술 습득을 게을리하지 않음은 물론, 내가 무엇이 되고 싶은가에 대한 최종career path 목표를 항상 생각하고, 그것을 정하라는 것이다. 그런 후에 여러분의 목표가 Architect이든, Project Manager이든 본인의 career path를 한 번 그려보는 시간을 가져보면 어떨까?
     

    출처 : http://kr.sun.com/developers/pages/career_03.html

    + Recent posts