콘텐츠로 이동

1.3   요약

1.   핵심 정리

  • 알고리즘은 일상생활 어디에나 있으며, 손에 닿지 않는 어려운 지식이 아니다. 사실 우리는 이미 자신도 모르게 많은 알고리즘을 익혀 크고 작은 생활 속 문제를 해결하고 있다.
  • 사전에서 단어를 찾는 원리는 이진 탐색 알고리즘과 같다. 이진 탐색에는 분할 정복이라는 중요한 알고리즘적 사고가 담겨 있다.
  • 카드를 정리하는 과정은 삽입 정렬 알고리즘과 매우 비슷하다. 삽입 정렬은 작은 데이터 집합을 정렬하는 데 적합하다.
  • 거스름돈을 주는 과정은 본질적으로 탐욕 알고리즘이다. 각 단계에서 현재 가장 좋아 보이는 선택을 한다.
  • 알고리즘은 유한한 시간 안에 특정 문제를 해결하는 명령 또는 작업 단계의 집합이고, 자료 구조는 컴퓨터에서 데이터를 구성하고 저장하는 방식이다.
  • 자료 구조와 알고리즘은 긴밀하게 연결되어 있다. 자료 구조는 알고리즘의 토대이며, 알고리즘은 자료 구조에 생명력을 불어넣는다.
  • 자료 구조와 알고리즘은 블록 조립에 비유할 수 있다. 블록은 데이터를, 블록의 모양과 연결 방식 등은 자료 구조를, 블록을 조립하는 단계는 알고리즘을 나타낸다.

2.   Q & A

Q: 프로그래머로 일하면서 직접 알고리즘으로 문제를 해결해 본 적이 없다. 자주 쓰는 알고리즘은 프로그래밍 언어에서 이미 제공하므로 그대로 사용하면 된다. 그렇다면 업무에서 다루는 문제가 아직 알고리즘이 필요할 정도는 아니라는 뜻인가?

구체적인 업무 기술을 무술의 ‘동작’에 비유한다면, 기초 과목은 ‘내공’에 더 가깝다.

알고리즘을 비롯한 기초 과목을 공부하는 의미는 업무에서 이를 처음부터 직접 구현하는 데 있지 않다고 생각한다. 배운 지식을 바탕으로 문제에 전문적으로 대응하고 판단하여 업무의 전반적인 품질을 높이는 데 의미가 있다. 간단한 예로, 프로그래밍 언어마다 내장 정렬 함수를 제공한다.

  • 자료 구조와 알고리즘을 배우지 않았다면 어떤 데이터든 이 정렬 함수에 넘길 수 있다. 실행도 원활하고 성능도 괜찮으니 별문제가 없어 보인다.
  • 하지만 알고리즘을 배웠다면 내장 정렬 함수의 시간 복잡도가 \(O(n \log n)\)임을 안다. 주어진 데이터가 학번처럼 자릿수가 고정된 정수라면 더 효율적인 ‘기수 정렬’을 사용하여 시간 복잡도를 \(O(nk)\)로 낮출 수 있다. 여기서 \(k\)는 자릿수다. 데이터의 양이 많을 때는 이렇게 절약한 실행 시간이 비용 절감이나 사용자 경험 개선 등 큰 가치를 만들어 낼 수 있다.

공학 분야의 많은 문제는 최적해를 얻기 어렵고, 그저 ‘어느 정도’ 해결된 상태로 남아 있다. 문제의 난이도는 문제 자체의 성질뿐 아니라 그 문제를 바라보는 사람의 지식에도 달려 있다. 지식이 체계적이고 경험이 많을수록 문제를 더 깊이 분석하고 더 우아하게 해결할 수 있다.

Q: 이제는 거의 모든 코드를 AI 에이전트가 작성하는데, 그래도 알고리즘을 배워야 하는가?

리무(李沐)의 말을 인용하자면, “에이전트는 능력 증폭기다. 능력에 10을 곱하는 것이지, 10을 더하는 덧셈기가 아니다.”

AI가 능력 증폭기라면 증폭의 바탕이 되는 ‘능력’도 중요하다. 특히 두 가지 능력을 쌓을 가치가 있다고 생각한다. 첫째는 표현 능력, 특히 AI와 협업하는 능력이다. 목표를 명확히 설명하고 배경을 충분히 제공하며 잘못된 방향은 제때 바로잡아야 한다. AI에게 문제를 설명하는 일은 스스로 문제를 명확히 이해하는 데도 도움이 된다. 둘째는 기초 지식이다. 세부 사항은 AI가 보완할 수 있지만, 핵심을 짚어 질문하고 옳고 그름을 판단하며 AI의 출력을 유용한 결과물로 만들려면 기본 개념은 스스로 이해해야 한다.

AI의 특별한 점은 과거의 도구처럼 기능의 경계가 뚜렷하지 않다는 것이다. AI는 물과 비슷해서 누구의 손에 들어가느냐에 따라 다른 모습을 띤다. 사람의 능력이 뛰어나고 안목이 좋을수록 AI의 증폭 효과도 더욱 뚜렷해진다.

댓글로 의견이나 질문, 제안을 남겨 주세요