문과생에서 개발자가 되기까지
나는 수학 시험이 싫었다. 문제를 푸는 것은 제법 재미있었지만 응용문제를 제한된 시간 안에 풀어야 한다는 그 압박감이 너무 싫었다. 그래서 문과를 선택했다. 문학이 좋기도 했다. 물론 빨리 정답을 찾아야 하는 것은 그리 문학스럽지 못했지만 그 정도는 눈치로 풀 수 있었다. 수학은 눈치로 되는 게 아니었다. 수학은 시간이 더 필요한 과목이었다. 결국 내가 문과를 선택한 것은 시험에서 유리해지기 위함이었다. 이유야 어찌 되었건 나는 문과를 선택했고 문과생으로 대학을 진학했다.
대학 1년을 마치고 군대를 갔다 왔다. 다들 그러하듯 냉정하게 현실을 바라보게 된 나는 내가 다니는 학교에선 원했던 공부를 할 수 없다는 생각이 들었다. 편입할 자신은 없었다. 전과가 자유로운 학교의 특성을 활용해야겠다고 생각했다. 전공 탐색을 위해 교양으로 들을 수 있는 타 전공과목을 듣기 시작했다. 그중 하나였던 'C 프로그래밍'이라는 수업을 들으며 컴퓨터 공학으로의 전과를 생각할 수 있었다. 아마 그때부터였던 거 같다. 프로그래밍은 문과스러운 점이 많다는 것을 깨달았던 순간이.
컴퓨터 언어를 배운다는 건 쉽지 않은 일이다. 많은 이유가 있겠지만 우선 어딘가 공대스럽다는 느낌 때문이다. 수학은 공대생, 문학은 인문대생의 전유물로 생각되는 것처럼 컴퓨터 언어 역시 공대생들의 전유물로 여겨지기에 뭔가 본래의 난이도 이상으로 어렵게 와닿는다. 나와 같은 문과생들에게는 더욱이 그렇다. 나 역시 두려웠다. 그래서 학원을 다녔다.
교양 수업을 듣기 전, 학원을 등록했다. 학원에서 이해할 수 있었던 것은 이틀째까지였다. 이후로는 무슨 소린지 전혀 알지 못했다. 따지고 보면 첫날은 설치만 했으니 하루 정도만 이해한 것이다. 직전 학기에 이미 학교에서 수업을 듣고 재이수를 위해 학원을 찾은 동기들과 수준 차이도 엄청났다. 그때 나는 내가 바보인 줄 알았다. 그냥 이런저런 단어들만 머리를 스쳐 지나갔다.
개강은 여지없이 찾아왔고 C 프로그래밍 수업도 시작되었다. 놀라운 점은 방학 때 들었던(스쳐 지나간 줄 알았던) 단어만으로 수업을 따라갈 수 있었다는 점이다. 예를 들면 '배열'이라는 단어가 이 수업에서 어떻게 쓰일 것인지 예상하고 있는 것만으로 수업은 아주 흥미로워졌고 다른 친구들보다 수업에 빠르게 적응할 수 있었다. 수업을 이해하니 과제도 재미있었다. 과제를 푼다고 10시간씩 코딩했다. 지금 보면 정말 아무것도 아닌 버스 요금 계산하는 어플리케이션을 며칠을 고민해서 만들었다. 내 코드가 정상적으로 동작하는 그 순간의 짜릿함을 맛봤다. 그때 코딩에 빠져들게 되었다.
이 과정에서 새로운 학문을 배우는 일은 그 학문에서 사용하는 단어를 이해하고 알아가는 것이며, 컴퓨터 언어를 배우는 것 역시 마찬가지라는 점을 깨닫게 되었다. 결국 컴퓨터 언어를 배워서 코드를 작성하는 프로그래밍이라는 것도 그에 필요한 언어들을 배우고 익혀가면 누구나 할 수 있다는 생각이 들었다.
프로그래밍이 문과스럽다고 표현한 것은 프로그래밍이 글쓰기와 유사하기 때문이다. 글쓰기를 먼저 살펴보자면 글쓰기는 글이라는 것을 작성(쓰기)하는 행위이다. 글이라는 것은 어떠한 목적을 가지며 소설과 같은 문학적인 글이 아닌 유형의 글(객관적 사실을 전달하는 글, 생각과 주장을 전달하는 글)의 경우는 글을 통해 전달하고자 하는 정보가 분명하다. 그러한 글을 쓰기 위해서는 논리가 필요하다. 한편 프로그래밍은 프로그램을 만드는 행위, 보다 구체적으로 말하면 프로그램을 정의하는 코드를 작성하는 행위이다. 코드 역시 어떠한 목적을 달성하기 위해 작성되며 논리가 필요하다. 결국 글쓰기와 프로그래밍은 어떤 목적을 이루기 위해 논리적으로 글 혹은 코드를 작성하는 행위라는 점에서 유사하다.
조건을 정의하는 구문인 조건문을 보면 이해된다. `if a > b: do_something()` 이렇게 생겼다. 해석해보면 '만약에 a가 b보다 크면, 무엇인가 해라'는 뜻이다. 프로그래밍을 하는 중에는 이와 유사한 조건문이 수시로 등장한다. 그리고 이러한 조건에 비교를 위해 사용되는 값이 변경되거나 새로 만들어지면서 프로그램이라는 것이 완성된다. 반복문도 있다. 어떠한 일을 반복적으로 처리하는 문장 구조인데 그 반복적인 일에도 논리가 존재한다. `while a > b: say_hello()` 조건문과 유사하지만 단어가 `if`에서 `while`로 바뀌었다. 의미도 그만큼 바뀐다. 'a가 b보다 큰 동안에, 인사를 해라'는 된다. 물론 `do_something`이 `say_hello`로 바뀌었지만 큰 맥락에서 바뀐 것은 '무엇을'이 아니라 '어떻게'가 바뀐 것이다. 어떤 행동을 논리적으로 어떻게 할 것인지 조건문, 반복문이 정의할 수 있다. 글쓰기와 비슷하다.
프로그래밍의 문과스러운 면모를 확인하자 개발자라는 직업을 진지하게 고민하게 되었다. 미래는 직장이 아니라 직업의 시대라는 생각을 가지고 있었기에 더욱 개발자라는 업(業)은 매력적으로 느껴졌다.
유일한 걸림돌은 내가 개발자가 될 수 있는가 하는 것이었다. 개발자 자체는 근사하고 좋은데 과연 문과 출신에 수포자인 내가 개발자가 될 수 있을까? 이러한 나의 고민에 용기를 준 것은 생활코딩의 운영자인 이고잉님이었다. 국문과 출신의 이고잉님이 일반인들에게 프로그래밍을 알려주고 있는 모습을 보고 나도 할 수 있다는 막연한 믿음이 생긴 것이다. 그 뒤로 생활코딩을 비롯한 온라인 강의를 찾아보며 공부를 시작했다. 학교에선 배우지 못한 웹 개발에 관한 것이었다.
운 좋게도 졸업한 선배의 특강을 들으러 갔다가 스타트업에 인턴으로 일할 수 있는 기회도 얻었다. 역삼에 있는 사무실에서 6개월 동안 일하면서 Angular와 Ionic Framework를 이용해 웹 앱을 개발했다. 고시텔 생활이었지만 내가 개발자로서 일할 수 있다는 사실에 감사해서 불편한지도 모르고 살았다. 10시에 출근해서 10시에 퇴근했다. 주말도 반납했다. 개발이 나의 유일한 놀이였으며 즐거움이었다. 그렇게 만든 서비스가 앱으로 출시되어 그렇다 할 성과를 내지 못하고 잊혔음에도 불구하고 스스로 뿌듯하고 감사했다. 6개월의 일을 마치고 학교로 돌아왔을 때는 자신감이 붙어있었다. 개발자로 일할 수 있다는 확신이 생겼다. 블로그를 정비하고 로켓펀치에 나의 경험을 정리해두었다.
그리 오래 지나지 않아서 취업 전선에 뛰어들었다. 친구들과 코딩 테스트를 준비하는 모임도 만들었고 나름대로 체계적으로 공부를 진행했다. 졸업을 앞둔 5월의 어느 날 메일을 한통 받았다. 로켓펀치를 통해 연락을 준 것이다. 몇 가지 이야기가 오갔고 당장 면접을 보기 위해 올라갔다. 이후 첫 회사가 된 마플코퍼레이션(마플)이었다. 마플은 내가 개발자로 시작할 환경을 만들어주었고 자바스크립트에 눈 뜰 수 있게 해 주었다. 한동안 연재하던 '오늘의 함수' 시리즈도 이 회사에서 배운 것들 덕분에 가능한 글이었다. 1년이 지났을 때 성장한 자신을 느낄 수 있었고 1주년 회고록도 적게 되었다. 그 후로 스스로를 개발자라고 부를 수 있었다.
이 글은 애초에 문과 출신에게 용기를 주기 위해 시작한 글이다. 프로그래밍이 문과생에게 오히려 이점이 있는 부분이 있다는 것을 이야기하고 싶었다. 논리적으로 글을 읽고 쓸 수 있는 능력이 있다면 코드를 작성할 수 있다. 오히려 창의적인 코드가 인문학적 소양을 갖춘 이들에게서 나올 수 있다. 정말 작은 용기가 있다면 할 수 있다. 어느 날 스스로를 개발자라고 부르게 될 날이 올 것이다. 오늘 포기하지 않는다면.
2017년 4월 14일