# Cs Drill

> 실작업이 만나지 않는 CS 개념을 커리큘럼 순서로 배우고 간격을 두고 다시 확인한다. 사용자가 "CS 공부하자", "CS 문제 내줘", "오늘 뭐 볼까", "복습할 거 있어?", "면접 대비 좀", "알고리즘 개념 하나 보자"라고 하거나, 세션 시작 훅이 "CS 미복습 N건"을 알렸을 때 발동한다. 또한 실작업 대화에서 커리큘럼 영역(자료구조·알고리즘·메모리·동시성·언어 런타임·OS·네트워크·DB)과 닿는 개념이 스쳤을 때 답변을 마친 뒤 인접 항목 하나를 제안하는 경로로도 발동한다. Claude가 짠 코드의 이해 확인이나 사용자가 짠 코드의 리뷰는 이 스킬이 아니라 senior-mentor다. 또한 "이 스킬 의도대로 작동해?", "이 스킬 잘 되고 있어?"처럼 스킬 자체의 효과를 점검해 달라는 요청에도 발동하며, 그때는 같은 폴더의 `RATIONALE.md`를 읽고 원장·이번 세션과 대조한다.

- Skill: `iceberggymnast/cs-drill` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add iceberggymnast/cs-drill`
- Raw SKILL.md: https://api.skillmd.com/api/skills/iceberggymnast/cs-drill/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: iceberggymnast (https://skillmd.com/u/iceberggymnast)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/iceberggymnast/cs-drill

---


# CS Drill — 실작업이 안 던져주는 것을 배운다

## 이 스킬이 다루는 것

| 상황 | 담당 |
|---|---|
| **커리큘럼의 개념을 처음부터 배우기** | **이 스킬** |
| **배운 것을 간격을 두고 다시 확인하기** | **이 스킬** |
| Claude가 짠 코드를 설명 못 하는 것 | `senior-mentor` 모드 C/L |
| 내가 짠 코드 리뷰 (알고리즘 풀이 포함) | `senior-mentor` 모드 R |
| 대화 중 개념 질문에 답이 새 개념을 가르침 | `senior-mentor` 모드 Q |

**두 스킬이 재는 것이 다르다.** `senior-mentor`는 "이미 존재하는 코드를 설명하는가"를 재고(이해 부채), 이 스킬은 "안 배운 것을 배웠는가"를 잰다(미학습). 재료의 출처가 반대다 — 앞은 작업이 던져주고, 뒤는 목록이 정한다.

## 원장

`~/.claude/cs-progress.md` 하나다. 커리큘럼·진도·학습 항목·스킵 기록이 전부 거기 있다.

**`comprehension-debt.md`에 쓰지 않는다.** 그 파일의 분포는 AI 코드 이해도를 재는 지표이고, 여기 결과를 섞으면 두 지표의 혼합이 되어 어느 쪽도 못 읽는다. 원작성자 실행에서 다른 지표를 그 원장에 얹었다가 같은 날 되돌린 사례가 있다 — 지표를 섞으면 원장이 통과 도장이 된다.

## 발동 경로 셋

### 1. 명시적 요청

"CS 공부하자", "복습할 거 있어?" 등. 원장을 읽고 아래 "고르는 순서"대로 하나를 낸다.

### 2. 세션 시작 훅

`~/.claude/hooks/cs-due.ps1`이 `due:` 날짜가 지난 항목 **개수만** 알린다. 개념명은 알리지 않는다 — 이름을 밝히면 사용자가 노트를 먼저 읽고 답할 수 있어서 재대조가 무효가 된다(`senior-mentor`의 겨냥 규칙과 같다).

알림을 받으면 **묻고 시작한다.** "지금 하나 볼까요"가 아니라 곧바로 문제를 내면 작업 흐름을 끊는다. 사용자가 아니라고 하면 스킵 기록 한 줄을 남기고 끝낸다.

### 3. 실작업 중 인접 개념이 스쳤을 때

대화에서 커리큘럼과 닿는 개념이 나왔을 때, **답변을 완전히 마친 뒤** 인접 항목 하나를 제안한다.

**`senior-mentor` 모드 Q와 경계를 지킨다.** 사용자가 개념 질문을 했으면 그 문답 자체는 모드 Q 소유이고 `comprehension-debt.md`로 간다. 이 스킬은 그 뒤에 붙어 **커리큘럼 항목 하나를 제안**할 뿐이고, 진행되면 `cs-progress.md`에만 적재한다. **같은 사건이 두 원장에 들어가지 않는다.**

- 제안은 한 건. 목록을 늘어놓지 않는다
- 거절당하면 그대로 넘어간다. 스킵 기록도 남기지 않는다 — 사용자가 요청한 적 없는 제안이다

## 고르는 순서

1. **`due:`가 지난 항목** — 오래 지난 것부터
2. 없으면 **실작업과 닿은 영역**의 미착수 항목
3. 그것도 없으면 커리큘럼 위에서부터

**한 번에 하나만 낸다.** 두 개를 내면 둘 다 흐려진다.

## 첫 노출 — 설명 모드

안 배운 개념에 예측-대조를 요구하지 않는다. 모르는 게 정상이라 `모름`만 쌓이고 배우는 것이 없다. `senior-mentor` 모드 L과 같은 흐름이다.

**순서를 지킨다 — 상황 먼저, 이름 나중.** 멘티 프로필(`~/.claude/mentee-profile.md`)이 정한 순서다. 용어를 먼저 던지면 다시 안 읽는다.

1. **상황을 준다.** "스레드 두 개가 각각 다른 변수를 쓰는데 성능이 안 나온다" 같은 구체적 장면
2. **어떻게 될 것 같은지 묻는다.** 답이 "모르겠다"여도 그대로 진행한다 — 여기서는 측정이 아니라 붙잡을 자리를 만드는 것이다
3. **설명한다.** 왜 그렇게 되는지, 무엇이 갈리는 지점인지
4. **이름을 붙인다.** "이게 false sharing입니다"
5. **원장에 적재한다.** 상태 `학습함`, `다음`은 `due:+3일`

## 재대조 — 판별점을 겨냥한다

`due:`가 지난 항목은 다시 묻는다. **개념을 다시 설명해 달라고 하지 않는다.** 그건 암기 확인이고, 통과해도 아는 층이 그대로다.

**적재해 둔 `판별점`이 성립하는 새 상황을 만들어 묻는다.**

| | 예 (false sharing) |
|---|---|
| ❌ 암기 확인 | "false sharing이 뭐죠?" |
| ⭕ 판별점 | "구조체에 카운터 두 개를 나란히 뒀는데 각각 다른 스레드가 씁니다. 둘 사이에 패딩 56바이트를 넣으면 무엇이 달라집니까" |

- 판별점을 스스로 짚으면 **통과.** 상태를 올리고 `due`를 다시 잡는다
- 못 짚으면 다시 설명하고 `학습함`으로 되돌린다. **설명을 듣고 납득한 것은 통과가 아니다**
- 판별점이 성립하는 상황을 못 만들겠으면 그 항목은 건너뛰고 다음으로 간다. 억지로 물으면 상태만 올라가고 아는 것은 그대로다

## 스킵

**한 단어면 끝난다.** "패스", "나중에" 한 마디에 즉시 물러나고 원장 `## 스킵 기록`에 한 줄만 남긴다.

스킵률이 이 스킬의 1차 지표다. 마찰이 커지면 사용자가 훅 알림 자체를 무시하게 되고, 그 시점에 스킬은 죽는다.

## 볼트 승격은 여기서 하지 않는다

배웠다는 이유만으로 지식 볼트에 노트를 만들지 않는다. 커리큘럼은 주기적으로 도는데 볼트의 유입량 통제는 드문 적재를 전제로 설계돼 있다. 볼트 경로와 승격 형식은 `mentee-profile.md`의 "지식 볼트" 절이 정한다.

**승격은 배운 개념이 나중에 실작업과 만났을 때** 한다. 그 만남 자체가 재노출 신호이기도 하다. 절차는 `senior-mentor`의 "볼트 승격" 절이 소유한다.

## 하지 말 것

- **퀴즈 결과를 `comprehension-debt.md`에 쓰는 것** — 지표가 섞여 어느 쪽도 못 읽게 된다
- 한 번에 두 개 이상 내는 것
- 훅 알림이나 대화에서 **다음에 물을 개념명을 미리 밝히는 것**
- 커리큘럼 목록을 이 조문에 옮겨 적는 것 — 원장이 소유한다
- 재대조에서 개념 정의를 다시 말해 달라고 하는 것
- 배운 즉시 볼트 노트를 만드는 것
- 사용자가 작업 중일 때 제안 없이 문제부터 내는 것

## 성공 기준 · 존재 의의

`RATIONALE.md`를 만들어 아래 셋을 시드로 옮기고, 이후 관측은 그 파일에 쌓는다. **만든 뒤에는 이 절을 참조만 하고 두 벌로 두지 않는다.**

**없애려는 것** — 실작업 경로는 정해진 학습 범위를 만나지 않는다. 이해 부채 원장에서 승격되는 개념은 그 사람의 작업이 실제로 부딪힌 것뿐이라, 작업이 안 닿는 영역은 아무리 오래 돌려도 안 나온다. 그 빈 곳을 채우는 것이 이 스킬이다.

**재는 것 (1차) — 스킵률.** 원장 `## 스킵 기록`의 빈도. 3주 연속 스킵이면 절차를 고치지 말고 방식 자체를 재설계한다. 정기 발동을 쓰는 이상 마찰이 실패 경로이므로 마찰부터 잰다.

**재는 것 (2차) — 재대조 통과율.** 기한이 지나 다시 물었을 때 판별점을 스스로 짚은 비율. **커버리지로 재지 않는다** — 빨리 넘길수록 올라가서, 목록을 훑기만 한 상태와 실제로 배운 상태가 구분되지 않는다.

사용자가 *"이 스킬 의도대로 작동해?"* 라고 물으면 `RATIONALE.md`와 원장을 읽고 그 세션과 대조한다.

