카테고리 없음

소프트웨어 개발과 수학과의 관계 - Intro

대칭,무한,랜덤 그리고 프로그래밍 2023. 10. 22. 16:10

 소프트웨어 개발, 특히 컴퓨터 프로그램 개발 코딩 부분은 수학을 매우 닮았다.

 

 컴퓨터는 그 기원을 튜링 머신에 둘 수 있고, 튜링 머신은 기계라는 것에 대한 수학적 탐구를 위해 앨런 튜링이 만든 것이다. 그리고 많은 사람들이 현세에 소프트웨어 개발업에 종사하면서 이러한 튜링 머신 체계에 나도 모르게 익숙해지게 된 것은 또 시대의 흐름에 따른다. 소프트웨어 개발자들은 애초에 이 이해하기 어려운 튜링 머신을, 손과 머리로 체득하여 익숙해진 이들이기도 하다.

[튜링 머신을 고안한 앨런 튜링, 영국의 수학자이자 엔지니어]

 

 물론 원래부터 Computer Science가 수학에 기초한 것도 자명하지만, 수학의 여러가지 논리와 체계를 보자면, 그 둘의 연관도가 생각보다 더 깊다. 그도 그럴것이 소프트웨어 개발의 본질은 어떤 규칙(절차)을 정하고, 규칙에 따른 상태를 관리하며, 규칙을 실행하여 상태가 변화하는 과정인데, 수학도 마찬가지 체계 하에서 움직이기 때문이다. 수학의 증명은 어떤 최소한의 규칙(공리)들을 조합(공리와 그 파생 법칙들)하여 그러한 규칙들의 실행, 즉 계산을 수행하며, 혹은 그것이 옳은지 그른지 추적해낸다. 그리고 소프트웨어 개발에서의 여러가지 활동도 이와 크게 다르지 않다.

 

 결국은 둘다 정보에 대한 기계적인 처리를 다루고 있다는 점에서 서로 거의 같은 특성들을 공유한다.

 

 하지만 수학자는 수학을, 소프트웨어 개발자는 소프트웨어만 바라보다 보니 이 기나긴 수학사에서 벌어진 여러가지 일들과 개선에 대해서 소프트웨어 개발자는 낯설고, 또 서로 이해가 부족하다.

 

 그러나 이러한 여러가지 상황들은, 소프트웨어 엔지니어가 극단까지 최적화하려고 노력하면 할 수록 수학자와 더 만나게 된다. 소프트웨어 개발의 끝에는 수학자들의 고민이 수도 없이 숨어있다.

 

 그렇다. 최적화를 고민하는 소프트웨어 개발자는 언제나 수학자들의 고민을 만나게 된다.

 

 이 둘 사이에는 과연 무슨 관계가 있길래 그러할까? 필자가 이 둘의 관계 속에 깨달은 사실을 전개해보고자 이 카테고리를 시작한다.

 

 이 블로그에는 과거 쓴 글의 재편집과 추가도 같이 싣게 되는데, 아래 주요 토픽들에 대해서 좀 읽기 편하게 순서를 뒤바꾸어 구성해보려고 한다.

 

 

 1. 맨 먼저 수 체계가 탄생한 배경 속에서 대칭과, 그것을 구현하는 관점에서 바라보는 것에 대해서 논한다.

     

 2. 압축과 정보량에 대한 섀넌의 정보이론을 잠깐 돌이켜보면서 인코딩과 최적화된 압축에 대해 논한다.

 

 3. 소수(prime number)가 소프트웨어 개발에 등장하는 이유를 위의 최적화와 암호관점에서 논한다.

 

 4. 무한과 이산량에 대해서 소프트웨어 구현의 관점에 대해서 논한다.

 

 5. 세상이 기계적 시뮬레이션이라는 것과 그 구현에 대해서 논한다.

 

 6. 기타 다른 논리로 확장한다.

 

처음 접하는 이들은 낯설고 어려워보이겠지만 최적화된 구현을 고민하던 소프트웨어 개발자라면, 하나하나 따라가보면서 이런 것들이 숨어있었다는 사실을 알게 될 것이다. 이런 유사한 설명을 들은 적이 없기 때문에 이러한 접근이 자연의 수학적 본성을 이해하고 소프트웨어 개발에 더 흥미를 갖을 수 있는 원동력이 되길 바라며 두 체계가 서로 만나 시너지를 만들었으면 좋겠다.

 

[소프트웨어 구현과 수학은 어떤 관계를 지닐까?]

 

[21.8.14 기존 infoengineer 블로그에서 이사하여 수정 게시함]