'Essay'에 해당되는 글 86건

  1. 2011.11.23 [Review][Game] 총망라...
  2. 2011.11.23 [Review] 삼국군영전5
  3. 2011.09.26 [Essay] Sorry vs. Thank you.
  4. 2011.08.23 [Review][Game] Growlancer (그로우랜서1)
  5. 2011.08.05 [Review] Extreme Programming Explained 2/E
  6. 2011.08.05 [Review] Kingdom Under Fire - Gold Edition (1)
  7. 2011.07.06 [Review] Numb3rs (넘버즈)
  8. 2011.06.01 [Essay] SW 엔지니어 역량 측정 - 02
  9. 2011.05.31 [Essay] SW 엔지니어 역량 측정 – 01
  10. 2011.05.17 [Prog] Separating mechanism from policy (microscopical view) - function implementation.

[Review][Game] 총망라...

Essay/Review 2011.11.23 15:36

그로우랜서 게임 리뷰를 하면서.. 갑자기... 그 동안 내가 즐겼던 게임들이 떠올랐다.
각각에 대해 리뷰를 쓸수는 없겠지만... 언급이라도 하고 싶어서... 이곳에 한꺼번에 적는다.
생각날때마다 update할 예정...

Diablo : 1, hellfire, 2, expansion [특히 2]
: 미친듯이 했다. 하드코어 아시아 랭킹 30위 귄이였었다는...-_-;

Baldur's gate 1, 2, shadow of amn, throne of bhaal:
: 더 말해 무엇하랴. 생에 최고의 RPG중 하나. Dungeon and Dragons와 Forgotten Realms를 알게 해준 게임.

Never Winter Nights
: Bioware사랑해요~~

Icewind Dale
: 엔딩은 못 봤지만...

Might And Magic 6,7,8
: 3대 RPG는 아무나 가질 수 있는 title이 아니다!

Heros Of Might And Magic 2,3,4,5
: 미친듯이 했던 2 (블랙드래곤 짱.) 완전히 망했던 4. 그래도 역시 잼있음.

Kings Bounty - The Legend / Armored Princess
: HOMM의 원조격. 그렇지만 역시 재미는 HOMM이 더...

Startcraft
: 말이 필요없음! 쵝오~!

Civilization 2,3,4
: 악마게임...

Master Of Orion 2
: 이것도.. 악마.. (이것도 시드마이어 였던가???)

Final Fantasy 5,6,7,8,9
: 일본식 RPG의 정수! 특히 개인적으로 5, 7

Elder Scroll 1(Arena), 2(Dagger fall), 3, 4
: 이거야 말로... 자유도를 추구하는 RPG의 최고봉... 특히나, Daggerfall !! (베데사다 15주년으로 꽁짜로 풀렸어요~~)

삼국지 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
: 삼국지를 좋아하니까..

신장의야망 혁신
: 일본을 좋아하진 않으나 게임의 완성도 면에서는...

용의기사
: 단순하게 즐길수 있는 SRPG...

용기전승
: 역시 SRPG. 수작이긴 하나... 명작이라고 하기엔...

신고

'Essay > Review' 카테고리의 다른 글

[Review][Game] 총망라...  (0) 2011.11.23
[Review] 삼국군영전5  (0) 2011.11.23
[Review][Game] Growlancer (그로우랜서1)  (0) 2011.08.23
[Review] Extreme Programming Explained 2/E  (0) 2011.08.05
[Review] Kingdom Under Fire - Gold Edition  (1) 2011.08.05
[Review] Numb3rs (넘버즈)  (0) 2011.07.06
tags : Game, 게임
Trackback 0 : Comment 0

[Review] 삼국군영전5

Essay/Review 2011.11.23 15:27
삼국군영전(이하 군영전) 시리즈는 새로운 것을 시도하기 보다는 기존의 것을 보완하는 방향으로 버젼을 거듭해 온 느낌이다.
Koei의 삼국지 시리즈가 커다른 틀에서 여러가지 다른 것들을 시도해 보는 것과는 반대된다.
군영전5 에서도 4에 비해서 특별히 달라진 것은 없다. 그렇지만, 개인적으로 4에서 가장 큰 불만사항 중에 하나였던, "적장의 자동 레벨업"이 아군에도 적용되어서 어느 정도 밸런스가 맞아들어간 느낌이다.
4에서는 전투에 사용하지 않고 가만히 내정만 하고 있는 장수의 레벨은 절대 오르지 않았다. 그렇지만, 적진영의 장수들은 시간만 지나면 자동으로 레벨업을 했으니... 상당히 괴로웠었다..
그렇지만 여전히 반복되는 천인전투는 지루하다는...-_-;
신고

'Essay > Review' 카테고리의 다른 글

[Review][Game] 총망라...  (0) 2011.11.23
[Review] 삼국군영전5  (0) 2011.11.23
[Review][Game] Growlancer (그로우랜서1)  (0) 2011.08.23
[Review] Extreme Programming Explained 2/E  (0) 2011.08.05
[Review] Kingdom Under Fire - Gold Edition  (1) 2011.08.05
[Review] Numb3rs (넘버즈)  (0) 2011.07.06
Trackback 0 : Comment 0

[Essay] Sorry vs. Thank you.

Essay/Work 2011.09.26 22:14

내 생각에 대한민국은 '조언'의 문화보다는 '훈계'의 문화가 지배적인 것 같다.
'조언'의 문화란, 대등한 관계에서 이루어지는 '제안' 같은 것을 의미하고, '훈계'란 상하관계에서 가르침을 뜻한다.
대한민국에서 부모/자식 관계는 대등하기 보다는 상하관계에 가깝다.
따라서 부모는 자식을 '훈육'하게 되고, 자식입장에서는 가르침을 받게 된다.
'조언'이든 '훈계'든 어떤 것이 낫고 나쁜지는 모르겠다.

그런데 재미있는 것은 '훈계'의 문화에서 사용되는 '가르침'이  '질책'의 의미로 사용되는 경우다.
사실 상당히 많은 경우, 상하관계에서의 '훈계'는 '가르침'보다는 '질책'의 의미를 가진다. '사랑'이 바탕이 되는 부모/자식 관계도 그러할진데, 다른 사회적인 관계에서는 말할 필요도 없겠다. 그래서 그런지, 대한민국이란 나라에서 (다른 나라의 경우는 잘 모르겠다.), 사회적인 관계를 형성하는 사람들 사이에서는 '감사합니다.' 보다는 '죄송합니다.'가 더 익숙한 것 같다.

예를 들어, A 신입사원이 거래처와의 일을, 조금 어설프게 처리했고, 그래서 B대리는 A신입사원의 일처리에서 문제점들을 지적했다고 생각하자. 만약 A가 신입사원이 아니라 대리 혹은 과장이였다면, 위 사안은 '질책'이 될 가능성이 높다. 그렇지만, 신입사원이다. A가 일의 내용을 어설프게 처리할 것은 당연한 일이고, 아마 신입사원에게 맡긴 일이라면, 어느 정도의 실수는 용납될 일이 였을 것이다. 이런 경우, B대리가 A사원에게 하는 말은 '질책'처럼 들릴지라도 '훈계'에 가깝다. 그렇다면, A사원의 대답은 '죄송합니다.' 보다는 '감사합니다.'가 옳지 않을까?
'자신의 잘못된 부분을 지적해주고 가르쳐 주어서 감사합니다. '가 맡는 대답이 아닐까 말이다.
그렇지만, 우리들 대부분은 '죄송합니다.'가 먼저 튀어나온다. 자라온 환경에서 '훈계'보다는 '질책'을 받아왔던 탓이리라.
설사, '질책'이라 할지라도, '감사합니다.'는 여전히 유요한 반응이다.
'질책'했다는 자체가, 관심의 표현이고, 더 잘되라는 뜻이기 때문이다. 그렇지만, 우리는 어김없이 '죄송합니다.'가 나온다.

어찌보면, 문화가 만들어낸 것인 것도 같다. 그리고 사실, 이것이 '잘못되었다!'라고 말할 근거도 용기도 없다.
그렇지만, 내 개인적인 생각으로는 '죄송합니다.'보다는 '감사합니다.'가 듣기도 좋고, 한결 부드러운 것 같다. 아닌가?
'조언'이든 '훈계'든 아니면 그것이 '질책'이든, '죄송합니다.'보다는 '감사합니다.'가 먼저 생각나고 떠오를 수 있는 문화, 그런 문화는 과연 어떨까?

신고
Trackback 0 : Comment 0

[Review][Game] Growlancer (그로우랜서1)

Essay/Review 2011.08.23 08:46
상당히 유명한 게임이라고 하기에, PC버젼으로 나온 1편을 플레이 해봤다. 사실 집에 PC가 워낙 오래된 것이라 (이제 만으로 7년정도 된거 같군...-_-;) 약간만 사양이 높아도 돌리지도 못한다...
일단 일러스트를 보면 왠지모르게 굉장히 익숙한 느낌! 바로 랑그릿사의 우루시하라 사토시! 그가 일러스트를 맡았다고 한다.
뭐 그림이야기는 그렇고... 게임은...
스토리... 괜찮고, 일러스트... 당연히 괜찮고, 완성도... 이 정도면 뭐...
그런데... 문제는... encounter시 전투에 시간이 너무 오래 걸린다는 점... 특히 마법은 effect때문에.. 너무 많은 시간을 소모해서 집중력을 확~~ 떨어뜨려 버린다.
그래서... 한번 clear하고 나면 다시 하고 싶은 생각은 별로 들지 않는다.
또, 마법과 물리 공격간에 밸런스가 약간 무너져서... 마법이 없이는 아무것도 할 수 없는 것도 약간은 아쉬움이라고 할까...
(물약으로 버티는 전사파티의 로망은 불가능하다...-_-;)
그럼에도 불구하고, 각 캐릭터의 개성이 확실하고, 기타 요소들이 괜찮아서 상당히 잘 만든 게임임에는 틀림없는 것 같다.
그렇지만... 역시 훼자리안 던전의 잔인함은.. 짜증.. 지대루다..-_-;
신고

'Essay > Review' 카테고리의 다른 글

[Review][Game] 총망라...  (0) 2011.11.23
[Review] 삼국군영전5  (0) 2011.11.23
[Review][Game] Growlancer (그로우랜서1)  (0) 2011.08.23
[Review] Extreme Programming Explained 2/E  (0) 2011.08.05
[Review] Kingdom Under Fire - Gold Edition  (1) 2011.08.05
[Review] Numb3rs (넘버즈)  (0) 2011.07.06
Trackback 0 : Comment 0

[Review] Extreme Programming Explained 2/E

Essay/Review 2011.08.05 08:07

XP자체는 이미 상당히 알려진 방법론이며, 모든 방법론이 그러하듯이 좋은 말들과 장미빛 미래를 제시한다.
때문에, 책을 읽을때, 이런 미사여구들은 필터링 할 필요가 있다.

내가 이해한 관점에서 보면, XP의 실천적 방법론의 핵심은 '사람'과 '테스트'다.
나 역시 여기에 동의하긴 한다.
그렇지만, XP는 나의 견해보다 좀더 극단적인 감이 있다.
어떤 통계적인 근거를 제시할 수 없으니, 내가 맞다는 주장을 펼칠 수는 없지만, '조금 지나치다.'라는 느낌은 분명히 있다.

특히 pair programming부분은 동의하기 어렵다. 이건 철저하게 개인의 성향에 따라 다르다.
어떤 사람은 pair programming에서 더 나은 성과를 보일 수 있겠지만, 그렇지 않은 사람도 분명히 상당수 존재할 것이다.
일단 나 부터가 pair programming에 대한 거부감이 있다.
그래서 난, 이를 약간 완화시킨, 내 나름대로의 방법론을 제시하고 싶다.
"최소한 2인 1팀이 되어 움직이게 한다."

2인 1팀이 하나 혹은 다수의 work item을 공동책임하에 진행하는것... 개인적으로 이런 방식이 더 나아 보인다.
물론 이때, 2인이 소위 사수/부사수 의 관계를 의미하는게 아니다. 완전히 동등한 두 사람을 말한다.
사수/부사수의 방법론은 또 다른 분야이니까 일단 뒤로 하자.

음.. 적다 보니 왠지모르게 미숙한 글의 냄새가 폴폴 풍긴다...쩝..
일단 이쯤에서 접고... 생각나면 다시 업데이트 하자..

* update (2011/Aug/19)
왜 2인 1팀이어야 하는가?
* Pair programming의 효과를 얻을 수 있다. 서로가 서로를 보완하며, review할 수 있다.
* 서로가 서로의 backup이 되어 줄 수 있기 때문이다.
둘 중 누구 하나가 휴가를 가야 한다던가, 갑자기 쉬어야 하는 경우, 다른 한 사람이 그 사람의 빈자리를 채워줄 수 있다.
* 단점 : 전문 분야가 최소한 두곳 이상이 생기게 되므로 업무의 효율이란 측면에서 손실이 있을 수도 있겠으나, 이는 시간이 지나면 해결될 수 있는 문제라고 본다.

신고

'Essay > Review' 카테고리의 다른 글

[Review][Game] 총망라...  (0) 2011.11.23
[Review] 삼국군영전5  (0) 2011.11.23
[Review][Game] Growlancer (그로우랜서1)  (0) 2011.08.23
[Review] Extreme Programming Explained 2/E  (0) 2011.08.05
[Review] Kingdom Under Fire - Gold Edition  (1) 2011.08.05
[Review] Numb3rs (넘버즈)  (0) 2011.07.06
tags : xp
Trackback 0 : Comment 0

[Review] Kingdom Under Fire - Gold Edition

Essay/Review 2011.08.05 08:04

음... 오랜만에 게임 하나를 엔딩을 봤다.
사실 옛날에 엔딩을 봤던 게임이긴 한데, 최근에 다시 잡고 해 봤다는...
근데 상당히 재미있었다.
바로 Kingdom Under Fire(KUF).
일반적인 RTS게임에 RPG요소를 추가해서, Hero개념을 추가했다.
Warcraft3보다도 먼저 RTS에 Hero의 개념을 추가했다는...
순수 국산 이기도 하고...

물론, 고질적인 소프트웨어 불법 복제 때문에 안타깝지만 빛을 잃긴 했다...-_-;
여튼... 다시 해봐도 수작임은 분명하다.

그러고 보니 예전에 온게임넷에서 리그도 했었지 아마...
결승이... 전상욱 vs. 강xx 였던걸로 기억하는데 마지막에 건물이 먼저 깨어지느냐 히어로가 먼저 나오느냐의 시간싸움에서 '리히터 로젠하임'의 등장으로 결국 전상욱이 우승했던 기억이 난당...
정말 재미있었던 경기였었고, 그 덕분에 KUF를 아직도 좋아하고 있는지도 모르겠당...
여튼... 추천할 수 있는 작품...

신고

'Essay > Review' 카테고리의 다른 글

[Review][Game] 총망라...  (0) 2011.11.23
[Review] 삼국군영전5  (0) 2011.11.23
[Review][Game] Growlancer (그로우랜서1)  (0) 2011.08.23
[Review] Extreme Programming Explained 2/E  (0) 2011.08.05
[Review] Kingdom Under Fire - Gold Edition  (1) 2011.08.05
[Review] Numb3rs (넘버즈)  (0) 2011.07.06
tags : Game, KUF, 게임
Trackback 0 : Comment 1

[Review] Numb3rs (넘버즈)

Essay/Review 2011.07.06 17:09

넘버즈 전 시즌(1~6)을 정주행 했다. 음~ 뭐랄까... 볼만은 했으나, 강추까지는 아닌...
수학천재인 동생(찰리 앱스)과, FBI인 형(돈 앱스) 이렇게 두 사람이 이야기의 중심이 되는데... 동생이 수학을 이용해서 FBI의 수사를 돕는다는 내용이다.
뭐, 사실 모든 드라마가 그러하듯 현실성이 떨어지긴 하지만 (아무리 천재라곤 하지만 그 짧은 시간에 정의하기도 힘든 조건들을 가지고 수학적인 답을 얻어내는건... 도저히 이해할 수 없다...-_-; ), 어쨌든 아무 생각없이 보고 있으면, 그냥 꽤 괜찮은 수사물 정도로 볼 수도 있겠다.
후반 시즌으로 갈수록 시청률 저하때문에 고생했다고 하지만 (당연한건가?), 개인적으로는 전반부보다 후반부가 더 나았다.
단순한 수사물이였던 전반부에 비해서, 후반부에는 인간으로서 가질 수 있는 여러가지 고뇌들과 삶의 철학적인 내용이 묻어 나온다.

등장인물들의 일관성이 부족하고 - 왜 나왔는지 의미없이 잠깐씩 나왔다가 더 이상 등장하지 않는 인물들 - 큰 흐름에서 보았을때의 유기성은 좀 떨어지는 것 같으나, 등장 인물의 캐릭터 설정이 상당히 괜찮았던것 같다.
특히... 물리학 교수이자 찰리 앱스의 스승인 래리 플레인하르 교수의 존재감이란...^^;

이런 옴니버스식 드라마의 특징이라고 할 수도 있겠지만 전체적인 스토리의 깊이가 없어서 어느 정도 지나면 슬슬 지겨워 진다.
대신 소재가 무한정하니까, 시리즈를 길게 가져갈 수 있다는 장점이 있겠지만...

여튼 전체적으로 "볼만하다"라는 평을 하고 싶다.

신고

'Essay > Review' 카테고리의 다른 글

[Review][Game] 총망라...  (0) 2011.11.23
[Review] 삼국군영전5  (0) 2011.11.23
[Review][Game] Growlancer (그로우랜서1)  (0) 2011.08.23
[Review] Extreme Programming Explained 2/E  (0) 2011.08.05
[Review] Kingdom Under Fire - Gold Edition  (1) 2011.08.05
[Review] Numb3rs (넘버즈)  (0) 2011.07.06
tags : 드라마, 미드
Trackback 0 : Comment 0

[Essay] SW 엔지니어 역량 측정 - 02

Essay/Software 2011.06.01 08:44

[ SW 엔지니어에 대한 잘못된 생각들 ]

SW를 잘 알지 못하는 사람들이, SW 엔지니어에 대해 이야기 할때 일반적으로 범하기 쉬운 몇가지 오류들에 대해서 짚어보고자 한다.

* SW엔지니어는 일정을 이야기할때 굉장히 보수적인 일정만을 말한다.

음... 일부러 일정을 늘려서 이야기하는 엔지니어도 분명히 존재한다.
그렇지만, 그런 경우는 엔지니어의 태도문제도 존재하지만, 조직의 분위기에도 문제가 있다고 보는게 옳다.
estimation한 일정을 지키지 못했을 경우 - fix된 일정이 아니라 estimation한 일정임에도 불고하고 - '실패'로 몰아세우면서 질책하는 문화에서는 보수적인 일정을 제시할 수 밖에 없기 때문이다.
이런 '책임 회피성 일정'을 논외로 한다면, 엔지니어들은 일정을 굉장히 aggressive하게 제시하는 경향이 오히려 강하다.
왜냐하면, 일에 대한 구체적인 분석이 없는 상태의 초기 estimation은 항상 여러가지 사항들을 놓치게 마련이고, 따라서 실제 일의 양보다 적은 양을 예상하기 때문이다.
그래서, "실질적인 일정 = 엔지니어의 예상 * 2"라는 우스겟 소리도 있다.
따라서, 필자는, 조직에서 SW엔지니어들이 보수적인 일정을 제시하는 경향이 있다면, 그것이 소위 '책임 회피성 일정'이 아닐까를 먼저 의심하고 그렇게 할 수 밖에 없게 만드는 조직의 문제점을 찾아서 제거할 필요가 있다고 생각한다.

* SW엔지니어의 생산성은 투입된 시간에 비례한다.

SW작업에서 물리적인 시간적 투자를 필요로 하는 일은 일부에 지나지 않는다. 대부분은 고도의 집중력을 요구한다.
대부분의 사람들이 위의 이야기에는 동의함에도 불구하고, SW엔지니어가 일한 시간에 관심을 가지는 이유는, 생산성을 측정할 수 있는 방법을 알지 못하기 때문이다.
그렇기 때문에 '시간 투자 = 성실/성과' 이라는 차선(?)책을 사용하고 있고, 이것이 생산성과 시간과의 관계에 대한 잘못된 생각을 퍼트리고 있다.

* 많은 버그를 잡는 사람은 뛰어난 SW엔지니어이다.

버그는, 수정하는게 중요한게 아니고, 만들지 않는 것이 중요하다.
이는 비단 초기 개발 단계만의 이야기가 아니다. 버그를 잡기 위해서 다시 버그를 만드는 과정을 반복하는 많은 미숙한 엔지니어들이 있다.
만약, 실제로 SW를 개발을 하는 팀이라면, 버그에 관계된 성과 측정기준은, 반드시 "발견된 버그의 개수"가 되어야기 "수정한 버그의 개수"가 되어서는 안된다.
이는 유지보수팀에서도 일정부분 적용되는데, 유지보수팀에서는 "버그를 수정한 수"에 앞서 "fix-on-fix"의 수에 더 많은 가중치를 주어야 할 것이다.
넘치는 fix-on-fix를 감당하지 못해서 commit자체를 revert하는 경우도 심심치 않게 일어난다.

* 디버깅을 잘하는 사람은 programming도 잘 한다.

'만류귀종'이라는 말처럼, 궁극에 이르면 두 가지 능력 모두 최고 수준을 보일 것이다.
그렇지만, 상당부분에서 디버깅과 programming은 서로 다른 skill을 요구한다.
필자의 post 중 여기 를 참조하자.

* 작성한 코드의 line수와 생산성은 비례한다.

정말 이 말을 맏는가?
무관하다고 말할 수도 없지만 - 1년에 1라인을 작성한 사람과 하루에 1000라인을 작성한 사람 - 그렇다고 해서 비례하지도 않는다.
너무 극단적인 경우를 제외하고는, 이것은 성과측정의 기준이 될 수 없다.

* 변수/함수의 이름을 바꾸기, 하나의 함수를 두개로 분리하기, compiler warning을 제거하기, 주석 추가/수정하기 등 실질적으로 코드의 동작과 무관한 contribute는 무의미하다.

이런 일들이 생산성과 무관하다고 생각하는 사람이 있다면, 음... 더 이상 필자의 글을 읽을 필요가 없다.
왜냐하면, 기본적인 믿음 자체가 다르기 때문이다.
필자가 보기에는, 이런 일들은 버그를 잡거나, 새로운 기능을 구현하는 것만큼 중요하다.
SW의 가독성을 높여서, 유지보수를 쉽게 하고, SW의 장기적인 건전성을 확보하는 일은 그리 가벼이 볼 일이 아니다.

* 뛰어난 SW 엔지니어는, 버그 및 수정 요구사항을 빠르게 해결해서 적용한다.

'속도'가 중요한게 아니다.
지나치게 빠르다고 생각되는 대부분의 수정은 다량의 'fix-on-fix'를 유발하는 경우가 많다.
'얼마나 빨리 하느냐?' 가 아니라, '얼마나 정확히 잘 하느냐?'가 중요하다.
빨리 했지만 결국에는 버려야 할 contribute보다는, 조금 늦게 진행되고 있지만 착실한 contribute가 가치가 있는 법이다.

기타 많은 것들이 더 있겠지만.. 일단 여기까지만... 생각나면 더 추가하도록 하겠다..

신고
Trackback 0 : Comment 0

[Essay] SW 엔지니어 역량 측정 – 01

Essay/Software 2011.05.31 19:28

* 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의 형태로 보여주는 것이 일반적이다.

신고
Trackback 0 : Comment 0

[Prog] Separating mechanism from policy (microscopical view) - function implementation.

Essay/Software 2011.05.17 14:13

Separating mechanism from policy is very important issue of SW design.
This is also true for microscopic area - implementing function.
Here is one of simplest example - function that calculates area of rectangle.

int rect_area(int left, int top, int right, int bottom) {
        return (right - left) * (bottom - top);
}

Simple, isn't it?
But, this function doesn't have any exception/error handling.
Let's add some of them.

int rect_area(int left, int top, int right, int bottom) {
        if (left >= right)
                left = right;
        if (top >= bottom)
                top = bottom;
        return (right - left) * (bottom - top);
}

It's seems good.
Soon after, another function that calculates area of rectangle is needed.
But, this function should return error value if input rectangle is invalid.
I think quick solution is

int rect_area2(int left, int top, int right, int bottom) {
        if (left > right || top > bottom)
                return -1;
        return (right - left) * (bottom - top);
}

But, in this solution, code for calculating area of rectangle is duplicated.
At above example, this is just one-line code. So, duplicating is not a big deal.
But, it's not good in terms of code structure.
Why did this happen?
Calculating rectangle area is 'Mechanism'.
But, exception/error handling is 'Policy' at this example.
So, above example should be implemented like below.

static inline int _rect_area(int left, int top, int right, int bottom) {
        return (right - left) * (bottom - top);
}

int rect_area(int left, int top, int right, int bottom) {
        if (left >= right)
                left = right;
        if (top >= bottom)
                top = bottom;
        return _rect_area(left, top, right, bottom);
}
int rect_area2(int left, int top, int right, int bottom) {
        if (left > right || top > bottom)
                return -1;
        return _rect_area(left, top, right, bottom);
}

Can you know the difference?
'_rect_area' is implementation of pure 'Mechanism'.
And policy is implemented at each interface function.
Even for simple function, developer should consider CONCEPT of separating Mechanism from Policy.

신고
tags : function
Trackback 0 : Comment 0