작년 OOPSLA 2005 때 매리 배쓰 로손 교수의 기조 연설 제목이 유저의 종언(The End of Users, 강연기록, 발표자료)이었습니다. 과연 이게 무슨 말일까요?

일단 제가 예전에 이지님 블로그쓴 댓글을 인용하겠습니다.


프로그래밍과 "프로그램의 사용" 간의 경계선은 오늘날 점점더 흐릿해지고 있습니다. 우리의 프로그램들이 점점 더 자동화될수록 그 프로그램을 "프로그래밍"하려는 우리의 필요와 욕구는 늘어나게 됩니다.

꼭 프로그래밍을 자바나 C언어로된 텍스트를 입력하는 쪽으로 연관지을 필요는 없으며, 프로그래밍이라는 개념은 점점 더 확장하고 있습니다. 예를 들면 엑셀을 사용하는 것도 일종의 프로그래밍일 수 있고, 워드의 기본 스타일을 고치는 것도 프로그래밍으로 볼 수도 있습니다. 개발자의 역할을 부분적으로 대신하는 것이지요.

매리 배쓰 로손 교수는 엔드-유저에 비유해서 엔드-개발자(end developer)라는 말을 씁니다. 오늘날 엔드-개발자가 얼마나 될까요?

논문(Scaffidi, Shaw, Myers, 2005)에 따르면 2012년도에는 스프레드쉬트,디비 엔드 유저가 5천5백만명에 이를 것이라고 합니다.

하지만 그 수준은 어떤가요? 또 다른 연구(Panko, 1988)에 따르면 90%의 스프레드쉬트에 오류가 있다고 합니다. 2003년도 있었던 유명한 패니 메(Fannie Mae) 사건은, 미국의 모기지 금융 서비스 회사인 패니 메의 스프레드쉬트에 12억불에 달하는 오류가 있었던 일입니다(뉴욕타임즈 2003년 10월 30일자).

저는 넓은 의미로서의 프로그래밍은 교육해야 하며, 또 그것이 컴퓨터를 잘, 제대로 활용하는 데에 아주 중요한 역할을 하며, 그 사회적 효과도 막대하리라 생각합니다.




요즘은 사용자 참여성이 중요한 웹 2.0이 뜨고 있고, 게임에서도 사용자가 디자인해 나갈 수 있는 것(비슷하지만 비상업적, 교육적인 것으로는 크로케가 있습니다)들이 부상하고 있습니다. 저는 여기에서 매우 중요한 흐름의 변화를 보고 있습니다.

우리가 생각하기에 개발자, 프로그래머는 사용자와는 매우 이질적인 집단일 것 같습니다. 하지만 사실 대다수의 컴퓨터 사용자들은 매일 프로그래밍을 하고 있습니다. 정도의 차이(예컨대 세련도나, 의식적 행위 여부 등)가 있을 뿐입니다.

요즘에는 사용자들이 이렇게 프로그래밍 하는 것을 드러내놓고 도와주려는 시도들이 많습니다. 그만큼 사용자들의 요구와 필요가 커진 것이기도 합니다. 여기에서 중요한 것은 과연 어떻게 하면 전문 프로그래머가 되게 하지 않으면서도(즉 비용을 최소화 하면서도) 엔드 개발자의 욕구를 충족할 수 있을까 하는 겁니다.

지난 토요일에 르네상스 클럽 모임을 했고, 거기에서 김승범군이 EPL(Educational Programming Language, 교육용 프로그래밍 언어) 워크샵 참석 경험을 이야기 했습니다. 이런 연구의 내용들이 힌트가 될 겁니다. (참고로 저는 EPL의 Educational이라는 단어는 지나치게 협소한 느낌을 주며, 학습의 대상이 프로그래밍 언어라는 느낌을 주는데, 이에 반해 저는 Learningful Programming Language라는 표현이 적절하다고 말했습니다 -- 여기에서 프로그래밍 언어는 다른 것들을 풍성하게 배울 수 있는 도구와 미디어라는 느낌이 듭니다)

김승범군이 까무라치는 경험을 했다고 하는 Viscuit Land를 살펴봅시다. 일단 그림체부터가 독특합니다. 너무 귀엽습니다. 제 생각에 싸이월드에서 이 프로그램을 적극 이용하면 제2의 전성기를 맞이할 수도 있겠다는 생각까지 했습니다.



비스킷 랜드는 시각적 언어입니다. 화면에 그림을 그리는 것으로 프로그래밍이 됩니다. 예를 들어 화면에 자동차가 있고 그 차가 오른쪽으로 진행하게 하고 싶으면 어떻게 할까요? 규칙을 추가합니다. 화면에 작은 상자 두 개가 나오고 둘은 화살표로 연결되어 있습니다. 출발 상자에 자동차를 집어 넣습니다. 그리고 목적지 상자에도 역시 자동차를 넣되, 출발상자의 자동차 위치보다 약간 오른쪽에 놓습니다. 그렇게 하고 실행하면 자동차는 우측으로 진행합니다.

말이 더 어렵죠?



비스킷 랜드도 이와 유사합니다. 이 그림은 KidSim(나중에 Cocoa, 지금은 Stagecast Creator)이라는 소프트웨어에서 프로그래밍하는 방식을 보여주고 있습니다. 화면에 이런 식으로 규칙을 추가합니다.

이 규칙을 이용해서 맥주병을 나르는 동영상을 한번 보시죠. 이걸 이용하면 애니메이션을 만들 수도 있고, 게임을 만들 수도 있습니다(게임 제작 과정 동영상).  비스킷 랜드로 만든 예제들도 몇개 볼까요?

개발자분들은 이걸 보고, 아 이건 패턴 매칭 시스템/규칙 기반 시스템이네! 하고 생각이 드실겁니다. 맞습니다. 관심 있는 분들은 비스킷 랜드의 저자가 쓴 영문 논문을 보시죠. 제목이 Fuzzy Rewriting : Soft Program Semantics for Children 입니다. http://www.ipl.t.u-tokyo.ac.jp/~tops/OHP/haradaVL2003.pdf

워크샵에서는 저자가 비스킷 랜드를 이용해서 트래픽 제어 시뮬레이션도 보여주고, 논리회로(AND, OR, NAND 등)도 시연해 보였다고 합니다. 비스킷은 NTT의 후원으로 진행된 프로젝트인데, 저자는 이걸 3개월만에 첫 릴리스를 만들었다고 하며, 만든 동기는 자기 딸에게 프로그래밍을 가르치고는 싶은데 기존의 구태의연한 방법 말고 새로운 방법으로 가르치고 싶어서 이런 걸 만들었다고 하네요.

본인이 기획자라면 비스킷 랜드를 다운로드 받아서 여러가지 실험도 해보고 애들과 같이 놀아보시기 바랍니다. 많은 아이디어를 얻을 수 있을 겁니다. (일본어가 안되면 번역 사이트를 통해서라도...) 한 5분 정도만 만지작 거리다보면 재미있는 애니메이션을 바로 만들 수 있습니다!!!

이러식으로 내가 하고 싶은 것의 예를 그대로 드러내면 프로그래밍이 되는 것을 일컬어 Programming By Example (예에 의한 프로그래밍)이라고 합니다. PBE는 넓게 보면 End User Development라는 연구에 속하는 것이죠.

http://web.media.mit.edu/~lieber/PBE/index.html
http://eusesconsortium.org/


자 여기에서 한발자국 더 나아가면? 당연히 연결될 수 있는 개념은 "커뮤니티"입니다. 엔드 개발자들의 커뮤니티.

로손 교수의 연구를 언급하겠습니다. (노인과 청소년들이 짝을 이루어 커뮤니티 시뮬레이션 프로그램을 만들면서 서로 학습을 했다 뭐 그런 이야기입니다)




Learning and collaboration across generations in a community

We report on the activities and outcomes of two workshops in which middle school students and senior citizens explored, designed, and constructed visual simulations related to community issues. The workshops are part of a larger project, in which we are studying the effects of community-related programming projects and discussion on residents' computer literacy and community involvement. We describe the interactions among participants of varying age, and the simulations that they designed and built. We also discuss the influence of age on participants' reactions to the workshop activities, and consider what implications these findings have for our goal of building and maintaining a cross-generation learning community.

http://portal.acm.org/citation.cfm?id=966263.966274


이런 연구들은 당연히 전문 프로그래머/개발자들에게도 도움이 됩니다. 앞서 소개한 PBE를 실제 프로그래머들이 사용하는 언어에 적용한 예가 Example Centric Programming입니다. 한동안 인터넷에서 엄청난 반향을 불러 일으키기도 했죠. http://subtextual.org/ 참고.

--김창준