from: http://msdn.microsoft.com/ko-kr/magazine/cc163418.aspx

MSDN Magazine > Home > All Issues > 2007 > June >  개발자로서의 자부심

개발자로서의 자부심
Adam Barr


대학 졸업반 시절 컴 퓨터 과학을 전공하고 투자 은행에 취직하게 된 동기생과 나누었던 대화가 기억에 남습니다. 그는 소프트웨어 설계 분야의 일을 하고 싶지만 실제 소프트웨어를 작성하는 평범한 일에 매달리고 싶지는 않다고 말했습니다. 그런 일은 한 단계 아래의 코더들에게 맡기면 된다는 얘기였습니다. 필자 같은 사람에게 말이지요. 자유자재로 코드를 다루는 능력이 곧 최고를 의미하는 대학 분위기에 익숙했던 필자는 이 말에 왠지 모를 모욕감을 느꼈습니다.
어쨌든 그의 의견에도 나름의 일리는 있었습니다. 당시 필자는 그저 코더에 불과했습니다(그 친구 역시 다를 바 없었지만). 하지만 Mike Gunderloy가 집필한 Coder to Developer라 는 책의 제목처럼, 이제 필자는 스스로를 단순한 코더 이상의 개발자라고 생각합니다. 필자는 단순히 컴파일되는 코드를 작성하는 방법 외에도 많은 지식을 갖고 있습니다. 즉, 빠르고 안정적이며 충분한 테스트를 거치고 안전하며 유지 관리가 용이하고 다른 언어에서도 사용할 수 있는 소프트웨어를 만들 수 있고 성능이 뛰어난 코드의 특성을 나열할 수도 있습니다. 전반적으로 소프트웨어 산업은 코더 집단에서 개발자 집단으로 성숙하는 과정에 있습니다.
지 금 개발자에게 향후 하고 싶은 일을 물어보면 설계자라고 대답할 것입니다. 설계자라는 단어는 뭔가 고급스럽고 전문적인 인상을 주며, 이 단어를 듣고 나면 개발자라는 말은 단순 노무자처럼 느껴지게 됩니다. 그렇다면 필자도 이론적인 다음 단계에 따라 스스로를 설계자로 칭할까요? 그렇지 않습니다.
물 론 설계자를 모욕하려는 의도는 없습니다. 소프트웨어 개발을 위해서는 시스템 구성 요소 간의 상호 작용을 설계하고 전체적인 구조를 파악하고 있는 사람이 필요합니다. 그렇지만 필자는 개발자라는 사실에 자부심을 느끼며, 다른 모든 개발자들도 이러한 자부심을 갖길 희망합니다.
Frank Gehry나 Rem Koolhaas와 같은 건축 설계자가 누리는 디자인의 자유가 부럽습니까? 이에 대한 필자의 답은 소프트웨어 엔지니어링 분야는 아직 이러한 개념적 단계에 오를 만큼 발전하지는 않았다는 것입니다. 건축 설계자들이 빌바오 구겐하임 박물관, 시에틀 공공 도서관과 같은 건축물을 디자인할 수 있는 것은 토목 공학에 관한 수 세기에 걸친 지식이 밑받침이 되었기 때문입니다. 소프트웨어 산업에서는 아직 이 정도 수준에서 작업할 정도의 호사를 누릴 수 없습니다. 우리들 대부분은 여전히 '현관문을 세게 닫아도 무너지지 않는 1층짜리 집'을 짓고 있을 뿐입니다.
Microsoft 는 버그의 원인을 조사하는 과정에서 버그의 상당수는 설계자가 설계 문서를 검토하면서 발견할 수 있는 설계상의 버그도 아니고, 소스 코드가 프로그래머의 의도대로 동작하지 않는 코딩 버그도 아니라는 점을 알게 되었습니다. 양쪽 모두에 속하지 않는 이러한 버그는 소스 코드는 프로그래머의 의도대로 동작하지만 그 의도에 국부적인 오류가 있는 경우에 발생합니다. 메서드에 잘못된 플래그를 전달하거나 구성 매개 변수의 의미를 잘못 이해하는 문제가 여기에 해당합니다. 이는 설계자의 영역이 아닙니다. 우리 개발자들 스스로가 올바르게 수행해야 할 부분입니다.
Fred Brooks는 이에 대해 그의 유명한 평론인 "No Silver Bullet(만능 열쇠는 없다)"에서 "소프트웨어 엔터티의 본질은 데이터 집합, 데이터 항목 간의 관계, 알고리즘, 그리고 함수 호출이라는 상호 연동 개념들의 조립 구조"라며 "소프트웨어 구축의 어려운 부분은 이러한 개념적 구조의 사양 작성, 설계, 그리고 테스트에 있는 것이며 이러한 구조를 표현하고 이 표현의 충실성을 테스트하는 노력에 있는 것은 아니다"라고 말했습니다. 그는 설계자가 할 일이 아니라 개발자가 할 일을 말하는 것입니다. 즉, 코더가 되기는 쉽지만 개발자가 되기는 어렵다는 말입니다. 개발자는 개발자의 작업이 갖는 가치를 인식해야 합니다.
물 론 이는 화려한 프로그래밍 작업은 아닙니다. 변형을 깔끔하게 캡슐화하고 향후 확장이 가능한 형태로 여러 구성 요소를 완벽하게 설계하는 작업은 설레는 일입니다. 프로그래머는 정확함을 좋아하며, 모든 조각을 정확하게 끼워 맞추는 작업은 멋진 일입니다. 그러나 소프트웨어 개발의 많은 부분에서 개발자들은 숙련공처럼 작업해야 합니다. 코드 검토, 단위 테스트 작성, 주석 정리가 여기에 해당됩니다. 고객은 개발자들이 고객의 개인 정보를 보호하기 위해 또는 시스템을 공격으로부터 보호하기 위해 얼마나 많은 노력을 기울이는지 알지 못하겠지만 개발자들 스스로는 그 가치를 잘 알고 있습니다. 또한 성능 최적화나 전원 관리와 같이 개발자의 '진정한 능력'이 필요한 영역들도 있습니다. 우리가 가진 기술과 경험을 이용해 당면한 문제를 해결하는 것과 같이 이러한 작업은 높은 수준의 아키텍처가 아니라 눈앞의 작업입니다.
필 자는 설계자가 아닌 개발자라는 점에 자부심을 느낍니다. 언젠가 모든 소프트웨어 엔지니어링 문제를 해결하게 되면 그때는 우리 모두 설계자가 될 수 있을 것입니다. 그동안에는 잘 다듬어진 소프트웨어를 완성하는 것이 우리가 할 일입니다.



Adam Barr는 13년 동안 Microsoft에서 일해 왔으며, 개발자와 프로그램 관리자를 거쳐 현재는 Engineering Excellence 팀의 지식 엔지니어로서 개발 엔지니어링 프로세스를 지원하기 위한 내부 컨설턴트이자 강사로 활동하고 있습니다.

Posted by 세모아
,