brunch

추측보다는 실험: 현실에 입각한 경험주의

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

by 안영회 습작

<반복은 모든 탐구의 핵심이자 실제 지식 습득의 기본>에 이어서 <모던 소프트웨어 엔지니어링>의 7장 <경험주의: 현실을 자각하자>와 8장 <실험주의: 과학적 사고와 실천>에서 밑줄 친 내용을 토대로 생각을 정리한 글입니다.


꿈은 높게, 그러나 발은 땅에

소프트웨어를 개발하는 내내 가졌던 현장과 릴리스를 강조하던 제 믿음을 소환하는 문구를 만납니다.

과학 철학에서 경험주의empiricism는 "특히 실험에서 발견한 증거를 강조하는 것"으로 정의된다.

현장은 상상과는 다른 새로운 배움을 줍니다. 호기심을 장착하고 맞이한다면 커다란 배움의 기회를 줍니다. 물론, 현실적으로는 평가에 대한 두려움이나 부정적 피드백에 대한 불안 따위를 이겨내야 할 수도 있습니다. 아무튼 릴리스는 이를 만날 수 있게 해 주는 전제 조건입니다.


사고는 깊이 해야 하고, 다양한 의견을 숙고해야 합니다. 신중한 계획도 유효합니다. 하지만, 적어도 소프트웨어 개발에 있어서는 이들 모두는 한계가 있습니다.

모든 소프트웨어 시스템은 아직까지는 개발자가 내린 최선의 추측일 뿐이다. 소프트웨어를 상용 환경에 배포할 때 이는 학습의 기회이며, 또 그래야만 한다.

'학습의 기회'라는 문구를 보는데 과거에 인용했던 두 개의 메시지가 떠오릅니다. 하나는 머뭇거리는 자신에게 '일단 부딪혀 보자'라고 격려하기 위해 활용하던 타이슨의 명언입니다. 두 번째는 정주영 회장 인터뷰에 있던 내용인데, 남들이 정하는 성공과 실패의 기준과 자신이 정하는 성공과 실패의 기준이 분명 다르다는 점을 배웠습니다.


실험과 경험은 분리해야 한다

'실험과 경험 분리'라는 문구를 볼 때, 제가 프로젝트를 수행할 때도 같은 기준이 작동했기 때문에 반가웠습니다.

과학은 작동한다! 가설을 세우자. 이를 증명하거나 반증하는 방법을 찾아내자. 실험을 수행하자. 결과를 관찰하고 가설과 일치하는지 확인하자. 반복하자! 여기서 경험주의자가 되는 것은 보기보다 더 복잡하고 더 많은 훈련이 필요하다는 교훈을 얻는다. 대런이 발견한 문제와 실패한 테스트의 상관관계를 분석했을 때 우리는 경험적으로 현실이 우리에게 보내는 메시지에 반응하고 있었다고 생각할 수 있다.

다음 내용을 읽을 때는 '아~' 하고 속으로 신음소리를 냈습니다.

하지만 우리는 그렇지 않았다. 성급하게 결론을 내리고 무엇이 잘못되었는지에 대해 우리가 선호하는 추측에 맞게 사실을 왜곡하고 있었다. 그 시점에서 우리가 알고 있었던 것'을 좀 더 조직적으로 검토했다면, 메시징 변경사항이 일주일 내내 동작했었고 그 이후로 변경되지 않았기 때문에 이것이 '메시징 문제'가 아니라는 사실이 완전히 명백해졌을 것이다.

비단 개발 뿐 아니라 사업하는 중에도 똑같은 실수를 저질렀다는 점을 깨달았기 때문이죠. 더불어 페북에서 읽었던 '탐색(Exploration)과 활용(Exploitation)의 균형'이라는 두 가지 축이 떠오릅니다.


추측보다는 실험: 현실에 입각한 경험주의

'어떻게 틀렸는지' 알아낸다는 발상이 신박하게 느껴집니다.

가장 좋은 시작 방법은 자신이 알고 있다고 생각하는 것이 틀렸을 가능성이 있다고 가정하고 나서, '어떻게 틀렸는지'를 알아내는 방법을 찾아내는 것이다.

이어서 8장의 실험주의 내용을 보겠습니다.

실험experimentation은 "가설을 지지, 반박 또는 검증하기 위해 수행되는 절차“로 정의된다. "실험은 특정 요인을 조작했을 때 어떤 결과가 발생하는지 보여줌으로써 원인과 결과에 대한 통찰력을 제공한다.“

저자는 다음 4가지 특징을 '실험주의자가 되는' 접근 방식으로 정의합니다.

피드백

가설

측정

변수 통제

그리고, 이렇게 강조하죠. 앞서 신박하다고 느낀 후 찾아온 모호함이 여기서 해소됩니다.

추측이나 가설은 출발점이다. <중략> 여러분의 추측이 실험과 일치하지 않는다면 (여러분의 추측이) 틀린 것이다! 이것이 바로 핵심이다! 우리가 하는 일은 추측이 아니라 공학이라고 주장할 수 있으려면 바로 이곳에 도달할 필요가 있다

그러고 나서 '학습이 전부'라고 말합니다. 왜 그럴까요? 잣대를 만드는 과정이기 때문이 아닐까요? 한편, 장의 후반부에 '테스트는 새로운 지식을 끌어내는 원천'이라는 제목의 다발말이 있습니다. 어떤 의미일까요? 테스트는 그 자체로 가설 검증이자 시행착오로 학습하는 방법이며 동시에 하나의 척도가 되기 때문이 아닐까 싶습니다. 한편, 'TDD에서 배우는 자동화 테스트'를 제목으로 하는 구절도 있는데요. TDD는 이러한 면들을 명확하게 보여주는 예시이자 방법론이라고 할 수 있습니다.


책에 '질주 본능'에 대한 별도 글이 있습니다. '질주 본능'이란 말을 보자 책 내용과 무관하게 다른 사람 말을 들을 때, 참지 못하고 끼어들려고 하는 제 자신의 본능을 떠올립니다. 책을 읽던 여운이 남아 있는 상황에서 영어 공부 하려고 보는 유튜브 영상에서 '바로 그' 질주 본능을 떠올리게 하는 관용 표현들이 나와서 이를 덧붙입니다. ;)

말을 내뱉고 마는 질주 본능은 많은 사람들이 겪는 문제인 모양입니다.


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

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

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

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

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

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