알고리즘 산책 - 수학에서 제네릭 프로그래밍까지

좋은 프로그래머가 되려면 제네릭 프로그래밍의 원리를 이해해야 한다. 제네릭프로그래밍의 원리를 이해하려면 추상화를 이해해야 한다. 추상화를 이해하려면 그 바탕을 이루는 수학을 이용해야 한다.

1

수학에 대한 동경이 전혀 없음에도 불구하고, 수학을 기반으로 한 프로그래밍 책에 대한 집착이 있다. 일단 문서에 수식이 등장하면 뭔가(이유없이) 깔끔하다고 느껴지기 때문이다. 그리고 수학적으로 완비된 형태의 답변에 대해선 대부분이 동의(침묵)한다.

2

이 책의 난이도가 어렵지도 쉽지도 않다. 단지 책에서 소개하는 수학적인 개념과 코드를 기반으로 설명하는 부분의 일체감이 좋았다(이 정도로 글을 어렵게 쓸 수 있다니!). 그리고 개발을 하면서 알게된 거의 대부분의 고급 기술에 대한 내용이 즐비하게 나온다. 하지만 매우 간략하고, 수학적 특성이 ‘추상화’ 단계가 매우 높다. 그러니 주의하자.


알고리즘이란 계산 작업을 수행하기 위한 끝이 있는 일련의 단계들을 가리키는 단어다.


추상대수학에서 볼 수 있는 추상화는 상당 부분 수학의 가장 오래된 분야 가운데 하나인 정수론에서 도출된 구체적인 결과로부터 유래한다.

수학에서 중요한 부분 가운데 하나가 바로 뭔가를 형식에 맞게 증명할 수 있는 능력이다.

정수론의 전체 구조는 단 한 가지 기초, 즉 최대공양수를 찾는 알고리즘 위에 세워져 있다.

수학 역사에서 가장 중요한 책으로 꼽히는 유킬리드 «원론»도 유클리드가 무세이온의 학자로 활동하던 시기에 쓴 책이다. «원론»에는 기하학과 정수론의 바탕을 이루는 내용이 담겨 있으며 자와 컴퍼스만을 이용하는 작도법은 요즘도 학교에서 배우고 있다.

수학자들이 연구하는 것은 어떤 특정 대상이 아니라 대상 사이의 관계다. 특정 대상을 다른 것으로 바꿔도 관계만 바뀌지 않는다면 별문제가 되지 않는다.

뭔가를 일반화한다는 것은 그것에 대해 생각한다는 것이다. - 헤겔, «법철학 강요»

조금 전에 한 질문에 답하기 위해서 유클리드 호제법으로 GCD를 구하는 알고리즘이 어떤 식으로 발전해왔는지 되짚어보자. 1) 양의 정수 - 고대 그리스(기원전 5세기), 2) 다항식 - 스테빈(1600년경), 3) 가우스 정수 - 가우스(1830년경), 4) 대수적 수 - 디리클레, 데데킨트(1860년경), 5) 제네릭 버전 - 뇌터, 판데르바르던(1903년경)

결론이 경험에 의해 입증되지 않는다면 아무리 강력한 주장이라도 아무 쓸모가 없다. - 로저 베이컨, «제3저작»

군론에 관한 고전으로 Burnside의 «Theory of Groups of Finite Order»가 있다. 근대 암호학에서 사용하는 방법에 대한 교과서라고 할 수 있는 책으로는 카츠, 린델의 «Introduction to Modern Cryptography: Princicples and Protocols»가 있다. […] 정수론 개론서로 존 스틸웰의 «Elements of Number Theory»가 있다.

Written on May 25, 2019