70% 문제: AI 지원 코딩의 냉혹한 진실
(addyo.substack.com)- 개발자들이 AI를 활용하는 두 가지 주요 패턴이 있음
- 부트스트래퍼:
- Bolt, v0, screenshot-to-code AI 같은 도구를 사용하여 빠르게 초기 프로토타입을 생성함.
- 디자인이나 개념을 시작점으로 AI를 활용하여 초기 코드베이스를 생성하고, 몇 시간 또는 며칠 만에 작동하는 프로토타입을 개발함
- 이터레이터:
- Cursor, Cline, Copilot, WindSurf 같은 도구를 일상 개발에 사용하여 코드 완성, 복잡한 리팩토링, 테스트 및 문서 생성을 수행함
- 부트스트래퍼:
숙련된 개발자와 초급 개발자 간의 AI 활용 차이
- 숙련된 개발자: AI가 제안한 코드를 지속적으로 리팩토링하고, 에지 케이스를 처리하며, 타입 정의를 강화하고, 아키텍처 결정을 검토함
- 초급 개발자: AI의 출력을 그대로 수용하는 경향이 있어, 실제 환경에서 문제가 발생할 수 있는 '카드로 만든 집'과 같은 코드를 생성할 위험이 있음
AI 도구의 역설: 지식의 역설
- 숙련된 개발자: 이미 알고 있는 작업을 AI를 통해 가속화함
- 초급 개발자: 무엇을 해야 할지 배우기 위해 AI를 사용하려 함
- 결과: 숙련도에 따라 AI 활용의 효과가 크게 달라짐
비전문가의 AI 코딩 도구 사용 시 70% 문제
- 초기 진행: AI 도구를 사용하여 원하는 기능의 70%를 빠르게 구현할 수 있음
- 남은 30%: 작은 버그를 수정하려 할 때 새로운 문제가 발생하며, 이를 해결하려다 더 많은 문제가 생기는 악순환에 빠질 수 있음
AI 도구를 효과적으로 활용하기 위한 전략
- AI 초안 패턴: AI로 기본 구현을 생성하고 수동으로 검토 및 리팩토링함
- AI를 학습 도구로 활용: 지속적인 대화로 AI가 생성한 코드를 이해하고, 기본적인 프로그래밍 개념을 함께 학습하며, 점진적으로 지식을 쌓아감
- AI의 한계 인식: AI 도구는 프로토타입 개발, 학습 보조, 아이디어 검증에는 유용하지만, 생산 준비가 된 유지 보수 가능한 소프트웨어를 개발하려면 여전히 실제 엔지니어링 지식이 필요함
에이전틱 소프트웨어 엔지니어링의 부상
- 에이전틱 시스템: 명령에 응답하는 것을 넘어, 계획하고 실행하며 반복할 수 있는 시스템으로 발전하고 있음
- 미래 전망: AI는 개발자를 대체하는 것이 아니라, 점점 더 능동적인 협력자로서 인간의 지침과 전문성을 존중하며 주도적으로 문제를 해결하는 방향으로 나아가고 있음
- AI는 이미 알고 있는 패턴을 구현하는 데 도움을 주고, 아이디어를 빠르게 프로토타입하고 다양한 접근 방식을 탐색하는 데 유용함
- 반복적이고 일상적인 코딩 작업을 자동화하여 더 흥미로운 문제에 집중할 수 있게 함
AI 도구 사용 시 주의사항
- 사용자 경험의 중요성: AI를 활용하여 빠르게 데모를 만들 수 있지만, 실제 사용자가 사용할 때 발생할 수 있는 에러 메시지, 에지 케이스, UI 상태 등을 세심하게 다루지 않으면 사용자에게 불편을 줄 수 있음
- 장인 정신의 부활:
- AI가 소프트웨어 개발을 빠르게 만들었지만, 진정한 소비자 품질의 경험을 만드는 예술을 잃을 위험이 있음.
- AI 도구는 일상적인 코딩 작업을 처리하여 개발자가 중요한 세부 사항에 집중할 수 있도록 도와줄 수 있음.
결론
- AI의 역할:
- AI는 더 많은 코드를 빠르게 작성하는 것이 아니라, 더 나은 소프트웨어를 구축하는 데 도움을 줌
- AI는 소프트웨어 품질을 극적으로 향상시키지 않음.
- 소프트웨어 개발의 어려운 부분은 여전히 인간의 판단이 필요함.
- AI는 더 나은 솔루션을 찾기 위한 빠른 탐색을 가능하게 하지만, 좋은 소프트웨어 관행을 대체할 수는 없음.
- 인간의 책임: AI를 현명하게 사용하여 엔지니어링 원칙을 유지하고, 소프트웨어 품질을 향상시키는 것은 여전히 인간의 몫임
GeekNews Weekly에 포함된 글입니다.
에디터 코멘트 보기
댓글과 토론
기술을 활용하는 것은 좋은데, 생각까지 위탁해버리는 분들이 너무 많아서, 특히 교육 같은거 나가면 더 많이 보여서 걱정입니다. 솔직히 저는 그런 사람들이랑 일하고 싶지는 않거든요.
AI에게 피드백을 하면 좋아지는 듯 보이다가… 어느 순간 망가짐. 그 순간을 캐치하는 요령이 필요함. 그리고 그 순간이 오면 AI를 버릴 건지 다시 시작할건지 선택해야함.
Hacker News 의견
-
AI는 과거의 여러 도구들과 마찬가지로 프로그래밍의 일부를 대체하려고 했음. 하지만 본질적인 작업은 여전히 인간의 두뇌가 필요함
- AI는 복잡성 관리와 같은 본질적인 작업을 수행할 수 없음
- AI는 영어로 대화할 수 있어 이전 시도들보다 유연하지만, 여전히 본질적인 문제 해결에는 한계가 있음
-
AI는 팀의 열정적인 주니어 개발자와 같음
- 주니어 개발자와 AI 도구 모두 버그가 많고 장황한 코드를 작성하는 경향이 있음
- AI는 피드백을 통해 학습할 수 없기 때문에 반복적인 실수를 계속 검토해야 함
-
AI 도구를 사용하여 새로운 도구를 빠르게 개발할 수 있었음
- AI 덕분에 며칠 걸릴 작업을 몇 시간 만에 완료할 수 있었음
- AI가 전체 작업의 70% 또는 42.5%를 수행했을지라도 큰 개선이었음
-
주니어 개발자에게 AI는 양날의 검임
- AI를 학습의 지름길로 사용하면 학습을 건너뛰게 됨
- 그러나 AI를 멘토로 사용하면 깊이 있는 학습이 가능함
- AI가 주니어 개발자의 작업을 대체하면 채용 문제가 발생할 수 있음
-
"신뢰하되 검증하라"는 패턴이 중요함
- AI가 작성한 코드가 컴파일되고 테스트 케이스를 통과하면 긍정적인 신호임
- 예를 들어, Rust의 csscolorparser를 Python으로 바인딩한 프로젝트가 있음
-
AI가 코드를 빠르게 작성할 수 있지만 학습 과정이 빨라지지는 않음
- AI의 도움으로 더 빨리 발전할 수 있지만, 여전히 잘 구조화된 코드를 작성하는 데는 시간이 걸림
-
Copilot은 복잡한 작업에서 실패함
- AI는 확장성에서 한계를 보이고 있음
- 미래에는 양자 컴퓨팅과 같은 기술이 필요할 것임
-
GenAI는 잘 알려진 요구 사항을 가진 솔루션에서는 깊이 있는 결과를 제공할 수 있음
- 복잡한 문제에서는 50% 정도의 성과만 가능함
- 세부적인 작업 목록을 만들어 각 작업을 개별적으로 해결하는 방법을 사용 중임
-
AI의 작업을 검증하는 것이 중요함
- AI가 제안한 코드가 실행 가능했지만, 보안 문제가 있는 라이브러리를 사용하고 있었음
- AI의 코드가 실행 가능하더라도 검증이 필요함
-
AI로 생산성이 크게 향상되었다는 사람들을 실제로 만나기 어려움
- AI 도구는 편리하지만, 코딩의 일부에만 유용함