버그에 대해 생각하는 것이 때때로 문제 해결에 도움이되지 않는 이유는 무엇입니까? [닫은]


12

어제 오후에 버그를 고치려고 많은 시간을 보냈는데, 사소한 생각이었습니다. 나는 서클에서 돌아 다니면서 무엇이 잘못되었는지에 대한 단서가 없었습니다. 코드의 큰 부분을 다시 작성합니다. SO 확인. 여전히 기쁨은 없습니다.

그래서 나는 집에 갔고, 개를 걸었고, 작은 TV를 보았고, 잠들기 직전에 빙고는 내가 저지른 명백한 실수를 깨달았다. 오늘 아침에 고치는 데 약 10 분이 걸렸습니다.

집에있는 동안 문제에 대해 적극적으로 생각하지 않았습니다. 그러나 상황에서 벗어나면 해결할 수있었습니다.

처음이 아니며, 프로그래밍 문제를 해결하는 것이 일반적인 방법이라는 것을 알고 있습니다. 나는 사람들이 답을 꿈꾸는 것을 들었습니다.

왜 이것이 작동합니까?

더 중요한 것은 문제에서 휴식을 취해야하는시기, 휴식 시간은 얼마나되는지, 그리고 문제를 떠나는 시간이 얼마나 효과적인 지에 대한 좋은 지침이 있습니까?

이 잠재 의식 처리를 최적화하는 방법 (또는 진행중인 작업)을 해결하려고한다고 가정합니다.


3
나는 이것이 프로그래밍과 관련이 있는지 확실하지 않습니다. 많은 분야 에서이 같은 질문을 할 수 있습니다.
ozz

1
인지 과학 스택 교환 만 베타 버전이라면!
Matt Ellen

1
사고는 신비로운 과정이기 때문입니다.
davidk01


4
이 문제는 일반적인 문제 해결의 사고 과정에 관한 것이며 주제는 프로그래밍이나 기술 분야에만 국한되지 않기 때문에 주제가 아닌 것 같습니다.

답변:


22

문제에 너무 집중하면 한 발짝 물러 설 수 없습니다. 코드를 디버깅 할 때 동일한 테스트를 불필요하게 반복하는 경향이 있습니다.

더 많이 시도할수록 더 많이 실패하고 좌절하게됩니다. 스트레스와 좌절이 증가하면 상황이 악화됩니다.

그렇기 때문에 동료가 우연히보고 어깨 너머로보고 몇 초 안에 문제 (및 해결책)를 지적 할 수 있습니다.

그들은 당신 과 같은 정신 상태에 있지 않습니다 .

나는 종종 특정 시간을 보지 말고 몇 시간 후에 차분한 마음으로 돌아옵니다.

그러나 가장 강력한 기술은 단지 도움을 요청하는 것 입니다.


9
도움을 요청할 때 +1 다른 사람들이 이해할 수있는 용어로 문제를 정의하는 경향이 있으므로 그 과정에서 더 많은 이해를 얻을 수 있습니다. Q & A 사이트 또는 포럼에 주제를 게시 할 때와 같이 즉시 다음에 진행하는 방법에 대한 아이디어를 얻습니다.
Aditya P

1
@AdityaGameProgrammer의 경우 +1 및 +1 : 문제를 설명하는 것은 상상의 사람이나 행동 인물 또는 식물 또는 다른 사람에게 설명하는 것조차도 도움이되므로 도움이됩니다. .
Matthew Frederick

6

일정 기간 동안 문제를 해결해왔다면 개발 과정에서 설정 한 패턴을 따라야합니다. 다시 말해, 설정 한 멘탈 프레임 이외의 항목에 대해 일시적인 "검은 점"을 개발합니다.

잠시 동안 문제를 해결하면이 필터를 제거하는 데 도움이되며 필터를 제자리에 두지 않고도 여러 가지 문제를 해결할 수 있습니다.

이런 경우에 종종 나에게 도움이 된 것은 다른 사람에게 왜 그것이 효과가 있는지 설명하지 않는 것입니다.

개발 작업 중에 정신 필터를 개발하는 것 외에도, 뇌는 대규모 멀티 스레드이며 종종 모호하지 않은 프로세스의 일부로 문제를 계속 극복합니다. 때로는 오후에 문제에 대해 할 수있는 모든 것을 배우고 문제를 해결하기 전에 하루나 이틀 동안 문제를 놓아서 사용합니다.


1
사무실 밖에서 책상 위에 테디 베어를 두는 교수에 대해 읽었습니다. 학생들이 그에게 도움을 요청하기 전에 먼저 곰에게 문제를 설명해야했습니다.
Michael K

Jeff Atwood가 자신의 블로그 ( blog.codinghorror.com/rubber-duck-problem-solving) 에서 작성한 것과 매우 유사합니다 . 나는 실제로 이것이 도움을 줄 수 있다고 생각합니다. SO에 대한 반 질문을 한 다음 몇 번이나 답을 깨달았습니까? 나는 꽤 많은 시간을 보냈다 :)
Rémi

5

나는 심리학자는 아니지만 하나의 문제에 너무 집중하면 (버그 찾기) 더 큰 시스템에 대한 견해를 잃는 경향이 있습니다. 그러나 종종 대답은 현재 찾고있는 곳의 "아래"가 아니라 다른 곳에서 볼 수 있다는 것입니다. 그 시점에서는 볼 수 없습니다.

따라서 실제로 필요한 것은 트렌치에서 벗어나 전체 시스템을보다 일반적인 관점에서 다시보기 시작하는 것입니다. "이것이 바로 여기에 있다는 것을 알고 있습니다. 아직 찾지 못했습니다"라는 생각을 무시하는 경향이 있습니다. 그것은 항상 우리 모두에게 일어난다. 나는 심지어 내가 "그렇게 내가 좋은 디버깅 기술을 사용하여 버그를 찾을 수 없습니다 알고있는 지점에 도착 여전히 옳은 일을하고 휴식을하지 않는 다른 곳으로"- 인간의 뇌는 이러한이다 재미있는 것.

그러나 화장실에 가거나 동료와 이야기하거나 개를 걷든 상관없이 실제로는 그렇게 많은 일을하지 않습니다. 나는 근처 상점에 가서 사탕을 사러 갔을 때 용액에 재킷을 넣 자마자 거의 항상 머리에 튀어 나왔다. 프로그래밍하는 동안 많은 양의 물을 마시는 것이 좋습니다. 그것은 당신이 매번 휴식을 취한 다음 화장실과 zap을 방문하도록 강요합니다. 왜냐하면 당신이 참호에서 벗어나야하는 이유가 있습니다.


4

개인적 경험과 내가 훈련 한 주니어 개발자가 목격 한 바에 따르면, 우리는 모두 가정과 기대에 관한 문제에 접근합니다. 함수 x는 태스크 z를 수행하여 결과 z를 생성한다고 가정합니다. 항상 그래야하는데 왜 그렇게 바뀌어야합니까? 우리가 문제에 점점 더 집중할수록, 우리는 기본 사항을 다루었 고 문제는 원래 문제를 해결할 때보 다 훨씬 더 복잡해야한다고 가정합니다. 우리가 진실이라고 생각하지만 실제로 검증되지 않은 것으로 보이는 것들에 피로를 가하고, 당신은 나중에 완전한 "WTF"순간을 맞이하게됩니다.

나중에 가정을 버리고 되돌릴 수있는 문제에서 벗어나게됩니다. 또한 우리는 일반적으로 방금 해결 한 다른 문제로 인해 문제를 해결합니다. 나는 A를 고쳤지만 이제는 B를 고쳤습니다. 이제는 B를 고쳐야합니다. 그래서 우리는 이미 우리가 여행하고있는 추진력과 방향을 가지고 있습니다. 문제 B를 해결하는 것으로 되돌아 가면 문제 A는 더 이상 새로운 가능성으로 막힐 가능성이 없습니다. 선입견없이 문제를 해결할 수 있으며, 이는 새로운 사고의 길과 문제를 바라 보는 새로운 각도를 열어줍니다.

이제, 주니어가 저에게 도움을 요청할 때마다, 그들이 대답해야 할 첫 번째 질문은 "당신의 가정은 무엇입니까?"입니다. 그 문제에 대답하려고하더라도 정신 장애에서 벗어날 수 있습니다.


3

근육처럼 근육이 피곤해 졌어요 휴식을 취하면 휴식을 취하고 산소 / 연료 등을 보충 한 후 다시 작업을 시작할 수 있습니다.

산책을하거나 운동을하는 것은 실제로 무언가에 갇혀있을 때 좋은 접근 방법입니다. "유레카"순간이 없어도 종종 문제를 해결하기 위해 되돌아 와서 새로운 접근 방식을 취할 수 있습니다.


3

아이디어와 문제에 대한 인큐베이션 시간 이라고합니다 .

하위 양심은 여전히 ​​비선형 접근 방식으로 인식에서 문제를 계속 처리합니다. 낮잠을 자기 전에 새로운 것을 배울 때 일어나는 것과 매우 유사합니다. 당신의 마음은 정보를보다 유연하게 접근 할 수있는 방법으로 '조각 모음'할 시간이 있습니다.

또한 버그에 걸리는 것을 극복하는 데 도움이되는 또 다른 유용한 팁을 고백 디버그 라고 합니다. 여기서 문제를 모르는 다른 사람에게 접근하여 문제를 설명하기 시작합니다. 나는 종종 문제를 큰 소리로 말함으로써 해결책이 떠오른다는 것을 안다.

이 정신 링크를 확인하십시오 : 창의성 팁문제 낮잠


2

"우리는 모두에 의해 찔 얻을이 상승 때때로. 슬프게도 우리가 때 집중 상의 너무 많은 고통을 우리가 잊지 정보] 아름다움 장미의."


2

샤워 시간 동안 경력에서 몇 가지 중요한 버그를 수정했습니다.

나는 심리학자는 아니지만 차이점은 다음과 같습니다.

  • 컴퓨터 앞에 앉아 소스 코드, 중단 점, printf출력을 볼 수 있습니다 ...

  • 화장실에서 코드가 제 마음에 달려 있습니다.


1

나는 같은 현상을 겪었고 그 문제를 시간이 지남에 따라 다른 관점에서 문제를 바라 보는 데 기인한다고 생각했다.

그러나 내가 찾은 또 다른 요령은 대부분 같은 일을한다는 것입니다. 동료에게 코드를 설명하십시오. 그것은을 위해 아니다 그들 그들이 할 수 있지만, 버그를 잡으려고; 모든 관련 레벨에서 코드의 논리를 뒤로 물러서서 설명 하도록 강요 합니다 . 나는 (공평한 경고-샘플 크기가 제한되어 있지만)이 무의식적으로 동료에게 치료를 피하는 버그를 무의식적으로 해결할 수 없었습니다.


1

나는 최근 에이 사이트의 누군가의 제안에 의해 포모 도로 기술을 사용 하고 있으며 , 그것이 시간과 휴식 시간에 관한 귀하의 질문에 대한 좋은 답변을 제공한다고 생각합니다. 기본적으로 25 분 동안 문제에 집중 한 다음 3-5 분의 짧은 휴식을 취한 다음 4주기마다 더 긴 휴식을 취합니다. 그들은 그것을 뒷받침하기 위해 몇 가지 연구를 인용했지만 일화 적으로 나는 그 간격이 매우 효과적이라는 것을 알았습니다.

나는 사람들이 15 분 정도 소요된다고 주장하는 25 분의 스팬이 내가“지역에”들어 가지 못하게 할 것이라고 생각했다. 반대로,이 타이밍으로 나는 거의 즉시 영역에 도착합니다. 25 분 동안 만 유지해야한다는 사실을 알면 산만 해지지 않기가 훨씬 쉽기 때문이라고 생각합니다. 또한 25 분 동안 외부 중단을 연기하는 것이 더 쉽습니다. 점심 전에 4 시간 동안 일을 끝내려고 할 때 이전에는 훨씬 어려웠습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.