이상하게 한국 남자들은 사진을 찍을 때 잘 웃지 않는다. 그런 점에서는 기자 또한 마찬가지. 왠지 사진 찍으면서 웃으면 나답지 않은 사진이 나와 버릴 것만 같은 생각이 들어서 무의식 적으로 입을 다물게 된다. 분위기 있게 찍으려면 근엄한 표정을 지어야 할 것 같은 생각이 들기 때문이기도 하다. 하지만 막상 사진을 보면 근엄하게 찍어봐야 못생긴 얼굴 어디 안 간다. 차라리 웃으며 찍은 사진이 그나마 남들 보기에 기분이라도 좋다.

어쩌면 우리는 프로그래밍에 임할 때에도 너무 근엄하게 혹은 너무 진지하거나 책임감에 억눌려 있는 것은 아닐까? 마이루비닷넷(
http://myruby.net)이란 블로그를 운영하고 있는 강문식 씨는 특집 6부에서 그러한 개발자들의 문제점들을 해소하는 것이야말로 개발 고수로 가는 길이라고 제시해 주고 있다.

한 달이 멀다하고 쏟아져 나오는 새로운 기술들. 개발자는 정말 배우고 익혀야 할 기술들이 너무나 많다. 어찌 생각하면 이런 일들은 개발자들에게 부담으로 느껴진다. 짜증나고 지겨운 현업에 어렵고 복잡한 새 기술들을 더해야 하니 그럴 만도 하겠다. 하지만, 강문식 씨는 오히려 그것들을 즐기는 법을 터득한 고수다.

5년 전부터 운영해 오고 있는 그의 블로그가 바로 그 증거다.

그는 새로운 기술이 나올 때마다 그것들을 이용하여 작고 재미있는 애플리케이션을 만들어본다. 아주 작고 간단하게 만들 수 있는 애플리케이션들이기 때문에 만드는데 많은 시간과 노력을 들일 필요는 없다. 단지, 새 기술에 자신의 아이디어를 더하여 무언가 창조해 낸다는 것이 중요한 것이다. 이러는 과정에서 새 기술에 대해 이해하고 익히게 되는 것은 당연한 일. 하지만, 여기에 또 한 가지 그만의 비법을 더함으로서 재미삼아 만든 새 애플리케이션에 생명이 더해진다. 바로 블로그다. 자신이 만든 것들에 대한 정보와 소스코드를 몽땅 블로그에 공개하여 그것을 다른 사람들에게 전파하고, 자신이 미처 생각지 못했던 것들에 대한 피드백을 받으며 자신의 아이디어를 성장시켜 가는 것이다.

이렇게 성장한 아이디어는 강문식 씨 자신의 업무에 도움을 주기도 하고, 새로운 프로젝트에 적용되기도 한다. 새로운 기술이 나올 때마다 스트레스 없이 자신의 취미를 즐길 수 있고, 미리미리 습득해 둔 신기술은 누구보다 트렌드에 빠른 개발자로 그를 성장시키고 있다. 말로 내뱉기는 쉽지만 실천하기는 어려운 일이기에 지난 5년간 그가 블로그를 통해 또 커뮤니티를 통해 쌓아온 일들의 가치가 더욱 크게 느껴지는 것일 터다.
****************************************************************************

프로그래밍은 재미있다. 그 이유를 꼽자면 여러 가지가 있겠지만, 우리보다 훨씬 먼저 이에 대해 이야기한 사람이 있으니 그의 글을 인용해보자. 프레드 브룩스(Frederick P. Brooks, Jr)는 『The Mythical Man Month』에서 프로그래밍이 재미있는 이유를 다음과 같이 말했다.

무엇인가를 만드는 일, 즉 프로그래밍은 창조의 즐거움을 준다. 그리고 이렇게 만든 결과물이 다른 이에게도 유용한 것이 되므로 보람과 기쁨을 느낄 수 있다. 또한 정교한 퍼즐 문제를 풀기위해 몰입하고, 끝내 이를 풀어냈을 때 느낄 수 있는 희열도 있다.

이런 느낌은 독자들도 경험해봤을 것이다. 그리고 항상 무언가를 배우고 있다는 기쁨도 빼놓을 수 없다. 프로그래머의 일상은 단순 반복이 아니기 때문이다. 마지막으로 비교적 다루기 쉬운 수단을 가지고 일하는 즐거움이다.

대부분 공감할 수 있는 내용들이다. 프로그래밍은 본디 재미있는 일이다.

필자가 프로그래밍을 처음 접한 것은 초등학생 때였다. 학원을 더 오래 다닌 형들이 배우는 C 언어가 엄청 대단해 보이던 시절이었다. GW-Basic 화면에 PLAY 명령과 함께 EDCDEEE2DFEDC4처럼 알 수 없는 코드들을 입력하면 익숙한 음악이 연주되던 그 프로그램이 정말 신기하고 재미있었다. 그리고 LINE, CIRCLE 등의 명령으로 그려지는 그래픽은 아름답기까지 했다.

그 때부터였다. 프로그래밍 세계에 중독된 것이 말이다. 다들 그런 경험이 한번쯤 있을 것이다. 내 손으로 처음 만든 프로그램이 잘 돌아갈 때의 그 즐거웠던 경험은 잊을 수 없다. 독자 여러분도 이런 생각이 들지는 않는지 모르겠다. 지금 혹시 어떤 이유에서건 개발이 즐겁지 않다면, 그 때를 잠시 떠올려보면 어떨까? '그 때 참 재미있게 프로그래밍 했었지, 실력도 많이 늘었던 것 같아.'라고 말이다.

어떤 일을 하건 마찬가지겠지만, 특히나 프로그래머는 즐겁게 일해야 한다. 개인적인 소망은 모든 개발자들이 프로그래밍을 처음 접하던 그때의 즐거움을 계속 간직할 수 있으면 좋겠다.

코드는 프로그래머의 생각을 비춰주는 거울과도 같다. 즐겁게 행복하게 개발해야 더 나은 제품이 나온다. 지금부터는 즐거운 프로그래밍을 위해 필자가 종종 활용하는 방법을 몇 가지 소개해볼까 한다.

새로움 더하기
작년 초의 일이다. 스프링노트 서비스 개발을 시작한지도 꽤 되어서인지 이제 슬슬 개발에 익숙해지기도 하고, 또 일부 코드는 자신을 리팩토링 해달라며 나쁜 냄새를 조금씩 풍기기 시작했다. 당시 스프링노트 소스는 단위 테스트도 부족해서, 매번 불편함을 느끼고 있었다. 이 불편함이 쌓이면 안 될 것 같기도 했고, 개인적으로도 분위기 전환이 필요하다고 느꼈다.

그래서 현재 개발 중인 코드에 조금 새로운 시도를 해보기로 결정했다. 당시 많이 쓰이고 있던, 단위 테스트 라이브러리인 xUnit 대신, BDD 프레임워크인 RSpec(http://rspec.rubyforge.org/)을 활용해 기존 코드에 스펙을 붙이고, 또 새로 추가되는 기능은 BDD를 따르기 시작했다.

처음 해보는 RSpec 코딩은 무척 즐거웠다. 그리고 테스트 커버리지 툴인 rcov로 자주 테스트 커버리지를 측정하며 목표 수치(90%)에 조금씩 다가갔다. 지금 돌이켜서 생각해보니, 적절한 시점(프로젝트가 지겨워질 만한)에 새로움을 더해 업무 속도도 떨어뜨리지 않고, 개인적인 수련도 하고, 코드 품질도 올라가는 일석삼조의 효과를 거둔 것 같다.

자신만의 도전과제 만들기
필자는 항상 프로젝트를 시작할 때 그 프로젝트팀의 성공 외에도 개인적인 도전 과제(개발자로써)를 부여하는 편이다.

예를 들면, 윈도우 애플리케이션을 개발할 때에는, 당시에 익숙했던 MFC(Microsoft Foundation Class Library) 대신, 처음 사용해보는 WTL(Windows Template Library)을 도입해서 장단점을 확인해 보았다. 또 PHP를 이용해 개발하는 프로젝트에서 MVC 프레임워크를 직접 만들어 보기도하였다.

그렇게 함으로써 조금 더 프로젝트의 열정을 가질 수 있게 되었다. 현재는 스프링노트 프로젝트의 테스트 커버리지 수치를 100%로 계속 유지하며 개발해보는 실험을 재미있게 진행하고 있기도 하다.

이미 진행 중인 프로젝트가 있다면, 거기에 약간의 새로움을 가미해보길 바란다. 그렇다면 더 즐겁게 일할 수 있을 것이다. 물론 그 새로움이란, 자기계발과 프로젝트에 모두 도움이 되는 것으로 선택하는 것이 좋다. 그리고 작은 목표(기왕이면 측정 가능한 것)도 도움이 된다. 예를 들면 코드 품질을 나타낼 수 있는 몇 가지 방법(Code Metrics)을 적용할 수 있을 것이다.

작은 아이디어 구현하기
기존 프로젝트에서 새로움을 쉽게 찾지 못한다면, 가끔은 완전히 다른 프로젝트를 시도해 보는 것도 좋다. 그러기 위해서는 평소에 생각나는 아이디어, 한번쯤 만들어보고 싶은 프로그램을 위키 등에 정리해두는 것이 도움이 된다. 메모를 할 때는 간단한 아이디어 설명과 왜 만들어보고 싶은지, 만들면 얼마나 걸릴지를 대략적으로 적어두는 것이 좋다.

그러면 나중에 여유가 생겼을 때 이 페이지를 열고 아이디어 목록 중 하나를 골라서 만들어볼 수 있어서 좋다. 거창한 프로젝트보다는 작은 장난감 프로그램이나 프로토타입을 만드는 것이 적당하다. 예를 들어 <화면 1>은 필자가 최근에 적은 아이디어 메모다.

<화면 1> 아이디어 메모의 예



그리고 어느 날 집중력이 떨어지는 느낌이 들어 위키에서 이 아이디어를 꺼내서 직접 구현해봤다. <화면 2>는 이렇게 구현된 애플리케이션이다. 내가 직접 사용할 프로그램이라 스펙이 명확하고, 크기도 작아서 예상했던 대로 한 시간 안에 충분히 만들 수 있었다. 하지만 지금까지도 잘 사용하고 있는 유용한 프로그램이기도 하다. 물론 코코아 프레임워크를 이용해 처음 만들어본 프로그램(예제가 아니라)이라는 면에서도 새로웠다.

<화면 2> <화면 1>의 아이디어로 만든 애플리케이션



'작은 아이디어 구현하기'는 내가 평소에 해보고 싶었던 것을 직접 만들어보는 것이므로 즐겁다. 그리고 짧은 기간에 작은 성공을 통한 성취감도 맛볼 수 있다. 현재 업무에 지치고, 피곤해서 일이 손에 잡히지 않는다면 작은 아이디어 구현하기를 통해 새로운 에너지를 얻을 수 있다.

새 시대의 장난감, 오픈API
최근에 구현한 또 다른 아이디어는 슬러거(Slugger, http://myruby.net/pages/391476)라고 이름 붙인 블로깅 툴이다. 이 프로젝트가 재미있었던 점은 일반적인 웹 애플리케이션과 달리, 데이터베이스를 전혀 사용하지 않고 만든 순수 매시업 애플리케이션(Mashup Application)이라는 점이다.

슬러거에서 블로그 포스트와 환경 설정 등은 스프링노트에 저장하고, 각 포스트에 대한 사용자의 댓글은 미투데이에 저장했다. 그 결과 두 서비스의 장점을 모두 취할 수 있었다. 평소에 계속 글감을 만들어두었던 스프링노트의 글들이 바로 블로그 포스트로 노출되어 편하기도 하고, 이 글이 미투데이에서 유통되어 그 무섭다는 무플도 피할 수 있었다.

결과뿐만 아니라, 과정에서도 데이터베이스를 설치하고 호출하는 것보다 쉬운 방법으로 이미 잘 만들어진 OpenAPI를 사용해 개발에 필요한 시간을 단축할 수 있었다. 현재 필자의 블로그에서도 사용하고 있는 슬러거는 고작 100여 줄의 코드로 4시간 동안 만든 것이다.

매쉬업 애플리케이션이 좋은 이유는 소위 말하는 맨땅에 헤딩을 피할 수 있기 때문이다. 좋은 기능들을 웹 서비스 형태로 노출하는 웹사이트가 많으므로 이를 잘 선택해 활용하면, 만들 때도 재미있고, 꼭 만들어보고 싶은 가치에 집중할 수 있다. 물론 이 편이 더 만들기도 쉽다. 그리고 매쉬업을 만들면 기존 서비스를 사용하던 사용자가 함께 따라온다. 따라서 더 빠르고 많은 사용자들의 목소리를 들을 수도 있다.

이렇게 만든 애플리케이션을 오픈 소스로 커뮤니티에 공개하면 이 프로젝트는 더 큰 생명력을 얻게 된다. 그리고 여러 면에서 내게 도움이 되는 피드백을 받을 수도 있다. 슬러거의 경우, 직접 설치 매뉴얼을 만들어주신 분도 있었고, 필자의 소스에서 레일스의 새로운 면을 배울 수 있어서 좋았다는 분도 있었다. 이처럼 여러 사람들에게 관심을 받을 수 있는 것도 개발자의 즐거움 중 하나다.

즐거운 언어, 루비
필자와 친하게 지나는 한 선배가 프로그래밍을 잘하려면 매년 새로운 언어를 하나씩 배우라고 조언을 해준 적이 있다. 이 말은 여러 언어를 통해 다양한 관점을 가지라는 의미일 것이다. 필자가 최근 주로 사용하고, 좋아하는 언어는 루비(Ruby)다. 루비를 통해 개발의 재미를 많이 느꼈는데, 그래서 이 글에서도 잠깐 소개해볼까 한다.

루비가 가진 모토는 '프로그래머의 단짝 친구'고, 개발자인 마츠는 루비를 기계가 아닌 프로그래머 자신을 위해 만들었다고 말한다. 이 말은 문법이 친근하다는 의미이기도 하지만, 필자는 개발자를 키우는 언어라는 의미로 받아들인다. 루비는 말랑말랑한 문법 때문에 표현력이 뛰어나다.

그래서 한 가지 로직을 가지고도 정말 다양한 방식으로 표현 가능하다. 그리고 코드 가독성이나 미적인 면(Code Beauty)을 중시하는 커뮤니티의 분위기 덕분에 항상 내가 작성한 코드보다 더 나은 코드를 찾아볼 수 있다. 그래서 개발자에게 지속적인 자극을 주고, 여기서 힌트를 얻은 개발자는 더 나은 코드를 작성할 수 있게 된다. 이것이 개발자를 키우는 언어라는 표현의 의미다.

그리고 특별히 더 즐거운 이유는 커뮤니티의 생동감 넘치는 분위기 때문이기도 하다.

최근 커뮤니티에서는 루비 2.0과 레일스 2.0이 활발하게 개발되고 있고, 이에 대한 열띤 토의도 오가고 있다. 말하자면 루비 커뮤니티는 건강하다. 이런 커뮤니티를 지켜보고 그 일원이 되는 것도 즐거운 경험이다.

나는 프로그래머라서 행복하고 즐겁다. 그리고 내 동료 프로그래머들도 모두 즐거웠으면 좋겠다. 즐겁기만도 부족한 시간들이다. 마지막으로 한 말씀 드리자면

"현재를 즐기세요. 그러면 어느새 수퍼 개발자가 되어 있을 거예요!" @

스프링노트 OpenAPI  

스프링노트(http://www.springnote.com/)는 위키 기반 인터넷 노트 서비스다. 이 서비스는 REST 방식의 OpenAPI를 제공하고 있어서, 개발자들이 다양하게 활용할 수 있다.

API를 활용하여 쉽게 페이지 리소스를 만들고 읽으며 쓰고, 지울 수 있다. 혹시 레일스 개발자라면 2.0에서 추가될 액티브 리소스의 장점을 스프링노트에서 체험해볼 수도 있다(SpringnoteResources라는 액티브리소스 Wrapper 라이브러리를 배포하고 있다). 자바나 PHP를 포함한 다양한 언어에 대한 바인딩이 있고, 없더라도 HTTP에 대한 이해만 있으면 어렵지 않게 API를 호출할 수 있다.

자세한 도움말은 http://dev.springnote.com/를 방문해보길 바란다. 스프링노트 OpenAPI를 활용한 매쉬업이 많이 나올 수 있기를 기대한다.



<화면 3> 스프링노트 개발자 페이지
 
 

 

출처:http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=5044&MAEULNO=28&no=38156&page=1

+ Recent posts