C/C++ 언어와 윈도우 프로그래밍의 매력에 빠져 긴 시간 동안 취미로 혹은 직업으로 프로그래밍을 해오고 있다. 서울대학교에서 조선해양공학과 전산학을 전공하고 미국 조지아텍 전산학과에서 어떻게 하면 프로그래머가 병렬 프로그래밍을 더 쉽게 할 수 있을까라는 문제에 골몰하고 있다. 포시에스에서 웹 리포팅툴 소프트웨어를 개발하였으며, 인텔에서 프로그램의 병렬성을 분석하는 기법을 연구하였다.
미숙양은 지금 만드는 멀티스레드 코드의 이상한 버그 때문에 골치 아파하고 있다. 버그가 있는 것은 확실한데 그것을 정확하게 재현하기가 너무 어렵다. 버그를 잡겠다고 printf를 넣었는데 그러면 버그가 희한하게 사라져 나타나지 않는다.
미숙양: 도대체 왜 printf 넣었다고 버그가 감쪽같이 사라지죠? 문제가 뭘까요? 김팀장: 전형적인 멀티스레드 버그인 것 같아요. 미숙양: 네, 맞아요. 지금 이 코드는 멀티스레드로 돌아가는데요. 특별히 싱글스레드와 버그 잡는 것이 무엇이 다를까요? 김팀장: 멀티스레드 버그는 하이젠버그(Heisenbug)라고 부르기도 해요. 혹시 들어봤어요? 미숙양: 아니요, 처음 듣는데 무슨 말인가요? 합성어 같기도 한데. 김팀장: 네, 하이젠버그는 양자역학에 큰 기여를 한 물리학자 베르너 하이젠베르크(Werner Heisenberg)와 버그를 합친 말이에요. 미숙양: 왜 갑자기 그 물리학자 이름이 나올까요? 김팀장: 하이젠베르크는 불확정성의 원리라는 것을 만들었는데요. 쉽게 설명하면, 자동차는 속도나 가속도를 쉽게 측정할 수 있어요. 전파를 쏘아 자동차에 부딪혀 반사되는 것을 관찰해서 가능한 것이죠. 그런데 이런 측정이 원자 수준에서는 불가능해요. 원자에 있는 전자의 움직임을 자동차 속도 측정하듯이 할 수 없어요. 미숙양: 아하, 그래서 멀티스레드 버그를 잡겠다고 디버거를 붙이거나 printf를 넣으면 사라지는 것이군요.