E,AHRSS

프로그래머

last modified: 2015-09-07 10:37:16 Contributors

멋있다.jpg
[JPG image (Unknown)]
현실.jpg
[JPG image (Unknown)]
이상 현실
BNvtaNiCUAAsQhe.jpg
[JPG image (Unknown)]
javabus.jpg
[JPG image (Unknown)]
진짜 현실. 특히 SI는...


Contents

1. 개요
2. 직종의 차이
3. 일반적인 프로그래머
4. 공부와 지식발전
5. 근무 여건
6. 필요한 능력
7. 역사상 최초의 프로그래머
8. 유머
9. 이 속성을 가진 캐릭터
10. 관련 직무
11. 유사 용어

1. 개요

컴퓨터 프로그램을 만드는 사람이다. 유명한 프로그래머로는 존 카멕, 성공한 사람 중엔 빌 게이츠 같은 사람이 있다. 그리고 세상에는 유명하지도 않고 성공하지도 못한 수많은 프로그래머들이 있다.

한편 프로그래밍 언어와는 상관없이 DB, 알고리즘, 자료 구조간의 관계/구조를 설계하는 사람을 소프트웨어 설계자(아키텍트)라고 구분하여 부르기도 한다.

2. 직종의 차이

프로글래머 '프로그래머'란 단어 하나로 통칭하여 부르고 있긴 하지만, 세부적으로 살펴보면 그 범위는 매우 넓다. 단순히 코더라고 불리는 직종이 있는가 하면[1], 저급 언어로 아주 복잡한 것까지 다루는 직종도 있는 등[2] 그야말로 천차만별이다.

프로그래머를 하나로 정형화하는 것은 힘들다. 예시를 들면 보안 쪽을 다룬다면 적어도 C나 어셈블리어 정도를 다루며 메모리의 변화 하나하나를 봐야 할 테지만, 게임 개발자가 이러면 이도 저도 아니게 될 뿐더러, 할 필요도 없다. 엔진 하나하나를 일일히 짜는 경우가 아닌 이상, 보통 몸값 비싼 고급개발자가 아닌(관리역으로 1~2명만 쓰고), 자잘한 건 코더를 대량 투입해도 되기 때문이다. 반대로 엔진을 직접 짜야 한다면 3D폴리곤을 다루는 엔진 기준으로 그래픽스와 관련된 연구 기술들과, 이와 관련된 수학 및 물리학이 다량으로 쓰이기에, 코더로는 손을 대기 어렵다.(옛날 게임을 비롯해 일부는 그렇게 하기도 하지만)

그리고 게임 개발자의 경우도 C 같은 비교적 저급적인 언어로 밑바탕부터 짜는 경우가 있는가 하면, 엔진이나 좀 더 고급적인 언어로 짜는 경우도 있고, 아예 언어보다 툴 성격이 강한 프로그램으로 만드는 경우도 있다. 과거에는 C/C++ 을 주로 사용했는데, 오늘날에는 게임엔진/툴을 C/C++ 로 만들고 실제 게임은 Lua 등 다루기 편한 고급 스크립트 언어를 사용해서 만드는 경우가 많다. 그리고, 게임엔진/툴의 경우에는 사다쓰는 경우도 많기때문에 실제 바닥부터 직접 만드는 회사(대부분의 대기업 포함. 이 정도 되면 사의 기술 경쟁력을 위해 사업 하나마다 코드를 OS부터 시작해서 일일히 바닥부터 짜내려가기 때문에 보통 모든 프로그래밍 인력을 코어 프로그래머, 전문용어로는 소프트웨어 개발자를 뽑는 경우가 대부분이다.) 를 제외하면 오히려 고급언어의 수요가 더 높다고 볼수도 있다. 아래의 설명들도 대표적인 몇 가지만 모은 것이기에 모든 프로그래머에게 해당되지는 않는다.

3. 일반적인 프로그래머

직종에 따라 차이가 있다곤 해도, 뛰어난 프로그래머가 되기 위해 배워야 할 것들은 형언할 수 없을 정도로 무척이나 많다. 또, 직종에 따라서는 해당 분야에 대한 어느 정도의 지식을 가지고 있어야 한다.

그리고 일반적인 프로그래머는 거창한 알고리즘 연구가가 아니다. 알고리즘 연구 같은 것은 보통 대학원의 연구실이나, 대기업 연구소에서 수행한다. 대다수의 거의 모든 프로그래머들은 사실 툴 사용자라 봐야 할 것이다. 전문적인 용어로는 '코더'라고 불리우는데, 보통 소프트웨어 개발자와는 따로 구별한다. 프로그래머들의 목적은 이미 주어진 여러가지의 프레임워크나 라이브러리를 사용하여 원하는 목적을 달성하는 것이기 때문에, 알고리즘 자체에 대한 연구는 수학자나 전산학자들에 의해 이루어지고, 그 연구결과는 그 툴을 제공하는 소수의 코어파트 프로그래머들이 주로 가져다가 직접 사용하는 핵심 프로그램과 DLL을 만들거나, 툴을 개발하여 사용하며, 일반적인 프로그래머들은 그렇게 만들어진 툴을 가져다가 엔드유저 입맛에 맞게 가공하고 꾸미는 직업이다.

레고를 가지고서 비유를 들자면, 수학자나 전산학자들의 연구는 블럭 자체를 제조하는 일이라고 보면 되고, 소프트웨어 개발자는 레고 블록들을 셋트 판매품목으로 묶거나 직접 가져다 쓰며, 프로그래머들의 개발은 한 개의 레고 세트를 가져다가 조립하는 과정 이라고 보면 된다.

코어파트 프로그래머들 입장에선 사실 일반 프로그래머들 자체가 엔드유저이기 때문에 최대한 관련지식 없이 '쉽게' 쓸 수 있도록 많은 배려를 하고 있으며, 이 때문에 프로그래머의 진입장벽은 일반인들의 생각과 달리 낮은 편이고, 덕분에 요즘은 양산형 프로그래머가 매우 많다. 특히나 오늘날에는 플랫폼 싸움이 커지면서, 각자 자신들의 플랫폼 생태계를 성장시키기 위해 어플리케이션 만드는 과정을 점점 쉽게 만들어가는 추세이다보니, 과거에는 자신이 만든 프로그램의 몇몇 파트에 다른 라이브러리의 함수를 가져다 사용하는 수준이었다면, 요즘에는 아예 프로그램의 구조와 디자인 및 대부분의 뼈대가 되는 코드를 플랫폼에서 제공하는 프레임워크가 다 만들어 놓으면, 프로그래머는 거기에 부분 부분 자신의 코드를 끼워 넣어서 손만 보는 수준까지 왔다[3].

자신의 영역에 대해 진입장벽이 점점 낮아지는 이런 상황에 대해 비판비관하는 프로그래머들도 많지만, 프로그래밍 자체는 그저 자신의 창의력을 발휘하기 위한 툴일뿐이고, 툴이 쉬워졌다는것은 툴 자체에 신경써야 하는 시간과 노력을 원래 목적에 할애할 수 있게 되었다는것이기도 하기때문에, 오히려 환영하는 프로그래머들도 많다.[4]

그런데 유의해야 할 점은 진입장벽이 낮다고 해서 결코 '쉬운' 직업은 아니라는 점이다. 툴을 아무리 쉽게 만든다고 하더라도 여러가지 다양한 목적을 수행하기 위해서는 결국 복잡해질 수 밖에 없으며, 툴이 쉽고 간단해질 수록 최적화와는 거리가 멀게 된다는 대전제가 거의 항상 성립하기 때문에, '좋은' 프로그램을 만들기 위해선 어쩔 수 없이 코어파트에 대한 최소한 어느 정도의 지식은 필요하다. 게다가 사용하는 툴에 자신이 원하는 기능이 없는 경우도 더러 있으며, 고급분야로 들어가면 툴 자체의 사용에 대해서도 상당한 수준의 지식을 전제로 하기 때문에, 부족한 부분은 전부 스스로 보완해야 한다. 따라서 개개인의 실력분포가 아마도 가장 크게 벌어지는 직업 중 하나라고 볼 수도 있다.[5]

또한, 양산형 프로그래머들의 경우를 제외하면, 실력을 단순히 '잘한다', '못한다' 수준의 일도양단식으로 구분하는 것도 사실상 불가능하다. 그리고 배우고 알아야 할 지식들이 매우 많기 때문에 각자 흥미를 갖고 파고드는 부분에 따라서 잘하고 못하는 부분이 극명하게 갈린다..[6]

4. 공부와 지식발전

타 분야에 비해 항상 공부해야 하는 정도가 매우 심한 분야이다. 덕분에(?) 학원출신의 프로그래머라도 이후 독학으로 대학출신의 프로그래머를 능가하는 것도 얼마든지 가능하며, 대학에서 우수하였더라도 졸업 이후 자기계발 및 학업을 게을리하게 되면, 그저 그런 양산형 프로그래머 수준으로 떨어지기도 매우 쉽다. 특히나 IT 분야는 기술발전속도가 가장 빠른 분야중 하나이기때문에 공부를 그만두면 순식간에 뒤쳐질 수 밖에 없다. 따라서 프로그래머라는 직업을 그만두는 때까지 공부를 게을리 해서는 안된다. 그러므로 어떻게 보면 사실 프로그래머에게 필요한 가장 중요한 적성은 뜬구름 같은 얘기이기도 하지만, 프로그래밍 그 자체에 대한 '흥미'라고 할 수 있다. 흥미가 있는 사람이라면 누가 시키지 않아도 직접 찾아서 새로운 기술과 관련 정보를 습득할테고, 누가 강요하지 않아도 알아서 공부할 것이기 때문이다. 그와 달리 학교에서처럼 시험같은 것으로 강요하는 사람이 없을 경우 스스로 공부를 하지 않는 케이스라면, 학교를 졸업하고 난 이후에는 공부에 소홀 할수 밖에 없을 것이고, 그렇게 되면 다른 사람들에 비해 실력이 뒤쳐질 수 밖에 없을 것이다.

또한, 컴퓨터 분야의 발전과 변화가 엄청나게 빠르기 때문에 어제의 상식이 구시대의 유물로 변하기도 한다. 이렇게 발전하는 기술을 계속 따라잡으려면 새로운 지식을 받아들이는 것을 게을리해서는 안 된다. 때문에 개발자를 위한 대부분의 교양서에서도 퇴근 이후에 자기 개발 시간을 갖도록 권하고 있는데, 학생 때부터 야근을 체험할 정도로 야근이 많은 한국에서는... 더 이상의 자세한 설명은 생략한다 일단 집에 들어가야지 그렇기에 공부하기도 힘든데다가 프로그래밍을 할만한 재능이 부족하면 일정 수준 이상으로 올라가기가 힘들다. 어느 정도로 심각하냐면, 10년 동안 프로그래밍하면서 먹고 산 보통 프로그래머가 어느 정도 뛰어난 실력을 지닌 신입 프로그래머만도 못한 경우가 흔하다.[7] 괜히 유명한 프로그래머들이 20대 초반의 이른 나이에 자기 회사를 차리고서 두각을 드러내는 일이 비일비재한 것이 아니다.

앞서 말했듯이 관련 지식의 발전 속도가 빠른 한편, 프로그래머들 사이에 빠르게 발전하는 지식에 관한 공유가 무척 활발하다. 예를 들어, 위키위키는 프로그래밍에 쓰는 패턴들을 정리하기 위해서 처음 탄생한 것이다. 그리고 모르는 사람들이 모여서 상업적인 목적으로 만든 것보다 쓸만한 물건을 만들어 내는 오픈 소스 프로젝트는 활발한 지식 공유 없이는 유지될 수가 없다.


5. 근무 여건

뛰어난 두뇌와 피나는 노력이 필요한 직종이지만, 한국에선 4D(Dirty, Difficult, Dangerous + Dreamless)라고 불리기도 한다.[8] 그래서 프로그래머도 소설가그림쟁이처럼 나는 정말로 이걸 하고 싶다., 나는 이게 아니면 안 된다. 라는 정신이 없으면 못하는 직종이라고 말하는 사람도 있다.

흔히 프로그래머는 학력이 중요하지 않다고 말하는 사람들이 있다. 사실 완전히 틀린 말은 아니다. 고가의 실습 도구가 필요한 다른 분야와는 다르게 PC 한 대만 있으면 되고, 정보는 인터넷에 넘쳐난다. 마음만 먹으면 혼자서도 공부할 수 있는 것이다. 그러나, 그것이 실력이 중요하지 않다는 이야기는 아니다. 말인 즉슨 학력 = 실력이 아니다일뿐. 사실, 대학에서 배우는 내용들은 추상적인 것들이 많아서[9] 학부에서 배우는 것들 중에는 나중에 직업 전선으로 뛰어들었을 때 거기서 하는 프로그래밍과 아예 관련이 없는 것들도 많이 있고, 관련이 있다고 하더라도 그것들을 실전에 녹이는 것은 힘든 경우가 상당히 많다. 대학에서 일반적인 기업의 일반적인 코딩 실무에 필요한 능력만 간추려서 가르칠 경우, 학업 분량은 그 다지 많은 양이 아니다. 그렇기 때문에, 사실 정말 고급지식을 필요로 하는 분야[10]가 아닐 경우에는 대학이 오히려 시간낭비가 될수도 있다.

그리고 국내 산업 현장에서는 경험이 많은 프로그래머가 필요한 산업 자체가 턱없이 부족한 상황이다. 개발 난이도가 가장 높다고 생각되는 것은 당연히 당대 컴퓨터 기술력의 결정체와도 같은 게임 개발이라고 할 수 있는데, 가장 개발이 어려운 게임엔진은 NC소프트와 같은 국내 1위업체도 개런티를 지불하고 구입해서 쓰는 현실이다. 쉽게 말하면 게임 모드 개발하는 것과 다른 것이 하나도 없다.[11] 실상 실무에서는 5년차 이상만 되어도 국내업체에서 요구하는 웬만한 과제는 수행할 능력이 되므로 10년, 20년 업계에서 잔뼈가 굵은 고급프로그래머에 대한 수요가 부족하다. 따라서 년차가 쌓이고 경력이 쌓이면 사내 정치가 관리자가 되어야 하는데 코딩덕후가 정치력까지 겸비하는 경우는 드물기 때문에 문제가 아닐 수 없다. 그래도 다행스러운 것은 최근에는 경험있는 개발자에 대한 수요가 점점 늘어나고 있어서 년차가 오래된 개발자 중에서도 계속 현역으로 개발업무를 담당하는 인력이 차차 늘고 있는 추세이다. 반면, 이 이야기는 개발에 재능있는 젊은 신입사원의 유입이 점점 줄어 들고 있다는 이야기도 된다. 다만 구글(Google)과 같은 회사들이 점점 사업영역을 넓히고 또 해당 사업분야에서 성공을 거둠에 따라 앞으로 특정 분야 기술 하나만으로 먹고 사는 국내 중소회사들의 미래는 점점 어두워지고 있고, 차츰 SI성 업무가 늘어나면서 그 수요가 언제까지 이어질지도 불분명하다는게 가장 큰 문제이다.

예전의 프로그래머는 대부분 코딩덕후였지만, 정부의 국비 지원과 더불어 '다른 거 상관 없이 무조건 편하고 돈 되는 직업'이라는 인식 때문에 학원 등지에서 동일한 실력과 지식의 양산형 개발자가 많이 배출돼 어떤 의미로는 인력공사 수준이 됐다. 다른 말로, 3D직업 코딩 노동자들만 양산된 것.


6. 필요한 능력

기본적으로 프로그래머가 되기 위해선 프로그래밍 언어는 당연히 알아야 하며, 직종에 따라서는 상당한 수준의 알고리즘과 자료 구조에 대해서 알아야 하는 경우도 있다.

한편 소프트웨어 설계자는 프로그래밍 언어는 몰라도 되지만, 최소한 언어의 구조에 대해서는 자세히 알아야 한다.

그리고 혹시나 프로그래머를 지망하는 공학도가 있다면, 영어는 말은 어눌하더라도 기술언어 정도는 읽고 쓸수있을 레벨을 만들어두는것을 추천한다. 컴퓨터는 미국에서 만들었고 현재 미국이 리드하고 있지 한국어로는 프로그램을 짤 수 없다!!![12]


7. 역사상 최초의 프로그래머

대표적인 남초 직업이지만 최초의 프로그래머로 인정받는 에이다 러브레이스 백작부인은 여성이다. 그리고 컴퓨터가 도입된 극히 초창기의 프로그래머는 오히려 여성이 훨씬 많았다. 이는 초창기 초대형 컴퓨터에서 프로그래머란 사실상 대형컴퓨터의 단말을 조작하는 '[[오퍼레이터]' 수준으로 여겨져서, 그리 좋은 취급을 받지 못했기 때문이다. 그래서 인간 컴퓨터이프레이터로 일하던 여성들이 그대로 프로그래머로 전직하여 일하는 경우가 많았다.지금도 그런데 당시에는 허드레일 취급이며 육체적 능력을 필요로 하는 것도 아닌 단순 작업으로 여겨져서 이미 '안정된 직업을 가진 남성들'이 별로 선호하지 않았던 것. 그런데 이게 슬슬 복잡해지고 돈이 되기 시작하자 남자들이 마구 몰려서 결국 남초화 되었다. 살짝 웃기는 일이다(…).

현대의 프로그래밍 관련 책자들 중에 저자가 여성인 경우도 간혹 있다. 여성의 꼼꼼함이 프로그래밍에 도움이 되는 것도 사실이다.


8. 유머


앞서 언급된 이미지는 꼭 한국에 국한된 것만은 아닌듯하다.

2 - 강도 : 돈 내놔! 안 그럼 네 목숨은 없다!"
3 - 프로그래머 : 이봐, 난 프로그래머라고.
강도 : 그래서?
4 - 프로그래머 : 난 돈도 없고 목숨(삶)도 없어(…).
프로그래머도 울고, 강도도 울고, 감상하던 독자도 울었다. 으헝헝헝헝

백수가 될수록 화려해진다(…).

22.jpg
[JPG image (Unknown)]

유재석홍진호가 찬 명찰에 '프로그래머'라고 써 있는 것을 보고 제작진에게 한 질문. 제작진은 프로게이머와 프로그래머를 헷갈렸고 유재석은 프로그래머라는 직업을 몰랐다. 프로그래머 지못미
프로게이머와는 다르다 프로게이머와는!

1.jpg
[JPG image (Unknown)]

레드불 탄창
절규.jpg
[JPG image (Unknown)]

프로그래머 생각하는 성공이 사람 엄청 좋은데서 일하네... 부품이 몇개 남았는데 기계가 정상작동된다 뭐야 몰라 무서워

프로그래머_심영.jpg
[JPG image (Unknown)]

내가 프로그래머라니!

10. 관련 직무

11. 유사 용어

----
  • [1] 보통 단순한 기초 언어 한 두가지와, 다른 고급 개발자들이 만든 엔진 정도를 이용하여 업무에 필요한 프로그램이나 그 부분을 만드는 사람을 의미한다.
  • [2] 기계 친화적인 저급 언어(기계어, 어셈블리어)는 인간 친화적인 고급 언어보다 배우기는 쉽지만(사실 저급언어에서 배우는 내용의 절반 이상은 언어 자체보다 하드웨어이다), 다루기는 훨씬 어렵다.
  • [3] 윈도우 프로그래밍을 해본사람이라면 MFC가 떠오를 것이다
  • [4] 실제로 일일히 다 개발하는 데 드는 시간이 모두 절약되며, 코더 및 소프트웨어 개발자들에게 있어 시간은 곧 돈과 연결되기 때문이다.
  • [5] 대부분의 유틸리티 툴은 '아주 단순하고 쓰기 쉬운 툴'로 시작하여 점점 기능이 덧붙여지다가 '툴을 쓰는 것 자체가 공부를 해야 하는 수준'까지 발전하는 반복을 거치게 된다. 그리고 극도로 복잡한 툴이 나오면 또 원점회귀하여 간단하고 기능은 적은 툴이 새로 나온다(…).
  • [6] 크게 잡아도 OS, 데이터베이스, 통신, 그래픽스, 보안, 응용소프트웨어 등으로 나누며 세부적으로 나누면 이는 더 많아진다.
  • [7] 다른 분야라고 이런 경우가 없는 건 아니지만, 변화가 빠른 컴퓨터와 관련된 분야에선 더 심하다고 할 수 있다.
  • [8] 외국이라고 꼭 이렇지 않다는 건 아니지만, 차이라면 강제로 당하느냐 자발적으로 하느냐. 아니면 대우라도 좋다. 전부 아니라도 적어도 '''한국보다는 좋다. (특히 야근 문제!)
  • [9] 이는, 이를 제대로 배우기 위해서는 반드시 대학원 과정에서의 학습이 필요한데, 대학 학부 과정 중에는 이를 소화할 수 없기 때문이다. 그래서 보통 '이 분야가 무엇이다' 정도, 다시 말해 맛보기 정도만 배우게 된다.
  • [10] 이런 분야들은 보통 수학능력이 아닌, 수학적 지식이 많이 요구된다. 일반적인 코딩은 사칙연산/이산수학 및 간단한 논리력이 전제되는 수학능력이면 충분하지만, 저런 고급분야들은 분야에 따라 본격적인 대학수학인 해석학부터 시작하여, 확률, 대수, 수리논리, 위상, 기하 등의 지식을 전제하는 경우가 많다. 그래픽스 같이 현실과 밀접한 분야의 경우, 여기에 추가로 미적분학, 삼각함수, 물리학도 추가한다. 이런 분야들은 고졸로는 접근하기가 매우 힘들며, 대학에서도 대학원 과정부터 시작하는 경우가 많다.
  • [11] 여기서 모드의 명예를 위해 첨언하자면 모드가 꼭 나쁜 것만은 아니다. 모드에서 아이디어를 얻어 정식 상용 게임이 등장하기도 하고, 아예 모드 그 자체가 정식 상용 게임이 되기도 한다. 실제로 Counter-Strike나 Natural Selection 같은 게임들은 Half-life 엔진만 사용했지, 완전히 다른 게임이었고, 성공을 거쳐 아예 정식 상용 게임으로 승격되었다. 물론 상당히 과장해서 말한 것이고, 실제로는 엔진을 만들지 않아도 그 복잡한 엔진의 세세한 부분까지 알아야 최대한 활용하여 개발을 할 수 있는 경우가 상당히 많으며, 게임이 점차 복잡해져 가면서 게임의 시스템을 만드는 것만해도 난이도가 상당하다. 게임엔진을 직접 제작해봤자 유명한 상용 엔진에 비해 좋게 만들기도 사실 거의 불가능하고, 그럴 바에야 툴을 직접 제작하는데 투자해야 할 시간과 노력을 게임 시스템과 디자인에 투자하는게 사실 현명한 판단이라고 할 수 있다. 실제로 유명 프랜차이즈 중에선 타사의 게임 엔진을 구입해와서 그것을 기반으로 하여 만든 것들도 매우 많다.
  • [12] 예외가 있다면 이 정도..? 거의 안 쓰인다는 건 함정.