What does “프로그래머” do?

정말 많은 산업 분야에서 “개발자” 혹은 “프로그래머”를 요구하고 있습니다. 특히, 최근의 스타트업이 대부분 IT 기반의 사업을 진행하고 있기 때문에, 스타트업 업계에서 “좋은” 개발자 구하기가 하늘의 별 따기라고 불릴 정도로 직업 수요가 공급보다 훨씬 많은 분야입니다. 프로그래머는 여러 분야를 넘나드는 것이 쉽기에 우선 전반적인 직업에 대한 소개를 한 뒤, 추가적으로 게임 산업 쪽에 대한 이야기를 짧게 풀어볼까 합니다.

#1.  “프로그래머”, “코더”, 기타 등등.. 이란?

(출처 : http://www.professional-one.com/portfolioentry/programmer/)

기본적으로 프로그래머는 ‘서비스’ 직업입니다. 누군가가 이러이러한 내용을 소프트웨어로 구현하고 싶어한다 하면 그것을 ‘코드’로 옮겨주는 역할을 합니다. 컴퓨터와 사람 사이의 좋게 말하면 통역사, 혹은 개발자들 사이에 농담으로는 노예감독(…)이라고 할 수 있습니다. 그렇지만 단순히 기획자가 원하는 내용을 옮기는 역할보다는 더 중추적인 역할을 많이 맡게 되는 경우가 많습니다. 왜냐하면 컴퓨터로 할 수 있는 일과 할 수 없는 일이 비 프로그래머 입장에서는 모호하기 때문에 프로그래머의 입김(혹은 실력)에 따라 기획이 변경되는 경우가 많기 때문입니다.

여기서 ‘코더’라는 개념이 등장하는 데요, ‘코더’는 과거 천공카드를 이용해서 프로그래밍 하던 시절 혹은 케이블을 손으로 이어 프로그래밍 하던 시절(…) 작업 명세를 던져주면 실제로 카드에 구멍을 내거나 케이블을 손으로 잇는 사람들을 일컬었던 말이라고 합니다. 이러한 뜻이 이어져서 요즘에는 단순 작업 명세를 받으면 1:1 변환처럼 단순히 명령을 코드로 바꿔주는 사람들을 일컫을때 사용합니다. 부정적인 의미죠. 자기 주도적으로 새로운 해결 방식, 새로운 기술을 도입하는 것이 아니라 구체적인 작업 명세를 바탕으로 단순 번역일만 하기 때문입니다.

그래서 언제나 코더가 아닌 프로그래머가 되도록 노력하는 것이 중요합니다. 그렇기 때문에 항상 새로운 기술에 열려있고 과거에 풀지 못했던 문제들을 다른 방식으로 풀려고 노력하는 자세가 중요하다 하겠습니다.

#2. 어떤 사람들이 “프로그래머”가 될 수 있나요? 나중에는 어떻게 되나요?

(출처 : http://blog.joins.com/media/index.asp?page=1&uid=doiljs&folder=0&page_size=3&viewType=&day=20110106)

“There is no such thing as a free lunch” 라는 유명한 문구가 있죠. 하지만 ‘프로그래밍’의 세계에서는 사실 그동안 ‘공짜 점심’이 매우매우 많았습니다. 하드웨어의 발달에 따라서 소프트웨어의 성능은 ‘자동적으로’ 증가해왔기 때문이죠. 과거에는 소프트웨어의 성능을 올리기 위해서 기계어에 가까운 어셈블리를 이용하여 튜닝을 할 정도로 프로그래머가 되기 위한 진입 장벽이 높았습니다. 가장 널리 사용되는 C 혹은 C++의 성공은 최적화된 머신 코드를 만들어 줘서 성능이 좋았던 것이 큰 요인이라고 할 수 있습니다. 하지만, 요즘에는 높아진 컴퓨터 성능에 따라 인터프리팅 언어 – Python, Javascripts 등 – 를 이용해서도 충분히 원하는 퍼포먼스를 내는 프로그램을 개발할 수 있게 되었습니다. 결국 이러한 변화는 프로그래밍을 조금 더 쉽고 ‘덜’ 전문적인 일로 만들어 주고 있습니다. 수많은 프로그래밍 보조 툴이 출시 된 것도 진입장벽을 낮추는데 한 몫을 했습니다. 많은 일반인 대상 프로그래밍 강좌가 열리는 것도 사실은 프로그래밍에 대한 관심이 높아졌다기보다는 프로그래밍이 비 전문적이고, 즉각적이고, 더 쉬워진 일이 되었기 때문이라고 보는 것이 더 합당합니다.

그렇다면, 아무나 프로그래머가 될 수 있을까요? 많은 프로그래머들이 고민하고 자조 하고 있는 부분이 바로 이 지점입니다. 요즘은 누구나 프로그래머가 될 수 있기 때문에 점점 잡 마켓이 좁아지고 몸 값이 싸질 것을 우려 하는 것이지요. 일견 맞는 부분이 있지만, 제 개인적인 의견으로는 그렇지 않습니다. 소프트웨어 자체의 복잡도가 우리가 얻을 수 있는 공짜 점심보다 더 빠르게 증가하고 있기 때문이지요. 전문적인 예로는, 멀티 코어의 등장을 들 수 있습니다. 과거에는 단일 코어 CPU 였기 때문에, 코드의 수정 없이 과거에 사용했었던 코드를 더 빨리 실행할 수 있었습니다. 하지만 멀티 코어가 등장하면서 동일한 코드로는 하드웨어를 충분히 활용할 수 없게 되었습니다. 단일 코어의 성능의 발전이 한계에 다다랐기 떄문이죠. 이를 위해서는 멀티 쓰레딩 프로그래밍 등 더 복잡한 프로그래밍 지식이 요구됩니다. 비 전문적인 예시로는 서비스 자체가 매우 커진 것을 들 수 있겠습니다. 과거에는 이미지를 공유하는 것 자체도 매우 어려운 일이었지만 요즘엔 동영상 공유도 매우 활발히 이루어지고 있습니다. 게다가 동영상을 보려고 하는 고객 역시도 매우 많아졌기 때문에 이를 뒷받침 하기 위해서는 단순한 예제 코드 자체로는 어려움이 있습니다. 이를 해결하기 위해서는 좀 더 컴퓨터를 깊숙히 이해하는 것이 필요하게 됩니다.

한마디로 요약하자면, 아무나 할 수 있지만 결국엔 전문적인 지식과 좋은 실력이 중요하다라고 말씀드릴 수 있겠습니다. 그렇다고 겁먹지는 마시고 정말 관심이 있으시다면 지금이라도 뭔가를 ‘코딩’ 해보는 것이 중요하다고 생각합니다.

#3. 필요한 역량은?

0순위 – 영어

개발 업계의 트렌드는 정말 시시각각으로 변화합니다. 그렇기 때문에 새로운 트렌드가 한국에 들어오기에는 시간이 꽤 걸립니다. 한국어로 된 정보를 기다리다가는 남들보다 2~3년 씩 뒤쳐지기 마련입니다(사실, 공식 document 같은 경우는 한국어로 된 것을 거의 보기 힘듭니다. 일본어로된 document는 종종 보입니다만..). 그것 뿐만이 아니라 대부분의 도움이 되는 자료 혹은 질문&해결법 들은 google, 혹은 stackoverflow 에 영어로 작성되어 있습니다. 이를 자연스럽게 받아들이고 친숙해지지 못한다면 언제나 2-3류 개발자로 남아 있을 수 밖에 없습니다.

1순위 – 순발력

여기서 순발력은 문제를 빠르게 해결할 수 있는 능력을 말합니다. 문제를 빠르게 해결하는 것은 당연히 중요합니다. 특히 벤쳐의 경우에는 서로 비슷한 서비스를 만드는 경우가 많기 때문에 시장 선점을 고려한다면 빠른 개발이 필수적입니다. 그리고 순발력은 새로운 기술을 받아들이고 적용하는능력을 포함합니다. 새로운 기술은 새로운 문제를 해결하는 것이거나 기존의 문제를 더 쉽게 풀기 위한 것이 보통이기 때문입니다.

조금 애매모호한 역량이라고 볼 수도 있겠지만, 실제로 함양이 가능한 역량입니다. 기존 시스템을 깊이 이해하고 있는 사람은 새로운 시스템을 쉽게 받아들이기 떄문입니다. 예를 들어, C++, Python을 깊이 이해하고 있는 사람은 Java, javascript를 해당 언어를 처음 접하는 사람보다 빠르게 언어를 익힐 수 있습니다. 마치 5개국어를 하는 사람이 1개국어를 더 익히는 것이 쉬운 것과 유사하다고 할 수 있습니다. 개인적으로 추천드리고 싶은 방법은 주류 프로그래밍 언어(C++ or Java)하나와 스크립트 언어(Python or javascripts or ruby) 하나를 깊이 파는 것입니다. 가능하다면 함수형 언어 하나(Scala, Haskell, OCaml, Closure 등)도 가볍게 보는 것도 좋습니다. 그렇게 하고 나면 다른 언어들은 조금만 익히면 자연스럽게 사용할 수 있게 될 것입니다.

2순위 – 컴퓨터에 대한 기초지식

좀 더 어려운 문제를 풀게 될 수록 컴퓨터 전반에 대한 지식이 요구됩니다. 위에서 예로 들었던 멀티 쓰레딩 프로그래밍이나, 패럴렐 컴퓨팅을 해야 하는 상황이면 하드웨어에 대한 깊은 지식이 필요하게 되고, 서버 프로그래밍을 하게 되면 컴퓨터 네트워크나 운영체제에 대한 심도 있는 지식이 요구됩니다. 자료구조, 알고리즘과 같은 지식은 컴퓨터적인 사고를 할 수 있게 만들어서 두고두고 도움이 됩니다. 컴퓨터 공학을 전공한 사람의 경우 관련 지식을 전공 수업을 통해 관련 지식을 얻을 수 있지만, 비 전공자가 코딩을 배워 업계로 넘어온 경우에는 관련 지식을 찾아서 공부하는 것이 필요하다 하겠습니다.

3순위 – 수학

더 어려운 문제를 풀게 되면 수학적 지식이 요구될 수도 있습니다. 특히 오토마타나 선형 대수학은 직접적으로 사용되는 수학 스킬입니다. 그러므로 ‘학문’이 아니라 ‘도구’의 의미로써의 수학을 익히도록 노력하는 것이 중요합니다.

#4 산업 전망

많은 국내 개발자들이 직업으로서의 안정성이 떨어진다, 치킨집 사장님이 나보다 더 많이 안다(?) 등의 자조적인 농담을 하곤 하는데요. 몇몇 분들은 이 분야가 공사판 노가다(!)에서나 볼 수 있는 인력 수급 체계를 가지고 있다고 얘기를 합니다. 국내 IT 업계의 인력 수급 환경이 “IMF 실업 해결을 위한 10만 프로그래머 양병설(?)”과 같은 정부 시책으로 인해 어느 정도 왜곡 되어 있는 것은 사실이지만, 제 개인적인 생각으로는 ‘거짓’입니다.

주커버그가 만인에게 ‘프로그래밍 교육’을 시켜야 한다 라고 주장하는 일면에는 그들의 어려운 인력 수급 환경이 있습니다. 국내 대다수의 기업도 마찬가지 입니다. 국내의 발달된 사교육 시장의 영향으로 인해 프로그래머 인력 시장은 중고차 시장과 비슷합니다. 레몬 마켓 이지요. 그래서 검증되지 않은 신입들에게는 값을 싸게 매겨 줄 수 밖에 없습니다. 하지만 자신의 능력을 증명하는 순간 회사에서 받을 수 있는 대우는 급격히 높아지게 됩니다. 타 분야에 비해 이직이 자유로운 점도 자신의 몸값을 쉽게 불릴 수 있도록 도와줍니다.

인공지능 분야에서 특이점(singularity)가 찾아오지 않는 한, 프로그래밍을 요구하는 분야는 ‘무조건’ 증가할 것이 명백해 보입니다. 그러므로 산업 전망은 밝다라고 얘기할 수 있겠네요.

#5. 게임 업계에 대해서.

(출처 : http://egloos.zum.com/benzbmw/v/1265419)

게임 개발은 크게 3 파트로 나누어서 이루어집니다. 어떤 게임을 만들 것인지에 대한 고민을 하는 ‘기획’파트, 이를 시각적으로 구현해주는 ‘그래픽’파트, 컴퓨터로 구현해주는 ‘개발’파트 입니다. 프로그래머는 대게 ‘개발’파트에 있게 됩니다.

개발은 정말 다양한 포지션이 있고 어떻게 나누느냐에 따라 천차만별입니다만, 정말로 거칠게 나눈다면 클라이언트 파트와 서버 파트로 나눌 수 있습니다. 클라이언트 파트는 ‘인 게임 컨텐츠’를 만드는 사람들, ‘UI’를 만드는 사람들, ‘게임 로직’을 만드는 사람들 등등 다양한 역할이 존재합니다. 보통 그래픽과 관련된 개발을 하는 경우에는 role이 고정되어 있는 경우가 많고, 게임 로직 혹은 UI 등을 만드는 경우 role을 종종 바꾸기도 합니다만 이는 회사마다 천차만별이라 딱 정해서 말씀드리기는 어렵습니다.
서버 파트에서는 핵심 서버 로직을 만드는 파트, 서버 운영에 관련된 툴 작업, 게임 운영에 관련된 툴 작업 혹은 불량 유저를 감시하기 위한 보조 API를 개발하는 등 다양한 역할이 있고, 이 역시도 고정되어 있기도 바뀌기도 합니다.

보통 기획 단계부터 참여하여 어떻게 구현할 것인지를 고민하고 개발 기간 내에 구현이 어렵다고 판단될 경우 수정 제안 혹은 반려를 하게 됩니다.
그 다음은 수정되어 넘어온 기획을 바탕으로 개발 및 테스트를 진행합니다.
개발이 만족스럽게 진행되어 판단된 경우 QA를 거쳐 퍼블리싱 작업을 하게 되면 개발의 한 사이클이 완료되게 됩니다.

보통은 위 개발 사이클이 여러개가 동시에 진행되게 되게 됩니다.

게임 개발의 재밌는 점은 근무 시간에 게임을 해도 뭐라 하지 않는다는 거..? 하지만 개발을 계속 하게되면 자기가 개발하는 게임은 점점 안하게 되긴 합니다(…). 게임이 아니라 일이니깐요… 근무 환경도 자유로운 분위기라 편하기도 하지만, 야근도 잦을 수 있다는 단점도 있습니다.

* 글을 인용하실 때에는 반드시 링크를 포함하여 출처를 밝혀 주시기 부탁드립니다.

One thought on “What does “프로그래머” do?

Leave a comment