AI가 TypeScript 전쟁에서 승리했다

논쟁은 끝났습니다. TypeScript가 더 나은 논거를 가졌기 때문에 승리한 것이 아닙니다. AI 도구들이 그 논쟁 자체를 무의미하게 만들었기 때문에 승리한 것입니다.

연구자들은 핵심적인 패턴을 발견했습니다. AI가 생성한 코드에서 발생하는 컴파일 실패의 대부분은 타입 불일치(type mismatch)입니다. 이는 로직 에러가 아닙니다. 함수의 형태나 인자(argument)의 형식이 잘못된 단순한 실수입니다.

AI는 패턴을 따름으로써 코드를 빠르게 생성합니다. 하지만 전체 코드베이스에 대한 완전한 멘탈 모델을 보유하고 있지는 않습니다. 사람은 경험을 통해 타입 에러를 잡아낼 수 있지만, 타입 체커는 문맥(context) 없이도 즉각적으로 이를 잡아냅니다.

정적 타이핑(Static typing)은 더 이상 스타일의 선택 문제가 아닙니다. AI가 작성한 코드를 위한 안전 도구입니다.

이것이 일상 업무에 어떤 영향을 미치는지 살펴보십시오:

AI를 활용한 동적(Dynamic) 코드베이스:

  • AI가 함수를 작성합니다.
  • 타입이 암시적(implicit)입니다.
  • 에러를 수동으로 찾아야 합니다.

AI를 활용한 정적(Static) 코드베이스:

  • AI가 함수를 작성합니다.
  • 타입 체커가 즉시 실수를 표시합니다.

실수 발생률은 동일합니다. 하지만 이를 수정하는 비용이 다릅니다. 이것이 TypeScript 채택이 계속 증가하는 이유입니다. 사람이 아닌 존재가 초안을 작성할 때, 타입은 저렴한 보험 역할을 합니다.

이 규칙은 다른 언어에도 적용됩니다. Rust는 여기서 훨씬 더 유용합니다. Borrow checker는 AI가 자주 유발하는 메모리 및 동시성(concurrency) 버그를 차단합니다. 이러한 버그는 로컬에서는 올바르게 보이지만 런타임(runtime) 중에 실패합니다.

언어들이 승리하고 있는 이유는 AI 지원 개발을 검토하기 더 안전하게 만들기 때문입니다.

팀을 이끌고 있다면, 다음 단계를 따르십시오:

  • 먼저 경계(boundaries) 부분에 타이핑을 추가하십시오.
  • 함수 시그니처(function signatures)와 API 컨트랙트(API contracts)에 집중하십시오.
  • 모듈 간에 데이터가 이동하는 영역을 보호하십시오.

경고: 타입 안정성(type safety)이 만병통치약은 아닙니다. AI가 저지르기 쉬운 버그는 잡아내지만, 잘못된 로직이나 잘못된 요구사항까지 잡아내지는 못합니다. 컴파일이 된다고 해서 항상 올바른 코드는 아닙니다. 타입 체커는 안전벨트이지, 운전자가 아닙니다.

여러분의 팀은 기본적으로 strict mode를 사용하나요? 아래에 의견을 남겨주세요.

출처: https://dev.to/tuba_mughal_2fd16fd2c7978/typescript-didnt-win-the-language-war-ai-did-it-for-them-79l