최근 개발자를 그만두려는 생각이 들면서 함께 고민한 것이 있다면, 어떤 사람이 개발자를 하면 더 직업적으로 나은 성취와 만족감을 얻을 수 있을까였다. 그리고 거기에 나라는 사람은 포함될 수 있을까에 대한 고민까지 더해서. 여러 사람들을 보다 보면, 개발자를 하기 어려울 것 같은 사람과 개발자를 하면 좋을 것 같은 사람이 어느 정도 눈에 보이게 된다. 만약 개발자라는 길에 대해 고민하고 있거나 단순 취미가 아닌 정말 직업적으로 개발자에 대해 고민하고 있다면 이 글이 어느 정도 도움이 될 것이다.
기술 자체에 대해 흥미가 있는가?
개발자는 무언가를 만들어내는 사람이기도 하지만, 기술 자체에 흥미가 없다면 앞으로 나아가기 어렵다. 물론 무언가 다른 목적을 이루기 위해 개발이 그저 도구로써 위치해야 한다면 기술을 배우고 연구하는 과정이 어느 정도는 즐거울 수도 있다. 개발은 기본적으로 공부와 연구가 어느 정도 병행되어야 하기 때문에 실무적인 부분 이외에도 익힐 필요가 있는 기술들이 있으므로 기술에 대해 흥미가 없고 연구와 공부를 할 준비가 안 되어 있다면 쉽지 않다.
새로운 기술이나 이론이 나오면 관심 있게 들여다볼 필요가 있으며 자신이 구사하는 프로그래밍 언어에 대해서는 RFC(Request for Comments) 또는 패치노트 등을 살펴볼 필요성이 있는데 이는 기본적인 것이고, 실은 그것보다도 더욱 변태 같은 짓을 하는 친구도 과거에 경험했었다.
고등학교에 다닐 때, 개발에 관심이 있고 진심으로 좋아하는 친구를 옆에서 살펴본 적이 있는데, 영어로 된 기술 논문을 들여다보고 있었다. 대학생/대학원생도 아닌 고등학생이 그러고 있다는 사실에 그 때의 나로서는 전혀 이해할 수 없었고, 논문을 이해할 수 있느냐 물으니, 사실 반도 이해하지는 못하겠으나 논문을 보는데 다소 오래 걸릴지라도 이러한 기술과 세계가 있다는 것에 흥미를 느끼고 있다고 이야기했다.
이후 그 친구는 실제로 소논문을 작성하여 학회에 내기도 하는 모습을 보이기도 하였다. 지금 와서 생각하면 그런 친구야 말로 개발자를 하면 좋을 것 같다는 생각이 든다. 단순히 돈을 위해서 하는 것도 아니며, 말 그대로 기술 그 자체에 흥미를, 목적을 가지고 있는 사람이야 말로 개발자로서 발전할 가능성은 무궁무진할 것이라고 생각한다.
현실세계에 존재하는 문제를 해결하고 해결책을 제시하는 것이 재미있는가?
많은 사람들이 알고리즘이 어쩌고 이야기하는데, 알고리즘이라는 것이 바로 개발의 세계에서 어떤 주어진 문제를 해결하기 위한 과정을 이야기하는 것이다. 개발자는 문제를 해결하는 직업이다. 현실에서 나타나는 기술적으로 해결할 수 있는 것들에 대해 소프트웨어, 하드웨어를 사용하여 고민하고 해결책을 제시하여 사용자에게 선보이는 것이다.
이러한 과정은 단순 코딩을 이야기하는 것이 아니라, 사용자의 관점에서 소프트웨어를 이해하고, 재사용성과 유지보수를 고려하여 프로그램을 설계하는 것도 포함될 수 있는 것이다. 개발자는 코딩만 하는 사람이 아니라 프로그램 전반에 걸쳐서 영향을 미칠 수 있는 사람이므로 이러한 과정에 대해 이해하는 것도 중요하다고 볼 수 있다.
모든 것은 문제를 해결하기 위한 것이다. 주어진 문제를 해결하기 위해 어떤 과정을 거쳐 어떤 결과를 도출해야 하고 그것을 사용하여 또 다른 결과를 도출하여 프로그램을 작성하는 것이 일반적으로 개발자가 하는 일이다. 그것은 고차원의 관점에서 보아도 그러하고 코딩의 영역에서 생각해도 마찬가지다. 이는 수학 문제를 푸는 과정과 대체로 비슷하다. 문제 해결을 위해 어떤 개념을 사용해서 풀어야 할지를 알고 주어진 문제에 적용시키는 과정처럼 말이다.
위에서 이야기한 과정에 대해 재미, 흥미를 느낀다면 개발자를 하는 것이 좋다고 생각한다. 난 지금도 실제로 알고리즘 문제를 푸는 것에 전혀 재미를 느끼지 않는다. 물론 문제를 푸는 동안에는 집중해서 하게 되는 것 또한 사실이나 재미는 없다. 그 이유는 내가 학교에 다닐 때 수학을 싫어했던 이유와 똑같다. 최근에 다시 수학의 필요성이 느껴져 수학을 시작했으나 여전히 재미없는 건 마찬가지.
하고 싶은 개발 분야, 그 이유는 무엇인가?
내가 개발자를 그만두려고 고민하는 이유와 일맥상통하는 질문이다. 개발의 목적이 불분명하면 기술적으로 방황할 수밖에 없다. 목적이라는 것은 '돈을 벌기 위해'라든가 'AI가 뜬다니까' 정도의 목적을 이야기하는 것이 아니다. 최근에 본 기사 중, 블록체인을 사용하여 서버리스 환경의 게임을 만들 수 있는 엔진이 나왔다는 이야기를 들었는데, 그의 인터뷰를 보면 다음과 같은 이야기가 나온다.
어릴 적, 서버가 종료되더라도 계속 동작할 수 있는 게임이 있으면 좋겠다는 생각이 들어서 마음 속에 품고만 있었는데, 블록체인 기술에 가능성을 느껴 블록체인을 사용하여 서버리스 게임이 가능하다는 것을 보여주고 싶었습니다.
목적이 분명하고 확고하다. 먼저, 자신이 만들고 싶은 세계에 대한 정의가 내려져 있는데, 그것은 '서버리스 게임 환경'이며 기술적으로는 '블록체인'을 사용하여 구현이 가능하다는 것에 대한 도전의식이 분명하게 드러나있다는 점이다. 그리고는 결과적으로 대기업을 퇴사하고 자신만의 기업을 창업, 블록체인 업계에서 이름이 알려져 블록체인 오픈소스 게임엔진으로 탄생했다.
이러한 목적은 페이스북을 만든 마크 주커버그에게서도 찾을 수 있다. 그는 2017년 하버드 졸업연설에서 '목적'에 대해 언급하면서 페이스북을 만들면서 생각했던 것에 대해 다음과 같이 언급한다.
사람들은 연결되고 싶어하고, 모든 사람을 연결시키겠다는 이 아이디어는 너무나도 명확합니다.
마크 주커버그가 그리는 세계는 모든 사람들이 연결되어 있는 세계, 그리고 그는 인터넷이라는 기술 생태계를 사용하여 그 세계를 구현했다. 여기까지만 나오더라도 '그럼 그 인터넷을 어떻게 활용해서 사람들을 연결시킬까?'로 생각이 발전하면서 조금씩 체인을 생성하게 되고 연결이 나타나게 되며 아이디어는 분명해진다.
개발자로서 이름을 알린 개발자들은 각자 목적의식이 확고하다. 자신이 그리는 세계가 분명하게 존재하고, 그것을 어떤 기술을 써서 구현하면 좋을지, 그리고 그것을 만듬으로 인해 바뀔 세계에 대한 영향에 대해서까지 어느 정도 예상하고 있는 것이다. 목적이 없다면 내가 왜 개발을 하고 있는지 회의감을 느끼고 순간, 뭐지? 싶을 때가 있다. 지금의 내가 그러한 상황이기는 하다.
개발자를 직업으로 정하기 전에, 먼저 어떤 기술을 통해 무엇을 하고 싶고 그것이 나타남으로 인해서 자기가 그리고 있는 세계에 근접할 수 있는지를 고민해보면 좋을 것 같다. 적어도 이 부분만큼은 지금 당장의 코딩 공부보다 중요한 것이라고 과감하게 이야기할 수 있다.
더 읽을거리
프로그래밍 언어를 선택하고 공부하기 위한 팁, ― 개발자가 되고 싶은 당신에게