2014년 5월 27일 화요일

하드웨어와 소프트웨어는 같고나서 다르다



저서 "글로벌 소프트웨어를 말하다"의 4장



‘하드웨어와 소프트웨어는 다르다’는 말을 많이 듣는다. 필자의 경험으로 보면 이 말이 나오는 거의 모든 경우가 소프트웨어가 하드웨어와 다르니 내 맘대로 하고 싶을 때 대는 핑계이다. 필자는 강연시에 이 질문에 대해 실리콘밸리에서와 국내에서 답이 달라진다고 말한다.



먼저 ‘사람과 동물이 같은가?’ 하는 질문을 생각해 보자. 사람과 동물은 둘 다 생물이고 언젠가는 죽는다는 점에서 같다. 하지만 사람과 동물도 역시 다르다. 일단 염색체가 다르다. 그럼 염색체가 같은 모든 사람은 같은가? 역시 각 사람마다 다르다. 즉 ‘같다 다르다’에 대한 답을 하기 위해서는 어느 수준에서 판단하는가를 얘기해야 한다. 필자가 생각하는 ‘같다, 다르다’의 수준을 얘기하면 하드웨어와 소프트웨어는 ‘같은 인간이면서 사용하는 언어가 다른 나라의 사람’이다. 그 만큼 가깝다는 것이다.



우리나라에서는 하드웨어와 소프트웨어가 마치 사람과 식물정도의 차이처럼 아예 상관 없는 식으로 얘기한다. 또 그러다가 가끔 사용하는 정책을 보면 소프트웨어에 적용해서는 안되는 하드웨어 특성의 정책을 사용하기도 한다. 아직 하드웨어와 소프트웨어의 본질을 이해하지 못하기 때문에 따라해서는 안 될 일을 하기도 하고, 꼭 따라해야 할 일을 안하기도 한다.. 그럼 과연 어떤 것이 공통된 속성이고 어떤 점이 다른 속성인지를 살펴보자. 하드웨어의 다양한 종류인 건축공학, 기계공학, 전자공학, 심지어는 양복점과도 비교를 해보자. 소프트웨어 공학에서 사용하는 용어는 대부분 건축공학에서 왔다. 하지만 개념은 기계공학이나 전기공학 심지어는 옷을 만드는 양복점에서도 같다. 가장 일반적인 개발방식인 분석, 설계, 구현, 테스팅, 유지보수의 생명주기에서 봤을 때 똑같다. 물론 구현 단계에서 사용하는 방법이 다르다. 설계에서도 다른 도구를 사용한다. 즉 인간이 생각하는 방식은 같지만 나라에 따라 언어가 다른 것과 같다.

근본적으로 소프트웨어 개발방식은 건축에서 유래되었는데 다른 산업도 마찬가지이지만 많은 시간을 분석과 설계에 시간을 보내고 또 가치를 둔다. 고급 인력들은 다 분석과 설계에 집중된다. 그리고 구현 단계는 건축에서는 시공이라는 단계로 전혀 다른 인력들이 투입된다. 이런 개념이 건축공학이며 기계공학이며 전자공학이다. 심지어는 양복점도 분석과 설계를 하고 마지막 재단 작업은 아무나 할 수 있는 일이기에 외주를 준다. 그러니까 대량생산은 아예 북한이나 중국 등 인건비가 저렴한 나라에서 하면 된다. 즉, 앞 단계의 핵심 지식 작업과 뒤로 가면서 노동집약적인 일을 분명히 나누고 가장 효율적인 방법으로 구현한다.
모든 산업이 그렇게 돌아가는 데 유일하게 그렇지 않은 경우가 바로 국내의 소프트웨어 산업이다. 국내 소프트웨어 업계는 내가 아니면 못한다는 엄청난 착각아래 한 사람이 시작에서 끝까지 다 만들어 낸다. 그러면서 하는 말이 소프트웨어는 하드웨어와 달라서 그렇게 하는 거라고 합리화를 한다.



여기에서 생각해야 할 점이 두 가지가 있다. 의지와 역량의 문제이다. 일인 만능주의 개념에 대한 잘못된 착각으로 인한 변화 의지의 부족이 첫 번째이고, 착각에서 깨어났다고 하더라도 수행할 수 있는 역량이 있는가가 두 번째이다. 깨닫기는 했는데 역량이 없다면 공허한 깨달음이다. ‘닭이 먼저인가 달걀이 먼저인가’ 하는 문제인데 결국은 동시에 해결해야 하는 문제이다.



여기까지가 소프트웨어와 하드웨어가 같은 부분이다. 즉, 하드웨어 산업과 같은 개념을 가지고 수행하기까지가 소프트웨어 개발 역량의 90% 정도 차지한다. 나머지 다른 10%는 벽돌공 대신에 개발자를 사용하는 것이다. 물론 벽돌공도 아무나 못하듯이 개발자도 나름대로 배운 것이 있어야 한다. 그런 인력들도 필요하기 때문에 정부에서 양성한다고 해도 나쁠 것이 없다. 그런데 개발자(벽돌공)를 사용하기 위해서는 그 앞 단계에서 분석과 설계를 잘 해야 하는 것이 필수이다. 다른 모든 산업과 비교해서 생각해 보면 이해가 갈 것이다. 누가 필자에게 ‘소프트웨어나 하드웨어나 똑같다’고 얘기한다면 나는 일단 존경하는 느낌으로 쳐다 볼 것이다. 다르다고 얘기한다면 의심의 눈초리를 보낼 것이다. 달인 아니면 초보인데 3분만 얘기해 보면 정체를 판단할 수 있다. 거의 예외 없이 초보자로 판명난다.



건축공학에서 배울 것은 안 배우고(앞 단계의 핵심 지식 작업과 뒤로 가면서 노동집약적인 일울 분명히 나누고 가장 효율적인 방법으로 구현하는 일) 소위 공사판 십장질만 배워서 소프트웨어에서 사용하려고 한다. 노동집약 산업의 핵심인 인부들을 관리하는 법만 배워서 그걸 지식 산업의 핵심 부분인 분석과 설계 단계부터 시작해 소프트웨어 개발의 전 공정에서 써먹으려고 한다. 아무리 세계적인 프로젝트 관리시스템을 사용해도 잘 될리가 없다. 돈만 낭비한다. 사실 건설산업의 시공단계에서 사용하는 가장 정교한 프로젝트 관리 시스템을 사용할 필요도 없는 곳이 소프트웨어이다. 이 주제는 또 다른 큰 주제이므로 여기서는 넘어간다.



소프트웨어와 하드웨어는 같기도 하고 다르기도 하다. 소프트웨어의 역사가 계속되고 성숙해지면서 다른 모든 산업들과 마찬가지로 수렴과 발산의 역사를 되풀이하게 될 것이다. 지금 국내는 최초의 수렴을 위해 나아가고 있다. 최초 수렴이 끝나면 '하드웨어와 소프트웨어는 같다'는 말을 의미심장하게 할 수 있다. 그 다음은 발산을 할 것이다. 그러면 '다르다'는 말을 할 수 있다. 조금 더 깨달으면 다시 '같다'라고 말할 것이다. 실리콘밸리의 회사들이 국내 회사들보다는 분명히 앞서 있고 최초의 수렴은 하드웨어의 좋은 점을 받아들여 소프트웨어 공학이 정립되면서 이미 오래 전에 끝났다. 이제는 발산단계로서 소프트웨어 고유 특성들을 찾아서 많은 기술이 나오고 있지만 언젠가는 모든 산업의 공통점을 찾아 서로 응용하면서 다음 단계의 수렴을 하게 될 것이다. 모든 진리는 하나로 통한다는 말을 이해하지 못하더라도 지금은 최초의 수렴을 위해 열심히 하드웨어의 좋은 점을 배워 체득한다면 글로벌 회사가 되기 위한 기초 체력을 마련한 것이다.

댓글 없음: