프로그래머의 길

<19년 살아본 보고서> 8. 살아가는 법에 대하여 - 15

by 문현호

'영재고'라고도 불리는 경기과학고등학교에서 2학년이 된 저는 삶의 목적을 잃어버리고 우울에 빠졌습니다. 우울에서 헤어나온 뒤에는 삶의 목적을 찾아야 했습니다. 8장 '살아가는 법에 대하여'의 뒷부분에서는 제가 삶의 목적, 행복을 이해하고 지키는 방법을 찾는 이야기를 다룹니다.


프로그래머, 코더의 길

저는 이전에 주전공으로 생명과학을 골랐고, 부전공으로 정보과학, 즉 코딩을 골랐습니다. 그리고 의외로 2학년 1년 간 제 코딩 실력은 급속도로 성장했어요. 수업에서 많은 것을 배운 덕분이기도 했고, 주어진 과제들을 해결하는 과정에서 수많은 시행착오를 겪은 덕분이기도 했습니다. 특히 대부분의 수업들은 학기가 끝날 때 완성된 프로그램을 하나씩 제출해야 했어요. 저는 매번 커다란 목표를 잡고 수많은 시행착오를 겪으며 성장했습니다.

예를 들자면 2학년 1학기 때 만들어 본 음악 플레이어가 있습니다. 곡 각각에 체크박스를 두고 플레이리스트를 쉽게 만들 수 있게 한, 윈도우 컴퓨터에서 돌아가는 Java 및 JavaFX 기반의 프로그램이었어요. 그리고 제가 처음으로 만든 ‘사용할 수 있는’ 프로그램이었습니다. 조금 복잡한 프로그래밍 언어를 붙잡고 몇 날 며칠을 잔뜩 써서 제가 쓸 수 있는 프로그램을 만들어내니, 그 성취감이 엄청나더군요.

2학년 2학기에는 아예 안드로이드 앱을 하나 만들었습니다. 유료화되는 기존의 노트 앱을 대체하기 위한 앱이었어요. 그들의 기능을 완전히 대체하기 위해 저는 직관적인 텍스트 에디터, 온라인/오프라인 동기화, 보안 문제를 위한 다중 암호화와 동시에 노트 공유, 그리고 버전 관리까지 구현했습니다. 규모가 큰 만큼 2주 밤낮을 전부 쏟아부어서야 겨우 완성할 수 있었고, 플레이스토어에 직접 올려서 다른 친구들이 문제 없이 사용하는 것을 볼 때 정말 엄청난 성취감을 느꼈어요. 이후에는 실제로 제 아이디어를 그 앱에 정리하곤 했습니다.

수업뿐만이 아니었습니다. 2학년 여름방학에는 학교에서 친구 한 명의 주도로 ‘웹 개발’에 관한 스터디가 열렸습니다. 저는 그 스터디에서 웹 서비스의 서버를 구현하는 방법을 배웠어요. 리눅스 커널을 다루는 법부터 Apache 서버, HTTP의 구조, 그리고 SQL과 PHP 언어도 배우고 써먹어보았습니다.

3학년 여름방학에는 인공지능을 직접 만들어보고자 했습니다. 다른 사람이 만들어낸 패키지를 불러오지 않고, 아예 직접 C언어만으로 딥러닝과 경사 하강법을 이용한 인공지능을 구현하려 했어요. 그리고 저는 MNIST 데이터셋의 숫자 손글씨 데이터를 해석하는 인공지능을 일주일만에 만들어내는 데에 성공했습니다. 일주일 후에는 99% 정확도를 달성했고요. 그렇게 인공지능의 기본 구조를 완전히 이해하는 성과를 냈고, 상당한 성취감을 느꼈습니다.

그 외에도 저는 블록체인의 구조를 알아보기도 했고, 직접 저만의 계좌에 비트코인을 소량 구매해보기도 했습니다. 웹 서비스를 계속 돌리기 위한 작은 리눅스 서버를 구글에서 구매해보기도 했고, 인터넷 주소가 되는 도메인을 사보기도 했죠. 결과가 앞의 프로젝트들처럼 거대하지는 않았지만, 제 호기심과 흥미를 키우는 데에는 충분한 도전이었어요. 그런 과정에서 저는 정보과학, 프로그래밍에 대한 지식과 경험을 더 많이 쌓을 수 있었습니다.

8-3.png 코딩을 정말 많이 했습니다

코딩은 저에게 새로운 퀵 윈 과제였습니다. 저는 코딩이 아주 즐거웠어요. 일단 하나의 커다란 프로젝트가 있어도 ‘기능 구현’ 단위로 쪼개어 생각할 수 있고, 쪼개진 하나하나의 일이 충분히 매력적인 덕분에 일이 쉽게 손에 잡혔습니다. 특히 하나하나의 문제를 해결할 때마다 느껴지는 쾌감 때문에, 일을 하면서도 힘든 느낌이 들지 않을 정도로 푹 빠져있을 수 있었죠.

2학년 2학기 안드로이드 앱 개발을 하는 동안에는, 하루 15시간 정도를 코딩에 투자하며 2주를 보냈습니다. 거의 밤을 샜고, 그냥 많이 피곤할 때만 조금 잤어요. 어떤 일에 이렇게까지 노력해본 적이 없을 정도였습니다. 게다가 완성된 프로그램도 제가 원하는 충분한 기능을 가지면서도 오류 없이 완벽하게 작동했어요. 수업의 성취 기준은 이미 한참 뛰어넘은 상태였죠. 그때의 성취감은 아직도 기억에 많이 남습니다.

제 이야기는 코딩 실력이 상당히 빨리 늘어난 경우일 겁니다. 아마 기초적인 프로그래밍을 학교에서 잘 배웠고, 그 뒤로는 수업보다도 일단 ‘개발 프로젝트’를 하나 맡아서 어떻게든 구현하는 방식으로 코딩의 실력을 늘렸기 때문인 것 같아요. 영어를 잘 쓰기 위해 단어를 외우는 것보다 직접 외국인을 만나는 느낌인 거죠. 특히 프로젝트는 작은 기능 구현 단위로도 단기적인 성취감을 느낄 수 있고, 전체가 완성될 때도 커다란 성취감을 주기 때문에 게임과 비슷한 중독성을 가지는 것 같습니다.
코딩을 싫어하시는 분들도 많습니다. 대표적인 이유는 뭔가 실수해서 에러가 떴을 때, 그 에러를 해결하는 것이 너무 힘들기 때문일 거에요. 그건 누구나 어려워하는 일입니다. 하지만 그 에러 메시지를 그대로 검색창에 넣고 검색한다면, 나와 똑같은 실수를 한 사람이 수천 명씩 있다는 것을 알 수 있어요. 간단한 건 국내 블로그 자료도 있고, 보통 영어권 자료들이 큰 도움이 될 겁니다. 그리고 제가 그런 것처럼 수업이 아닌 프로젝트를 맡아서 진행하다 보면 더 큰 성취감과 함께 빠른 성장이 가능하실 겁니다.


생각해보면 코딩은 영상 제작보다도 쉽게 수익을 만들 수 있습니다. 개발자들이 흔히 말하는 거대 프로그래밍 기업에서는 개발자들의 초봉이 6천, 그러니까 월 500만원이에요. 다른 회사들도 비슷한 수준의 개발자에게 보통 월 250 이상의 임금을 제공할 겁니다. 게다가 이직이 쉬운 분위기 덕분에 스스로가 성장만 한다면 임금을 어렵지 않게 올릴 수 있을 거고요.

프로그래머는 나쁘지 않은 수입원이 될 겁니다. 입사가 문제라면, 그 회사들이 저를 뽑고 싶도록 만들기만 하면 돼요. 개발자는 지금까지 해왔던 코딩 과제들이 곧 실력의 증명이니, 포트폴리오만 잘 만들어두면 됩니다. 특히 코딩에 관해서는 ‘깃허브(GitHub)’라는 좋은 플랫폼이 있어서, 개인적으로 만들었던 모든 코드들을 업로드한다면 그것이 제 경쟁력이 될 수 있어요. 포트폴리오가 화려하다면 회사에서도 제 가치가 올라가겠죠. 이후에도 이렇게 기술을 쌓아가다 보면 제 생산성은 계속해서 증가할 겁니다.

면접 전에 진행되는 코딩테스트는 어떻게 할까요? 그래서 저는 대기업의 코딩테스트를 알아본 적이 있습니다. 경기과학고에서 실제로 다양한 알고리즘을 배운 덕분인지, 의외로 엄청 어렵지는 않았어요. 조금만 더 준비한다면, 코딩 기업에 들어가는 것까지는 큰 문제가 없을 것 같았습니다. 나중에는 사이드 프로젝트를 할 수도 있고, 제가 직접 서비스를 만들어 수익을 얻을 수도 있을 거에요. 게다가 그 과정은 모두 굉장히 즐거워보였습니다.

제 수입원에 대한 걱정은 이렇게 끝났습니다. 지금까지 쌓아온 기술과 앞으로의 방향성을 생각해보면, 저는 돈을 충분히 벌 수 있는 사람이에요. 월 250만 원의 최소한의 수입원은 큰 어려움 없이 달성할 수 있을 것 같았습니다.


<19년 살아본 보고서: 영재고에서 찾은 서울대 너머> 출간 소식 받기

https://page.stibee.com/subscriptions/446278

작가의 이전글시급에 성장을 가정한다면