소프트웨어 개발의 미래

포트란이 등장한 이후로 전산업계에는 두 가지 부류의 사람이 생겨났다. 문제의 해법을 어떻게 하면 쉽고 명확하게 서술할 수 있을지 고민하고 새로운 도구를 개발하는 부류와, 그 고민이 불필요하다고 깎아내리는 부류가 그것이다. 상당수의 개발자들은 그저 월급을 위해 코딩을 배운 일상인이므로 자신의 직업에 그다지 열정과 성실함을 보이지 않는다. 그래서 자신의 일을 좀 더 잘 하기 위한 고민을 하는데 여가시간을 들이고 싶어하지 않으며, 차라리 매번 원시적인 방법으로 비효율적인 노동을 하는 것을 선택한다. 그리고 새롭고 편리한 방법은 일단 무시하고 보는 것으로 자신을 정당화한다. 그러나 개발자들의 세계는 지속적으로 새로운 개발도구들을 수용해왔고, 펀치카드에 기계어를 입력하던 시절에는 상상하기 힘들 만한 생산성을 개발자 개인이 지닐 수 있게 되었다.

프로그래밍의 초창기에 생산성의 향상은 더 진보된 프로그래밍 언어를 택함으로써 주로 일어났다. 순차 언어보다는 구조 언어가 생산적이고, 구조 언어보다는 객체 지향 언어가 더 생산적이다. 순차 언어는 코드의 재사용성이 낮기 때문에 좋은 라이브러리를 갖기 힘들었다. 언어에 내장된 기능 정도만을 이용해서 프로그래밍해야 했으며, 그만큼 언어 자체의 성능이 생산성에 중요한 영향을 미쳤다. 그러나 구조 언어 이래로 코드를 재사용하는 것이 쉬워지면서 라이브러리가 구축되고, 생산성의 진보는 라이브러리의 진보와도 비례하게 되었다.

요즘은 프로그래밍 언어의 특징들이 어느정도 공식화가 된 상태이다. 전혀 새로운 개념을 갖고 구성된 언어가 등장하는 경우는 별로 없으며, 기존 언어의 여러 장점들을 통합해서 용도에 맞게 재구성한 언어가 만들어진다. 그렇다 보니 언어의 중요성은 라이브러리의 중요성에 비해 점차 낮아지고 있다. 순차 언어에서 구조 언어로 이동하던 시절에는 개발자는 좋은 언어를 발견하면 훌쩍 떠날 수 있는 간편한 몸이었다. (프로젝트 관리와 회사의 정책이라는 면에서 제약이 가해질 수 있지만, 적어도 기술적으로는 그렇다.) 그러나 라이브러리의 비중이 높아지면서 업무에 적합한 언어를 고르고 그에 따른 라이브러리를 선택하기 보다는 업무에 적합한 라이브러리를 고름으로써 언어는 저절로 선택이 되는 경우가 늘어간다. 실무에서 언어를 선택할 때, 언어적으로는 Java와 C++양쪽 모두 사용에 문제가 없지만, 훌륭한 라이브러리가 갖춰지지 않아서 C++을 선택하지 못하는, 혹은 그 반대의 경우가 비일비재하다. 그리고 PHP와 같이 언어적 장점이 별로 없는 경우에도, 편리한 실행환경과 라이브러리가 갖춰지면 두터운 사용자층을 얻게 되는 경우도 있다.

라이브러리는 언어의 어휘와도 같다. 잘 정의된 어휘는 깊이있는 사고를 돕는다. 오픈소스 커뮤니티에서는 탄탄한 라이브러리들을 지속적으로 발표하고 있으며, 이것을 통해 개발자는 자신의 생산성을 날로 높여갈 수 있다. 지금은 여러 문제 영역에서 한창 라이브러리가 구축되고 있는 단계이다. 앞으로 10년가량이 더 지난다면, 어지간한 분야에서는 전통있는 라이브러리들이 갖춰져 있을 것이고, 그것을 어떻게 잘 조합하느냐 하는 것이 개발자의 능력을 가늠하는 기준이 될 것이다. 예전처럼 바닥부터 많은 양의 코드를 작성해나가는 것은 대체로 불필요할 것이고, 개발자가 새로 작성하는 코드는 각 라이브러리들을 풀처럼 이어주는 배관 역할만을 할 것이다.

한마디로 말하자면, 개발자들은 점점 더 많은 라이브러리를 밀도있게 학습해야 하게 되었다. 칼 한 자루로 전장을 누비는 영웅 장수가 되기 위해서는 말이다.

Monthly Archives

Pages

Powered by Movable Type 5.14-en

About this Entry

This page contains a single entry by pocorall published on August 25, 2006 8:08 PM.

[fiction] 거울 전쟁 was the previous entry in this blog.

is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.