프로그래밍은 위험한 활동이다. 여러분이 취미로 프로그래밍을 하는 사람이라면 아마도 이 첫 문장을 읽고 놀랐을지도 모르겠다. 여러분은 모니터 화면과 키보드 앞에 안전하게 앉아 있다고 생각할 수도 있다. 그래서 기껏해야 너무 오래 앉아 있어서 생기는 허리 통증이나 타이핑을 너무 열정적으로 해서 생기는 손목 통증 정도의 위험밖에는 없다고 생각할 수도 있다. 하지만 여러분이 전문 프로그래머라면(또는 그런 프로그래머가 되길 바란다면) 현실은 이보다 훨씬 더 가혹하다.

    주된 위험은 프로그램에 숨어있는 버그다. 잘못된 시점에 버그가 나타나면 비용이 아주 많이 들 수도 있다. Y2K 버그를 기억하는가? 1960년부터 1990년까지 작성된 프로그램 상당수는 프로그래머들이 그 프로그램이 21세기까지 존재하리라는 예상을 하지 못했기 때문에 연도를 저장할 때 2자리 숫자만을 사용했다. 이런 프로그램 중 상당수가 1999년도에도 계속 사용되면서 2000년을 1990년으로 취급하게 될 것이라는 우려가 있었다. 이 버그로 인한 비용은 2017년 실제 계산한 결과 4,170억 불에 달한다.1

    프로그램 하나에서 발생한 버그로 치면 버그 당 비용은 훨씬 더 커질 수 있다. 1996년 6월 4일 프랑스 아리안 5호 로켓이 36초 만에 추락했다. 그 원인은 운항 시스템에 있던 단 하나의 버그였다. 정수 연산 오버플로(overflow) 하나로 인해 3억7천만 불이라는 손실이 발생했다.2

    여러분에게 이런 재앙에 대한 책임이 있다면 어떤 느낌이 들까? 매일매일 이런 중요한 프로그램을 작성해야 하는데, 오늘 잘 실행된 프로그램이 내일도 여전히 잘 실행될지 확신할 수 없다면 어떤 느낌일까? 대부분의 프로그래머가 하는 일이 바로 이런 일이다. 이들은 입력이 같더라도 항상 같은 결과를 내놓지는 못하는 비결정적인 프로그램을 작성한다. 사용자도 이를 안다. 그래서 프로그램이 제대로 작동하지 않으면, 원인이 같더라도 결과가 달라질 수 있는 것처럼 프로그램을 다시 한번 실행한다. 때로 재시도를 하면 프로그램이 제대로 동작하기도 한다. 프로그램의 출력이 무엇으로부터 비롯되는지는 아무도 모르기 때문이다.

     

     


    1 미니애폴리스 연방 준비은행 개발 프로젝트, “소비자 가격 지수, 1800-”, https://www.minneapolisfed.org/about-us/monetary-policy/inflation-calculator/consumer-price-index-1800-

     

    2 아리안 501 로켓 발사 실패에 대한 아리안 501 위원회 보고서, http://www.astrosurf.com/luxorion/astronautique-accident-ariane-v501.htm

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.