BLOG main image
많은 분들과 의견을 나누고 싶은 이런저런 이야기를 쓰고자 합니다.

'ruby'에 해당되는 글 1건

  1. 2006.10.30 루비, 고맙다 (3)

루비, 고맙다

2006.10.30 11:20
좀전에 난생 처음으로 프로그램을 하나 완성 시켰습니다.

책에 나오는 예제 프로그램이나 문제 풀이를 위한 프로그램들도 이미 작성해보았고 중간에 그만둔 프로그램들은 이미 꽤 있습니다. 하지만 요번것은 제가 구상했던대로 목적에 맞게 끝맺음을 해서 나름 뿌듯하네요.

저는 컴퓨터라는 물건 자체를 꽤 좋아합니다. 일이나 생활의 도구를 넘어서서 컴퓨터 그 자체에 매력을 느끼는 거죠. 어릴적 처음 접한 이후로 도구이자 놀이기구로서 쭉 같이 생활을 해 왔습니다.

프로그래밍이라는 것이 컴퓨터란 놈을 마음대로 쥐락 펴락 할 수 있는 막강한 힘을 제공하기 때문에 지금에야와서 처음으로 프로그램을 하나 짜 봤다는게 저에게 있어서는 좀 의외의 일인지도 모릅니다. 배웠어도 벌써 배워서 이미 어느정도 익숙해진 상태라야 어울리지 않는가 하고 혼자서 생각을 하기도 합니다.

다른 학문과 다르게 흔한 컴퓨터 한 대와 의지만 가지고 있으면 배우기 어렵지 않은 것이 이 프로그래밍입니다. 높은 수준까지 도달할 수 있느냐 없느냐를 떠나서 일단 해보기가 간단합니다. 자연 과학 분야의 실험처럼 고가의 실험장비들이나 소모되는 재료들의 비용같은 것이 없지요.

뭐 그래서 사실 오래전에 이미 프로그래밍 입문서도 사보고 인터넷의 자료도 봐 가면서 배워보려는 시도를 했었습니다. 이 때 시도해본것은 C 언어 였습니다. 다른 언어가 뭐가 있는지도 몰랐고 C가 가장 기본이 된다는 것을 줏어 들었기에 당연한 수순이었죠.

근데 이게 수학의 정석 마냥 삼분의일 정도 책 분량이 넘어가면 막막해지면서 코드를 어떻게 써야 할지 점점 막막해지더군요. 일단 책에 나온 예제들이 이해가 안가기 시작하고 이해가 안된 상태에서 대략 베끼고 짜집기해서 실행시켜보려니 이게 오류없이 만만하게 돌아갈리는 만무합니다. 진득하지 못한 제 성격에 끝까지 물고 늘어지지도 못하고 이리 기웃 저리 기웃 하다 중도에 내팽겨쳐 버리는 과정을 반복 하면서 오늘날까지 온거죠.

학교 전공이나 직장이 이쪽 분야였다면야 어떻게든 이미 배웠겠지만 딱히 배워야 할 외부의 압력도 없는 상태다 보니 시간은 흘러 흘러 오늘날까지 왔습니다.

그러다 한가지 새로운 계기가 된 시점은 몇년전부터 본격적으로 사용하기 시작한 리눅스 때문이었습니다. C, C++은 물론이고 리눅스 배포본들에 기본적으로 설치되어 오는 이런 저런 프로그래밍 언어 환경들을 접하게 되고 이런 언어들로 쓰여진 프로그램도 직접 사용해보고 하면서 견문을 좀 넓히게 된 것이죠.

기본 쉘로 사용되는 배쉬(BASH) 부터 시작해서 펄(PERL), 파이썬(Python), PHP 같은 언어의 프로그래밍 환경이 기본적으로 설치되어 있고 이러한 언어로 작성된 프로그램들도 많이 접할 수 있었습니다. 위에 언급한 것들은 C나 C++처럼 바이너리 파일로 컴파일되지 않고 스크립트라고 흔히 부르는 텍스트 파일 그대로 읽어들여져 실행되기 때문에 실제 코드를 들여다 보게 되는 기회도 비교적 자주 있었습니다. 본다고 이해하는 것은 아니었지만 C 이외에도 뭔가가 있고 이것으로도 프로그램을 만들수 있다고 생각하는 정도였습니다.

배쉬같은 경우는 프로그래밍 환경으로뿐만 아니라 컴퓨터 이용의 기본 환경이 되는 쉘(SHELL)로의 기능을 수행하기 때문에 좀 익숙해지기 위해 책도 사보고 설명서도 자주 들여다보아서 이 배쉬 문법으로 쓰여진 스크립트들은 자연스럽게 조금씩 이해가 되더군요. 지금도 뭐 익혔다고는 할 수 없지만 매일 같이 쉘로서 사용되다 보니 그나마 문법에 친숙해진 것이죠.

펄은 웹 열풍이 불기 시작할 초창기에 나름 홈페이지에 붙여본다고 CGI를 작성하는 용도로 슬쩍 접해봤었고 파이썬은 도서관에 책이 보이길래 대출해다가 한 번 읽어봤고 PHP는 제로보드같은 웹서버와 같이 동작하는 프로그램을 작성하는 용도로 매우 많이 사용되고 있어서 가끔씩 들여다 볼 기회가 있었습니다.

C를 배울때는 모든걸 하나하나 수작업으로 해나간다는 기분이었다고 했으면 파이썬같은 언어에서는 어느 정도 밑바닥의 작업은 대신 해주는 듯한 느낌이 들더군요. 생산성이 높다거나 빠른 개발이 가능하다는 얘기가 어떤 것인지 막연하게나마 어렴풋이 느꼈다고 할까요.

마침 이 즈음에 짚 옆에 도서관도 하나 생기고 해서 이책 저책 빌려다 보면서 세계정복을 실행하는 프로그램을 짜기 위해 도전의 의욕을 키우기 시작했습니다.

확실히 C로 할 때 보다는 진도가 많이 나가더군요. 그러나 이것도 잠시뿐, 어느정도 복잡도가 증가하니 머리속에 들어있는게 코드로는 표현이 죽어라고 안되더군요. 이렇게 또 진도가 안나가기 시작하니까 슬슬 저의 사고력에 자괴감마저 들면서 대학 입시때 소프트웨어 공학과에서 떨어져서 다른 진로를 택하게 된것이 다행이라는 생각마저 하게 되더군요. 슬펐습니다.

사실 그동안의 배움의 도전을 수행하는 동안 부수적으로 얻은것이 있었으니 개념도 제대로 모르는 Functional Programming, OOP, 무슨 무슨 개발 방법론이니 하는 이 바닥의 용어들을 습득해 언제일지는 모르지만 잘난척을 할 수 있게 대비하게 되었다는 점이나 실제 지식의 습득 보다는 기술 서적에 빠지지 않는 Preface, Abstract, Dedication 같은 책 앞부분을 판타지 소설 마냥 나름 상상의 나래를 펼쳐가며 읽을 수 있는 비기를 습득하게 되었다는 점이 있겠는데요.

특히나 이 프로그래밍 입문서나 막강한 분량을 지닌 하우투, 매뉴얼들의 앞부분만 훑어보고 마치 그 안에 스킬들을 다 익힌냥 혼자만의 상상의 세계에 빠져드는 것이 저의 새로운 취미가 되어버렸다고 할 수 있습니다. 요새는 이에 덧붙여 뒷부분의 Index를 훑어 보며 잘난척에 사용할 단어량 늘리기도 새로 시도하고 있습니다. 이것은 아마도 나름대로 책값에 들어간 본전을 뽑아보자는 잠재의식이 역효과가 난것이 아닌가 가끔 떠올리기도 합니다. 잡소리가 길어지네요.

뭐 어쨌든 프로그래밍은 적성에 안맞을 뿐이라며, 사용자로서만 만족하자고 애써 자위하며 지내던 어느날 루비(Ruby)라는 언어에 대한 이야기가 들려오더군요. 읽을 거리가 떨어져가던 즈음 발견된 미끼를 덮썩 물었습니다. 홈페이지를 시작으로 관련 사이트 이곳 저곳을 둘러보며 짤막한 소개글들을 시작으로 이것저것 읽어보기 시작했습니다. 마침 PickAxe라고 불리우는 공개적으로 구할 수 있는 서적도 있더군요. 목차를 살짝 보니 Preface, Road Map, Getting Started와 같은 저의 구미를 자극하는 앞부분들이 역시나 빠지지 않고 있더군요. Index의 분량도 훌륭하고 아주 좋았습니다.

슬슬 읽어가기 시작하는데 기대도 안했던 지식의 습득 부분이 활성화 되더랍니다. 중간중간 어려운 부분은 살살 건너뛰면서 읽긴 했지만 의외로 머리에 잘 들어오더군요. 무엇보다도 좋은 점은 본문에 소개되는 코드들이 이해가 잘 되더라는 겁니다. 코드에 대한 설명을 읽기 전에도 쓰여진 모습을 보고 상당부분 이해를 할 수 있었습니다. 문법이 자연스럽다고 할까요, 읽어가기가 편하더군요.

책장도 술술 넘어가고 예제 프로그램도 잘 돌아가고 하다보니 좀 더 욕심이 동하더군요. 이때까지는 터미널 상에서 이름 입력 받아서 "안녕 마잇님아~" 라고 외쳐주는 나름 인터렉티브한 프로그램을 만들어 봤지만 그래픽 환경의 프로그램들, 이른바 GUI 프로그램들은 도대체 어떻게 작성되는지가 매우 궁금했었습니다.

마침 Gnome에서 KDE로 바꿔 보고 KDE에 한창 감탄하고 있던 중이라 KDE의 기반으로 사용되는 Qt 툴킷을 사용해서 도전해보기로 마음먹었죠.

해보신분들 기억나실지 모르겠는데 Qt에서 공식적으로 실시하는 신병 교육 코스가 '포트리스' 만들기 입니다. 포탑과 포신을 그리고 목표물을 만든다음 힘과 각도를 조절해준 후 탄환을 발사하는 프로그램이지요. 후반부로 가면 움직이는 목표물 만들기, 중간에 장애물 세우기 이런 것도 나옵니다.

진작에 게임부터 만들었으면 프로그래머로 대성하고 있지 않을까 하는 생각이 들 정도로 식음을 전폐하고 이 게임 만들기에 빠져들었습니다. 윤년을 알아내라던지, 미터를 피트로 바꾸라던지, 사칙연산하는 계산기를 만들라던지 하는 그동안의 읽었던 책의 저자들의 가르침이 약간은 원망될 정도였다고 할까요. 화면에 뭔가를 그린다는 것이 어떤 개념의 작업인지 접해볼수 있는 좋은 기회였습니다.

튜터리얼의 내용대로 끝까지 만들어보고도 나름대로 이것저것 바꾸고 추가하면서 계속 만들다가 보니 어느 시점에 제 코드를 수정하는게 점점 힘들어지는 난처한 상황이 생기더군요. 이쪽 저쪽 수정할일이 생길때마다 어디를 만져야 하는지 찾아내기가 점점 더 힘들어졌습니다. 그래서 이건 일단 손을 놨습니다. 코드를 정리해야겠다는 필요는 느끼는데 어떻게 해야할지를 모르겠는지라 일단 그냥 두고 다른걸 만들어 보기로 생각했죠.

그래서 웹을 많이 사용하게 되면서부터 유난히 동경하고 만들어보고 싶었던게 게시판 프로그램, 이른바 포럼, BBS로 부르기도 하는 그런 프로그램이었습니다. 사실 속된 말로 이런 류의 프로그램은 발에 치인다고 할 정도로 많지만 요상하게 또 입맞에 맞는 프로그램 찾는 건 힘들었습니다. vBulletin, phpBB, punBB, vanilla 같은 프로그램들이 제가 좋아하는 것들인데 꼭 한두가지씩 아쉬운점이 있더군요. 직접 만든 프로그램이 위와 같은 프로그램들의 수준에 달하기는 사실 어렵겠지만 그 과정의 경험을 이용해서 다른 프로그램들의 아쉬운 부분을 개선하는데 도움이 되지 않을까 하는 기대감도 있었기에 어쨌든 시도해 보기로 했습니다.

어디부터 손대야 하나 이리저리 공상을 하다보니 배워야 할 기반 지식이 상당하더군요. 데이터베이스 조작이라던지 http 프로토콜에 대한 이해, 웹서버의 동작, HTML, CSS ...

덜컥 겁이 나기 시작하고 Qt와 함께 만들었던 포트리스로 쌓인 자신감이 약해지면서 잠시 프로그래머 귀신에 씌여 작성해낸가 아닌 생각마저 들고 맹렬히 작동시키던 에디터를 멀리하게 되었습니다.

솔직히 게임성이라고는 전혀 없는 제 포트리스를 실행시켜놓고 멍하니 탄환 발사 버튼만 눌러대며 지내던 어느 날, 레일즈(Ruby on Rails)라는 것에 대한 얘기가 귓가를 스치더군요. 기차 선로에 루비가 떨어져 있다는 건지 노트북들고 기차타서 루비로 코드를 쓰라는 건지 전혀 짐작이 안갔지만 웹 프로그램을 만드는데 도움이 된다는 한 마디에 일단 갔습니다. 가서 막 읽었습니다. 마음이 급하니 저답지 않게 Preface, Forward ..., Copyright 이런 부분 다 건너 뛰고 읽게 되더군요.

읽다 보니까 얼추 이해가 가고 위에서 언급한 그런 배경 지식들도 부분 부분 설명이 되어있어서 도움이 많이 되더군요. 어떤 코드를 어디다 써야할지 설계도를 그려주는 듯한 느낌도 들고 그런 구조를 보다 보니 포트리스를 만들때 느꼈던 답답한 부분에도 힌트를 많이 얻었습니다.

이전에 말한 포트리스를 만들다가 막혔던 부분이란건 이런 점이었습니다. 어딘가를 수정하고 뭔가를 덧붙이려면 제 코드 전체의 흐름을 머리에 넣고 있어야 했다는 거죠. 점점 분량이 늘수록 이 흐름을 한순간에 다 머리에 넣고 있기가 힘들어 지더군요. 바둑이나 장기를 둘 때 수의 예측을 많이 하면 할수록 복잡도가 급격히 증가하는 그런 느낌이라고 할까요. 한두수의 예측과 서너수 이상의 예측은 차이가 급격히 커지죠. 그래서 이 레일즈를 들여다 보면서 느낀게 원하는 내용의 코드를 어디에 쓸지 쉽게 찾아낼 수 있는 그런 구조에 대해서 였습니다.

레일즈를 기반으로 만든 프로그램을 받아다가 이리저리 들여다 봤습니다. 제가 작성한것이 아님에도 불구하고 이쪽 저쪽 전부 들여다보고 파악하지 않아도 어디를 손대야 할지 감이 온다는게 좋더군요. 요렇게 저렇게 수정도 해보고 기능도 덧붙여보고 하는게 어설프지만 가능하다는게 신기했습니다.

뭐 어쨌든 세계 정복용 게시판의 현재 상황은 여전히 계획만 잡혀 있는 상황이지만 언젠간 가능하지 않을까하는 희망은 생겨나게 되서 다행이라고 해야죠.

이런 저런 와중에 처음에 말했던 프로그램도 만들어 보게 된거지요. 사실 뭐 어릴적 도스에서 게임 돌릴려서 배치 파일 짜집기하던 수준에서 크게 벗어나지 못한 정도이지만 제 상상력과 필요대로 만들어냈다는 데에서 의미를 두고 싶습니다. 이 모든것의 계기와 도구가 되어준 루비라는 언어에 대해서도 많은 매력을 가지게 되었다는게 사실 요점인데 이건 뭐 프로그래밍 언어라는 것에 대한 경험과 지식도 없이 이렇다 저렇다 쓸 내용이 없네요. 다른걸 뭘 제대로 써봤어야 비교를 해서 이야기 해도 할 것인데 말이죠 흐흐.

그동안 프로그래밍을 배워볼려고 시도했던 경험이 있었기 때문에 이번에 루비에 적응할 수 있었지 않았나 하는 생각도 있지만요, 확실히 루비 문법의 자연스러움, 읽고 쓰기에 편한 그런 점이 크게 도움이 되었다는 생각이 듭니다.

혹시나 저처럼 도전과 좌절 사이에서 왔다갔다 하시는 분 계시면 루비를 한번 배워보시라고 감히 한 번 말씀드려 볼려고 조잡한 글이지만 한 번 적어보았습니다.
신고
Posted by 마잇

카테고리

분류 전체보기 (23)
게임 (4)
잡다한~ (4)
자유소프트웨어/오픈소스 (4)

달력

«   2017/08   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

티스토리 툴바