실용주의 프로그래머 Topic 46

Topic 46 불가능한 퍼즐 풀기

데이비드 토머스, 앤드류 헌트

Alt text

느낌표 ! (인상 깊은 문장 | 문맥)

생각의 틀을 벗어나지 말고, 틀을 찾아라.

p.364

이러한 조언은 사람마다 받아들이는 생각이 다를 것 같다. 필자에게는 생각보다 정답은 틀 안에 있다. 즉 너무 어렵게 풀려고하지 말라고 차근차근 풀어나가라는 의미로 받아들였다.

풀리지 않는 문제와 마주쳤다면 생각해 볼 수 있는 모든 해결 경로 후보를 눈 앞에 나열해 보라. 아무리 쓸모없고 바보 같아 보이는 경로라도 절대 버리지 말라. 이제 목록을 하나씩 점검하면서 왜 그 경로를 따라갈 수 없는지 설명해보라. 정말 확신하는가? 증명할 수 있는가?

p.364

어려운 문제일수록 가능한 여러 시나리오를 쓰고 가능성대로 나열한 후 확인해나가는 것이 중요하다. 필자는 어디서 문제가 생겼는지 확인하기 위해 가지치기를 많이 사용한다. 하나씩 문제가 아닌 것을 확인하며 그 밑에 있는 문제들은 지운다.

이러한 배경에는 생각대로 막 하다보면 시간은 후다닥 가는데 결국 내가 뭘 했고 어떤것을 확인해야하는지 산으로 가있는 경우가 많다. 그러면 결국 다시 처음으로 돌아와 기본부터 확인하며 진행해야하기에 시간과 체력 모두 소모하게 된다.

자신만의 방법에서 빠져나오라

어떤 때는 문제가 생각보다 훨씬 어려워 보이기도 한다. 아마 접근 방법을 잘못 선택했다는 느낌이 들 것이다. 더 쉽게 문제를 푸는 방법이 있지 않을까? 바로 이 ‘불가능’한 문제 때문에 일정이 늦어지고 있거나, 심지어 시스템을 작동하게 만드는 일 자체를 포기하고 있을지도 모르겠다.

p.365

이것은 어제의 일인데 개인적으로 개발 DB 를 만들기 위해 GCP Mysql 을 만들었다. 이를 connection 하려고 보니 GCP 에서는 proxy 를 통해 연결하도록 안내하고 있다. 그런데 서버는 docker 로 배포하려하는데 GCP proxy 를 이용하기 위해서 이것저것 삽질을 막 했다. 그러다 문득 그냥 IP 를 제한하거나 모든 IP 에서 접근하게 하면 안될까? 어차피 개인 서버인데? 라는 생각이 들어 단순히 network 설정만 수정해서 docker 수정 없이 연결하였다.

분명 proxy 를 통한 방법도 있지만 이 문제가 쉽게 되면 좋겠지만 그러지 않았기에 꽤 이것저것 해보며 시간을 보냈다. 이처럼 문제를 푸는 방식을 여러 방법으로 시도해보는 것이 좋다.

물론 이런 시간을 통해 배우고 경험한게 있는것 또한 분명하다.

여러분이 일부러 딴짓을 하고 있을 때 갑자기 여러분의 머릿속에 답이 떠오르는 일이 얼마나 자주 일어나는지 놀라게 될 것이다.

p.365

개발자라면 이런 경험이 종종 있을 것 같다. 샤워를 하면서 퇴근하는 지하철에서 또는 자기 전에 등 해결되지 않는 문제가 머릿속에 남아있어 자꾸 생각이 드는 것이다. 개인적으로는 알고리즘 성능 문제로 패스가 안되었을 때, 개발을 하다가 특정 상황을 커버를 못해 전체적인 구조를 변경해야해서 아득할 때, 돌아가기는 하나 코드가 난잡해서 매우 마음에 들지 않을 때 등 경험이 있다.

분명 팍 하는 순간에 정답이 나오지만 이를 위해서 지루한 엉덩이 싸움을 해야한다.

행운은 준비된 사람에게 찾아온다.

“유레카!”의 순간을 경험하려면 여러분 뇌의 무의식 영역에 원료를 많이 주입해야 한다. 문제 해결에 필요한 원료는 바로 해답에 도움이 될 수 있는 경험이다.

p.366

경험이 많을수록 지혜롭게 문제를 해결해서 시간을 아낄 수 있는데 그 경험은 또 지루한 엉덩이 싸움을 통해 얻을 수 있다고 생각이 든다. 그래서 개인적으로 생각하는 것은 일단 앉아있자라고 생각을 하며 산다. 그러면 여러 좋은 일이건 힘든 일이건 겪으며 경험이 많은 사람이 될 것이기 때문이다.

Topic 46 느낌

Topic 46 에서는 어려운 문제를 풀 때는 틀 안에서 생각하고 자신의 생각에서 벗어나서 생각도 해보라고 권하고 있다. 결국 문제의 연속을 풀어나가는 것이 개발이기 때문에 매우 중요한 스킬이라고 생각한다.


데이터 블로그 챌린지 Day 4

부지중에 지은 죄

데이터 블로그 챌린지 Day 5

운동을 하지 말아야 하는 이유

NCloud LB & SourcePipeline 구축하기
tech collection 서비스 성능 개선하기
Selenium 복권 구매 자동화 만들어보기
디자인 패턴
책 리뷰
블로그 챌린지