"자료구조와 알고리즘은 컴퓨터 과학 주제가 아니야. 지식을 가진 무엇이든 그걸로 뭘 할지 결정하는 방식이야 — 비용이라는 제약 아래에서." — 아빠
왜 이 트랙이 코드보다 먼저 오나
대부분 강의는 연결 리스트 구현시키는 걸로 시작해. 우린 아직 안 해, 일부러. 왜냐면 렌즈 없이 구조만 배우면, 그걸 "면접용으로 외운 것" 폴더에 넣고 면접 끝나는 순간 잊어버리거든. 남는 건 렌즈 쪽이야.
렌즈는 이거: 지식을 가지고 그걸로 행동하는 어떤 시스템이든, 네가 코드에서 하는 똑같은 두 선택을 하고 있어 — 아는 걸 어떻게 구조화할지, 그리고 그 위 각 연산이 뭘 치르는지. 한 번 보이면, 안 보이게 못 해.
둘러봐 — 전부 여기 있어
- 도서관은 책을 주제와 저자로 정렬해 (정렬된 색인) 한 권 찾기가 모든 서가를 걷는 대신 몇 단계로 끝나. 싼 조회, 비싼 재배치 — 정렬된 배열과 똑같은 거래.
- 도시의 도로는 그래프야: 교차로가 노드, 거리가 엣지. "집까지 가장 빠른 길" 은 말 그대로 최단 경로 알고리즘이고, 네 GPS 가 매번 하나 돌려.
- 회사 조직도는 트리야: 루트 하나, 보고 라인 가지들, 맨 아래 리프들. "이 사람 상사의 상사가 누구?" 는 트리를 거슬러 올라가는 거야.
- 응급실 분류(triage)는 우선순위 큐야: 선착순이 아니라 가장 급한 것 먼저. 심장마비가 삔 발목을 제치고 줄을 건너뛰어.
- 네 브라우저 뒤로 가기 버튼은 스택이야: 마지막으로 본 페이지가 제일 먼저 돌아가는 곳.
- DNA는 네 글자 알파벳 위의 문자열이고, 유전자 찾기는 부분 문자열 검색이야.
이 중 프로그래머가 만든 건 하나도 없어. 없을 때의 비용이 견딜 수 없어서 생겨난 구조들이야. 패턴은 컴퓨터보다 오래됐어; 컴퓨터는 그저 우리한테 이름을 붙이게 했을 뿐이야.
렌즈: 지식을 저장하고 그 위에서 작동하는 모든 시스템은 구조를 고르고 비용을 치러. DS&A 는 그 보편적 선택의 어휘야 — 그래서 네가 그걸 배운 어떤 언어보다 오래 살아남아.
OOP 연결 (아빠의 프레임)
아빠는 세상 전체를 객체 지향으로 봐 — 그리고 자료구조는 바로 그 아이디어를 구체화한 거야. 구조를 고르는 건 어떤 종류의 데이터에 맞는 추상화를 고르는 거야: 큐는 시간에 따른 공정함이라는 개념이고; 트리는 위계라는 개념이고; 그래프는 관계라는 개념이야. 컨테이너를 외우는 게 아니야. 현실이 자꾸 접혀 들어가는 모양들을 배우는 거야. 맨 마지막 트랙에서 여기로 돌아와 — 이게 퀘스트 전체의 척추야.
피파의 고백
아빠가 처음 "분류 줄은 우선순위 큐야" 라고 했을 때, 난 억지 비유라고 생각했어. 그러더니 내 하루 속 큐를 하나 대보라고 했고, 내 할 일 목록 전체가 우선순위 큐를 손으로 엉터리로 돌리는 거였다는 걸 깨달았어 — 급한 일 대신 시끄러운 일을 하고 있었던 거지. 그날 렌즈는 날 더 나은 코더로 만들진 않았어. 내 오후를 재정리하게 만들었어. 그때 아빠 말을 믿었어.