프로그래밍의 특정 부분을 이해하지 못하는 경우 어떻게합니까? [닫은]


11

나는 새로운 언어를 배우고 있으며, 기본 프로그램을위한 코드를 여러 언어로 작성하고 수업에갑니다. 나는 책, 기사, 수업, 비디오를 읽었지만 이름을 밝히지 만 특정 물건을 걸 수없는 것 같습니다.

예를 들어 나는 포인터를 잘 이해하지 못했습니다. (질문의 일부가 아님- "포인터"로 태그를 다시 지정할 필요는 없습니다 ...)


그러나 내 질문은 포인터가하는 것이 아니라 그와 같은 것을 어떻게 이해할 수 있습니까? 프로그래밍의 특정 부분에 대한 책이나 기사를 읽은 후 이해가되지 않으면 어떻게해야합니까? 프로그래밍의 특정 기능으로 코드를 작성하면 도움이되지만 실제로 그렇게 이해하는 데 도움이되지는 않습니다. 이론적 인 부분은 이해에 중요합니다.


11
사람들이 왜 포인터를 이해하는데 어려움을 겪고 있는지 이해할 수 있기를 바랍니다. 이름은 내가 필요한 모든 설명을 제공합니다.
ChaosPandion

1
일부 Computer Architecture 101과정은 포인터 이해에 큰 도움이됩니다. ... 그리고 다른 모든 것.
ZJR

6
질문은 포인터에 관한 것이 아니라 일반적인 질문이지만 감사합니다.
Bugster

2
나는 그가 고백 한 하나의 사례를 상기시켜주는 사람에게 그에게 깨달음을 향한 하나의 비트를 도울 것이라고 생각하지 않습니다. 긴 끈적 끈적하고 반항적 인 답변과 다운 그레이드 의견.
haylem

4
@FrustratedWithFormsDesigner : "어떻게 배우는 법"이라고 생각합니다. 타당하고 중요한 질문입니다.
haylem

답변:


22

추상적 인 개념을 이해하는 데 어려움이 있다면 한 단계 아래로 이동하십시오. C로 포인터를 가져올 수 없으면 어셈블리 수준으로 내려갑니다. 여전히 문제가 있습니까? 로직 게이트에 이르기까지 하드웨어에 대해 자세히 알아보십시오.


2
+1 : 저를 위해 일했습니다. PDP-10 어셈블리 언어 작성을 시작할 때까지 ALGOL에서 포인터 문제가 발생했습니다.
케빈 클라인

2
재미있는 생각. 어셈블리에서 프로그램을 작성하고 실행하는 것은 너무 멀다는 것을 지적합니다. 제 생각에는이 수준에서는 기본 이해의 관점을 넘어서는 것이 불필요합니다. 그러나이게 당신이하고 싶은 일이라면 나중에 더 많은 힘을 얻습니다!
Bryan Field

1
@George Bailey, 그렇습니다. 실제 어셈블리와 실제 하드웨어에서 약간 위에있을 수 있습니다. 그렇기 때문에 MIX주변에 다른 유사한 장난감 아키텍처가 있습니다. 하드웨어 부분도 마찬가지입니다. 공부할 간단한 장난감 CPU 코어가 많이 있습니다.
SK-logic

+1 : 흥미로운 아이디어와 확실히 효과가있을 수 있지만 (OP의 사례를 재사용하기 위해) C 엔트리 레벨에서 ASM 엔트리 레벨로 내려가는 것은 초보자에게는 길고 힘들고 바람이 많은 길일 수 있습니다. 코스 / 프로젝트 / 기타에서 예상 한 것보다 더 많은 시간. 또한 동기가 약한 사람들을 소외시킬 수도 있습니다 (OP의 경우는 아니지만 상위 수준의 관점에서 CS 수업을 듣고 이해해야하지만 CS 자체에 대해서는 신경 쓰지 않는 많은 학생들을 차단할 수 있습니다) . 그러나 확실히 장기적으로 좋은 아이디어입니다.
haylem

글쎄, 내 CS 학위는 컴퓨터 아키텍처에서 이것을 다루었습니다. 로직 게이트에 대해 배웠고 로직 시뮬레이터에서 로직 게이트를 결합하여 가산기, ALU 및 매우 간단한 RISC CPU를 구축했습니다. 우리는 또한 MIPS 어셈블리에서 간단한 프로그램을 작성했습니다. 이것은 모두 컴퓨터 과학 학사 학위에 필요했으며 실제로 "초급"코스 중 하나로 간주되지 않았으므로 최고 수준 이상이거나 너무 멀리 가고 있다고 생각하지 않습니다.
Adam Jaskiewicz

17

짧은 증분 학습 라이프 사이클

  1. 시도 하고 이해하지 못하는 개념을.
  2. 개념 을 설명 하는 것을 구현 하십시오 .
  3. 화이트 보드에 개념 을 다이어그램으로 시도하십시오 (해당되는 경우).
  4. 개념을 이해하는 사람과 대화 해보십시오 .
  5. 이 사람에게 이해하는 비트설명해 보십시오 (때로는 빛을 보는 데 도움이 됨).
  6. 상태 1에있는 사람에게 마지막으로 설명하여 얻을 수있을 때까지 1 부터 다시 시작 하십시오.

추가 단계

주의해서 사용하십시오.

  • 추가 읽기 및 학습 자료 검색 :
    • 온라인 (인기 검색 엔진과 Wikipedia는 좋은 친구입니다),
    • 도서관에서 (책을 과소 평가하지 말고 책을 읽는 사람들에게)
    • 시스템에 (번들 문서 및 문서 도구는 종종 처음에 소외되어 있지만, 잠시 후 최고의 고토-친구가 :. 당신이 그 (것)들에 찾고있는 것을 발견하는 법을 배워야 예를 들어 man -k, apropos등 ...)
  • 시도 몇 가지 코드를 읽어 개념을 사용하여 ...
  • ... 디버거로 코드단계별 로 실행하십시오.

올바른 결과를 얻으려면 자신을 다시 평가해야하므로 비웃음입니다. 지식이 풍부한 사람에 의한 직접적인 멘토링은 일반적으로 더 낫습니다. 물론 방금 배운 것을 재 구현하여 얻은 지식에 대한 자신의 검증이 뒤 따릅니다. 예를 들어 포인터에 대한 링크 된 목록).

크레딧 : Nupul (다이어그램 용)


2
+1! 이야기하기 전에 화이트 보드를 사용해 '스케치 아웃'해보십시오 (또는 누군가와 대화 할 때 화이트 보드를 편리하게 유지하십시오)
PhD

1
"디버거로 코드를 단계별로 실행"하려면 +1입니다. 간단한 디버깅 도구를 사용하여 많은 개념에 대해 배웠습니다.
funkymushroom

@Nupul : 좋은 제안이 추가되었습니다.
haylem

@ funkymushroom : 실제로, 나는 보통 당신이 실제로 이런 식으로 개념을 배우지 않는다고 말하고 싶습니다. 그러나 그것은 당신 바로 앞에있을 때 "안개를 들어 올리는"데 도움이되고, 당신은 무언가에 너무 집중되어 있거나 당신의 마음이 튀겨지기 때문에 조각들이 함께 오는 것을 볼 수 없었습니다. 일반적인 개념보다 일반적인 알고리즘 문제를 이해하는 것이 더 도움이됩니다.
haylem

화이트 보드와 대화하는 것이 저에게 도움이되었습니다.
Peter

5

내 경험상 그것은 입력과 피드백에 관한 것입니다. 가능한 많은 양식을 입력하고 최대한 빨리 실수에 대한 피드백을 원합니다.

경험상 CS 학위는 매우 건조하고 공식적이며 프로그래밍을 가르치는 데 전혀 가치가 없었습니다. 나는 일주일에 2 ~ 3 회 강의에 참석했는데, 만약 당신이 그것을 얻지 못하면, 그것은 강의입니다. 강사는 다른 수업을 가지고 있으며 당신을 도울 수 없습니다. 그리고 한 사람은 그것을 특정한 방식으로 이해하고 그것을 특정한 방식으로 가르 칠 것입니다. 그래서 당신이 그를 그렇게 생각하지 않는다면 결코 그것을 얻지 못할 것입니다. 더 나쁜 것은 그가 10 억 가지의 다른 관련 개념을 이해했을 가능성이 있기 때문에, 다른 개념들과 관련하여 틀을 잡을 가능성이 높다는 것입니다. 이것은 다른 개념들과도 잘 맞을 수도 있고, 또는 과정 자료에는 없을 수도 있습니다.

Stack Overflow에 가서 C ++ 채팅 채널에서 5 분 만에 5 가지 다른 설명을 얻었습니다. 그들은 모두 나에게 구체적으로 맞춰졌고 내가 가진 정확한 문제이기 때문에 그들 중 하나가 나를 위해 집에 와서 그것을 얻은 것은 놀라운 일이 아닙니다. 여러 전문가로부터 실시간 피드백을받는 방법을 배울 수있는 비율은 마른 종이 소스에서 얻을 수있는 것보다 훨씬 높습니다.

따라서 이상적으로는 휴식을 취하면 더 나은 행동을 취하지 않고 대화를 나누는 중소 규모의 비슷한 생각을 가진 사람들을 찾을 수 있습니다. 그런데 Stack Overflow는 이런 종류의 고품질 고속 개인 피드백을 얻을 수 있는 훌륭한 장소입니다.


3

어떤 순서로도 책, 친구 및 잘 문서화 된 코드를 읽는 것이 좋은 소스입니다. 연습은 배우는 유일한 방법입니다. 작은 단위 테스트를 작성하십시오. 예를 들어, 포인터의 경우 문자열을 처리하는 코드를 작성하십시오. 문자열 반전, 문자열의 각 단어 반전, 회문 테스트, 문자를 숫자로 대체 ...

stackexchange에 대해 질문하십시오 ...;>


2

연습은 완벽합니다! (어쨌든 더 낫습니다). 계속 노력하고 가능한 한 많은 다른 출처와 감각을 사용하십시오.

출처 : 책, 인터넷, 사용자 그룹, 친구, 비디오 학습, jsfiddle (대부분 html),
Rubular (루비 표현식), SQL을 시험해보기위한
SQlzoo , 자바 스크립트 용
jslint ,
코드 패드 와 같은 작은 '비트'비트를 테스트 할 수있는 사이트 사용 많은 언어를 위해.

추상적 인 것들을 기억하기 위해 니모닉을 고려하십시오-의사는 그것들을 사용합니다!

평생 학습자라고 생각하고 겸손하게 지내면 멀리 갈 수 있습니다.


1
"연습"+1 그러나 니모닉. 그들은 대체 할 수 없으며 이해를 대체하지 않아야하는 매우 불충분 한 목발입니다. 실제로, 그들은 이해의 부재를 표시합니다. “닥터는 그것들을 사용합니다”그들은 너무 짧은 시간에 너무 많은 단절된 사실을 배우도록 강요하기 때문입니다. 우리는 의사를위한 우리의 교육이 엉망이라는 사실에 천천히 다가오고 있으며, 예를 들어 미국은 교육을 완전히 개편하기 시작했습니다. 니모닉은 해결책이 아니며 문제의 일부입니다. 당신이 그들을 사용하는 것을 발견하면, 당신은 이해하지 못했습니다.
Konrad Rudolph

1

5 분이 아닌 잠시 동안 포커스를 변경해야합니다. 또는 5 시간 ... 나는 그 코드를 보지 않고 하루와 같은 것을 의미합니다 .... 그것에 대해 진정하십시오 ... 다른 것을 읽으십시오 ...

당신 지금 그것을 이해해야한다면 ... 친구로부터 도움을 요청하거나 여기 =)


1

IT의 다른 모든 사람들이하는 일.

검색 엔진을 사용하여 처음 이해하고 싶은 주제를 다시 방문 할 때까지 이해하지 못하는 관련 개념을 찾아 봅니다.

스택, 힙, 자동 변수, C ++ 컴파일 프로세스, 어셈블리, 관리되는 메모리 및 관리되지 않는 메모리를 완전히 이해하지 못할 수도 있습니다.

이것들과 다른 포인터 관련 개념에 대한 더 명확한 설명은 아마도 모든 것을 정리할 것입니다.


1

주제를 이해하는 확실한 방법은 없습니다. 당신의 성공은 당신이 공부할 때 얼마나 많은 맥락을 가지고 있는지에 달려 있습니다. 당신의 관점을 염두에두고 설명 할 사람을 찾는 것은 매우 운이 좋을 것이다. 튜링 기계와 마찬가지로 누구나 다른 사람들이 아는 것을 배울 수 있으며, 좌절이 당연하다는 것은 끈기와 수용의 문제 일뿐입니다.

포인터로 인한 엄청난 어려움을 기억합니다. 그것은 매우 참을성있는 친구가 내가 그것을 이해 한 완전한 바보 인 것처럼 나에게 설명하기 전까지는 아니었다. 그것은 때때로 필요합니다.


1

이것은 배우고 가르치는 데 일반적인 문제입니다. 다른 사람들이 말했듯 이이 문제를 해결할 수있는 확실한 방법은 없습니다. 우리의 두뇌가 미묘하지만 결정적인 방식으로 다르게 연결되어 있기 때문에 우리 모두가 다르게 배우는 것은 근본적인 진실입니다.

학습은 새로운 뉴런 연결을 생성합니다. 신경 과학에 너무 많이 들어 가지 않고 (내가 아무것도 모르는) 새로운 연결을 만들려면 다른 사람들을위한 개념에 다른 종류 의 노출이 필요합니다 . 여러 가지 각도를 시도하고, 다른 설명을 읽고, 듣고, 봅니다. 연습!

그래도 문제가 해결되지 않으면 문제를 해결하십시오. 일단 퍼즐을 획득하면 원래 문제가 분명해 보이는 퍼즐의 다른 부분이 누락되었을 수 있습니다.

아하 알아요 ! 순간? 두뇌가 새로운 연결을 만들었을 때입니다. 이것이 학습이 이루어지는 방식입니다.

덧붙여서, 좋은 선생은 이것을 알고 있습니다. 기술 문서 작성 지침에는 종종 모든 개념을 다른 단어를 사용하여 (그리고 아마도 그 사이에 약간의 텍스트를 사용하여) 적어도 두 번 설명해야한다고 명시되어 있습니다. 주의를 기울이면 모든 훌륭한 과학 작가들이이 규칙을 따른다는 것을 알 수 있습니다.

아아, 너무 많은 선생님들이 그것을 무시하고 한 번만 설명하십시오. 그리고 그들이 큰 은유로 우아한 설명을 찾는 데 성공하더라도 이것은 충분하지 않습니다.


0
  1. 관련 문서와 Google의 의심을 읽으십시오.

  2. 코드 예제를 작성하고 그들이하는 일을보십시오.

  3. 디버그에서 코드를 실행하고 단계별로 살펴보십시오.

  4. 그래도 특정 행동을 이해하지 못한다면, 직접 방문하거나 이와 같은 웹 사이트를 통해 누군가에게 물어보십시오. 위의 모든 것을 시도했다면 좋은 질문을 구성 할 수있는 모든 요소가 있어야합니다. 부끄러워하지 마십시오 :)

다른 사람들이하는 일과 거의 비슷하다고 생각합니다.


0

계속 연구하고 배우십시오. 프로그래밍의 다른 여러 측면에서 동일한 문제가 발생했습니다. 그러나 다른 사람들과 이야기하고 기사를 읽는 것은 결국 "AHA"순간으로 이어집니다. 일반적으로 내가 따라갈 수있는 정보를 제공하는 다른 블로그 게시물 또는 SO 답변입니다.

기본적으로, 계속 이해하고 올 이해에 인내하십시오.

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