코더, 프로그래며, 해커, 개발자, 그리고 컴퓨터 과학자가 벤 다이어그램에 모여들었다

이 글은 Scott HanselmanA Coder, a Programmer, a Hacker, a Developer, and a Computer Scientist walk into a Venn Diagram을 번역한 것입니다.

한 친구가 최근에 말했습니다. “코딩을 배우고 싶어. 어디서, 그리고 어떻게 시작해야 할까?”

코딩을 배우고 싶습니다 – IKEA에 가야 할까요 나무를 직접 기를까요?

코딩을 한다는 것은 목공일을 하는 것과 같습니다. 목공일을 하기 위해서 당신은 일단 나무를 기르는 일부터 시작해서, 잘라내고 다듬고 해서 테이블을 만들 수 있을 겁니다. 아니면 그냥 IKEA로 직접 갈 수도 있습니다. 보통은 그 중간 어디쯤에서 무언가를 시도하겠죠.

워드프레스 테마를 수정하는 것은 IKEA에 가는 것과 같습니다. 당신만의 웹 프레임웍을 짜는 것은 우선 나무부터 기르는 것과 같죠. 왜냐하면 기존에 있던 나무들 중에 맘에 드는 것이 하나도 없었기 때문입니다. 당신은 코딩을 하고자 하는 스펙트럼의 어디쯤인가에 서야 할지를 우선 결정해야 합니다. 당신은 PBS에서 방송하는 TV쇼들 중 하나인 Woodright’s Shop에 나오는 커스텀 가구 제작자일 수도 있고 아니면 누군가 반 쯤 만들어 놓은 가구들을 조립만 하는 사람일 수도 있어요.

오케이. 좋습니다. 그러면 어디서부터 시작할까요?

쿨하시군요. 전 사람들이 코딩을 배우고 싶다고 할 때 항상 행복합니다. 페이스북에 올라오는 글들 중에 지속적으로 나오는 제안들은 다음의 사이트들을 이용하는 것입니다.

그리고 나면 더더욱 흥미로운 질문들이 근본적인 문제들로 옮겨갈 겁니다.

코더, 프로그래머, 해커, 개발자 그리고 컴퓨터 과학자, 이들의 차이점은 무엇인가요?

아마도 당신에게는 이 모든 단어들이 같은 의미로 다가올 수도 있습니다. 아마도 당신은 긱 geek, 너드 nerd, 드윕 dweeb 같은 단어들을 들어봤을 텐데요, 이 단어들의 중요한 차이들을 우린 알고 있습니다. 저 단어들의 차이를 알게 된다면 당신은 코딩의 모험을 향해 얼마나 깊이 들어가고 싶은지를 가늠할 수 있을 겁니다.

  • 코더: 대부분의 것들을 해결할 수 있습니다. 제대로 작동하지요. 하지만 깔끔하지는 않습니다.
  • 해커: 보통 로우레벨에서 작업하는 사람들로서, 굉장히 능력이 좋고 어떤 경우에는 굉장이 깊은 곳까지 이해하고 있는 경우가 많습니다.
  • 프로그래머: 코드를 짜고, 알고리즘을 다 이해합니다. 보통 혼자서도 일을 척척 잘 해내지요.
  • 개발자: 이들이야말로 최상의 제너럴리스트들입니다. 개발자들은 수많은 다양한 시스템들과 언어들을 사용할 수 있고, 그것들을 서로 연결시킬 수 있습니다. 이들이야말로 진정한 의미의 전문가들입니다. 다른 사람들과 협업도 잘하고 아무튼 잘 어우러질 수 있습니다.
  • 컴퓨터 과학자: 이들은 컴퓨터들이 어떻게 동작하는지에 대해 이론적인 수준에서 증명할 수 있습니다. 보통 수학도 잘하고 그렇죠.

만약에 당신이 저 위에 언급한 것들 중 하나에 가까운 상태라면 어느 방향으로 당신이 앞으로 나아가야 할 지 감을 잡을 수 있을 겁니다.

웹 프로그래밍을 한다고 가정할까요?

이 글을 읽는 모든 사람들은 적어도 웹 프로그래밍에 대해 어느 정도는 알고 있다고 가정합니다. 왜냐면 2013년을 기준으로 본다면 거의 모든 사람들이 웹에 접속하니까요. 하지만, 몇년 전만 하더라도 우린 친구들이 옆에 앉아서 콘솔창에 혹은 비주얼 베이직을 열어서 마우스로 메세지 박스를 드래그한 후 Hello World를 찍고 있었을 겁니다.

마크업이 코드인가요? 많은 사람들이 일단 HTML하고 CSS를 배워둬라고 말합니다. 하지만 전 그게 전통적인 관점에서의 코딩이라고 생각하진 않아요. 자바스크립트와 웹서비스로 향하는 하나의 관문으로써 그건 좋은 시작점이긴 하죠. 그런데, 모든 앱이 전부다가 브라우저에 HTML을 렌더링하는 웹 어플리케이션이라기 보다는 대부분의 애플리케이션들이 서로 어떤 식으로든 연결이 되어 있습니다. 앱들은 서비스를 통해서 데이터를 이용하고, 알림 메시지, 문자, 이메일, 트윗들을 보냅니다. 거의 모든 앱들이 단순히 웹 서버를 호출해서 데이터를 처리하는 방식이라고 할지라도, 어떤 식으로든 사용자들에게 분산되어 있습니다.

만약 당신이 코더가 되고 싶다면 또는 좀 더 멀리 가서 당신이 효과적인 코더가 되고 싶다면, 당신은 웹이 무엇인지 이해하고 싶어할 것이고, 도대체 내가 웹 브라우저에서 트윗을 날릴 때 무슨 일이 벌어질 것인지 정말로 궁금해 할 겁니다. 이건 마치 당신이 목수가 되고 싶다면 나무들이 어떤 식으로 자라는지 알아야 하는 것과 같습니다. 이건 마치 당신이 카 레이서가 되고 싶다면 자동차 엔진이 어떻게 작동하는지 알고 싶어하는 것과도 같구요, 또는 당신이 배관공이 되고 싶다면 도대체 상수도/하수도가 어떻게 흘러다니는 지 알고 싶은 것과도 같습니다. 어이구야… 사실 당신은 이것들을 다 알고 있어야 해요. 정말로 정말로 효과적인 사람이 되고 싶다면 말이지요.

그렇다면 코딩하는 방법을 배우고 싶어요 라는 것의 의미는 도대체 무엇일까요?

이 질문에 숨어있는 질문은 무엇일까요? 당신은 웹사이트를 만들고 싶나요? 웹사이트를 디자인하고 싶나요? 모바일 앱을 만들어서 실행시키고 싶나요? 조그만 가젯을 만들어서 가라지 문을 너무 오랫동안 열어두면 문자 메시지를 보내게끔 하고 싶나요? 이것들은 모두 다 다른 지향점을 갖고 있습니다. 그리고 우리가 조금만 검색을 하다보면 많은 출발점을 만날 수 있습니다.

  • 웹 개발을 하고 싶은가요?
    • 위에 언급한 코딩을 배우는 사이트들이면 충분합니다.
  • 하드웨어에 관심이 있나요?
  • 당신이 매일같이 사용하는 코드들의 역사라든가 코드 자체에 관심이 있다구요?
    • Charles Petzold 가 쓴 “Code” 라는 책을 읽어보세요.
  • 이미 익숙하지만 좀 더 빡세게 하고 싶으신가요?
  • 마당발 개발자가 되고 싶은가요?

물론 당신은 직접 웹의 세계로 뛰어들어서 자바스크립트부터 우선 시작한다거나, 웹 앱을 만든다거나 할 수 있습니다. 물론 그래야 하지요. 하지만, 그것들과 더불어 만약 당신이 좀 더 관심이 생긴다면 여러 다른 방법을 통해 좀 더 앞으로 나아갈 수 있습니다. 조금 더 다양한 가능성을 열어두고 다양한 경로를 통해 도전해 보세요. 그러면 방법이 보일 겁니다.