개발자와 신호등의 차이
"좋은 소프트웨어 개발자란 코딩, 문제 해결, 단위 테스트 작성을 능숙하게 잘하는 사람이 아니다. 좋은 소프트웨어 개발자는 자신의 경력을 관리하고 목표를 성취하며 삶을 즐기면서 살아가는 사람이다."
- 존 손메즈, 『소프트 스킬』
개발자란 무엇일까? 정답은 많다. 코딩을 짜는 사람, 프로그래밍 언어를 다루는 사람, 알고리즘을 이해하는 사람, 프로그램을 만드는 사람, 개발자의 정의를 이런 식으로 적다 보면 끝이 나질 않을 거 같다. 그래서 필자는 개발자가 되고 싶은 사람을 위해 좀 더 포괄적인 의미를 담아 보려고 한다. 어떤 사람이 개발자인지 생각해보는 시간이 되었으면 한다.
코딩이란 단어는 컴퓨터 프로그래밍을 뜻한다. 자바, C, 파이선처럼 컴퓨터 언어로 프로그램을 만드는 과정을 의미한다. 도로 위에 신호등은 진행, 정지 표시를 통해 교통의 흐름을 원활하게 도와준다. 자동차는 정해진 규칙에 따라 신호등이 표시하는 빨간 불 앞에는 정지한다. 만약에 이런 규칙 없다면, 혹은 지키지 않는다면, 도로 위는 무법지대가 될 것이다. 코딩은 신호등처럼 컴퓨터에 흐름을 제어한다. 그런 신호등을 만드는 사람이 개발자이다.
1초에 1,000km를 갈 수 있는 자동차가 있다고 상상해보자. 이 차의 특징은 한번 달리면 중간에 멈추거나 쉬어 갈 수가 없다. 완주를 해야 한다. 그렇다면 이렇게 빠른 차를 효과적으로 운영하는 방법은 무엇일까? 필자라면 이렇게 하겠다. 1초 만에 대륙을 횡당 하는 퀵 배달 시스템을 개발할 것이다. 그리고 화물이 없는 시간에는 자동차 경주 대회에 참가해서 1등을 차지할 것이다. 마지막으로는 아침은 뉴욕에서 브런치를, 점심은 이탈리아에서 피자를, 저녁은 한국에서 부대찌개를 먹을 것이다. 이렇게 빠른 자동차를 활용할 방안은 무궁무진하다. 다만 어떻게 자원의 낭비 없이 잘 활용할 수 있는지에 문제만 남을 것이다.
안타깝게 그렇게 빠른 자동차는 없다. 하지만 컴퓨터에서는 빠른 연산속도를 가진 기계가 있다. 바로 CPU다.
평균적으로 CPU는 1초의 85,000,000번의 계산이 가능하다. 초등학교 때 덧셈을 하기 위해 손가락을 세어가며 하던 그 덧셈을 컴퓨터는 1초의 8천만 번을 하는 셈이다. 이 빠른 컴퓨터의 연산 능력을 사용하는 것이 바로 개발자가 하는 것이다. 그런데 아무리 빠른 자동차도 신호등 앞에서는 무조건 정지한다. 빨간불에 지나가면 사고가 나거나, 엉뚱한 데로 가버릴 것이다. 혹은 교통 위반 딱지를 뗄 수도 있다. 제대로 제어하지 않으면 무용지물이 되는 자동차처럼 빠른 CPU의 연산 능력을 제어하는 것이 바로 개발자의 몫이다.
"코딩을 할 줄 아는 사람"을 개발자라고 부른다. 하지만 좀 더 넓은 의미로 생각해봐야 한다. '경험하지 않은 문제가 주어졌을 때 해결할 수 있는가?'이다. 처음 자동차를 운전할 때 사용법이 중요하지만, 결국에는 도로 위에서 만나는 다양한 상황을 헤쳐 나가는 방법을 배우는 것이 중요한다. 개발자도 마찬가지다. 문법을 익히고, 프로그래밍 언어를 익히고 나면, 이제 코딩을 잘 다루는 사람이 되는 것이다. 처음에 개발자는 신호등에 비유하였다. 어떻게 하면 빠른 자동차를 적절한 시기에 정지시키고, 출발시키고, 어디로 흘러가게 할지 결정하는 신호등을 만드는 것이 바로 개발자이다.
개발자란 단어는 무서운 단어다. 마치 컴퓨터 천재이면서, 마크 주커버그처럼 페이스북을 뚝딱 만들어 내야 하는 사람이라고 생각할 수 있다. 하지만 좀 더 쉽게 생각해보자 개발자는 빠른 자동차를 만드는 것이 아니라, 이 자동차를 운전해서 얼마나 효과적으로, 창의적으로 운영하는 것이 개발자다. 코딩이 보편화된 이유도 바로 여기에 있다. 모든 것이 준비되어 있다. 개발 도구를 이용하여서 더 이상 문법을 외우지 않아도 자동완성을 통해 즉시 머리에 맴도는 해법을 찾을 수 있고, 모든 기능을 직접 만들지 않아도 선배 개발자들이 만들어 놓은 라이브러리를 가져다 쓸 수 있다.
그렇기 때문에 개발자가 되고 싶은 사람에게 말하고 싶다. 이런 마음을 준비하라고 말하고 싶다.
어떤 꿈을 꾸는가? 얼마나 많은 기대를 가지고 있는가?