2016 나무위키 글인데 지금 글을 찾아 보면 보면 쓰레기들이 상당히 붙어서 작업을 했다는 것을 알 수 있다.
꼭, 지금 나무위키와 비교해 보길.
-- 지금 글 --
https://namu.wiki/w/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8
-- 예전 글 --
• 랜덤(A)
• 특수문서
• 바뀐글(더)
• 편집(E)
• 역링크
프로그래머
• 직업 관련 정보, 컴퓨터 관련 정보, C
1. 개요
1.1. 거창한 알고리즘 연구자가 아니다
2. 최초의 프로그래머
3. 프로그래머의 종류(스펙트럼)
3.1. 일반 프로그래머
3.2. 융합형 프로그래머
3.3. 코더
4. 프로그래머가 되는 방법
4.1. 학위(대학 졸업장 등) 필요여부
4.2. 난 고수가 되고 싶어요
4.3. 필요한 능력
5. 이 속성을 가진 캐릭터
6. 유사 용어
1. 개요
▲ 유재석이 홍진호가 찬 명찰에 '프로그래머'라고 써 있는 것을 보고 제작진에게 한 질문. 제작진은 프로게이머와 프로그래머를 헷갈렸고 유재석은 프로그래머라는 직업을 몰랐다.
직업병 "한 포기" 하고 말하면 "타입이 일치하지 않습니다. 그램으로 넣어주세요." 라는 예외가 난다 인스타그램, 텔레그램, LG PC gram: 흠칫
프로그래머란 컴퓨터 프로그램을 만드는 사람이다. 전 세계적으로 유명한 프로그래머로는 존 카멕, 성공한 사람들 중엔 빌 게이츠 같은 사람이 있다. 이 나무위키도 프로그래머의 손 끝에서 탄생한 것이다. 무슨 주문을 외웠길래 이런 위키가 만들어졌는지 알고 싶고 지금 크롬으로 접속했다면 Ctrl+U를 눌러보자.(또는 F12도 된다).대강 무슨 주문을 외웠는지 엿볼 수 있을 것이다. 물론 관련 지식이 없다면 주문의 내용을 해석할 수는 없겠지만, 일단 주문의 모습은 볼 수 있을 것이다.
서양에서는 '프로그래머들 중엔 비만이 많다'는 편견이 있다고 한다. 하루종일 컴퓨터 앞에 앉아서 간식 처묵하는 이미지 때문인 듯하다.(...) 물론, 실제로 프로그래머들은 대부분 의자에 앉아 있는 시간이 많으므로 대개 운동이 부족한 것은 사실이다. 그러나, 실제 제대로된 프로그래머들 중에서는 비만이 거의 없는데, 왜냐하면 생각하느라 먹을 생각을 잘 안하기 때문이다. 쓸만한 프로그래머들은 내가 만드려는 프로그램에 대해 생각하는데 80%이상의 시간을 쓰고, 그걸 구현하는데는 20%의 시간도 안쓴다. 그리고 프로그래머들은 자신의 능력을 이용해 간혹 기발한 일을 벌이기도 하는데[1], 그게 나쁜 쪽으로 발현되는 것 중의 하나가 바로 크래킹이다. 같은 맥락에서 프로그래머는 보통 개인주의적 괴짜 집단 내지 틀에 박힌 것에 거부감을 지닌 이미지로 연상되기도 한다.
1.1. 거창한 알고리즘 연구자가 아니다
보통 수학이론을 이용하여 알고리즘에 대해 연구하는 사람과 프로그래머를 혼동하곤 하는데, 일반적인 프로그래머는 거창한 알고리즘 연구자가 아니다. 여러분이 생각하는 그 알고리즘 연구는 보통 대학원의 연구실이나, 대기업 연구소 등에서 이뤄진다. 그에 반해 일반적인 프로그래머들은 사실 조립공이라고 보는 것이 정확할 것이다. 알고리즘 자체에 대한 연구는 수학자나 전산학자(컴퓨터공학자)들이 하는 것이고, 그 연구 결과를 소수의 코어파트 프로그래머들이 가져다가 부품을 개발하며, 그 부품을 대다수의 일반 프로그래머들이 사용한다.
위 문단보다 더 와닿게 비유하자면 프로그래머는 건설업에서의 인부와 같다. 살짝 안습해 보일지 몰라도 사실이다. 초창기엔 머리만 좋으면 뭘 해낼수 있었지만 현재의 몇십만줄의 코드가 들어가는 프로그램은 폰 노이만이 와도 도저희 혼자서 만들수가 없다. 개인별 능률에 분명히 차이가 있지만 어차피 똑같은거 가지고 구현하는건데 시간의 차이가 있을뿐 결과물은 비슷하다(물론 발코딩은 예외다) . 위 사실은 프로그래머가 대체 가능 하다는걸 의미한다. 프로그래머가 희소성 있고 전문적인 직업이라고 생각했으면 상상이 깨질만한 부분.
하지만 세상에 일반적 프로그래머만 있는게 아니라서 전문적 프로그래머도 있다. 컴퓨터 분야를 깊이배워서 단순히 어플리케이션만이 아닌 운영체제같은곳(로우레벨)에 손대는 사람들이 그렇다. 이들은 보통 컴퓨터공학과에서 하드웨어까지 배운다. [2] 이사람들이 대학원에서 알고리즘을 배운다면 바로 그 거창한 알고리즘 연구자가 되는거고 기업에 취직해서 활용 한다면 전문적 프로그래머가 되는것이다.
프로그래머로 먹고살고싶다면 학원에서 조금 공부하고 취업할건지 대학에서 깊이 공부할건지 잘 생각해봐야한다.
2. 최초의 프로그래머
프로그래머는 대표적인 남초 직업이다. 그런데 의외로 최초의 프로그래머로 인정받는 사람은 바로 러브레이스 백작부인 에이다 킹(1815 ~ 1852)이다. 그녀는 찰스 배비지의 해석 기관 컴퓨터 상의 구현을 알고리즘으로 설명한 최초의 사람이기도 하다.
최초의 프로그래머가 여성이라는 사실에 놀란 사람들도 있을텐데, 프로그래밍 관련 서적들을 읽다보면 간혹 저자가 여성인 경우도 있다. 이후로도 초기의 프로그래머는 여성이 많은데, 컴퓨터에서 넘어온 사람이 많았기 때문.
3. 프로그래머의 종류(스펙트럼)
'프로그래머'라는 단어 하나로 간편하게 통칭하여 부르고 있긴 하지만, 사실 프로그래머에도 여러 종류(?)가 있다. 고급 언어와 툴을 다룰 줄 아는게 전부인 프로그래머부터, 저급 언어까지 다룰 줄 아는 프로그래머까지 그 스펙트럼은 어마어마하게 넓다. 또 소수의 코어파트 프로그래머들이 있는가 하면, 다수의 양산형 프로그래머인 코더가 있다.
컴퓨터 프로그래밍 기술에 능숙한 사람들은 유명세를 타기도 하지만, 이러한 관심을 받는 대상은 보통 소프트웨어 공학자 집단으로 국한된다. 그리고 종종 저명한 프로그래머들 중에는 "해커"라는 이름으로 불리는 사람들도 있다.
3.1. 일반 프로그래머
프로그래밍 언어, 알고리즘 등에 대한 전문 지식을 쌓고, 복잡하고 논리적이고 완성도 있는 프로그램을 개발하는 프로그래머들이 존재한다. 프로그래밍은 진입 장벽이 낮은 편이라 컴퓨터공학과 외에 거의 모든 공대에서 간단한 프로그래밍과 코딩 정도는 할 줄 알 정도라, 코더는 굉장히 많지만 알고리즘을 이해할 수 있는 프로그래머는 많지 않다. SW가 국가는 물론 세계의 핵심 분야가 될 것은 자명하므로 앞으로 정보 보안, OS, 네트워크 등 여러 방면에 있어서 이들의 역할은 더 커질 것으로 보인다.
3.2. 융합형 프로그래머
자신의 전문 지식을 바탕으로, 중급 수준의 프로그래밍을 익히고 직접 코딩을 하는 프로그래머들이 존재한다. 의사가 직접 의료 프로그램을 통계화, 수치화한다든가, 국과수 직원이 치아 감별을 통한 개인 식별을 위한 프로그래밍을 한다든가 하는 경우가 이에 속한다. 이들은 전문가 수준의 고급 코딩을 하지는 못하더라도, 자신이 원하는 프로그램을 짤 만한 코딩 능력은 갖추고 있으며, 무엇보다도 자신의 전공 분야에 대한 전문성이 탁월하기에 시너지 효과가 극대화된다. 마치 의사와 변호사가 합동으로 하는 것보다 의사 자격을 가진 변호사 한 명이 의료 소송 시장을 휩쓸고 있는 것처럼, 융합형 프로그래머는 자신의 전문성과 프로그래밍을 결합하여 그 분야의 전문가만이 떠올릴 수 있는 창의적인 아이디어를 바로 시장에 내보낼 수 있게 된다.
이들에게 요구되는 능력은 프로그래밍 능력이 아니라 자기 분야의 전문성이다. 전문성과 달리 프로그래밍은 극도로 완벽하고, 정교하고, 간결한 수준으로 잘 할 필요는 없다. 혹시 다소 불필요한 부분이 코드에 덕지덕지 붙어있다거나, 코딩하는 시간이 다소 오래 걸리거나 해도 크게 문제되지는 않는다. 이들에게 최우선으로 요구되는 사항은 전문성이고, 프로그래밍 능력은 그 다음이기 때문이다. 어차피 프로그램을 잘 짜서 성공하게 된다면, 그 다음부터는 프로그램 설계가 아닌 단순 코딩 정도는 양산형 프로그래머에게 맡겨도 된다.
3.3. 코더
기술의 발전으로 왠만한 프로그래머용 툴도 입문 난이도가 내려갔다. 이 덕분에 프로그래밍의 진입 장벽은 상당히 낮다. 그리고 기업이나 컴퓨터 학원 등지에서는 기초적인 코딩만 배운 프로그래머를 배출하였다. 이러한 프로그래머를 비하하는 용어로 "코더"가 있다. 원래 코더란 프로그램 코드를 볼 수 있고, 이에 따른 전반적인 테스트할 수 있는 사람을 의미하는 용어다. 그런데 지금 코더라는 용어는, 단순히 코딩만 할줄 알 뿐, 자기 프로그램을 개발할 능력은 없는 어설픈 프로그래머를 비하하는 의미로 변질되어 쓰이고 있는 상황이다.
코더와 프로그래머의 차이는 '알고리즘을 스스로 설계할 수 있는지'의 여부에 있다. 즉 주어진 문제를 해결하는 방법을 스스로 찾아내서 코딩할 수 있으면 프로그래머고, 아니면 코더다. 조금 더 구체적으로 말하자면, 소스 코드를 복사해서 붙이는 것 밖에 할 줄 모르는 사람은 코더이고[3] 소스 코드를 읽어서 그 작동 원리를 이해하고, 나아가 자신의 프로그램의 문맥에 맞게 튜닝해서 최적화할 수 있는 능력까지 갖춘 사람은 프로그래머다. 위에서 프로그래머는 거창한 알고리즘 연구자가 아니라고 하지 않았냐고? 거창한 알고리즘 연구자가 아닌 것 뿐이지, 일반적인(소소한) 알고리즘의 연구자는 맞다. 알고리즘이라는 단어 자체가 문제를 해결하는 방법 또는 절차를 의미한다. 자동차로 치면 코어파트 프로그래머가 튜닝 부품을 생산하는 업체라고 한다면, 프로그래머는 튜닝샵 직원, 코더는 서비스센터의 수습 정비사 정도 포지션정도에 해당한다.
프로그래머에게는 코드 리딩 능력도 중요하고, 자신에게 필요한 코드가 없을 때는 스스로 그것을 창조할 수 있는 능력도 있어야 한다. 즉 어떤 함수의 입력과 출력이 정의된 명세서가 주어지면 그 명세를 만족하는 코드(실제 컴파일 가능한 코드 또는 의사 코드)를 만들어낼 수 있는 사람이 프로그래머, 의사 코드(Pseudo code)가 주어졌을 때 그걸 실제로 동작하는 코드로 구현할 수 있는 사람은 코더라고 볼 수 있다. 다만 프로그래머가 의사 코드를 만들어서 코더한테 던져주는 프로세스는 요즘에 거의 사라졌다. 프로그래밍 언어가 많이 발전해서 현대의 프로그래밍 언어는 의사 코드에 매우 가깝다. 60년대에는 단순히 천공카드에 자료를 펀치하는 코더도 제대로 월급 받으면서 일할 수 있었지만 지금은 그런 저수준 작업이 필요없기 때문에 빨리 프로그래머로 전직(?)하는 게 좋다.
오늘날 플랫폼[4] 싸움이 커지면서 각자 자신들의 플랫폼 생태계를 성장시키기 위해 어플리케이션 만드는 과정을 점점 쉽게 만들어가는 추세이다보니, 과거에는 자신이 만든 프로그램의 몇몇 파트에 다른 라이브러리의 함수를 가져다 사용하는 수준이었다면, 요즘엔 아예 프로그램의 구조와 디자인 및 대부분의 뼈대가 되는 코드를 플랫폼에서 제공하는 프레임워크가 다 만들어 놓으면, 프로그래머는 거기에 부분부분 자신의 코드를 끼워 넣어 손만 보는 수준까지 왔다[5]. 자신의 영역에 대해 진입장벽이 점점 낮아지는 이런 상황에 대해 비판하는 프로그래머들도 많지만, 프로그래밍 자체는 그저 자신의 창의력을 발휘하기 위한 도구일 뿐이고, 도구가 쉬워졌다는것은 도구 자체에 신경 써야 하는 시간과 노력을 원래 목적에 할애할 수 있게 되었다는 것이기도 하기 때문에, 오히려 환영하는 프로그래머들도 많다.[6]
물론 고급 프로그래머도 사람이기 때문에 설계 미스를 내는 경우가 있다. 대표적인 경우가 Win32 애플리케이션 API. 왠지 null값을 파라메터에 자주 넘긴다고 생각했다면 착각이 아니다. 그리고 PHP라는 언어도 함수 이름에 일관성이 없어서 레퍼런스를 항상 참고해야 한다. 뭔가 프레임워크를 사용하는 방식이 어렵게 느껴지면 첫째는 본인 실력을 의심해야 하는 게 맞지만 둘째로는 그 프레임워크의 설계가 잘못돼있을 가능성도 고려하자. 프레임워크를 바꿨더니 안 되던 일이 일사천리로 진행되는 경우도 간혹 있다. 대형 프레임워크일수록 이런 설계 결함이 발생할 확률이 높아지기 때문에 몇몇 프로그래머는 '마이크로 프레임워크' 쪽으로 전향하기도 한다.
고급 프로그래머 중에서도 전체 프레임워크 기본 틀을 설계하는 최상급 프로그래머들은 소프트웨어 아키텍트 라고도 불린다.
4. 프로그래머가 되는 방법
프로그래머가 되고 싶다면, (한국의 컴퓨터공학 커리큘럼상에서는 C나 Java부터 가르치는데 이거 생까고)[7] 미국에서 입문과정으로 가르치는 Python부터 시작하는 것을 추천한다. 미국에서 괜히 파이썬을 입문용으로 가르치는 게 아니다. 그나저나 파이썬 강의는 도처에 널렸으므로 적당한 것 하나 골라잡고, 따라하다보면 일단 코더 타이틀은 획득할 수 있다. 사실 미국에서 진짜 입문용으로 가르치는 것은 스크래치라는 언어인데, 이거는 자료가 너무 없기 때문에 추천하기 어렵다. 그리고 스크래치 언어의 설계 목적은 철저히 교육용이다. 실용적인 프로그램을 이걸로 만들겠다는 건 레고 블럭으로 진짜 사람이 들어가 살 집을 지어보겠다는 것과 마찬가지다. 80~90년생 프로그래머는 BASIC부터 시작했을 가능성이 높은데, 21세기의 Basic이라고 할 만한 것이 바로 Python이다. 베이직과 달리 파이썬은 매우 고성능이기 때문에 입문 이후에도 주력으로 사용할 수 있는 특징이 있다. 참고로 위에서 C와 Java를 생까도 된다고 했는데 그 이유를 설명하자면, C언어는 원래 태생이 기계 제어 언어, 다시 말해 OS (운영체제)를 만들기 위해 개발된 언어이기 때문에 배우려는 사람이 이미 컴퓨터 아키텍처에 대해서는 잘 알고 있다고 가정하고 들어가기 때문이다. 그리고 자바는 아무래도 타이핑해야 할 양이 너무 많아서 오타 교정하다가 힘 다 빠진다.
Python이 본인 스타일과 안 맞으면 Ruby로 시작해도 좋다. C언어로 언젠간 전향해야 하는 사람이라면 Go언어가 좋다. 두 언어가 성질이 매우 비슷하기 때문이다. 하지만 C++은 절대 시작 언어로 선택해선 안 된다! 학교에서 1학년 객체 지향 프로그래밍 과목으로 C++을 강요해서 어쩔 수 없이 배우는 경우가 많지만 C++언어는 현대에 쓰이는 수많은 프로그래밍 언어 중 코딩 난이도가 최상위권에 있다. 어셈블리어와 자웅을 겨룰 정도. 동의를 못 하겠다면 C++의 iostream 헤더 파일을 열어봐라. 코드를 암호화해놓은 것 같겠지만 그거 분명히 C++코드다. 그 다음에 Go언어 컴파일러 소스 코드를 열어보면 코딩 난이도의 차이가 확 느껴질 것이다. 세상에서 가장 복잡한 프로그램이라는 컴파일러의 Go 언어 버전하고, 그냥 단순히 데이터 입출력만을 처리하는 iostream 헤더 코드(소스 코드도 아니고 그냥 선언문)의 C++ 언어 버전의 코드 가독성 차이는 넘사벽이라는 말로도 표현을 못 할 정도로 크다.
파이썬을 어느 정도 익히고 대강 구구클래스 구구단 프로그램 정도는 스스로 만들 줄 알게 됐으면 이제 컴퓨터공학 기초를 닦기 시작한다. 바로 자료구조와 알고리즘을 공부하란 소리다. 컴퓨터공학 대학교 과정 1학년때 가르치는 그 과목 맞다. 자료구조와 알고리즘을 제대로 공부하지 못하면 평생 양산형 개발자(코더)로 남을 수밖에 없다. 그런데 사실 자료구조와 알고리즘을 마스터 하게 된다면 프로그래머의 최정점에 서게 되는 셈이므로, 마스터할때까지 공부하려고 할 것 까지는 없고, 기본적인 정렬 알고리즘이나 탐색 알고리즘, 다익스트라 알고리즘 등 대학 1학년 과정의 기초 알고리즘까지 익히고, 다음 단계로 넘어가도 된다.
다음으로 이제 자신이 어떤 분야에서 활동하고 싶은가에 따라서, 사용할 언어를 선택해서 공부하면 된다.. 웹 프로그래머라면 보통 자바스크립트를 주력으로 삼게 될 테고, 시스템 프로그래머라면 보통 C++언어를 주력으로 삼게 될 것이다. 각 분야마다 선호가 되는 언어는 각각 다르다. 해당 언어와 함께 구글검색을 연습하면 좋다. 정말 어지간한 질문은 구글에 검색하면 답이 다 나오기 때문이다. 그냥 에러메시지를 긁어다 구글 검색창에 붙여넣기만 해도 스택오버플로우 사이트에 해법 올라온 걸 검색할 수 있다.[8] 한편 네이버의 경우에는 안타깝게도 구글과 달리 반대로 어지간한 질문에도 의미없는 답변만 줄줄 달려 있는 것을 확인할 수 있을 것이다. 이제부터 영어를 열심히 공부해야 한다. 하지만 생활영어가 아니라 공학영어이므로 토익 점수하고는 별 관계가 없고, 그냥 소스코드를 읽을 수 있는 정도의 영어실력이면 충분하다. 사실 공학영어만 필요하면 따로 영어학원에 등록해서 수강할 필요까지는 없고 그냥 영어사전만 끼고 있어도 충분하다. 즉 영어때문에 걱정할 일은 아니라는 말씀!
프로그램 언어는 프로그래머의 도구일 뿐이지만, 각 언어마다 장단점이 있고[9], 시장의 수요에 따라 특정 언어를 할줄알면 몸값이 올라가는 경우[10]가 있기 때문에 다양한 언어를 다룰 줄 아는 것이 여러가지로 좋고 또 중요하다.
어느 정도 실전에 사용할 만한 코드를 짤 수 있게 되었다면, 이제부터는 슬슬 고급 기술을 연마할 차례다. 각 언어마다 디자인 패턴이라는 일종의 설계 지침서가 있는데, 이런 패턴들을 학습하고 전문용어를 익혀 고급 개발자와의 커뮤니케이션(쉽게 말해 의사소통)이 원활해지도록 노력해야 한다. 틈나는 대로 다른 언어들도 공부하는 것이 좋다. 달랑 한 두개의 언어만 붙잡고 있으면, 그리고 그 외의 언어에 대한 지식습득을 외면한다면 어느 순간 도태될 수도 있다. 현실의 외국어와 달리 프로그래밍 언어는 문법이나 용어들이 다 비슷비슷하므로 습득하는데 큰 노력이 들지 않는다. 다른 언어들까지 잘 사용할 능력을 갖출 필요까지는 없고, 그냥 간단한 프로그램 만들 정도만 익히면 충분하다. 나중에 그 언어를 주력으로 사용하게 될 때, 나머지 상세한 부분을 공부해도 늦지 않다.
디자인 패턴까지 공부했는가? 그러면 축하한다. 당신은 이미 프로그래머다. 이제 GitHub라는 프로그래머의 성지로 성지순례를 떠나자. 거기서 깨달음을 얻고 자신의 나아갈 길을 발견할 수 있을 것이다.
여기까지 왔는가? 그럼 이제부터 여러분은 스스로 나아갈 수 있을 것이다. 참고로 리눅스를 가까이하고 윈도우를 멀리하면 프로그래머로서의 삶이 좀 더 편해진다. 근데 단점으로 일상생활이 몹시 불편해지기 때문에 아니야 코딩덕후는 리눅스가 더 편하다구프로그래머가 되고자 한다면 그냥 컴퓨터 두 대를 사서 각각 윈도우와 리눅스를 깔아놓는 걸 추천한다. 버츄얼박스 같은 가상화는 추천하지 않는다. 리눅스 호스트에 윈도우를 버츄얼로 띄우면 게임 따윈 꿈도 꿀 수 없고 윈도우 호스트에 리눅스를 버츄얼로 띄우면 하드웨어 접근 제한 때문에 엄한 데서 삽질을 할 수 있다. 물론 초보 프로그래머가 하드웨어를 컨트롤할 일은 거의 없으니 윈도우 호스트에 리눅스 버츄얼 정도는 중급 프로그래머가 되기 전까지는 괜찮다. 듀얼부팅? 하지마라. 장담하건데 듀얼부팅 환경을 꾸며놓으면 얼마 안가서 리눅스는 절대 안 쓰고 윈도우만 쓰게 된다. 물론 윈도우 환경에서 사용할 수 있는 끝판왕급 개발 도구인 비주얼 스튜디오라는 게 있긴 하다. 그럼에도 불구하고 리눅스를 추천하는 이유는 리눅스쪽이 CLI환경 기준이라 답변 달리는 게 커맨드 명령 같은 간단한 거라 답변의 양에서 압도적이기 때문. 게임 프로그래머가 되고 싶은 사람도 주력 개발은 윈도우에서 할지언정 일단 리눅스 환경은 경험해보는 게 좋다. 편리한 줄 모르면 불편한 줄도 모른다.
컴퓨터 두 대 사는 게 아무래도 부담이 되면, 리눅스용 컴퓨터는 본체만 어디 재활용센터나 중고시장 같은데서 주워오고, 거기에 서버용 리눅스를 깐 뒤에 SSH(PuTTY등)로 원격 접속해서 사용하는 방법을 추천한다. 10만원 정도면 PC방에서 배출되는 중고컴 정도는 구입할 수 있다. 운 좋으면 아파트 쓰레기장에서 공짜로 주워올 수도 있다. 전기료는 하루종일 켜놓는 게 아닌 한에야 별로 차이 안 난다. 리눅스컴도 전기먹을만한 작업을 안 하고 윈도우컴도 전기먹을만한 작업을 안 하니까. 게임 하나 돌리고 있는 컴퓨터가 저거 두 대분보다 더 많은 전기를 소모한다.
아예 공짜를 원하나? 좋은 방법이 있다. 아마존 웹 서비스를 사용하는 것이다. EC2인스턴스의 t2.micro 인스턴스는 가입 후 1년간 무료로 사용할 수 있다. 1년 지나면 계정을 지우고 다른 신용카드를 붙이는 방법으로 계속 사용할 수도 있다.[11] micro인스턴스라도 어지간한 프로그램은 충분히 컴파일할 수 있다. 심지어 웹 서버에 데이터베이스 서버를 덕지덕지 붙여도 혼자 쓸 목적으로는 충분한 성능을 낸다. 돈 내고 쓰겠다고 해도 예약인스턴스를 구매하면 t2.nano급(가장 싼 인스턴스)의 1년 자유이용권(All upfront) 가격이 40달러 선이다.
본인이 덜렁이 기질이 있거나 보안의 '보'자도 모르는 생초보라면 아마존 웹 서비스는 사용해서는 안된다. 위의 각주에도 언급돼있지만 앗 하는 사이에 돈십만원 빠져나가는 건 우습다. 이건 후불요금이기 때문에 환불도 안 된다. 보안을 철저히 챙길 자신이 없다면 클라우드 컴퓨팅에는 손대지 말자.
그리고 중수 이상의 프로그래머라면 가급적 초고해상도 모니터와 좋은 키보드를 갖추는 것이 권장된다. 왜냐하면 하나의 화면에 몇 줄의 코드가 보여지는지가 생산성에 많은 영향을 미치기 때문이다. 그리고 모니터에 뚫어지게 쳐다보는 특성상 시력이 안좋아지다보니 폰트는 가급적으로 키우는데 모니터 사이즈가 받쳐줘야 하기 때문. 키보드를 쳐야 하는 일이 아주 많으니 기계식 키보드와 같은 고급품을 구입해서 쓰는 것이 좋다. 전문가에겐 전문적인 장비가 필요한 법이다. 대신 그래픽 카드나 CPU같은 건 좀 하급이어도 큰 문제가 되지 않는다. 개발할 때 본체 쪽 스펙은 좀 떨어져도 상관없다. 고급 프로그래머가 되면 빌드 머신을 따로 구성할 정도로 전문적으로 작업하게 되겠지만, 이미 거기까지 도달한 프로그래머는 자신에게 필요한 환경이 무엇인지 잘 알고 있을 것이다.
4.1. 학위(대학 졸업장 등) 필요여부
흔히 프로그래머에게는 학력이 중요하지 않다고, 심지어 대학 교육이 반드시 요구되는 분야가 아니라고들 말을 한다. 사실 결코 틀린 말은 아니다. 고가의 실험실습 도구가 필요한 다른 분야와는 다르게 프로그래머에게는 오직 달랑 컴퓨터 한 대만 있으면 충분하고, 필요한 관련 지식에 대한 정보는 인터넷의 정보 바다에 흘러 넘치기 때문이다. 게을러서, 즉 자기가 안 찾아봐서 관련 지식 및 정보를 모르는 경우는 있어도, 찾을 수가 없어서 관련 지식 및 정보를 모르는 경우는 극히 드물다고 할 수 있다. 또한 수준 높은 프로그래머를 희망하는 것이 아닌이상, 즉 양산형 프로그래머(코더) 정도가 되기를 원하는 이상 대학 외의 사교육기관, 즉 학원에서도 얼마든지 관련 공부를 할 수 있다. 심지어 마음만 먹으면 혼자서도 공부해서 될 수 있는 것이 프로그래머이다. 그러나, 학위가 필요하지 않다는 말이, 즉 대학 졸업장이나 대학교육이 반드시 필요한 것이 아니라는 말이 실력이 중요하지 않은 직업이라는 이야기는 아니다. 말인 즉슨 학력 = 실력이 아니다일 뿐이다.
사실 대학에서 배우는 내용들은 추상적인 것들이 많아서[12] 나중에 일선 필드 현장, 즉 직업전선으로 뛰어들었을 때 거기서 하게 되는 프로그래밍과 아예 직접적 관련이 없는 내용들도 많이 있고, 관련이 있는 내용이라고 하더라도 그것들을 필드에서 실전에 녹이는 것은 힘든 경우가 꽤 많다. 사실 대학에서 일반적인 기업의 일반적인 코딩실무에 필요한 능력만 추려서 가르친다면, 그 분량 및 학업에 필요한 시간은 그다지 많지가 않다. 그렇기때문에, 사실 정말 고급지식을 필요로 하는 분야[13]가 아닐 경우에는 대학이 오히려 시간낭비가 될 수도 있다.
그러나 고급 소프트웨어 엔지니어가 되기 위해서는 말이 조금 달라진다. 일단 고급 엔지니어가 되기 위해서 대학 졸업장이 반드시 필요한 것은 아니다. 여전히 졸업장보다 지식이 중요한 것은 마찬가지. 그러나 아이러니하게도 이 경우 좋은 대학이 매우 중요하다. 고급 지식을 배울 수 있는 곳이 좋은 대학 뿐이기 때문.
널리 알려진 사실이지만 한국의 컴퓨터공학/소프트웨어과는 구조적인 문제로 커리큘럼이 낙후되어 있다. 컴퓨터공학과를 진학하게 되는 이유가 이론적 배경을 위해서임을 고려하면 이는 졸업자의 경쟁력에 심각한 마이너스 요소가 된다. 말할 것도 없지만, 미국의 스탠포드나 MIT와 비교했을 때 한국 대학의 커리큘럼을 모두 성실히 따라간다고 해도 기대되는 아웃풋은 처참할 지경. [14] 그나마 세계 랭킹 50위권인 서울대학교나 KAIST에서나 미국의 제대로 된 탄탄한 커리큘럼에 그렇게 많이 꿇리지 않는 교육을 받을 수 있다. 문제는 이 지식이 없으면 고급 엔지니어가 되는데 엄청나게 큰 지장이 있다는 것이다. 이런 지식[15] 은 단순 코더로서 실무 경험을 쌓는다고 해서 배울 수 있는 것도 아니며, [16] 사이버대학 등의 접근성이 높은 대학교에서 깊이있게 배울 수도 없으며 Coursera 등에서도 이런 고급 강좌는 거의 제공해주지 않는다.
대학원 또한 마찬가지. 애초에 중요한 건 대학원을 나왔느냐가 아니라 어떤 대학원에서 어떤 수준의 교육을 받고 어떤 퀄리티의 논문을 냈느냐라는 것을 상기하자. [17] 현실적으로 낙후된 대학 환경에서 그나마 제대로 된 실력을 쌓을 수 있는 대학은 한국에 두세개 뿐이고, 이런 대학원은 들어가기가 상당히 어렵다. [18] 결국 현실적인 문제로 고급 엔지니어가 되고자 한다면 실력이 중요한 IT 분야에서도 굉장히 좋은 교육을 받아야 하기 때문에 좋은 대학을 가는 것은 거의 필수적이다. [19] 만약 자신이 외국 대기업 진출을 노리는 등 고급 엔지니어만이 할 수 있는 일을 하고 싶다면 일단 좋은 대학을 가고 보는 것[20]을 강력하게 추천한다. 인맥, 다양한 기회 등은 덤.
대기업에 입사하고자 할때는 대학 졸업장이 당연히 필요하고[21], 괜찮은 중견기업에 지원할 때도 필요하다[22]. 설사 SI이나 SM 업무를 하더라도 "갑"에서는 개발자의 학력이나 학벌을 중요시 여기기도 한다. 그리고 대학교 졸업장 없이는 실력이 뛰어나더라도 상대적으로 설계 경험을 접해보기 힘든 경향이 있다. 사실 학력과 실력은 반드시 일치하는 것도 아니고, 이 분야 특성상 학력과 실력이 무관한 경우도 매우 많지만, 이 분야 특성을 잘 모르는 일반인들로서는 사회 통념상 학력이 없으면, '저 사람은 대학도 나오지 않았는데, 당연히 실력도 없을 거야~' 라는 식으로 선입견 내지 편견을 가지기 쉽다. 그래서 그러한 편견을 가진 일반인이 발주를 하는 갑의 위치에 있다면, 실력을 보지도 않고 쉽게 무시하기 일쑤이다. 하여간 한국에서 사회생활 하려면 대학은 나와야 한다 미국도 프로그래머로 취업하려면 보통 대학을 졸업해야 하고, 구글 오라클 등의 대기업에 취업하려면 좋은 학교 출신이 아무래도 유리하다.
아랫 글(4.3.필요한 능력)을 보면 알겠지만, 그 획기적인 알고리즘을 만들어낸다는 교수들이 바로 박사들이다. 또, 알게 모르게 석사학위도 꽤 쳐준다. 구글 검색엔진에 사용된 알고리즘을 고안해낸 래리 페이지가 바로 석사다[즉, 단순히 시간/공간적 절약만 알고리즘의 개선목표가 아니다]. 더붙여, 좋은 지도교수님 밑에서 잘 트레이닝 된 석사가 건성으로 졸업한 박사보다 나을 때도 많다. 끝으로, 교수가 코딩 안하는 이유는 어느정도 급만 되면 코딩할 필요가 없는 것도 있는 한편, 박사과정 학생들이 가져다 주는 획기적인 알고리즘이 타당한지 검증하고 논문 검토하는 데도 바쁘기 때문이기도 하다. 그 와중에 애들도 가르치고, 연구도 따와야 하고, 학내 정치도 해야 되지 않는가.
결론은 대학원 안갈거면 혼자 해도 된다. 그리고, 학산데 박사급으로 머리가 돌아가는 프로그래머도 정말 간혹이긴 하지만 있긴 하다. 획기적인 알고리즘도 만들어 내고 그걸 최적화된 코드로 옮기면서, 설계도 정말 잘된 프로그램을 만드는 그야말로 슈퍼프로그래머 랄까? 예를 들어 리누즈 토발즈는 학부 졸업하기도 전에 이미 운영체제를 개발했다. 그럼에도 불구하고 석사학위를 받았다는건 덤이다.
4.2. 난 고수가 되고 싶어요
위에서 설명한 GitHub만 잘 돌아다니면서 쓸만한 정보들을 캐치하고, "stackoverflow"사이트만 잘 이용하더라도 혼자 힘으로도 고수가 될 수 있다. 그렇지만 독학 학습 과정에서 일종의 종교적 신념(?) 같은 것들이 생겨나, 중수에 머무르는 프로그래머도 상당히 많다. 예를 들어 C++ 언어가 만능 언어라는 신념 등. 만능 언어가 맞긴 맞는데 만능기판과 PCB의 차이와 같은 것이다. 만능기판이 만능이긴 하지. 그런데 왜 사람들은 PCB를 굳이 제조해서 쓸까? 한 번 잘 생각해보기 바란다. 이러한 자신만의 독단적 신념에 빠져드는 것을 방지하고 예방하기 위해서는 전 세계 개발자의 트렌드를 예의주시하고 있어야 한다. 물론, 트렌드를 지속적으로 팔로우하는 건 어렵다. 연예인들이 트렌드를 팔로우하는 어려움 만큼이나 어렵다. 라이브러리나 프레임워크를 뺀 순수 '언어'들만 해도 200여 종이 넘는다. 요즘에 안 쓰는 언어들은 제외한다고 해도 대략 50여 종의 언어가 남는데, 그 중에서 다음 프로젝트에 무슨 언어가 쓰일 지는 확정지을 수 없다.[23] '나는 게임 개발자니까 다음에도 당연히 C++이겠지?' 했다가 갑자기 파이썬 스크립트 뭉치가 툭 던져질 수도 있는 동네가 이 동네다. 당장 아이폰 앱 쪽을 봐라. '오브젝티브-C만으로도 충분하겠지?' 했는데, 어느날 갑자기 애플에서 Swift를 발표하지 않았는가...
그러므로 진정 고수가 되고 싶다면 한 언어만을 맹신하지 말고 다른 언어를 접해보자. 대표적으로 Go언어는 C언어가 할 수 있는 일은 죄다 할 수 있으면서도, 컴파일이 빠르고 코딩은 쉽다.[24] Python은 C보다 할 수 있는 일들이 적지만, 워낙 쓰기 편한 까닭에 주류 언어의 지위를 차지하고 있다. Erlang이란 언어는 원래 통신장비에 들어갈 목적으로 설계된 언어인 탓에 동시접속자가 폭주해도 굳건히 버텨낸다.[25]
한번 예를 들어보자. Java라는 한 우물만 계속해서 파게 될 경우, 처음엔 날코딩에서 시작해 IDE를 쓰게 되고, 써드파티 라이브러리를 사용하다가 스프링 프레임워크라는 것이 있다는 걸 알게 되고, 프레임워크의 유연성에 감동의 눈물을 흘리다가, 그 프레임워크를 만든 근간 기술인 디자인 패턴에 대해 공부하게 되고... 그렇게 차츰 자기도 모르게 고급 프로그래머가 되어 간다. 그렇다. 이렇게 한 우물만 파더라도 고연봉을 받을 수는 있다. 왜냐하면 아직도 자바는 프로그래밍 언어 인기순위 2이기 때문이다.[26] 하지만 그놈의 학습량이 문제다. 위에서 트렌드를 지속적으로 팔로우해야 한다고 했는데, 자바 쪽의 트렌드는 따라가려면 읽을 양이 엄청나게 많다. 그래서 다른 것에 한눈 팔 여유가 없다. 그런데 현재 자바 언어는 입지가 상당히 위험한 상태다. 구글과 오라클 간에 소송도 걸려 있고, 다른 경쟁 언어들이 더 강력하고 편리한 신기술로 무장하고 있는데다가, 언어 스펙의 발전이 오랜 기간 정체해 있었다. 코볼언어가 그랬듯 금융권이라는 보수적인 곳에서 자바를 쓰기 때문에 하루 아침에 몰락하고 그러진 않겠지만 일자리 자체가 줄어들어 취업문이 좁아지는 건 어쩔 수 없다. 그런데 최신 트렌드에 민감하게 반응하고 있었다면, 스프링 프레임워크를 접할 때 즈음엔 함수형 언어라는 게 있다는 사실을 어떻게든 주워들을 확률이 높다. "내 사랑 자바를 왜 까고 그래요?" 하고 대들면 뭔 일급 객체니, 클로저니... 하면서 사람을 열받게 하는데 당장 자리로 돌아가서 구글신에게 물어보면 뭔가 심상치 않은 분위기를 느낄 것이다. 그리고 10분 뒤, 당신은 멘붕을 경험할 것이다. "인터페이스가 불필요하다니!" 거기서 끝나지 않는다. 메서드 체이닝과 고차 함수 개념을 접하고 나면 객체를 상속하듯이 행동을 확장할 수 있는 함수형 언어의 설계 패러다임을 접하고 문화충격과 더불어 뇌 개조를 당하게 된다. 객체지향이 세상의 진리인 줄 믿었건만 또 다른 세계가 존재했던 것. 그리고 멀티스레드는 금단의 사과 같은 테크닉이라고 믿었던 자신에게 스레드가 다다익선이라고 가르치는 GPGPU세계도 잠시 스쳐지나갈 수 있다. 리턴값을 두 개 세 개 막 넘길 수 있는 Python과 Go를 보고, 숫자에 메소드를 붙이고 문자열 자체를 메소드명으로 해석해서 실행시키는 괴랄한 테크닉이 가능한 Ruby를 보고[27], 심지어 같은 자바가상머신을 사용하는데도 유연성이 훨씬 뛰어난 Scala와 Groovy를 접해보게 된다. 그런 세계여행(?)을 하고 돌아와서도 순수주의자처럼 자바 하나만으로 코딩하고 싶지는 않을 것이다. 심지어 남들이 헷갈리니까 언어는 하나로 통일하라고 말해도 싫을 것이다.
저 과정 전체에 대한 퀵 투어를 원하는가? 프로그래밍 언어/코드 예제항목에 가 보자. "Hello, World!"는 그렇다치고 그 아래쪽 것들을 구경해볼것. 열 줄짜리 구구단 출력 자바 코드가 Ruby언어에 가면 어디까지 줄어드는지 한 번 보자.
위에서 자바를 너무 심하게 깠는데, 사실 C++프로그래머가 자바 세계로 넘어와도 비슷한 문화충격을 받을 수 있다. '아니 왜 포인터가 없지? 그러고도 프로그램이 돌아가나?', 'new는 있고 delete가 없다니, 코딩 개판이네', '연산자 오버로딩이 안돼? 다중상속도 안돼? 성능도 느리다고? 머신제어도 불가능? 장난감이구만...' 하고 있다가 크게 데이는 경우도 더러 있다. 또는 웹 개발자이긴 한데 IoT 디바이스 분야라서 PHP를 아두이노와 통신시키려고 별의 별 모듈을 덕지덕지 붙이다가 그냥 C언어를 이용하여 함수 호출 한 개로 끝내버리게 되는는 신나게 빡도는 경험도 할 수 있다. 하지만 다른 분야를 안 보고 있었다면, 일하는 내내 빡쳐있겠지 인과응보다. 뭐 그러다 최정점에 서게 되면 이거고 저거고 다 비슷해 보이게 된다는 언어의 한계를 돌파해 버리기 때문에(...) 무슨 언어를 쓰든 거기서 거기처럼 느껴질 수도 있겠지만 이 경지까지 가면 스스로 컴파일러를 제작해서 사용할 정도의 초월자가 되어있을 것이라 논외.(...)
4.3. 필요한 능력
야근력
코더든 아니든 간에 일단 프로그래머라고 자부하려면, 최소한 (아주 기초적인 수준이더라도) 여러가지 프로그래밍 언어를 구사할줄 알아야 하며, 직종에 따라 다양한 툴과 엔진을 다룰 줄 알아야 한다. 한편 직접 툴을 다루진 않지만 데이터베이스, 알고리즘, 자료 구조간의 관계/구조를 설계하는 사람을 소프트웨어 설계자(아키텍트)라고 구분하여 부르기도 하는데, 아키텍트는 당연히 관련 분야 지식을 알아야 한다. 아무튼 직종에 따라 차이가 있다곤 해도, 뛰어난 프로그래머가 되기 위해 배워야 할 것은 일일이 설명하기 어려울 정도로 무척이나 많다. 그 중에는 프로그래밍 자체에 대한 흥미 및 이 분야의 트렌드를 지속적으로 팔로우하는 능력 및 꾸준한 공부습관도 포함되어 있는데, 이에 대해 부연설명하면 다음과 같다.
내가 하면 프로그래머요, 남이 하면 코더[28]라고 부르기도 할 정도로, 진입장벽이 낮아졌지만, 진입장벽이 낮다고 해서 결코 '쉬운' 직업[29]은 아니다. 툴은 점점 쉬워지고 있지만 그런 툴 자체가 워낙 많이 쏟아지고 있어서 프로그래머는 그 수많은 툴 중에 '선택'을 해야 한다. 라이브러리간 궁합도 따져봐야 되고 개발이 계속 되고 있는지, 얼마나 많은 유저가 쓰고 있는지, 그리고 검증되었는지 여부 등을 다 따져봐야 하게 된 것이다 (그리고 마지막엔 GPL때문에 리젝되겠지...). 1970년대에는 닥치고 C언어를 쓸 수 있었겠지만, 2015년 현재 그렇게 생각없이 도구를 골랐다간 망하기 일쑤다. 고민을 하는 동안에도 세계 어딘가에서는 새로운 툴이 만들어져 발표되고 있고 기존 툴이 대대적인 업그레이드를 해서 원래 후보 탈락이었는데 재검토가 불가피해지는 경우도 발생한다. 정말 안습인 건 1년동안 고생해서 프로그램 하나를 제작했는데 다른 회사에서 신기술을 도입한 더 좋은 프로그램을 일주일만에 출시해버리는 경우도 발생한다. 툴 선택이 잘못돼서 생산성이 떨어진 상태로 작업하는 게 어떤 참사를 불러오는지의 가장 극단적인 사례.
그래서 타 분야에 비해 꾸준히 관련 분야 지식을 공부해야 하는 자세가 요구된다. IT쪽 뉴스에 뭐가 뜨면 최소한 자기 분야는 죄다 챙겨봐야 하니까 말이다. 덕분에 학원출신이라도 이후 독학으로 대학출신을 능가하는것도 가능하며, 대학에서 우수하였더라도 졸업 이후에 자기 분야 지식에 대한 체크를 게을리 한다면, 양산형 프로그래머 수준으로 떨어지는것도 매우 쉽다. 특히나 IT 분야는 발전속도가 매우 빠른 분야이기때문에 공부를 그만두면 순식간에 뒤쳐질수 밖에 없다. 따라서 프로그래머라는 직업을 그만두는 때까지 공부를 게을리 해서는 안된다. 그러므로 어떻게 보면 사실 프로그래머에게 필요한 가장 중요한 적성은 뜬구름 같은 얘기이기도 하지만, 프로그래밍 그 자체에 대한 흥미라고 할 수 있다. 흥미가 있는 사람이라면 누가 시키지 않아도 직접 찾아서 새로운 기술과 관련 정보를 습득할테고, 누가 강요하지 않아도 알아서 공부할 것이기 때문이다. 그와 달리 학교에서처럼 시험같은 것으로 강요하는 사람이 없을 경우 스스로 공부를 하지 않는 케이스라면, 학교를 졸업하고 난 이후에는 공부에 소홀 할수 밖에 없을 것이고, 그렇게 되면 다른 사람들에 비해 실력이 뒤쳐질 수 밖에 없을 것이다.
대부분의 대학교 컴퓨공학과 교수들이 본인은 절대 코딩 안 하는 이유가 다른 게 아니라 이 트렌드를 못 따라가서다. 연구분야가 툴 그자체에 있는 게 아닌 한에야 교수들이 툴에 관심가져야 할 이유도 없고. 다른 분야 교수들(기계과 등)이 대학원생과 일대일 맞다이를 떠도 꿇릴 게 없는 반면 컴공과 교수들이 프로젝트 하나를 추진하려면 대학원생이 반드시 몇 명씩 필요한 이유도 이것 때문이다. 물론 코딩덕후출신 교수들도 있긴 한데 전체적인 모양새가 그렇다는 것이다. 컴공과 교수들이 무능하다는 얘기가 아니다. 이들이 이 문서 맨 위에 서술한 바로 그 거창한 알고리즘 연구가들이다. 일반 프로그래머들이 코드 실행 속도를 0.1초, 0.001초를 줄이는 데 진땀빼는 동안 이들 교수들은 그 시간을 절반, 10분의 1하는 식으로 뭉텅이로 줄여버리는 연구를 한다. 공학자라기보다는 수학자에 가깝고 그래서 실세계의 프로그래밍 언어보단 의사 코드를 더 자주 사용한다.
구체적인 예시를 들자면, 일반 프로그래머들은 루프 수행 최적화, 호출 최적화, 인트린식 적용 같은 기법들을 동원해 코드의 수행속도를 빠르게 하려고 한다. 하지만 그렇게 애써서 빠르게 만들고 있는 알고리즘 그 자체가 선택 정렬인 셈이다. 교수들은 아예 정렬 속도의 차원이 다른 퀵 정렬을 연구해서 논문에 발표한다. 해당 교수의 연구실에 있는 대학원생은 이 교수가 개발한 알고리즘(의사 코드)를 실제 수행 가능한 프로그램으로 바꾸는 코더 역할을 수행한다. 비록 이들 대학원생은 효율성이 매우 떨어지는 발적화 코드를 생성하겠지만 알고리즘 자체가 차원이 다르게 빠르기 때문에 선택 정렬보다 압도적으로 빠르게 된다. 그리고 이 알고리즘이 현장의 프로그래머들에게 알려지고, 프로그래머는 새로운 알고리즘을 자신들이 알고 있는 방법으로 최적화한다. 그런 식으로 IT산업이 발전해 나가는 것이다. 교수들이 코딩 못하는 게 무능한 게 아니란 소리다. 심지어 컴공과 교수가 컴맹일 수도 있다. 컴맹도 알고리즘 연구하는데는 별 지장이 없다. 다른 분야로 예시를 들자면 현장의 엔지니어들이 엔진의 초반 가속력을 높이려고 슈퍼차져를 달고 기어비를 조정하고 타이어를 재설계하는 고생을 하는 동안 교수들은 모터구동식 전기자동차를 연구하고 있다고 볼 수 있다.[30] 또 다른 분야로 철도 분야를 예시로 들면 고속열차를 만들려고 차륜과 레일의 점착력을 확보하고 에어로다이나믹을 적용하고 동력분산식 설계를 적용하는 등의 고생을 하는 동안 아예 바퀴를 없애버린 자기부상열차를 연구하고 있다고 볼 수 있다. 또한, 컴퓨터 분야의 발전과 변화가 엄청나게 빠르기 때문에 어제의 상식이 구시대의 유물로 변하는 것은 금방이다. 이를 계속 따라잡으려면 새로운 지식을 받아들이는 것을 게을리해서는 안 되고, 그렇지 못하면 도태될 수밖에 없기에 프로그래머라는 직업을 계속하기 위해서는 많은 노력이 필요하다.
이렇게 트렌트 파악 및 꾸준한 공부가 필요한 분야이기 때문에 한편으로 프로그래머집단은 동종업계 종사자들 사이에서 지식 공유가 활발한 분야이기도 하다. 예를 들어, 위키위키는 프로그래밍에 쓰는 패턴들을 정리하기 위해서 처음 탄생했다. 또한, 모르는 사람들이 모여서 상업적인 목적으로 만든 것보다 쓸만한 물건을 만들어 내는 오픈 소스 프로젝트는 활발한 지식 공유 없이는 유지될 수가 없다.
한편 양산형 프로그래머, 즉 코더가 아니라 제대로 된 프로그래머가 되고 싶다면 영어로 된 기술언어 정도는 읽고 쓸 수 있을 능력을 만들어둘 것을 추천한다. 컴퓨터는 미국에서 만들었고 현재 미국이 리드하고 있지 한국어로는 프로그램을 짤 수 없다!!![31] 그렇지만 본인이 영어 못한다고 좌절하지는 말자. 영어에도 분야에 따라 난이도라는 게 있다. 외교관영어가 최상급 난이도라고 가정하면, 기술자 영어는 생활영어보다도 더 아랫급인 아주(!) 쉬운 영어다. 어휘 자체가 공학영어는 생활영어보다 훨씬 적고, 3형식을 넘어가는 문장은 거의 쓰이지 않으며 에둘러 표현하는 것 따위는 절대 없다. 또한 문장에 애매모호함 따위는 없고 거의 모든 문장의 의미가 명확하다. 일반인이 들었을 때 왈도체스러운 영어를 구사하게 되니까 거기서 만족하면 곤란하지만 어쨌든 같은 기술자끼리는 말이 통한다. 정 안통하면 코드로 대화할 수도 있다. 이러한 외국어 독해 능력은 특별이 프로그래머라고 해서 해야 하는 어쩔 수 없는 일은 아니고, 다른 분야도 마찬가지다 해당 분야에 있어 가장 앞서가고 있는 국가의 언어를 습득하는 것은, 해당 분야에서 한발 앞서 나갈 수 있는 너무도 당연한 지름길 인것이다. 예를 들어 철학을 공부하려고 하는 사람은 독일어를 공부하는 것이 자신의 분야에서 앞서나가기 위한 필수코스이며, 한의학을 공부하면 한문을 공부해야 하는 것처럼, 보편적인 다른 분야와 마찬가지로 현재 컴퓨터 분야를 리드하고 있는 나라(미국)의 언어인 영어 를 공부한다면 해당 분야에서 앞서 나간는데 있어서 유리한 것은 너무나 당연한 것이다.
5. 이 속성을 가진 캐릭터
• 나루사와 카즈마 - 탐정학원Q
• 미스터 A - 비밀결사 매의발톱단 THE MOVIE- 나를 사랑한 흑우롱차
• 아이바 아사기 - 스트라이크 더 블러드
• 아카기 리츠코 - 신세기 에반게리온
• 아카사카 류노스케 - 사쿠라장의 애완 그녀
• 오오이시 이즈미 - 아이돌 마스터 신데렐라 걸즈
• 오카 타카오 - 역전재판 시리즈
• 웨일런 파크 - 아웃라스트
• 쿠나기사 토모 - 헛소리 시리즈
• 후지사키 치히로 - 단간론파 시리즈
• 나가토 유키 - 스즈미야 하루히 시리즈
6. 유사 용어
• 개발자
• 코딩덕후
1. [1] 잉여력이 넘치는 디시에서는 프로그램을 짜 도둑맞은 갤럭시탭을 되찾은 사람도 있었다.#
2. [2] 대학 말고 이렇게 깊이 가르치는 곳이 없기때문.
3. [3] 그냥 복붙하면 당연히 에러난다. 문맥에 맞게 코드를 수정할 수 있어야 한다. 그조차도 못하면 코더도 아니고 그냥 잉여다.
4. [4] 기반 프로그램. 운영체제(OS)나 카카오톡과 같이 여러가지 프로그램들이 작동하는 데 있어 기반이 되는 프로그램을 뜻한다.
5. [5] 윈도우 프로그래밍을 해 본 사람이라면 MFC가 떠오를 것이다
6. [6] 실제로 일일이 다 개발하는 데 드는 시간이 모두 절약되며, 코더 및 소프트웨어 개발자들에게 있어 시간은 곧 돈과 연결되기 때문이다.
7. [7] 다만 이건 '프로그래밍'이라는 관점에서 Python을 먼저 배우는게 좋다는 이야기이지, 컴퓨터공학을 배울때 Python으로 입문하는게 짱이다는 이야기는 아니다. 컴퓨터공학 커리큘럼에서 C를 먼저 배우는 이유는, 하드웨어 제어 등 전체적인 '컴퓨터 공학 개론'에 C가 적합하기 때문이다. 특히 유닉스 시스템 콜은 C를 모르면 학습 자체가 불가능하다. 당장 실생활에서 써먹을만한 프로그래머를 양산하려면 Java와 Python부터 가르치는게 짱이라는건 교수들도 잘 안다.
8. [8] 없으면 직접 질문해도 되지만, 그러기 위해서라도 생활영어 정도는 구사할 줄 알아야 한다.
9. [9] 각 언어들은 각자의 쓰임이 있기때문에 무턱대고 어떤 언어가 좋고 나쁘다를 따지는것은 매우 어리석은 짓이다. 만약 언어들의 절대적인 우열이 존재한다면 프로그래밍 언어는 하나로 통일됐을것이다. 자신의 목적에 따라 적합한 프로그래밍 언어를 선택하는것은 프로그래머의 중요한 능력중 하나이다.
10. [10] 대기업에서 ERP가 유행할때 ABAP 프로그래머나 아이폰 발매 초기 C프로그래머
11. [11] 하지만 종종 과금 상황을 확인해야 한다. 무료 기간이 지나거나 유료 서비스를 모르고 사용했다간 어마어마한 돈이 청구되는 불상사가 발생할 수 있다. 특히 계정이 해킹이라도 당하면 천만원 넘는 돈이 결제되는 수가 있다.
12. [12] 이는, 이를 제대로 배우기 위해서는 반드시 대학원 과정이 필요한데, 학부 과정 중에는 이를 소화할 수 없기 때문이다. 그래서 보통 이 분야가 무엇이다 정도만 배우게 된다.
13. [13] 이런 분야들은 보통 수학능력이 아닌, 수학적 지식이 많이 요구된다. 일반적인 코딩은 사칙연산/이산수학 및 간단한 논리력이 전제되는 수학능력이면 충분하지만, 저런 고급분야들은 분야에 따라 본격적인 대학수학인 해석학부터 시작하여, 확률, 대수, 수리논리, 위상, 기하 등의 지식을 전제하는 경우가 많다. 그래픽스 같이 현실과 밀접한 분야의 경우, 여기에 추가로 대학미적분 및 편미분, 삼각함수, 물리학도 추가한다. 이런분야들은 고졸로는 접근하기가 매우 힘들며, 대학에서도 대학원부터 시작하는 경우가 많다.
14. [14] 오죽하면 웬만한 스펙으론 노려보지도 못하는 N사 등의 대기업에서도 신입 학사 졸업자가 기본기가 없다는 볼멘소리가 나오겠는가?
15. [15] 선형대수학, 확률/통계론, 이산수학, 데이타구조, 알고리즘, 아키텍쳐, 프로그래밍 언어, OS, 오토마타, 시스템 프로그래밍, 네트워크, 소프트웨어 공학, 데이터베이스, 컴퓨터그래픽, 전산논리학, 컴파일러, 계산이론, 정보보호, 인공지능, 인간-컴퓨터 상호작용 등
16. [16] 단순한 코더로서 실무 열심히 한다고 이 지식을 배울 수 있을까? 대학 200번대까지는 어찌저찌 가능할지 모르지만 그 이후는 아인슈타인급 천재가 아닌 이상 불가능에 가깝다. 벽돌공 일을 30년 하면 건축 설계에 대해 모르지는 않게 되겠지만, 그렇다고 고급 건축 설계자가 될 수는 없다는 뜻. 단순한 코더가 아니라 고급 소프트웨어 엔지니어 혹은 아키텍트가 되고 싶다면 방향을 다르게 잡아야 한다.
17. [17] 이것은 학부 또한 마찬가지다. 학부를 나왔느냐가 중요한게 아니라 어떤 교육을 받고 어떤 실력을 쌓았느냐가 중요하다.
18. [18] 그나마 자대생(학부를 해당 대학에서 마친 학생)의 경우도 절반 넘게 학점에서 컷트 당한다. 자대가 아닌 경우 들어가기는 완전히 바늘구멍인데, 인서울 정도에서 이런 대학원을 가려면 과 1위를 해도 떨어지는 경우가 대다수인 상황.
19. [19] 미국의 사정 또한 마찬가지다. 아이비리그 등 최상위권 대학은 한국의 탑3 대학보다도 환경이 좋지만, 조금만 순위가 내려가더라도 수업의 질이 크게 떨어지고, 이는 결국 졸업자의 엄청난 경쟁력 저하로 이어진다. 결국 미국도 상황이 다르지 않다는 말.
20. [20] 좋은 대학을 가려면 수능 공부만 해야 한다고 생각하기 쉬운데, 그렇지도 않다. 수시 전형이 7~80%가 된 상황에서 정보올림피아드나 프로그래밍을 잘 하는 것이 오히려 확률적으로 더 유리하다.
21. [21] 물론 자기가 직접 벤처기업을 창업하는 경우에는 대학졸업장이 필요 없다. 대신 돈이 필요하다.
22. [22] 채용자 입장에서는 그 많은 지원자들의 능력을 일일이 직접적으로 다 테스트해서 체크해 볼 수는 없는 노릇이고, 결국 간접적으로 추정해야 하는데, 거기에 사용되는 자료가 학교 성적을 비롯하여, 학력/학벌 등인 것이다
23. [23] 전문분야 자체를 바꾸는 게 아니라면 대략 3종 내에서 결정되는 편이다.
24. [24] Go언어 설계자 중 한 명이 C언어를 만드신 켄 톰슨 옹이시다.
25. [25] 참고로 Go언어는 Erlang언어의 영향을 받았다.
26. [26] 2015 말부터 C언어의 점유율이 자바보다 떨어져 이제는 1위이다.
27. [27] 파이썬에서도 eval로 지원한다!
28. [28] 코더와 프로그래머를 구분하는 주장은 수도없이 많지만 명확히 정해진건 없다.
'살며 생각하며,' 카테고리의 다른 글
개 발 일 지 037 (0) | 2019.12.06 |
---|---|
개 발 일 지 036 (0) | 2019.12.04 |
개 발 일 지 034 (1) | 2019.12.04 |
개 발 일 지 033 (0) | 2019.11.26 |
개 발 일 지 032 (0) | 2019.11.26 |
최근댓글