AI에게서 쓸모 있는 코드 설명을 받으려면, 이미 얼마나 아는지 말하고, 한 줄씩 설명해 달라고 하고, 트레이스를 요청하세요. 트레이스는 코드가 실행되면서 각 변수가 어떤 값을 가지는지 보여 주는 표입니다. 그냥 "이 코드 설명해 줘"라고 하면 가상의 평균 독자를 위한 요약이 나오는데, 대개 여러분에게 너무 쉽거나 너무 빠릅니다.
한 줄씩, 값의 트레이스와 함께
두 탭은 같은 짧은 함수에 대해 묻습니다. 각 답변이 무엇을 확인할 수 있게 해 주는지 비교해 보세요.
def running_max(nums):
result = []
best = None
for n in nums:
if best is None or n > best:
best = n
result.append(best)
return result
print(running_max([3, 1, 4, 1, 5]))이 함수는 리스트의 누적 최댓값을 계산합니다. 숫자를 하나씩 돌면서 지금까지 본 가장 큰 값을 best에 기록하고, 매 단계마다 그 값을 result에 추가합니다. best is None 검사는 첫 번째 요소를 처리합니다. 호출 결과로 [3, 3, 4, 4, 5]가 출력됩니다.
각 요소를 한 번씩 방문하므로 이 함수는 O(n) 시간에 실행됩니다.
첫 번째 답은 정확하지만, 누적 최댓값이 무엇인지 이미 아는 사람에게만 도움이 됩니다. 아무도 묻지 않은 시간 복잡도 설명까지 붙였는데, 모델이 누가 읽는지 모를 때 붙는 종류의 군더더기입니다. 두 번째 답은 모든 문장을 가리킬 수 있는 줄에 연결하고, 표는 요약이 지나가듯 말한 것을 구체적으로 보여 줍니다. result.append(best)는 best가 바뀌지 않는 반복을 포함해 매 반복마다 실행됩니다. 그래서 3이 두 번 나오고, 여러분은 "매 단계마다"에서 추론하는 대신 2번 행에서 그것을 직접 볼 수 있습니다.
트레이스 표는 설명 자체에 대한 확인이기도 합니다. 반복문 안에 print(n, best, result)를 넣고 코드를 실행하면 각 행을 검증할 수 있습니다. 어떤 행이 실제 출력과 다르면 설명 어딘가가 틀린 것이고, 이제 어디가 틀렸는지 알 수 있습니다.
내 수준에 맞춰 설명받기
설명 프롬프트에서 가장 쓸모 있는 한 줄은 여러분이 이미 아는 것입니다. 모델에게 어떤 줄을 건너뛰고 어떤 줄에서 천천히 가야 하는지 알려 줍니다. 역할 문장("너는 코딩을 시작한 지 한 달 된 사람들을 가르치는 튜터야")도 도움이 될 수 있지만, 같은 원리로 동작합니다. 모델에게 독자가 누구인지 알려 주는 것입니다. 역할이 무엇을 바꾸고 무엇을 바꾸지 못하는지는 역할 프롬프팅에서 다룹니다.
아래 블록은 재사용할 수 있는 버전입니다. 수준, 헷갈리는 부분, 코드를 바꾸면 설명도 따라 바뀝니다.
text = "the cat and the hat"
counts = {}
for word in text.split():
counts[word] = counts.get(word, 0) + 1
top = sorted(counts.items(), key=lambda kv: kv[1], reverse=True)[:2]
print(top)반복문은 각 단어의 개수를 셉니다. counts는 결국 {'the': 2, 'cat': 1, 'and': 1, 'hat': 1}이 됩니다.
이제 마지막 두 줄을 안쪽부터 살펴보겠습니다.
counts.items()는('the', 2),('cat', 1),('and', 1),('hat', 1)쌍을 돌려줍니다.lambda kv: kv[1]은 이름 없는 작은 함수입니다. 쌍 하나를 받아 두 번째 항목, 즉 개수를 돌려줍니다.('the', 2)에 대해서는2를 돌려줍니다.sorted(..., key=...)는 그 함수가 돌려주는 값으로 쌍을 정렬하므로 개수로 정렬됩니다.reverse=True는 가장 큰 것을 앞에 둡니다. 개수가 같은 단어는 원래 순서를 유지합니다.[:2]는 앞의 두 쌍만 남깁니다.
그래서 top은 [('the', 2), ('cat', 1)]이고, 이것이 출력됩니다.
"개수가 같으면 원래 순서를 유지한다"는 빠른 설명이 빠뜨리는 세부 사항이고, and나 hat이 아니라 cat이 두 번째 자리를 차지하는 이유입니다. Python의 sorted는 안정 정렬이고, reverse=True도 이 안정성을 유지합니다. 여러분은 이것에 대해 물을 생각을 못 했을 것이고, "이 입력에서 각 조각이 만드는 값"을 요청한 덕분에 이 점이 드러났습니다.
파일 전체가 아니라 한 부분에 대해 묻기
500줄짜리 파일을 붙여 넣고 "이게 뭐 하는 거야?"라고 물으면 파일 구조 둘러보기가 나옵니다. 함수 하나에서 막혔다면 그 함수와 그것을 호출하는 줄을 붙여 넣고 직접 물어보세요. "리스트가 비어 있으면 이 함수는 왜 일찍 반환해?"나 "12번 줄의 yield는 뭘 하고, return이었다면 뭐가 달라져?" 같은 식입니다. 좁은 질문은 여러분의 코드에 대한 답을 받고, 넓은 질문은 여러분의 코드와 비슷한 코드에 대한 답을 받습니다.
크고 낯선 코드베이스라면 거꾸로 하세요. 먼저 지도를 요청하고("주요 모듈과 각 모듈이 맡은 일을 한 줄씩 나열해 줘"), 그다음 필요한 모듈에 대해 물어보세요. 이것은 작은 프롬프트 체인이고, 단계마다 모델의 답이 확인할 수 있을 만큼 짧게 유지됩니다.
아는 언어를 통해 설명받기
낯선 언어로 된 코드는 아는 언어에 기대어 설명받으면 읽기가 쉬워집니다. 프롬프트에 그렇게 말하세요. "나는 Python을 알아. 이 Go 함수를 설명하고, Python 프로그래머가 예상하는 것과 다르게 동작하는 곳을 모두 짚어 줘." 오해는 차이에 숨어 있습니다. 정수 나눗셈, None 대신 쓰이는 제로 값, 원래 배열과 메모리를 공유하는 슬라이스 같은 것들입니다. Go 코드를 평범하게 설명하면 그 줄들을 올바르게 설명하겠지만, 그 줄들에 대한 여러분의 직감이 틀렸다는 것은 절대 말해 주지 않을 것입니다.
이해했는지 확인하기
읽고 동의한 설명도 여러분이 코드를 직접 쓸 수 없는 상태로 남겨 둘 수 있습니다. 이 틈을 메워 주는 프롬프트가 두 가지 있습니다.
- 먼저 예측하세요. 코드를 실행하거나 설명을 요청하기 전에, 무엇이 출력될지 적어 두세요. 그다음 예측이 틀린 줄만 설명해 달라고 하세요.
- 거꾸로 설명하세요. 직접 설명을 쓰고, 다시 쓰지 말고 틀리거나 빠진 것만 짚어 달라고 모델에게 요청하세요.
def running_max(nums):
result = []
best = None
for n in nums:
if best is None or n > best:
best = n
result.append(best)
return result
내가 정말 이해했는지 확인하는 질문을 3개, 한 번에 하나씩 내 줘. 새로운 입력에 대한 출력을 예측해야 하는 질문을 하나 넣어 줘. 다음 질문을 하기 전에 내 답을 기다리고, 내 답이 맞았는지와 그 이유를 알려 줘.3문제 중 1번: running_max([2, 7, 5, 9])는 무엇을 돌려줄까요? 실행하기 전에 직접 풀어 보세요.
프로그램이 이상하게 동작할 때도 같은 방식이 통하지만, 그때 필요한 것은 수업이 아니라 원인입니다. 디버깅 프롬프트를 참고하세요. 눈앞의 코드를 AI가 썼다면, 한 줄씩 설명받는 것이 그 코드를 남기기 전에 빠르게 검토하는 방법입니다. 그 밖에 해 볼 확인은 코드 작성 프롬프트에 정리되어 있습니다.
자주 묻는 질문
ChatGPT나 Claude에게 코드 설명을 어떻게 요청하나요?
코드를 붙여 넣고 세 가지를 말하세요. 이미 아는 것, 헷갈리는 부분, 원하는 설명의 모양입니다. "각 줄을 한 문장으로 설명하고, 반복할 때마다 변수 값을 표로 보여 줘"가 "이 코드 설명해 줘"보다 훨씬 쓸모 있는 답을 받습니다.
트레이스 표란 무엇인가요?
트레이스 표는 프로그램이 실행되는 과정을 따라갑니다. 단계(흔히 반복 한 번)마다 한 행, 변수마다 한 열을 두고, 그 시점의 각 변수 값을 적습니다. 이 표를 요청하면 추상적인 설명이 코드와 대조해 볼 수 있는 구체적인 값으로 바뀝니다. 디버거로 프로그램을 한 단계씩 실행할 때 보이는 것을 글로 적은 기록입니다.
모르는 언어로 된 코드도 AI가 설명해 줄 수 있나요?
네, 가장 쓸모 있는 요청 중 하나입니다. 아는 언어를 말하고 비교해 달라고 하세요. "나는 Python을 알아. 이 Rust 코드를 설명하고, Python과 다르게 동작하는 곳을 짚어 줘." 설명이 세부 사항에서 자신 있게 틀릴 수 있으므로, 언어 동작에 대한 주장은 작은 예시를 실행해서 확인하세요.
AI로 코드 설명을 받으면 공부에 해가 되나요?
그다음에 무엇을 하느냐에 달려 있습니다. 설명을 읽고 넘어가면 배우는 것이 적습니다. 코드를 실행하기 전에 출력을 예측하거나, 모델에게 퀴즈를 내 달라고 하거나, 코드를 직접 설명하고 틀린 곳을 물어보면 여러분이 생각하게 되고, 배움은 거기서 일어납니다.