TL;DR

자료구조와 알고리즘은
프로그래밍을 하면서 맞닥뜨리게 되는 다양한 문제를 해결하는데
직/간접적으로 활용된다.

지난 수십년간 컴퓨터 공학을 발전시켜온 천재들이
수많은 일을 해결하는 과정에서
만들어온 모범 사례가 그것이기 때문이다.

우리가 그 사례를 충분히 이해하고 활용할 수 있다면,

새로운 문제를 해결하기 위한
실마리를 금세 찾을 수 있을 것이다.

왜냐?
아직 컴퓨터는 수십년 전 만들어진 그 구조에서 크게 벗어나지 않았으니까.

 

어제와 오늘,
컴퓨터 과학의 혼란한 자료구조의 세계를
나의 뇌 속에 구조화시키기 위해
엄청난 시간을 투자했고,

array, string, linked list, heap, stack, queue, hash table, tree, graph....

위처럼 정신 없이 산재되어 있는 자료구조 개념들을

Abstract Data Type과
Concrete Data Structure로 구분하는 데까지
도달하게 되었다.

이 시점에 이르자

프로그래머로서 왜 자료구조와 알고리즘을 알아야 하고,
잘 활용할 수 있어야 하는지

갑자기 깨닫게 되었다.

이것이 옳은 지는 모르겠다.

나중에 멋진 시니어 개발자가 된 내가
알아서 잘 판단할 것이라 기대하며,

나의 깨달음을 남겨본다.


프로그래머는
현실에서 발생하는 문제를
컴퓨터를 활용하여 해결할 방법을 만드는 사람이다.

나같은 주니어 프로그래머가
필수 교과서처럼 배우는 자료구조와 알고리즘은

지난 수십년간,
천재 개발자들이
현실의 문제들을 컴퓨터로 해결한
주요 모범 사례들이라고 볼 수 있다.

'현실의 문제가 얼마나 많은데,
그것을 몇가지로 추린다는 게 말이 되는가?'
하는 의문이 들 수 있다.


맞다.
모든 문제에 대한 답안을 보여주는 건 아니다.

수없이 다양한 문제를 처리하는 과정에서

해결의 근간이 되었던 방법.
즉,

어떤 일을 해결하든지
반드시 거쳐야 하는 본질적인 일.

혹은
해결의 도구가 되었던 방법.
즉,
핵심적이지는 않지만,
매번 처리해줘야하는 기본적인 일.

혹은
해결 비용을 효과적으로 줄여줬던 방법.

이런 것들이 모여 정리된 것이
컴콩의 자료구조와 알고리즘인 것이다.


'모범사례라도
다 옛날에 만들어진 건데
구식아냐?'

라는 생각을 할 수 있다.

사실 지난 수십년간
컴퓨터는 하드웨어와 소프트웨어 측면에서
엄청난 속도로 개선되었기는 했지만,

근간이 되는
핵심 컴퓨터 작동 구조는
거의 변함이 없다.

그렇기에
학습 이유는 자명해진다.

우리가 맞닥뜨린 문제를 해결할 실마리를
오래전 그 모범사례로부터 끌어낼 수 있는 눈을 가지게 된다.


프로그래머가 자료구조와 알고리즘을 배워야 하는 이유.

결론은
수십년간 검증되어온 모범답안을 통해
더 나은 문제 해결 역량을 기르기 위함이다.

아마도.

+ Recent posts