사용자 삽입 이미지
 



현재 Java 환경에서 프로그래밍, 설계, 기타 등의 역할을 수행하는 개발자의 수는 날로 증가하여 몇 백만이라는 아주 큰 규모의 커뮤니티를 이루고 계속 그 규모를 키워가고 있다. 이들 중에서 단연 많은 비중을 차지하고 있는 부분은 Java 프로그래머들이다. 프로그래머는 해당 분야의 관련 시스템 구축의 직접적인 역할을 수행하는 인력으로서 군대로 말하자면 보병에 해당하는 인력이라 할 수 있다.

전투에서 보병의 역할. 비록 현대전이 기계화, 첨단화되고 있지만 해당 분야의 업무를 말끔하게 처리하는 것은 보병의 역할이다. 이와 마찬가지로 현재 시스템 구축 관련한 여러가지 새로운 아키텍쳐, 방법론, 툴 등이 도입되고 있고, 그 추구하는 바가 자동화이기 때문에 프로그래머의 역할은 점점 줄어들어 궁극적으로는 없어질 것처럼 보이지만 구축 시스템의 품질을 좌우하는 것은 최종적으로 프로그래머의 손에 달려 있다. 숙련된 프로그래머에 의하여 원하는 수준의 프로그램, 시스템이 완성되고 제 할 일을 수행할 수 있는 것이다. 그럼 숙련된 프로그래머가 되기 위해서는 어떠한 노력을 해야 하는지를 살펴보자.


 
숙련된 프로그래머가 되기 위해서…

숙련된 프로그래머란 주어진 환경 요건에서 최적의 결과를 기대할 수 있는 시스템/프로그램을 잘 작성하는 프로그래머를 일컫는다. 여기서 가장 어려운 부분이 “잘”이라는 것이다. 그럼, 어떻게 해야 잘하는 것인가?

이는 해당 프로그래머가 가진 소질, 역량과도 연관이 있으나 일반적으로 어떠한 교육을 받았고 기본적인 또는 보완적인 지식을 가지고 있는지 그리고 어떤 경험을 했는가에 따라 많은 차이가 있다. 프로그램에 천재성을 가지고 있는 사람에게 일반적인 교육과정에 대하여 소개하고 따르라고 하는 것은 타당치 않다. 이들은 가끔은 인정하고 싶지 않지만 주어진 문제를 보면 어떻게 프로그램으로 옮겨야 할 지가 손끝으로 쏟아져 나오는 사람들이다.(존 내쉬의 천재적인 암호 해독 능력은 프로그래머나 일반인의 입장에서 보면 맥 빠지는 일일지도 모른다. 그러나 이 후 여러 프로그래머의 노력으로 그와 유사한 또는 그보다 우수한 프로그램을 가지고 지금은 암호를 해독하고 있는 것을 보면 절대로 기 죽을 일 만은 아니다.)

그러나 대부분의 사람은 이러한 천재성보다는 다소간의 소질을 기반으로 교육, 훈련 및 경험을 바탕으로 훌륭한 프로그래머로 성장한다. (이 대목에서는 천재중의 대표격인 아인슈타인의 '천재는 1%의 영감과 99%의 노력으로 완성된다'는 말이 많은 위안을 주는 것은 어쩔 수 없나 보다.) 서론이 너무 길게 나가고 있군. 이제 본론으로 들어와서 일반인이 일반인에게 줄 수 있는 “좋은 프로그래머”가 되는 길은 다음과 같다.(이 길은 여러 수 많은 길 중의 하나이며 상황에 따라서는 틀릴 수도 있다.)

우선은 언어의 문법 및 특성에 대하여 충분한 이해를 해야 한다. 지금의 컴퓨터는 융통성이라고는 전혀 없으므로 틀린 문장을 넣으면 잔뜩 불평만 늘어놓은 채로 나 몰라라 할 것이다. 해당 언어의 특성을 잘 알고 있어야 간결하고 의미전달이 우수한 글을 쓸 수 있듯이 프로그래밍 또한 마찬가지다.

그 다음으로 필요한 것은 알고리즘과 자료구조다. 알고리즘은 앞선 많은 천제적인 수학자들이 문제를 해결하는 방안에 대하여 체계적으로, 수학적으로 정리를 한 것으로 이를 이해하고 활용할 수 있어야 원하는 프로그램을 쉽고 잘 작성할 수 있다. 그럼 자료구조는 언제 필요한가? 프로그램이란 컴퓨터가 주어진 자료(또는 데이터)를 처리하는 과정을 작성하고 관련 데이터를 조작, 처리하는 것이다. 자료구조는 이러한 데이터를 조작하는데 필요한 데이터의 구조체로 이 또한 많은 이들의 노력으로 지금 프로그래밍을 하는 이들은 이를 숙련하여 적용하는 노력을 하면 소정의 결과가 나올 것이다. 좀더 쉽게 접근하고자 한다면 알고리즘, 자료구조의 일반서보다는 이를 기반으로 해당 부분을 Java 언어로 구현한 예제를 담고 있는 책이 많이 발간되어 있으니 이 부분을 공부하는 데는 별 반 어려움이 없다. 이로써 기본적인 프로그램의 가나다는 끝낸 것으로 볼 수 있다.

그럼, 좋은 프로그래머가 되기 위해서는 프로그램만 잘 하면 되는가? 그건 아니다. 프로그래머는 구축대상의 시스템 설계를 컴퓨터 환경에 구현하는 사람으로, 건축의 관점에서 보면 설계도면의 내용을 실제적으로 자르고, 쌓고, 붙이고 해서 구체적으로 만드는 사람이다. 그러나 프로그램에서는 건축과는 달리 설계자와 시공자의 의사소통을 일관되고 균일하게 하는 방식이 잘 정리되어 있지 않다. 그러므로 프로그래머는(물론 설계자도) 공통의 표기법에 대한 숙련이 필요하다. 현재 가장 보편적으로 적용되고 있는 표기법은 UML(Unified Modeling Language)로 설계자가 작성한 UML을 제대로 이해하고 이를 구현하면서 발생하는 수정 사항에 대하여 해당 설계서를 UML을 사용하여 수정하여 설계자와 의사교환을 하는 기술이 필요하다. 프로그래머 입장에서는 다소 등한시 할 수 있을지도 모르나 다른 역할과의 의사교류는 매우 중요한 부분이기 때문에 프로그래머로서 성공하기를 원하는 사람은 반드시 갖추어야 하는 항목이다.

이렇게 하면 기본적으로 프로그래머가 갖추어야 할 양 날개, 언어적 항목과 의사교류적 항목은 갖춘 셈이다. 여기에 많은 시간과 경험을 추가한다면 여러분은 좋은 프로그래머가 될 것이라는 데는 별반 의심의 여지가 없다. 그러나 안타까운 부분은 주어진 시간이 그리 많지 않다는 것이다. 현실은 막 시작하는 사람에게는 많은 경험을 쌓을 수 있는 기회를 주는데 그리 호의적이지 않다. 그러므로 여기서 여러분은 또 한번의 점프가 필요하다. 이러한 점프를 도와주는 것으로 디자인패턴과 프레임웍이 있다. 디자인패턴은 반복적으로 발생하는 문제에 대하여 이를 해결하는 방안에 대한 해법을 제시하는 것으로 나름대로의 검증된 방법으로 사용할 수 있다. 그러므로 디자인패턴을 개념, 종류, 문제 발생 환경(또는 요인) 및 문제를 이해하고 이를 해결하는 방안에 대하여 익힌다면 여러분이 실전에서 이와 유사한 문제에 부딪혔을 때 관련 디자인 패턴 및 이의 응용으로 이를 헤쳐나갈 수 있다. 이런 측면에서는 디자인 패턴은 고급 프로그래머(및 설계자)로서는 반드시 숙지하고 있어야 하는 부분이다. 현재까지 작성된 디자인패턴은 그 종류만 하더라도 수백가지가 있을 정도로 넘쳐 나는 실정이다. 이런 상황에서 어떤 패턴이 실질적으로 도움이 되는지를 알고 다른 부분은 그때 그때의 상황에 맞게 찾아서 적용하는 것이 바람직하다. 디자인패턴을 시작하는 이는 “Design Patterns: Elements of Reusable Object-Oriented Software”를 시작으로 디자인패턴의 입문을 시작하여 Java/J2EE 환경에서 프로그램을 작성할 때 유용한 여러 디자인패턴을 모아놓은 “Core J2EE Patterns: Best Practice and Design Strategies”까지 전체적으로 훑어볼 필요가 있다.

 
그 다음에는…

숙련된 프로그래머가 되기 위해서 여러 가지 필요한 부분에 대하여 앞에서 간단하게 이야기를 하였다. 그러나 이러한 부분은 기술적인 부분에서 바라본 항목들로 이것만으로는 충분치가 않다. 주어진 언어를 사용하여 글쓰기를 할 때 단순한 기교 이상의 예술적인 부분이 필요하듯이 프로그래밍 또한 이와 유사하다. 프로그래밍은 단순한 기술적인 기교가 아니라 다분히 철학적인 요소가 많다. 그러므로 프로그래머로의 혜안을 가지기 위해서는 프로그램에 직접적인 부분(예: 언어, how to… 등)에만 집중하지말고 주변, 즉, 천재적인 프로그래머들의 사상, 해법 등을 기술한 여러 책들을 볼 기회를 기지기를 권한다. 이런 것들은 지금 당장은 큰 도움이 안될 수도 있지만 시간이 지나면서 알게 모르게 여러분의 프로그래머로의 역할에서 큰 비중을 차지할 것으로 본다.

 
프로그래머로 열심인 당신에게 조금이나마 도움이 되길…
황성훈

"Career Path" 카테고리의 다른 글

2006/01/01 18:27 2006/01/01 18:27

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/13

  1. 자바세계에서 꿈을 키워가는 프로그래머에게

    Tracked from  삭제

    (2006.01.01) 프로그래머는 해당 분야의 관련 시스템 구축의 직접적인 역할을 수행하는 인력으로 군대로 말하자면 보병에 해당한다. 현재 시스템 구축 관련한 여러가지 새로운 아키텍쳐, 방법론, 툴 등이 도입되고 있고, 그 추구하는 바가 자동화이기 때문에 프로그래머의 역할은 점점 줄어들어 궁극적으로 없어질 것처럼 보이지만 구축 시스템의 품질을 좌우하는 것은 최종적으로 프로그래머의 손에 달려 있다. 숙련된 프로그래머에 의해 원하는 수준의 프로그램,..

    2008/10/28 16:49

댓글을 달아 주세요

  1. 이우철  수정/삭제  댓글쓰기

    좋은 글 고맙습니다

    2007/09/07 20:13
  2. 김영호  수정/삭제  댓글쓰기

    음... 마치 장인정신이 되라는 느낌이 드네요... 위의 글을 읽으면서
    좀 더 넓은 세계를 경험하면서 안목을 확장하였네요...
    좋은 글 진심으로 감사드립니다. ^^

    2007/09/15 12:11
  3. 김문경  수정/삭제  댓글쓰기

    황성훈 이사님 좋은 글 감사합니다

    2007/09/16 14:39
  4. 박정숙  수정/삭제  댓글쓰기

    좋은 정보 감사해요~

    2007/09/19 04:54
  5. 비밀방문자  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

    2007/12/22 13:53
[로그인][오픈아이디란?]

◀ Prev 1  ... 457 458 459 460 461 462 463 464 465  ... 626  Next ▶