제가 대학에있을 때는 다른 과정들 중에서 프로그래밍 과정을 소개하는 교사였습니다. 설명하는 문제는 드문 일이 아닙니다. 특정 역할이 무엇인지에 따라 다른 접근 방식이 필요할 수 있습니다.
첫째, 이것이 수업 시간에 학생들의 상당 부분에 영향을 미치는 광범위한 문제라면, 그렇게 할 수 있다면, 교수가 접근하지 못하는 개념에 대한 구체적인 피드백을 가지고 교수에게 접근 할 것입니다. 그녀는 학기 중에 다시 나타날 때 해당 자료에 대한 추가 검토를 통합하거나 향후 학기 동안 교과 과정을 개선 할 수 있습니다.
실습 시간 외에 코스에 대한 토론 섹션을 가르치면 강의에서 혼란 스러웠던 사항에 대해 설명하고보다 구체적으로 설명하고 기본 사항을 모두 이해할 수있는 멋진 시간입니다.
이 학생들과 함께 일하는 유일한 시간이 과외 실험실에서 근무하는 경우에도이 시간을 사용하여 학생들에게 일대일 또는 한 번에 몇 명씩 학생들을 이해하기 위해 필요한 개념적 빌딩 블록을 가르 칠 수 있습니다 그들의 숙제를 완료하십시오.
그들은 수업 시간에 너무 길을 잃어 버릴 수도 있습니다. 이 경우 기본 사항으로 돌아가십시오. 그들이 무슨 일이 있었는지 마지막으로 이해했을 때 과정의 어디에 있었습니까? 그들이 확실하지 않거나 "아무도"이해하지 못한다면, 여러분은 Hello world를 설명하기 시작하여 변수가 무엇인지, 컴퓨터가 "명령"목록을 가져 오는 방법 등을 가르치기 시작해야합니다. 그것들을 순서대로 수행하되, 컴퓨터는 우리처럼 "똑똑한"것이 아니기 때문에 당신은 매우 문자 그대로 컴퓨터가 이해하기에 적합한 것을 말해야합니다
그것은 실제로 비 주요 프로그래밍 과정에서 자주 보았던 투쟁과 좌절의 포인트입니다. 학생들은 몇 가지 코드를 작성합니다. "정확한"것처럼 보이지만 컴파일을 시도하면 매우 암호 오류가 발생합니다. 그리고 무엇이 잘못되었는지 전혀 모릅니다. 그리고 몇 시간 동안 코드를 응시하십시오. 그런 다음 그것이 세미콜론이 없거나 잘못된 장소에 버팀대처럼 사소한 것처럼 보이는 것이 무엇인지 알아냅니다. 그런 다음 다시 컴파일하고 여전히 오류가 있습니다. 다른 것입니다. 두 번째로 변수 이름을 다르게 사용했습니다. 등등. 그래서 그들은 친구 나 튜터 또는 누군가에게 도움을 요청하고, "아, 거기에 추가하면 효과가있을 것입니다." 그들의 경험은 프로그래밍이 "신비한"것입니다
그것은 당신이 도울 여지가 많은 가정교사로서의 영역입니다. 좌절 수준에 따라 코드가 작동하지 않는 이유를 파악하는 데 도움이되는 다른 접근법이있을 수 있습니다. 그들이 그것을 얻는 종류의 경우, 나는 그들에게 힌트를주고 그들 스스로 알아 내도록 도울 수 있습니다. 그러나 그들이 좌절을 포기할 준비가 됐다는 생각이 든다면, 나는 종종 그들에게 몇 가지 공짜 답변을 제공하고 최소한 "이 변경으로 인해 왜 프로그램이 수정되었는지 이해합니까? ? "
일부 학생들, 특히 전공이 아닌 학생들에게는 좋은 프로그래머가되거나 프로그래밍을 즐기는 데 필요한 세부 사항에 대한 체계적인 관심이 없을 수 있습니다. 세부 사항에주의를 기울이는 데 도움이되는 전략을 통해 문제를 파악하고 문제가있는 경우에도 문제를 해결할 수있는 방법론적일 수 있습니다.
그러나 학생들이 자신의 코드를 "적절하게"들여 쓰는 것에 대해 항문을 유지하는 경우가 많기 때문에 초보자 프로그래머는 일치하지 않는 괄호 등이 있기 때문에 중첩 및 범위에 문제가 생길 수 있습니다. 모든 코드를 올바르게 들여 쓰고 중괄호가 일치하는지 확인하는 등 "프로그램이 컴파일되지 않을 때 확인할 사항"체크리스트를 제공하십시오. 모든 행은 세미콜론으로 끝나고 특히 첫 번째 오류가 표시되는 행 번호 주위에 있어야합니다 등
일찍 컴파일하고 자주 컴파일하도록 가르치십시오. 최소 스켈레톤 코드 (예 : hello world)를 작성하고 컴파일 / 테스트하십시오. 몇 줄을 추가하고 다시 컴파일하십시오. 큰 버킷이 아닌 작은 변경 내용 만보고 있으면 오류를 훨씬 쉽게 찾을 수 있습니다.
문제를 더 작은 해결 가능한 문제로 나누는 방법을 배우도록 도와줍니다. 이것은 우리가 해결할 방법을 모르는 훨씬 더 어려운 문제를 해결하는 전문 프로그래머와 같은 일입니다. 해결 방법을 알고 있거나 해결 방법을 배우기 위해 연구를 수행 할 수있을 때까지 계속 조각으로 나눕니다. "작동하는 솔루션을 얻기 위해 어떤 단계를 수행해야합니까?" 먼저, 스켈레톤 코드 (hello world)가 필요합니다. 그렇게하는 방법을 알고 있습니까? 예, 좋습니다. 대화를 마치면 시작할 수 있습니다. 그런 다음 파일을 입력으로 읽어야합니다. 4 장에서 읽은 것을 기억하십니까? 그렇지 않습니까? Hello world를 실행 한 후 살펴 보시고 그 작업을 얼마나 가까이 할 수 있는지 확인한 다음 다시 전화 해주세요. 당신이 그것에 붙어 때 더 도움이 될 것입니다. 처음 몇 번은 문제를 해결하는 데 필요한 단계를 번호 목록으로 작성하여 문제를 분해하는 방법을 예제에서 배울 수 있습니다.
학생들이 수업 시간에 모든 자료가 아닌 일부를 얻는다면, 수업 시간에 질문을하도록 장려하십시오. 10 명 중 9 번은 이해하지 못하는 유일한 학생이 아니기 때문에 교수는 아마도 중요한 것에 대해 단지 글로시했을 것입니다.
만약 그들이 하나의 버그를 쳐다 보면서 "시간"을 소비하고 있지만 그것을 알아 내지 못한다면, 그것은 시간 낭비이며, 많은 것을 배우지 못하고 있습니다. 종종 버그는 통찰력 문제이며,이를 해결하기 위해 올바른 통찰력을 얻는 문제이며, 이러한 유형의 문제에 대한 방해가 없을 수도 있습니다. 갇힐 때 취할 수있는 다른 일반적인 접근 방법을 제안하십시오 : 반 친구에게 도움을 요청하고 (필요한 경우 일부 반 친구를 알아 가십시오) 숙제를 미리 시작하여 멈출 시간이 있고 나중에옵니다. 튜터 랩을 열고 영업 시간 동안 질문을하거나 교수의 근무 시간으로 이동하십시오. 그들이 암기 과목에 잘 맞는 벼락치기에 익숙하다면, 그들은 때 좌절의 벽에 부딪 칠 것입니다 암기보다 문제 해결에 관한 프로그래밍에 직면했다. 교과서, 스택 오버 플로우 등에서 구문의 예를 찾는 방법을 보여줍니다. 개인 수업 질문 포럼 (있는 경우)에 질문을 게시하도록 권장합니다.
코드 작동이 중지되는 위치를 좁히는 방법을 가르쳐주십시오. 당신이 실행하는 무언가로 돌아올 때까지 물건을 주석 처리 한 다음 다시 segfault를 얻을 때까지 물건을 천천히 다시 추가하십시오.
이러한 아이디어가 많이 나오면 유인물로 바뀔 수 있습니다. 전략은 일반적으로 교수가 선호하는 부분입니다. 문법, 루프, 배열, I / O 작성 방법의 의미에 시간을 소비하고 있습니다. 그러나 "시도 할 때 어떻게해야합니까?" 코드를 실행하는데 컴파일되지 않거나 충돌하지 않습니까? "
"변수 란 무엇인가"또는 "루프는 무엇인가?"와 같은 개념적인 것, 특히 기본에 관해서는 그들이 코스의 나머지 부분을 따라 가지 못하도록 이해하지 못한다. 강의 중심 과정에서 교수는 모든 질문에 대답 할 시간이 없거나 모든 학생에게 전구가 벗겨 지도록 도울 시간이 없을 수 있습니다. 그리고 이것이 튜터들이 프로그래밍 학습에 매우 중요한 이유의 일부입니다. 특정 주제를 구체적으로 만들기 위해 추가 유추가있는 개별 교육이 필요할 수 있습니다.
당신이 C ++로 가르치고 있기 때문에 클래스가 일부 학생들이 "얻기"위해 애쓰는 추상적 인 주제라고 생각합니다. 종종 클래스의 추상화는 "ATM 기계"와 같은 임의의 실제 세계 객체에 해당하는 예제로 진행되며 실제 세계 객체와 유사합니다. 내부에 돈이 얼마나 있는지 추적하는 변수가있을 수 있고, atm 기계에 특정 조건에 대응하는 방법 등을 알려주는 규칙과 같은 방법이 있습니다. 때로는 하나의 유추가 특정 사람을 위해 "고착"하는 것입니다. 다른 학생들은 다른 것을 더 잘 이해합니다.
가능할 때마다 그림을 그리십시오. 그들이 작성하는 코드의 큰 그림을 볼 수 있도록 시간이 지남에 따라 일어나는 일의 시퀀스 다이어그램처럼 사용자가이 버튼을 클릭합니다. 그런 다음 x, y 및 z를 수행하여 프로그램이 응답해야합니다. 우체국에는 하나의 숫자 만 가질 수있는 사서함 상자와 같은 배열을 그리고 상자 앞면의 "주소"를 가리키는 화살표와 같은 포인터를 그립니다. 기타.