메뉴
HN
Hacker News • 3시간 전

AI 없이 한 달을 보내며: AI 코딩 중독에서 벗어난 개발자의 고백

IMP
7/10
핵심 요약

한 오픈소스 개발자가 직장에서 AI 코딩 에이전트에 지나치게 의존하게 된 경험을 고백합니다. 처음에는 생산성이 폭발적으로 오르는 듯했지만, 점차 코드를 이해하지 못한 채 AI가 작성한 PR을 그대로 병합하고, 여러 에이전트를 동시에 돌리며 통제력을 잃어가는 과정을 담담하게 회고합니다. AI가 개발자를 '멍청하고, 게으르고, 더 나쁜 개발자'로 만든다는 개인적 성찰을 담은 글로, 해커뉴스에서 큰 화제가 되었습니다.

번역된 본문

몇 달 전, 제가 만들고 유지 관리하는 FOSS(자유 오픈소스 소프트웨어) 프로젝트인 LibreWeddingPlanner에서 AI 기여를 더 이상 받지 않기로 결정했습니다. 그 프로젝트에 AI 기여가 많이 들어왔던 것은 아니지만(사실 받은 기여는 전부 번역과 기능 요청이었습니다), 앞으로 생길 불필요한 분쟁을 피하고 AI에 반대하는 입장을 분명히 하고 싶었습니다. 하지만 FOSS 기여에는 AI를 쓰지 않으면서도, 직장에서는 계속 사용하고 있었습니다. 제 직장에서는, 그리고 제 개발자 친구들 다수의 직장에서도 AI를 업무에 사용하는 것이 아주, 아주 흔한 일입니다. 약간의 부끄러움을 무릅쓰고 이 경험, 그리고 그것이 저를 어떻게 멍청하고, 게으르고, 더 나쁜 개발자로 만들어가고 있었는지 이야기하려 합니다.

달콤한 시작 한 친구가 저에게 이렇게 말했습니다. "야, 한번 써봐. 엄청 강력해질 수 있어. 한번 쓰기 시작하면 멈출 수 없어. 며칠 걸리던 작업을 몇 시간 만에 끝낼 수 있어." 아니, 우리가 코카인 이야기를 하는 건 아닙니다. 그래도 어느 정도는 AI 사용을 중독이라고 생각합니다.

저는 vscode의 향상된 자동완성 기능을 켜는 것으로 시작했습니다(아니면 자동으로 켜져 있었나요?). 그리고 다른 코드 생성 모델들을 다운로드하고 사용하는 것은 자연스럽게 따라왔습니다. 어릴 적 부모님이 학교 문 앞에서 사탕을 나눠주는 나쁜 어른들을 조심하라며, "저건 사탕이 아니라 마약이야"라고 말씀하시던 게 기억납니다. 스무 살 때는 농담 삼아 "그러게요, 요즘은 마약을 공짜로 나눠주나 보죠?"라고 놀려대곤 했는데, 서른이 된 지금 생각해보니 정말 그럴지도 모르겠습니다.

AI 코딩 에이전트를 사용하기 시작하면, 상황은 아주 빠르게 통제 불능이 됩니다. 처음에는 AI에게 함수 하나를 구현해달라거나 특정 코드에 대한 테스트를 작성해달라고 부탁합니다. 오랫동안 TDD(테스트 주도 개발)를 해온 사람이라면 테스트를 먼저 작성해달라고 부탁한 다음 직접 코드를 작성하려 할 겁니다. 그런데 이제는 코드를 직접 작성하지 않고 그냥 AI에게 시키게 되죠. 그러면 TDD의 목적 중 절반(코드를 구현한 방식에 따라 테스트가 편향되지 않도록 하는 것)은 사라집니다. 하지만 너무 빨리 진행되는 기분에 신경 쓰지 않게 됩니다. 어느 날 에이전트가 제 커밋에 공동 서명(co-sign)을 하는 것을 보고, 허둥지둥 그 설정을 꺼버렸습니다. 그러니까, 그 코드가 제 것인 척하고 싶었던 거죠. 맙소사.

통제력 상실 그 시점에서 멈췄다면 그리 나쁘지 않았겠지만, 대부분의 인간 두뇌는 그렇게 작동하지 않습니다. 뭔가 마음에 들고 2배를 얻을 수 있다면, 그렇게 하게 됩니다. 저는 Jira 티켓의 설명 전체를 복사해서 붙여넣고 AI에게 구현을 맡기기 시작했습니다. 야호!! 너무 강력하다!! 상대적으로 생소한 코드베이스에서 작업하면서, 어떤 변경이 작업 수행에 실제로 필요한 것인지 통제력을 잃기 시작했습니다. '프로젝트의 모든 코드를 읽어본 AI가 필요하다고 하면, 그렇게 해야겠지'라고 생각했죠. 통제는 환상입니다. 이 문제를 논의해본 다른 사람들도 자신이 프로덕션에 푸시하는 코드가 실제로 무엇을 하는지 100%는 모른다는 데 동의했습니다. 저는 우리가 20%도 모른다고 감히 말하고 싶습니다. 정말 무섭습니다.

하지만 여기서도 멈추지 않았습니다. 작은 작업이 생기면 AI에게 맡겼고, 약 30분 만에 PR(풀 리퀘스트)이 나왔습니다. 그 30분 동안 저는 뭘 하고 있었을까요? 딴짓을 하고 있었죠. 곧 하나가 아니라 여러 에이전트가 서로 다른 작업을 여러 git worktree에서 동시에 수행할 수 있다는 것을 깨달았습니다. 풀파워! 토큰 맥스킹(Tokenmaxxing)! 저는 CLI(명령줄 인터페이스)를 통해 에이전트를 Jira에 연결하고 "별도의 worktree에서 이 Jira 티켓을 처리해"라고만 말했습니다. 그러면 에이전트가 작업을 시작했습니다. 저는 황홀했습니다.

작업이 그리 작지 않을 때는, 제가 직접 했을 거라고 생각하시죠? 천만에요. 물론 AI에게 그 작업을 더 작은 작업들로 분해해달라고 부탁하고, 그것들을 처리하게 했습니다. 그러면 AI는 제가 잘 이해하지 못하는 수많은 변경 사항이 담긴, 엄청나게 설득력 있는 PR을 제출했습니다. 대체 어떻게 그 변경 사항들에 대한 코드 리뷰를 요청할 수 있을까요? 동료들은 뭐라고 할까요? (특히 그 코드베이스에 더 경험 많은) 동료들이 왜 이렇게 했느냐고 물으면 뭐라고 답해야 할까요? 그게 전부 AI가 한 일이고, 저는 단지 AI 치는 목자일 뿐이라고 어떻게 인정할 수 있을까요? 그래서 억지로라도 코드를 이해하려 노력했습니다. 코드베이스의 아키텍처를 이해하고 싶어서가 아니었습니다.

원문 보기
원문 보기 (영어)
Several months ago, I decided that AI contributions were no longer welcome in a FOSS project I am building and maintaining - LibreWeddingPlanner . It’s not that it got a lot of contributions with AI — actually all contributions I’ve had are translations and feature requests — but I wanted to avoid future drama and have a position against AI. However, although I was not using AI for my FOSS contributions, I kept using it at work. In my workplace, as well as in many of my developer friends’, using AI to work is very, very common. Not without a degree of shame, let me tell you about this experience, and how it was turning me dumber, lazy, and a worse developer. The sweet start A friend told me hey, you should try it, you feel so powerful. Once you start using it, you cannot stop. The tasks that took you days, you can have them in hours. No, we’re not talking about cocaine, although to some degree I consider the use of AI, an addiction. I started enabling the enhanced autocomplete in vscode (or was it enabled automatically?), and downloading and using other code generation models just followed. When I was a child, I remember my parents saying be careful with the bad guys who offer candies at the school gate, those are not candies, those are drugs . When I was in my twenties, I’d pull their leg saying yeah, it’s like they give away the drugs now hum? Well, in my thirties I think they may very well do. Once you start using AI coding agents, things spiral out of control very quickly. At the start, you ask AI to implement a function for you, or to write tests for a certain piece of code. If you’ve been a TDD guy for a long time, you’re inclined to ask it to do the tests for you first, so that you can later write the code. Except you don’t write the code anymore, you just ask AI to do it, and half of the purpose of TDD (not biasing the tests by how you’ve implemented the code) is gone. But you feel you go so fast that you start not caring. One day, I saw the agent was co-signing the commits I was making, and I ran to opt-out from that setting. Like, I wanted to pretend the code was my own. Gosh. Losing control It would not be so bad if things had stopped there, but that’s not how most human brains work. If you like something and you can have 2x, you’ll have it. I started pasting the whole Jira description of a ticket, and let AI implement it for me. Yay!! So powerful!! Working on a codebase that was relatively new to me, I started losing control over which changes were really needed to fulfill the task. I thought if the AI, which has read every line of code in the project says it’s needed, so be it . Control is an illusion. Other folks I’ve discussed this with agree that they don’t know 100% of what the code they are pushing to production actually does. I bet we not even 20%. Fucking scary. But it also didn’t stop there. When I had a small task, I gave it to the AI, and in ~30 minutes I had a PR. What was I doing during those 30 minutes? Changing focus. Soon I realized I could have not one, but multiple agents working on different tasks simultaneously, in multiple git worktrees. Full power! Tokenmaxxing! I connected the agents to Jira via ACLI (command-line interface) and just asked them “work on this jira ticket in a separate worktree”. And it would start working on it. I felt ecstatic. When the task was not so small, you’d think I was working on it myself right? Hell, no. I would of course ask AI to decompose it into smaller tasks, and work on them. AI would then give me a super convincing PR with a bunch of changes I didn’t quite understand. How on Earth was I going to ask for a code review of those changes? What would my peers say? What was I going to say when they (more experienced, specially in that codebase) ask me why I did this or that? How was I going to admit it was all AI, and I was nothing but an AI shepherd? So I forced myself to understand the code. Not that I wanted to understand the architecture of the codebase, I wanted to avoid the humiliation of not knowing what the fuck I was doing. At some point, I had so many AI agents working, that the focus change was too much for me. There were tasks I could have done in 20 minutes easily, that took 5 minutes of an AI agent, and then 2 days for me to review. Because there were so many other things. And maybe AI and computers are good at context switching, but not me. I was exhausted. Because if it was just about approving PRs that are perfectly written, it would be good. But for each PR I had to look at the code, the tests, the style, give feedback , switch to something else, go back again, push, see if I have any PR comments, if CI passed, wait, now the linter complains. And it takes you 2 days to deliver something that could have been literally 1 hour single-focused. In my personal experience, multiplied AI performance is just an illusion. Multiplied frustration and exhaustion is guaranteed, though. I think there was not a single task I gave to the AI that I could merge as is. Of course, I didn’t write the commits or the PR descriptions myself (what is this, 2024??), AI was doing it for me, and it made sure there was a 7-paragraph description in the PR, explaining what it had done. I stopped reading those descriptions, like, I told it what to do, I assume it did what I said. The description is for others . Because there has to be a description, right? AI is so fucking good as sounding professional, that you relax and let it be. It’s not that I actually thought the code was good, but you get convinced over time, you get lazy, you become complacent. You stop questioning, and start accepting as good some code you would have never accepted, just because you cannot tell why it’s bad. You have lost control. Most AI developers will deny it, but deep inside, they know it’s true. Just don’t want to face it. Months passed by, and one day I realized I had not written a single line of code myself in several months. I didn’t even commit myself. Countless times I’ve written in the AI agent chat “commit and push”. What. The. Hell. If that is not laziness, I don’t know what it is. AI was also not able to solve all the tasks that I gave it. Not even half of them. Once and again, I had to babysit the AI agent saying “now, apply this pattern” or “in the specs, separate the test setup in a before block, and add the assertions in a different block”. Like I was mentoring a junior. Don’t get me wrong, I love mentoring, I’ve done it for years, and I think it was good for the mentor and the mentee. But I’m not going to fucking babysit a machine, sorry. Often times, I would see that the quality of the code written by AI had decreased significantly. Not that it was brilliant at the start, but I got the feeling of “dude, you’ve done this before, why are you uncapable of doing this again?”. So I had to prompt it again to re-explain how to do it. Or link it to a file with my preferences. Alright, I know what you mean now, sorry about the confusion. Let me redo it for you. And again it would do a fucking mess that is not what I was requesting. It started reminding me of the strategy where Google lowered the quality of the search results, forcing users to search several times, and see several times as many ads. And if that worked for Google, how is it not going to work for AI? Specially in the uncertain financial times the AI companies are going through, do you really think they would not do it? Come on. They will do this and more. Other days, I would see that an agent had been stalled for 30 minutes without giving me an answer. What to do about it? Do you think I took the task and worked on it myself? Absolutely not. I took the verbal whip and, sounding authoritarian, demanded my actual code! The AI agent profusely apologized, and gave me in 20 seconds what it had not given me in 30 minutes. I looked at the token expenses, and it had spent $30 in tokens for absolutely nothing. If I was the one paying the bill, I would feel com