여기에 가시면 EDSL의 개략적 내용과 참고자료, 당시의 발표자료 등을 보실 수 있습니다. 그 페이지에 몇가지 내용을 추가하고 발표자료도 첨부하고 했습니다(늦어서 죄송합니다~).
당시에는 제가 간단하게 강의를 하고 청중분들과 함께 재미있는 게임들을 했습니다. 제가 문제를 내어드리고, 각 팀에서 선택한 일반 프로그래밍 언어를 이용해서 그 문제를 잘 표현하는 EDSL을 설계, 구현하는 것이었죠. 나중에는 같은 문제 영역인데 조금 변화된 요구사항을 드려서 자기 팀에서 구현한 EDSL이 잘 확장할 수 있는지 실험해보는 시간을 가졌습니다.
(E)DSL에 대해 한가지 생각해 볼만한 문제를 드리겠습니다. 예를 들어 다음과 같은 도형을 작도하는 프로그램을 만들어야 한다고 칩시다.
*
**
***
****
*****
어떤 프로그래밍 언어가 있다면 가장 좋을까요? 질문을 바꾸어 봅시다. 전화기로 친구에게 이 도형을 똑같이 그려줄 것을 부탁한다면 어떻게 설명하시겠습니까?
일단 별을 하나 찍어. 그리고 다음줄로 넘어가. 별 하나 찍고, 또 별 하나 찍고, 다음줄. 별 하나, 별 하나, 별 하나, 다음 줄. ...
이 방식은 비효율적입니다. 설명하면서 실수하기도 쉽습니다. 중복이 많습니다. 만약 "컴퓨터"라는 개념을 머리속에서 완전히 지워버리고 설명한다면 어떻게 하시겠습니까? 그러면서도 모호성을 적절히 줄인다면? 이 가상적 프로그래밍 언어에서 이등변 삼각형 작도를 하려면 어떤 표현을 써야 합니까? 다이아몬드는? 사각형은? 원은?
작년의 EDSL 세션은 저에게도 매우 의미있는 시간이었습니다. 뭔가 발표하고 가르치고 공유하는 경험을 하고나면 머리가 정리되기 때문입니다(가르치는 것이 최고의 학습 전략이다). 개인적으로는 EDSL이라는 주제를 발견하고 거기에 심취한 이후로는 제가 과거에 짰던 코드들은 거의 대부분 부족한 점들이 많이 발견되더군요. 역시 언어는 사람의 이성을 계발하는 데에 최고의 도구 중 하나인 것 같습니다.
오늘의 명언 하나: 워드 커닝햄 가라사대, "스몰토크(OOPL)에서는 새로운 언어를 만들어 내는 것 외에 프로그래밍 하는 방법은 없다".
--김창준