왜 Mathematica를 사용하는가?

모든 컴퓨터 언어는 모두 문제를 풀 수 있다. 유일한 차이점은 “효율성”이다. (티스푼으로 눈을 치우는 것을 생각해 보라. 가능은 하지만 효율적이지 않다.) 이와 마찬가지로 그 어떤 컴퓨터 언어도 모든 문제에 다 효율적일 수는 없다. 따라서 현대 시대 과학/공학 부분에서의 지식 근로자들은 다양한 경우의 문제 해결을 위해(홍차에는 티스푼, 눈 치우기 위해서는 삽 이 필요하듯이) 평생을 두고 계속해서 여러 종류의 컴퓨터 언어를 익히는 게 불가피하게 되었다. Mathematica 하나로만 혹은 그 어떤 다른 컴퓨터 언어 하나만을 가지고 세상의 모든 복잡한 문제를 풀기에는 현대 시대가 너무 급속하고 예측 불허의 시대인 것이다.

그렇다면 시중에 나와 있는 참으로 다양하고, 때에 따라서는 많은 경우가 무상으로도 제공되는 많은 프로그램밍 언어 중에서, 왜 Sabio Research 프로그램은 그 중 가장 사용료가 비싼 Mathematica를 선택했는가? (전문가용은 무려 $2,495 이다)

그 이유에 대해 설명하고자 한다.

개요

우리는 지금 학생들이 유일하게 접할 컴퓨터 언어에 대해서 말하고 있는 것이 아니다. 대학에 진학하기 전의 학생들이 과학 연구뿐만이 아니라 대학에 진학하고 대학원 과정, 그리고 사회에 나가서도 다양하게 사용할 수 있는 첫번째로 접할 컴퓨터 언어에 대해 말하고 있는 것이다. 다시 말해서, 미분, 적분, 수의 이론 문제, 통계, 함수의 복합 분석, 영상 정보 처리, 전산학, 도식화, 3차원 모델링, 만화 영화 동영상, 물리 모의 실험, 유전자 연구, 단백질 구조 해석, 주식 시장 예측, 환경 연구 등을 다 다룰 수 있는 언어 하나를 우선 선택하여 시작하는 것이고 앞으로 학생이 성장하고 사회에 진출하면서 필요에 따라 다른 언어를 배우게 될 것이다.

비용의 문제

비용은 문제가 되지 않는다. 왜냐하면 Mathematica가 $2,495이긴 하지만, 학생용은 같은 기능으로도 $100/year에 구입할 수 있다. 학생들은 사실 일년에 $100도 지출할 필요가 없는 게, 많은 경우 ARML, ISEF, KSEA 등의 수학, 과학 경시대회에서 참가자들 혹은 우승자에게 Mathematica license를 무상으로 지급하기 때문이다. 또한 많은 성적 우수 고등학교나 명망 높은 대학과 대학원에서도 그들의 학생들에게 무상으로Mathematica license를 지급한다.

C++, C#, Java이상의 장점

Mathematica는 compiled 가 아닌 interpreted language이다. 그리고 더 빠른 성능을 위해 국부적으로 compile하는 것도 가능하다. 그래서 학생들은 자신들의 명령에 대한 결과를 즉각 확인할 수 있고 맞는 결과가 나올 때까지 계속해서 코드 수정을 할 수가 있다. 이런 언어 습득 방법은 edit-compile-link cycle 로 배우는 것에 비해 몇 배나 더 빠르게 된다.

Matlab, Mathcad이상의 장점

Mathematica는 순수 수학분야에서 우수하고, 다른 컴퓨터 언어보다 수학적 기능이가장 많이 (library가 아닌) 내장되어 있다. Matlab의 사용자가 훨씬 많지만 그들은 Matlab이 최적화로 사용 가능한 전문적인 (예를 들면 control) 응용 프로그램의 사용자들이다. 그런 전문가들은 우리 학생들처럼 다양한 배열의 문제를 해결하지 않아도 된다. 또한, 그들은 일반적으로 functional programming (procedural programming이 아닌)도, 또한 그것이 얼마나 빨리 아이디어를 현실화시키는지를 잘 모른다.

한 예로 여기에 나온  Matlab code(Matlab의 기능을 선보이고자 Matlab에 의해 작성된 주제와 코드) 와Mathematica code (Mathematica는 어떻게 문제를 다르게 처리하는지 보여주기 위해Mathematica에서 작성한)의 예를 보자. 결과: 똑같은 문제 수행을 위해 Matlab은 구십줄의 코드를 사용한 반면 Mathematica는 단 열세줄의 코드를 사용하였다. 우리는 여기에서 Mathematica사용자가 얼마나 더 빨리 일을 마칠 수 있는가를 잘 볼 수 있다.

Python이상의 장점

Mathematica는 컴퓨터 언어일 뿐만 아니라 환경 (거의 운영 체제)이다. 문제 해결에만 사용되는 것이 아니라 수학/기술적인 문서 처리까지 가능하다. 학생들은 생각하고, 시도하고, 나름대로 고쳐보고, 해결한 것을 리포트로 작성하기까지 하나의 환경 안에서 다 마칠 수가 있다. Mathematica 는 거대한 library가 내장되어 있기에 학생이 어떤 기능을 원하건, Mathematica안에서 다 찾아 볼 수가 있고 타사 library에 의존하지 않아도 된다. 반면 Python을 사용할 경우, 새로운 기능을 갖추기 위해 외부의 library를 여러개 연결해야만 Mathematica 수준의 성능을 갖추게 된다. 그리고 그렇게 다 연결을 해도 수학, 그래픽 3D Dynamic 성능의 수준에서 Mathematica 를 따라오지 못한다. 여기에 Python과 Mathematica의 비교 결과가 있다.

Mathematica에 대한 일반적인 편견

많은 사람들이 Mathematica를 안다고 생각한다. 그들은 어떤 수학 문제를 풀기 위해 Mathematica를 사용한 적이 있는 사람들이다. 대부분 문제 해결을 위해 몇 줄의 코드를 사용했을 것이고 사실 일반적으로 그것이 Mathematica는 한 두 줄로 대부분의 수학 문제를 풀어낸다. 그러나 그들은 Mathematica가, 특히 최신 버전의 경우 무엇을 얼마만큼 할 수 있는지 모른다. 만일 그들이 최신 버전으로 전체를 본격적으로 사용해 작성한적이 한번도 없다면, 그들이 알고 있는 것이 한물간 내용 뿐이라 그들의 Matheamtica에 대한 의견은 코끼리 장님의 우화에 해당된다.

결론

학생들은 다용도로 쓸 수 있는 강력한 컴퓨터 언어를 한가지는 꼭 익혀야 한다. 컴퓨터를 사용하면 몇 시간 또는 몇 일이 걸릴 수 있는 문제를 단 몇 초만에 다 풀 수 있고 인간의 두뇌로는 엄두를 못내는 큰 문제도 컴퓨터를 사용하여 이해할 수 있기 때문이다. Mathematica는 그 역할에 이상적이다. Mathematica를 익힘으로, 학생들은 그들의 아이디어를 검증하고 생각을 입증시킬 수 있다. 여기에 예가있다.

Mathematica를 완전히 알면 Mathematica 를 사용하지 않는 곳에 가서도 두각을 나타내며 쉽게 문제를 풀 수 있다. 예를 들어, 여름 인턴쉽 기간 동안 학생들이 만일 특정한 컴퓨터 언어를(예를 들어 Python같은) 이용하여 어려운 문제를 해결하기로 되어 있다면, 먼저 Mathematica로 신속하게 문제를 해결할 수 있는 시범을 감독 교수에게 보여 깊은 인상을 줄 수 있다. 그런 후 감독교수의 요구 조건에 맞추어 대상 언어로 알고리즘을 포트하면 된다.

Mathematica는 C, C++, Java와 같이 procedural 이며, 동시에 Scheme, Haskell과 같이 functional이고, Prolog처럼 rule-based 기반까지 갖추고 있는 유일한 컴퓨터 언어이다. 학생들은 처음으로 배우는 컴퓨터 언어가 이처럼 다양한 특성을 갖고 있다는 것에서 “컴퓨터 언어”에 대한 정의와 생각을 넓힐 수가 있다. Mathematica로 컴퓨터 언어를 처음 배우게 되는 사람들은 추후 배우는 언어가 functional 이거나 procedural 이거나 관계 없이 쉽게 이해하고 배운다.

소프트웨어 엔지니어들이 흔히들 말하는 Mathematica의 단점이라면 syntax가 이해하기 어렵다는 것이다. 하지만 그들이 정말 의미하는 것은 그들의 두뇌가 이미 procedural 프로그래밍에 익숙해지도록 형성이 되어 있기에 functional 프로그래밍 개념을 이해할 수가 없었다는 말이다. 자신의 굳은 머리로 이해하기 어려웠으니 새로 시작하는 어린 학생들에게도 어려울 것이라 간주하여 조언을 하는데 이는잘못된 일이다. 어른이 배우기 어려워 하는 외국어가 어린이에게는 쉬운 것과 같은 원리가 컴퓨터 언어에도 그대로 적용된다.

그리고 학생들이 아직 소프트웨어/전기/기계 기술자가 아니라는 것을 기억하는 것이 중요하다. 사실, 어린 학생들은 여전히 모든 가능성에 열려 있다. 수업, 연구, 인턴쉽, 과학 경시를 준비하는 학생들은 확장성, 보안, 목표 지향적, 코드의 실행 속도에서 경쟁하는 것이 아니다. 이것은 아이디어-알고리즘 개발 같은- 싸움이고 얼마나 빨리 생각을 실행으로 돌릴 수 있는지에 대한 시간의 경쟁인 것이다. Mathematica는 주어진 시간 안에 아이디어를 살아있고 dynamic 3D interface로 실행할 수 있는 최상의 도구이다.

상업화를 해야 한다면? Mathematica로 쓴 프로그램을 상업화 하기에는 제약이 많다. 그런 때는 Mathematica의 개념/알고리즘을 실험해 Java/C++/C# 의 코드로 전환할 수 있는 기술자를 구해 코드를 쓰게 하여 상업용 프로그램을 만들라. 현대 경제에서, 우리는 코딩만으로 기술적 수퍼 스타가 될 수 없다는 것을 반드시 기억해야 한다. 지금 배우는 학생은 알고리즘 개발에 성공하여 과학 경시 대회의 심사 위원, 대학 입학 사정관들, 교수와 벤처 자본가들에게 선보일 수 있는 아이디어 발상 그리고 그 증명에서 성공해야 하는 것이다.