Thoughts2014.05.15 19:57

세상에는 수많은 방법론이 있으나 SW 개발 방법론만큼 골치아픈 것도 없다. 사실 SW는 사람이 생산하는 물건이다. 사람이 생산하는 물건이라는 측면에서 보면, 이미 세상에는 제조업이라는 분야가 있고, 제조업에는 공정이라는 절차가 있다. 공정에 따라서 물건을 만들면, 물건이 나온다. 


그렇다면, 개발 방법론이라는 공정을 따르면 물건, 그러니까 SW가 나와야 한다. 그런데 제조업과 SW 개발 공정 사이에는 미묘한 차이가 있다. SW 개발 공정은 사실 제품을 만드는 실제 공정이라기 보다는, 생산 라인을 만드는 공정에 가깝다. 우리가 컨베이어 벨트 상에서 하는 일은 속도의 차이만 있을 뿐, 정해진 순서대로 끼고 조이면 되는 일이다. 하지만 그런 생산 라인이 확립되기까지, 모든 제조업도 시행착오를 거친다. 


그러니 SW 개발 방법론을 제대로 이해하고 적용하기 위해서는, SW 개발 방법론이라는 것이 실제 제품을 생산하는 공정이 아니라 생산 라인을 만드는 것과 같은 일임을 유념할 필요가 있다. 하나의 생산 라인을 만들기 위해, 제조업 분야에서도 다양한 실험과 격론을 거친다. 만들고 나면 정말로 제대로 돌아가기나 하는 것인지 수없이 테스트하고 불량율을 줄인다. 그것이 생산 라인을 만드는 과정이고, 그것이 끝나고 나면 이제 물건이 쏟아져 나오기 시작하는 것이다. 


그러나 많은 사람들이 개발 방법론을 실제 생산 공정과 같은 것으로 오해한다. 그럴 때 흔히 벌어지는 일이, 모든 개발 절차를 가능한 잘게 쪼개서 측정 가능한 단위로 환원하려는 것이다. 개발은 컨베이어 벨트 상에서 볼트와 너트를 끼고 조이는 것과 같은 절차가 아니다. 하나의 코드에는 수많은 상념과 고민이 개입되게 마련이고, 그것은 본질적으로 어떤 측정 가능한 양으로 환원이 불가능한 것이다. 


만일 개발 방법론이 생산 공정과 같은 것이라면, 사실 우리는 개발 방법론이라는 것 자체를 거의 학습할 필요가 없어야 한다. 자동차를 만들기 위해 컨베이어 벨트의 동작 원리를 학습하는 사람은 없다. 그러나 우리는 개발을 하기 위해 개발 방법론을 학습한다. 이것은 개발 방법론이 생산 공정으로 환원 불가능한 절차라는 사실을 반증한다. 우리는 컨베이어 벨트 위에서 자동차를 만드는 사람들이 아니다. 


개발 방법론을 생산 공정으로 환원하고 싶다면, 정확하게 컨베이어 벨트와 동일한 환경을 제공해야 한다. 외부의 요구사항으로부터 철저히 격리된 환경을 제공해야 하고, 어떤 컨텍스트 스위칭도 필요 없는 환경을 제공해야 하며, 코드는 부품처럼 짜맞출 수 있는 단위가 되어야 한다. 하지만 우리는 그 어떤 조건도 만족되지 않는 것이 개발 환경이라는 것을 알고 있다. 


그러니 우리는 방법론이 본질적으로 인간의 상호작용과 그것을 통한 문제 해결 절차라는 사실을 이해해야 한다. 그런 관점에서 본다면 모든 방법론은 대체로 모든 생산활동에 통용될 수 있는 것이어야 한다. 그리고 방법론이라는 것이 실제로 키보드를 두드리는 과정과는 아무런 상관이 없는 활동일 수 있다는 것도 이해해야 한다. 그래서 때로 개발 방법론이라는 것이 오히려 개발, 그러니까 순수한 코딩 활동을 방해할 때가 있다는 것도 이해해야 한다. 그런 의미에서 보면 개발 방법론이라는 것은 조직과 통제, 권한과 위임의 영역을 노니는 것이지, 키보드와 마우스, 그리고 모니터 위에 있는 것은 아니라고 봐야 할 것이다. 


그러니 개발자들이 때로 방법론을 귀찮아하거나 역겨워한다는 것은, 자연스러운 일 아니겠는가? 



저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^