1. 문서대로 작동하지 않는 기능 발견
2. 포럼 검색
3. 버그 트랙커에 이미 이 버그가 등록되어 있음을 찾아냄
4. 제발 버그 좀 고쳐주세요에 vote
5. 정신 차리고 다른 기능을 손보다가 다시 1번으로
젠장...
신입 직원에게 프로그램 교육을 위해서 과제를 내줬는데, 프로그램이 이해 불가능한 성능을 보여서 같이 원인을 찾아봤다. 프로그램이 죽도록 느린 이유는 다름아닌 rand_s().
내 경우 난수 생성을 할 때 보통은 stdlib의 rand()를 쓰고, 프로젝트에서는 메르센-트위스터를 사용한다. rand()는 정말 빠르고, 메르센-트위스터도 속도로 인해 나를 고민하게 만든 적은 없다. 물론 둘은 안전하지 않다고 알려져 있다. 그러니까 성깔 있는 놈한테 걸리면 다음 난수를 예측당할 수도 있는 것이다. 그러나 MMO 서버의 특성상 동시 다발적으로 나 외의 수 많은 사람들에 의해서 (심지어 NPC도) 난수가 생성되기 때문에 사실상 안전하다고 봐도 된다(온라인 포커 게임이나 릴게임 같은 경우에는 실제로 분석해서 맞추는 성깔 있는 놈들이 진짜 있다).
MSDN에 의하면 rand_s()는 cryptographically secure random numbers를 생성한다고 한다. 물론 그를 위해서 막대한 대가를 치를테고 말이다. rand_s()의 득과 실을 파악하고 상황에 맞게 사용하자. 닭 잡는데 소잡는 칼은 필요 없으니 말이다.
신입 직원에게 내준 프로그램은 보안따위는 전혀 신경 쓸 일이 없었다.
이제 윈도우와 리눅스의 우열을 가리는 것은 사실상 의미가 없다. 이미 윈도우 서버를 잘 쓰고 있다면, 그걸 리눅스로 바꾸는 행동은 삽질에 가깝다. 그냥 구인하기 쉬운 OS를 도입하면 된다.
그러나, 윈도우 서버에는 큰 단점이 하나 있고 이때문에 도입 불가능한 분야가 실제로 있다. 그게 바로 '윈도우 업데이트'다. 더 정확히 말하면 업데이트 후 리부팅이다. 한달에 두세번씩 강제적으로 하는 리부팅이 분야에 따라서는 치명적일 수 있다. 물론 업데이트따위는 깔끔하게 무시하고 버티는 방법도 있기는한데, 이는 더 큰 문제를 초래할 수도 있으니 가능하면 업데이트는 다 하는게 좋다.
윈도우 서버가 리눅스의 거센 공세를 막고 세를 계속 확장(사실 이미 하향세)하려면 이 업데이트 문제를 반드시 해결해야한다. 실무에서만 10년 가까이 윈도우만 쓴 나도 짜증나서 바꿀까?하는 생각이 들때가 있으니 말이다.
스크럼을 쓰다보니 그 기저에 깔린 사상은 예전에 도덕인지 윤리인지 모를 과목에 나왔던 북한의 자아비판과 다를게 없다는 생각을 하게 된다(요즘에도 도덕이라는 과목이 있을려나).
공개적인 자리에서 하찮은 이유로 일을 못했음을 알리는 수모와 굴욕은 자아비판과 다를게 없다. 그러나 세상 모든 일에 예외가 있듯이 이 굴욕적인 자아 비판이 대수롭지 않게 변할 수 있는 간단한 방법이 있다.
그것은 모든 참여자가 이 공개적인 자아비판을 단순한 과정으로 여기는 것이다. 못한 것도 과정, 그걸 자랑스럽게 말하는 것도 과정 그리고 어색하게 웃으면서 넘어가는 것도 한 과정이 되는 것이다. 모든 것이 이렇게 매너리즘의 한 요소가 돼 버리면 스크럼은 끝이라고 봐야하고, 데일리 미팅은 그저 시간 때우기에 불과하다.
우리가 보는 스크럼 책(애자일 관리서 포함)에는 이런 경우가 없다. 모든 참여자는 다 능력있고 책임감이 넘치며 자신의 무능력과 실수를 부끄럽게 여긴다. 그래서 그들의 스크럼에는 실패가 없지만, 현실은 그렇지가 않다. 처음에는 분명히 자신의 실패를 부끄럽게 여기지만 실패가 반복되면 더 이상 숨길 것도 없고 부끄러울 것도 없다. 그리고 그 과정을 바라보고 있는 동료들에게도 면죄부를 대량으로 발행하게 된다.
팀장(스크럼 마스터든 PM이든 뭐라고 부르든간에)이라면 이러한 과정의 진행을 그냥 바라보고 있어서는 안된다. 실패는 부끄러운 일이고 팀에 큰 악영향을 주고 있다는 사실을 계속해서 팀원들에게 주입 시켜야한다. 물론 이게 너무 공개적이 되면 비난이 되니 그 정도도 관리가 필요하긴하다.
오늘 코딩을 하다가 우연히 알게 된 사실인데, 템플릿의 파라미터가 템플릿인 경우에 꺾쇠괄호(>)가 두 개 겹쳐도 정상적으로 파싱이 된다. 그러니까
template1<template2<int>> dc;
이게 정상적으로 된다는 말이다. 이거 예전에는 않되서
template1<template2<int> > dc;
처럼 이상하게 중간에 공백을 두고 썼는데, 언제부터 파싱을 제대로 하게 된 건지 알 수 없다. 미리 알았으면 삶이 좀 더 편했을텐데.
ps. VS2008 기준