"실제 프로그래머는 실제 문제를 처리하는 방법을 알고 있습니다." 그러나 그들은이 능력을 어떻게 배웠는지 또는 어디에 있는지를 잊습니다. 그것은 학교에서 가르치지 않습니다.
복잡한 프로그래밍 문제를 해결하는 능력을 향상 시키려면 어떻게해야합니까? 어떤 전략이 효과가 있었습니까? 알고리즘이나 디자인 패턴과 같이 집중해야 할 특정 영역이 있습니까?
"실제 프로그래머는 실제 문제를 처리하는 방법을 알고 있습니다." 그러나 그들은이 능력을 어떻게 배웠는지 또는 어디에 있는지를 잊습니다. 그것은 학교에서 가르치지 않습니다.
복잡한 프로그래밍 문제를 해결하는 능력을 향상 시키려면 어떻게해야합니까? 어떤 전략이 효과가 있었습니까? 알고리즘이나 디자인 패턴과 같이 집중해야 할 특정 영역이 있습니까?
답변:
작동하지 않을 수도있는 몇 가지 기술 :
필요에 따라 R 모드 또는 L 모드 사고 사용
R- 모드는 우리가 일반적으로 아종과 관련이있는 창의적이고 비언어적 접근 방식입니다. L 모드는 "내부 음성"과 관련된 선형적이고 논리적이며 구두적인 접근 방식입니다.
문제가 다루기 어려운 것처럼 보이면 잘못된 사고 모드를 사용하여 문제를 해결하려고했기 때문일 수 있습니다. 프로그래머의 경우 기본 사고 모드는 L 모드 인 경향이 있으므로 일시적으로 스위치를 끄고 R 모드에 액세스하는 것이 좋습니다.
R 모드 사고에 액세스하는 방법
여러 가지 방법이 있지만 Poincare 방법 (유명한 수학자의 이름을 따서)을 사용해보십시오.
문제에 대해 알고있는 모든 것을 기록하십시오. 모든 쉬운면을 즉시 해결하십시오 (있는 경우). 남아있는 "어려운 문제"목록에서 하나의 항목을 선택한 다음 방해받지 않고 산만하게 걷습니다.
보행 중에 문제를 분석하려고 시도하지 말고 마음을 방황하고 문제와 관련이있을 수있는 흥미로운 이미지 나 감각을 관찰하십시오. 그들이 합체하게하십시오. 영감을 받으면 즉시 걷기를 멈추고 얻은 통찰력을 적으십시오.
모든 문제가 통찰력을 가질 때까지 헹구고 반복하십시오. 그런 다음 통찰력을 탐구하십시오.
도서 추천
또한 실용적 사고와 학습을 읽으면 더 나은 문제 해결자가 될 수 있습니다. (최근 에이 책을 많이 참조하는 것 같습니다 ...)
다른 사람에게 물어봐...
심각하지 않습니다. 가장 큰 자원은 옆에 앉아있는 사람 일 수 있습니다. 그들에게 문제에 대한 답을 요구하지 말고, 옆에 앉아서 문제를 설명하도록하십시오.
구두로 말하면 종종 문제가 해결됩니다.
때때로 다른 사람이 질문을하거나 세부 사항을 지적하여 플러드 게이트를 잠금 해제 할 수 있습니다.
결국 꼭두각시를 사용하지 않고 머릿속에있는 말을하는 법을 배우고 문제의 핵심 내용을 더 빨리 발견 할 수 있습니다.
그리고 만약 다른 모든 것들이 실패한다면 그들은 당신에게 당신이 생각하지 못했던 기술을 보여줄 수있을 것입니다.
사실 제 대답은 "더 많은 문제 해결"입니다. 그러나 핵심은 바로 문제에 집중하고 포기하지 않는 것입니다. StackOverflow 또는 다른 것에 대한 도움을 요청하지 마십시오. (읽기 StackOverflow는 물론 괜찮습니다!) 거의 작동하는 솔루션을 얻을 때까지 열심히 노력한 다음 목표에 거의 도달하십시오. 만족스러운 솔루션이 될 때까지 계속하십시오.
나를 위해 문제 해결은 두 가지입니다.
포인트 2는 문제에 더 오래 걸리면 생각을 바꾸도록 강요하기 때문에 제 생각에는 정말 중요합니다. 또한 문제 해결에 더 많은 시간을 할애하여 기술을 더욱 향상시킬 수 있습니다. ;-)
그건 그렇고, Edward de Bono를 읽는 것이 좋습니다. 주로 물리학을 공부하면서 문제 해결 기술을 습득했지만 그의 글은 정말 흥미 롭습니다.
글쎄, 내 문제 해결 툴킷은 다음과 같습니다.
이러한 도구는 대부분 재귀 적으로 적용 할 수 있습니다.
그리고 내 알고리즘은 다음과 같습니다.
1 단계는 어려운 결정이지만, 연습할수록 더 나은 결정을 내립니다.
아, 나는 가장 중요한 성분을 거의 잊어 버렸습니다.
전체 과정에 대해 긍정적으로 생각하십시오. "XYZ가 이제 문제를 해결할 수 있기를 바랍니다."라고 생각하지 마십시오. "XYZ가 작동하지 않으면 YZX가 문제의 원인이 될 수 없다는 것을 알고 ZYX가 작동하는지 확인할 것입니다." 문제를 찾는 과정이 우아하고 유익한 경우 문제 해결은 때때로 재미있을 수 있습니다.
문제를 식별하는 기술에 대해서도 연구하십시오. 때때로 문제를 해결하기 전에 문제가 있음을 인식해야합니다. 학교에서는 너무 많은 답변이 필요하고 학생들의 질문이 충분하지 않습니다.
주변에서 문제를 해결하는 사람들을 찾고 문제 해결 방법을 물어보십시오.
틀릴 준비를하십시오. 당신이 그들 자신을 모두 지키면 아무 소용이 없을 것입니다.
소프트웨어 엔지니어를위한 컴퓨터 과학 교육의 주요 이점은 추상화를 작성하고 이해하는 능력입니다. 추상화는 String 클래스 메서드와 같은 일반적인 기능을 더 큰 문제에 집중할 수있는 재사용 가능한 패키지로 묶는 데 사용됩니다.
추상화를 인식하고 만드는 법을 배우십시오 .
그러나 가장 중요한 것은 추상화 는 문제를 더 작고 관리하기 쉬운 덩어리로 나누는 방법을 알려 줍니다 . 과학적 배경과 결합하면 이러한 기술을 결합하여 소음을 줄이고 문제의 핵심에 도달 할 수있는 엔지니어를 만들 수 있습니다.
과학적 방법을 사용하여 문제를 해결하는 방법을 배웁니다 .
찾기 어려운 문제가있는 프로덕션 응용 프로그램의 문제를 해결할 때 때로는 여러 가지 변수를 제거하여 하나를 분리하고 제거하기 위해 비 프로덕션 환경에서 응용 프로그램을 실제로 더 중단시키는 경우가 있습니다.
요약하면, 컴퓨터 과학 학위에 필요한 모든 물리 선택 및 기타 과학 선택을 통해 얻은 과학적 방법은 일련의 자원 봉사자에 대한 위약과 새로운 약물 시험을 시도하는 것처럼 이러한 문제를 해결하는 데 도움이됩니다. 때로는 더 나아지기 위해 무언가를 악화시켜야하는 과학자들처럼 때때로 엔지니어로서 우리도 그렇게해야합니다.
이러한 방식으로 과학적으로 사고하는 것은 일반적으로 과학적 배경에 대한 경험이 있어야합니다. 때때로 문제 해결은 A에서 B까지의 선형 경로로 인식 될 수 없습니다.
한마디로 컴퓨터 과학을 공부하고 다른 과학 분야를 연구하며 기능 프로그래밍을 배우십시오. 이를 통해 과학자처럼 생각하고 상자 밖에서 생각할 수 있습니다.
나는 당신이 찾고있는 것이 컴퓨터 과학 휴리스틱이라고 생각합니다.
트렌치에서 우리의 99 %가하는 일에 관해서는, 태양 아래 새로운 것이 실제로 없습니다. 따라서 문제를보고 DP 문제로 인식하거나 메모 등으로 혜택을받을 수있는 문제로 인식 할 수 있습니다.
이 지식을 어떻게 얻습니까? 적절한 CS 학위는 시작하기에 좋은 곳입니다 ... 소프트웨어 공학이나 정보 시스템은 아니지만 대부분 학부생들이 "실용적이지 않다"고 불평합니다.
당신은 이것을 스스로 할 수 있지만 어려울 것입니다. 이 두 코스로 시작하겠습니다.
내 답변은 코딩과 관련이 있지만 무엇이든 적용 할 수 있습니다.
실제로는 내가하는 일을 말할 수 있습니다. 프로그래밍보다 응용 수학에 더 관심이 있지만 컴퓨팅에 적용되는 응용 수학은 일종의 프로그래밍입니다. 주변에 문제와 해결책이 있습니다. 알려진 솔루션 또는 기존 코드 라이브러리에 연결하기 전 (또는 때때로, 내 작업에 적시에 솔루션이 필요한 경우), "나에게 이것이 심각한 문제라면-즉, 통조림 솔루션, 어떻게 진행 하시겠습니까? " 대답이 다소 간단한 경우 솔루션 (분석 또는 컴퓨터 프로그램)을 작성해보십시오. 복잡한 최종 사례를 무시하십시오. 기존 라이브러리를 재발 명하지 않고 접근 방식 및 알고리즘에 관심이 있습니다. 솔루션에 너무 많은 노력이 필요한 경우 전체 솔루션을 프로그래밍하지 마십시오. 그러나 적어도 당신이 사용하고 싶은 데이터 구조와 방법에 대해 생각하십시오. 대체 방법에 대해서도 생각하십시오.
이것에 대한 훌륭한 질문 이 있습니다.
내 대답은 :
향상시키는 가장 좋은 방법은 연습하는 것입니다!
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 을 확인 하십시오 .
체스를하다
체스 게임은 프로그래밍 문제를 해결하기위한 훌륭한 트레이너입니다. 문제의 층과 논리 트리는 매우 훌륭하게 관련되어 있습니다. 또한 차선책을 세우고 시간을 낭비하기 전에 미리 생각하고 계획을 세우는 데 도움이됩니다.
체스는 또한 왼쪽과 오른쪽의 "사고 모드"사이의 균형이 필요합니다. 너무 분석적이되면 모든 것을 계산하려고 할 때 혼란에 빠질 수 있습니다. 이는 불가능합니다. 그러나 모든 창의적 영감은 상황의 구체적인 현실에 맞는지 계산으로 확인해야합니다. 어려운 문제는 이렇습니다.
체스는 연구와 실습이 매우 선형적인 방식으로 탄탄한 개선을 이끄는 방법을 보여줍니다. 이것은 프로그램 문제 해결에서도 마찬가지입니다.
체스를하는 것도 배우는 것이 얼마나 많은지를 잘 이해하는 데 도움이 될 수 있습니다. 10 년 동안 프로그래밍 (또는 체스)을 해왔지만 아직 그랜드 마스터가 아닙니다.
나는 최근 프로젝트 오일러 에서 문제를 해결하고 있습니다 . 문제는 다양합니다. 솔루션에는 일반적으로 많은 양의 코드가 필요하지 않지만 알고리즘의 런타임과 같은 많은 요소를 고려해야합니다. 답을 입력하면 원하는 언어를 사용할 수 있습니다. 많은 문제에 대한 최적의 솔루션을 잘 작성하고 각 문제에 대해 많은 토론을합니다. 매일 한 가지 문제를 해결하려고하면 문제 해결 및 분석이 얼마나 개선되는지 놀라게 될 것입니다. 추가적인 크레딧을 얻으려면 절차 언어 (아마 C ++), 스크립팅 언어 (python과 같은) 및 기능 언어 (F #와 같은)와 같은 여러 언어에서 동일한 문제를 해결해보십시오.
나는 과학적 배경에서 왔기 때문에 문제를 볼 때 과학적 방법의 전술을 사용하는 경향이 있습니다 . 나는 특히 가설을 기반으로 "실험"을 설정하고 "제어"를 사용하고 싶습니다. 그래서 무언가를 구축 한 다음 그것에 대해 한 가지만 변경 / 추가하고 그 결과가 그 변경 / 추가의 결과를 확인합니다. 필요한 결과를 얻지 못하면 다시 전환하고 다른 것을 변경합니다. 이것은 문제 해결 / 디버깅 코드에 효과적입니다. 때때로 당신은 당신이 찾는 답을 얻지 만, 당신은 항상 실패했을 때에도 새로운 것을 배우게됩니다. 나는 또한 축소주의를 통해 배우고 싶습니다-이미 존재하는 무언가를 가져 가면 (항상 이해하지 못할 수도 있지만 효과가 있음을 알고있는 것으로 시작하는 것이 좋음) 나에게 복잡해 보이고 구성 요소로 분해하여 어떻게 작동하는지 배울 수 있습니다. 때때로 내 두뇌가 문제를 전체적으로 접근하는 대신 이와 같은 학습을 다루기가 더 쉬우 며 그 지식을 사용하여 다른 유사한 복잡한 것을 스스로 만들 수 있습니다. 또한 고전과 현대 사상가의 작품을 선택하는 논리와 추론에 관한 책을 읽는 것이 좋습니다 (Aristotle로 시작하여 길을 따라 가십시오). 컴퓨터에서 문제를 해결하는 데 도움이되는 기본 논리의 기초를 제공 할 수 있습니다. 물론, 문제를 해결할 수없고 한동안 문제를 해결하고 있다면 뇌를 쉬십시오. 문제의 특정 측면에 대한 반론은 때로는 해 롭습니다. 누구나 휴식이 필요합니다 :)
문제 해결의 가장 어려운 부분은 "지각 적 좁음"입니다.
당신은 문제가있는 것으로 보이는 것을 고르고 지쳐서 진전이 없을 때까지 그 뒤를 따라갑니다.
이를 수행하는 방법은 문제를 확실하게 이해하는 것입니다. "올바른 문제 해결"은 문제 해결에서 가장 중요한 부분입니다.
때때로 그들은 이것을 "상자 밖에서 생각하기"라고 부릅니다. "상자"는 실제적인 근본적인 문제를 포함하지 않을 수있는 좁은 관점입니다. 상자 밖에서 생각하는 것은 해결해야 할 올바른 문제를 찾는 것입니다.
잘못된 문제에 조기 초점을 맞추는 축소를 피하기위한 전략에 대한 많은 책이 있습니다.
대부분의 트릭은 실제 결과가 무엇인지 확인하는 것입니다. 그런 다음 바람직한 결과를 차단하는 요소를 찾으십시오.
솔직히 모든 사람이 다르다고 생각하므로 더 나은 문제 해결자가되는 모든 사람의 도로지도가 다릅니다. 다른 사람들의 경험에서 배울 수 있지만 결국에는 자신의 길을 만들어야합니다. 이것은 본질적으로 "어려운 방법"을 배우는 것이지만이 경우에는 효과적입니다.
다음은 제가 아직 큰 문제 해결사는 아니지만 작년보다 나아진 문제 해결 방법을 개선하기 시작한 방법입니다. 경영진에 대한 세 가지 새로운 보고서를 추가하여 오픈 소스 시간 추적 소프트웨어를 확장하는 작업과 관련된 새 프로젝트를 받았습니다. 이 소프트웨어는 내가 사용한 적이없는 언어로 작성되었으며 문서화가 잘되지 않았고 난독 화되었습니다. 나는 파고 들었고 많은 연구를 한 다음 기본 기능을 갖추었을 때 개선 된 다음 마침내 더 많은 기능을 추가했습니다.
다시 말해, 어떤 종류의 싱크대 또는 수영 실제 프로젝트를 찾을 것을 권장합니다. 현재 프로그래머로 일하고 있다면 프로젝트를 찾거나 상사에게 요청하십시오. 이 시나리오가 가능하지 않은 경우, 직장 밖에서 계약, 프리랜서 또는 다른 것을 찾을 수 있습니다. 나는 필요할 때 문제를 매우 신속하고 신속하게 해결하고 프로젝트의 강도 때문에 그 지식을 유지합니다. 이것이 효과가 없다면이 스레드의 다른 모든 사람들이 제안하는 것을 수행하십시오 :).
프로그래머는 자주 사용하는 프로그래밍 언어로 문제를 해결하는 방법을 시각화하여 문제를 정신적으로 쉽게 공격 할 수 있습니다. 자신이 가장 좋아하는 도구가 망치 일 때 모든 문제를 손톱으로 보는 고전적인 목수처럼.
최선의 문제 해결 연습은 실무 수준을 넘어 서면 "이것이 최적의 방법으로 해결하기 위해 필요한 것"이라는 관점에서 생각합니다. 어떤 경우에는 솔루션을 적용하기 위해 (많은) 새로운 것들을 배워야 할 수도 있지만, 요점은 솔루션을 해결할 수있는 능력이 과거 및 기존 기술에만 국한되어서는 안된다는 것입니다.
나를위한 오래된 실제 예는 내가 보통 모든 안락한 뮤텍스를 뱅킹하는 내 안락 지대에 앞서가더라도 내 문제가 실제로 선점 스레드가 필요하지 않다는 것을 알았을 때 효율적인 협업 멀티 태스킹을 구현하는 방법을 배웠다는 것입니다. 결국 항상 어느 시점에서 편안하게 멈춘 것 같습니다 ..).
응용 프로그램 개발에서 우리가 직면 한 많은 문제 는 우리 자신의 발명품이거나 우리가 물려받은 바보의 발명품입니다. 문제를 해결하는 것은 가장 자주 소스 를 찾는 데 온다 . 종종, 우리가 어디 에서 일어나고 있는지 알게되면 , 단지 그것을 해결하기 위해 필요한 역량 만 있습니다.
마지막까지:
세계의 모든 두뇌 훈련은 두뇌가 사용할 정보가 없으면 쓸모가 없습니다. 문제를 해결하려면 가능성 이 무엇인지 먼저 알아야합니다 ! 그럼에도 불구하고 문제에 대한 설명보다는 좋은 정보로 작업하는 것이 훨씬 빠릅니다.
왜 소들이 집에 돌아와서 왜 실행하는데 시간이 오래 걸리는지 추측 할 수 있습니다. 그러나 "데이터를 먼저 얻자"라고 말하면 많은 예외가 발생하고 대신 if 문으로 변경할 수 있음을 알 수 있습니다. 정보를 수집하는 방법을 모르고 내 플랫폼 예외에서 많은 오버 헤드가 걸리고 시도하기 전에 확인하는 방법이 있다는 것을 알면 문제를 결코 해결할 수 없습니다.
답에는 두 부분이 있습니다.
a) 실제 문제 해결을위한 기술
b) 사고와 문제 해결에있어 뇌를 본질적으로 "더 나은"상태로 만들기
기술에 대한 훌륭한 답변이 항상 있었으므로 (문제 등을 알고 있다고 가정) 나는 그 정도를 다루지 않을 것입니다. 당신의 두뇌를 훈련에 관해서는, 당신이 그 시냅스를 교차하고 더 많은 상호 연결을 구축하기 위해 할 수있는 몇 가지가 있습니다
1) 새로운 언어, 실제 언어를 배우십시오 (요즘 프랑스어 나 중국어와 같은 것이 좋습니다)
2) 새로운 악기 연주법 배우기
3) 페인트, 그림 또는 조각과 같은 예술적인 행동
4) 글자 맞추기 또는 낱말 맞추기
5) 뜻대로 춤을 추십시오. 아니, 농담이 아니야 춤은 당신의 두뇌와 사고에 영향 을 미치는 것으로 나타났습니다
6) 경험을 넓히고 혁신적인 솔루션은 한 분야에서 다른 분야의 이론을 적용하여 나온 것이므로 흥미로운 다른 분야와 분야를 연구하십시오.
7) 운동, 운동은 사고 과정을 개선하는 데 매우 중요 합니다.
마지막으로 어려운 문제를 해결하기위한 최상의 팁을 제공하겠습니다. 나는 그것이 당신의 머리를 지우고 문제를 고려하게하는 기적이라는 것을 발견했습니다
내 충고는 책 을 버리는 것입니다!
물론 아닙니다. 의미하는 바는 경험이 거의없는 주제 영역에 들어가서 기존 솔루션에 대해 배우지 않고도 어려운 문제를 해결하는 것입니다. 창의력과 비판적 사고 및 참조 설명서 만 사용하십시오.
이미지 형식을 디자인 할 수 있습니다. 또는 웹 서버. 또는 압축 체계. 파일 시스템. 핵심. 인공 지능. 프로그래밍 언어. 컴퓨터 비전 시스템.
당신이 흥미롭고 합리적으로 복잡하고 배운 적이없는 것. 그것에 대해 읽지 마십시오 . 바로 뛰어 들어보십시오. 실수하다. 바퀴를 재창조하십시오.
도움을 요청하지 마십시오. 튜토리얼을 피하십시오. 이론에서 멀리 떨어지십시오. 선반에서 용액을 꺼내지 마십시오.
왜?
몇 번 시도해보고, 달성 한 결과에 만족하면 몇 개월 동안 그대로 두십시오. 그런 다음 새로 돌아와서 새로운 관점을 찾을 수 있는지 확인하십시오. 그 후 문제에 대해 읽고 다른 사람들이 문제를 해결 한 방법 (또는 사람들과 이야기하는 방법)을 읽을 차례입니다. 이 시점에서, 읽는 동안 자신에게 "그렇다, 그 말이 의미가있다"고 말하는 대신, "그렇다 ", " 정말로 ", "어느 정도", "와우, 그것은 영리하다" 라고 말할 것 입니다.
다시 말해, 당신은 당신이 읽는 것에 대해 훨씬 더 비판적으로 생각할 것이고, 당신은 이미 첨부 할 큰 "정신적 틀"을 가지고 있기 때문에 이해하고 기억하기가 훨씬 쉽다는 것을 알게 될 것입니다. 당신은 당신이 독립적으로 발견 한 것들에 대해 기분이 좋을 것이고, 많은 새로운 지식을 가지고 떠날 것입니다.
솔루션을 완벽하게 만들려고하지 마십시오. 문제를 해결할 수 있다는 것을 스스로에게 증명하십시오 . "할 수있는"태도를 취하고, 문제로 어려움을 겪고 있다면, 처음 문제를 해결 한 사람은 당신만큼 알고있을 것입니다.
문제 해결은 독서를 통해 배우거나 배울 수있는 것이 아닙니다. 문제를 해결하는 데 도움이되는 유일한 방법은 문제를 해결하는 것입니다.
문제 해결에 대한 다양한 기술 과 방법론 이 있으며 특정 도메인의 문제를 해결하는 데 사용할 수있는 도구와 기술에 대해 읽을 수 있습니다. 지속적으로 문제에 대해 생각하지 않는 한 솔루션을 생각해보고 (모든 문제에 대해 여러 솔루션을 제시하고 서로에 대해 평가) 다른 사람이 개발 한 솔루션에 대해 솔루션을 평가하면 문제가 더 나아지지 않습니다. 해결.
Andy Hunt 의 Pragmatic Thinking and Learning : Refactor Your Wetware 의 사본을 선택하는 것이 좋습니다 . 그것은 당신이 어떻게 생각하고 반응하고 배우는지 이해하는 것에 관한 책입니다. 그것은 행동 이론과 다른인지 과학에서 관련 이론을 가져온다. 특히 소프트웨어 개발자를 대상으로하지만 모든 지식 근로자에게 적용됩니다.
저와 같은 프로그래밍에 익숙하지 않은 분들을 위해 "Think Like a Programmer"라는 책을 추천합니다. 첫 번째 장에서는 알고있는 것부터 시작하여 감소, 유추 및 실험으로 시작하여 문제를 해결하고 나누는 것과 같은 문제 해결 기술을 다룹니다.
그런 다음 C ++의 예제와 함께 고급 배열 기술이 있습니다. 배열, 포인터 및 동적 메모리, 클래스, 재귀, 코드 재사용 문제 해결. 아직 너무 힘들 기 때문에이 부분에 대해서는 언급 할 수 없습니다.
이론을 지키지 말고 더 연습하십시오. 연습과 함께 경험이 온다.