문제 해결 능력을 어떻게 향상시킬 수 있습니까?


50

"실제 프로그래머는 실제 문제를 처리하는 방법을 알고 있습니다." 그러나 그들은이 능력을 어떻게 배웠는지 또는 어디에 있는지를 잊습니다. 그것은 학교에서 가르치지 않습니다.

복잡한 프로그래밍 문제를 해결하는 능력을 향상 시키려면 어떻게해야합니까? 어떤 전략이 효과가 있었습니까? 알고리즘이나 디자인 패턴과 같이 집중해야 할 특정 영역이 있습니까?


3
에서 언급 한 두 유용한 책 전체 코드는 : 있습니다 개념 Blockbusting 제임스 아담스, 그리고 측면은 생각 에드워드 드 보노에 의해.
mctylr

1
아! 몇 가지 답변이있을 때 여기에 다시 게시하는 것을 잊었습니다.
Mark C

답변:


25

작동하지 않을 수도있는 몇 가지 기술 :

  • 디자인 패턴과 같은 일반적인 문제에 대한 기존 솔루션을 살펴보십시오. 어쩌면 적어도 부분적으로 문제와 유사한 비슷한 것을 찾을 수 있습니다. 검색하다.
  • 문제가 이미 해결 된 것처럼 행동하고 해결을 위해 해결해야 할 사항을 추적하십시오. 예를 들어, 클래스에 대한 API를 디자인하는 대신 원하는대로 메소드 호출과 함께 클래스를 사용하는 코드를 작성한 다음 해당 API를 구현하십시오.
  • 인터넷 서핑이나 솔리테어 연주 등 영감을받을 때까지 기다립니다.
  • 당신이 가장 좋아하는 사람을 생각하고 문제 해결 기술에 감동을주는 척하십시오. 매우 인상적인 솔루션은 무엇입니까?
  • 본질적으로 모순되거나 상충되는 요구 사항이 있는지 문제점을 점검하고, 그것이 무엇인지, 타협 할 수있는 내용을 정확하게 기술하십시오. 그러한 충돌이 존재하지만 잘 모르는 경우, 모든 요구 사항을 완벽하게 충족시킬 수 없기 때문에 가능한 솔루션을 하나씩 폐기하는 경향이 있습니다.
  • 가능한 해결책이 있지만 "더러운"느낌 (복사-붙여 넣기, 전역 변수, 스파게티 코드 등)이 있다면 어쨌든 사용하고 나중에 더 나아지게하십시오.

마지막 요점은 훌륭합니다. 때로는 문제를 해결하기 위해 대부분의 경우 문제를 해결 한 다음 개선해야 할 부분을 파악하는 것입니다.
JeffO

4
그러나 "나중에 고칠 것"의 수는 "적어도 수정했습니다"로 표시되는 숫자는 (적어도 내 경험상) 부분적으로는 적습니다.
Gareth

3
Gareth : 맞습니다. 그러나 아이디어는 다음 주, 다음 달 또는 언제라도 더 나아질 수 있도록하는 것이 아니라 즉시 작동하게하는 것입니다. 딱딱한 견과류를 깨는 방법으로 사용됩니다.
user281377

3
나는 영감이 일어나기를 기다리는 방법으로 인터넷을 서핑하지 않습니다. 영감을 얻으려면 유휴 뇌 사이클이 필요하며 인터넷 서핑은 유휴 뇌 사이클을 낭비하는 방법입니다. 대신 쇼핑을하거나 산책을하거나 자전거를 타거나 아파트를 청소하십시오. 뇌의 힘이 많이 들지 않는 것을하십시오. 그러한 상황에서 영감이 더 빨리 올 것입니다.
Ken Bloom

1
eek : # 4가 역설적이지만, 때로는 저에게 효과적이라는 것을 알고 있습니다. 특히 하나 이상의 접근 방식이 가능한 상황에서 문제는 이러한 접근 방식 중 하나를 선택하는 것입니다. # 6은 우리 직업에서 일반적으로하지 않는 것에 너무 제한을받지 않는 것을 의미합니다. 때때로 우리는 "전역 변수 피하기"와 같은 규칙을 내재화하여 그러한 폐기 된 기술을 사용하는 모든 솔루션을 무의식적으로 거부 할 수 있습니다.
user281377

20

필요에 따라 R 모드 또는 L 모드 사고 사용

R- 모드는 우리가 일반적으로 아종과 관련이있는 창의적이고 비언어적 접근 방식입니다. L 모드는 "내부 음성"과 관련된 선형적이고 논리적이며 구두적인 접근 방식입니다.

문제가 다루기 어려운 것처럼 보이면 잘못된 사고 모드를 사용하여 문제를 해결하려고했기 때문일 수 있습니다. 프로그래머의 경우 기본 사고 모드는 L 모드 인 경향이 있으므로 일시적으로 스위치를 끄고 R 모드에 액세스하는 것이 좋습니다.

R 모드 사고에 액세스하는 방법

여러 가지 방법이 있지만 Poincare 방법 (유명한 수학자의 이름을 따서)을 사용해보십시오.

문제에 대해 알고있는 모든 것을 기록하십시오. 모든 쉬운면을 즉시 해결하십시오 (있는 경우). 남아있는 "어려운 문제"목록에서 하나의 항목을 선택한 다음 방해받지 않고 산만하게 걷습니다.

보행 중에 문제를 분석하려고 시도하지 말고 마음을 방황하고 문제와 관련이있을 수있는 흥미로운 이미지 나 감각을 관찰하십시오. 그들이 합체하게하십시오. 영감을 받으면 즉시 걷기를 멈추고 얻은 통찰력을 적으십시오.

모든 문제가 통찰력을 가질 때까지 헹구고 반복하십시오. 그런 다음 통찰력을 탐구하십시오.

도서 추천

또한 실용적 사고와 학습을 읽으면 더 나은 문제 해결자가 될 수 있습니다. (최근 에이 책을 많이 참조하는 것 같습니다 ...)


4
실용적인 사고와 학습은 훌륭했습니다
Brad Cupit

참조 : drawright.com/theory.htm(R- 모드 및 L- 모드 란)
mctylr

17

다른 사람에게 물어봐...

심각하지 않습니다. 가장 큰 자원은 옆에 앉아있는 사람 일 수 있습니다. 그들에게 문제에 대한 답을 요구하지 말고, 옆에 앉아서 문제를 설명하도록하십시오.

구두로 말하면 종종 문제가 해결됩니다.

때때로 다른 사람이 질문을하거나 세부 사항을 지적하여 플러드 게이트를 잠금 해제 할 수 있습니다.

결국 꼭두각시를 사용하지 않고 머릿속에있는 말을하는 법을 배우고 문제의 핵심 내용을 더 빨리 발견 할 수 있습니다.

그리고 만약 다른 모든 것들이 실패한다면 그들은 당신에게 당신이 생각하지 못했던 기술을 보여줄 수있을 것입니다.


다른 사람들에게 질문하거나 학습 그룹을 구성하는 것은 배우는 훌륭한 방법입니다.
Gary Rowe

나는 나에게서 아이디어를 얻기 위해 똑같이한다. 그리고 이것은 가장 좋은 방법 중 하나이다.
Viswa

이 기술은 고무 더킹로 알려져있다, 공포 코딩에 대한 훌륭한 기사 codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html & 위키는 또한 도움이된다 en.wikipedia.org/wiki/Rubber_duck_debugging
스팻

9

사실 제 대답은 "더 많은 문제 해결"입니다. 그러나 핵심은 바로 문제에 집중하고 포기하지 않는 것입니다. StackOverflow 또는 다른 것에 대한 도움을 요청하지 마십시오. (읽기 StackOverflow는 물론 괜찮습니다!) 거의 작동하는 솔루션을 얻을 때까지 열심히 노력한 다음 목표에 거의 도달하십시오. 만족스러운 솔루션이 될 때까지 계속하십시오.

나를 위해 문제 해결은 두 가지입니다.

  • 문제 해결 전략
  • 지속성과 좌절 허용

포인트 2는 문제에 더 오래 걸리면 생각을 바꾸도록 강요하기 때문에 제 생각에는 정말 중요합니다. 또한 문제 해결에 더 많은 시간을 할애하여 기술을 더욱 향상시킬 수 있습니다. ;-)

그건 그렇고, Edward de Bono를 읽는 것이 좋습니다. 주로 물리학을 공부하면서 문제 해결 기술을 습득했지만 그의 글은 정말 흥미 롭습니다.

글쎄, 내 문제 해결 툴킷은 다음과 같습니다.

  • 무작위로 무언가를 시도하십시오
  • 관심있는 주제 (또는 밀접하게 연결된 주제)에 대한 임의의 기사 / 블로그 / 게시물 읽기
  • 좋은 그림 만들기
  • 문제를 여러 개의 간단한 문제로 나누기
  • 다른 일을하다
  • 어떤 식 으로든 문제와 관련된 Google
  • 문제에 대해 다른 사람과 이야기
  • TODO 목록을 작성하십시오
  • 문제의 영향에 대해 알고있는 내용을 적어보다 쉽게 ​​패턴을 찾을 수 있습니다.

이러한 도구는 대부분 재귀 적으로 적용 할 수 있습니다.

그리고 내 알고리즘은 다음과 같습니다.

  1. 현재 어떤 툴킷 문제 해결 툴킷이 가장 적합합니까?
  2. 문제가 해결되지 않습니까? 1로 계속하십시오. ;-)

1 단계는 어려운 결정이지만, 연습할수록 더 나은 결정을 내립니다.

아, 나는 가장 중요한 성분을 거의 잊어 버렸습니다.

전체 과정에 대해 긍정적으로 생각하십시오. "XYZ가 이제 문제를 해결할 수 있기를 바랍니다."라고 생각하지 마십시오. "XYZ가 작동하지 않으면 YZX가 문제의 원인이 될 수 없다는 것을 알고 ZYX가 작동하는지 확인할 것입니다." 문제를 찾는 과정이 우아하고 유익한 경우 문제 해결은 때때로 재미있을 수 있습니다.


이 페이지에서 누군가가 이미 그것에 대해 쓴 적이 있는지 알아보기 위해 "물리"라는 단어를 검색했습니다. 수학은 다른 하나입니다.
Mark C

문제 해결 능력에 관한 물리학의 가치는 과장하기 어렵다고 생각합니다.
Mark C

긍정적 인 생각에 +1. 당신이 자신을 해결하면 문제 해결 능력이 손상됩니다. 지식을주는 문제를 살펴보십시오.
Gary Rowe

7

문제를 식별하는 기술에 대해서도 연구하십시오. 때때로 문제를 해결하기 전에 문제가 있음을 인식해야합니다. 학교에서는 너무 많은 답변이 필요하고 학생들의 질문이 충분하지 않습니다.

주변에서 문제를 해결하는 사람들을 찾고 문제 해결 방법을 물어보십시오.

틀릴 준비를하십시오. 당신이 그들 자신을 모두 지키면 아무 소용이 없을 것입니다.


"학교에서 +1은 너무 많은 답변이 필요하고 학생들의 질문은 충분하지 않습니다." 이것은 참 사실이며 올바른 질문을하는 법을 배우는 데 시간이 걸립니다 ... 나쁜 질문의 많은 예가있는 모든 곳을 확인하십시오
Rémi

4

소프트웨어 엔지니어를위한 컴퓨터 과학 교육의 주요 이점은 추상화를 작성하고 이해하는 능력입니다. 추상화는 String 클래스 메서드와 같은 일반적인 기능을 더 큰 문제에 집중할 수있는 재사용 가능한 패키지로 묶는 데 사용됩니다.

추상화를 인식하고 만드는 법을 배우십시오 .

그러나 가장 중요한 것은 추상화 는 문제를 더 작고 관리하기 쉬운 덩어리로 나누는 방법을 알려 줍니다 . 과학적 배경과 결합하면 이러한 기술을 결합하여 소음을 줄이고 문제의 핵심에 도달 할 수있는 엔지니어를 만들 수 있습니다.

과학적 방법을 사용하여 문제를 해결하는 방법을 배웁니다 .

찾기 어려운 문제가있는 프로덕션 응용 프로그램의 문제를 해결할 때 때로는 여러 가지 변수를 제거하여 하나를 분리하고 제거하기 위해 비 프로덕션 환경에서 응용 프로그램을 실제로 더 중단시키는 경우가 있습니다.

요약하면, 컴퓨터 과학 학위에 필요한 모든 물리 선택 및 기타 과학 선택을 통해 얻은 과학적 방법은 일련의 자원 봉사자에 대한 위약과 새로운 약물 시험을 시도하는 것처럼 이러한 문제를 해결하는 데 도움이됩니다. 때로는 더 나아지기 위해 무언가를 악화시켜야하는 과학자들처럼 때때로 엔지니어로서 우리도 그렇게해야합니다.

이러한 방식으로 과학적으로 사고하는 것은 일반적으로 과학적 배경에 대한 경험이 있어야합니다. 때때로 문제 해결은 A에서 B까지의 선형 경로로 인식 될 수 없습니다.

한마디로 컴퓨터 과학을 공부하고 다른 과학 분야를 연구하며 기능 프로그래밍을 배우십시오. 이를 통해 과학자처럼 생각하고 상자 밖에서 생각할 수 있습니다.


바로 그거죠. 큰 문제를 작은 문제로 나누십시오.
Bill Michell

3

그것은 당신이 해결하고자하는 문제의 유형에 따라 다르지만, 당신이 이미 잘하지 않는다면 논리적으로 생각하는 법을 배우는 것이 좋습니다.

결국, 당신은 그것을 말하는 것에 대해 나를 미워할 것이지만 연습은 완벽합니다. 나는 좋은 문제 해결사가되는 방법을 알고 어머니의 자궁에서 꺼내지 않았으며 다른 사람은 없었습니다. 스스로 일을하는 방법을 연습하고 배워야합니다. 아직 학교에 있고 프로그래밍 / 컴퓨터 과학 유형 수업이없는 경우 수학 및 과학도 이러한 기술의 발전을 촉진하는 데 매우 좋습니다.


3

나는 당신이 찾고있는 것이 컴퓨터 과학 휴리스틱이라고 생각합니다.

트렌치에서 우리의 99 %가하는 일에 관해서는, 태양 아래 새로운 것이 실제로 없습니다. 따라서 문제를보고 DP 문제로 인식하거나 메모 등으로 혜택을받을 수있는 문제로 인식 할 수 있습니다.

이 지식을 어떻게 얻습니까? 적절한 CS 학위는 시작하기에 좋은 곳입니다 ... 소프트웨어 공학이나 정보 시스템은 아니지만 대부분 학부생들이 "실용적이지 않다"고 불평합니다.

당신은 이것을 스스로 할 수 있지만 어려울 것입니다. 이 두 코스로 시작하겠습니다.

알고리즘 소개

이론적 CS의 훌륭한 아이디어


2

내 답변은 코딩과 관련이 있지만 무엇이든 적용 할 수 있습니다.

  1. 키보드에서 물러나십시오. 산책, 달리기, 커피를 마시면서 동료와 대화
  2. 10 세 이상이 되세요! 나의 경험은 내게 큰 도움이되었습니다.
  3. 이진 절단을 사용하십시오. 문제를 둘로 나누고 문제를 좁히십시오. 반복하십시오.
  4. 셜록 홈즈를 기억하십시오 : 당신이 가능한 것을 제거했을 때, (이상이 있더라도) 답이 남아있는 것은 무엇이든지
  5. 테스트 데이터를 확인하십시오. 실제로 까다로운 문제의 절반 이상이 잘못된 데이터 또는 잘못된 코드 또는 알고리즘으로 인해 발생했습니다.

1

실제로는 내가하는 일을 말할 수 있습니다. 프로그래밍보다 응용 수학에 더 관심이 있지만 컴퓨팅에 적용되는 응용 수학은 일종의 프로그래밍입니다. 주변에 문제와 해결책이 있습니다. 알려진 솔루션 또는 기존 코드 라이브러리에 연결하기 전 (또는 때때로, 내 작업에 적시에 솔루션이 필요한 경우), "나에게 이것이 심각한 문제라면-즉, 통조림 솔루션, 어떻게 진행 하시겠습니까? " 대답이 다소 간단한 경우 솔루션 (분석 또는 컴퓨터 프로그램)을 작성해보십시오. 복잡한 최종 사례를 무시하십시오. 기존 라이브러리를 재발 명하지 않고 접근 방식 및 알고리즘에 관심이 있습니다. 솔루션에 너무 많은 노력이 필요한 경우 전체 솔루션을 프로그래밍하지 마십시오. 그러나 적어도 당신이 사용하고 싶은 데이터 구조와 방법에 대해 생각하십시오. 대체 방법에 대해서도 생각하십시오.


1

이것에 대한 훌륭한 질문 이 있습니다.

내 대답은 :

향상시키는 가장 좋은 방법은 연습하는 것입니다!

http://www.mensa.org.uk/puzzles/ 에서 RSS 피드를 구독하고 나오는 대로 시간을 내십시오.

퍼즐 하루 달력 (예 : http://www.calendars.com/product.asp?PID=1&MGID=-1&IID=46387&cm_mmc=Affiliate_Program--performics--k137666-_-DDI%20Link )이 좋습니다. 그것은 또한 당신에게 규칙적이고, 한 입 크기의, 다양한 문제를 해결해 줄 것입니다.

이것들은 당신이 직면하게 될 문제들로부터 항상 주제에서 벗어나게 될 것이지만, 다양성은 당신이 전에는 생각하지 않은 방식으로 생각하도록 강요하기 때문에 중요합니다. 이것이 실제로 문제 해결에 관한 것입니다.

편집 : 또한 좋은 문제 해결 팁은 http://www.mindtools.com/pages/main/newMN_TMC.htm 을 확인 하십시오 .


1

체스를하다

체스 게임은 프로그래밍 문제를 해결하기위한 훌륭한 트레이너입니다. 문제의 층과 논리 트리는 매우 훌륭하게 관련되어 있습니다. 또한 차선책을 세우고 시간을 낭비하기 전에 미리 생각하고 계획을 세우는 데 도움이됩니다.

체스는 또한 왼쪽과 오른쪽의 "사고 모드"사이의 균형이 필요합니다. 너무 분석적이되면 모든 것을 계산하려고 할 때 혼란에 빠질 수 있습니다. 이는 불가능합니다. 그러나 모든 창의적 영감은 상황의 구체적인 현실에 맞는지 계산으로 확인해야합니다. 어려운 문제는 이렇습니다.

체스는 연구와 실습이 매우 선형적인 방식으로 탄탄한 개선을 이끄는 방법을 보여줍니다. 이것은 프로그램 문제 해결에서도 마찬가지입니다.

체스를하는 것도 배우는 것이 얼마나 많은지를 잘 이해하는 데 도움이 될 수 있습니다. 10 년 동안 프로그래밍 (또는 체스)을 해왔지만 아직 그랜드 마스터가 아닙니다.


나는 정기적으로 체스를하면서 마음이 날카 로워지는 것을 발견했다.
폴 나단

1

나는 최근 프로젝트 오일러 에서 문제를 해결하고 있습니다 . 문제는 다양합니다. 솔루션에는 일반적으로 많은 양의 코드가 필요하지 않지만 알고리즘의 런타임과 같은 많은 요소를 고려해야합니다. 답을 입력하면 원하는 언어를 사용할 수 있습니다. 많은 문제에 대한 최적의 솔루션을 잘 작성하고 각 문제에 대해 많은 토론을합니다. 매일 한 가지 문제를 해결하려고하면 문제 해결 및 분석이 얼마나 개선되는지 놀라게 될 것입니다. 추가적인 크레딧을 얻으려면 절차 언어 (아마 C ++), 스크립팅 언어 (python과 같은) 및 기능 언어 (F #와 같은)와 같은 여러 언어에서 동일한 문제를 해결해보십시오.


1

나는 과학적 배경에서 왔기 때문에 문제를 볼 때 과학적 방법의 전술을 사용하는 경향이 있습니다 . 나는 특히 가설을 기반으로 "실험"을 설정하고 "제어"를 사용하고 싶습니다. 그래서 무언가를 구축 한 다음 그것에 대해 한 가지만 변경 / 추가하고 그 결과가 그 변경 / 추가의 결과를 확인합니다. 필요한 결과를 얻지 못하면 다시 전환하고 다른 것을 변경합니다. 이것은 문제 해결 / 디버깅 코드에 효과적입니다. 때때로 당신은 당신이 찾는 답을 얻지 만, 당신은 항상 실패했을 때에도 새로운 것을 배우게됩니다. 나는 또한 축소주의를 통해 배우고 싶습니다-이미 존재하는 무언가를 가져 가면 (항상 이해하지 못할 수도 있지만 효과가 있음을 알고있는 것으로 시작하는 것이 좋음) 나에게 복잡해 보이고 구성 요소로 분해하여 어떻게 작동하는지 배울 수 있습니다. 때때로 내 두뇌가 문제를 전체적으로 접근하는 대신 이와 같은 학습을 다루기가 더 쉬우 며 그 지식을 사용하여 다른 유사한 복잡한 것을 스스로 만들 수 있습니다. 또한 고전과 현대 사상가의 작품을 선택하는 논리와 추론에 관한 책을 읽는 것이 좋습니다 (Aristotle로 시작하여 길을 따라 가십시오). 컴퓨터에서 문제를 해결하는 데 도움이되는 기본 논리의 기초를 제공 할 수 있습니다. 물론, 문제를 해결할 수없고 한동안 문제를 해결하고 있다면 뇌를 쉬십시오. 문제의 특정 측면에 대한 반론은 때로는 해 롭습니다. 누구나 휴식이 필요합니다 :)


0

문제 해결의 가장 어려운 부분은 "지각 적 좁음"입니다.

당신은 문제가있는 것으로 보이는 것을 고르고 지쳐서 진전이 없을 때까지 그 뒤를 따라갑니다.

이를 수행하는 방법은 문제를 확실하게 이해하는 것입니다. "올바른 문제 해결"은 문제 해결에서 가장 중요한 부분입니다.

때때로 그들은 이것을 "상자 밖에서 생각하기"라고 부릅니다. "상자"는 실제적인 근본적인 문제를 포함하지 않을 수있는 좁은 관점입니다. 상자 밖에서 생각하는 것은 해결해야 할 올바른 문제를 찾는 것입니다.

잘못된 문제에 조기 초점을 맞추는 축소를 피하기위한 전략에 대한 많은 책이 있습니다.

대부분의 트릭은 실제 결과가 무엇인지 확인하는 것입니다. 그런 다음 바람직한 결과를 차단하는 요소를 찾으십시오.


0

솔직히 모든 사람이 다르다고 생각하므로 더 나은 문제 해결자가되는 모든 사람의 도로지도가 다릅니다. 다른 사람들의 경험에서 배울 수 있지만 결국에는 자신의 길을 만들어야합니다. 이것은 본질적으로 "어려운 방법"을 배우는 것이지만이 경우에는 효과적입니다.

다음은 제가 아직 큰 문제 해결사는 아니지만 작년보다 나아진 문제 해결 방법을 개선하기 시작한 방법입니다. 경영진에 대한 세 가지 새로운 보고서를 추가하여 오픈 소스 시간 추적 소프트웨어를 확장하는 작업과 관련된 새 프로젝트를 받았습니다. 이 소프트웨어는 내가 사용한 적이없는 언어로 작성되었으며 문서화가 잘되지 않았고 난독 화되었습니다. 나는 파고 들었고 많은 연구를 한 다음 기본 기능을 갖추었을 때 개선 된 다음 마침내 더 많은 기능을 추가했습니다.

다시 말해, 어떤 종류의 싱크대 또는 수영 실제 프로젝트를 찾을 것을 권장합니다. 현재 프로그래머로 일하고 있다면 프로젝트를 찾거나 상사에게 요청하십시오. 이 시나리오가 가능하지 않은 경우, 직장 밖에서 계약, 프리랜서 또는 다른 것을 찾을 수 있습니다. 나는 필요할 때 문제를 매우 신속하고 신속하게 해결하고 프로젝트의 강도 때문에 그 지식을 유지합니다. 이것이 효과가 없다면이 스레드의 다른 모든 사람들이 제안하는 것을 수행하십시오 :).


0

답은 다른 해결책으로 나오면서 질문 자체에 있습니다. 항상 하나 이상의 솔루션이 있습니다 (예 : 정렬은 다른 방법으로 수행 할 수 있습니다. 버블 정렬, 선택 정렬 등). 당신은 그것을 효율적으로 할 수있는 방법 (정렬)을 선택해야합니다. 다음 번에 다른 방법으로 시도해보십시오. ..... 그리고 문제 해결을위한 책 ....... 없음 책에서 문제 해결 기술을 배울 수 없습니다. 더 많은 코드를 사용하면 더 많은 지식을 얻을 수 있습니다. 행운을 빕니다


0

프로그래머는 자주 사용하는 프로그래밍 언어로 문제를 해결하는 방법을 시각화하여 문제를 정신적으로 쉽게 공격 할 수 있습니다. 자신이 가장 좋아하는 도구가 망치 일 때 모든 문제를 손톱으로 보는 고전적인 목수처럼.

최선의 문제 해결 연습은 실무 수준을 넘어 서면 "이것이 최적의 방법으로 해결하기 위해 필요한 것"이라는 관점에서 생각합니다. 어떤 경우에는 솔루션을 적용하기 위해 (많은) 새로운 것들을 배워야 할 수도 있지만, 요점은 솔루션을 해결할 수있는 능력이 과거 및 기존 기술에만 국한되어서는 안된다는 것입니다.

나를위한 오래된 실제 예는 내가 보통 모든 안락한 뮤텍스를 뱅킹하는 내 안락 지대에 앞서가더라도 내 문제가 실제로 선점 스레드가 필요하지 않다는 것을 알았을 때 효율적인 협업 멀티 태스킹을 구현하는 방법을 배웠다는 것입니다. 결국 항상 어느 시점에서 편안하게 멈춘 것 같습니다 ..).


0

응용 프로그램 개발에서 우리가 직면 한 많은 문제 는 우리 자신의 발명품이거나 우리가 물려받은 바보의 발명품입니다. 문제를 해결하는 것은 가장 자주 소스찾는 데 온다 . 종종, 우리가 어디 에서 일어나고 있는지 알게되면 , 단지 그것을 해결하기 위해 필요한 역량 만 있습니다.

마지막까지:

  1. 플랫폼을 배우십시오.
  2. 도구를 배우십시오.
  3. 아직 사용하지 않은 플랫폼에서 어떤 도구를 사용할 수 있는지 알아보십시오.

세계의 모든 두뇌 훈련은 두뇌가 사용할 정보가 없으면 쓸모가 없습니다. 문제를 해결하려면 가능성 이 무엇인지 먼저 알아야합니다 ! 그럼에도 불구하고 문제에 대한 설명보다는 좋은 정보로 작업하는 것이 훨씬 빠릅니다.

왜 소들이 집에 돌아와서 왜 실행하는데 시간이 오래 걸리는지 추측 할 수 있습니다. 그러나 "데이터를 먼저 얻자"라고 말하면 많은 예외가 발생하고 대신 if 문으로 변경할 수 있음을 알 수 있습니다. 정보를 수집하는 방법을 모르고 내 플랫폼 예외에서 많은 오버 헤드가 걸리고 시도하기 전에 확인하는 방법이 있다는 것을 알면 문제를 결코 해결할 수 없습니다.


0

답에는 두 부분이 있습니다.

a) 실제 문제 해결을위한 기술

b) 사고와 문제 해결에있어 뇌를 본질적으로 "더 나은"상태로 만들기

기술에 대한 훌륭한 답변이 항상 있었으므로 (문제 등을 알고 있다고 가정) 나는 그 정도를 다루지 않을 것입니다. 당신의 두뇌를 훈련에 관해서는, 당신이 그 시냅스를 교차하고 더 많은 상호 연결을 구축하기 위해 할 수있는 몇 가지가 있습니다

1) 새로운 언어, 실제 언어를 배우십시오 (요즘 프랑스어 나 중국어와 같은 것이 좋습니다)

2) 새로운 악기 연주법 배우기

3) 페인트, 그림 또는 조각과 같은 예술적인 행동

4) 글자 맞추기 또는 낱말 맞추기

5) 뜻대로 춤을 추십시오. 아니, 농담이 아니야 춤은 당신의 두뇌와 사고에 영향미치는 것으로 나타났습니다

6) 경험을 넓히고 혁신적인 솔루션은 한 분야에서 다른 분야의 이론을 적용하여 나온 것이므로 흥미로운 다른 분야와 분야를 연구하십시오.

7) 운동, 운동은 사고 과정을 개선하는 데 매우 중요 합니다.

마지막으로 어려운 문제를 해결하기위한 최상의 팁을 제공하겠습니다. 나는 그것이 당신의 머리를 지우고 문제를 고려하게하는 기적이라는 것을 발견했습니다



0

내 충고는 버리는 것입니다!

물론 아닙니다. 의미하는 바는 경험이 거의없는 주제 영역에 들어가서 기존 솔루션에 대해 배우지 않고도 어려운 문제를 해결하는 것입니다. 창의력과 비판적 사고 및 참조 설명서 만 사용하십시오.

이미지 형식을 디자인 할 수 있습니다. 또는 웹 서버. 또는 압축 체계. 파일 시스템. 핵심. 인공 지능. 프로그래밍 언어. 컴퓨터 비전 시스템.

당신이 흥미롭고 합리적으로 복잡하고 배운 적이없는 것. 그것에 대해 읽지 마십시오 . 바로 뛰어 들어보십시오. 실수하다. 바퀴를 재창조하십시오.

도움을 요청하지 마십시오. 튜토리얼을 피하십시오. 이론에서 멀리 떨어지십시오. 선반에서 용액을 꺼내지 마십시오.

왜?

  • 우리는 실수로부터 가장 잘 배웁니다.
  • 기존 솔루션을 역류시키고 조정하는 대신 솔루션을 창의적으로 개발하는 연습을 할 수있는 기회를 제공합니다.
  • 당신은 당신의 아이디어를 평가해야합니다. 도구, 해결하려는 문제 및 평가하려는 아이디어를 제대로 이해하지 않으면 도구를 평가할 수 없습니다. 이것은 당신이 달리 개발하는 것보다 주제에 대한 깊은 이해로 이어집니다. (사용중인 도구에 대해 자유롭게 읽으십시오. 해결하려는 문제에 대해서는 읽지 마십시오.)

몇 번 시도해보고, 달성 한 결과에 만족하면 몇 개월 동안 그대로 두십시오. 그런 다음 새로 돌아와서 새로운 관점을 찾을 수 있는지 확인하십시오. 그 후 문제에 대해 읽고 다른 사람들이 문제를 해결 한 방법 (또는 사람들과 이야기하는 방법)을 읽을 차례입니다. 이 시점에서, 읽는 동안 자신에게 "그렇다, 그 말이 의미가있다"고 말하는 대신, "그렇다 ", " 정말로 ", "어느 정도", "와우, 그것은 영리하다" 라고 말할 것 입니다.

다시 말해, 당신은 당신이 읽는 것에 대해 훨씬 더 비판적으로 생각할 것이고, 당신은 이미 첨부 할 큰 "정신적 틀"을 가지고 있기 때문에 이해하고 기억하기가 훨씬 쉽다는 것을 알게 될 것입니다. 당신은 당신이 독립적으로 발견 한 것들에 대해 기분이 좋을 것이고, 많은 새로운 지식을 가지고 떠날 것입니다.

솔루션을 완벽하게 만들려고하지 마십시오. 문제를 해결할 있다는 것을 스스로에게 증명하십시오 . "할 수있는"태도를 취하고, 문제로 어려움을 겪고 있다면, 처음 문제를 해결 한 사람은 당신만큼 알고있을 것입니다.


0

문제 해결은 독서를 통해 배우거나 배울 수있는 것이 아닙니다. 문제를 해결하는 데 도움이되는 유일한 방법은 문제를 해결하는 것입니다.

문제 해결에 대한 다양한 기술방법론 이 있으며 특정 도메인의 문제를 해결하는 데 사용할 수있는 도구와 기술에 대해 읽을 수 있습니다. 지속적으로 문제에 대해 생각하지 않는 한 솔루션을 생각해보고 (모든 문제에 대해 여러 솔루션을 제시하고 서로에 대해 평가) 다른 사람이 개발 한 솔루션에 대해 솔루션을 평가하면 문제가 더 나아지지 않습니다. 해결.

Andy HuntPragmatic Thinking and Learning : Refactor Your Wetware 의 사본을 선택하는 것이 좋습니다 . 그것은 당신이 어떻게 생각하고 반응하고 배우는지 이해하는 것에 관한 책입니다. 그것은 행동 이론과 다른인지 과학에서 관련 이론을 가져온다. 특히 소프트웨어 개발자를 대상으로하지만 모든 지식 근로자에게 적용됩니다.


0

저와 같은 프로그래밍에 익숙하지 않은 분들을 위해 "Think Like a Programmer"라는 책을 추천합니다. 첫 번째 장에서는 알고있는 것부터 시작하여 감소, 유추 및 실험으로 시작하여 문제를 해결하고 나누는 것과 같은 문제 해결 기술을 다룹니다.

그런 다음 C ++의 예제와 함께 고급 배열 기술이 있습니다. 배열, 포인터 및 동적 메모리, 클래스, 재귀, 코드 재사용 문제 해결. 아직 너무 힘들 기 때문에이 부분에 대해서는 언급 할 수 없습니다.


-1

가능한 많은 문제를 해결합니다. 나는 또한 이와 같은 퍼즐 책을 좋아 한다 . 나는 또한 소수 또는 무언가를 포함하는 수학 게임, 스도쿠, 하노이 타워 등과 같은 문제 해결 게임을 고민합니다. 해결해야 할 것을 찾으십시오. 또한 가능하면 코드를 작성하십시오.


-1

안녕 많은 문제를 해결!

쉬운 문제로 시작하고 쉬운 문제가 문제가 아닌 일상이되면 더 어려운 문제로 넘어갑니다.


-4

이론을 지키지 말고 더 연습하십시오. 연습과 함께 경험이 온다.

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