엑스퍼넷-롤링 블로터공식블로그

미래의 행복한 소프트웨어 개발자가 되려면 (2)

  synabreu 2008. 03. 03 뉴스와 분석, 사람들 |

어제 저녁에 이어 미래의 행복한 소프트웨어 개발자가 되려면 두 번째 시간으로 나의 적성은 어디에 맞는가에 대해 진지하게 고민해 보는 시간을 가졌으면 합니다.


너 자신을 알라!

사실 이 말은 듣기에 따라서 기분이 좋을 수도 있고 나쁠 수도 있을 것이다. 이 말의 의미는 적어도 내가 어떠한 분야를 좋아하는 지 싫어 하는지를 스스로 파악해 보기 바라는 마음에서이다. 필자는 작년 한 해 동안 분기 마다 전국 서울/지방에 있는 대학교를 방문하는 Mix On Campus 라는 행사를 통해 학생들에게 다음과 같이 물어 보았다.

컴퓨터 공학을 전공하는 학생들에게 자기가 어떠한 분야를 좋아하느냐고 물어 보면 진정 스스로 고민해 보고 떳떳하게 말할 수 있는 사람이 그렇게 많지 않은 것에 대해 놀라지 않을 수가 없다. 왜냐하면 하나의 직업을 선택하는 것은 그 사람의 인생에 있어서 1/2, 아니 전체에 영향을 끼칠 만큼 중요하다. 단지 내가 컴퓨터 공학을 전공 했으므로, 또한 대학교를 졸업 했으므로 그 분야로 취업을 해야 한다는 생각은 어불성설이다.

사용자 삽입 이미지

· 나는 아키텍트(Architect)인가? 코더(Coder)인가?

먼저 내 자신이 아키텍처링을 좋아하는 지 아니면 코딩을 좋아하는 지에 대해 파악하기 전에 하나의 소프트웨어가 만들어지는 전체 과정을 알아두도록 하자. 흔히 ‘고객 요구 사항 분석->제품 기획->설계->코딩->테스트->제품 출시(RTM/RTP)’ 과 같은 과정을 거쳐 하나의 소프트웨어든 프로젝트든 끝을 맺는다. 이 중에 고객의 요구 사항을 잘 정리하여 프로젝트에서 위험 관리 및 이슈 등을 관리하여 설계에 반영하는 직업이 바로 소프트웨어 아키텍트다.

국내에서는 아직 소프트웨어 아키텍트(CSA) 라는 직업은 낫설다. 가끔 필자에게 프로젝트/프로그램 관리자와 소프트웨어 아키텍처가 어떠한 차이점이 있는 지에 대해 묻곤 한다. 국내에는 대개 그 프로젝트를 책임하고 관리하는 사람이 아키텍처랑 함께 하고 있다. 그래서 고객들이 헤깔려 하는 것 같다. 예를 들어 프로젝트/프로그램 관리자는 오케스트라에서 전체 음악을 총 지휘하는 사람이라고 한다면, 아키텍처란 그러한 음악이 잘 들릴 수 있도록 악기 및 음향, 공연 무대 등을 배치 하는 사람이라고 이해하면 쉽겠다.

주로 국내에서는 제일 경력이 많은 사람들이 이러한 역할들을 맡고 있다. 또한 코딩 경력이 오래 쌓이면 아키텍트가 자동적으로 된다고 잘못 이해하고 있는 사람들이 많다. 아키텍트는 아키텍트 일뿐, 코더 구루(Guru)는 아니다. 예를 들어, 코더는 그 로직에 대하여 코딩에 책임을 져야 한다.

여러분들이 짜 놓은 코드를 수년이 지나고 나서 본 적이 있는가? 로직에 대하여 최상의 성능과 구조를 가질 수 있도록 늘 코더들은 신경을 써야 한다. 프로젝트가 끝났다고 해서 코딩이 마무리 되는 것은 아니다. 그래서 컴퓨터 공학에서는 데이터 구조론과 알고리즘이 존재하지 않는가? 그냥 .NET 이나 JAVA 프레임워크에 있는 API를 호출하는 수준은 세월이 10년이 지나도 초보 수준에 지나치지 않는다.

아키텍트 또한 앞에서 폼만 잡는 사람이 아니다. 정말로 전체 시스템 상에서 성능과 확장성, 기존의 시스템과의 호환성 등 여러 측면에서 고객이 요구하는 사항들을 관리하고 올바른 방향으로 제시해야 한다. 또한 기존의 버전 1.0 에서 일정이나 리소스가 부족하여 구현 하지 못한 사양(Specification)들에 대하여 현재 완료된 프로젝트와 어떠한 연관 관계가 있는 지 확장 성과 재활용성, 또한 위험 측면에서 먼저 코딩 및 테스트를 해 보고 파악해 두어야 한다.

그래야 이를 믿고 따르는 코더들은 들 삽질(?)을 한다. 그렇지 않으면 대개가 코더들이 구현해보고 거꾸로 문제가 있다고 보고를 한다. 그 때는 프로젝트가 한 참 중반쯤에 치 닿을 때 그러한 문제가 발생한다면 프로젝트 일정이 더 지체가 된다. 물론 완벽한 설계가 어디 있겠는가 만은 사전에 미리 방지할 수 있는 일이나 예견 할 수 있는 일들은 경험의 노하우나 시스템의 관리로써 이를 막는 게 좋다.

· 나는 시스템 개발자인가? 응용 프로그램 개발자인가?

흔히 세상의 프로그래머에는 두 가지의 종족이 있다곤 한다.

첫번째는 그 이름하여 “시스템 프로그래머” 라고 부르는 종속이 있다. 가끔 해커라고들 오용해서 부르지만 주로 커널 이나 드라이버, 컴파일러 등 컴퓨터 시스템이 직접 동작하게 하는 프로그램에 관심이 많다. 그래서 인터넷에서 그러한 것들을 파헤치는 유틸리티나 직접 접근 가능한 소스가 있다면 흡족해 한다.

두번째는 “응용 프로그램 개발자”. 흔히, 그 시스템 위의 사용자 인터페이스나 데이터베이스 연결과 같은 미들 웨어 로직을 담당한다. 시스템 플랫폼에 따라 윈도우 클라이언트, 웹 응용 프로그램, 모바일/임베디드 장치 응용 프로그램 개발자로 불리 운다. 가끔 노가다(?) 라고 부르는 화면 위치 수정이나 디자이너가 만들어주는 그림 등을 붙이는 일들을 하며, 프로그래머가 아닌 사람들과 자주 만난다. 그러나 남들과 다른 창조적인 사용자 인터페이스 코딩을 할 수 있다는 것은 축복 받은 일이다. 이들로 인하여 계속하여 응용 프로그램 들이 진보적으로 발전하고 있으며 우리의 눈이 즐거워 지니깐 말이다. 이제 사용자 경험은 비트맵 방식에서 벡터 방식으로, 2D 평면에서 3D 입체 비주얼 방식으로 흘러가고 있지 않은가?

· 나는 디버깅에 능숙한가? 나는 테스팅을 좋아하는가?

만일 여러분들이 마이크로소프트나 구글과 같은 R&D 의 소프트웨어 디벨로퍼 엔지니어(SDE) 로서 지원한다면 프로그램 관리자는 여러분의 이력서를 보고 한 번쯤 이 질문을 던지게 될 것이다. 여러분이 지금까지 학교에서 했던 퀴즈나 텀 프로젝트에서 일어난 일에 대해 어떠한 문제가 발생 했는 지 정의하고 그것을 어떻게 해결 했는 지에 대해 물어 볼 것이다. 그 중 소프트웨어 개발자로 디버깅에 대해서 종종 물어 보는 데, 여러분들은 만일 Visual Studio 와 같은 개발 도구 및 디버깅 도구가 없다면 여러분의 로직(Logic)이 프로그램 상에서 잘 동작하고 있는 지 점검할 수 있는가?

여기서 한 가지의 여러분은 오류에 빠지기 쉽다. 여러분이 짜 놓은 코드는 여러분이 짜 놓은 로직 대로만 테스트 하기 쉬워 전혀 다른 방식으로 접근 한다면 예기치 않는 에러가 발생하는 데 이 때문에 전문적인 테스터가 필요하다. 코딩을 하는 것을 즐기는 사람도 있지만 다른 사람이 짜 놓은 프로그램을 점검하는 사람도 있다.

여러분은 어떠한 것을 좋아하는가? 모바일 이나 임베디드 관련 분야에서는 이 테스팅 하는 사람들이 모여 품질 관리 및 인증(Q&A) 팀으로 하나의 부서로 꾸며지게 되는 데, 여기에서 합격하지 않으면 제품 출하를 할 수 없다. 그야말로 강력하게 유닛 테스트, 병합 테스트 및 스트레스 테스트, 사용자 시나리오 별 테스트 등으로 이뤄져 제품 출시를 한다.

지금까지의 질문은 개발자로서의 스타일에 관계된 질문으로서 어떠한 것을 선호하는 지에 대해 알아 보기 위함이다. 이 외에도 하드웨어나 네트워크를 관리하는 업무에 대해 흥미를 느끼고 있는지? 아니면 그림이나 동영상 편집 등을 디자인에 흥미를 느끼고 있는지에 대해서도 생각해 볼 필요가 있다.  어떠한 스타일을 하든 지 간에 사실 이 세상에서는 정답은 없다. 자기가 좋아하고 계속해서 그 일에 대해 노력하는 사람에게 좋은 기회가 더 오더라도 놓치지 않을 것이다.

그러나 이것은 이제 막 깨달음을 안 첫 순간이다.

세번째 이야기는 현재 회사를 다니고 있는 분들에게 경력 관리에서도 도움이 되는 글일 것 입니다. 기대해 주셔서도 좋습니다! 내일 뵙죠~!!

트랙백 : http://bloter.net/archives/3365/trackback

댓글쓰기