자신의 프로그램에 목숨을 걸 수 있습니까

Agile 이야기라는 블로그에 오픈마루의 대학성 인턴 면접시에 했던 질문에 대한 글이 있었다.
과거에도 한번 읽어본적은 있었으나, 그것에 대한 구체적인 나의 대답은 길게 생각해보지 않은
passive한 태도를 취했지만, 머지 않아 입사면접을 치뤄야 할 나에게는
이제 더이상 지나칠 수가 없다. 그래서 진지하고 담담하게 나의 생각을 떠올려보았다.
2시간을 생각한건 아니지만, 나름 신중한 생각을 해보았다.
문제
리스트는 유한개의 원소가 정해진 순서로 들어가 있는 자료구조입니다. 리스트에 포함된 원소는 하나의 숫자일수도 있지만 또다른 리스트일수도 있습니다. 이렇게 리스트 속에 리스트가 들어 있는 것을 중첩 리스트(nested list)라고 합시다.

리스트를 격자괄호로 둘러싸고, 각 원소는 쉼표로 구분해 표기하도록 하죠. 다음은 중첩 리스트의 예입니다.

[1, 2, [3, 4, [5]], 6, [[7,8]]]

예를 들어, 이런 리스트가 주어져 있을 때, 그걸 평평하게 만들어주는 프로그램 F를 작성해야 합니다.

즉, 결과가 [1, 2, 3, 4, 5, 6, 7, 8]로 나오면 됩니다.

그 런데 몇 가지 조건이 더 주어집니다. 자신은 예컨대 2시간 후에 수술을 받아야 합니다. 그때 사용하는 수술 기계에 이 프로그램이 중요한 역할을 하게 됩니다. 자신이 직접 작성한 프로그램으로 수술을 받는 것입니다. 프로그램이 오작동하면 자신은 죽을 수도 있습니다.

이 프로그램이 정상작동한다는 것을 최대한 보장하기 위해 프로그래밍 전, 프로그래밍 중, 프로그래밍 후 각각의 시기에 어떤 일을 하시겠습니까? (프로그램 F를 작성하는 것이 이 오디션의 목표는 아닙니다 -- 따라서 오디션 중에 그 프로그램을 작성할 필요까지는 없습니다)

프로그래밍 전
    이 문제를 해결하기 위한 최적의 알고리즘이 무엇인가를 고민,결정
    직관적으로는 recursive call을 이용하는 것이 좋을 것처럼 보였다.
    하지만 입력의 데이터가 수만 혹은 수억이 될 수 있다는 가정이 있기
    때문에 고민해봐야할 문제이다. 만약 그 recursive의 깊이가 수억이
    된다면? hw 문제와 sw의 알고리즘상의 tradeoff가 생기게 되겠다.
    물론 hw상으로는 현존 최고의 퍼포먼스와 안전성을 제공한다는 가정
    을 두고, 발상의 전환으로 리스트에 있는 숫자리스트들은 int가 아닌
    char로 보고 charat을 통해 단순히 [ , ]를 제거하는 방법이 있겠다.
    여기까지, recursive가 아닌 단순한 char처리로서 구현하겠다고
    로직을 결정하였다.   
프로그래밍 중
    다음으로 고민해야 할 사항은? 테스팅, 예외처리.
    hw가 허용하는 범위 내에서 가장 큰 test data의 자동 생성 프로그램을
    만든다. testcode 작성후 테스트를 반복적으로 돌리며, 동시에
    어떤 예외가 발생할 것인가를 끊임없이 연구한다. 이 과정에서
    web2.0사이트의 집단지성을 적극 활용한다(ex>me2day)
프로그래밍 후
    이 시점이 1시간 50분정도가 지난 후라면...
    실질적으로 더이상 이성적인 사고는 불가능한 시기.
   
지금도 계속 찾아헤매고 있는 폭풍의 눈, "여유"라는 키워드,
    이것을 찾아보고 싶다. 평소에 많이 보지 않던 하늘을
    보고 많이 마시지 않던 쓴 커피를 마셔본다.

"목숨"에 대한 것은 극단적이리만큼 논리적인 과정을 거쳐야 하는 프로그래밍에 감성이란 바이러스를 무자비하게 투여한다.
아무튼, "자신의 프로그램에 목숨을 걸 수 있겠는가?" 란 질문에 대한
답은 여느 프로그래머와 마찬가지로 "아니요"라고 하겠다.
약 10분에 걸쳐 생각한 것을 글로 옮겼지만 실제로 면접때 저런 질문을 받는다면
상당히 당황했겠다. 지극히 객관적인 지성을 통해 아웃풋을 생산해 내야 하는
프로그래머의 관점에서 벗어나 감성적인 답변을 했을지도 모르겠다. 실제로도 그럴 것이다
생각할 수록 복잡한 문제가 되겠다. scope를 명시해주지 않은 질문인 이상 명확한 scope를 가진
답변을 기대하기 힘들겠지만, 나라면 그 것을 정하고 답변을 하겠다.
사상가가 아닌 프로그래머를 뽑는 것이기 때문.
Posted by

트랙백 주소 :: http://humbroll.com/trackback/13

댓글을 달아 주세요