2016년 9월 27일 화요일

[차이점] 개발자 vs 프로그래머 vs 컴퓨터 사이언티스트 vs 소프트웨어 엔지니어.

개발자? 프로그래머? 컴퓨터 사이언티스트?

이들은 업무적인 차이가 분명히 존재하는 직업군들이다.
헌데 국내에서는 이상하게도 모두들 개발자라 부른다.

국내에서는 'Developer'와 '개발자'가 미묘한 차이가 있는 것 같기도 하다.
아마도 '개발자'라는 의미가
좀 더 넓은 의미로서 '컴퓨터로서 뭔가 만드는 사람' 전체를 아우르는 것인가 싶었다.

하지만 현실은 달랐다.

대부분의 코더나 프로그래머들은 스스로를 정말 'Developer'라고 인지하고 있었다.
알고리즘은 멀찌감치 밀어둔채, 정말로 스스로를 'Developer'라 자부하는 것이었다.
기가막혔다.

아무튼 해외에서는 이들 차이가 분명하다.
아래 밴다이어그램은 이들의 차이를 가장 잘 설명한다고 보여진다.


(사이트 내용 중)

  • Coders - Can pretty much figure out it. It'll work, but it won't be pretty.
  • Hackers - usually low level folks, skillful, with detailed understanding of some area deeply, often scarily deeply.
  • Programmer - Write code and understand algorithms. Often work alone and well.
  • Developer - Are the best generalists, can use lots of different systems and languages and get them to talk to each other. Are true and broad professionals, work with people, and communicate well.
  • Computer Scientist - Need to be able to prove how computers work, at a theoretical level. Are usually math people also.


보면 알겠지만, 각 직업군은 보유 스킬이 약간씩 다르다.

정확한 이해를 돕기위해 각 직업군을 설명해 보자면,
  • 코더(Coders): 막 입문한 프로그래머로서 필요한 소스를 웹검색이나 책을 통해 가져다 쓰고 결과가 나오면 만족한다. 말 그대로 주어진 지시에 대해 구현이 가능하다.
  • 프로그래머(Programmer): 좀더 능숙한 코딩이 가능하며 그저 가져다 쓰는 입장에서 벗어나 수 많은 노하우로서 상황에 따른 최적 소스를 구현할 줄 알고 에러 대처 능력이 뛰어나다. 최종 목적에 대한 이해도가 높아 빠른 속도로 최적 제품의 생산이 가능하다.
  • 컴퓨터 사이언티스트(Computer Scientist): 컴퓨터가 이론적 수준에서 작동하는 방법을 입증 할 수 있어야 한다. 수학적 지식은 기본이며 실제 구현보다는 이론적인 구현에 뛰어나다.
  • 디벨로퍼(Developer): 이들은 폭 넓은 전문가로서 서로 다른 시스템에 대한 지식이 뛰어나고 다양한 언어를 사용할 줄 알며 그들 사이의 이야기를 이해/설명할 수 있다. 
  • 소프트웨어 엔지니어(Software engineer): (위 밴다이어그램에는 없지만;) 소프트웨어 개발자(Software Developer)라고도 하는데, 이들은 사용자 요구를 받아 소프트웨어를 설계/분석하고 우수한 품질을 위해 테스트를 반복한다. 이들은 직접 코딩하기도 하지만 대부분 프로그래머들에게 지침을 제공한다. 컴퓨터에 필요한 운영체제 전문기술자는 시스템 소프트웨어 개발자(Systems software developers)라 불린다.

각각의 역할에 있어 어느 역할이 대단하고 못하고의 기준은 사실 없다.
대신, 어찌보면 다음과 같은 진화(?)단계가 존재할 수도 있다.

Coders → Programmer → Developer

그래서인지 모두들 스스로를 Developer라 자위하는게 아닌가 싶다.
근데 이해가 안되는건, 수학이론이나 알고리즘에 대한 지식은 멀찌감치 밀어둔채, 스스로를 Developer라 불리고 싶어한다는 것이다.

안타깝다.

꼭 우수한 Developer만 인정받는다는 보장은 없다.
고수준의 Programmer는 Developer 못지않은 능력의 소유자가 된다.
마치 Programmer가 Developer보다 한참 질떨어지는 것 마냥,
천시하고 부끄러워 하지 말자.

비행기 조종사는 멋지고 비행기 정비사는 구린듯 떠들어대는 유아적 발상일 뿐이다.

직업에 귀천이 어디 있으랴..


사람들이 가끔 묻는다.

"전 수학을 못하는데 프로그래머가 가능할까요?"

내 대답은 "YES"이다. 당연히 가능하다.
수학 몰라도 잘 만들어진 라이브러리 적절히 사용하면 충분히 멋진 개발이 가능하다.

헌데 만약, 뭔가 새로운 것을 창조해 내고 싶다면.
그런데 수학을 모른다면.
그렇다면 당신은 낭패를 볼 것이다.

수학을 못하는데, 수학은 어려운데, 말들을 하겠지만,
여기서의 수학이란 우리가 보편적으로 알고 있는 교과서적인 '수학'과는
약간의 차이가 있다. (우리나라 수학교육의 병폐가 아닐까 한다.)

복잡한 공식을 외워야 하는 그런 수학을 말하는 것이 아니다.
수학개념은 물론 기본이고 그 위에 논리적 사고능력이 배양되어야 한다.

진정 개발자(Developer)를 목표로 한다면, 수학이나 알고리즘 공부를 게을리하지 말자. ^^
(흠, 결국 수학공부를 해라! 라는 의미가 되어버렸네;)