8월 5th, 2009 by
No comments »
Let’s Make A Deal! Programming Praxis.
Monty Hall 문제로 잘 알려져 있는 확률 문제를 실제로 시뮬레이션 해보는 프로그램.
아래는 OCaml 코드
-
open Random;;
-
open Array;;
-
open Printf;;
-
-
let rec shuffle arr n =
-
if n = 0 then arr
-
else begin
-
let a = Random.int (length arr) in
-
let b = Random.int (length arr) in
-
let va = Array.get arr a in
-
Array.set arr a (Array.get arr b);
-
Array.set arr b va;
-
shuffle arr (n-1)
-
end
-
-
exception Found
-
let find_unchosen_goat arr choice =
-
let ug = ref 0 in
-
try
-
Array.iteri
-
(fun i _ ->
-
if i != choice && Array.get arr i != 1 then begin ug := i; raise Found end
-
else ug := i)
-
arr;
-
0
-
with _ -> !ug
-
-
let find_change_choice arr old_choice unchosen_goat =
-
let cc = ref 0 in
-
try
-
Array.iteri
-
(fun i _ ->
-
if i != old_choice && i != unchosen_goat then begin cc := i; raise Found end
-
else cc := i)
-
arr;
-
0
-
with _ -> !cc
-
-
let check_choice arr choice = Array.get arr choice = 1
-
-
let deal change =
-
let doors = shuffle [|0;0;1;|] 10 in
-
let choice = Random.int 3 in
-
let unchosen_goat = find_unchosen_goat doors choice in
-
let last_choice =
-
if change then find_change_choice doors choice unchosen_goat
-
else choice
-
in
-
check_choice doors last_choice
-
-
(** Written by myself – simulate the whole game *)
-
let simulate ngames =
-
let switch_game_result = Array.map (fun _ -> deal true) (Array.init ngames (fun i -> i)) in
-
let switch_wins = Array.fold_left (fun wins result -> if result then wins+1 else wins) 0 switch_game_result in
-
let stay_game_result = Array.map (fun _ -> deal false) (Array.init ngames (fun i -> i)) in
-
let stay_wins = Array.fold_left (fun wins result -> if result then wins+1 else wins) 0 stay_game_result in
-
Printf.printf "Winning rate for switch choice : %f\n" ((float_of_int switch_wins) /. (|>float_of_int ngames));
-
Printf.printf "Winning rate for stay choice : %f\n" ((float_of_int stay_wins) /. (|>float_of_int ngames))
-
-
(** Translation of suggested solution – simplified simulation*)
-
let monty n =
-
Random.self_init ();
-
let rec monty n switch stay =
-
let auto,pick = Random.int 3, Random.int 3 in
-
if n = 0 then (switch,stay)
-
else
-
if auto = pick then monty (n-1) switch (stay+1)
-
else monty (n-1) (switch+1) stay
-
in
-
monty n 0 0
-
-
(** More simplified *)
-
let monty2 n =
-
Random.self_init ();
-
let rec monty2 n switch =
-
let pick = Random.int 3 in
-
if n = 0 then switch
-
else
-
if pick = 0 then monty2 (n-1) switch
-
else monty2 (n-1) (switch+1)
-
in
-
monty2 n 0
결과를 보면 선택을 바꾼 경우 이길 확률이 2/3가 된다는 것을 볼 수 있다.
# monty2 1000;;
- : int = 674
# monty2 10000;;
- : int = 6657
# monty2 100000;;
- : int = 66647
7월 19th, 2009 by
No comments »
간만에 예비군 훈련 갔더니 아뿔사 그 지루한 시간에 대한 대비를 하지 못했다. 핸드폰에 시간 때우기용 만화나 판타지 소설을 담아가지 않은 것이다. 그런데 메모리 카드를 뒤져보니 아주 옛날에 넣어두고 잊어버린 소설이 한 편 있었다. 바로 앙드레 지드의 ‘좁은 문’이다. 유명한 소설이라 담아둔 것 같은데 전혀 들춰보지 않고 있다가 이러한 특수한 상황에 되니 그거라도 읽을 수밖에 없었다. 지루할 것 같다는 선입견을 가지고 보기 시작했는지 처음에 무척 길게 나오는 작가 소개 글이 너무 지겨웠다. 겨우 참아가며 읽어가니 한참 뒤에 실제 소설이 1인칭 시점으로 시작한다.
-여기서부터 미리니름 있음-
줄거리를 간단히 말하면 남자 주인공 제로옴이 사촌누나 알리싸를 사랑하는 내용인데, 서로 사랑하지만 결국 이루어지지 못하게 된다. 현재의 상식으로는 두 사람 사이의 친족관계 때문에 그럴 것 같지만, 소설에서는 친족관계 따위는 아무런 문제가 되지 않는다. 문제는 알리싸가 심하게 기독교에 심취하여 청교도스러운 (즉, 과도하게 도덕을 강조하고 쾌락을 배척하는) 생활을 하기 때문이다. 알리싸는 실제로 그 누구보다 제로옴을 사랑하지만, 기독교의 가르침을 너무 직접적으로 받아들이며 인생의 궁극적 목표를 하느님을 향한 사랑으로 정해버리게 된다. 그래서 두 양립 불가능한 사랑 사이에서 고뇌하다가 결국 몸도 상하고 젊은 나이에 세상을 뜬다.
작가가 이 소설에서 안티기독교를 주장하려는 걸 제쳐놓고 보면, 두 사람 사이의 안타까운 사랑 얘기를 하고 싶었던 것일 텐데, 약간 억지스러운 설정에 눈을 감으면 사랑의 묘사는 나름 훌륭한 것 같다. 알리싸가 제로옴과 하느님 사이에서 갈팡질팡하며 결과적으로 (심하게 말하면) 제로옴을 갖고 논 게 됐는데 그게 참 어이없으면서도 애절한 마음을 잘 표현한 것 같다. 나중에 곱씹어보면 알리싸는 애초에 그냥 수녀가 되던가 해서 제로옴을 단념했어야 하는데 아무것도 안줄거면서 끝까지 놓아주지 않는 게 좀 억지스럽긴 했다. 사실 앞에서 제쳐두었던 안티기독교도 소설의 큰 내용을 이루고 있긴 하다. 주인공들의 대화가 상당히 직접적으로 이 문제를 다루고 있기 때문이다. 결론은 ‘신도 적당히 믿어라’ 인 듯 하다.
극도로 지루한 환경에 의해 거의 반 강제적으로 읽게 된 소설이지만 그래도 한 번 잡고 읽으니 별로 길지도 않아서 끝까지 다 읽을만한 흥미있는 책이었다. 하지만 좀 더 치열한 사랑 이야기를 읽고 싶으면 차라리 에밀리 브론테의 ‘폭풍의 언덕’을 추천하고 싶다.
6월 28th, 2009 by
2 comments »
리처드 도킨스의 ‘눈 먼 시계공’(책에는 ‘눈먼 시계공’이라고 되어있는데 ‘눈’과 ‘먼’을 띄는 게 맞는 것 같다)을 드디어 다 읽었다. 2주 쯤 전까지 한참 재밌게 읽다가 두어 장을 남겨두고 잠시 한 눈을 팔았더니 금방 시간이 지나가 버렸다. 그래서 다시 맘 잡고 읽었더니 금방 읽을 수 있었다. 책의 중후반까지 책의 가장 중요한 내용인 진화론의 자연 선택에 의한 적응적 복잡성을 설명하고 있고, 마지막에 부분은 다른 경쟁 이론(이라고 쓰고 ‘경쟁상대도 안되는 이론’이라고 읽음)들의 문제점을 지적하며 진화론이 가장 합리적이며, 실제로는 적응적 복잡성을 설명하는 유일한 이론이라는 것을 주장하고 있다.
진화론 자체에 대한 설명은 (비록 내가 전문가는 아니지만) 흠잡을 곳 없이 훌륭하다고 생각한다. 다양하고 설득력 있는 예를 들어가며, 또한 일반인을 위한 책답지 않게 상당히 정교한 논리로 무장했지만 무척 읽기 쉽게 설명하고 있다. 번역도 상당히 좋고 역주도 너무 많지도 적지도 않게 들어가 있는 것 같다. 내용 중에 특히 인상적이었던 것은 인간과 문어의 눈을 비교한 것과 박쥐의 ‘반향 위치 결정’에 대한 소개였다. 또, 점토의 진화의 예를 들어 최초의 생명체에 대한 설명을 소개한 것도 아주 흥미로웠다.
뒷부분의 분류학에 대한 이야기나 기타 이론에 대한 공격은 사실 좀 따분하다. 이 책이 1986년도에 처음 나온 것을 감안하면, 그 당시에는 여전히 첨예한 논쟁이 있었던 것 같지만, 아마 지금은 라마르크주의자나 돌연변이주의자인 생물학자는 존재하지 않을 것 같다. 물론 그 중에서도 가장 설득력 없는 이론을 믿는 창조론자는 여전히 존재하는 게 상당히 안타깝긴 하다.
책을 읽으면서 나도 진화론에 대해 정확하게 알지 못하고 있었다는 사실을 알게 되었다. 사실 진화론에 대해서 공부한 건 고등학교 생물 시간이 마지막이었고, 거기서도 별로 많은 것을 다룬 것 같진 않다. 고등학교나 그 이전에 이 책을 읽었더라면 좋았을 것 같다는 생각이 든다. 비록 번역은 2004년에 처음 나왔지만… 그 유명한 ‘이기적인 유전자’도 아직 읽어보지 못했는데 읽어봐야 할 것 같다. 어쨌든 누구에게라도 추천하고 싶은 아주 훌륭한 책이다. 리처드 도킨스는 훌륭한 학자에 훌륭한 저술가이기도 한데 거기에 매우 멋진 점은 공격적으로 글을 쓴다는 것이다. 물론 공격적으로 글을 쓰는 것은 누구나 할 수 있지만(조중동 찌라시 논설위원들같은 놈들 처럼), 논쟁을 피하지 않으며 도킨스처럼 자신의 주장에 대한 아주 세세한 부분까지 모두 정확하게 이해하고 논리적인 주장으로 그러한 글을 쓰는 것은 결코 쉽지 않은 일이다. 이제 ‘The God Delusion’을 읽어야겠다. :)
6월 12th, 2009 by
1 comment »
저번 주 토요일, 6월6일을 맞아 그동안 목록에 담아 두었던 책들을 질렀다.
- 기억을 찾아서
- The World Is Flat [Further Updated and Expanded]
- 갈릴레오의 아이들
- The God Delusion
- House of Many Ways
- The Origin of Species
- 세상에서 가장 쉬운 한자 공부법
- 브레인 룰스
HoMW는 내가 ‘Castle in the Air‘에서도 썼듯이 재밌게 보던 판타지 소설 시리즈의 최근 책이다. 어린이날은 한참 지났지만 그래도 지금이라도 갖게 되어 기쁘다. 전작들이 하나같이 모두 훌륭해서 이번 것도 충분히 나를 만족시켜 주리라 기대한다.
TOoS는 매우 중요하고 훌륭한 과학 고전으로써, 최근 재밌게 읽고 있는 ‘눈먼 시계공’에 자주 언급되고 있어서 원전을 읽어봐야겠다는 생각을 들게 했다.
TGD는 ‘눈 먼 시계공‘의 저자인 리처드 도킨스의 또다른 – 사실 이 사람의 책은 거의 다 유명하지만 – 유명한 책으로써, 특히 종교를 다루어서 더욱 논란이 된 책이다. 2년 전 처음 나왔을 때부터 계속 읽고 싶었지만 꾹 참고 있다가 이번에 함께 질렀다.
‘기찾’과 ‘브룰’은 한겨레 서평을 보고 재밌어 보여서 샀다. 이건 역시 몇 달 전에 읽었던 ‘아내를 모자로 착각한 남자’와 맥락을 같이 하는 뇌에 관한 책들이다.
TWIF는 현성이가 최근 읽고 있는 책인데, 재밌다고 추천해서 함께 샀고 ‘갈아’는 인터넷책방을 둘러보다가 르귄의 이름이 붙어있길래 냉큼 샀다.
원서를 좀 많이 샀는데. 원서를 선택한 가장 큰 이유는 원서가 더 저렴했기 때문이고(TWIF,TGD,TOoS), 두 번째 이유는 원서로 밖에 나와있지 않은 책이 있으며(HoMW), 마지막 이유는 영어로 읽는 훈련을 하기 위해서이다.
아, ‘세가쉬한공’은 싼 맛에 넣었는데, 이상하게 내가 이용하는 인터넷 책방에서 5만원 이상을 주문하면 2000원을 적립해주지만 10만원을 산다고 해서 4000원을 적립해주지는 않길래 적당히 5만원씩 두 번 주문하기 위해서 끼워 넣은 책이다. 이름이 매우 선정적인데 몇 천원 정도 값만 해주면 좋겠다.
5월 24th, 2009 by
No comments »
이 소식을 처음 들었을 때는 참으로 어처구니 없다는 생각밖에 안들었지만 좀 더 천천히 생각해보니 그럴만 하니까 그랬구나 하는 생각이 들었다. 그는 한 평생을 단 한 번도 자신의 뜻을 굽히지 않고 살아온 사람이었다. 꺾일지언정 굽히지는 않는다는 말이 딱 들어맞는 사람이었고, 엄청난 수모와 배신에 끝까지 버티다가 이렇게 꺾여져 간 것 같다. 결국 정말 너무나 노무현다운 선택이 아니었나 싶다. 하지만 여전히 좀 더 곁에 있었으면 하는 바람을 지울 수 없다. 어쨌든 간에 노무현은 한국 역사에서 가장 훌륭한 지도자였던 사람이었으며 영원히 사람들에게 기억될 것이다.
5월 15th, 2009 by
1 comment »
피타고라스의 창 >> 타자 타율이 0.334면, 타자는 최소 287타수가 필요하다는 사실의 증명.
재밌는 문제가 보여서 풀어보았다.
타자 타율이 0.334면, 타자는 최소 몇 타석이 필요한가? (TAOCP에 나온 문제라고 함)
a타수 b안타의 타율이 b/a이므로, 반올림 해서 0.334의 타율이 되려면, a와 b가 0.334 <= b/a < 0.3345를 만족해야 한다. 이를 만족하는 최소 자연수 a를 찾으면 된다.
아래는 Ocaml 코드.
-
let c1 = 1000.0 /. 334.0 in
-
let c2 = 10000.0 /. 3345.0 in
-
let rec range i j = if i > j then [] else i :: (range (i+1) j) in
-
let min_int_between i1 i2 =
-
let minv,maxv = min i1 i2, max i1 i2 in
-
match compare minv maxv with
-
-1 -> if maxv - minv > 1 then Some (minv+1) else None
-
| _ -> None
-
in
-
let hit a b = (float b) /. (|>float a) in
-
let blist = range 0 200 in
-
let aoptlist = List.map (fun b ->
-
let f1,f2 = c1 *. (|>float b), c2 *. (|>float b) in
-
let i1,i2 = (truncate (ceil f1)), (truncate f2) in
-
(b,min_int_between i1 i2)) blist
-
in
-
List.iter (fun (b,aopt) ->
-
match aopt with
-
None -> ()
-
| Some a -> Printf.printf "%d/%d %f\n" b a (hit a b)) aoptlist;;
아래는 결과.
96/287 0.334495
97/290 0.334483
98/293 0.334471
99/296 0.334459
100/299 0.334448
즉, 적어도 287타수는 해야 0.334의 타율을 얻을 수 있다. 저 블로그의 내용을 보면 연분수 전개라는 방법이 있다는데 뭔지는 모르겠다. 아예 이름이 생소한데, 학교에서 배운 적은 없는 것 같다..
5월 3rd, 2009 by
1 comment »
두어 달 정도 끌어온 Diana Wynne Jones의 판타지 소설 `Castle in the Air‘(이하 CitA)를 이제서야 다 읽었다. 먼젓번에 읽었던 `Howl’s Moving Castle‘(이하 HMC)이 워낙 재밌고 생각보다 술술 읽혀져서 그 후속작인 CitA를 주저치 않고 샀는데 역시 날 실망시키지 않았다. 처음에 주인공 이름이 압둘라이고 배경이 아랍쪽 나라 비슷한 곳에서 시작하길래, HMC와 그냥 느낌만 비슷한 판타지라고 생각했던 생각은 글 후반부에 가서 크게 무너져버리고 말았다. 게다가 HMC에서의 반전에서 느꼈던 것과 비슷한 느낌의 깜찍한 반전 역시 같은 작가의 후속작임을 잘 드러내주고 있는 것 같다. 엉뚱한 꿈을 꾸고 허둥지둥하지만 나름대로 용감하고 친절한 압둘라와 세상 물정을 잘 모르지만 너무나 아름답고 똑똑하고 사려깊은 Flower-in-the-Night는 정말 잘 어울리는 한 쌍이다. 그리고 소피, 하울과 캘시퍼도 이젠 친숙해서 친구같다는 느낌까지 들어, 이야기가 끝난 게 매우 아쉽다. 허황되지만 코믹하고 순수한 이야기가 어린이들에게 상상의 나래를 펼치게 해주는 내용이지만 나도 간만에 무척 즐거운 꿈을 꾼 것 같다. :)
책을 읽은 기간동안 내게 준 행복감을 정량적으로 따진다면 CitA에게 더 나은 점수를 줄 수 있을 것 같은데, 사실상 HMC의 배경이 없이 CitA가 존재하는 것은 말이 안되기 때문에 재미를 비교할 수는 없을 것 같다. 결국은 두 작품 모두 읽으라는 뜻.
단점이라면 너무 생소한 단어들이 많아서 조금 읽기 힘든 경우가 많았다는 것이다. 대부분 그냥 지나치거나 적당히 유추해 읽어도 이야기 이해에 큰 문제 없는 단어들이지만, 그래도 내가 어린이용 소설을 읽으면서 쩔쩔매나 하는 생각이 들곤 했다. :(
이 글을 쓰면서 이 시리즈의 세 번째 책 `House of Many Ways‘이 나왔다는 걸 알았다. 2008년에 나와서 출간한지 1년도 되지 않은 아직 상당히 따끈따끈한 책이다. 근데 그 따끈함에 걸맞게 다른 책들에 비해 가격도 두 배다. HMC가 1986년, CitA가 1990년에 나왔는데 그 후속편이 18년만에 나오다니. 허허. 아무래도 HMC의 애니메이션이 나온 뒤 팬들의 독촉이 심해지고 (아마 본인의 손자,손녀들이 그 장본인일 가능성도 크다) 예전에 적당히 구상해 뒀던 걸 꺼내서 써낸 게 아닌가 싶다(물론 순전히 나의 상상이다). 사연이 어찌 됐든 독자로서는 무척 즐거운 일임에 틀림 없다. 어쨌거나 책 제목만 보면 다시 하울과 그 일당이 나올 것 같은데 상당히 궁금하다. 아무래도 어린이날 선물로 내게 사줘야겠다. :)
4월 30th, 2009 by
No comments »
이맥스를 사용하다 보면 수많은 버퍼를 열게 된다. 버퍼를 열 때 현재 버퍼 위치에 새 버퍼를 열 때도 있고 다른 위치에 버퍼를 열 때도 있다. 다른 위치에 버퍼를 열 때, 원래 그 위치에 있던 버퍼는 보이지 않게 된다. 그런데 종종 어떤 버퍼는 다른 버퍼에 의해 가려지지 않고 화면에 계속 표시되면 좋겠다는 생각을 한다. 예를 들어 레퍼런스 버퍼나 REPL 혹은 인터프리터 버퍼 등은 프로그램을 짜면서 계속 이용하기 때문에 다른 버퍼에 가려지면 매우 귀찮다. 이 때 유용하게 사용할 수 있는 게 아래 링크에 나와있는 sticky buffer mode이다.
Re: Lock buffer to window
-
(define-minor-mode sticky-buffer-mode
-
"Make the current window always display this buffer."
-
nil " sticky" nil
-
(set-window-dedicated-p (selected-window) sticky-buffer-mode))
이 코드를 .emacs에 넣고 고정시키기를 원하는 버퍼에서 M-x sticky-buffer-mode를 입력하면 해당 버퍼가 붙박이 버퍼가 된다.
4월 23rd, 2009 by
No comments »
몇 달 전에 블루투스 스테레오 헤드셋을 하나 장만했다. 내가 가지고 있는 pda폰으로 음악이나 팟캐스트를 듣는데 여태껏 번들로 딸려온 유선 이어폰을 이용하여 들었다. 예전에 사용하던 핸드폰에서 음악을 들을 때는 편리함을 떠나 음질이 너무나 좋지 않아서 제대로 들을 수가 없었는데 1년 쯤 전에 저렴하게 산 pda폰은 상당히 음질이 좋고 pda로써의 편리함까지 갖추어 아주 만족하면서 사용하고 있었다. 그런데 이어폰을 항상 핸드폰에 연결해 두기에는 선이 너무 거추장스러워서 음악을 들을 때만 끼웠다가 빼서 따로 보관하는 등의 작업이 필요했다. 이 일을 반복 하다보니 너무나 귀찮은 일이라는 생각이 들었다. 요즘 같은 무선 세상에 계속 선을 꼽았다 뺐다 하다니… 내 pda폰은 블루투스 모듈도 들어있지만 전혀 사용하지 않다가 이 기회에 한 번 제대로 사용해 보자 하는 생각으로 블루투스 스테레오 헤드셋을 질렀다.
여러 가지 종류의 헤드셋을 비교해 보고서 내가 결정 한 것은 BLUETREK ST1이었다. 내가 이 것을 선택한 기준은 크게 두 가지로, 가격과 모양이다. 첫째로 최저 가격이 약 35000원인데 블루투스 헤드셋의 가격대를 봤을 때 비교적 저렴했다. 블루투스 기기를 처음 써보는 나로서는, 처음부터 비싼 기기를 샀다가 혹시 내게 잘 맞지 않아 낭패 보는 일이 없도록 저렴한 것을 사는 게 중요했다. 둘째로 중요한 것은 기기의 모양이다. 애초에 거추장스러운 선을 없애자는 취지에서 무선 기기를 장만하는 건데, 어떤 헤드셋은 mp3 플레이어처럼 생기고 이어폰을 꽂게 되어 있어서 무선 기기의 장점을 반감시키는 모양이 있었다. 그 것들도 나름대로 장점이 있겠지만 내 의도와는 거리가 멀었다. 하지만 ST1은 백폰 스타일의 단일한 몸체에 모든 것이 들어있어서, 가방 안에서 거추장스럽게 다른 것들과 섞이거나 꼬일 염려가 없다. 이상하게도 이런 스타일의 헤드셋의 종류가 상당히 적어서 선택의 폭이 크게 줄어들었고, 앞서 언급한 가격 기준에 부합하는 것은 ST1 하나였으므로 결국 이것을 고르게 되었다.
몇 달간 사용해본 결과를 한 마디로 말하면, 상당히 만족스럽다고 할 수 있다. 처음에는 페어링이니 뭐니 해서 익숙치 않아 계속 버벅거렸는데 지금은 편리하게 사용하고 있다. 사용하다 보니 전에는 생각치 못했던 장점이 있는데, 그건 바로 동작 시간이다. 무선 기기의 태생적 한계로써 배터리를 충전해야 한다는 문제가 있는데, 당연히 한 번 충전해서 오래 쓰면 쓸수록 좋은 것이다. ST1의 동작 시간은 생각보다 상당히 길어서 내 생활 패턴에 잘 맞았다. 출퇴근 길에 사용하고 있어서 하루에 평균 한 시간 정도 사용하는데 보통 일주일을 넘게 사용하는 것 같다. 또한 전화통화를 조금 오래 할 때 전화기를 귀에 대고 얘기하는 것은 팔도 아프고 전자파 걱정도 생기는데 무선 헤드셋을 사용함으로써 그런 불편함이 많이 사라졌다.
물론 장점만 있는 것은 아니고 생각치 못했던 불편한 점도 꽤 있다. 가장 큰 문제점은 특유의 백폰 스타일의 모양에서 생기는 문제로써, 목 뒤쪽에 튀어나와있는 부분이다. 평소에는 별 문제가 없지만 목 뒷 부분의 옷깃이 좀 길거나 하면 마찰이 생기고 기기가 조금씩 밀려서 착용감이 좋지 못하다. 또한 의자에 앉아서 뒤로 몸을 눕히면 등받이에 닿아서 사용에 심각한 문제가 생기게 된다. 튀어나온 부분이 목에 수직으로 서게 되어서 이러한 문제가 생기는데 그 부분을 약간 혀서 목 피부에 수평이 되도록 설계했다면 이러한 문제는 생기지 않았을 것이다. 두 번째 문제는 음질에 관한 것이다. 블루투스 음질이 완벽하지 못하다는 것은 이미 다른 글 등을 통해 알고는 있었지만 조용한 곳에서는 잘 느낄 수 있는 화이트노이즈가 있다. 특히 기기의 볼륨을 키우면 상당히 거슬리는데 이를 완화하기 위해서는 본체(핸드폰)의 음량을 최대로 하고 기기의 음량을 최소로 해야 한다. 하지만 조금 완화가 된다고는 해도 조용한 클래식 음악을 감상하기에는 조금 부적절하다. 세 번째 문제는 블루투스 버전이 낮아서 생기는 문제인데, 멀티페어링이 되지 않는다. 따라서 여러 기기(혹은 컴퓨터 및 노트북)에서 번갈아가며 사용하기 위해서는 매번 페어링을 해야 한다. 이는 매우 번거로운 작업임에 틀림없다.
4월 11th, 2009 by
No comments »
어렸을 때 어디선가 아래와 같은 내용의 글을 읽은 적이 있다.
사람이 눈을 감고 앞으로 걸으면 큰 원을 그리면서 제자리로 돌아온다.
아주 아주 넓고 평평하고 아무런 장애물이 없는 운동장에서 눈을 가리고 걷는다고 상상해보자. 처음엔 무서워서 잘 걷지 못하겠지만 곧 익숙해져서 똑바로 걸을 수 있을 것이다. 그런데 똑바로 걷는다고 생각하고 걸어도 한쪽으로 기울어져 걷다가 제자리로 돌아온다니 매우 재미있는 일이다. 그 글에서 이유를 이렇게 설명해 놓았다.
사람은 양쪽 다리의 길이가 완전히 같지는 않기 때문에, 양쪽 다리를 똑같이 움직이면 한 쪽으로 기울어져 걷게 된다. 사람이 똑바로 걸을 수 있는 것은 주변 상황을 끊임없이 눈으로 확인하고 방향을 조정하면서 걷기 때문이다.
꽤 일리 있는 말이라고 생각한다. 이 이야기가 상당히 인상 깊어서 기억에 남아 있었는데 최근에 어떤 일을 겪고 나서 다시 이 이야기가 생각났다.
매우 불합리한 어떤 일을 지적한 사람이 있었다. 다른 나라의 경우와 비교해 볼 때 불합리하다는 것이 매우 당연하지만, 이해 관계가 복잡하게 얽혀있으며, 문제의 세부 사항은 상당히 복잡해서 그 세부 사항을 정확히 이해하는 것은 전문가가 아니고서는 어려운 일이다. 하지만 앞에서 언급한 사람은 이쪽 분야의 전문가가 아님에도 문제점을 지적하고 공론화하였다. 왜냐하면 문제가 있다는 것 자체는 너무 명확하기 때문이다. 그 과정에서 문제가 이지경까지 오게 된 책임을 해당 분야의 전문가들에게 돌렸는데 이 과정에서 몇몇 전문가(!)들이 크게 반발하게 되었다. 그 전문가들은 자신의 견해를 피력했지만 그 중 상당 부분은 감정적인 대응이었다. 아무리 자신들의 행동이 비난받았다고는 하지만 해당 분야에서 십수년씩 일해 온 전문가라는 사람들도 이 문제의 본질에 대해서 논쟁하지 못하고 자신의 행동을 비난했다는 것에만 정신이 팔려 있었다.
나는 이공계 사람들은 평균에 비해 훨씬 논리적이라는 생각을 가지고 있다. 상당히 편협한 생각이지만 내가 경험한 바로는 충분히 그런 경향이 있다고 결론 내릴 수 있다. 하지만 그렇게 논리적이고 전문적인 사람들조차 쉽게 오류에 빠지는 것을 보고 나니, 내 스스로에 대해서도 언제든지 같은 잘못을 저지를 수 있겠다는 생각이 들었다. 마치 처음에 언급한 이야기에서처럼 끊임없이 주변을 돌아보고 나아갈 방향을 수정하며 걷지 않는다면 결국은 제자리를 빙빙 돌게 되는 것이 사람의 생각하는 것에 있어서도 정확히 같은 교훈을 주고 있다. 자신이 정확한 논리를 이용해 올바르게 생각하는지 끊임없이 주의하지 않는다면, 결국 편견과 아집과 오류로 귀결된다는 것이다.