본문 바로가기

내문서

[개발자] 프로그래밍 전성시대

반응형

프로그래밍 전성시대

‘글자는, 무기니까. 소양을 갖추지 못한 사람들이 함부로 글을 쓰게 되면 어찌되겠느냐? 글로 사람을 죽일 수도 살릴 수도 있게 되는 것이야. 글자는 그만큼 무서운 것이다.’ 얼마 전 종영된 드라마 ‘뿌리 깊은 나무’에서 세종의 한글 반포를 막으려는 정기준의  생각을 가장 잘 담아내고 있는 대사 중 한 부분이다. 바라보는 입장에 따라서는 기득권 계층이 자신의 권력을 유지하기 위한 변명이라고 생각하기도 하고 국가의 정통성을 지켜내기 위한 어쩔 수 없는 선택이라고 이야기하기도 한다.


누구나 글자를 아무런 제약 없이 접할 수 있고 사용할 수 있으니 이제 모두에게 평등한 세상이 왔어야 하는데 여전히 누군가 차별받는 경우를 찾아볼 수 있다. 대표적인 것이 ‘컴맹’이라는 표현이다. 국어사전에도 등록된 명사로 컴퓨터를 다룰 줄을 모르는 사람을 의미한다고 한다. 컴퓨터라는 단어와 맹인(盲人, 시각장애인)이라는 단어가 합쳐져 만들어진 말로 컴퓨터 앞에만 오면 아무것도 보이지 않는 상태를 의미한다. 누구나 컴퓨터는 접할 수 있지만 이를 어떻게 활용하는지는 어느 정도의 학습을 필요로 한다. 스마트폰이나 태블릿을 처음 접했을 때 어렵지 않게 사용하는 것은 이미 컴퓨터라는 기기에 익숙해져있고 운영체제라는 개념은 상당 부분 비슷한 점을 가지고 있기 때문이다.


컴퓨터를 처음 구입할 때 일반적인 경우에는 운영체제를 같이 구입하게 된다. 윈도우와 같은 운영체제에서는 메모장이나 그림판, 웹브라우저와 같은 아주 간단한 프로그램만을 제공한다. 주로 인터넷만 사용하는 용도라면 다른 프로그램을 필요로 하지 않겠지만 사용 목적에 따라 프로그램을 구매하거나 프리웨어로 제공되는 것을 사용하게 된다. 그래서 컴퓨터를 사용해본 경험이 있다면 프로그램을 설치하거나 삭제한다는 말은 전혀 낯설지 않을 것이다. 특정 제품의 이름을 직접 부르는 이도 많지만 오히려 컴퓨터를 잘 모르는 경우에는 ‘OO하는 프로그램’이라고 표현하곤 한다. 프로그램의 사전적인 의미를 살펴보면 ‘어떤 문제를 해결하기 위해 그 처리 방법과 순서를 기술해 컴퓨터에 주어지는 일련의 명령문 집합체’라고 표현되어 있다. 문서를 작성하기 위해서 프레젠테이션 프로그램을 실행하고 도형을 그리고 색을 칠하는 것이 사용자 입장에서는 프로그램의 메뉴바로 마우스를 움직여 도형 아이콘을 선택하고 화면에 배치하는 것이지만 내부적으로는 컴퓨터가 화면상에 도형을 표현할 수 있게 명령을 내리는 것이다. 누군가에게 일을 지시하기 위해서는 지정된 문법에 따라 글을 써서 전달해야 한다. 하지만 프로그램에서 필요한 작업을 글로 써서 표현한다는 것은 생각만큼 쉽지 않다.


몇 가지 도형이 섞여있는 모습을 글로만 써서 상대방에게 전달해서 그려보게 한다고 생각해보자. 예를 들어 태극문양을 설명하려고 할 때 ‘태극’이 어떤 형태인지 서로가 알고 있다면 간단하게 설명이 가능하겠지만 그렇지 않다면 난감한 일이 될 수 있다. 프레젠테이션 프로그램을 쉽게 배우고 사용할 수 있는 것은 사용자가 어떤 메뉴를 선택했을 때 어떻게 동작한다는 것을 쉽게 인지할 수 있게 제공하고 있다는 것이다. 그런 약속들을 모아서 직관적으로 알 수 있는 메뉴 항목이나 아이콘으로 구성해놓은 것이 우리가 사용하고 있는 프로그램이다.


(그림 1. 기계어 코딩)(그림 1. 기계어 코딩)


프로그램을 사용할 때 최종적인 사용자가 메뉴바에서 아이콘을 선택할 때 어떤 명령을 내릴 것인지를 정의하는 일을 프로그래밍이라고 한다. 버튼을 배치하고 사용자가 버튼을 클릭했을 때 어떤 이벤트를 실행할지를 지정하고 결과를 화면에 표시하는 일까지 일련의 작업을 프로그래밍 언어를 사용해 기술한다. 그리고 이런 작업을 수행하는 사람을 개발자라고 한다. 하지만 개발자 역시 개발도구를 사용하고 있다면 사용자 입장이 된다.


프로그램도 단계를 가지고 있다. 직접 CPU가 해독할 수 있는 비트 단위의 기계어가 가장 아래에 자리 잡고 있고 기계어와 일대일 대응으로 기계어를 사람이 알아볼 수 있는 기호 형식으로 표현한 것을 어셈블리어라고 한다. 어셈블리어가 나오기 전에는 기계어를 직접 사람이 작성했지만 시간이 지나면서 고급 프로그래밍 언어가 나오게 되고 이제는 어셈블리어를 직접 다룰 수 있는 개발자를 찾아보기 힘들 정도가 됐다. 논란이 있기는 하지만 바둑을 어셈블리어에 비교하고 체스를 고급 프로그래밍 언어에 비교하는 글을 찾아볼 수 있다(참고자료 1). 체스는 이미 어떻게 움직일지 정해진 말을 가지고 게임을 진행하는데 반해 바둑은 다양한 조합으로 말을 만들어낸다는 점에서 어셈블리어에 가깝다고 표현하고 있다. 어셈블리어가 창의력을 높여준다는 이야기는 그 만큼 다양한 조합과 상황을 고려해야 한다는 것을 표현해주고 있다. 물론 그렇다고 바둑과 체스 중 어떤 것이 창의력에 더 좋다는 것을 이야기하고 싶은 것은 아니다.


모든 개발자가 어셈블리어를 알아야 하는 것은 아니다. 자신의 직무에 맞는 언어를 선택하고 이를 잘 활용하는 것만으로도 충분히 먹고 살아가는데에는 지장이 없을 것이다. 하지만 다양한 무기를 활용할 수 있는 준비를 하는 것은 또 다른 선택의 문제이다.


뉴욕 시장이 프로그래밍을?

지난 1월 6일 BBC에서는 뉴욕 시장인 마이클 블룸버그가 새해에 프로그래밍을 배우겠다고 트위터에 게시한 것을 뉴스로 전달했다. 1942년생으로 올해 70세인 블룸버그 시장이 컴퓨터를 배우겠다는 것이 아니라 프로그래밍을 배우겠다는 것은 이해하기 힘든 상황이다. 블룸버그 시장이 선택한 학습 방법은 Codecademy라는 서비스로 스스로 학습할 수 있는 코스를 제공해준다. 서비스 이름처럼 코드를 학습하는 것이 주요 목적이며 2011년 8월 서비스가 공개된 이후 폭발적인 인기를 얻으면서 테크크런치, 뉴욕타임즈등에 소개되면서 대규모의 투자까지 이끌어냈다.

Codecademy 서비스의 창업멤버는 실제로 프로그래밍을 배우기 시작하면서 겪은 좌절감을 서비스로 표현했다고 한다. 피아노를 처음 배울 때 피아노만 있으면 바로 배움을 시작할 수 있지만 프로그래밍은 컴퓨터만 있다고 무언가 시작해볼 수 있는 환경이 만들어지는 것은 아니다. 필요한 도구들을 통합적으로 제공하는 경우도 있지만 대부분의 경우 개발에 필요한 SDK, 개발툴, 환경설정등을 직접 해주어야 한다. 이런 장벽은 처음 프로그래밍을 시작하는 경우뿐 아니라 새로운 언어를 배우려는 개발자에게도 넘어가기 쉽지 않은 것이다.


그래서 Codecademy 서비스는 프로그래밍을 배우는데 웹브라우저만 있으면 다른 도구 하나 없이 기본 과정을 습득할 수 있도록 제공하고 있다. 회원가입 없이도 바로 시작할 수 있고 마치 채팅하듯이 화면에 보이는 지시사항을 그대로 따라가다 보면 원하는 작업을 수행할 수 있다. 


(그림 2. Codecademy 따라 하기)(그림 2. Codecademy 따라 하기)


간단한 학습을 마칠 때마다 배지를 지급하는 시스템을 제공하고 트위터나 페이스북을 통해 자신의 학습결과를 바로 공유할 수 있기 때문에 비슷한 수준에서 학습을 진행하는 사용자와 공감대를 형성할 수 있다. 또한 스토리를 가지고 프로그래밍을 학습하기 때문에 지루하지 않게 따라갈 수 있다. 또한 코스를 쉽게 만들 수 있는 기능을 제공해 다양한 관점에서 프로그래밍에 대한 학습을 경험할 수 있게 하고 있다.


프로그래밍을 배운다는 것은 컴퓨터에게 일을 지시하는 과정을 배우는 것이다. 사람에게 일을 지시할 때에는 모든 과정을 하나하나 다 지시하지는 않는다. 지시를 하는 사람에 따라 다르긴 하지만 상세한 과정을 하나하나 논리적으로 설명해주지는 않는다. 하지만 프로그래밍은 정확한 목적에 따라 적절한 명령을 내려야 한다. 원하는 결과를 얻기 위해서 어떤 과정을 거쳐야 하는지 고민해야 하며 이를 통해 논리적인 사고를 배우게 된다. 뉴욕 시장이 뜬금없이 프로그래밍을 배우겠다고 하는 것도 이러한 배경을 가지고 있는 것이 아닌가 싶다.


영어가 어렵다면 온라인 강의 형식이긴 하지만 비영리 활동으로 진행되고 있는 생활코딩(http://opentutorials.org/) 사이트를 활용할 수 있다. HTML, CSS, 자바스크립트 뿐 아니라 jQuery나 PHP와 같은 프로그래밍을 단계별로 쉽게 학습할 수 있게 제공하고 있다. 또한 공동공부라는 공간을 취해 참여자들이 학습에 대한 내용을 공유하며 공감대를 형성할 수 있게 배려하고 있다.


나만의 게임 만들기

요즘에는 찾아보기 힘들지만 80년대에 컴퓨터 서적을 보면 게임 만들기에 대한 책을 쉽게 찾아볼 수 있었다. 책에 나온 수백라인의 내용을 그대로 입력해서 저장하고 게임을 실행하는 방식이었지만 만들어진 게임이 아니라 내가 만든 코드로 게임이 실행된다는 것이 신기했기 때문에 꽤 힘든 과정이긴 하지만 많은 인기를 얻었던 것으로 기억된다.

하지만 게임이 점차 복잡해지고 규모가 커지면서 전문적인 지식이 없는 개인이 직접 코드를 다루기에는 너무 광범위해졌다. 대신 이전에는 복잡한 코드로 구현해야 했던 작업들이 몇 번의 클릭만으로 구현할 수 있는 기술이 등장했다. 보는 관점에 따라서 저런 작업을 프로그래밍의 범주에 포함시켜야 하는지 고민될 수도 있지만 단순하고 반복적인 작업을 줄이고 실질적인 창의적이고 논리적인 사고에 집중하게 하는 것이라고 생각할 수 있다.


게임 만들기에 주로 사용되는 도구는 플래시였다. 최근 모바일 이슈와 함께 점점 힘을 잃어가는 모습을 보여주고 있지만 여전히 강력한 플랫폼임은 무시할 수 없다. 페이스북이나 사이월드, 네이버 소셜앱스와 같은 소셜 플랫폼에서 가장 많이 활용되고 있는 게임 개발 도구 역시 플래시를 사용하고 있다. 플래시는 연속된 장면을 연출하는데 있어 기본적인 개념만 이해하면 자유롭게 다양한 움직임을 연출할 수 있기 때문이다. 또한 다양한 구현 사례가 공개되어 있으며 물리엔진을 적용하거나 영상이나 이미지와 같은 외부 자원을 활용할 수 있다. 또한 인터랙티브한 효과를 구현하는데 있어서 아직까지는 플래시만한 도구를 찾아보기는 힘들다. 기술적으로 HTML5만 가지고도 충분히 가능하다고는 하지만 실제 이를 구현할만한 능력자를 찾기에는 어려운 상황이다. 이에 반해 플래시는 직관적인 개발 도구와 수많은 레퍼런스, 책, 샘플, 커뮤니티를 통해서 다양한 리소스를 쉽게 얻을 수 있다.


하지만 플래시는 범용적인 저작 도구이기 때문에 처음 다루는 경우라면 익혀야 할 사전지식이 결코 적지 않다. 간단한 기능 정도야 쉽게 익힐 수 있지만 원하는 기능을 구현하기 위해서는 어려움이 있을 수 있다. 그래서 게임을 만드는 별도의 도구를 사용하기도 한다. 대표적인 사례가 게임메이커이다. GUI 형태의 인터페이스를 사용하고 있기 때문에 쉽게 화면을 배치하고 구성할 수 있으며 자체적인 프로그래밍 언어를 지원하고 있어서 섬세한 동작을 처리할 수 있게 한다. 네덜란드의 프로그래머인 마크 오버마스(Mark Overmars)가 교육용으로 개발한 IDE로 현재는 요요 게임즈(YoYo Games)에서 개발, 판매, 호스팅을 지원하고 있다. 무료로 제공되는 Lite 버전으로도 간단한 퍼즐 정도의 게임은 만들어볼 수 있으며 라이선스를 구매하는 경우에는 3D 처리라든지 확장 기능을 사용하는 등의 작업을 할 수 있다.


(그림 3. HTML5기반 게임메이커 데모)(그림 3. HTML5기반 게임메이커 데모)


게임메이커는 2011년 2월 HTML5 기반으로 게임을 퍼블리싱 하는 기능을 발표했다. 간단한 카드게임에서 시작해서 최근 데모로 공개한 Grave Maker라는 게임은 간단하지만 비슷한 게임에서 필요한 요소들을 어느 정도 갖추고 있다는 점에서 관심을 받고 있다. HTML5 기반의 게임을 쉽게 만들어낼 수 있다면 다양한 앱스토어에 이를 배포할 수 있어 다른 게임보다는 여러 가지 시도를 해볼 수 있다.


처음부터 프로그래밍을 배워서 간단한 게임을 만들어볼 수도 있지만 머릿속에 그려진 이미지를 표현하는 데에는 많은 시간이 필요한데 반해 게임을 쉽게 만들 수 있는 도구를 사용하는 것은 프로그래밍 이면의 세계를 들여다보기는 힘들지만 게임 만들기 자체에서 경험할 수 있는 여러 가지 고민들을 만나볼 수 있다.


움직이는 로봇 만들기

로보코드(Robocode)는 오픈소스 교육용 게임으로 2001년 IBM의 메뉴 넬슨(Mathew Nelson)이 시작한 프로젝트이다. 현재는 다양한 분야의 개발자가 참여해 개발을 진행하고 있다. 로보코드는 이름에서 알 수 있듯이 사용자가 게임 플랫폼 자체를 만드는 것은 아니다. 대신 자신만의 전략을 가지고 로봇(탱크)를 만들어서 대전을 통해 우위를 결정하는 형식을 취한다.

게임 자체가 목적이 아니라 프로그래밍을 쉽게 배우고 이해하는 것이 최초 목적이었던 만큼 독립적인 편집기를 제공해서 간단한 샘플은 따라하기 만으로 쉽게 만들어볼 수 있게 제공한다. 기본적인 개념과 로봇의 기능은 단순하지만 상대 로봇의 움직임에 따라 이벤트를 프로그래밍할 수 있어 보기보다는 흥미로운 요소를 포함하고 있다. 또한 내가 작성한 코드가 실제 상황에서 어떻게 반응하는지 확인해볼 수 있어 이제 개발에 흥미를 느끼기 시작한 경우에 유용하게 활용할 수 있다.

처음부터 코드를 직접 작성하지 않더라도 공개된 샘플 코드를 열어서 몇 가지 요소를 수정해보고 테스트해보면서 로보코드의 세계를 경험해볼 수 있다. 상용 게임에서 힘들게 아이템 얻어서 능력을 강하게 하는 것과는 또 다른 재미를 느낄 수 있을 것이다.


(그림 4. 로보코드 실행 화면)(그림 4. 로보코드 실행 화면)


전 세계적으로 다양한 리그가 진행되고 있으며 유전자 프로그래밍인 JGAP(Java Genetic Algorithms Package)를 도입해 로봇이 스스로 진화할 수 있도록 만드는 프로젝트도 진행하고 있다. 유전자 알고리즘과 게임은 잘 어울릴 것 같지 않은데 어떤 식으로 문제를 해결해야 하는지라는 공통적인 물음이 있기 때문에 실제 게임 플레이와 연관된 연구도 진행되고 있다.


컴퓨터 화면위에서 동작하는 로봇만으로 만족스럽지 못하다면 실제 로봇을 제어하는 프로그래밍도 경험해볼 수 있다. 기본적인 장비를 구비하는데 약간의 비용을 필요로 하지만 레고에서 나온 마인드스톰(MindStorms)은 나만의 로봇을 가질 수 있는 멋진 대안이다. 기능이 많은 로봇 장난감은 사전에 몇 가지 동작이 프로그래밍 된 상태에서 판매되며 사용자의 리모컨 조작에 따라 다른 동작을 보여준다. 최근에는 자체적인 코드로 프로그래밍을 할 수 있는 장난감도 나오긴 하지만 마인드스톰 시리즈는 레고가 가지고 있는 독특한 창의적인 활동에 프로그래밍이 조합되어 수많은 아이디어를 만들어낼 수 있다. 초기 구매비용이 비싸기 때문에 직접 구매하기 보다는 교육센터를 통해 참여의 기회를 제공하고 있다. 국내에서도 참여하는 학생의 수도 늘어나고 있다고 한다.


마인드스톰은 NXT-G라는 기본적인 GUI 도구를 제공한다. 시각적으로 명확하게 이해할 수 있는 흐름도 형식으로 어린 아이들도 기본적인 구조를 이해하면 쉽게 조립할 수 있는 구조로 되어있다. 작성된 프로그래밍은 바로 실제 로봇에 전달되어 동작하기 때문에 색다른 경험을 할 수 있다. 그림만으로 프로그래밍 하는 것은 뭔가 아쉽다고 생각한다면 제공되는 SDK를 직접 사용하거나 자바기반의 오픈소스 프로젝트인 leJOS를 활용할 수도 있다.


터치만으로 멋진 그림 그리기

스마트폰이 보급되면서 사진을 찍고 SNS를 통해 공유하는 것이 일상이 되어가고 있다. 사진과 간단한 메시지, 자신의 위치만을 공유하는 인스타그램, 저스팟같은 서비스는 일상의 수단으로 활용되고 있다. 이와 함께 인기를 얻고 있는 도구 중 하나가 사진을 편집하는 앱이다. 어도비에서는 2011년 MAX 행사에서 크리에이티브 클라우드라는 서비스를 소개하며 데스크톱 이미지 편집 기능에 버금가는 앱을 서비스하겠다고 발표했다. 포토샵 터치와 같은 앱은 간단한 터치 작업만으로 이미지 편집을 쉽게 가능하게 만드는 서비스인데 전문가들이 이동 중에 데스크톱 없이도 작업을 처리할 수 있게 지원해준다.

하지만 대부분의 사용자는 스마트폰이 아무리 좋아진다고 해도 그림을 그리는 것은 쉬운 일이 아니다. 환경만 달라졌을 뿐 그림을 그리기 위한 기본적인 훈련이 필요하기 때문이다. 내가 눈으로 보는 것을 사진이 아닌 그림으로 표현하고 싶은 요구를 반영해 만드는 것이 다양한 필터를 적용하는 앱이다. 마치 연필로 스케치한 것처럼 자동으로 생성해주는 기능은 일반 사진과 전혀 다른 느낌을 표현할 수 있다. 하지만 대부분의 서비스는 지정된 필터를 어느 정도 수준에서 적용할 것인지를 지정해주기 때문에 세밀한 조정은 쉽지 않다.


ubrush라는 앱은 이런 사용자의 요구를 교묘하게 파고들고 있다. ubrush는 2가지 형태의 브러시를 제공하는데 하나는 일반 스케치앱처럼 다양한 펜의 느낌을 표현하는 브러시이고 하나는 아티스트 브러시라는 독특한 기능이다. 아티스트 브러시는 빈 캔버스에 그림을 그릴 수는 없고 기본이 되는 사진을 필요로 한다. 일반적인 필터 효과를 주는 앱은 사진을 가져오면 적용할 필터를 선택하는데 ubrush에서는 필터 대신 브러시를 선택하는 것이다. 그리고 선택된 브러시로 화면에 터치를 하게 되면 원본 사진에서 가져온 색 팔레트를 기준으로 터치 감도에 따라 적절하게 화면을 채워준다. 


(그림 5. ubrush 아티스트 브러시)(그림 5. ubrush 아티스트 브러시)


어린 시절에 밑그림이 그려진 도화지에 물을 적신 붓을 살짝 그어주면 색이 채워졌던 경험이 있다면 쉽게 이해할 수 있을 것이다. 디지털 기술에 묘하게 아날로그적인 감성을 결합하면서 사용자에 따라 무한한 변형을 만들어낼 수 있도록 제공했던 것이 ubrush의 가장 큰 특징이라고 할 수 있다.


시간도 없는데 언제 사진 찍고 언제 손가락으로 색칠해가면서 그림 만들어서 올리겠냐 싶지만 자신만의 그림을 그리고 싶지만 그럴만한 능력이나 시간이 없는 경우에 적절한 대안으로 활용할 수 있다.


프로그래밍 뿐 아니라 새로운 무언가를 배우고 경험해보는 것은 다양한 관점에서 세상을 바라보게 한다. 프로그래밍으로 세상을 바꾸지는 못하겠지만 세상을 이해하는 힘을 가질 수 있다. 내가 알고 있는 지식을 전하는 개발자의 작은 노력 하나하나가 세상을 바꾸는 씨앗이 될 수 있다고 믿는다면 프로그래밍 전성시대라는 이야기가 더 이상 새롭지 않을 것이다.


참고자료

1. 체스와 바둑 - 감성미디어

http://www.blue2sky.com/1342

2. New York Mayor Michael Bloomberg takes coding course

http://www.bbc.co.uk/news/technology-16440126

3. GameMaker

http://www.yoyogames.com/gamemaker

4. Robocode

http://robocode.sourceforge.net/

5. LEJOS

http://lejos.sourceforge.net/

5. ubrush

http://ubrush.net/


728x90