오늘 현대대수학 첫 시간에 교수님이 일반적인 무협지의 이야기에 대해 약간 말을 해 주셨다. 사실 수학에서의 추상화의 힘 이런것을 말하던 부분이었던것 같다.

그중 기억나는부분을 있다.

 주인공은 정공 문파의 제자가 되서 숨쉬는법, 잠자는법 이런것을 가르침 받고 주인공의 라이벌인 원수의 아들은 사문의 제자가 되어 창쓰는법, 활쓰는법 이런것을 가르침을 받는다.

그리고 대련을 하는데, 처음에는 주인공이 계속 진다. 그러다가 어느날, 몸이 가벼워지고, 자신이 달라짐을 느낀 주인공은 원수의 아들을 통쾌히 때려 눕힌다.


내가 왜 프로그래밍 언어라는 제목을 달고 이런 이야기를 하느냐면, 프로그래밍 언어도 이와 똑같다고 생각하기 때문이다. 프로그래밍 언어만 다양하고 열심히 익힌 사람은 처음엔 대단할줄 몰라도, 결국 컴퓨터에 대한 이해 없이는 좋은 프로그램을 만들기는 힘들다. 사실 언어 자체를 잘하는것도 중요하지만, 그것은 프로그래밍을 얼마나 잘하느냐와 전혀 다른 문제다.

보통 프로그래밍을 한다고 하면, 요구조건에 맞춘 설계부터 시작한다. 설계를 한다면 보통 내부적인 구현인 자료구조와 객체가 가지고 있는 성질을 보존하기 위한 알고리즘들, 그리고 외부 인터페이스의 설계를 하게 될 것이다.
프로그래밍 언어는 여기서 어느 인터페이스를 가지냐에 따라 보통 달라진다. 이클립스처럼 사용자의 OS에 관계 없이 일관된 인터페이스를 가진다면, JAVA를 이용하고 특정OS나 인베디드 환경에서 돌아간다면 C나 C++을 사용하게 될것이다.

따라서 중요해지는 능력은 그 시스템에서 제일 효율적인 자료구조, 알고리즘, 객체관계들을 알맞은 프로그래밍 언어로 표현하는 능력인데, 사실 이것은 언어 자체를 얼마나 잘 아느냐보다는 그 시스템에 대해서 얼마나 잘 알고 있냐가 중요한 영향을 미친다.


사실 컴과 전공과목중에 프로그래밍을 직접 하는 과목을 그렇게 많지 않고, 프로그래밍 언어 자체를 배우는 수업은 거의 전무하다. 그 이유도 바로 이런것에서 나오지 않았을까 싶다.