* SW 엔지니어에 대한 역량 측정의 어려움 *

SW 엔지니어에 대한 역량 측정이 그렇게 중요하다면, 왜 지금까지 이런 것들이 잘 이루어지고 있지 않는 것인가?
아니, 그전에 "제대로 이루어지지 않고 있다."라는 필자의 주장에 대한 근거를 먼저 제시하고자 한다.

SW 개발비용산출시 많이 사용되는 단위가 MM(man-month)이다.
이는, "얼마나 많은 '사람'이 얼마간의 '시간'에 걸쳐 해야 하는 일인가?"를 나타낸다.
이런 방식의 측정은 개인간의 생산성 편차가 작으면 작을 수록 신뢰도가 올라간다.
단순 반복 노동같은 경우,어느 정도 신뢰도 있는 결과를 보여줄 수도 있을 것 같다.
그렇지만, SW programming의 경우, 개인간의 편차가 상당히 크다.
여러 연구 결과가 이를 잘 말해주고 있으니, 특별히 첨언하지는 않겠다.
그런데, 실제 비용산출시에는 MM을 쓴다.
또 다른 근거로는, SW 분야에서, 채용시 지원자의 처우는 대부분의 경우, 전 직장에서의 처우/연봉 + 그 사람의 경력에 의해 결정된다는 점을 들 수 있다.
만약 어떤 방법을 통해서 그 실력을 검증할 수 있다면, 위의 조건들이 지원자의 처우를 결정하지는 못할 것이다.

그렇다면 왜 아직도 이런 문제점이 해결되지 않고 있는가?
SW 엔지니어의 역량을 사회적인 합의가 이루어진 척도를 통해서 수치화 시키는 것이 상당히 어렵기 때문이다 - 사실 불가능에 가깝다.
이제부터 왜 그런지 하나씩 살펴보자.

* SW분야는 일정 수준이 넘어서면, 철학적인 문제를 상당 수 동반하게 된다. 따라서, '정답'이 없는 경우가 많다.

C 언어의 syntax에 대한 문제는 '답'이 있다.
즉, '틀렸다' 혹은 '맞았다'를 말할 수 있다.
그렇지만, C언으로 어떤 방대한 크기의 SW를 만든는 경우, SW layering, architecture design 등에는 정답이 없다.
요구사항에 대한 이해의 정도, 개인의 SW design철학/경험 그리고 속해있는 조직/분야의 culture 등에 따라 다양한 형태의 결과물이 나올 수 있고, "어떤 것이 더 낫다 ."라고 명백하게 판단할 수 없는 경우가 대부분이다.
구체적인 예를 들어보자.
Unix culture는 "정상적인 동작에 대해서는 어떠한 feedback도 주지 않는다." 라는 부분이 있다.
그렇지만, MS Windows의 경우는 "현재 어떤 일이 일어나고 있는지 feedback을 주어야 한다."는 culture가 있는 듯 하다 [*1].
어떤 것이 더 좋은가?
정답이 없다. 각각 장,단점이 존재하고 이러한 장,단점 역시 논쟁의 소지가 충분하다.
물론, 위와 같은 고 수준의 문제가 아니라면 대부분의 전문가들이 동의하는 방법론이 존재하는 것이 사실이다.
그렇지만, 이런 방법론 역시 절대적인 것이 아니기 때문에, 제시된 해결책을 받아들이지 않는다고해서 논리적으로 "당신이 틀렸다."라고 설득할 수 있는 방법은 존재하지 않는다.
이렇게 '정답'이 없는 기술에 대한 역량 측정이 쉬울 리가 없다.

* 좋은 SW의 가치가 실질적인 형태로 나타나기까지는 시간이 걸린다 .

SW life cycle에서 maintenance는 압도적인 비중을 차지한다.
그래서, 좋은 SW design/coding의 방법론을 이야기할 때 maintenance비용에 대한 부분이 항상 언급된다.
그런데,  "maintenance의 비용을 줄이기 위해 많은 노력과 고민을 통해서 SW를 design하고 구현한 결과물"과, 소위 말하는 "당장 돌아가만 가는 결과물" 두 가지에 대한 차이를, 기술적인 지식이 부족한 의사결정권자들이  구별해 내는 것은 불가능에 가깝다.
위에서 언급한 두 가지 SW 결과물의 차이가 실질적인 '비용'의 형태로 나타나는 것은, 개발과 maintenance가 같은 사람/팀에 의해 최소한 2~3년이상 이루어졌을때 부터이다.
그리고, 그 이후에는 차이가 기하급수적으로 벌어진다. 그렇지만 이 말은, 기술적인 분석을 제외한 상태에서, 좋은 SW와 나쁜 SW를 구별하기 위해서는 2~3년의 시간이 필요하다는 뜻이기도 하다.
물론, 기술적인 분석 자체도 상당한 시간을 요구한다.
이런 SW의 특성은, 단기간내에 금전적인 가치로 환산된, 수치화 된 결과물을 바라는 국내 산업환경과 대치된다.

* 기술적으로 뛰어난 사람이라 하더라도, 엔지니어의 실력을 평가하는데 오랜 시간을 필요로 한다.

각종 오디션을 생각해 보자. 노래, 춤, 연기 등등.
그런데, 'SW programming 오디션' 이라는 말을 들어본 적이 있는가?
(Programming 대회를 말하고 있는 것이 아니다.)
없을 것이다. 노래/춤 같은 오디션은 처음 몇 초만을 보고도 미숙한 지원자의 상당 수를 걸러 낼 수가 있다.
그렇기 때문에, 하루에 수백명의 오디션을 볼 수가 있는 것이다.
그렇지만, SW의 경우는 다르다.
노래/춤의 오디션에서 자격 미달의 미숙한 지원자를 찾아내기 위한 '몇 초'는, SW 엔지니어의 면접에서는 '몇 십분'에 해당한다. 이런 상황에서 어떻게 많은 수의 엔지니어를 충분히 평가할 수 있겠는가?
그리고, 어차피 충분히 평가할 수 없다는 것을 알고 있기 때문에, 평가자 역시 일정 수준이상의 노력은 사용하지 않는 것 같다.

* SW에는 다양한 분야가 존재한다.

비록 SW라는 이름으로 통합되어 있지만, SW는 다양한 분야로 이루어져 있다. 그리고 각 분야가 필요로 하는 기술적인 지식 또한 다양하다. 이런 점을 반영하기 위해서, SW 엔지니어의 기술적인 역량을 이야기 할때, domain knowledge를 같이 이야기 하게 된다. 예를 들면, Java Application SW, System SW 등등이 있겠다.
업무 영역 또한 다양하다. Integration, Programming, Debugging, Porting 등의 분야가 있고, 각 분야에서는 요구하는 skill set에는 어느 정도 차이가 있다. 그렇기 때문에,  programming은 정말 잘 하지만, 다른 사람의 code를 debugging하는 능력은 평범한 사람이 있고, 반대로 programming skill자체는 평범하지만, debugging에는 뛰어난 성과를 보이는 사람도 존재한다.
이런 다양한 가치들을 고려한 측정기준을 만드는 것은 결코 쉬운일이 아니다.

이외에도 많은 이유들을 들 수 있겠지만, 일단 이 정도만 이야기 하도록 하겠다.

[*1]
이 부분에 대해서는, 특별히 어디에 명시적으로 언급되어 있질 않아서 100%확신할 수는 없지만, 대부분의 Windows program이 일어나고 있는 일들에 대해서 feedback을 준다.
예를 들면, Unix에서 "rm -rf ."는 정상적으로 동작한다면, 끝날때 까지 아무런 feedback도 주지 않는다.
그렇지만 Windows의 경우, 어느 정도 진행되고 있는지 progress bar의 형태로 보여주는 것이 일반적이다.

+ Recent posts