프로그래밍은 언제 어떻게 시작하셨나요. 2000년에 시작했습니다. 당시 제 또래에서 홈페이지 만드는 게 유행이었습니다. 홈페이지에 게시판을 달고 싶어 자료를 찾아 보니 Perl이나 PHP를 쓰면 게시판을 만들 수 있다는 걸 알고 무작정 책을 사 PHP 프로그래밍 공부를 시작했습니다.
2006년 제2회 대안언어축제에 학교(선린인터넷고등학교) 친구들과 함께 참가하셨죠. 특성화 고등학교에 진학하기로 한 계기는 무엇이었나요. 인문계는 저와 맞지 않다고 생각했습니다. 대안학교에 갈지, 유학을 떠날지 고민하다 선린인터넷고등학교를 알게 되어 지원을 결정하고 특별전형으로 들어가게 됐습니다.
학교는 자신에게 어떤 곳이었나요. 인문계에 갔으면 하지 못했을 경험을 한 것 같습니다. 비슷한 친구들을 만나 게임 제작 동아리 활동을 하고 3년 동안 관심 있는 주제로 여러 프로젝트를 했습니다. 2학년 때가 가장 기억에 남는데, 동아리에서 여름 방학 전까지 간단한 게임 하나를 만들어 보기로 하고 완성 후 동아리원들끼리 시연을 하며 자화자찬(?) 했던 적이 있습니다.(웃음) 그 때 느낀 성취감이 가장 컸습니다. 물론 그 전에도 성취감을 느낀 적이 있지만 그 전과 다른 점은 처음으로 다 함께 협력해 뭔가를 이루어냈다는 것이었습니다. 개인적으로 많이 성장한 시기이기도 했습니다.
회사에서는 현재 어떤 일을 하시나요. 인터넷 리서치•통계 회사에서 보충역 산업기능요원으로 근무 중입니다. 주로 웹 개발과 데이터베이스 관련 일을 하고 있습니다.
졸업 후 바로 직장에 들어갔으니 사회 경험을 일찍 시작한 편인데 그동안 혼자 공부하던 것과 현장 업무의 차이를 느끼시나요. 당연한 것인데 학교 다닐 때처럼 좋아하는 프로젝트를 좋아하는 방식으로만 할 수 없음을 깨닫습니다. 또 저 혼자 하거나 저와 잘 맞는 친구들과 함께 하는 프로젝트와 달리 회사에서 하는 프로젝트는 학습 수준이나 의욕, 동기가 사람마다 차이가 있어 새로운 것을 함께 공부한다거나 시도하기가 쉽지 않은 것 같습니다.
소프트웨어 개발에 관련되어 관심을 두고 있는 주제가 다양하던데 그것들을 어떤 식으로 엮어내시나요. 어떤 관심사가 생기면 기존 관심사와 섞어 보려 하는 편입니다. 예를 들어 데이터베이스에 관심이 많아지면서 SQL에 흥미를 느껴 범용 프로그래밍 언어에서 SQL의 특징을 어떻게 가져올 수 있을지에 대해 생각해 보기도 했고, 학교에서 게임을 만들던 시절에는 RPG 캐릭터의 비동기 상태를 스크립팅하기 위해 다양한 스크립트 언어를 공부하기도 했는데 그런 것들이 결국에는 어떤 문제를 만났을 때 그 문제를 프로그래밍 언어로 어떻게 표현할 것인지에 대한 고민입니다. 코드를 볼 때도 의도를 얼마나 잘 표현하고 있는지를 보고요. 그때그때 생기는 여러 관심들을 가장 큰 관심사인 프로그래밍 언어 관점으로 끌어다 놓고 보려는 편입니다.
‘야간개발팀’은 어떤 프로젝트인가요. 처음 구상은 동아리 선배가 냈고 제가 위키 같은 아이디어를 더해 시작한 프로젝트입니다. 이름 그대로 퇴근 후 저녁에 만나 카페나 팀원들 자취방에서 개발하는 팀입니다. 취미와 일이 다를지도 모르지만 일치하게 만들 수 있다고 생각하고 참여하고 있습니다. 현재 고등학교 선후배 네 명이 모여 블라(VLAAH)라는 서비스를 개발하고 있습니다. 요즘 제게 개인적으로 가장 의미 있는 일입니다.
블라의 주제인 취향 공유라는 아이디어는 어디에서 나왔나요. 서로 이야기를 나누다 나온 생각입니다. 처음에는 통계적 의미에서 어떤 것을 사람들이 얼마나 좋아하고 싫어하는지에 대한 간단한 지표가 있으면 좋겠다고 생각했습니다. 나중에 사람들이 모이면서 이름 없는 사람들의 기호를 보는 것보다는 평소에 관심 있던 사람의 취향이나 표현을 보고 동시에 자신의 취향을 표현하는 것이 더 재미있고 의미가 있을 거라 생각했습니다. 그러면서 기능이 늘고 복잡도가 높아지기는 했지만 서비스 취지를 살리기 위해 필요하다고 생각했습니다. 개발을 하다 보면 처음 기획이 바뀔 수도 있다는 점을 배우고 많은 경험을 하고 있는 프로젝트입니다.
야간개발팀의 주당 개발 시간은 얼마나 되나요. 일정하지는 않습니다. 나머지 세 명이 대학을 다니고 있어 시험 기간에는 보기 어렵고 저도 회사 프로젝트 마감에 쫓기면 만나지 못할 때도 있습니다. 꼭 일 때문에 모이지 않아도 같이 저녁을 먹거나 영화를 보고 나서 이야기를 나누다 자연스럽게 회의로 이어지거나 노트북이 있으면 카페 같은 곳에서 바로 작업을 하기도 합니다. 반면 일을 하려고 모였는데 잘 되지 않을 때도 있고요.
퇴근 후면 피곤할 텐데 꾸준히 할 수 있는 동력은 무엇인가요. 재미가 있어서입니다. 모임과 프로젝트를 소중하게 생각하는데 만약 재미가 없어진다면 재미가 없어지는 이유를 빨리 찾는 게 중요하다고 생각합니다. 야간개발팀은 주기적으로 회고를 하면서 재미가 없어지는 이유에 대해 생각해 보고 이유를 찾아 대응하려 합니다. 사실 재미가 떨어졌는데 서로 미안해 이야기를 꺼내지 못했던 적도 있었습니다. 서로 거짓말을 한 셈이라 각자 자기만 빼고 다들 재미있다고 생각하기도 했습니다. 그러다 누군가 재미가 없어졌다고 솔직하게 털어 놓고 나서야 다같이 재미가 없는 상태임을 알게 됐습니다. 그 때 배운 것은 문제가 있거나 일이 잘 안 된다 싶을 때는 그걸 미안해 하는 게 아니라 더 잘못되기 전에 말을 하고 그걸 고치기 위해 서로 도울 수 있다는 점이었습니다.
개인 프로젝트인 Phunctional(functional programming in PHP)에서 얻은 것은 무엇인가요. ‘워드 커닝햄은 자기의 수족을 마음대로 놀릴 수 없는 불편한 언어에서 프로그래밍을 하는 경우 점차적으로 자신을 도와주는 환경을 만들어 나간다’는 글을 읽은 적이 있는데 상당히 와 닿았습니다. 제가 하고 싶었던 것이기도 했고요. 저 역시 PHP가 마음에 들지는 않지만 제가 하는 일이 대부분 PHP로 하는 것입니다. 다른 언어의 좋은 개념을 PHP에서도 쓰고 싶어 고민을 하다 PHP에서 지원하지는 않지만 PHP로 써보고 싶은 코드가 떠올랐고 그걸 실제로 실행되게끔 만들어본 프레임워크가 Phunctional입니다. 물론 좋은 개념이 있는 그 언어를 직접 써서 프로젝트를 하면 가장 좋겠지만 현실에서는 쉽지 않으니까요. 특히 상대적으로 표현력이 낮고 메타프로그래밍이 힘든 PHP로 람다 등을 구현해서 제게 더 의미가 있습니다.
프로그래밍 언어에 관심 있는 개발자를 위한 LangDev라는 독특한 커뮤니티를 여셨죠. 꾸준히 활동하는 회원들도 나타났고요. 그만큼 기반 기술에 대한 관심이 높아진 것일까요. 다르게 생각해 볼 수도 있습니다. 프로그래밍 언어에 관심 있는 사람들은 예전부터 있었는데 다만 다들 ‘나만 관심 있는 거겠지’하고 생각한 것 같습니다. 저도 그랬고요. LangDev를 만들 수 있게 된 건 IRC에서 프로그래밍 언어에 대해 이야기하면 관심을 보이는 사람들이 꽤 많은데 왜 프로그래밍 언어를 다루는 커뮤니티는 없을까 하는 생각이 들어서였습니다. 만들면 잘 될 것 같아 그 생각을 한 날 바로 간단한 게시판을 설치해 만들었을 뿐인데 당일에 열 명 넘게 가입했습니다.
참여하는 분들에게는 공통적인 성향 같은 것이 있나요. 자신의 사고를 프로그래밍 언어로 손실 없이 표현하고 싶어하고 어느 언어에도 만족하지 못하거나 이미 좋은 언어가 많이 있지만 ‘여전히 불편하다’는 불만(?)을 가지는 것 같은 공통점이 있습니다. 기존 객체지향 같은 좋은 개념이 있는데도 어찌 보면 비직관적이고 낯설고 어려운 걸 익히려는 건 더 나은 해결 방법을 찾으려는 욕구가 강하기 때문인 것 같습니다.
메타포(Metaphor)라는 프로그래밍 언어를 구상하면서 '누군가 A4 용지 하나를 주고 스펙(specification)을 적어달라고 할 때, 그 자리에서 순식간에 명세 모두를 적어줄 수 있는 언어를 완성'하고 싶다고 했는데 왜 A4 한 장이어야 하나요. A4 용지 한 장은 언어의 스펙을 적기에는 비좁습니다. 거기에 들어갈 수 있다면 굉장히 간결하고 규칙이 적은 언어인데 제가 원하는 언어의 모습이 그렇습니다. 첫 번째 이유는 아름다움 때문입니다. 물론 실용적인 이유도 있습니다. 당시에 학교에서 C를 가르쳤는데 70~80%의 학생들이 프로그래밍은 곧 C라 생각하고 C가 어려워 프로그래밍은 끔직하다는 선입견에 사로잡혔습니다. 그래서 저는 동아리에서 후배들을 가르칠 때 C를 가르치지 않고 쉽게 배울 수 있는 스크립트 언어를 가르쳤습니다. 그 때도 메서드 만드는 것은 가르치지 않고 해당 언어에 기본으로 들어 있는 표준 라이브러리의 메서드를 활용하는 법부터 가르쳤습니다. 간단한 규칙과 해당 언어의 어휘(라이브러리)로 무엇을 할 수 있는지 배우는 것이 재미있어 보였고 후배들의 흥미가 유지되는 것 같았습니다. 그런 경험 때문에 프로그래밍 언어는 최대한 간단해야 한다고 생각하고 있습니다. 메타포를 구상하면서도 새로운 개념 도입을 고려할 때마다 따르려는 원칙이 있는데 바로 새 개념 덕에 얻는 이익과 이해하는 데 따르는 어려움을 비교해 어려움이 크면 새 개념을 도입하지 않는 것입니다.
앞으로 자신이 보완해야겠다고 생각하는 부분은 무엇인가요. 아직 대학에 가지 못해 정규 교과를 배우지 않아 기초 이론이 부족한 편입니다. 앞으로 나이가 많이 들어서도 제가 좋아하는 프로그래밍을 계속 하고 싶은데 그 방법을 제대로 모른다면 아쉬울 것 같습니다. 그래서 그런 기초가 굉장히 중요하다고 생각하고 평소에 알고리듬 같은 것들을 스스로 찾아 공부하려 합니다. 따분하고 어렵다고는 하지만 그 중요성이 사라지지는 않다고 생각하고 재미 있게 배울 방법이 있다고 봅니다. 중요하고 꼭 배워야 하는 것일수록 쉽게 가르치는 방법도 있어야 할 것 같고요.
국방의 의무를 마치고 나서 하고 싶은 일이 있다면… 앞서 말했지만 대학에 가서 전산학을 제대로 배우고 싶습니다. 야간개발팀에도 더 많은 시간을 쏟으면서 공부하고 싶은 걸 찾아 배우고 싶습니다. 산업기능요원 의무 기간이 끝나면 스물두 살이 되는데 제가 이루고 싶은 일을 위해 많은 걸 할 수 있을 것 같습니다. 보통 ‘젊을 때 돈 많이 벌어 늙어서 논다’고 하는데 시간이나 자기에 대한 가치를 그다지 부여하지 않은 말 같습니다. 젊을 때 해야만 더 재미 있고 의미 있는 일이 있다고 생각합니다. 그래서 돈 벌 궁리보다는 스스로 가치 있다고 생각하는 일을 찾는 데 매달리려 합니다.
[홍민희 소개] 선린인터넷고등학교를 졸업해 코리안클릭에서 산업기능요원으로 근무하고 있다. 한편으로는 야간개발팀 일원으로 블라(VLAAH)를 개발/운영하고 있고, LangDev와 한국 Io 사용자 모임을 꾸려가는 중이다.