AI 사용 금지, 구글 검색 금지, IDE 자동 완성 기능 사용 금지. 오직 나 자신과 빈 편집기, 그리고 많은 겸손함만 가지고 임했다.
요약(TL;DR)
- ChatGPT와 Claude Sonnet 5.5 두 모델에게 초급부터 스태프 레벨까지 다루는 4시간 분량의 C# 시험을 각각 작성하게 한 후, 나 자신이 이 두 시험을 모두 비공개로 치렀다.
- ChatGPT의 시험 점수: 53.5% (200점 만점에 107점). Claude가 더 어렵게 만든 시험: 약 22–23%.
- 두 시험 모두에서 최약점은 Modern C#였으며, 가장 낮은 점수는 15%에 달했다.
- 'AI로 인한 두뇌 퇴화(AI brain rot)'는 이야기의 일부일 뿐이다. 사실 나는 처음부터 새로운 기능들을 제대로 학습한 적이 없었다.
영상 버전: [paste YouTube link]
이 시험을 치르게 된 이유
요즘 AI 코딩 도구들은 너무 뛰어나서, C# 언어의 많은 부분을 기억하지 못해도 프로그램을 배포할 수 있게 되었다. LINQ 쿼리나 async 파이프라인, 혹은 유닛 테스트가 필요할 때? 구문을 머릿속으로 되짚는 것보다 프롬프트 하나를 입력하는 것이 훨씬 빠르다.
오랫동안 손으로 코드를 작성하지 않았던 후, 내 머릿속에 실제로 무엇이 남아있는지 알고 싶었다. 그래서 나는 규칙을 정했다: AI 사용 금지, 구글 검색 금지, 자동 완성 기능 사용 금지.
준비 과정(The setup)
나는 두 모델에게 초급, 중급, 시니어, 스태프 레벨의 내용을 아우르는 4시간 분량의 시험을 작성해 달라고 요청했다:
- ChatGPT는 기초 개념, 일상적인 구문(syntax), 제네릭스(generics), 코드 읽기, 디버깅 섹션과 작은 주문 보고 시스템에서 메서드를 완성하는 60분 실습 과제를 만들었다.
- Claude Sonnet 5.5에게 높은 난이도로 만들어 달라고 요청하자, Modern C#, 인터페이스(interfaces), 객체 지향 프로그래밍(OOP), 동시성(concurrency), 메모리 및 할당(memory and allocation), Nullable Reference Types에 대한 섹션과 60분 코딩 챌린지를 만들었다.
나는 범위를 언어 지식 자체로 한정했다. ASP.NET, Blazor, Minimal APIs 또는 마이크로서비스(microservices)는 포함되지 않았기 때문에 프레임워크 숙련도에 의존할 수 없었다.
결과(The results)
| 시험 | 점수 | 가장 잘한 영역 | 가장 취약했던 영역 |
|---|
| ChatGPT | 53.5% (107/200) | OOP, 약 70% | Modern C#, 30–38% |
| Claude Sonnet 5.5 | 약 22–23% | 50% 이상인 영역 없음 | Modern C#, 약 15% |
두 가지 점이 눈에 띄었다:
- ChatGPT 시험은 쉬웠지만, 겨우 절반을 넘기는 정도였습니다.
- 더 어려운 시험에서는 단 하나의 섹션도 50%에 도달하지 못했습니다. 기본 개념조차 약 33% 수준이었습니다.
제가 가장 강했던 결과인 OOP(객체 지향 프로그래밍) 역시 최고 수준의 주제입니다. 이는 구문 암기보다는 설계 사고(design thinking)에 가깝기 때문에, 제가 테스트하고 있던 저수준 지식의 승리로는 간주하지 않았습니다.
AI를 탓하기는 너무 쉽다
제 첫 반응은 “뇌 부패(brain rot)”였습니다. 그럴지도 모릅니다. 하지만 두 시험 모두에서 가장 취약했던 영역은 빠르게 변화하는 현대 C#이었고, 저는 제가 이 분야를 제대로 배운 적이 없었던 것 같습니다. 생성된 코드를 공부하지 않고 받아들이면, 결과물은 얻지만 그 기능(feature)을 흡수하지 못합니다.
이것은 잊어버리는 것과는 다른 문제입니다. AI가 없었더라도 드러났을 문제였습니다.
직접 몇 가지 시도해 보기
이들은 시험에서 가져온 질문이 아닙니다. 제가 현재 다시 배우고 있는 종류의 예시들입니다. 실행하기 전에 결과를 예측해 보세요.
1. 값 타입(Value types) 대 참조 타입(Reference types)
struct Point { public int X; }
class Person { public string Name = ""; }
...
2. Nullable reference types (널 가능 참조 타입)
#nullable enable
string? name = GetName();
Console.WriteLine(name.Length); // 컴파일러가 뭐라고 할까요?
...
3. 최신 구문(Newer syntax)
public class Order(int id, List<string> items)
{
public int Id => id;
...
스니펫 3에 나온 각 기능이 어떤 C# 버전에서 도입되었는지 이름을 대고, Primary constructor가 실제로 무엇을 포착하는지 설명할 수 있다면, 저는 이전에 있던 지점보다 앞서 나간 것입니다.
(답변: 1번, 그리고 Grace. 두 번째 스니펫은 첫 줄에만 가능한 null dereference 가능성에 대해 경고합니다. 세 번째는 1-3을 출력합니다.)
구문 암기가 여전히 가치가 있을까?
솔직히 말해서, 양쪽 모두 일리가 있습니다.
반대: AI가 구문을 잘 처리해주므로, 시간을 설계(design), 디버깅 및 시스템 사고에 쓰는 것이 더 나을 수 있습니다.
책임 소재: 당신은 자신이 배포하는 것에 대한 책임이 있습니다. 금융이나 의료 같은 분야에서는 “모델이 작성했다”는 말이 통하지 않습니다. 읽을 수 없는 코드를 검토하는 것은 진정한 검토가 아니며, nullability(널 가능성), concurrency(동시성) 또는 memory behavior(메모리 동작)의 미묘한 버그들은 자신감 있어 보이는 제안 뒤에 숨어 있을 수 있는 바로 그 종류입니다.
저는 AI가 여러분이 얼마나 많이 암기해야 하는지를 바꿀 뿐, 이해할 필요 자체가 있는지 여부를 바꾸지는 않는다고 생각합니다.
계획 (The plan)
저는 Claude에게 커리큘럼을 만들도록 요청했습니다. 그 추정치는 하루 약 2시간, 주 4일로 총 4~5개월 정도였습니다. 긴 여정이지만, 제가 할 일은 다음과 같습니다:
- 기본기를 재구축하고, 이후 최신 C# 기능을 하나씩 다루며 진행할 것입니다.
- 코드를 먼저 직접 손으로 작성한 후, AI에게 검토를 받되, 코드를 작성하게 하지는 않을 것입니다.
- 몇 달 후에 시험을 다시 치르고 새로운 점수를 공개할 것입니다.
토론 (Discussion)
여러분은 주력 언어로 비공개(closed-book) 시험을 통과할 수 있습니까? 어떤 주제가 여러분을 무너뜨릴 것 같나요? 댓글로 알려주세요.