AI가 새로운 언어가 되는 시대에, AI를 능숙하게 사용하는 새로운 엔지니어 계층이 등장하고 있다. 이들은 전통적인 프로그래밍 기초와 시스템 설계, 알고리즘 사고에 대한 탄탄한 기반을 갖추고 에이전트 워크플로우를 능숙하게 활용한다.
AI 네이티브 엔지니어는 AI를 도구로 사용하는 것을 넘어, 제품에 AI를 내장하여 고객과 직접 상호작용하도록 하는 핵심 역할을 한다.
단일 개발자가 여러 에이전트를 관리하는 시대가 왔지만, 에이전트 수를 늘리는 것이 항상 더 나은 시스템을 만드는 것은 아니다. 에이전트들을 방치하면 오히려 시스템이 악화될 수 있다. 여러 에이전트를 효과적으로 관리하는 능력은 최상위 엔지니어의 핵심 역량이다.
Mihal은 샌프란시스코의 초기 단계 스타트업에서 AI를 이끌고 있으며, 스탠포드에서 "현대 소프트웨어 개발자"라는 AI 중심의 SDLC(Software Development Life Cycle) 관련 강좌를 가르치고 있다.
소프트웨어 개발의 모든 단계에 AI가 도입되면서 큰 변화가 일어나고 있다. 최근 버클리 졸업생이 1,000곳에 지원했지만 2곳에서만 연락을 받았다는 사례는 주니어 엔지니어들이 직면한 어려움을 보여준다.
2021년 코로나19 이후 기업들이 인력 감축을 단행했고, CS 전공 졸업생 수가 지난 10~15년간 2~3배 증가했다. AI가 주목받으면서 기업들은 인력 충원 대신 AI 네이티브 인재를 고용하여 업무를 처리하는 방안을 고려하고 있다.
새로운 세대의 주니어 개발자들은 탄탄한 기본기와 AI 활용 능력을 모두 갖춰야 한다.
에이전트 워크플로우를 구축할 때는 한 번에 여러 에이전트를 사용하는 것보다, 하나씩 점진적으로 추가하는 것이 효과적이다. 하나의 에이전트로 복잡한 소프트웨어를 구축할 수 있다면, 작은 변경 사항을 위해 두 번째 에이전트를 추가하는 것을 고려할 수 있다.
로고 수정은 첫 번째 에이전트, 웹사이트 헤더 카피 업데이트는 두 번째 에이전트에게 맡기는 식으로, 작업을 분리하여 에이전트를 추가한다. 각 에이전트가 독립적으로 작업을 수행하도록 하여, 한 에이전트의 문제가 다른 에이전트에게 영향을 미치지 않도록 한다.
에이전트 워크플로우를 구축할 때는 한 번에 여러 에이전트를 추가하는 것보다, 하나씩 점진적으로 추가하는 것이 효과적이다.
에이전트들은 열정적인 인턴과 같아서, 작업을 수행하다가 막히는 경우가 있다. 이 때, 각 에이전트가 어떤 작업을 하고 있었는지 기억하고, 필요한 맥락을 파악하여 작업을 진전시키는 컨텍스트 스위칭 능력이 중요하다.
에이전트 관리 능력은 훌륭한 인간 관리자의 자질과 유사하다. 인간 개발자 관리 경험이 있는 사람이 에이전트 관리에도 능숙한 경향이 있다.
에이전트가 코드베이스를 이해하고, 기존 코드를 손상시키지 않으면서 새로운 기능을 추가할 수 있도록 코드베이스를 구성해야 한다.
에이전트가 코드베이스 내에서 올바르게 작동하도록 보장하려면, **소프트웨어의 정확성을 정의하는 테스트(계약)**를 충분히 확보해야 한다. 테스트 커버리지가 부족하면 에이전트가 제대로 작동하지 못할 수 있다.
README는 코드에 대한 설명이지만, 시간이 지나면서 코드와 일치하지 않게 되는 경우가 많다. 에이전트는 README와 코드 중 어느 것을 따라야 할지 혼란스러워할 수 있으므로, README와 코드의 일관성을 유지해야 한다.
에이전트는 오류를 빠르게 누적시키는 경향이 있다. 하나의 오해가 다음 단계에서 더 큰 오류로 이어질 수 있다. 따라서 에이전트가 처음 접하는 코드가 견고하고, 테스트가 잘 되어 있으며, 일관성 있는 디자인을 갖추도록 해야 한다.
린팅(linting) 및 스타일 검사(style checking) 도구를 사용하여 코드베이스의 형식을 일관되게 유지하면, 에이전트가 코드베이스의 규칙을 준수하도록 할 수 있다.
코드베이스 내에서 객체를 생성하는 방식이 여러 가지라면, 에이전트는 어떤 API를 사용해야 할지 혼란스러워할 수 있다. 디자인 패턴을 일관되게 유지하면 에이전트가 올바른 API를 선택하는 데 도움이 된다.
좋은 소프트웨어는 단순히 요구사항을 충족하는 것을 넘어, 추가적인 가치를 제공하고 문제를 해결하려는 노력이 담겨 있어야 한다.
과제나 프로젝트에서 100%를 달성한 후에도, 더 복잡한 것을 만들고 문제를 해결하기 위해 추가적인 노력을 기울이는 과정에서 소프트웨어에 대한 "맛(Taste)"이 길러진다.
AI 네이티브 소프트웨어 개발자가 되기 위해서는 실험 정신이 중요하다. Claude를 개발한 Anthropic 팀조차도 Claude를 사용하여 매주 또는 격주로 Claude를 재작성하며, 사용자 피드백을 기반으로 지속적으로 개선하고 있다.
강의에서 도구를 추천해 줄 수는 있지만, 결국 자신에게 맞는 도구를 찾고 워크플로우를 구축하는 것은 개인의 몫이다. 실험하고, 부딪혀보고, 자신에게 맞는 방법을 찾아가는 것이 중요하다.
시니어 개발자는 자신의 방식에 익숙해져 AI 도구에 저항하는 경향이 있지만, 주니어 개발자는 스펀지처럼 모든 것을 흡수하고 새로운 가능성을 열어둔다.
주니어 개발자는 세상에 대한 순수한 시각을 가지고 문제를 해결하려는 용기를 가진다. 이러한 특성은 스타트업 창업자에게 적합하며, 새로운 기술을 빠르게 습득하고 활용하는 데 도움이 된다.
소프트웨어 개발은 복잡한 시스템을 디지털 방식으로 구축하는 방법을 배우는 과정이며, 알고리즘을 사용하여 문제를 해결하는 방법을 배우는 과정이다. 이는 수학과 유사하며, 사고력을 향상시키는 데 도움이 된다.
개발자는 시스템을 분해하고, 작동 방식을 이해하고, 문제를 해결하고, 기능을 확장하고, 반복하는 데 익숙하다. 문제가 발생했을 때 기꺼이 내부를 파고들어 해결하려는 태도를 가진다.
개발자는 소프트웨어가 문제 해결의 도구라고 믿고, 자신이 가진 도구를 사용하여 문제를 해결하려는 자신감을 가진다.
렘 코닝은 하버드 경영대학원의 교수이며, 기업가 정신과 AI를 연구한다.
AI 시대에는 지능을 할당하는 능력이 중요하며, AI를 제품에 내장하여 고객과 직접 상호작용하도록 하는 것이 핵심이다.
AI 네이티브 조직을 구축하려면 인간의 개입을 최소화해야 한다.
AI가 서로 협력하고 상호작용하는 방식에 대한 질문은 미래에 큰 가치를 창출할 수 있는 중요한 질문이다.