알고리즘(수학적 논리), 영어 그리고 인문과 역사에 대한 이야기를 좀 해볼까 합니다.
"알고스팟'이라는 컴퓨터 알고리즘 수련 사이트에 올라온 문제를 풀이하는 스터디를 진행 중입니다. 우선 알고스팟의 튜터리얼 (왕초보) 문제를 풀고 있는데, 두번째 문제의 시험 문제가 영문이네요. 스터디에 참여하시는 분들이 문제 해석부터 난관에 부딧친 상황입니다.
어느 스터디 멤버 분의 고민 :
"해석은 얼추 했는데 정확히 문제가 원하는게 무엇인지 잘 모르겟네요."
문제를 해석하는데 있어서 가장 큰 문제는 영어와 인문학적 경험입니다. 아래 문장을 보시죠.
"People from Lilliput are called little-endians, since they open eggs at the small end. People from Blefuscu are called big-endians, since they open eggs at the big end."
'small end'와 'big-end'라는 표현이 대체 무슨 뜻일까요? 걸리버 여행기를 한글 책으로 읽어 본 경험이 있는 사람이라면, 금새 이해할 수 있습니다. 아래는 제가 번역한 문장입니다.
"릴리퍼트 사람들은 리틀 엔디언(little-endians)이라 불리며, 달걀의 뾰족한 끝(little-end)을 깨고 먹는다. 블레퍼스큐 사람들은 빅 엔디언(big-endians)이라 불리며, 뭉툭한 끝(big-end)을 깨고 먹는다."
그런데, 이제 또 다른 벽이 나타납니다. 알고리즘 문제 내용의 일부를 보겠습니다.
"이런 식의 논쟁은 그들의 아침식사 문제 뿐만 아니라, 컴퓨터에서도 발생하고 있다. 릴리퍼트와 블레퍼스큐의 컴퓨터는 정수(integers) 값을 저장하는 방식이 다른데 바이트(bytes) 데이터들을 서로 다른 순서로 저장하는 것이다. 릴리퍼트(리틀 엔디언)의 컴퓨터는 LSB(least significant byte)부터 MSB(most significant byte) 순서로 정렬하고, 블레퍼스큐의 컴퓨터는 정확히 반대로 동작한다.
따라서, 블레퍼스큐와 릴리퍼트의 컴퓨터 간에 정보를 주고 받을 필요가 있다면, 어떤 식이건 변환 절차가 필수적이다. 아무도 데이터를 보내면서 변환하는 것을 원하지 않기 때문에, 수신자들이 항상 변환 작업을 수행해야만 한다."
스터디 내에서 이런 식의 문제가 왜 필요한가? 어디에 쓰이는 건가? 라는 질문이 나옵니다. 컴퓨터의 발전 역사에 대한 지식이 없으면, 출제 의도를 전혀 이해할 수 없습니다. 다음 링크 "위키피디아, 엔디언이란?"을 참고하시면, 아오지탄광(알고스팟의 별칭)의 출제자들이 왜 이런 문제를 냈는가를 이해할 수 있습니다. 우리가 사용하는 모든 컴퓨터는 늘상 네트워크를 통해 데이터를 주고 받고 과정에서 엔디언 문제와 씨름하고 있습니다. 단지, 눈에 띄지 않을 뿐이지요.
정리하자면, "알고리즘"을 공부하는데 있어서 수학적 재능과 노력만 필요한 게 아닙니다. 영어, 상식 그리고 (컴퓨터) 역사 등의 배경 지식과 이론이 없으면 앞으로 나아가기 어렵습니다. 컴퓨터 소프트웨어의 목표는 현실 세계의 문제를 가상의 세계 (cyberspace)로 이식하는 것입니다. 그런데, 현실 세계의 문제들을 이해조차 하기 어렵다면, 어떻게 문제를 풀 수 있겠습니까? 자, 이래도 어쨋건 코딩만 잘하면 (빨리 빨리 코드를 만들어 내기만 하면) 되는 걸까요?
문제 출처 : "AlgoSpot : ENDIAN Quiz"