저는 일반인에게 프로그래밍을 알려주는 ‘생활코딩’이라는 비영리 활동을 진행하고 있습니다. 최근 교육계의 뜨거운 관심사인 프로그래밍 교육에 대한 저의 부족한 생각을 적어봅니다. 우선 저는 공교육에 대해서는 아는 것이 거의 없습니다. 그래서 프로그래밍을 공교육이 수용하는 것에 대해서는 특별한 견해가 없습니다. 다만, 기왕에 시행된다면 소프트웨어를 통해서 생산의 보람, 표현의 즐거움을 아이들이 만끽할 수 있었으면 좋겠습니다. 곰곰이 왜 프로그래밍이 이토록 중요한 산업으로 주목받고 있을까를 생각해 봅니다. 여러 가지 이유가 있겠지만 저는 API와 UI라는 것을 매개로 이 이야기의 실마리를 풀어가 보겠습니다. UI라는 말을 들어보셨나요? User Interface의 약자입니다. UI는 컴퓨터, 스마트폰 등을 조작하는 장치들을 말합니다. 컴퓨터의 키보드 모니터 또는 각종 소프트웨어의 그래픽컬한 버튼들 등을 포괄적으로 UI라고 부릅니다. 간단한 프로그래밍을 한번 해볼까요? 아무 브라우저나 열고 주소창에 아래와 같은 코드를 입력해보세요.
javascript:alert(‘hello world’)
경고창이 뜨면서 hello world라고 적혀있을 것입니다. 프로그래밍을 한 번도 안 해보신 분이라면 축하를 드려야 할 것 같습니다. 방금 여러분은 생애 처음으로 프로그래밍한 것이기 때문입니다. 그 의미를 음미해 볼까요?
alert(‘hello world’)
코드의 문법을 잘 몰라도 괜찮습니다. 대신 의미를 짐작해볼까요? alert는 경고라는 뜻입니다. 그 뒤에 hello world가 따라오고 있으니까 짐작건데 hello world를 경고하라는 뜻일 것 같습니다. 그리고 실행을 해보니까 경고창이 뜨면서 hello world가 출력되고 있습니다. 대충 어떻게 돌아가는 것인지 짐작이 되지요?
그럼 한가지 질문을 하겠습니다. 과연 hello world가 적혀있는 경고창을 만든 것은 여러분일까요? 아리송하지요? 정답은 없지만, 저라면 이렇게 대답할 것 같습니다. “내가 만들기도 했고, 내가 만들지 않기도 했다”
경고창이 실행된 것은 분명 여러분이 의도한 것입니다. hello world가 출력된 것은 여러분이 (‘hello world’)라고 했기 때문입니다. 따라서 이 경고창은 여러분이 만든 것입니다. 그런데 사실은 조금 복잡합니다. 코드를 다시 보시죠.
alert(‘hello world’)
경고창의 크기가 위의 코드에 적혀있나요? 경고창의 위치, 경고창을 닫는 버튼, 실행될 때 들리는 소리, 경고창의 모양 등이 위의 코드에 포함되어 있나요? 아니죠. 경고창의 디자인, 기능성은 여러분이 만든 것이 아닙니다. 그럼 도대체 누가 만든 것일까요?
결론적으로 말씀 드리면 웹브라우저 개발자가 만든 것입니다. 브라우저 개발자는 경고창의 크기, 모양, 위치 그리고 동작방법 등을 코드로 작성해서 미리 경고창을 만들어 놓고 준비시켜 놓습니다. 그리고 여러분이 alert를 실행하면 미리 만들어 놓은 경고창이 실행되도록 컴퓨터에게 명령을 해놓습니다. 그럼 브라우저 개발자가 이 모든 것을 다 만든 것일까요? 아닙니다. 웹브라우저는 운영체제 위에 설치되죠? Windows, OSX, UNIX, LINUX와 같은 것을 운영체제라고 합니다. 이런 운영체제는 버튼이나 사운드와 같은 재료들을 만들어 둡니다. 이 재료들을 웹브라우저가 사용해서 경고창을 만든 것입니다. 정리해볼까요?
● 사용자 -> 웹사이트 -> 웹브라우저 -> 운영체제 -> 하드웨어
● 사용자는 ‘interface’를 이용해서 웹사이트를 사용합니다.
● 웹사이트는 ‘interface’를 이용해서 웹브라우저를 사용합니다.
● 웹브라우저는 ‘interface’를 이용해서 운영체제를 사용합니다.
● 운영체제는 ‘interface’를 이용해서 하드웨어를 사용합니다.
그런데 위의 관계에서 사람과 기계를 구분해 볼까요?
● 사람 : 사용자
● 기계 : 웹사이트, 웹브라우저, 운영체제, 하드웨어
사람은 기계가 아니기 때문에 조금 특별하게 구분을 합니다.
● 사용자는 ‘User Interface(UI)’를 이용해서 웹사이트를 사용합니다.
● 웹사이트는 ‘Application Programming Interface(API)’를 이용해서 웹브라우저를 사용합니다.
● 웹브라우저는 ‘API’를 이용해서 운영체제를 사용합니다.
● 운영체제는 ‘API’를 이용해서 하드웨어를 사용합니다.
이 관계가 눈에 보이시나요? 쉽지 않은 이야기 입니다. 하지만 오늘날 프로그래밍 열풍을 이해하는데 API를 이해하는 것은 꽤나 중요합니다. 프로그램을 만든다는 것은 결국 API를 사용해서 동작하는 소프트웨어를 만드는 것입니다. 즉 프로그램은 그 프로그램에게 API를 제공하는 기반이 반드시 필요합니다. 지금까지 API를 제공하는 기반이 많지는 않았습니다. 대체로 운영체제가 API를 제공하고, 그 운영체제 위에서 동작하는 소프트웨어들은 그 API를 이용해서 사용자가 사용할 수 있는 응용프로그램을 만듭니다. 이 관계를 도식화하면 아래와 같습니다. 사용자 -> 응용프로그램 -> 운영체제 간단하죠? 그런데 웹브라우저가 등장하면서 이런 관계가 많이 바뀌었습니다.
사용자 -> 웹사이트 -> 웹브라우저 -> 운영체제> 그리고 오늘날 많은 웹서비스들이 API를 제공합니다. 페이스북의 예를 들어볼까요?
사용자 -> 페이스북앱 -> 페이스북 -> 웹브라우저 -> 운영체제> 페이스북뿐만이 아닙니다. 수많은 트위터 클라이언트들을 기억하시나요? 주식회사 트위터가 직접 만들지 않은 트위터 클라이언트가 트위터의 내용을 서비스 할 수 있었던 것은 바로 트위터가 API를 공개했기 때문입니다. 이 API를 이용해서 클라이언트를 만들 수 있었던 것이죠. 또한 많은 장치들이 그것을 쉽게 제어할 수 있는 API를 제공하고 있습니다. 언젠가는 자동차나 집도 API를 제공하게 될 것입니다. 자동차나 집 혹은 가전의 앱스토어에서 앱을 깔아서 이것들을 제어할 수 있는 날이 올 것입니다. 그것이 가능한 것은 바로 API가 제공되기 때문입니다. 그 이면에는 보다 인간 친화적인 프로그래밍 언어들의 등장도 한 몫을 했습니다. 쉬운 사용성을 제공하는 대표적인 프로그래밍 언어로는 파이썬, 루비, 자바스크립트, PHP와 같은 것이 있습니다. (그냥 언어가 쉬워졌다고만 이해하시면 됩니다.) 그리고 좀 더 극단적으로 쉬운 언어로는 스크래치를 들 수 있을 것입니다. 이건 시간될 때 한번 보시면 좋을 것 같습니다. http://opentutorials.org/course/1415/6951
논란의 여지가 있지만 더욱 극단적인 예로 저는 애플의 시리(siri)와 같은 사례를 들고 싶습니다. 물론 지금의 시리는 프로그래밍 언어라고 할 수는 없습니다. UI에 가깝죠. 하지만 만약 아래와 같이 시리를 제어할 수 있게 된다면 시리는 프로그래밍 언어라고도 할 수 있을 것입니다. 우리는 월리라는 음성인식 인공지능 시스템이 있다고 가정해봅시다. “월리, 주소록에서 ‘받는 사람’들만 찾아서 ‘할 말’ 메시지를 ‘방법’으로 보내줘.”
위의 간단한 명령에는 프로그래밍 언어의 정수라고 할 수 있는 조건문, 반복문, 배열, 변수와 같은 개념이 모두 들어있습니다. “월리, 그리고 앞으로 내가 단체 메시지이라고 부르면 이걸 하는거야.”
위의 명령은 단체 메세지라는 프로그램을 만든 것이죠. 이 프로그램은 이제 반복적으로 사용됩니다. 이제 아래와 같이 프로그램을 실행해 볼 수 있겠죠. “월리, 단체 메시지를 사용할래. 받는 사람은 동창 그룹이고 방법은 단체톡으로 내용은 안녕이야.”
좀 다르게 보낼 수도 있겠죠. “월리, 단체 메시지, 이고잉과 리체 그리고 그라피티에, 이메일, 내일 모입시다!”
이렇게 하면 복잡한 작업도 쉽게 사용할 수 있겠죠. 말하자면 프로그램을 실행한 것이죠. “그리고 단체 메시지를 다른 사람도 쓸 수 있게 공유해줘.”
이것은 자신이 만든 프로그램을 앱스토어에 올리는 것과 같습니다. 아직 우리는 시리와 같은 시스템을 UI라고 생각합니다. 위에서 언급한 기능성이 없기 때문이죠. 하지만 기계가 인간의 언어를 이해하는 능력이 발전함에 따라서 위와 같은 시스템이 만들어진다면 어떻게 될까요? 지금까지 UI라고 믿고 있었던 것이 시나브로 API가 되어 있지 않을까요? 이처럼 API와 UI의 구분은 본질에서는 모호한 것입니다. API를 제공하는 시스템의 폭발적인 증가와 프로그래밍 언어의 비약적인 발전은 프로그래밍을 보다 대중적인 활동으로 만들 것 같습니다. 역사는 참 아이러니 합니다. 시스템이 쉬워질수록 사람들은 그것을 이용해서 더욱 어려운 일을 합니다. ‘에니악’이 처음 등장했을 때 대중들은 가장 쉬운 것을 했습니다. 아예 컴퓨터를 사용하지 않았죠. 컴퓨터는 소수 엘리트의 전유물이었습니다. 개인용 컴퓨터가 등장하면서 대중은 무려 엑셀이나 워드 같은 것을 이용해서 복잡한 문서 작업을 했습니다. 스마트폰이 등장하면서 컴퓨터와는 담을 쌓아두고 지내던 저희 어머니는 이제 게임도하고 블로깅도 하고 단체로 채팅도 하고 합니다. 그런 연장선상에서 프로그래밍도 점차 대중적인 활동으로 자리 잡게 될 것이라고 생각 합니다. 프로그래밍에 대한 최근의 관심은 그러한 변화의 반영이 아닐까요?