너 자신을 알라
조금 이상하게 들릴지도 모르지만 모든 프로그래머가 다 같은 것은 아니다. 올바른 직장을 선택하는 데 있어서 가장 중요한 것 중 하나가 바로 자신이 어떤 유형의 프로그래머인지를 파악하는 것이다. 다양한 프로그래밍 관련 일을 하다 보면 자기 적성에 맞는 것도 있고 그렇지 않은 것도 있게 마련이다. 잠깐이라면 별로 마음에 들지 않는 일을 하는 것도 나쁘지 않지만, 흥미와 열정이 없이는 오랫동안 계속해서 일을 하기는 쉽지 않다. 최고의 프로그래머라면 자신의 일에 열정적이어야 하는데, 그냥 그럭저럭 흥미를 느끼는 정도만 가지고는 진정한 열정을 가질 수 없다. 자신이 무엇을 좋아하고 무엇을 싫어하는지 잘 모르겠다면 다음과 같은 질문을 생각해보자.
-
나는 시스템 프로그래머일까, 애플리케이션 개발자일까? 시스템 프로그래머는 컴퓨 터 시스템이 돌아갈 수 있게 하는 프레임워크나 툴, 컴파일러, 드라이버, 서버 같은 코 드를 만든다. 주로 다른 프로그래머들과 얼굴을 맞대고 일해야 하며, 프로그래머가 아 닌 사람들하고는 같이 일하는 경우가 거의 없다. 사용자 인터페이스 관련 업무는 거의 하지 않는다. 반대로 애플리케이션 개발자는 프로그래머가 아닌 사람들이 자기 일을 하 는 데 필요한 프로그램을 만드는 일을 하기 때문에 프로그래밍을 잘 모르는 사람들하 고도 자주 대면하게 된다. 많은 프로그래머들이 비전문가와 기술적인 주제에 관해 논의 하는 것을 당혹스러워한다. 반면에 프로그래머뿐 아니라 일반인도 사용하는 애플리케 이션을 만드는 것을 좋아하는 프로그래머도 있다.
-
나는 사용자 인터페이스 코딩을 좋아하는가? 사용자 인터페이스user interface, UI ― 사용 자 경험user experience, UX, 인간과 컴퓨터 상호작용human computer interaction, HCI이라고도 부른다 ― 설계는 프로그래밍, 그래픽 디자인, 심리학 같은 다양한 능력이 연관되는 분야다. 어떤 애플리케이션에서든 사용자 인터페이스가 눈에 가장 잘 들어오기 때문에 이목을 끄는 일이라고 할 수 있다. 사용자 인터페이스 설계는 기기의 제약 조건 때문에 창의성과 혁 신을 필요로 하는 모바일 애플리케이션 개발에서 특히 중요하다. 여기에 필요한 능력이 있고 이 일을 좋아한다면 상당한 경쟁력을 갖췄다고 할 수 있다. 많은 프로그래머가 UI 업무는 까다롭고 잘 하기 어렵고 욕 먹을 일은 많고 국제화나 접근성 문제까지 고려하 면 더 골치가 아프다고 생각하기 때문이다.
-
나는 디버깅에 능숙한가? 자신이 만든 코드의 문제점을 찾아내는 것도 고달픈 일이 지만, 다른 사람이 만든 코드의 문제점을 찾아내는 것은 상상만으로도 괴로워질 정도로 어려운 일이다. 디버깅은 막강한 분석력과 문제 해결 능력을 필요로 하는 작업이다. 버 그를 찾아내고 고치는 것 자체가 매우 보람찬 일이긴 하다. 그러므로 유지보수를 주 업 무로 할 때는 적성에 맞는지 확인할 필요가 있다(물론 내가 만든 코드는 항상 유지보수 를 해야 할 테니 어떤 프로그래머든 디버깅 능력은 있어야 한다). 많은 경우 유지보수 프로그래밍 업무를 하려면 지금은 구식이라고 여기는 옛날 기술을 주로 다뤄야 하며 오래된 회사에서는 더욱더 그렇다. 옛날 기술과 관련된 경험과 능력을 기르다 보면 선 택할 수 있는 일자리가 줄어들 수 있지만, 옛날 기술 전문가를 찾기가 하늘의 별따기인 만큼 옛날 프로그램을 쓰고 있는 소수의 회사에서 간절히 원하는 인재가 될 수 있다.
-
나는 테스팅을 좋아하는가? 테스팅 ― 품질 관리Quality Assurance, QA라고도 부른다 ― 은 생각할 수 있는 모든 프로그램 사용법을 빼먹지 않고 따져볼 수 있는 꼼꼼함과 프로그 램 개발자가 상상하지 못한 입력의 조합을 만들어서 버그를 찾아낼 수 있는 창의성을 겸비해야 하는 일이다. 숙련된 테스팅 전문가는 찾기도 힘든데다가 테스트용 도구나 자 동화된 테스트 케이스를 만들려면 프로그래밍 능력도 요구된다.
-
나는 아키텍트인가 코더인가? 어떤 코딩 일을 하든 어느 정도는 설계 능력이 필요하 지만 직종의 특성에 따라 둘 중 한쪽에 치우치는 경우가 많다. 그중에서도 대형 프로젝 트의 대규모 구조를 설계하는 걸 좋아한다면 코딩에 무게가 실린 자리보다는 소프트웨 어 아키텍트 자리가 더 끌릴 것이다. 좋은 아키텍트가 되려면 코딩하는 방법도 이해하 고 있어야 하지만 아키텍트 자리에서 일한다면 코딩은 거의 또는 전혀 안 하고 회의나 다른 사람을 만나는 일이 업무의 대부분을 차지할 수 있다. 소프트웨어 아키텍처에 관 한 공부를 따로 한 게 아니라면 먼저 코딩 관련 업무를 하면서 설계나 프로젝트의 여러 부분의 아귀를 맞추는 일에 대한 능력을 보이면서 아키텍트로 업종을 전환할 수 있다.
지금까지 살펴본 질문들은 주로 어떤 스타일의 프로그래밍을 좋아하는지에 대해 알아보기 위한 것인데, 프로그래밍과 무관한 다음과 같은 문제도 생각해봐야 한다.
-
나는 관리 업무에 흥미를 느끼고 있을까? 코더 중에서도 장기적으로 관리자가 되는 것을 목표로 삼는 사람들도 있고, 관리자가 되는 것은 상상만 해도 끔찍하다고 생각하는 사람들도 있다. 만약 관리자가 되는 쪽에도 관심이 있다면 리더십을 기르고 소프트 웨어 개발 과정에 있어서 기술적인 부분뿐만 아니라 인간적인 부분도 관리할 수 있는 능력을 보여야만 한다. 관리 업무가 목표가 아니라면 승진하기 위해 꼭 부하직원들을 관리하지 않아도 되는 기술 커리어 패스를 잘 갖추고 있는 회사를 찾아보는 것이 좋다 (어떤 커리어 패스를 선택하든 승진을 위해서는 리더십이 필요하지만 리더십과 사람을 관리하는 능력은 별개다).
-
대기업에서 일하는 편이 더 나을까? 대기업에서 일하는 데는 나름대로 장점도 있고 단점도 있다. 예를 들어 대기업은 (불경기에는 정리해고도 빈번하지만) 안정성이 좋은 편이며, 커리어 패스를 쌓는 데도 유리한 편이다. 그리고 이름값이 있어서 기술 분야를 잘 모르는 사람들에게도 자기 회사를 얘기하면 쉽게 능력을 인정받을 수 있다. 하지만 관료주의나 경직성, 사내 경쟁 때문에 스트레스를 받기 쉽다는 단점도 있다.
-
중소기업에서 일하는 편이 더 나을까? 월급은 적을 수 있지만 회사가 점점 커지고 사업이 성공 가도를 달린다면 신생 기업의 초기 일원으로 들어가는 것도 나중에 여러모 로 도움이 될 수 있다(돈방석에 앉을 수도 있다). 중소기업이 업무 환경 면에서 대기업 보다 더 자유로울 수도 있다. 하지만 신생 벤처 기업은 대부분 망하기 때문에 1~2년 안에 실직할 수도 있고, 그런 경우 대기업에서 주는 퇴직금 같은 혜택은 기대할 수 없 을지도 모른다.
-
오픈 소스 프로젝트를 좋아하는가? 거의 대부분의 프로그래밍 업무는 소스가 공개되 지 않는 상용 프로젝트를 중심으로 돌아가는데, 이런 프로젝트를 마음에 들어 하지 않는 프로그래머들도 있다. 하지만 최근 들어 오픈 소스 프로젝트에 참여하면서도 자신이 한 일과 관련하여 월급을 받을 수 있는 기회를 제공하는, 오픈 소스 개발에 호의적인 회사들도 조금씩 늘어나고 있다. 내가 한 일이 꼭 오픈 소스가 되어야 한다고 생각한다 면 이미 오픈 소스에 발을 담그고 있는 회사를 찾아보는 게 좋다. 그렇지 않은 회사에 서 오픈 소스 프로젝트를 하려고 노력해봤자 힘만 들고 성과는 없을 가능성이 높다.
-
나는 장기 프로젝트를 좋아하는가? 아니면 단기 프로젝트를 좋아하는가? 한 프로젝 트에 길어야 몇 달 정도씩만 매달리는, 언제나 변화를 추구하는 프로그래머도 있다. 단기 프로젝트를 더 좋아하고 이곳저곳을 돌아다니는 것을 꺼리지 않는다면 일반적인 회 사보다는 컨설팅 회사 같은 데서 일하는 것도 나쁘지 않다.
위에 있는 질문들에 대한 답은 사람마다 다 다를 것이다. 정답도, 오답도 따로 없다. 하지만 위 질문들에 대해 자신이 정확하게 원하는 것을 답할 수 있다면 자신이 진정으로 원하는 일을 찾을 수 있는 가능성이 더욱더 높아질 것이다.
프로그래밍 면접, 이렇게 준비한다(4판) 자세히 보러가기