최근 AI 기술의 발전과 함께 '코딩은 결코 어려운 부분이 아니었다'는 주장이 종종 제기됩니다. 하지만 이는 소프트웨어 개발이 요구하는 오랜 기술, 경험, 노력과 여전히 버그투성이인 소프트웨어의 현실을 무시하는 발언이라는 비판이 나왔습니다. 무엇을 만들지 결정하고 고객을 이해하는 일도 중요하지만, 구현(implementation)보다 본질적으로 더 어렵다고 단정할 수 없으며, 개발자마다 고객 중심 역할과 기술적 장인정신을 중시하는 정도가 다르다는 것입니다.
성공적인 소프트웨어는 사용자와 사업에 대한 이해뿐 아니라 시스템을 제대로 구현하는 코드 품질과 전문성도 필요합니다. 즉, 어느 한쪽만 중요하다고 주장하는 극단론을 피해야 한다는 것이 핵심입니다. 프로그래머는 AI 시대 이전부터 높은 수요와 급여를 누렸지만, 동시에 스트레스와 번아웃을 겪어왔습니다. 기업들이 '10x 닌자 록스타 개발자'를 찾으며 LeetCode 같은 엄격한 면접으로 지원자를 평가해 온 현실은 코딩이 결코 쉽지 않은 작업임을 방증합니다. Clean Code, The Pragmatic Programmer 등 방대한 전문 서적과 부트캠프, 대학 학위 과정 전체가 프로그래밍 교육에 투입되는 것 역시 코딩 역량에 상당한 지식과 훈련이 필요하다는 것을 보여줍니다. 코딩이 쉽다는 전제로는 소프트웨어가 여전히 심각한 버그를 품고 있는 현실도 설명하기 어렵습니다.
또한, 무엇을 만들지 결정하는 일이 자동으로 더 어렵다고 볼 수도 없습니다. 제품 결정이 가장 어려운 업무라면 제품 관리자에게도 개발자 수준의 엄격한 다단계 면접과 더 높은 보상이 적용되어야 하지만 현실은 그렇지 않습니다. 고객 이해가 구현보다 어렵다면 시장 조사자, 사용성 전문가, 고객 성공 담당자, 비즈니스 분석가도 소프트웨어 회사의 핵심 인재로 대우받아야 하지만, 이 역시 일반적인 현실과는 거리가 있습니다. 소프트웨어 개발의 대부분이 이해관계자와 대화하고 고객 요구를 파악하는 일이라는 통념도 있지만, 많은 프로그래머는 대화보다 명확한 우선순위를 원하며, '고객 문제를 해결한다'고 말하는 개발자도 모나드(monad), 메모리 안전성(memory safety) 같은 기술적 주제에는 적극적으로 의견을 내는 반면, 고객 이해는 가상의 페르소나에 머무는 경우가 많습니다.
결론적으로, 사용자와 대화하고 경험을 이해하며 공감하는 일, 고객 문제를 해결하고 이해관계자의 방향을 일치시키는 일은 소프트웨어 프로젝트 성공에 필수적입니다. 동시에 좋은 코드를 만드는 일 역시 기술과 인내, 세부 사항에 대한 주의, 경험과 지혜가 필요한 장인 작업이며 앞으로도 중요할 것입니다. 개발자는 구축하는 시스템을 깊이 이해하는 동시에 그것을 왜 구축하는지도 깊이 이해해야 합니다. '코드는 쉽다'거나 '코드는 자동화할 수 없는 인간의 예술적 표현이다'라는 양극단적 시각으로는 변화에 적응하기 어렵습니다.
이러한 변화 속에서 개발자는 새로운 기술에 호기심과 비판적 태도를 함께 유지해야 합니다. 과대광고와 실제로 작동하는 기술을 구분하고, 작동한다면 어느 범위까지 유효한지 판단하는 능력이 중요합니다. 시니어 개발자는 기존 전문성을 넘어 사용자 경험, 고객 인터뷰, 사업 전략을 학습해야 하며, 주니어와 입문자는 JavaScript 개발자라도 포인터, 재귀, 메모리 계층 등 소프트웨어가 실제로 작동하는 원리를 깊이 학습해야 합니다. AI가 코드를 작성하더라도 자신의 책임을 포기하지 않고, AI의 입출력을 수동으로 전달하는 인간 프록시(meat proxy)가 되어서는 안 됩니다. 자신의 이해, 판단, 공감, 취향을 AI에 아웃소싱해서는 안 된다는 점을 명심해야 합니다.