Search Results for 'toy program'

1 POSTS

  1. 2006.10.08 Toy Problem과 Toy Program

Toy Problem과 Toy Program

Posted 2006. 10. 8. 01:07
인공 지능(Artificial Intelligence) 수업에는 여러 가지 장난감 문제(toy problem, 현실의 문제를 간단하게 만든 것)을 다룬다. 인공지능이 풀어야 하는 현실 문제는 정형화 하기에 너무 복잡하기 때문에 개념을 소개하기 위해 인위적으로 쉬운 문제를 제시하고, 이를 풀어나가는 알고리즘을 설명하는 것이다. 대부분의 인공 지능 알고리즘은 장난감 문제를 거의 완벽하게 풀어낸다. 그냥 수업만 들어서는 정말 좋은 알고리즘인 것 같고, 더 공부할 게 남았을까라는 생각이 들 정도이다.

하지만 장난감 문제를 쉽게 풀어낸 알고리즘을 현실적인 문제로 가져가면 예상치 못했던 여러가지 문제가 발생한다. 문제의 탐색 공간(Search Space)가 기하 급수적으로 커져서 쓸모 없는 알고리즘이 되기 다반사이고, 알고리즘이 상정한 몇 가지 가정이 무너짐으로써 알고리즘 자체가 성립되지 않는 경우도 많이 있다. 그 순간 인공지능은 순수한 과학(science)에서 엔지니어링(engineering)으로 넘어가게 된다.

비슷한 비유가 프로그래밍 언어에도 적용되지 않나 싶다. 보통 새로운 언어가 개발되면, 언어의 장점을 알리기 위해 간단한 문제 몇 가지를 골라 기존의 프로그래밍 언어에 비해서 얼마나 세련되고 아름답게 그리고 짧은 코드로 그 문제를 풀 수 있는지 보여준다. 이런 장난감 프로그램 몇 개만 잘 골라서 보여주면 기존 언어에 식상해 있던 사람들은 금세 그 언어에 열광하게 된다. 파이썬/루비에 열광하는 많은 개발자들은 실상은 이런 코드 단축의 예에 매료되어 해당 언어를 공부하게 되었을 것이다.

스크립트 언어의 특징은 다음과 같다.

1) 인터프리트 된다.

2) 타입 선언이 암묵적이다. (Implicit Declaration)

3) 동적 타입(Dynamic Typing)이다.


4) 정규식(RE)와 문자열 처리 기능이 내장되어 있다.


위4가지의 특징은 스크립트 언어를 강력하게 만들며, 작은 프로그램을 빠른 속도로 프로토타이핑(prototyping)할 수 있게만들어주는 언어의 특징이다. 반대로 이런 특징(특히 1,2,3)은 크고 정교한 프로젝트에는 부정적인 영향을 미치는 요소이기도하다. 파이썬이나 루비가 이런 한계를 뛰어 넘었다면 그 이유는 무엇일까? 회사에서 파이썬이나 루비를 도입하고 싶다면, 직장상사나 팀원들에게 무엇을 근거로 해당 언어의 도입을 이야기할 것인가?

소프트웨어 개발을 업으로 삼고 컴퓨터 공학을 하는 사람이라면, 여기서 한 걸음 다 나아가야 한다. 국내 스크립트 언어 사용 개발자들에게 아쉬운 것은 실제 프로젝트의 적용 사례가 빈약하다는 점이다. 개발자들이 개별적으로 써보니깐 코드도 짧고 가독성도 높고 생산성이 뛰어나서 좋다고 말은 하는데, 실제로 스크립트 언어를 써서 어떤 프로젝트를 성공적으로 수행했는지에 대한 말을 찾아보기가 어렵다.

회사에서 사용하는 개발 언어를 바꾸고 싶다면 언어의 장점을 회사의 생산성 향상과 연결시킬 수 있는 구체적인 숫자를 제시할 수 있어야 한다. 회사 내 혹은 팀 내의 보수적인 개발자들을 설득하고 싶다면 토이 프로그램의 마법만을 보여줄 것이 아니라 구체적인 적용 사례을 보여주고 생산성 증가 정도를 구체적인 숫자로 제시해야 할 것이다. 그런 정보 없이는 만병통치약을 선전하는 약장수와 다를 것이 없게 된다.