불완전성

빚어내기/생각하기 | 2004/09/06 03:41 | inureyes
컴퓨터에 매료된 사람들에게는 (또는 밥줄이 걸린 웬수덩어리로 보이는 사람에게도 동시에 해당된다) 격언 비슷한 것이 있다.

"코딩을 하다 에러가 나면 코딩이 잘못된 것이다."

어딘가 에러가 나서 작성한 프로그램이 돌아가지 않으면 원인은 사용자가 어디엔가 논리구조를 잘못짜거나 에러가 날 요소를 만들었기 때문이지, 결코 컴퓨터가 잘못된 것은 아니라는 이야기이다.

코딩을 좀 해보았거나 컴퓨터를 전공하거나 직업으로 삼는 사람들은 몸서리치도록 느끼겠지만, 코딩에서 시간을 가장 많이 할애하게 되는 부분은 코딩 그 자체가 아니라 디버깅이다. 하루정도 밤을 새고 나면 컴퓨터를 때려 부수고 싶어지게 된다. 그럴때는 컴퓨터를 계속 보고 있지 말고 머리를 식히고 오거나, 다른 일을 하다가 들여다 보거나 해야 '자신이' 만든 논리나 코딩한 문법이 잘못되었다는 것을 알게 되는 것이 일반적이다. -경우에 따라서는 어이없는 구문오류일 경우도 있다.

"컴퓨터는 거짓말을 하지 않아-!"
이 말은 두가지 의미를 담고 있다. 하나는 프로그래밍을 하다 생기는 오류는 코더의 문제라는 의미이고, 다른 하나는 '그래서 컴퓨터가 좋다' 는 다분히 자기 위안적인 솔로 프로그래머들의 대사이다. 그런데 프로그래밍을 좀 깊게 한 사람들은 가-끔 한번씩 당했겠지만 컴퓨터가 거짓말을 하지 않는 것은 아니다.

어셈블리 코딩할 때는 컴퓨터가 거짓말하는 경우가 거의 없다. 그렇지만 같은 저급언어이면서도 레벨이 좀 높은 ANSI-C만 되더라도 가끔 '분명히 논리적으로는 맞는데' 작동하지 않는 경우나 메모리 접근에서 에러를 뱉어내는 경우가 있다. 컴퓨터를 처음 잡았을 때는 그게 다 내 잘못인줄 알았는데, 나중에 알게 되었지만 사실은 컴파일러가 문제이다.

컴파일러들도 일반 소프트웨어처럼 꾸준히 업데이트되고 있다. 가끔은 프리 패칭 방법이나 머신코드를 해석하는 방법의 개선같이 메이저한 업데이트들이 있지만, 보통은 자잘한 컴파일 에러들을 해결하기 위해서 업데이트가 이루어진다. 문법은 맞는데 어찌저찌하다보니 컴파일러는 그걸 잘못 번역한다거나 한다. 그런 일이 거의 없을것 같지만, 아무 C 컴파일러나 release note 잠깐만 보면 새까맣게 버그 수정 기록을 목격할 수 있다. 저급언어인 C가 이럴진대, 상위 언어들은 살펴볼 것도 없다. (하지만 역시나 대부분의 경우는 내가 틀렸기 때문에 릴리즈 노트를 쳐다보느니 다른 방법으로 코딩해 보는 것이 낫다. 만약 릴리즈 노트에 알려진 버그로 되어 있어도, 컴파일러의 업데이트를 기다릴 수 있는 것이 아닌 한 노트를 쳐다보는 것은 쓸데없는 일이다.)

불완전성은 어디에나 존재한다. IT사회에서 정석으로 여기는 컴퓨터 조차 불완전성으로 뭉쳐진 덩어리이다. 펜티엄의 연산 오류나 센트리노 초기 모델의 머신 코드 에러등은 창조주인 인간의 한계이지만, 0.4를 컴퓨터가 제대로 인식 못하는 것은 셈을 할 수 있는 손가락이 하나뿐인 컴퓨터 자체의 한계이다. 인간은 완전을 꿈꾸지만, 그런 것은 이야기 안에서조차 존재하지 않는다. 그렇기 때문에, 자신의 불완전성을 한탄하는 부류들은 세상에서 가장 쓸데없는 것을 걱정하는 부류이다.

유물론자들은 기계의 신의 가능성을 신봉했지만, 돌아온 것은 가운뎃 손가락을 내민 (게다가 손가락이 그것 하나뿐인) 계산기였다. 생각하면 할수록 우스운 일이다
크리에이티브 커먼즈 라이센스
Creative Commons License
2004/09/06 03:41 2004/09/06 03:41
트랙백이 없고, 댓글 2개가 달렸습니다.
ATOM Icon 이 글의 댓글이나 트랙백을 계속 따라가며 보고 싶으신 경우 ATOM 구독기로 이 피드를 구독하세요.

트랙백을 보내세요

트랙백 주소 :: https://forest.nubimaru.com/trackback/240