Hacking for everything
오늘 뉴스를 보니 어떤 23살의 화이트 해커가 삼성 SDS에서 구글로 이직한다는 이야기가 있었다. 한국의 기업 문화가 화이트 해커를 대접을 제대로 안해준다느니, 사실 무근이라느니 등등의 말이 많아서 진위여부를 명확히 판단할 수는 없었지만, 보면서 드는 내 생각.
‘23살이면… 보통 뉴스에서 언급하는 나이가 만 나이니까… 나보다 한살 많은데… 저런 천재가…!’
근데 또한 한편으로 저런 천재는 정말 좋은 환경에서 타고 났기에 저런게 가능했다는 생각이 절실히 든다. 역사에 언급된 천재들처럼, 예를 들어, 폰 노이만이나 가우스와 같은 그런 사람들이 아닌 이상, 현 시대에서는 천재의 필수 조건은 좋은 환경인 것 같다.
그것을 절실히 느끼는 이유가, 고백하자면 나도 초등학생 시절에 메이플 스토리나 던전앤파이터, 라그나로크 등의 게임에서 버그를 쓰며 자라왔기 때문이다. 물론 당시에는 굉장히 어려서 감히 그러한 지식들을 이해를 하진 못하고 툴을 사용하며 버그를 써 왔다. 그 때에도 치트 엔진을 쓰며 메모리 단위의 조작을 하고 그랬었는데, 그래서 듀프 버그도 쓰고 자쿰 버그도 쓰고(그래서 정지 먹었지만…) 강화 버그도 쓰고 … 등등.
이 때에 누군가 나에게 좋은 멘토나 선생님이 있어서 이러한 내용들을 공부할 환경이 주어졌다면, 지금쯤 많이 다른 환경에 있지 않을까… 생각해본다. 물론 그걸 이해하느냐는 그 다음 문제겠지.
음, 그래서 생각해보니, 여태까지 내가 살아온 지식을 기반으로 자문자답을 해 보았다.
‘해킹이라는게 뭐지?’
옛날부터 영화 매트릭스에 빠져서 ‘해커’ 라는 존재에 대해 막연한 동경심을 가지고 컴퓨터 공부를 시작했던 어린 시절. 아무도 도와줄 사람이 없어 혼자 초등학생 시절에 C언어를 공부하며 끙끙대며, 재귀함수부터 슬슬 어려워지기 시작하더니 포인터 개념에서 콱 막혀서 아무것도 할 수 없었지만, 아무도 도와줄 수 없던 시절. 답답해도 말도 못하지만, 혼자 해결해보려 몇 달을 밤새 컴퓨터 붙잡으며 알아내고, 그러다 밤새 컴퓨터했다고 집에서 쫓겨나기도 하고…
그런 모든게 목표론적으로는 ‘게임’을 만들고 싶어서였지만, 본질적으로는, 굉장히 궁금했다. 대체 이 컴퓨터는 어떻게 동작하는건지. 사실 그렇지 않은가, C언어는 컴퓨터의 동작에 본질적으로 꽤나 깊숙히 접근한다. 문법만 익히는 과정에서야 별거 없지만 포인터의 개념이나 레지스터, 콜스택 등등은 프로그램 자체가 어떻게 동작하는지에 대한 본질을 이해하는 과정이고, 그걸 리버싱까지 해보면 어떻게 컴파일이 되며 어셈블리로 쪼개어지는지까지 알게 되니, 굉장히 본질적이다.
요즘은 웹 관련된 공부 및 일을 하고 있고, 이것도 이것 나름대로 응용 분야에 대한 지식이 깊어지고 있어서 좋다고 생각한다. 하지만 역시 본질적으로는 어셈블리 레벨까지 내려가는건데, 이러한 것들이 지난 컴퓨터 과학의 역사 속에서 어떻게 발전되고 어떻게 축적되어서 이 수준까지 온 건지를 들여다보는게 굉장히 중요하다고 생각하고, 그것을 알기 위해 지식의 짜릿함을 느끼는게 굉장히 바람직하다고 생각하는데, 난 그것을 해킹 이라고 생각한다. 이렇게 파고드는 것.
웹도 그렇고, 시스템 프로그래밍도 그렇고, 데이터베이스도 그렇고, 게임도 그렇고, … 모든 분야가 다 그렇다. 결국 다 어셈블리 레벨에서 동작하는건데, 어떻게 그것들이 조합이 되어 블록을 이루고, 그 블록들이 또 조합이 되어 새로운 응용이 되는, 그것들을 파고드는 것. 그리고 그것을 좋아하는 사람. 그게 해커라고 생각한다.
그런 점에서 나는 해커다. 아직은 미숙하지만, 실력이 뛰어나진 않지만, 그래도 해커다.