프로그래머

최근 수정 시각:

파일:나무위키+상위문서.png   상위 문서: 직업 관련 정보

파일:나무위키+넘겨주기.png   관련 문서: 컴퓨터 관련 정보

1. 개요2. 최초의 프로그래머3. 종류
3.1. 알고리즘 개발자3.2. 보안 개발자3.3. 소프트웨어 아키텍트(SA)3.4. 게임 개발자3.5. 웹 개발자3.6. 모바일 개발자3.7. 임베디드 시스템3.8. 전산 정보 시스템3.9. 융합형
3.9.1. 타 분야 알고리즘 개발자3.9.2. 빅데이터 분석가
3.10. 코더
4. 되는 방법
4.1. 첫 언어
4.1.1. 국내 취업에 필요한 C, C++, Java부터 시작해야 가장 유용하다는 쪽4.1.2. 쉬운 언어부터 택한 뒤 이를 기반으로 자기가 필요한 언어로 나아가라는 쪽
4.2. 필요한 장비
4.2.1. OS4.2.2. 모니터4.2.3. 키보드
4.3. 한 가지 언어만으로는 부족하다4.4. 학위의 위상
4.4.1. 고학력이 요구되는 경우4.4.2. 학력이 낮을 경우
4.5. 다른 분야의 지식4.6. 필요한 능력
4.6.1. 꾸준한 공부4.6.2. 영어
5. 연봉과 근무6. 기타7. 유사 용어

1. 개요[편집]

프로그래머란 컴퓨터 프로그램을 만드는 사람이다. 전 세계적으로 유명한 프로그래머로는 존 카멕, 성공한 사람들 중엔 빌 게이츠 같은 사람이 있다. 이 나무위키도 프로그래머의 손끝에서 탄생한 것이다. 무슨 주문을 외웠길래 이런 위키가 만들어졌는지 알고 싶고 지금 크롬으로 접속했다면 Ctrl+U를 눌러보자. (또는 F12도 된다.) 대강 무슨 주문을 외웠는지 엿볼 수 있을 것이다. 여기서 출력되는 결과물은 HTML이라는 아주 간단한 언어이므로 사실은 더 복잡한 세계가 있다.[1] 물론 관련 지식이 없다면 주문의 내용을 해석할 수는 없겠지만, 일단 주문의 모습은 볼 수 있을 것이다. 이 시대의 진정한 마법사들 여러가지 의미로

서양에서는 '프로그래머들 중엔 비만이 많다'는 편견이 있다고 한다. 하루종일 컴퓨터 앞에 앉아서 간식을 처묵하는 이미지 때문인 듯하다.[2] 물론, 실제로 프로그래머들은 대부분 의자에 앉아 있는 시간이 많으므로 대개 운동이 부족한 것은 사실이다.

쓸만한 프로그래머들은 내가 만드려는 프로그램에 대해 생각하는데 80% 이상의 시간을 쓰고, 그걸 구현하는데는 20%의 시간도 안 쓴다. 그리고 프로그래머들은 자신의 능력을 이용해 간혹 기발한 일을 벌이기도 하는데[3], 그게 나쁜 쪽으로 발현된 것 중에 하나가 바로 랜섬웨어를 비롯한 컴퓨터 바이러스들이다.

2. 최초의 프로그래머[편집]

최초의 프로그래머로 인정받는 사람은 바로 러브레이스 백작부인 에이다 킹(1815 ~ 1852)이다. 생몰년도를 보자. 컴퓨터는커녕 증기 기관이 퍼져나가기 시작하던 시대의 사람이다. 그녀는 최초로 찰스 배비지의 해석 기관의 컴퓨터 상의 구현을 알고리즘으로 설명한 사람이며, 폰 노이만 구조의 등장을 예견하였다. 참고로 유명한 영국 낭만주의 시인 조지 고든 바이런의 딸이다.

초기 프로그래머에 여성이 많다. 컴퓨터(계산원)에서 넘어온 사람이 많았기 때문.

3. 종류[편집]

'프로그래머'라는 단어 하나로 간편하게 통칭하여 부르고 있긴 하지만, 프로그래머에도 여러 분야가 있다. 고급 언어와 툴을 다룰 줄 아는게 전부인 프로그래머부터, 저급 언어까지 다룰 줄 아는 프로그래머까지 그 스펙트럼은 어마어마하게 넓다. 또 소수의 코어파트 프로그래머들이 있는가 하면, 다수의 양산형 프로그래머인 코더가 있다.

컴퓨터 프로그래밍 기술에 능숙한 사람들은 유명세를 타기도 하지만, 이러한 관심을 받는 대상은 보통 소프트웨어 공학자 집단으로 국한된다. 그리고 종종 저명한 프로그래머들 중에는 "해커"라는 이름으로 불리는 사람들도 있다.

프로그래머라는 직종이 이런 넓은 스펙트럼을 가지고 있기 때문에 단순히 뭉뚱그려 부르기에는 상당히 무리가 있다. 비유를 하자면 트럭, 택시, 버스, 중장비기사를 전부 뭉뚱그려 '운전자'라고 표현하는 것과 같다.

3.1. 알고리즘 개발자[편집]

Researcher

알고리즘을 개발하는 사람. 컴공 분야의 알고리즘 개발자가 새로운 알고리즘을 발표하면 타 분야의 알고리즘 개발자들이 자기 분야로 가지고 가서 적용한다. 대개 이쪽은 컴공 박사학위를 가지고 있는 경우가 많으며, 이론적 조망 역시 탄탄해야 한다.

3.2. 보안 개발자[편집]

해킹 및 정보보안 관련 기술들을 다루는 프로그래머를 의미하며, 이를 위해서는 많은 기반 지식이 필요하다. 필요하면 서버 등의 플랫폼의 보안성 향상을 위해 툴을 준비하거나 서버 프로그래밍 자체를 튜닝하고 감시할 체제를 준비해야 하기 때문에 보통 고급 개발자이다. 업무에 비해 책임이 막대하며 특히 보안사고가 터지면 모든 책임을 뒤집어쓰는 직종이기 때문에 IT업계에서도 대우가(급여가 아닌) 상당히 좋지 못하다.

OS, 네트워크(TCP/IP)에 대해 매우 심도깊은 이해가 필요하고 C언어를 매우 잘 다룰 줄 알아야 한다. 최소한 한 종류 이상의 어셈블리어를 다룰 수 있어야 한다. 현대 암호학에 대해서는 개념 정도는 알고 있어야 하며(암호 알고리즘을 만들 줄 알아야 하는 건 아니다) 높은 수준의 리버스 엔지니어링실력도 요구된다.

이상이 정상적인 보안 개발자의 얘기고, 좀 비정상적인 보안 개발자는 운영 중인 시스템을 지속적으로 모니터링하다가 보안침해 의심사고 발생시 신속하게 조치해서 차단하고 이미 입은 피해를 파악해 복구하는 일을 한다. 왜 비정상적이라고 하냐면 이런 직업은 원래 개발자가 아니라 오퍼레이터라고 부르기 때문이다. 국내에 이런 오퍼레이터 전문 육성 코스가 없어서 다들 프로그래밍을 하다가 이쪽으로 넘어오는데 전공 지식을 거의 활용할 수 없어서 기초부터 새로 배워야 하는 경우가 부지기수다. 오퍼레이터는 프로그래머의 하위 분류가 아니라 이웃 분류이다. 동등한 전문성을 갖추고 있는 반면 그 전문 영역이 별로 겹치지 않는다. 오퍼레이터가 전사라면 프로그래머는 대장장이. 칼을 들고 싸우는 직업이냐 칼을 만드는 직업이냐의 차이이다.

3.3. 소프트웨어 아키텍트(SA)[편집]

마이크로소프트의 정의에 따르면, 전략, 조직 역학, 프로세스, 커뮤니케이션, 리더십 등 관리능력과 엔지니어링에 대한 깊은 이해를 갖춘 개발 지휘자를 아키텍트라 부른다. 여길 참고하자

엄밀히 말하면 프로그래머가 아니라 기획자다. 조직 관리 능력, 리스크 관리 능력 같이 프로그래밍 능력과는 전혀 관계없는 분야의 지식을 요구한다. 현장에서의 경험과 아키텍트 전문 육성 과정을 둘 다 충족해야만 될 수 있는 직종이다.

3.4. 게임 개발자[편집]

3.5. 웹 개발자[편집]

웹 개발은 웹 상에서 사용되는 소프트웨어 개발과 웹페이지를 제작하는 분야이다. 웹 프로그래머는 이를 제작하는 개발자를 의미한다.
웹 프로그래머는 크게 두 종류로 나누는데, 백 엔드(Back-end) 개발자와 프론트 엔드(Front-end) 개발자로 구분한다.[4]

  • 프론트 엔드(Front-end) 개발자 : 사용자에게 보여지는 화면을 개발, 주로 HTML, CSS를 활용하여 웹 디자인을 웹 페이지로 구현하는 개발자다. 디자인 시안을 그대로 구현하는 작업이라는 특징 때문에 조직에 따라 프론트 엔드 작업을 웹 디자이너에게 업무를 맡기는 경우도 있다. 최근 핵심 사항으로는 HTML4에서 HTML5로의 변화에 따라 반응형 웹이 유행하고 있으며 여러 버전의 브라우저에서 모두 호환될 수 있는 웹 표준을 중시하는 문화가 퍼진 상태다.

  • 백 엔드(Back-end) 개발자 : 웹 상에서 사용되는 소프트웨어나 웹 페이지가 기능적으로 동작하도록 구현하는 개발자다. 여기서 기능이란 해당 소프트웨어가 가진 목적 구현을 위한 모든 환경을 의미한다. 즉, 클라이언트의 기능 뿐만 아니라 서버 개발도 해당된다. 예를 들어 웹 페이지로 계산기를 만든다고 했을 때, 계산기 인터페이스는 프론트 엔드의 영역이지만, UI 뒤에 숨겨져 있는 계산기 알고리즘과 원리는 백 엔드의 영역이라고 생각하면 된다. 주로 HTML, CSS, JavaScript, jQuery 등 UI 영역뿐만 아니라 Java, JSP, PHP, Spring Framework, 디자인 패턴 지식 등 다양한 기술이 요구된다.

  • 풀 스택(Full-stack) 개발자 : 위의 프론트엔드와 백엔드를 모두 다룰 수 있는 개발자. 프론트엔드나 백엔드나 사용하는 기술이 거의 비슷하고 서로 겹치는 게 많기 때문에 의외로 그리 드물지 않다. 하지만 자신을 '풀 스택 개발자'라고 소개하는 사람은 대개 신참 (아직 본인의 전문 분야가 확립되지 않은) 개발자일 확률이 높다.

3.6. 모바일 개발자[편집]

스마트폰 애플리케이션을 개발하는 사람이다. 2017년 7월 기준 가장 많이 사용되는 안드로이드, iOS 두 가지 모바일 운영체제의 소프트웨어를 개발하는 사람이라고 보면 된다. 두 가지 OS를 모두 개발하는 사람도 있으나 조직의 규모나 개인의 역량에 따라 안드로이드 개발자, iOS 개발자로 구분하는 경우도 있다.

  • 안드로이드 APP 개발 : 안드로이드는 Java를 기반으로 두고있는 언어이기 때문에 Java에 대한 지식이 필요하며 안드로이드 스튜디오 3.0부터 표준 언어로 채택하고 있는 Kotlin 또한 학습해야 한다.[5] 안드로이드 앱은 이클립스로 개발이 가능했다가, 구글의 정책으로 안드로이드 스튜디오에서만 개발이 가능하도록 변경됐다.

  • iOS APP 개발 : iOSmacOS의 언어와 동일하게 Objective-CSwift에 대한 지식이 필요하다. 두 가지 언어의 컴파일러로는 대부분 macOS의 Xcode를 사용하며 이는 macOS에서 앱스토어를 들어가면 설치할 수 있다.

  • 하이브리드 APP 개발 : 하이브리드라는 이름에서 생각할 수 있듯, 안드로이드와 iOS를 모두 호환 가능한 애플리케이션을 개발하는 것이다. HTML5로의 발전, CSS3의 발전 등을 통해 제약이 많던 이전 웹 언어들과 달리 현재는 다양한 애니메이션과 기능이 추가되었고, 이를 활용해 OS의 제약 없이 개발하는 것이다. 그러나 안드로이드, iOS 언어에 비해 출력이 매끄럽지 않아서 대다수 스마트폰 앱으로 먹고사는 벤처기업은 하이브리드 앱을 개발하지 않고 네이티브 언어를 채택한다. 스마트폰 앱이 주력사업이 아닌 여러 대기업들의 경우엔 개발 비용을 줄이고자 하이브리드 APP을 많이 채택한다. 오픈 소스로 Sencha 등을 활용하는 편이다.

3.7. 임베디드 시스템[편집]

3.8. 전산 정보 시스템[편집]

  • SI(시스템 구축) 문서 참고.

  • SM(시스템 유지보수) 문서 참고.

  • ERP

3.9. 융합형[편집]

다른 전문분야의 인물이 자신의 지식을 활용하여 프로그래밍을 하는 경우도 존재한다. 의사가 직접 의료 프로그램을 통계화, 수치화한다든가, 국과수 직원이 치아 감별을 통한 개인 식별을 위한 프로그래밍을 한다든가, 이과 대학 교수가 모델링-시뮬레이션 툴을 만든다던가 하는 경우가 이에 속한다.

이들에게 요구되는 능력은 프로그래밍 능력이 아니라 자기 분야의 전문성이다. 전문성과 달리 프로그래밍은 극도로 완벽하고, 정교하고, 간결한 수준으로 잘 할 필요는 없다. 혹시 다소 불필요한 부분이 코드에 덕지덕지 붙어있다거나, 코딩하는 시간이 다소 오래 걸리거나 해도 크게 문제되지는 않는다. 이들에게 최우선으로 요구되는 사항은 전문성이고, 프로그래밍 능력은 그 다음이기 때문이다. 어차피 프로그램을 잘 짜서 성공하게 된다면, 그 다음부터는 프로그램 설계가 아닌 단순 코딩 정도는 양산형 프로그래머에게 맡겨도 된다.

3.9.1. 타 분야 알고리즘 개발자[편집]

수학, 물리학, 공학 등의 대학원생이나 교수들이 많이 분포해 있다. 국내외를 막론하고 '프로그래머, 개발자, 기술자'라고 불리기보다는 '수학자, 과학자, 공학자, 연구원, 교수' 등으로 불린다.

특정 상황에서 더욱 효율적인 알고리즘을 만들어내고 이를 수학적, 논리적으로 증명하는 게 주 목적. 실제 프로그래밍은 최소한도로만 수행하거나 아예 수행하지 않는다. 프로그래밍 언어는 대부분 한 종류 이상 능숙하게 다룰 수 있기는 하지만 결과물을 프로그램으로 발표하는 게 아니라 논문으로 주로 발표하는 것도 큰 차이다. 프로그래밍 언어를 다룰 줄 아는 것도 정말 순수하게 도구로서 다루는 것이지 그것이 생계 수단이 아니다.

3.9.2. 빅데이터 분석가[편집]

빅데이터를 분석하고 해석한다. 통계학컴퓨터공학을 둘 다 전공한 융합형 프로그래머에 속한다. 높은 수준의 수학 능력이 요구되는 반면 프로그래밍 실력은 크게 요구하지 않는다. 사용하는 도구도 통계와 수치연산에 특화된 R이나 Python(NumPy)을 더 선호하고 데이터베이스에 대한 지식도 필요하다.

3.10. 코더[편집]

원래 코더란 프로그램 코드를 볼 수 있고, 이에 따른 전반적인 테스트할 수 있는 사람을 의미하는 용어였다. 오늘날은 단순히 코딩만 할줄 알 뿐, 자기 프로그램을 개발할 능력은 없는 어설픈 프로그래머를 비하하는 의미로 변형되어 쓰이고 있다.

과거에는 '의사 코드'와 코드의 차이가 컸기 때문에 코더도 충분한 월급을 받으며 일할 수 있었다. 가령, 60년대에는 단순히 천공카드에 자료를 펀치하는 사람도 고급 인력이었다. 하지만 프로그래밍 언어가 많이 발전해서 현대의 프로그래밍 언어는 의사 코드에 매우 가까워졌다. 따라서 프로그래머가 의사 코드를 만들어서 코더한테 던져주는 저수준 작업은 요즘에 거의 사라졌다.

반면, 코더의 수는 늘어나고 있다. 기술의 발전으로 프로그래머용 툴도 입문 난이도가 내려갔다. 이 덕분에 프로그래밍의 진입 장벽은 6개월 정도 학원에서 배우거나 고등학교만 졸업해도 일자리를 구할 수 있을 정도로 낮다.[6]

의사 코드(Pseudo code)가 주어졌을 때 그걸 실제로 동작하는 코드로 구현하는 것에 그치는 사람, 소스 코드를 복사해서 문맥에 맞게 수정하는 것밖에 할 줄 모르는 사람은 코더[7]다. 의사 코드를 보고 의사양반!을 외치는 사람은 심영 아니 잉여다.

코더를 벗어난 프로그래머는 자료구조, 알고리즘, 디자인 패턴에 대해 이해하고 있다. 이는 스스로 코드를 읽어서 작동원리를 이해할 수 있게 해 준다. 또 어떤 함수의 입력과 출력이 정의된 명세서가 주어지면 그 명세를 만족하는 코드(실제 컴파일 가능한 코드 또는 의사 코드)를 만들어낼 수 있게 해 준다. 더 나아가면 일상적인 문제에 대해서 스스로 코드를 짤 수 있게 된다.[8] 더 나아가 자신의 프로그램의 문맥에 맞게 튜닝해서 최적화할 수 있다.

오늘날 플랫폼[9] 싸움이 커지면서 각자 자신들의 플랫폼 생태계를 성장시키기 위해 어플리케이션 만드는 과정을 점점 쉽게 만들어가는 추세이다보니, 과거에는 자신이 만든 프로그램의 몇몇 파트에 다른 라이브러리의 함수를 가져다 사용하는 수준이었다면, 요즘엔 아예 프로그램의 구조와 디자인 및 대부분의 뼈대가 되는 코드를 플랫폼에서 제공하는 프레임워크가 다 만들어 놓으면, 프로그래머는 거기에 부분부분 자신의 코드를 끼워 넣어 손만 보는 수준까지 왔다.[10] 도구 사용이 쉬워졌다는 것은 도구 자체에 신경 써야 하는 시간과 노력을 원래 목적에 할애할 수 있다는 것이기 때문에, 오히려 환영하는 프로그래머들이 많다. 일일이 다 개발하는 데 드는 시간이 절약되며, 시간은 곧 돈과 연결되기 때문이다.[11]

거의 같은 말로 '코드 몽키'가 있다.

4. 되는 방법[편집]

4.1. 첫 언어[편집]

이쪽은 현재 교수자에 따라 의견이 많이 갈리고 있다. 예를 들어, 같은 단과대학 내에서도 Python이나 MATLAB 같은 쉬운 것부터 시작하는 학과가 있으며 C, C++, JAVA 등 실용성이 좀 더 높고 취업이 잘 되는 것부터 시작하는 학과가 있다.

중소기업은 당장 실전에 투입할 인력을 뽑기 때문에 신입이라도 첫 언어가 중요할 수 있지만, 괜찮은 중견 / 대기업은 학벌이나 스펙, 코딩시험 등으로 일단 뽑은 뒤 취업한 직장에서 사용할 주력 언어를 교육시켜 준다. (당신이 사용할 주력 언어는 취업한 회사의 팀장이 정한다) 따라서 첫 직장이 어디냐가 중요하다.

어쨌든 두 의견에 따라 첫 언어를 선택했다면, 다음을 따라가야 한다.

비전공~고졸 출신은 자료구조알고리즘, 이산수학을 잘 아는 경우가 적다. 중요성을 알게 되는 건 대개 취직 후 수 년이 지난 후인데, 그 때는 직장을 그만두지 않고서는 시간이 나지 않아 이 두 과목을 익히지 못하는 경우가 많다. 이 세 과목을 공부하지 못하면 평생 양산형 개발자(코더)로 남을 수밖에 없다. 이 세 과목은 프로그래밍의 정수로, 이 과정이 탄탄하지 않으면 프로그래밍 어느 영역을 가도 다시 공부하거나 자괴감에 빠질 수 있다. 이 세 과목을 학부 2학년 수준까지는 익혀야 한다. 알고리즘은 기본적인 정렬 알고리즘이나 탐색 알고리즘, 다익스트라 알고리즘 등. 사실 위의 과목들을 마스터하게 된다면 교수급이 되어 프로그래머의 최정점에 서게 되는 셈이므로, 마스터할 때까지 공부하려고 할 필요는 없다. 어렵거나 힘들다고 좌절하지 말고, 전부 이해를 못 하더라도 최소한 필요성이 생겼을 때 용어와 대략적인 개념을 활용할 수 있도록 준비하는 것이 중요하다.

공부를 할 때든 취직해서 일할 때든 구글링을 생활하는 것이 좋다. 에러메시지를 긁어다 구글 검색창에 붙여넣기만 해도 스택 오버플로우 사이트에 해법이 올라온 걸 검색할 수 있다.[12] 소스 코드를 읽고 기술자들 사이의 질의응답을 이해할 수 있어야 한다. 토익 점수나 영어 학원 같은 생활영어가 필요한 것은 아니다. 구글 번역과 영어사전만 있으면 된다. 영어 문법을 전혀 몰라도 명사와 동사만 사전 찾아서 뜻을 찾다 보면 비록 시간은 오래 걸리지만 코드의 모든 문장을 완전히 이해할 수 있다. 기초 알고리즘을 표현한 함수의 경우에는 애초에 변수 이름이 알파벳 한 글자로 이루어진 게 많아서 사전조차 찾아볼 필요가 없고 사칙연산만 할 줄 알면 전체 코드를 이해할 수 있다. 인터넷에서 답을 못 찾겠으면 직접 질문해야 하는데 그러려면 생활영어 정도는 구사할 줄 알아야 한다. 그러나 그 정도까지 가지는 않는데 왜냐면 정말 웬만한 문제의 해결법은 구글링만 하면 다 나오기 때문이다.

디자인 패턴은 본인의 실력이 어느 정도 된다고 생각될 때 공부하도록 하자. 디자인 패턴을 알면 당연히 좋지만 그건 어디까지나 디자인 패턴을 봤을 때 왜 이 구조가 효율적인지 이해할 수 있는 실력이 되었을 때의 일이다. 어설픈 실력으로 디자인 패턴을 배워봤자 실무에 적용하기는 커녕 스파게티 코드가 안 되면 다행이다.

어느 정도 준비가 되었으면 GitHub, 스택 오버플로우 등 전 세계 프로그래머들이 모이는 메이저 사이트들을 성지순례하자. 개발자들을 위한 웹사이트 목록을 참고하면 된다. 그리고 GitHub에 올라와 있는 여러 오픈 소스 프로그램들을 내려받아 분석하고, 가능하다면 직접 기여도 해 보자. 수많은 사람들에 의해 쓰이고 있는 공개 소프트웨어의 코드를 뜯어보는 것만큼 좋은 실전 공부가 없다.

4.1.1. 국내 취업에 필요한 C, C++, Java부터 시작해야 가장 유용하다는 쪽[편집]

한국에서 취직하고자 한다면 한국의 현실을 알고 있는 것이 좋다. 한국 현실은 어떠냐면 전공자는 C/C++, 비전공자는 Java로 시작하는 경우가 많다. C/C++은 프로그래밍의 기본이라고 생각하여 관련 전공의 교수들이 거의 무조건 가르치기에 전공자는 C/C++로 시작하는 것이고, Java의 경우, 대한민국의 대부분, 특히 공공기관쪽의 프로젝트에 사용되는 프로그래밍 언어는 백이면 백 Java라고 생각해도 될 정도로 Java의 비중이 높기 때문에 실무에 투입되었을 때, 그나마 쓸만하게 만들기 위해 전문학교에서 Java를 가르치기에 비전공자는 Java로 시작하는 경우가 많은 것이다. 게임쪽 개발이라면 C/C++을 웹어플리케이션쪽 개발이라면 Java는 기본 상식이기에 프로그래밍 언어 공부를 시작할 때 어떤 언어를 선택할 지 잘 선택하면 된다.

Python을 많이 쓰는 곳에 취직하고 싶으면 Python을 공부하는 식으로 언어를 선택해도 상관은 없다. 단, 취직이 될 경우에 한해서이다. Python이 많이 쓰이기도 하고 Java에 비해서 쉽다고는 하지만 대한민국의 현실상 Python을 배워봤자 Python의 비중이 높은 회사가 아니고서야 취직하기가 어렵다. 당장 공공기관만 하더라도 Java를 쓰고 있고 해당 공공기관의 피고용인 입장인 회사들(을), 그 하청업체 회사들(병)이 많기 때문에 Java 일자리가 훨씬 많다. 그리고 SI에 대해서 들어본 적이 있다면 알고 있을 SI의 피라미드 구조를 생각해보면 대한민국에서 Java나 C/C++를 배우지 않고 다른 언어만 배웠을 때 취직의 가능성이 얼마나 낮은지를 알 수 있을 것이다. 이러한 현실에서도 Python을 배워서 취직하고 싶으면 국내에서 취직하지 말고 해외에서 취직하는 것이 여러모로, 특히 취직과 정신건강에 좋다.

그렇다고 해서 C/C++이나 Java를 배웠으니 무조건 취직을 할 수 있을 것이라고 생각하는 것은 금물이다. 잡코리아나 사람인에서 키워드로 Java라고 검색만 해보면 알 수 있는 사실이 있는데 구인광고에서 Java 하나만을 요구하는 회사는 잘 없다. 대신에 Node.js, AngularJS, jQuery, JSTL, 닷넷 등을 추가로 요구하는 회사는 심심하면 눈에 띄며 심한 경우엔 분명히 Java로 키워드 검색을 했는데 막상 자격요건을 보면 Java는 전혀 적혀있지 않고 생전 처음 듣는 말이 적혀있는 경우가 있다. Java는 기본으로 취급하는 것이고 Node.js, JQuery 등을 알고 있는 지 모르는 지로 취직이 되냐 안 되냐가 결정되는 것이다. 개발하는 데 있어 당연히 Java 하나만을 가지고 개발하지는 않고 다른 여러 언어를 같이 쓰기 때문이다.[13] 자격요건으로 적힌 언어는 그 회사에서 주로 사용하는 언어를 적어놓기 때문에 해당 언어의 기본 문법 정도는 알면 취업에 도움이 될 것이다. 자격 요건에 쓰여있다고 거기에 적힌 언어를 다 아는 사람을 뽑는 것이 아니라 그 중 하나만 해당되도 뽑는다는 소리니 너무 걱정하지 말고 지원해보자. 단, 취직에 성공해서 실무를 시작하게 되면 배우게 될테니 어차피 배울거 기본적인 지식은 알고 가는 것이 여러모로 낫다.

많이들 Java의 난이도가 어렵다고 하는데 그것은 반은 맞고 반은 틀리다고 할 수 있다. 틀린 이유는 Java는 객체지향 언어이기 때문에 소스를 보면 직관적으로 눈에 들어온다. 이것이 무슨 말이냐면 메서드[14]를 보면 이 메서드가 무슨 역할을 하는지 이 변수가 어디에서 사용되는지 등이 한 눈에 들어오기 때문에 이해하기가 쉽다. 그리고 Java는 너무나도 유명하기 때문에 가능한한 쉽게 설명해주는 강의들도 많으니 인터넷에서 검색하면 쉽게 배울 수 있다. 또한 객체가 무엇인지만 알면 Java로 코딩하는데에 어려움이 없다고 보면 된다. 맞는 이유로는 객체지향이라는 개념은 웬만한 개발자들도 정확하게 정의를 내릴 수 없는 정말 어려운 개념이라는 것이다. 객체지향이 무엇인지 개발자들에게 물어보면 객체지향의 사전적 의미를 대답하는데 그렇다면 객체지향적으로 프로그래밍한다는 것이 어떠한 것인지 물어보자. 그럼 대부분이 모른다고 할 것이다. 객체지향이라는 것을 구체적으로 이렇다고 정의내릴 수 없기 때문이다. 사전적 정의야 얼마든지 대답할 수 있지만 실질적으로 객체지향이 무엇인지는 대답하기 힘들다. 객체지향에 대해서 전문적으로 연구하는 사람이지 않고서야 객체지향적인 프로그래밍에 대해 정확하게 대답할 수 없을 정도로 객체지향이라는 개념자체가 어렵기 때문이다. 그래도 걱정은 하지말자. 객체지향이라는 개념을 어느정도 이해했다고 할 수 있을 정도면 절대로 당신은 신입일리가 없으니 말이다.

Java에 대해서 이상할 정도로 부정적으로 생각하는 사람이 있고, Java가 다른 언어에 비해 코드량이 더 많은 것을 단점으로 치부하는데 확실히 Java는 다른 언어에 비하면 쳐야하는 코드가 더 많지만 그것을 당신이 일일이 치지는 않는다. IDE는 장식이 아니다. 실무에서는 IDE로 개발을 진행하기 때문에 프로그래머가 일일이 칠 필요 없이 자동 완성 기능을 사용하면 된다. 개발 속도 외에도 정확성 문제가 있다. 사람이 치면 정말 타자 실력이 뛰어나지 않고서야 오타가 발생하게 되어 있다. 하지만 자동완성을 사용하면 이름을 지어줘야할 때 빼고는 오타가 생길 일이 거의 없다. 논리적 에러보다는 오타로 인해서 에러가 생기는 경우가 일상다반사이다. 출력 메서드 이름이 제일 길다고 하는데 IntelliJ IDEA의 경우 sout이라고만 치면 System.out.println();이 자동으로 완성된다. 이클립스의 경우 sysout를 치고 ctrl+space를 누르면 된다. 아래 문단을 보면 초보자에게 IDE를 주는 걸 부정적으로 말하고 있는데 대부분의 유명 IDE는 직관적인 GUI를 지원하므로 단축키나 복잡한 기능 하나하나를 외울 필요 없이 보이는대로 클릭해서 실행시킬 수 있다. 순수하게 텍스트 편집 기능만 제공하는 vim과, 잘못된 코드 구조를 분석하여 컴파일하기 전에 경고를 띄우고 올바른 예시 코드까지 만들어주는 IntelliJ IDEA 중 어느 쪽이 초보자 입장에서 쉽고 생산적일지는 굳이 따질 필요가 없을 것이다.

프로그래밍에 있어 중요한 것은 얼마나 코드를 최소화시킬 수 있냐는 것인데 이것을 단순히 코드량이 적을수록 좋다고 생각하는 것은 어리석은 사고다. 코드량보다는 얼마나 쓸데없는 코드를 제거할 수 있는지가 중요한 것이다. 그리고 쓸데없는 코드를 제거하고도 코드량이 많은 경우는 얼마든지 있다. 왜냐면 실무에서 사용되는 코드는 적게 잡아도 몇 백 줄이고 보통은 몇 천 줄 이상이 되는 코드이다. 그것도 파일 하나 당. 그것을 코드량이 많다고 해서 안 좋은 코드라고 볼 수 없다. 우리가 말을 할 때 명사와 동사의 기본형만 가지고 말을 해도 말은 통한다. 하지만 그 말을 우리가 효율적이라고 생각하고 실제로 그렇게 말하는지를 생각해보면 단순히 코드량으로 효율을 생각하는 것이 어떠한 것인지 답이 나온다. 프로그래밍 '언어' 라는 것을 다시 한 번 생각해볼 필요가 있다. 말을 할 때 군더더기가 없는 말이 제일 좋은 말이며 뜻을 전달하는 데 있어 가장 좋은 말이라는 것에 동의할 것이다. 그처럼 프로그래밍 또한 쓸데없는 코드가 없는 코드일수록 제일 좋은 코드라고 볼 수 있다.

4.1.2. 쉬운 언어부터 택한 뒤 이를 기반으로 자기가 필요한 언어로 나아가라는 쪽[편집]

결론부터 말하자면, 취업을 하기 위해서는 활동 분야에 따라 사용할 프로그래밍 언어를 선택해서 공부하면 된다. 오래 전에는 기계어어셈블리어밖에 없었으나, 각 언어에는 장단점이 있기 때문에 분야마다 쓰는 언어가 다양해졌다. 이제 한 언어가 모든 분야에 절대적으로 유리하지는 않다. 대개 웹 프로그래머라면 JavaJavaScript, 시스템 프로그래머라면 C++를 주력으로 삼는다. 한국 내에서도 이런 쪽 수요가 가장 많다. 시장의 수요에 따라 특정 언어를 할 줄 알면 몸값을 올릴[15] 수 있기 때문에 다양한 언어를 다룰 줄 아는 것이 중요하다. 자기 분야에서 선호하는 언어로 실전에 사용할 만한 코드를 짤 수 있게 되어야만 취업이 가능하다. 따라서 이쪽 의견을 따라도 자기 분야에서 사용할 언어를 익혀서 취업하게 되는 결과는 반대쪽 의견과 똑같다.

그럼에도 불구하고 이쪽 의견에서는 Python, R(문과 및 통계학), MATLAB(공대) 등 쉬운 언어부터 시작하고 이런 언어로 자료구조와 알고리즘을 끝내 놓은 뒤에야 자기 분야에서 필요로 하는 언어로 들어가는 것을 추천한다. 쉬운 언어로 시작해서 나중에 어려운 언어를 배우는 것이 처음부터 어려운 언어만으로 배우는 것보다 빠르다고 보기 때문이다.[16] 한국의 현실은 어떠냐면 컴퓨터공학 전공자는 C/C++, 학원 출신은 Java로 시작하는 경우가 많다. C++과 Java는 널리 쓰이는 언어 중 난이도 투탑(난해한 프로그래밍 언어 제외)이다. 하지만 초심자 교육생 입장에서는 현장에서 안 쓰는 언어를 교육용이라고 배우는 것은 쓸데없어 보이니 수강을 거부한다. 교육기관은 교육생의 요구에도 맞춰줘야 하고, 교육용 언어와 실무용 언어 두 종류를 가르치기보다는 실무용 언어 하나만 가르치는 것이 최단 기간에 진도를 빨리 뺄 수 있으니 실무용 언어부터 가르치려고 한다. 따라서 초심자 대상 교육 프로그램은 대개 이 언어들로 시작한다.

머리가 몹시 좋으면 그냥 아무 거나 시작해도 잘 하기 때문에 이 문단의 내용은 들을 필요 없다. 곧바로 자신이 가장 필요로 하는 것부터 시작하면 된다. 하지만 컴퓨터 교육 현실에서는 수많은 낙오자(특히 고졸, 문과, 국비지원 학원 출신)가 발생하고 있으며, 간신히 통과한다 해도 기본을 닦지 못한 코더가 양산될 뿐이다. 그래서 전체적인 프로그래머 인력 풀의 질과 양 둘 다 떨어뜨리는 악영향을 끼치고 있다. 실제로는 첫 언어만 Python으로 바꿔도 쉽게 갈 수 있다. 그나마 파이썬이 인지도를 많이 넓혀놔서 2018년 현재는 상황이 많이 나아지긴 했다.

C언어의 태생은 기계 제어 언어(유닉스를 만들기 위해 개발)이다. 언어 설계자의 기본 가정이 C를 사용할 사람은 이미 컴퓨터 아키텍처의 세부사항을 잘 알고 있다는 것이었다. 그래서 C언어는 프로그래머가 이상한 짓을 해도 최대한 그대로 하려고 들고, 명백하게 망가지기 전까지는 아무런 경고도 하지 않는다. C로 시작하는 데에 한 가지 문제가 더 있는데, 한국 대학 교육 현실상 구세대 표준을 강요하는 곳이 매우 많다. 심한 곳은 아예 DOS 시절에나 사용하던, 그래서 현대에 금지하는 기법을 가르치는 경우도 있다. 소스 코드에 printf/scanf(또는 cout/cin) 대신 gets/puts를 쓰거나 short 자료형을 특별한 이유 없이 사용하고, 간단한 함수를 모조리 define 매크로로 작성하려고 들면 의심해보자. 이게 DOS 시절의 C 코딩 스타일이다.

Java 역시 객체지향 개념이 난해하고 언어가 장황해서 힘들다. 함수 한 개, 연산식 하나를 테스트하려고 해도 public class GuguClass로 시작하는 십여 줄의 코드를 일일이 작성해야 한다. 특히 화면 출력 메소드의 이름이 System.out.println이라는 긴 이름이다.[17] 인기 있는 프로그래밍 언어 중에서 이 정도로 출력 메소드가 긴 언어는 Java가 유일하다. 이게 문제가 되는 이유는 이제 막 코딩에 입문하는 초보자는 코드를 입력하는 과정에서 필연적으로 오타를 치게 되는데 자바는 이 오타 지점을 찾기가 상대적으로 매우 어렵다.[18] 게다가 Python은 인터프리터 언어이고 REPL을 지원해서 코드의 실행 결과를 즉시 확인해볼 수 있는 데 반해 Java는 컴파일을 해야지 결과를 확인할 수 있다. 인터프리터 언어는 에러가 나기 전까지는 어쨌든 코드를 꾸역꾸역 실행하므로[19] 오류가 난 줄 바로 직전까지 코드를 실행할 수 있지만 Java는 컴파일 자체가 실패하면 아예 코드의 첫 줄도 실행할 수 없기 때문에 초보자는 어디가 잘못됐는지 찾기 위해 코드의 모든 줄을 검사해야 한다.[20] 심지어 컴파일 명령 자체에 오타가 있는지까지 확인해야 한다. IDE가 장식이 아니라고 윗 문단에서 주장하는데 코딩 입문자에게 IDE를 던져주는건 이제 막 비행을 배우려는 초보를 747 점보 여객기의 콕핏에 앉혀놓는 것과 같다. 당장 언어를 배워야 하는 사람이 엉뚱하게 IDE의 UI와 단축키 공부에 매몰되어 정작 언어는 공부를 못 하는 참사가 발생한다.

Python 강의는 도처에 널렸으므로 적당한 강의 하나 골라잡고 따라하다보면 일단 코더 수준은 될 수 있다. 80년대생 프로그래머는 BASIC부터 시작했던 경우가 많은데, 21세기의 Basic이라고 할 만한 것이 바로 Python이다. 문법 자체도 영어로 글쓰듯이 만들어져 있어 접근성이 굉장히 높다. 영미권에서 먼저 배우는 이유가 그만큼 친숙한 영어를 기반으로 되어있기 때문. 사실 미국에서 진짜 입문용으로 가르치는 것은 Scratch라는 언어인데, 이 스크래치 언어의 설계 목적은 철저히 교육용이기 때문에, 실용적인 프로그램을 만들기는 어렵다. Python은 매우 고성능이기 때문에 과거의 BASIC이나 오늘날의 Scratch와 달리 입문 이후에도 주력으로 사용할 수 있다.

4.2. 필요한 장비[편집]

일반적인 업무 환경에서 사용할 프로그램을 만든다면 평균 정도의 PC면 충분하다. 요즘(2017년)에는 노트북 한 대로 퉁치려는 경향이 강하다. 화면 크기를 제외하고 나머지 스펙은 프로그래머가 개발용으로 쓰기에 충분할 정도로 기술이 발전했기 때문이다. 오히려 노트북의 작은 화면이 집중이 잘 된다고 선호하는 프로그래머도 있다.

이러다가 장비 성능의 부족으로 인해 불편함을 느끼게 되면 업그레이드를 해 줘야 한다. 전문가에겐 전문적인 장비가 필요한 법이다. '장비는 중요하지 않다'고 말하는 사람치고 진짜 전문가는 없다.

4.2.1. OS[편집]

개발장비의 운영체제 역시 자신의 목표에 따라 정하는 것이 중요하다.

당신이 입문자라면, 지금 쓰고 있는 환경이 가장 좋은 환경이다. 일반적으로 널리 쓰이는 윈도우즈, Mac OS, 리눅스 환경에는 프로그래밍 입문에 필요한 환경을 쉽게 구축할 수 있다. 다만 서버 프로그래밍 분야는 리눅스환경이 타 OS보다 압도적으로 개발환경 구축이 쉽다.

특정 운영체제에 종속적인 프로그램을 개발하려면(예: DirectX 게임 프로그램) 해당 운영체제의 사용이 필수적이겠지만, Java, Python 등의 언어 실행 환경을 비롯하여 멀티 플랫폼을 지원하는 개발 도구도 많이 찾아볼 수 있다.

당신이 만들고자 하는 프로그램이 특정 운영체제를 필요로 하지 않는다면, 운영체제의 선택은 어디까지나 취향의 영역이다. 목적을 잊지 말자. 당신의 목적이 프로그래밍을 익히는 것이라면, 익숙하지 않은 특정 운영체제를 익히기 위해 귀중한 시간을 낭비할 필요는 없다.

4.2.2. 모니터[편집]

입문자라면 모니터는 신경 쓸 필요 없다. 공부를 하는 데에는 화면에 코드 편집창을 띄울 수 있고, 관련 문서를 띄울 수 있다면 충분하다.

전문 개발자이거나, 진지하게 취미에 투자하고 싶다면 다음 두개의 원칙이면 충분하다:

  1. 크면 클수록 좋다.

  2. 많으면 많을수록 좋다.


하지만...

  1. 144Hz, 8ms 같은 표시 속도는 필요없다. 분당 3000타를 넘기는 속기사라면 모를까

  2. AdobeRGB, HDR 같은 색상 표현력도 필요없다.

  3. TN패널은 절대로 피해야 한다. 주변부 화상이 왜곡돼서 글씨가 안 보인다. 삼성노트북을 고른다면 화면이 TN일 가능성이 있다.


보통 프로그래밍 입문자의 모니터는 1920*1080 해상도의 FHD모니터일 가능성이 큰데 이 정도 크기에서는 TN패널을 써도 큰 문제는 없다. 지금 쓰는 모니터가 좁다고 느껴져서 바꾸려고 할 때만 고려하면 된다. 그 외에 화면에 빛샘이 있든 불량화소가 있든 멍이 들었든 그런 건 코딩하는데 하등 상관없으므로 리퍼비시나 중고 모니터를 구하는 것도 좋다.

자기가 주로 노트북을 이용해서 여러 곳을 옮겨다니며 코딩을 하는데 더 많은 모니터가 필요하다면, 13~17인치 사이의 포터블 모니터를 한 두 장 구매하는것도 좋다. 보통 USB[21]나 HDMI 포맷[22]으로 영상 전송을 한다. 노트북 배터리 런타임은 짧아지겠지만, 생산성 하나는 확실히 보장할 수 있다.

4.2.3. 키보드[편집]

입문자에게는 키보드가 크게 중요하지 않다. 어차피 코드를 입력하는 시간보다 코드에 대하여 고민하는 시간이 더 길 테니까. 하지만 한 시간만 타자를 쳐도 손에 피로를 느끼는 키보드라면 바꿔야 한다. 너무 오래돼서 키가 뻑뻑하거나 휴대성에 극한으로 치중해서 타건감을 내다버린 키보드 종류는 손가락 부상을 야기한다. 위에서도 언급했지만, 전문가에겐 전문적인 장비가 필요한 법이다.

4.3. 한 가지 언어만으로는 부족하다[편집]

첫번째 언어에서 디자인 패턴을 공부할 수준까지 가면, 틈나는 대로 다른 언어들도 공부하는 것이 좋다. 1~2개의 언어만 붙잡고, 다른 언어에 대한 지식습득을 외면한다면 어느 순간 도태될 수도 있다. 현실의 외국어와 달리 프로그래밍 언어는 문법이나 용어들이 다 비슷비슷하므로 습득하는 데 큰 노력이 들지 않는다. 다른 언어들까지 잘 사용할 능력을 갖출 필요까지는 없고, 간단한 프로그램 만들 정도만 익히면 충분하다. 나중에 그 언어를 주력으로 사용하게 될 때, 나머지 상세한 부분을 공부해도 늦지 않다.

독학 학습 과정에서 일종의 종교적 신념(?) 같은 것들이 생겨나, 중수에 머무르는 프로그래머도 상당히 많다. 예를 들어 C++ 언어가 만능 언어라는 신념 등. 만능 언어가 맞긴 맞는데 만능기판과 PCB의 차이와 같은 것이다. 만능기판이 만능이긴 하지. 그런데 왜 사람들은 PCB를 굳이 제조해서 쓸까? 한번 잘 생각해보기 바란다. 이러한 자신만의 독단적 신념에 빠져드는 것을 방지하고 예방하기 위해서는 전 세계 개발자의 트렌드를 예의주시하고 있어야 한다.

물론, 트렌드를 지속적으로 따르는 건 어렵다. 라이브러리나 프레임워크를 뺀 순수 '언어'들만 해도 200여 종이 넘는다. 점유율 3%넘는 것들만 쳐도 5종이다. 그 중에서 다음 프로젝트에 무슨 언어가 쓰일 지는 확정지을 수 없다.[23] 게임 개발의 경우 C++이 보통이지만, 갑자기 파이썬을 사용해야 하는 경우도 있다. [24]

심지어는 갑자기 언어에 변혁이 일어나기도 한다. 1983년부터 Objective-C가 개발되어 아이폰 앱에서 잘 쓰이고 있었는데, 2014년 갑자기 애플에서 Swift를 발표했다. Objective-C로 코딩한 결과물이 쓸모없어지는 건 아니지만, Objective-C를 전혀 몰라도 Swift로 작성하는 데 아무런 문제가 없게 되었다.

  • Go언어: C언어가 할 수 있는 일은 죄다 할 수 있으면서도, 컴파일이 빠르고 코딩은 쉽다.[25] 하드리얼타임이 출동하면 어떨까?

  • Python: C보다 할 수 있는 일들이 적지만, 워낙 쓰기 편한 까닭에 주류 언어의 지위를 차지하고 있다.

  • Erlang: 원래 통신장비에 들어갈 목적으로 설계된 언어인 탓에 동시접속자가 폭주해도 굳건히 버텨낸다.


Java의 예를 들어보자. 처음엔 날코딩에서 시작해 IDE를 쓰게 되고, 써드파티 라이브러리를 사용하다가 스프링 프레임워크라는 것이 있다는 걸 알게 되고, 프레임워크의 유연성에 감동의 눈물을 흘리다가, 그 프레임워크를 만든 근간 기술인 디자인 패턴에 대해 공부하게 되고… 그렇게 차츰 자기도 모르게 고급 프로그래머가 되어 간다. 사실 이런 식으로 한 우물만 파더라도 고연봉을 받을 수는 있다. 왜냐하면 아직도 자바는 프로그래밍 언어 인기순위 1위이기 때문이다. 하지만 그놈의 학습량이 문제다. 위에서 트렌드를 지속적으로 따라야 한다고 했는데, 자바 쪽의 트렌드는 따라가려면 읽을 양이 엄청나게 많다.[26] 그래서 다른 것에 한눈 팔 여유가 없다.

최신 트렌드에 민감하게 반응하고 있다면, 스프링 프레임워크를 접할 때 즈음엔 함수형 언어라는 게 있다는 사실을 어떻게든 주워들을 확률이 높다. 일급 객체, 클로저 등에 대해 10분만 검색하면 인터페이스가 불필요하다는 걸 알고 멘붕할 것이다. 객체지향이 진리라고 믿었더라도, 메서드 체이닝과 고차 함수 개념을 접하고 나면 객체를 상속하듯이 행동을 확장할 수 있는 함수형 언어의 설계 패러다임을 접하고 다시 멘붕할 것이다. 그리고 멀티스레드는 금단의 사과 같은 테크닉이라고 믿었던 자신에게 스레드가 다다익선이라고 가르치는 GPGPU세계도 잠시 스쳐지나갈 수 있다. 리턴값을 두 개 세 개 막 넘길 수 있는 PythonGo를 보고, 숫자에 메소드를 붙이고 문자열 자체를 메소드명으로 해석해서 실행시키는 괴랄한 테크닉이 가능한 Ruby를 보고[27], 심지어 같은 자바 가상머신을 사용하는데도 유연성이 훨씬 뛰어난 ScalaGroovy를 접해보게 된다. 그런 세계여행(?)을 하고 돌아와서도 순수주의자처럼 자바 하나만으로 코딩하고 싶지는 않을 것이다. 글쓴이가 경험한 일일려나?

저 과정 전체에 대한 퀵 투어를 원하는가? 프로그래밍 언어/코드 예제 문서에 가보자. "Hello, World!" 외에도 그 아래쪽 것들을 구경해볼 것. 열 줄짜리 구구단 출력 자바 코드가 Ruby언어에 가면 어디까지 줄어드는지 한 번 보자.

반대로 C++ 프로그래머가 자바 세계로 넘어와도 비슷한 문화충격을 받을 수 있다. '왜 포인터가 없지? 그러고도 프로그램이 돌아가나?', 'new는 있고 delete가 없다니, 코딩 개판이네', '연산자 오버로딩이 안 돼? 다중상속도 안 돼? 성능도 구리다고? 머신제어도 불가능? 장난감이구만…' 하고 있다가 크게 데이는 경우도 더러 있다. 또는 웹 개발자이긴 한데 IoT 디바이스 분야라서 PHP아두이노와 통신시키려고 별의 별 모듈을 덕지덕지 붙이다가 그냥 C언어를 이용하여 함수 호출 한 개로 끝내버리게 되는 빡도는 경험도 할 수 있다. 하지만 다른 분야를 안 보고 있었다면, 일하는 내내 빡쳐있겠지 인과응보다.

이런 과정을 거치다 최정점에 서게 되면 이거고 저거고 다 비슷해 보이는 언어의 한계를 돌파한 polyglot이 된다. 무슨 언어를 쓰든 거기서 거기처럼 느껴질 수도 있겠지만 이 경지까지 가면 스스로 컴파일러를 제작해서 사용할 정도의 초월자가 되어있을 것이라 논외(…).

4.4. 학위의 위상[편집]

흔히 프로그래머에게는 학력이 중요하지 않다고, 심지어 대학 교육이 반드시 요구되는 분야가 아니라고들 말을 한다. 반대로 가능한 한 명문 대학과 명문 대학원을 가야 많은 것을 배울 수 있고 취업도 잘 된다는 말을 한다.

4.4.1. 고학력이 요구되는 경우[편집]

다음 상황이면 고학력이 반드시 필요하다.

  • 수학, 물리학, 컴퓨터공학 등 대학교 3학년 이상의 고급 지식이 필요한 프로그래밍(소프트웨어, 빅데이터, 데이터베이스, 인공신경망 등등).

  • 국내 대기업에 경력 없이 입사하고 싶은 사람.

  • 교수, 정부출연연구소 목표.

  • 국내 벤처캐피탈에서 초기 투자 충분히 받아서 창업하고 싶은 사람: 만약 자신이 카네기멜론 컴공 석사이상 졸업자라면, 국내에서 소프트웨어 벤처 한다고 하면 수억 원 이상은 그냥 투자받을 수 있다.


프로그래밍 분야에 있어서 학력 = 실력이 아니다. 고가의 실험실습 도구가 필요한 다른 분야와는 다르게 프로그래머에게는 오직 컴퓨터 한 대만 있으면 충분하고, 필요한 관련 지식에 대한 정보는 인터넷의 정보 바다에 흘러 넘친다. 안 찾아봐서 관련 지식 및 정보를 모르는 경우는 있어도, 찾을 수 없어서 관련 지식 및 정보를 모르는 경우는 극히 드물다. 그리고 일반적인 기업의 일반적인 코딩 및 실무에 필요한 능력만 따진다면, 대학에서 배우는 추상적인 지식들은 사실 쓸모없다.

다만 한국에서 고급 지식을 익혀서 고급 엔지니어로 성장하려면 상위권 대학에 진학해야 한다. 한국에서 고급 지식을 효율적으로 얻을 수 있는 곳은 좋은 대학 뿐이다. 하지만 한국의 컴퓨터공학/소프트웨어과는 구조적인 문제로 커리큘럼이 낙후되어 있다. 오죽하면 N사 등의 대기업에서도 신입 학사 졸업자가 기본기가 없다는 볼멘소리가 나오겠는가? 세계 랭킹 50위권인 서울대학교KAIST에서나 미국의 제대로 된 탄탄한 커리큘럼에 그렇게 많이 부족하지 않는 교육을 받을 수 있다. 프로그래밍에 필요한 고급 지식[28]은 실무 경험이나 독학으로 익히기 어렵다.

한국의 대학원 또한 마찬가지. 애초에 중요한 건 대학원을 나왔느냐가 아니라 어떤 지도교수 밑에서 어떤 수준의 교육을 받고 어떤 퀄리티의 논문을 냈느냐다. 좋은 지도교수 밑에서 잘 트레이닝 된 석사가 부족한 지도교수 밑에서 열심히 노력한 박사보다 낫다. 세계적인 수준의 교육을 제공하는 대학원은 한국에 두세 곳 뿐이고, 이런 대학원은 들어가기가 상당히 어렵다. 단순히 학위 취득을 위해 특수대학원을 다니는 직장인들도 있는데, 당연하지만 일반대학원을 나온 사람들과 동일한 대우는 받지 못한다.

참고로 미국도 마찬가지다. 최상위권 대학은 한국의 탑3 대학보다도 환경이 좋지만, 조금만 순위가 내려가더라도 수업의 질이 크게 떨어지고, 이는 결국 졸업자의 엄청난 경쟁력 저하로 이어진다.

좋은 대학을 가려면 수능 공부만 해야 한다고 생각하기 쉬운데, 그렇지도 않다. 수시 전형이 80%가 된 상황에서 정보올림피아드나 프로그래밍을 잘하는 것이 오히려 확률적으로 더 유리하다. 하지만 수시로 지원한다 해도 프로그래밍만 파지 말고 내신 반영 비율을 확인할 것. 프로그래밍 할 줄 아는 인재를 뽑고자 하는 대학은 거의 없다.

대기업이나 괜찮은 중견기업에 입사하고자 할때는 대학 졸업장이 당연히 필요하다.[29] 미국도 프로그래머로 취업하려면 보통 대학을 졸업해야 하고, 구글, 오라클 등의 대기업에 취업하려면 좋은 학교 출신이 아무래도 유리하다.

4.4.2. 학력이 낮을 경우[편집]

다음 상황이면 저학력이라도 상관없다.

  • 직업학교에서도 배우는 정도의 커리큘럼으로 정리가 되어 있고 복잡한 처리를 필요로 하지 않는 분야

    • 웹 개발자, 모바일 어플리케이션 개발자

    • SI, SM 쪽 업무: 다만, 시작할 수는 있으나 차별은 좀 있다. "갑"에서는 개발자의 학력이나 학벌을 중요시 여기기도 한다. 그리고 대학교 졸업장 없이는 실력이 뛰어나더라도 상대적으로 설계 경험을 접해보기 힘든 경향이 있다. 사실 이 분야 특성상 학력과 실력이 무관한 경우도 많지만, 이 분야 특성을 잘 모르는 일반인들로서는 사회 통념상 학력이 없으면, '저 사람은 대학도 나오지 않았는데, 당연히 실력도 없을 거야~' 라는 식으로 선입견 내지 편견을 가지기 쉽다. 그래서 그러한 편견을 가진 일반인이 발주를 하는 갑의 위치에 있다면, 실력을 보지도 않고 쉽게 무시하기 일쑤다. 하여간 한국에서 사회생활 하려면 대학은 나와야 한다

  • 초기 투자 안 받아도 자기가 직접 앱을 만들어서 팔고 회사 차릴 수 있는 사람. (다만 통계상 학력이 높은 사람이 회사를 차릴수록 수익률이 높고 오래가고 도산율이 낮다.)

  • 중소기업이나 인기없는 스타트업 등 쉽게 들어갈 수 있는 직장: 이런 회사에 들어가서 경력으로 대기업에 이직하는 경우도 있다. 그리고 자기가 그 회사의 핵심인재라서 기업의 규모가 작더라도 높은 연봉을 받는 경우도 있다.

  • 고학력이 필요한 상황에 필요한 것들을 전부 독학할 수 있어서, 학위 없이도 대졸들을 전부 떨쳐내고 뽑힐 만한 능력자

  • 공무원 시험, 공공기관 시험 치려는 사람


본인 영어 실력이 좀 된다면 독학으로 전문 지식을 익힐 방법이 있다. Coursera, edx, MITOCW, Udemy 등에서 제공하는 강좌들에서 이런 고급 수학, 물리학 지식을 제공한다. 그리고 GitHub에 가서 MOOC 관련 다운로더 코드를 Python으로 작성해 놓은 것들이 있는데 다운 받아서 실행하면 강의당 용량이 4GB 정도 하는 패키지로 자막까지 받을 수 있다. 사전 찾아가면서 공부하면 다 이해될 수 있다. (음식은 모두 준비되어 있는데 소화는 알아서 하는 격…)

4.5. 다른 분야의 지식[편집]

다른 전공지식이 필요한 부분에 대해서는 그 전공지식과 업무에 대한 이해가 필수적이다.

  • 건축물 해석: 건축학 지식

  • 3D 그래픽 라이브러리: 기하광학

  • 게임 물리 엔진: 역학 위주의 게임 물리학

  • 금융권 (보험회사 전산실): 이원분석, 보험수리

  • 금융권 (재무 정보): 고급회계

4.6. 필요한 능력[편집]

파일:attachment/프로그래머/1.jpg
야근력 + 개념을 저장한 맥북

여러가지 프로그래밍 언어를 구사할 줄 알아야 하며, 직종에 따라 다양한 툴과 엔진을 다룰 줄 알아야 한다. 한편 직접 툴을 다루진 않지만 데이터베이스, 알고리즘, 자료 구조간의 관계/구조를 설계하는 사람을 소프트웨어 설계자(아키텍트)라고 구분하여 부르기도 하는데, 아키텍트는 당연히 관련 분야 지식을 알아야 한다.

4.6.1. 꾸준한 공부[편집]

그 중에는 프로그래밍 자체에 대한 흥미 및 이 분야의 트렌드를 지속적으로 구독하는 능력 및 꾸준한 공부습관도 포함되어 있다. IT 분야는 발전속도가 매우 빠른 분야이기 때문에 공부를 그만두면 도태될 수밖에 없다. 따라서 직업을 그만두는 순간까지 꾸준히 관련 분야 지식을 공부해야 한다. 그래서 뜬구름 같은 이야기일 수도 있지만, 프로그래머에게 필요한 가장 중요한 적성은 프로그래밍 그 자체에 대한 흥미라고 할 수 있다.

툴은 점점 쉬워지고 있지만 그런 툴 자체가 워낙 많이 쏟아지고 있어서 프로그래머는 그 수많은 툴 중에 '선택'을 해야 한다. 라이브러리간 궁합, 개발이 계속 되고 있는지, 얼마나 많은 유저가 쓰고 있는지, 그리고 검증되었는지 여부 등을 다 따져봐야 하게 된 것이다 (그리고 마지막엔 GPL때문에 리젝되겠지…). 1970년대에는 닥치고 C언어를 쓸 수 있었겠지만, 2015년 현재 그렇게 생각없이 도구를 골랐다간 망하기 일쑤다. 고민을 하는 동안에도 세계 어딘가에서는 새로운 툴이 만들어져 발표되고 있고 기존 툴이 대대적인 업그레이드를 해서 원래 후보 탈락이었는데 재검토가 불가피해지는 경우도 발생한다. 정말 안습인 건 1년동안 고생해서 프로그램 하나를 제작했는데 다른 회사에서 신기술을 도입한 더 좋은 프로그램을 일주일만에 출시해버리는 경우도 발생한다. 툴 선택이 잘못돼서 생산성이 떨어진 상태로 작업하는 게 어떤 참사를 불러오는지의 가장 극단적인 사례.

IT쪽 뉴스에 뭐가 뜨면 최소한 자기 분야는 죄다 챙겨봐야 한다. 덕분에 학원 출신이라도 이후 독학으로 대학출신을 능가하는 것도 가능하다.

흥미가 있는 사람이라면 누가 시키지 않아도 직접 찾아서 새로운 기술과 관련 정보를 습득할테고, 누가 강요하지 않아도 알아서 공부할 것이기 때문에 유리하다. 그와 달리 학교에서처럼 시험같은 것으로 강요하는 사람이 없을 경우 스스로 공부를 하지 않는 케이스라면, 학교를 졸업하고 난 이후에는 공부에 소홀할 수밖에 없을 것이고, 그렇게 되면 다른 사람들에 비해 실력이 뒤처질 수밖에 없을 것이다.

이렇게 트렌드 파악 및 꾸준한 공부가 필요한 분야이기 때문에 프로그래머 집단은 동종업계 종사자들 사이에서 지식 공유가 활발한 분야이기도 하다. 예를 들어, 위키위키는 프로그래밍에 쓰는 패턴들을 정리하기 위해서 처음 탄생했다. 또한, 모르는 사람들이 모여서 상업적인 목적으로 만든 것보다 쓸만한 물건을 만들어 내는 오픈 소스 프로젝트는 활발한 지식 공유 없이는 유지될 수가 없다.

대부분의 대학교 컴퓨터 공학과 교수들이 본인은 절대 코딩 안 하는 이유가 이 트렌드를 못 따라가서다. 연구분야가 툴 그 자체에 있는 게 아닌 한에야 교수들이 툴에 관심가져야 할 이유도 없고. 다른 분야 교수들(기계과 등)이 대학원생과 일대일 맞다이를 떠도 꿇릴 게 없는 반면 컴공과 교수들이 프로젝트 하나를 추진하려면 대학원생이 반드시 몇 명씩 필요한 이유도 이것 때문이다. 물론 코딩덕후출신 교수들도 있긴 한데 전체적인 모양새가 그렇다는 것이다.

4.6.2. 영어[편집]

코더를 넘어서서 제대로 대접받는 프로그래머가 되고 싶다면 영어로 된 기술언어 정도는 읽고 쓸 수 있을 능력을 만들어둘 것을 추천한다. 컴퓨터는 미국에서 만들었고 미국이 리드하고 있으며, 한국어로 된 프로그래밍 정보보다 영어로 된 정보가 압도적으로 많기 때문이다.

그렇지만 본인이 영어 못한다고 좌절하지는 말자. 영어에도 분야에 따라 난이도라는 게 있다. 기술자 영어는 생활영어보다도 더 아랫급인 아주(!) 쉬운 영어다. 어휘 자체가 공학영어는 생활영어보다 훨씬 적고, 3형식을 넘어가는 문장은 거의 쓰이지 않으며 에둘러 표현하는 것 따위는 절대 없다. 또한 문장에 애매모호함 따위는 없고 거의 모든 문장의 의미가 명확하다. 애초에 공학계열에서 쓰이는 영어로 된 것들 대부분이 명시적인 생각을 중요하게 여기기 때문이다. 인문학이나 소설책 원서 보다가 공학 원서 보면 쭉쭉 읽힌다…

일반인이 들었을 때 왈도체스러운 영어를 구사하게 되니까 거기서 만족하면 곤란하지만 어쨌든 같은 기술자끼리는 말이 통한다. 정 안통하면 코드로 대화할 수도 있다. 스택오버플로우 사이트라면, 내 코드 쭉 긁어다 붙이고 나서 "I expected True but False." 라고 하든지 "It should be True." 또는 "Not working." 이라고 하면 상대방이 알아서 코드를 읽고 의도를 파악해서 답변을 달아 줄 것이다. 물론 검색해서 답이 나오는 문제를 이런 식으로 질문하면 쫓겨나는 수가 있으므로 그건 주의할 것. if(you == mad) { this = 'Sparta!'; }

5. 연봉과 근무[편집]

타 직동도 비슷하겠지만, 연봉(=시간당 급여)은 프로그래머의 실력을 나타내는 가장 객관적인 지표가 된다. 인맥 등의 이유로 실력이 없는데 연봉이 높을수는 있지만 실력이 좋은데 연봉이 낮은 케이스는 거의 불가능[30]하기 때문. 굳이 코더와 프로그래머를 구분해야겠다면 연봉이 구분자가 될것이다

북미의 경우 스택 오버플로우에서 조사한 2016년 자료에 따르면 평균 $106,120로 연봉이 높은 직업(developer)에 속한다. 다른 나라들도 대부분 높은 편이며 한국도 $45000로 평균 이상은 된다. 일반적인 사무직 보다는 확실히 높은편. 물론 실력이 없으면 말짱 도루묵이다.

연봉은 보유한 기술에 따라 달라지기도 한다. 북미 기준 가장 높은 페이를 받는 기술로는 스파크와 스칼라가 선정되었으며 그 위로 카산드라, F#, Go, Clojure 등이 차례로 선정되었다. 업종에 따라서 구분해도, 상대적으로 접근이 쉬운 웹 프론트 개발자 보다는 아이폰 개발자의 급여가 더 높은것으로 나온다. 링크의 내용은 정확한 통계치가 아니라 설문조사임으로 심각하게 따지지 말고 재미로 보도록 하자.

한국의 경우 프로그래머별 연봉의 편차가 큰 편이다. 취업할 때부터 이 차이는 시작되는데, 대졸초임 기준으로 중소기업의 경우 적게는 2200부터 시작하는 곳도 있지만 성과급 포함 6400으로 시작하는 대기업도 있다. 아쉽게도 신입인 경우 메이저 코딩 대회 입상 경력이 있거나, 유명 오픈소스 커미터가 아닌 이상 대부분 출신대학에 의해 연봉이 결정된다.

경력직의 경우 인사고과에 크게 의존하는 타 직종과는 달리 면접시 간단한 시험을 보는 등 실력 측정이 상대적으로 용이하기 때문에 돈만보고 잦은 이직[31]을 하는 사람도 많은 편이며, 그만큼 연봉의 편차가 심해진다. 수년전에 올라온 연봉관련글에 다들 의견이 제각각이다 경력직으로 입사한 동료 개발자의 연봉을 알고 나서 퇴사를 결심했다는 이야기도 종종 들릴 정도.[32] 대기업이나, 괜찮은 중견기업으로의 이직은 추천으로 많이 뽑기 때문에 실력은 기본이고 최소한의 인맥 관리도 해두는 것이 좋다.

프로그래머의 근무 형태는 일반적인 사무직과 비슷하다. 출근은 사무실로 하지만 FA분야 처럼 직접 기계장비를 제어해야 하는 경우는 공장으로 출근을 해야 하는 경우도 있다. 다른 직장과 다른 점은 현장에 나가거나 출근을 해야 업무효율이 극대화 되는게 아니라서 재택 근무나 투잡 형식의 알바가 가능하다는 것이다. 직종 특성상 신기술 도입에 적극적이다 보니 영어만 통하면 몸은 한국인데 재택근무로 해외에서 일하는 것도 불가능하지 않다. 회사에 별로 일이 없는데, 뭔가 매일 열심히 만들고 있는 사람이 있다면 회사 몰래 투잡을 하고 있을 가능성이 있다. SI나 소규모 앱 개발 등에서는 아예 정규직 형태가 아니라 프리랜서 형태로 근무하는 경우도 많다. 비전문가가 본다면 일하는 건지 노는 건지 구분하기 힘들기 때문에 월급루팡하기 좋다.

6. 기타[편집]

고급 프로그래머도 사람이기 때문에 설계 미스를 내는 경우가 있다. 대표적인 경우가 Win32 애플리케이션 API. 왠지 null값을 파라메터에 자주 넘긴다. Win32 API가 NULL값을 파라메터로 많이 받는 이유는 레거시 시스템 호환성을 어거지로 끌어안고 차기버전으로 넘어가고 있기 때문에 설계미스라고 하기엔 조금 억울한 면이 있으나 같은 처지의 POSIX 호환 API에는 이런 게 거의 없다는 점을 고려하지 않을 수 없다. 그리고 PHP라는 언어도 함수 이름에 일관성이 없어서 레퍼런스를 항상 참고해야 한다. 뭔가 프레임워크를 사용하는 방식이 어렵게 느껴지면 첫째는 본인 실력을 의심해야 하는 게 맞지만 둘째로는 그 프레임워크의 설계가 잘못돼있을 가능성도 고려하자. 프레임워크를 바꿨더니 안 되던 일이 일사천리로 진행되는 경우도 간혹 있다. 대형 프레임워크일수록 이런 설계 결함이 발생할 확률이 높아지기 때문에 몇몇 프로그래머는 '마이크로 프레임워크' 쪽으로 전향하기도 한다.

2016 기준으로 미국 IT 업체 개발자 남성과 여성 비율(100기 준)은 애플이 80:20, 트위터는 90:10, 구글은 83:17, 페이스북은 85:15 수준이다.

7. 유사 용어[편집]


[1] 사실 HTML은 일반적인 프로그래밍 언어와는 다른 마크업 언어라는 물건이다.[2] 오타쿠도 비슷한 편견이 있다.[3] 잉여력이 넘치는 디시에서는 프로그램을 짜 도둑맞은 갤럭시탭을 되찾은 사람도 있었다.# 물론 안드로이드 버전이 2.X대였을 시절에나 가능한 이야기로, 게시물 날짜를 보면 딱 그 시기인 것을 알 수 있다. 이후 버전이 올라가면서 스토어에 등록되지 않은 어플은 원격 설치가 불가능하게 패치되었고, 스토어에 등록을 하려고 하더라도 백그라운드에서 IP, SSID, BSSID 전송 및 GPS, 카메라 가동을 할 수 있는 백도어 기능이 있는 앱은 스토어에 등록될 수 없게 되어 더 이상은 어려운 이야기.[4] 백 엔드와 프론트 엔드 구분은 기업, 조직마다 나누는 경우도 있고 아닌 경우도 있으나 대체적으로 안정적으로 프로젝트를 운영하는 집단은 두가지를 구분한다.[5] 단, 모바일 게임 개발자 특히 유니티 엔진으로 개발하는 대다수의 인디 모바일 게임 개발자의 경우는 C#에 대한 지식이 필요하다. 물론 Java도 쓸 수 있지만 대부분의 유니티 개발자들은 C#을 애용하기 때문. 이는 iOS도 똑같다.[6] 물론 6개월~1년 정도 배운 '코더'의 임금 수준은 낮은 편이며, 그들 상당수는 미래에도 높은 임금을 받지 못한다.[7] 그냥 복붙하면 당연히 에러난다.[8] 문제를 해결하는 방법/절차를 '알고리즘'이라 한다. 지구상의 누구도 푼 적 없을 정도로 거창한 문제를 푸는 건 교수급에서 할 일이지만, 일상적이고 소소한 문제를 푸는 건 프로그래머도 할 수 있다. 일상적인 문제를 풀 수 없다면 매일 다른 사람에게 질문해가며 의지해야 한다는 소리다.[9] 기반 프로그램. 운영체제(OS)나 카카오톡과 같이 여러가지 프로그램들이 작동하는 데 있어 기반이 되는 프로그램을 뜻한다.[10] 윈도우 프로그래밍의 MFC와 같다.[11] 다만, 손쉽게 배울 수 있을수록 영역에 대해 진입장벽이 점점 낮아지기 때문에 프로그래머들에게 꼭 이득이 되는 것만은 아니다. 그만큼 경쟁이 더 심화될 것이기 때문이다.[12] 아니면 한국인 중 누군가가 직접 겪은 경험담이 적힌 개인 사이트가 검색될 수도 있다. 웬만한 것은 한국어로도 해결법이 적혀 있으니 너무 걱정하지 말자.[13] 그렇다고 해서 전혀 다른 언어를 쓰는 것이 아니라 비슷비슷한 언어를 쓴다. 예를 들어 AngularJS나 React는 모두 JavaScript 기반이다.[14] Java에서는 함수를 Method(메서드 혹은 메소드로 읽는 경우가 많다)라고 한다.[15] 대기업에서 ERP가 유행할때 ABAP 프로그래머나 아이폰 발매 초기 C 프로그래머 등.[16] 예를 들어, 가계부 앱을 만들 사람에게 signed int의 최대값이 2,147,483,647이란 걸 외우게 하는 것보다 그냥 BigInt가 자동으로 지원되는 파이썬을 가르치는 게 빠르다. 일단 가계부 앱의 핵심 기능을 다른 방해 요인 없이 학습하고, 나중에 안드로이드 스튜디오로 실제 앱을 개발할 때 자바의 int 타입이 담을 수 있는 숫자에 한계가 있으므로 주의하라고 가르치는 게 낫다.[17] import static java.lang.System.out이라는 코드로 System 접두어는 줄일 수 있다. 그래봐야 out.println 이다. 여기서 더는 못 줄인다.[18] 클래스는 대소문자를 구분함, 클래스의 디렉토리 패스와 패키지 패스는 일치해야 함, 한 파일에는 한 개의 public 클래스만 존재할 수 있음, public으로 선언된 클래스명과 파일명은 일치해야 함. 언어의 제약이 이 정도로 심하다.[19] 실무에서 이는 단점이다. 하지만 교육현장에서 이는 장점이다.[20] 컴파일 오류 메시지가 장식이 아니라고 하는 사람도 있겠지만 그 컴파일 오류 메시지를 해독해내는 시점에서 이미 초보가 아니다.[21] 보통 DisplayLink기술을 이용한다. 별도의 DisplayLink 드라이버 설치가 필요로하다. 우분투 계열 리눅스를 공식 지원하며, 모든 데비안계열 리눅스에서 사용할 수 있도록 포팅된 드라이버도 비공식적으로 존재한다.[22] 앞과 다르게 그래픽카드 드라이버 외의 드라이버 설치가 불필요하다.[23] 전문분야 자체를 바꾸는 게 아니라면 대략 3종 내에서 결정되는 편이다.[24] 맥시스는 유명 개발사인데 심즈4에서 C++과 파이썬을 혼용했다.하지만 파이썬은 듀랑고때문에 왠지 기피하는 분위기가 생겨버렸다.. 사실 서버문제는 언어와는 관계가 없긴 하다만, 기획자들은 그걸 모른다.[25] Go언어 설계자 중 한 명이 C언어를 만드신 켄 톰슨 옹이시다.[26] 아무리 IDE가 코딩을 대신해준다고 해도 결국 읽는 사람은 그 장황한 코드 뭉치를 전부 읽어야 한다.[27] 예를 들어 10.times do puts "hello" end 라는 코드가 문법적으로 올바르다. 코드의 의미는 'hello를 10번 출력하라.'[28] 선형대수학, 확률/통계론, 이산수학, 데이터구조, 알고리즘, 컴퓨터 아키텍처, 프로그래밍 언어론, OS, 오토마타, 시스템 프로그래밍, 네트워크, 소프트웨어 공학, 데이터베이스, 컴퓨터그래픽, 전산논리학, 컴파일러, 계산이론, 정보보호, 인공지능, 인간-컴퓨터 상호작용 등[29] 물론 자기가 직접 벤처기업을 창업하는 경우에는 대학졸업장이 필요없다.[30] 이 업계는 이직과 스카웃이 빈번하다. [31] 보통 개발자의 실력이나 포지션을 이전 직장의 연봉으로 평가(민간기업에서 일 못하는 사람한테 돈을 많이줄리 없다)하기 때문에 이직시 연봉은 기존연봉 +@가 되는 경우가 많다.[32] 이 바닥에서 연봉 공개는 해고사유가 될 수 있음으로 발설에 주의해야한다.[33] 가끔 농담삼아 하는 자학개그의 일종.