주말은 휴식을 취하고 다양한 책을 읽으며 생각의 활력을 되찾을 수 있는 완벽한 시간이다. 최근에는 지난 2월에 처음 읽었던 '해커와 화가'라는 책을 다시 읽었다. 이 책은 프로그래밍 관련 책이지만, 저자 폴 그레이엄은 화가 출신으로 인문학적 요소가 자연스럽게 녹아들어 있어 흥미롭고 깨달음을 주는 책이다. 오늘 살펴보고자 하는 흥미로운 주제는 "좋은 디자인은 대칭을 활용한다"이다. 대칭이라는 개념은 일상 생활에 널리 퍼져 있는데, 이 책을 통해 대칭이 다양한 측면에 어떻게 통합되는지 이해할 수 있다. 컴퓨터 공학도에서 예술가로 변신한 비플과 달리 폴 그레이엄은 화가로 시작하여 해커가 되었고, 결국 기업가이자 창업자로 발전한 배경을 지니고 있어서 그런지 재밌는 시각을 지니고 있다.
좋은 디자인은 대칭을 이용한다 (인용. 해커와 화가)
symmetry, 대칭(對稱)은 균형 또는 반복적 자기 닮음이다. 대칭은 단순성을 확보하기 위한 여러 방법 중 하나로 인식될 수 있지만, 그 중요성은 특별히 언급할 필요가 있다. 자연은 대칭을 광범위하게 사용하며, 이는 대칭의 효과와 매력에 대한 증거이다. 대칭에는 반복과 재귀의 두 가지 유형이 있다. 재귀는 나뭇잎의 가지 패턴에서 볼 수 있듯이 하위 요소가 반복되는 과정을 말한다. 눈송이와 같은 자연스러운 대칭 구조는 어릴 때부터 쉽게 접할 수 있는 그림이었다. 언제봐도 아름답다.
빅토리아 시대에는 건축가들이 의도적으로 건물을 비대칭으로 설계했고, 1920년대에는 비대칭이 현대 건축의 두드러진 특징이 되었다. 그러나 이러한 건물은 여전히 주축을 제외하고는 대칭을 수백 번 반복해서 사용했다.
대칭은 어디에나 존재한다. 글에서도 문장의 짧은 구절부터 소설의 전체적인 줄거리에 이르기까지 모든 수준에서 대칭을 찾아볼 수 있다. 음악과 미술에서도 비슷한 패턴을 관찰할 수 있다. 모자이크(및 세잔의 일부 작품)는 전체 이미지를 구성하는 데 동일한 단위를 사용하기 때문에 시각적으로 증폭된 효과가 있다. "아담의 창조"와 "아메리칸 고딕"과 같은 유명한 작품에서는 대칭을 사용하여 양쪽이 서로 영향을 주고받는 기억에 남는 효과를 만들어 내기도 한다.
자기 닮음, 프랙탈 구조
프랙탈은 대칭의 성질인 자기 닮을을 나타내는 가진 대표적인 구조이다. 이는 재귀적으로 정의되며, 대표적인 예로는 코흐 곡선(Koch curve)은 각 단계에서 동일한 과정을 반복하여 자기 닮음 패턴을 생성한다. 프랙탈은 영원 회귀, 시뮬레이션 이론과 같은 세상의 본질에 대한 탐구를 하는 부분에서도 다뤄진다. 자연계로 눈을 돌리면 우주가 어떻게 구성되어 있는지를 볼 수 있고, 인간이 새롭게 만들고 있는 디지털계로 돌리면 AI, 메타버스, 블록체인은 어떻게 앞으로 어떠한 세상이 펼쳐게 될지... 사색을 즐기기에 충분한 요소이다.
프랙탈을 구현하는데 사용하는 재귀(recursion)는 수학과 컴퓨터 과학에서도 큰 도움이 될 수 있다. 귀납적 증명은 매우 간결하게 표현되며, 소프트웨어에서 재귀적으로 해결할 수 있는 문제는 거의 항상 재귀를 통해 접근하는 것이 가장 좋다. 에펠탑의 인상적인 외관은 부분적으로 탑 위에 탑을 쌓는 재귀적 방법 덕분이다. 대칭, 특히 반복에 의존할 때 발생할 수 있는 한 가지 잠재적 위험은 사고의 필요성을 대체할 수 있다는 점이다.
수학적 귀납법 (재귀)
수학적 귀납법(mathematical induction)은 수학에서 어떤 명제가 모든 자연수에 대해참임을 증명할 때 사용하는 방법이다. 일반적인 수학적 귀납법의 형태는 무한개의 명제를 함께 증명하기 위해, 먼저 첫 번째 명제가 참임을 증명하고,다음으로 명제 중에서 어떤 하나가 참이면 언제나 그다음 명제도 참임을 증명하는 방법으로 이루어진다.
즉, 자연수 n에 관한 명제 p(n)에 대하여 다음 두 조건이 성립하면 모든 자연수 n에 대하여 p(n)은 참이다.
여기서 주의해야 할 것은 수학적 귀납법은 일반적인 귀납법과는 약간 다르다는 점이다. 논리에서 사용하는 귀납법은 여러 구체적인 사례를 조사하여 결론을 얻는 방법이다. 하지만 수학에서는 이런 귀납법을 사용하지 않는다.
예를 들어, n번째 삼각수 Tn은 1부터 n까지의 합으로 다음이 성립한다.
이 식에 n=1을 대입하면 1=1(1+1)/2이므로 공식이 참이고, n=2를 대입하면 3=2(2+1)/2이 되어 식은 참이다. 또 n=3,4,5를 차례로 대입해도 역시 식은 참이다. 마찬가지 방법으로 n=100일 때까지 대입해도 식은 참이다.
그렇다면 100개의 자연수에 대해서 위의 식이 참이라고 해서 모든 자연수에 대해서도 이 식이 참이라고 할 수 있을까? 즉, n=1,000일 때도 참이냐고 하면 n=1,000을 식에 대입하여 1부터 차례로 1,000까지 더한 합이 500,500임을 확인해야 한다. 결국 구체적인 사례를 조사하는 것은 문제를 확인하는 방법일 뿐, 주어진 명제가 참임을 증명하는 것은 아니다.
수학적 귀납법의 원리는 도미노의 원리와 같다.
도미노를 일정한 간격을 유지하며 일렬로 배열한 도미노로부터 ‘어떤 패가 쓰러지면 반드시 다음 패가 쓰러진다’라는 사실을 알 수 있다. 이것을 수학적으로 나타내면 ‘k번째 패가 쓰러지면 반드시 k+1번째 패가 쓰러진다’와 같다. 이 사실로부터 알 수 있는 점은 첫 번째 도미노 패만 쓰러뜨리면 일정하게 도미노가 모두 쓰러진다는 것이다. 이것이 바로 도미노의 원리와 수학적 귀납법의 원리가 같은 점이다.
함수형 프로그래밍에서의 재귀
계산을 수학적 사고로 하는 함수형 프로그래밍 언어에서도 재귀는 중요하다. 함수형 프로그래밍에서는 루프와 변경 가능한 상태를 사용하지 않기 때문에 재귀는 반복적인 프로세스를 표현하는 자연스러운 접근 방법이다. '해커와 화가' 저자가 좋아하는 LISP 또한 함수형 프로그래밍 언어로, 중요한 자료구조인 List를 재귀적으로 처리하도록 설계되었다. 이는 Elixir 함수형 프로그래밍 언어도 마찬가지이다. 이러한 원칙은 간결하고 효율적인 코드를 작성하는 데 도움을 주며 아름다운 표현을 할 수 있는 사고와 방법을 제공한다.
대칭에 의존하는 사고법을 주의하자
도미노와 같이 간단한 방식은 중간 부분에 대해 따로 깊은 사고가 필요하지 않다. 해커와 화가 저자가 했던 말이 여기서 다시 생각난다. '대칭, 그리고 특히 반복이 갖는 하나의 위험은 그것이 생각의 자리를 대체할 수도 있다는 점이다.
결론적으로 대칭은 프로그래밍, 예술, 수학, 공학을 비롯한 다양한 분야에서 찾아볼 수 있는 디자인의 필수 요소이다. 대칭은 자연의 창조물부터 인간이 만든 구조물에 이르기까지 우리 삶의 다양한 측면에 단순함과 균형을 가져다준다. 그러나 특히 문제 해결과 비판적 사고에 있어 대칭에 지나치게 의존할 경우 발생할 수 있는 잠재적 함정을 인식하는 것이 중요하다.
나의 경험을 꺼내보자면, 알고리즘 문제를 풀다보면 재귀에 의존하게 될 경우가 있다. 특히 DFS, 트리 문제를 풀어야할 때 그렇다. 첫 단추와 마지막 단추만 메꾼 후 재귀를 돌려 그 중간 과정의 사고를 프로그램에게 맡겨버리는 것이다. 이러한 부분은 사고할 수 있는 능력을 더 저하시켜준다. 좋지 않은 습관인 것 같다. 의존적인 사고 방식에 기대지 않고, 늘 익숙한 것을 경계하며 그 과정에 대한 흐름을 그릴 수 있어야 한다.
디자인, 프로그래밍, 문제 해결의 세계를 계속 탐구할 때 대칭의 힘을 활용하는 것과 우리 자신의 창의성과 독창성을 키우는 것 사이에서 건강한 균형을 유지하는 것이 중요하다. 이렇게 함으로써 혁신적이고 매력적이며 효과적인 업무를 지속할 수 있으며, 궁극적으로 각 분야에서 전문성을 강화할 수 있다.
따라서 대칭에 지나치게 의존할 때 발생할 수 있는 잠재적 위험을 염두에 두고, 대칭의 장점을 수용하는 동시에 우리만의 고유한 사고 프로세스를 배양하는 것 사이에서 균형을 맞추기 위해 노력하자. 그래야만 '해커와 화가'의 저자 폴 그레이엄이 다양하고 성공적인 커리어를 통해 증명한 것처럼 우리 각자가 선택한 분야에서 지속적으로 성장하고 탁월해질 수 있다.
'Dot . > 끄적끄적' 카테고리의 다른 글
Paul Graham의 유명 에세이인 ‘스타트업 해야하는 이유’ 번역 요약본 (Why to Not Not Start a Startup) (0) | 2022.09.28 |
---|---|
아버지는 말하셨지 인생을 즐겨라 (0) | 2022.09.17 |
[해커와 화가] 해커, 프로그래밍 그리고 아름다운 소프트웨어 설계 방법 (0) | 2022.02.19 |
삶에 자극을 주는 글 및 인터뷰 모음 (0) | 2022.02.18 |
[세계의 거인들이 비트코인 사는 이유] #2 비트코인 장점 (0) | 2021.08.01 |