[Essay][Prog] Multi-Threading SW Programming 방법론에 대한 단상.

Multi-Threading(이하 MT)  SW Programming시 동기화는 무엇보다 중요한 이슈가 된다.
생각해보면, 동기화가 문제가 되는 이유는, Programming Language의 기본 전제가 “필요한 곳에 동기화를 한다.” 이기 때문이다.
이런 정책에 100% 동의한다. MT을 통해, HW 자원을 효율적으로 사용하고자 한다면 더더욱 그러하다.
그런데, 만약 상당히 많은 부분을 서로 공유하는 어떤 MT SW가 있다고 가정한다면 (그런 SW는 디자인 자체가 잘못된 것이라는 등의 이야기는 일단 접어두자.) 어떨까?
이런 경우 “필요한 곳에 동기화”란 개념으로 보면, 너무 많은 “필요한 곳”이 존재하게 되므로, 쉽지 않다.
이럴 경우, 차라리 개념을 “필요한 곳에서 rescheduling”이라는 걸로 개념을 바꾸어 보는건 어떻까?
일단 다른 측면들은 모두 차치하고서라도, Programming은 좀더 쉬워질 것 같지 않은가?
이런 식의 개념을 지원하도록 SW구조를 잡는 것은 그리 어려운 일은 아니다.
물론, HW 자원을 효과적으로 쓰도록 만들기는 앞의 개념에 비해서 상당히 더 어려울 것이다.
결국 아래와 같은 Trade-off가 발생한다.

“HW자원의 효율적인 사용 vs. Programming의 단순와”

너무 무식한 방법이라고 비판할 수도 있겠지만, Performance가 큰 문제가 되지 않고, Async한 동작자체가 중요한 경우라면, 충분히 한번 고려해 볼만하지 않은가? 일단 Bug는 많이 줄일 수 있으니…

[Essay] Domain Knowledge vs. Programming Skill

* 들어가기 앞서, 이후의 서술은 전부 필자의 개인적인 생각에 따른 것으로, 어떠한 통계적/과학적 근거도 없다.

SW분야에서 필요로 하는 기술적인 지식은 크게 Domain Knowledge(DK)와 Programing Skill(PS) 로 나뉜다.
그리고, 대부분의 Programing은 DK를 구체화 시키고, 구현하는 작업이다.

위의 두 가지의 상대적인 비중은, 업무의 분야에 따라 결정된다.
예를 들어, Device Driver를 구현하는 경우, PS보다는 Device에 대한 DK의 비중이 훨씬 높다.
반면, UI쪽 구현은 DK보다는 PS가 더 중요하다.
따라서, 좋은 SW Engineer는 해당 분야에서 요구하는 PS와 DK의 균형을 유지할 필요가 있다.
(개인적인 생각으로는, 코드의 사이즈가 커지면 커질수록 PS의 중요도가 증가하는 것 같다.)

그럼 ‘측정’ 이라는 측면에서 DK와 PS를 접근해 보자.
상당한 확률로, DK는 경력과 상관관계를 가진다. 해당 분야에 대한 경험이 많을 수록 DK는 깊어진다.
반면 PS는 어느 정도까지(2~3년)는 경력과 상관관계를 가지지만, 그 이후는 경력과 무관한 경우가 대부분이다.
Engineer의 태도, 노력, 열정 등에 따라 PS의 수준에 상당한 편차가 생기게 된다.
필자의 경험에 따르면, 10년차 Engineer의 PS수준이, 전산을 전공한 대졸 신입사원 수준에 머무르는 경우도 흔치않게 봐 왔다.
그런데, PS를 측정할  수 있는 공신력있는 어떠한 방법도 알려진 것이 없다.
또한 짧은 시간의 문답이나, 틀에 짜여진 시험 같은 것으로 PS를 측정하는 것도 굉장히 힘들다.
그래서, 회사는 측정하기 힘든 PS보다는 측정이 용이한 DK를 기준으로 사람을 선발하게 되고, 이것이 곧 ‘경력’ = ‘실력’이라는 잘못된 측정 방식을 낳게 된다.

물론, DK가 중요한 분야라면, 위와같은 측정방식도 상당히 합리적이다.
그렇지만, 근래 SW를 보면, 코드 규모가 예전과는 비교할 수 없을 정도 크다는 것에 주목할 필요가 있다.
앞서 서술한 바와 같이 “코드 규모가 크다.”는 “뛰어난 PS를 요구한다.”와 관계가 깊다.
다시 말하면, 근래 SW산업 특성상, PS쪽의 요구가 DK쪽의 요구보다 빠르게 증가한다는 말이다.
그럼에도 불구하고, 필자가 보기에는 국내 SW업계는 이런 사실을 상당히 간과하고 있는 듯 하다.
여전히 ‘경력’=’실력’ – DK에 높은 비중을 둔다. – 이라는 논리가 상당히 강하다.
또한 PS 수준을 측정하기 힘든 것은 사실이지만, 이를 개선할려는 노력 또한 별로 하지 않는다.
이런 환경에서, SW Engineer는 자신의 PS를 향상시키는 노력을 등한시 하게 된다.
(물론 DK수준을 향상시키는 노력 또한 특별히 하지 않는다. 할 필요가 없기 때문이다. 경력이 곧 DK수준을 말한다고 생각하니까…)
이런 현상이 어느 정도 장기화된 지금, 의사결정권자 역시 PS가 부족한 사람들로 채워지게 되었다.
따라서, 그들 역시 PS의 중요성에 대한 이해가 부족하다.
자, 아래의 cycle을 보자.

PS를 등한시 하는 환경 => Engineer의 PS 향상에 대한 동기 부족 => Engineer의 PS 정체 => PS가 정체된 Engineer가 의사결정권자가 됨.=> PS를 등한시하는 환경 강화.

이것이 필자가 보는 한국 SW의 모습이다.

국내기업에서 경력사원 채용시, 가장 많이 듣게 되는 질문이, “어떤 분야를 얼마나 했느냐?” 이다. 즉 Domain에 대한 질문이다.
이를 통해서 면접관은 지원자의 특정 Domain에 대한 DK를 짐작하고자 하고, 이것은 면접 점수에 상당힌 비중을 차지하게 된다.
그리고 면접관은 DK에 대한 세부 질문들에 상당한 시간을 할애한다.
그런데, 국내 대부분의 회사의 경우, 면접관들이 지원자와 더불어 PS에 대한 심도깊은 면접을 진행한다는 이야기를 들어본 적이 없다.
이는 PS의 중요성에 대한 인식 부족이 가장 큰 원인 중에 하나일 것이다.
그리고, 또 하나의 중요한 이유는, 그들(면접관들) 조차 지원자와 PS에 대한 심도깊은 대화를 진행하고, 지원자의 실력을 평가할 수 있는 수준이 되지 못한다는 것이다.
이것이 현실이다.
PS 향상을 위해 노력하고, Programming 철학을 논하며, Unix Culture를 이야기하는 사람들은 현재 대한민국의 SW 인력시장에서 그만큼의 가치를 인정받지 못한다.
다시 한번 이야기 하지만, 이것이 현실이다.

별다른 뜻은 없다.
그냥 SW Engineer의 한 사람으로서, 대한민국 SW업계를 보는 주관적인 View를 일설했을 뿐이다.