나빌레라의 프로그래밍하기 #2

나빌레라의 이미지

2. 관심
어떤 사람이 구글 본사에 방문해서 구글 엔지니어랑 이야기 하던 중 햇빛에 비춘 창틀 모양을 보고 구글 엔지니어가 창틀 모양의 패턴에 대해 언급하면서 프로그래밍의 패턴에 대해서 이야기 했더란 아주 오래된 글이 생각 났다. 누가 보면 참 오덕 스럽다고 말 할 수 있겠지만, 나는 그것이 관심이라고 생각한다.

돈을 벌기 위한 프로그래밍을 할 때는 사실 크게 관심가질 필요가 없다. 관심은 기획부서에서 가지면 되는 것이고, 우리는 기획부서에서 만든 기획서를 검토해서 실체화가 가능한 수준으로 요청서를 만들면 된다. 돈을 벌기 위한 프로그래밍을 할 때는 어떤 프로그램을 만들어야 하는지에 대한 관심보다는 어떻게 프로그램을 만들어야 하는지에 대한 관심이 더 필요하다.

하지만, 돈을 벌지 않아도 상관없는 개인 프로젝트를 위한 프로그래밍을 할 때는 어떤 프로그램을 만들어야 하는지에 대한 관심을 가져야 한다. 그러기 위해서는 일상 생활에서 지나치는 많은 일들을 그냥 지나가는 것이 아니라 내가 하고 싶어하는 일에 대해 연관지어 생각하는 관심이 필요하다.

인터넷 서핑을 하다가 "이거 재미있어 보이는 걸?" 하는 생각이 들어서 그걸 직접 만들어 보고 싶다는 생각을 하는 것 같은 사례가 관심의 좋은 사례이다. 이 때, 유념해야 할 사항이 있다.

[이미 있는것, 남들이 만들어 놓은 것이라도 상관하지 않는다.]

돈을 벌기 위한 프로그래밍이라면 남이 만들어 놓은 것, 이미 있는 것을 또 하는 것은 시간 낭비, 돈 낭비일 뿐만 아니라 최악의 경우 엄청난 소송 비용을 물어야 할 수도 있다. 하지만 돈을 벌지 않는 프로그래밍이라면 남들이 만들어 놓은 것이건 이미 있는 것이건 상관없다. 그것을 내가 만든다는 것이 중요하지 그것이 이미 있고 없고는 중요치 않다.

흔히들 "이러 이러한 것을 만들어 볼까?"라는 생각을 했다가 이내, "아.. 그건 이미 오픈 소스로 있지. 아.. 그건 이미 시장에 나와 있는 것이잖아."라고 생각하면서 아이디어 발상 단계부터 좌절하며 시작도 하지 못한다. 하지만, 무엇이 되었던 시작하는 것이 가장 중요하다. 시작을 쉽게 하기 위해서는 앞서 언급한대로 남이 만들어 놓은 것에 대한 부담을 스스로 털어버리는 것이 가장 중요하다.

아주 오래전 일이다. 학교때 활동하던 동아리 게시판에 아래 동영상이 올라왔었다.

http://www.youtube.com/watch?v=6uvQTTPr9Rw

당시에는 애플이나 맥북은 지금처럼 사람들에게 많이 퍼지기 전이고 맥을 쓰는 사람들은 일부 마니아 계층 뿐이었다. 맥이 뭔지도 모르는 사람들도 많았다. 저 동영상을 보고 사람들은 그저 '신기하다, 재미있다' 정도의 반응만 있었을 뿐, 크게 관심을 가지지 않았다.

관심을 가진다면 어떻게 될까? 저 동영상을 보는 순간, 왠지 비슷하게 만들고 싶다는 생각이 들었다. 당시에 리눅스 데스크탑은 현란한 화면 효과의 compiz, beryl 등이 유행하던 시절이었다. 그리고 나는 리눅스 데스크탑에서 compiz, beryl 등을 세팅할 수 있었으며 8비트 임베디드 프로그래밍과 약간의 전자 회로를 만드는 방법등을 공부하고 있었다.

관심을 가지고 있으니 아이템이 잡혔고, 원칙을 적용했다.

1. 돈을 벌기 위한 프로그래밍 말고, 돈을 벌지 못하더라도 꾸준히 자기를 위한 프로젝트를 한다. 그 프로젝트라는 것은 꼭 프로그래밍이 아니어도 좋다.
====> 당연히 저걸 한다고 돈을 벌 순 없다. 하지만 분명한것은 나에게 도움이 된다.
2. 해 보지 못한 기술적 성취를 할 수 있도록 프로젝트의 목표를 세운다.
====> 비슷한 기능을 구현하기 위해서는 가속도 센서같은 센서류를 사용해야 한다. 이 기회에 센서 제어를 해 보자.
3. 학교 다닐 때 재미 없다고만 느꼈던 이론 공부를 한 번 더 할 수 있도록 프로젝트 목표를 세운다.
====> 학교에서 배운건 아니지만, 외부 디바이스(센서)와 리눅스 데스크탑 사이에 신호 전송을 위해서는 디바이스 드라이버를 공부해야 한다. 어떤 인터페이스를 사용할 지는 아직 결정하지 않았지만 필요하다.
4. 다른 사람에게 도움이 될 수 있을 만한 프로젝트를 한다.
====> 관련 작업 내용을 문서로 정리해서 공개된 도메인에 올릴 것이다.

이 개인 프로젝트는 아마 약 두 달 정도 작업해서 완성을 했다. 그 기간동안 앞으로 이 글을 통해 이야기할 나만의 프로그래밍 절차를 진행했고 앞으로 계속 이어지는 나의 개인 프로젝트의 절차적 완성에 큰 기여를 했다.

완성품의 동영상은 아래에 있다.

http://www.youtube.com/watch?v=aKBLxBwJ9qA

프로젝트 진행 과정에서 가속도 센서등을 사용하지 못하고 헝그리 터치 스위치를 다이오드와 트렌지스터 등을 이용해 구현했지만, 그것 자체도 나에게는 원칙 3번에 해당하는 많은 공부가 되었다. 추가로 온습도 센서, 광량 센서등을 달고 이것을 리눅스 데스크탑으로 전송해서 그놈패널에 애플릿으로 나오게 하는 프로그래밍까지 공부할 수 있는 좋은 기회였다. 그 과정에서 여러 능동 소자들의 데이터 시트 보는 법 및 회로도 해석하는 법, 타이밍 그래프 해석하는 법 등 많은 이론적인 지식을 쌓을 수 있었다.

이런 많은 기반 지식들이 이후에 내가 임베디드 개발자로 방향을 잡는데 많은 영향과 도움을 주었을 것이다.

다른 사람들은 그냥 재미있는 동영상이네하고 지나갔던 동영상에 관심을 가지면 그것 자체가 하나의 멋진 프로젝트로 이어질 수 있는 발단이 될 수 있다.

이 글을 읽고 있는 여러분 주위에 많은 아이디어의 소스들이 돌아다니고 있다. 지금부터라도 관심을 가지고 지켜보면 자기 자신을 성장 시킬 수 있는 많은 것들이 보일 것이다.

====
이 글은 CC이지만 다른곳에 불펌은 하지 말아 주세요. KLDP와 raonlife에(http://raonlife.com/navilera/blog/view/52/)만 연재합니다. 다른 곳에 연재되어 있는 것은 불펌이오니 저에게 알려주세요.

댓글

gurugio의 이미지

좋은 글 감사합니다.

제 경험을 덧붙이자면, 저도 뭔가 맹그는게 좋아서 작은 프로젝트를 몇년 진행하다가,
밑천이 없다는걸 깨닫고, 요즘 열심히 독서를 하고 있습니다.
나빌레라님 말씀대로 열심히 만들어보고, 공부하다보면
자신이 뭐가 부족하고 어떤 길로 나아가야할지를 더 잘 알수 있거나
알 수 있는 기회가 생길거라 생각합니다.

소년이여, 마우스를 놓고 키보드를 들어라~~

sephiron의 이미지

좋은 글 감사드립니다. 특히

Quote:
[이미 있는것, 남들이 만들어 놓은 것이라도 상관하지 않는다.]
라는 말씀이 제 상황과 잘 맞아떨어져 큰 도움이 되었습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.