알고리즘에 대하여 일반인들에 회자된지는 조금 된 것 같다. 흔히 쓰는 '유튜브의 알고리즘에 의하여...' 의 알고리즘 말이다. 그런데 실제 컴퓨터 공학에 사용되는 알고리즘이란 무엇일까? 유튜브의 알고리즘과 같은 말일까? 의문이 생기기도 한다.
반면 알고리즘의 밑바탕인 자료구조는 아직 대중에게 알려지지 않은 듯 하다. 일반 회사원이 사용하는 '자료' 라는 말은 아무래도 컴퓨터의 자료하고는 좀 차이가 날 것이다.
알고리즘을 사용하려면 자료구조부터 알아야 한다. 이 둘은 프로그래밍 언어를 배우는 과정에서 어느정도 배운다고 볼 수도 있고 아닐 수도 있다. 알고리즘의 경우 다른 말로 문제 해결 능력이다. 이 상황에 필요한 알고리즘을 알고 있느냐? 는 문제는 이 문제 해결할 방법을 아는가? 라는 말로 바꿔볼 수도 있다.
물론 프로그램속에 다 들어있다. 우리는 일상생활에서 무의식적으로 하루를 보내기위해 남의 알고리즘을 사용하고 있는데 그걸 모를 뿐이다. 이것은 미지의 세계를 탐구해야 하는 알고리즘과 이미 널리 알려지고 사용되고 있는 알고리즘과는 구분을 해야한다.
미지의 세계를 탐구하는 알고리즘은 IT 리더십의 영역이다. 데니스 리치나 리누스 토발즈 같은 천재가 될 수도 있고 제프 베조스나 스티브 잡스 같은 경영자일수도 있다. 아니면 surface web에서 보이지 않는 deep web 의 해커들일 수도 있다.
(white or black? even gray?)
이 탐구자들은 세상의 주목을 받으며 누구보다 화려한 인생을 살아간다. 시간이 지나서 그들이 사용한 알고리즘이 옛것으로 바뀔지라도 그들의 이름과 알고리즘으로 인해 사회에 축척된 부는 여전히 옛 명성을 유지할 것이다.
누가 먼저 생각해 냈느냐는 중요한 문제다. 누구나 생각할 수 있는 아이디어라도 시대와 합이 맞으면 그의 이름은 명예의 전당에 새겨진다. 한편 아무리 좋은 아이디어라도 시대에 안맞으면 이슈가 되지 못하니까 좋은 아이디어가 있는 사람은 실망하지 말자. 실망도 기대도 하지 않아도 된다. 이루어질 아이디어는 이루어진다.
알고리즘에 처음 입문하면 우리는 미지의 세계를 탐구하는게 목적이 아니다.
보통 사람이라면 그건 한참을 지나서 하게 될 것이다.
당신에게 정말 좋은 아이디어가 있고 초기단계에 10%만 가능성을 보여준다면 VC 투자자들이 하루아침에 수십억을 투자할 것이다. VC들은 항상 돈이 많고 투자할 곳이 부족하다. 그들이 하는 일이다.
그런 단계를 처음부터 바라보는 것은 아주 큰 무리가 있다. 허나 그렇다고 이 모든 공부가 무의미한 것은 아니다. 그들도 밑에서 올라오는 과정을 거쳤을 테니까.
자료구조는 아주 밑바닥에서 부터 훑고 올라가는게 좋다. 마이크로 레벨에서 컴퓨터공학과 IT기술은 매우 편집증적이다. 미세한 구조로 촘촘하게 짜여져 있어서 그 안을 들여다 보는 것만으로도 피곤을 유발한다.
컴퓨터는 어린 아기같은 존재이다. 0과 1만으로 작동하는 기계를 다룰때 가져야할 마음자세이다. 물론 인간도 피곤하다. 그래서 최근에는 고급 언어들이 계속 개발되고 있다. 스크래치 같은 코딩 교재가 나온지도 오래되었고 (아직까진 실용성이 의문이긴 하다) 자꾸 기계와 마이크로에 대한 생각을 하지 않는 방향으로 가고 있다.
스티브 잡스의 쇼타임처럼 인간의 편리를 위해서 그렇게 가야하는 것은 맞는데, 기술로 세계에 불을 밝히려는 사람들은 자꾸 편한쪽만 봐서는 안된다. 컴퓨터가 본래 어떻게 생겼는지 들여다 봐야한다. 잘 생겼는지 못 생겼는지 왜 그렇게 생겨먹었는지 의문을 가지는 것이 집착은 아니다. 사물에 대한 연구를 하는 것이다.
다음의 영상에서 보는 것 처럼 인간은 이미 알고리즘을 알고 있다. 그것도 컴퓨터가 계산하는 방식보다 훨씬 더 월등한 직관을 사용한다.
* 링크 : 알고리즘이란 무엇인가 Teded (한글자막)
알고리즘은 누군가의 특권이 아니다. 구글만이 개발하는 특수한 기술이 아니고, 천재와 과학자들의 영역이 아니다. 그것은 우리 일상과 사회의 문제를 해결하는 도구이다.
처음에 인간이 컴퓨터의 사고방식에 알고리즘이란 이름을 붙인 것은 컴퓨터에 인간의 사고를 담기 위해서 였다. 지금은 마치 기계의 사고인 것 처럼 느껴지는 단어가 되었지만 알고리즘은 인간 자체의 속성인 것이다.
영상에서 보면 사람을 셀 때 N 이라고 놓고 반복을 한다. 이 N 은 데이터이고 단위이다. 자료구조는 데이터와 데이터 사이의 물리적 또는 논리적 관계를 정의한다.
쉽게말해 하나의 데이터에 대하여 사람이냐 사물이냐, 물리적이냐, 논리적이냐 라는 것을 논하는 자체가 자료구조를 정의하는 과정이다.
다음 포스트부터는 C의 자료구조를 실습해 본다.