페이지

2013년 12월 10일 화요일

8비트 키즈. 우리는 운이 좋은 세대

얼마전에 출간된 "오픈소스 개발자 이야기"를 보면서 많은 공통점을 발견할 수 있었는데, 그 중 하나가 80년대에 8비트 컴퓨터에서 코딩을 시작한 부분이다. 나도 초등학교 때 5학년 때, 학교 컴퓨터반에서 금성 FC-100으로 베이직을 배웠는데, 당시에는 컴퓨터 학원도 인기가 많아서, 컴퓨터 학원에 다니는 아이들도 꽤 있었다.


당시 컴퓨터가 주는 가장 큰 매력은 컴퓨터를 켜면 바로 베이직 인터프리터 모드로 실행되는 부분이다. 지금 따지면, PC를 켜자마다, Python이 바로 실행된 모습과 같다고 할까?

베이직 프로그래밍은 마치 컴퓨터와 대화를 나누는 느낌이였다. 뭔가 명령을 내리면 컴퓨터는 계산도 하고 그림도 그리고 음악도 연주했다. 정말 대단한 물건이였다. 프로그래밍은 필수 코스였고 이미 중학교 때, 베이직에 어느 정도 익숙해져서 게임을 짤 수 있는 수준이였다. 그 당시 GOSUB 문을 이해하는 것이 어려웠던 것 같다.  일종의 함수 루틴으로서 순차적으로만 실행되는 베이직에서 특정 행번호가 실행되고 다시 돌아온다는 개념인데, 다른 사람이 짠 게임을 보고 이해할 수 있었다. 조기교육 덕분(?)에 나중에 혼자 C/C++도 공부할 수 있었다.

그 당시 8비트 세대 중 코딩 좀 했던 분들이 이제 30대 후반에서 40대 중반에 되어서 현재 한국 IT를 이끌어나가고 있는 것 같다. 90년 들어서 게임기가 유행하고 PC가 도입되면서 학생들에게 코딩은 아마도 생소한 것이 되었을 것이다. 게임기는 정말 게임만 할 수 있지, 거기서 뭔가를 생각하고 만들 수 있는 환경은 제공되지 않는다. PC도 기본적으로 개발 환경을 제공하지 않기 때문에 어린 청소년이 코딩을 하려면 누군가의 도움이 필요하다. 그리고 C/C++는 어린 나이에 처음 프로그래밍을 배우기에는 적당하지 않다. 물론, 웹브라우저만 있으면 자바스크립트로 프로그래밍이 가능하지만, 주로 DOM, BOM API를 이용해서 웹컨텐츠를 만드는 용도라서 프로그래밍을 자체를 배우기에는 적절하지 않다. 이러한 사정으로, 90년대 이후 부터는 자연스럽게 프로그래밍을 배울 기회가 차단된 것이다.

다행스럽게도 어린이에게 쉽게 프로그래밍을 가르치려고 하는 노력들이 있어왔고, 다양한 툴도 개발되었다. 하지만, 8비트 컴퓨터에서 제공되던 베이직 만큼 자유도는 떨어지는 것 같다.

프로그래밍에 대한 접근성을 보면, 기술 발전이 늘 반가운 것은 아니다. 좀 더 쉽게 컴퓨터 자체를 이해하고 프로그래밍을 배울 수 있는 기회가 예전에는 많았으나, 기술의 발전으로 이런 기회가 점점 줄어들고 있다. 어린 나이에 프로그래밍을 접할 수 있었고, 그런 추억을 갖고 있는 것이 8비트 세대만이 갖는 행운인 것 같다. 물론, 지금 세대에 8비트 시절과 똑같은 경험을 강요할 수는 없다. 그래도 뭔가 비슷한 경험을 이후 세대에게도 전해주고 싶다.

2013년 11월 24일 일요일

오픈소스 프로젝트에 참여하는 효과적인 방법


얼마전 아는 분의 소개로 아래와 같은 질문을 받았다.

"오픈소스에 공헌하기 위해, 새롭게 프로젝트를 만들어볼까 했는데, 이미 생각한 프로젝트는 거의 다 있는 것 같고, 기존 프로젝트에 참여하려고 하니, 참여할만한 프로젝트를 찾기가 너무 어려워요. 어떤 분야라도 좋으니, 꼭 구현해야 하는 기능이나, 고쳐해야할 버그, 바로 공부해서 기여할 수 있는 프로젝트 있는지 알고 싶습니다."

참 어려운 질문이다. 솔직히 이런 질문으로 나도 한적이 있다. WebKit Reviewer에게 시급하게 수정해야할 버그나 내가 할만이 일이 있으면 알려달라고 했지만, 대답을 받지 못했다. 아마도, 그 reviewer입장에서 쉽게 해결될 문제면 벌써 해결했을 것이고, 어려운 부분은 내가 해결하기 어렵기 때문에 딱히 알려주기 힘들었을 것이다. 사실, 오픈소스 프로젝트에 등록된 버그 또는 요구사항등을 살펴보면 대부분 딱히 해결방법이 잘 떠오르지 않거나, 많은 시간과 노력이 필요한 버그나 기능이 대부분이다. 한마디로 maintainer도 귀찮아하는 버그만 남아있다고 보면 된다. 정말 쉬운 버그가 있다면, 이미 다 해결되었을 것이다. 그러니 처음 시작하는 분들이 이런 버그를 해결해보겠다고 나서는 것이 상당히 무모한 일이다.

새로 프로젝트를 시작하는 것은 쉽지만, 의미있는 작업이 되기 위해서는 독창적인 프로젝트를 시작해야 하는데, 오픈소스도 이미 red ocean이라서, 이미 비슷한 프로젝트가 상당수 존재한다.

처음부터 새 프로젝트를 시작하는 것 보다, 기존 프로젝트에서 경험을 먼저 쌓는 것도 중요하 것 같다. 그렇다면, 어떻게 하면 나에게 잘맞고 오픈소스 프로젝트를 찾을 수 있을까? 여기서 두가지 중요한 관점 있다.  첫번째, "내가 잘할 수 있는 프로젝트" 두번째, "열정을 갖고 지속할 수 있는 프로젝트"이다.

첫번째, "내가 잘 할 수 있는 프로젝트"를 찾는 것은 쉬을 수 있다. 일단, 본인의 개발 경험이 중요하다. 오랫 동안 게임을 개발했다면, 게임과 관련해서 프로젝트를 찾는 것이 좋다. 임베디드 시스템에서 리눅스 커널 드라이버를 개발했다면 리눅스 커널 프로젝를 참여하면 좋다. 웹개발자라면 JQuery와 같은 JavaScript toolkit에 관심을 가지면 좋다. C++ 개발자라면 역시 C++로 쓰여진 프로젝트가 더 편할 것이고, 윈도 개발자라면, 특정 프로젝트의 윈도용 포트 부분을 공부하다면 더 빠르게 기여할 수 있을 것이다.

두번째, "열정을 가지고 지속할 수 있는 프로젝트"를 찾는 것은 조금 어렵다. 열정이 어디서 부터 시작하는지 각자 다르기 때문이다. 지적 호기심일 수도 있고, 회사 업무나 취업과도 연관성이 있을 수도 있고, 오픈소스 운동/철학에서 열정이 시작될 수도 있다.

예를 들어, Firefox같은 경우, Open Web이라는 철학적 기반이 있다. 웹은 절대 특정 회사나 단체의 소유가 될 수 없고, 누구나 참여해서 웹을 발전시켜 나가야 한다는 것이 주된 내용이다. 이런 생각으로 MS나 Google 틈속에서 Mozilla가 묵묵히 웹이 한쪽으로 치우치지 못하도록 조정자 역할을 하고 있고, 웹이 정체되지 않도록 늘 혁신을 준비하고 있다. 

이런 두가지 관점에서 프로젝트를 찾으면 좋겠다.

한가지 조언을 한다면 너무 성숙한 프로젝트에 참여를 시작하기 보다는 새로 시작하고 혁신적으로 프로젝트에 참여하면 더 좋을 것 같다. 유명한 리눅스 커널 해커인 Alan Cox는  인터뷰에서, 지금 Linux Kernel프로젝트에 참여하지 말라고 조언하고 있다. 너무 방대하고 유명해서, 어떤 문제가 생기면 이미 수 많은 사람들이 관심 갖기 때문이다. 그 대신, 3D Printing, HTML5, WebGL과 같은 새로운 프로젝트에 참여를 권유했다. 이들 프로젝트는 시작한지 얼마안되서 오픈되어 있고, 유연성이 있기 때문에, 누구나 새로운 시도를 할수 있고, 어떻게 될지 모르기 때문에, 일단 받아들이기가 쉽다. 이는 마치 Linux 초기 시절과 비슷하다고 언급했다. 

개인적으로 지금 오픈소스 참여를 시작한다면, Mozilla의 Rust나 Servo에 참여해보고 싶다. 이미 본궤도 올아와 있고, 웹브라우저 개발을 위해 언어 부터 새로 개발하니까, 뭔가 해야할 일이 많이 있을 것 같다. 

아, 생각보다 글이 길어졌다. 짧은 경험으로 이런 글을 쓰려고 하니, 글만 길어진 것 같다. 주제넘지만, 이런 고민을 하는 분들께 조금이나 도움이 되면 좋겠다. 특히 Alan Cox의 인터뷰는 많은 것을 생각하게 해준다. 역시 고수는 달라.

2013년 10월 25일 금요일

Flash를 웹기술로 렌더링?

Mozilla는 늘 새로움을 추구한다. 이제는 Shockwave/Flash(SWF) file을 HTLM/CSS/JavaScript로 렌더링하는 시도를 하고 있다. Plug-in 없는 세상을 만들겠다는 Mozilla의 노력이기도 하고 Adobe가 더 이상 Linux에서 NPAPI기반 Flash를 업데이트하지 않겠다는 발표 때문인 것 같다. 프로젝트 이름은 Shumway이며 이번에 lwn.net에 자세하게 소개되었다. JavaScript만으로도 게임 에뮬레이터가 나오고, 이미 PDF.js로 pdf출력도 가능하니, 기술적으로 불가능해보이지는 않는다.  Firefox mainline에 반영되었고 내년초에 Firefox에 포함되어 릴리스될 것 같다.

분명히 Canvas를 사용했을 것이고, 방대한 Flash spec과 ActionScripts는 어떻게 지원했을까? 여러가지 기술적으로 재밌는 부분이 많은 듯 보인다.