brunch

You can make anything
by writing

C.S.Lewis

by 고드름웨어하우스 Oct 06. 2020

문제를 찾아 해결하라.

도대체 문제가 뭐야?

우리는 살아가면서 여러 가지 사건-사고들을 경험한다. 때로는 나의 의지와 상관없이 불쑥 일어나는 일들이 꽤 많다. 지하철역에서 반대로 지나치는 지인을 만나기도 하고, 해외에 나가서 공항에 마중 나온 동료의 친구가 대학 동기의 남편일 수도 있다.  


우리가 학교에서 배우는 학습 방법 중에서 객관식 또는 주관식으로 주어진 문제를 풀고 답을 찾는 방식은 매우 익숙하다. 문학 작품의 일부를 지문으로 읽고 작가의 의도를 선택하기도 한다. 의좋은 형제가 벼농사를 해서 수확한 쌀을 똑같이 나눴다가 밤사이에 몰래 몇 가마니를 옮겼는지 분수로 계산하는 문제를 풀기도 한다.


10년 전 어느 UX 콘퍼런스에 참석해서 지인의 발표를 들었다. 강연 중에 청중에게 '음주운전을 하고 집에 가다가 사고가 나서 다친 어떤 사람의 이야기'를 들려주고 이런 질문을 던졌었다. 


"그래서 이 사람은 도대체 문제가 뭘까요?"


어떤 사람은 음주운전을 했으니 문제가 있다고 한다. 또 다른 사람은 음주운전을 하다가 사고가 났으니까 문제다. 그리고 또 다른 사람은 사고가 나서 다친 게 문제라고 할 수 있다. 그렇지만 질문을 던졌던 지인은 또 다른 의미를 던졌다. 


"이 사람은 안전하게 집에 가지 않았던 것이 문제입니다. 안전하게 집에 가는 문제에 대해 잘못된 선택을 했기 때문에 음주 운전을 했고, 그래서 결과적으로 사고가 나서 다쳤던 것입니다."




소프트웨어로 문제를 해결하는 것은 주어진 지문을 읽고 답을 찾거나 수학 문제를 계산하는 것과 비슷하다. 요구 사항을 만족하는 소프트웨어를 만드는 것도 문제를 찾아서 해결하는 것이다. 그렇지만 같은 상황에서도, 같은 요구 사항에 대해서 개발자들은 문제를 다르게 정의하기도 한다. 그래서 논리적인 추론을 통해서 내린 결론과 문제를 해결하는 방법이 전혀 다른 방법이 되기도 한다.


우리는 각자의 삶에서 다양한 배경을 갖고 있고, 학창 시절을 통해서 다양한 경험을 하고, 여러 사람을 만나서 영향을 받는다. 비록 학교 교육에서는 다양성보다는 획일성을 강조하고 있지만 각자의 개성을 완벽하게 감추기는 어렵다. 


지금 이 순간, 여러분 자신에게는 어떤 문제가 있나요? 


우리는 늘 답을 찾고 있다. 어딘가 새로운 곳을 찾아가기 위해서 지도를 펼치고 길을 찾는다. 때로는 퇴근길에 놓고 온 선물을 챙기러 다시 왔던 길을 되돌아 가기도 한다. 하지만 아무런 문제라고 생각하지 않는다. 그냥 사소한 실수일 뿐이니까.


소프트웨어 학습 과정에서 문제는 무엇인가? 


학습 과정에서 가장 먼저 만나는 문제는 무엇을 학습하고 해야 할지 혹은 하고 있는지 인지하지 못하는 것이다. 내가 찾고 있는 것이 어떤 문제에 대한 답인지 인지하지 못하면 전혀 다른 문제에 대한 답만 보게 된다. 문제를 정확하게 파악해야 제대로 된 답을 찾을 수 있다.


문제 해결을 위해서 적절한 답을 찾으려면 필요한 지식 조각을 찾아서 학습하고 연결해야 한다. 소프트웨어는 문제 해결을 도와주는 도구가 된다. 소프트웨어 그 자체가 답인 경우는 매우 드물다. 그럼에도 불구하고 구글에서 검색해서 나오는 코드 조각이 문제 해결을 위한 답이라고 가정한다. 그게 내가 찾는 문제의 답이 맞을까? 


요구 사항을 만족하는 기능을 구현하기 위해 필요한 지식 학습과 적합한 방식으로 구현하고, 문제가 해결되는지 도전하고, 결과를 확인해서 실패하면, 문제에 대한 가정이나 해결 방법을 바꿔서 재도전 흐름을 반복 한다. 바로 전형적으로 엔지니어들이 일하는 방식이고, 문제 해결하는 방식이다. 


상위 1% 똘똘이 스머프들은 어떤 문제더라도 쉽게 해결 방향을 찾는 편이다. 하지만 가가멜이나 파파 스머프는 전혀 다른 방법으로 문제를 정의한다. 그래서 다른 방법을 학습하고, 적절한 방법으로 해결한다. 특히 가가멜은 그렇게도 실패하지만 늘 새로운 방식으로 또 다른 도전을 반복한다. 엔지니어가 됐어야 하는 건데...




문제를 정의하고, 그 문제를 해결하는 것이 단지 소프트웨어 개발자들만의 일상이 아니다. 우리 모두의 일상이다. 어떤 분야에서든지 드러난 현상이나 피상적인 요구사항보다 더 명확하고 구체적이고 본질적인 문제를 찾아야 하는 것은 동일하다. 


그중에서도 소프트웨어 개발자는 유연한 환경에서 빨리 실패하고, 더 빨리 구현해서, 더 빨리 실패할 수 있다. 그렇기 때문에 빠르게 재도전할 수 있다. 개발 과정에서 그 흐름을 가장 함축적으로 경험할 수 있는 방법은 바로 "디버깅"이다. 소프트웨어 개발자는 디버깅을 반복하면서 스스로 가정한 사항들을 깨고 다시 도전한다. 소프트웨어 개발 과정 자체가 문제 해결 과정인 것이다. 


이제부터라도 문제를 제대로 찾아보자

그래야 답을 찾을 수 있으니까

그러기 위해서는 질문을 던져야 한다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari