brunch

반복은 모든 탐구의 핵심이자 실제 지식 습득의 기본

인공지능 시대의 소프트웨어 공학

by 안영회 습작

<모던 소프트웨어 엔지니어링>의 4장 <개선을 위한 반복>에서 밑줄 친 내용을 토대로 생각을 정리한 글입니다.


조직적으로 성장 마인드셋 배양하기

2부 첫 장에서 가장 먼저 밑줄 친 글입니다.

개선을 위한 반복iteration (이하 '반복'으로 줄여서 표현한다)은 "일련의 연산을 반복해 성공적으로 원하는 결과를 얻기 위한 절차"로 정의된다. 근본적으로, 반복은 학습을 이끄는 절차다. 반복은 우리에게 학습하고, 반응하고, 학습한 내용을 조정하게 만든다. 반복과 피드백을 수집하는 밀접히 관련된 활동이 없다면, 계속적으로 학습할 기회도 없다. 근본적으로, 반복은 우리에게 실수하고 이를 바로잡는 활동을 거치면서 발전하고 개선하게 만든다. 이런 정의는 또한 반복이 점진적으로 몇몇 목표에 접근하게 만든다는 사실을 일깨운다. 반복의 진정한 위력은 우리가 정말로 우리 목표에 어떻게 접근할지 모를 때조차도 반복하게 만든다는 데 있다.

두 가지 생각을 하게 만듭니다. 하나는 생각이라기보다는 마지막 구절의 강렬한 느낌입니다.

반복의 진정한 위력은 우리가 정말로 우리 목표에 어떻게 접근할지 모를 때조차도 반복하게 만든다는 데 있다.

그랬더니 연이어서 <도전하고 실패해도 편안하게 성장하기>에 인용했던 영화 인디아나 존스의 한 장면이 떠오릅니다. 전설을 믿고 낭떠러지에 발을 내딛는 장면이죠. 모르는 것을 배우기 위해서는 어쨌든 한 발을 내디뎌야 합니다.


반복의 진화: Unified Process와 머신러닝의 반복

인용한 구절에서 떠오른 두 번째 생각은 개발을 막 배울 때부터 함께 배운 Unified Process가 나도 모르게 제 안에서 작동하고 있었구나 싶은 마음이었습니다. 이제 막 열정적으로 개발을 배우던 시절 소프트웨어 공학 책은 훌륭한 스승이 되어 저에게 무의식적으로 작동하는 지식의 기초가 되어 준 듯합니다.

하지만, 90년대 말의 반복과 2025년의 반복을 다르게 해석해야겠죠?

반복은 모든 탐구 학습의 핵심이며, 모든 실제 지식 습득의 기본이다.

인용한 문구에서 '실제 지식'은 강렬한 표현입니다. 상상하던 앱이 실제로 어떻게 쓰일지 호기심을 가지고 배포한 후에 그 결과를 확인한 뒤에 얻는 복잡 미묘한 느낌과 타인들의 반응 그리고 스스로의 성찰을 아우르는 피드백이 있을 때, '실제 지식'이라고 할 수 있습니다.


반복적인 작업의 복잡 미묘한 장점과 계획이라는 유혹

사용자 가치는 지극히 주관적입니다.

각 변경사항은 릴리스가 가능하기 때문에 완료되므로 '완료'를 합리적으로 측정하는 유일한 척도는 사용자에게 가치를 제공하는 것이다. 이는 매우 주관적인 기준이다.

그렇기 때문에 섣부른 예측보다는 릴리스를 통한 피드백 수렴이 잦을수록 좋다고 생각합니다. 더불어 반복을 통해 릴리스를 하는 일이 방어적인 설계 전략이 될 수 있죠. 무엇에 대해 방어적이냐? 바로 변화와 창발성에 대해 여지를 두는 것이죠.

업계 데이터에 따르면, 세계 최고의 소프트웨어 회사들에서 아이디어의 3분의 2는 0이나 음의 가치를 창출한다고 한다. 우리는 사용자가 원하는 바가 무엇인지 추측하는 데 서툴다. 심지어 사용자에게 물어봐도 사용자는 자신이 무엇을 원하는지 모른다. 가장 효과적인 접근 방법은 반복이다. 아이디어 중 일부 아니면 상당수가 잘못될 것이라는 사실을 반아들이며, 최대한 빠르고 저렴하고 효율적으로 시도해 보게 만드는 방식으로 작업한다.

한 번에 릴리스하는 대신에 릴리스를 나누면 반복이 만들어집니다. 앞서 저자가 말한 대로 반복은 학습의 원천이 됩니다. 피드백을 통해 우리는 '실제 지식'을 학습하여 더 나은 계획을 세울 수 있습니다. 또한, 릴리스 안에서도 반복을 나누면 각 반복을 더 단순한 차원에서 소통할 수 있습니다.


인공지능 시대의 소프트웨어 공학 연재

1. 2025년에 읽는 소프트웨어 엔지니어링 책

2. 점진주의: 애자일보다 마음에 드는 표현

3. 모듈성은 소프트웨어 개발의 진정한 기술이다

keyword
이전 03화모듈성은 소프트웨어 개발의 진정한 기술이다