Search
Duplicate
👕

소프트웨어 장인정신(Software Craftsmanship)

Category
S/W 엔지니어
Tags
소프트웨어 장인정신
Software Craftmanship
소프트웨어 공학
TAO
Created time
2004/11/06
사실, 이 책을 처음 읽었던 때는 약 2년전 쯤입니다. 그 당시는 프로그래밍이라는 직업에 한참이나 회의를 느끼던 시점이었죠. 당시 제 개인적인 상황도 그랬거니와, 국내 프로그래밍 환경의 열악함을 직접 체험하고, 프로그래머로서의 장래에 대해 희망보다는 암울함을 더 많이 느끼던 때였습니다. 그러던 와중, 함께 살던 형이 갖고 있던 이 책을 우연찮게 마주쳤었는데, 어느새 이 책은 프로그래밍 계에 첫 발을 내딛던 그 때의 열정을 되살리고 있었습니다. 이 책을 마주친 우연, 그것은 제겐 행운이었죠. 그렇기에 이 책에 대한 일반적 평가와는 별도로, 제 개인적으론 큰 의미가 담긴 책입니다.
잠시 일반적 평가를 언급했는데, 놀랍게도 이 책에 대한 세간 평가는 제 기대에 못미치고 있습니다. 강컴에서도 이미 소개가 되었지만, 외국에서는 Jolt상을 수상할 정도로 인정을 받았고, C/C++ Users Journal 이라던가, the Association of C & C++ Users 같은 유명 개발자 사이트에서는 몇 권되지 않는 권장 도서 목록에 오르기도 했는데 말이죠. 하긴, 아무리 좋은 서적이라 할지라도, 개개인의 특성에 따라 평가가 달라진다는 점을 생각해보면 그리 이상한 일임만은 아니겠습니다.
이 책은 개발 방법론에 대해서 논하고 있지만, 그 의도는 또 하나의 개발 방법론을 제시하는 데 있지 않습니다. 오히려 심하게 표현하자면, 개발 방법론 그 자체, 특히 소프트웨어 공학을 거부하는 데 초점을 모으고 있습니다. 더 나아가 그 빈자리를, 프로그래밍에 대한 능동적 자세, 열정등을 대표하는 장인정신, 이를 통해 자연스럽게 만들어진 개개인만의 개발 방식, 그리고 장인정신을 함께 공유함으로 만들어지는 인간 관계로 매꾸라는 대안을 제시합니다.
이미 일반 분야에서는, 수치, 통계, 추론등을 기반에 둔 이성에 의존한 학문에 대해 '완전무결한', '절대적으로 믿을 수 있는'이란 생각을 버린지 오래입니다. 그리고 이에 남겨진 자리를 개개인의 느낌, 주관적 경험, 직관 등으로 채워나가고 있습니다. 이러한 트랜드는 프로그래밍 계에도 마찬가지라, 이를 대표하는 용어인 '선(禪)'이라던가 '도(道)'등은, 이 책에서도 자주 인용한 the Pragmatic Programmer : from Journeyman to Master에서도 나타나고, 최근 발간되어 큰 인기를 얻고 있는 에릭 레이몬드의 책 The Art Of(TAO; 道) UNIX Programming이나, Knuth 교수의 전설적인 책인 The Art Of(TAO; 道) Computer Programming의 제목에서도 볼 수 있습니다. 재미있게도, the Art of UNIX Programming의 겉표지를 보면 프로그래밍과는 전혀 어울리지 않을 것만 같은 노승과 동자승이 그려져있죠.(저는 이들 둘이 이 책의 주인공인 '장인'과 '도제'를 보는 듯합니다.)
이런 거창한 용어를 빌리지 않더라도, 제 개인적 느낌만 말하자면, 개발 방법론이란 그 말 자체에서부터 거부감을 느끼는 것이 사실입니다. 물론 이러한 느낌은 과장된 요소도 얼마간 들어있지만, 프로그래밍 그 자체를 위한 기술만해도 배우고 익혀야 할 것으로 천지인데, 여기에 한층 더해서 반드시 따라야할 개발 방법론이란, 저를 붕어빵 기계안에 들어있는 붕어빵으로 만들어버리는 듯한 두려움마저 주기 때문입니다. 이에 대해 이 책은 말합니다. "소프트웨어 개발 프로세스는 기계가 만들어내는 듯한 대량 생산 프로세스와는 완전히 다르다."
사실 여부에 관계없이, 프로그래밍이라는 것에 담겨진 속성이 "이미 만들어진, 주어진 특정 패턴을 따르는 것보다는, 변화와 창조가 주된 요소다."라 생각하고 싶어하는 것은 저만이 그런 것은 아니겠지요.
이미 다른 분이 지적했지만, 비현실적인 이야기를 하고있는 듯한 느낌을 언뜻 주기도 합니다. 특히, 이상적 개발팀으로 그려내고 있는 오랜시간 동안 장인과 도제로 형성된 소규모의 팀, 그 팀을 만족시키는 보상 체계, 평판에 의해서 개별적으로 이루어지는 추천 방식 등은 개발자 전부를 위함이 아닌, 특정의 뛰어난 인물과 그러한 사람들로 이루어진 몇몇 되지않는 그룹만을 위한 내용이라는 생각을 갖게도 만듭니다. 하지만, 그 뛰어난 인물(장인)이 되기까지의 잊지 말아야할 요소(장인 정신)를 그려냈다는 것 자체가 더욱 의미가 있지 않을까 싶습니다. 오히려 "준비안된 사람까지 구제할 필요는 없다."라는 생각으로 경각심을 일깨우는 것이 아닐지요. 이 책은 소프트웨어 공학을, 그 안에 담긴 정신이 "그 정도면 괜찮은"이라고 표현하면서 씹고 있습니다.
여기서 말하는 장인이 되는 그날을 그려보면서, 프로그래밍에 대한 열정을 돋구는 멋진 표현인, 이 책의 마지막 문구를 옮기며 글을 마칩니다.
결국 소프트웨어 개발은 예술과 과학, 그리고 공학을 정교하게 섞는 기술, 즉 장인기술이다. 그것은 단지 하루의 일이 아니다: 그것은 열정이 될 수 있다. ...소프트웨어 개발은 재미있는 것이다. 그렇지 않다면, 그 프로세스는 잘못된 것이다.