아마추어 사진작가와 프로 사진작가를 구분하는 방법이 있다. 아마추어 사진작가는 나만 만족하면 된다. 내가 찍은 사진이 내 맘에 들기만 하면 된다. 하지만 프로 사진작가라면 자신의 맘에만 들면 안 된다. 다른 사람에게도 맘에 드는 사진이어야 한다.
프로그래밍도 마찬가지다. 아마추어 프로그래머는 자신만 쓸 프로그램을 만든다. 이러한 프로그램은 코드의 품질도 상관없다. 아주 자세히 사용법을 명시하지 않아도 된다. 내가 이미 잘 알고 있기 때문이다. 기능 요구사항도 내 맘대로 일정도 마음대로다.
하지만 프로는 다른 사람들이 쓸 프로그램을 만든다. 그리고 그 규모도 크기 때문에 혼자 만들지 않는다. 프로그램의 생명 주기도 다르다. 요구사항도 외부 조건에 의해서 변경된다. 다른 사람들이 사용한다는 사실 하나가 여러 가지 영향을 미치게 된다.
아마추어는 스스로 정한 목적을 달성하기만 하면 된다. 하지만 프로는 목적 뿐만 아니라 부수적으로 챙겨야 하는 디테일들이 많다. 목적을 일단 달성하더라도 거기서 멈추지 않고 오히려 시작된다. 흔히 “악마는 디테일에 있다”라고 한다.
프로그램은 명확한 수명과 활용 범위를 염두에 두고 설계된다. 수백 년 동안 유지될 수 있을 만큼 논리적인 방법으로 만든 작인의 작품처럼, 프로그램에는 과도하게 설계된 부분도 미진하게 설계된 부분도 있어서는 안 된다. 프로그램을 개발할 때는 그 용도에 따라 적절한 수준으로 노력을 기울여야 한다. 프로그래머가 일을 잘하고 있는지 알려면 그가 주어진 문제에 대해 적절한 수준으로 작업하고 있는지 보면 된다.
그러나 프로그래머는 문제를 해결하고 기울이는 노력 수준을 조정하는 데 보통 실패한다. 풀어야 할 문제가 무엇인지를 모르기 때문이다. 목표에 대한 인식이 다르면 프로그래머들은 완전히 다르게 행동한다. 예를 들어 일정 시간 안에 최대한 프로그램을 빨리 만들어야 한다는 목표와 시간 내에 가장 효율적인 프로그램을 만들어야 한다 라는 목표는 완전히 다르게 행동하게 만든다. 목표를 명확하게 설정하는 것이 중요할 수 있다. 그리고 목표에 따라서 다르게 행동할 수 있음을 이해하는 것이 중요하다.
프로는 요구 명세 수집에서부터 최종 프로그램 납품에 이르는 과정 동안에 다양한 재능이 필요한 다양한 작업을 해야 한다. 각 작업마다 필요한 재능이 다를 수 있다. 그래서 적재적소에 필요한 재능을 투입해야 한다. 그러려면 다양성을 인정하고 상호 관심과 개성 존중을 해야 한다.
자바스크립트로 직접 만들면서 배우는 - 자료구조와 알고리즘 강의 바로 가기
실습으로 마스터하는 OAuth 2.0: 기본부터 보안 위험까지 - OAuth 2.0 강의 바로 가기
기계인간 이종립, 소프트웨어 개발의 지혜 - Git 강의 바로 가기
코드숨에서 매주 스터디를 진행하고 있습니다. 메일을 등록하시면 새로운 스터디가 시작될 때 알려드릴게요!