원래 질문
나는 현재 동생에게 프로그램을 가르치는 일에 종사하고 있습니다. 그는 완전 초보자이지만 매우 똑똑합니다. (그리고 그는 실제로 배우기를 원합니다). 나는 우리의 세션 중 일부가 사소한 세부 사항으로 혼란에 빠졌음을 알았으며 매우 조직적이라고 생각하지 않습니다. ( 그러나이 게시물에 대한 답변은 많은 도움이되었습니다. )
효과적으로 가르치려면 어떻게해야합니까? 개념별로 개념을 실행하는 데 사용할 수있는 논리적 순서가 있습니까? 나중에까지 피해야 할 복잡성이 있습니까?
우리가 사용하는 언어는 Python 이지만 모든 언어로 조언을 환영합니다.
돕는 방법
좋은 것이 있다면 답에 다음을 추가하십시오.
- 초보자 연습 및 프로젝트 아이디어
- 초보자 교육을위한 자료
- 스크린 캐스트 / 블로그 게시물 / 무료 전자 책
- 초보자에게 좋은 책을 인쇄하십시오
살펴볼 수 있도록 링크와 함께 리소스 를 설명하십시오 . 나는이 아이디어 중 일부를 확실히 사용하고 있다는 것을 모든 사람들이 알고 싶어한다. 귀하의 제출물이이 게시물에 집계됩니다.
초보자를위한 온라인 자료 :
- 파이썬을 이용한 프로그래밍에 대한 부드러운 소개
- 컴퓨터 과학자처럼 생각하는 방법
- 앨리스 : 초보자를위한 3D 프로그램
- 스크래치 (프로그래밍 기술을 개발하는 시스템)
- 프로그램 설계 방법
- 컴퓨터 프로그램의 구조와 해석
- 프로그램 배우기
- Robert Read의 프로그래머가되는 방법
- 마이크로 소프트 XNA
- 차세대 해커 생성
- COMP1917 Richard Buckland의 고급 컴퓨팅 강의 (iTunes 필요)
- 파이썬으로 뛰어 들다
- 파이썬 위키 북
- 프로젝트 오일러 -표본 문제 (대부분 수학)
- pygame-게임 을 만들기위한 쉬운 파이썬 라이브러리
- 파이썬으로 자신 만의 컴퓨터 게임을 만들어보세요
- 기본을 넘어 다음 단계를위한 프로그래밍 기초.
- 예를 들어 찍어
- 어린이를위한 뱀 랭 글링 ( 어린이를위한 것이 아닙니다!)
초보자를위한 권장 인쇄 책
답변
나는 몇몇 초보자 (코드 라인을 작성하지는 않았 음) 프로그래머들과 함께 일해야했으며 올 가을 고등학생들과 함께 방과 후 워크숍을 진행할 것입니다. 이것은 내가 문서화에 가장 가까운 것입니다. 아직 진행중인 작업이지만 도움이 되길 바랍니다.
1) FizzBuzz. 명령 행 프로그램으로 시작하십시오. 재미있는 게임이나 도구를 매우 빠르게 작성할 수 있으며 GUI 도구를 먼저 배우지 않고도 모든 언어 기능을 매우 빠르게 배울 수 있습니다. 이 초기 앱은 작동하기 위해 실제 디버깅 도구를 사용할 필요가 없을 정도로 단순해야합니다.
FizzBuzz와 같은 것이 좋은 프로젝트가 아니라면. 처음 몇 개의 앱은 DB, 파일 시스템, 구성 등을 다루지 않아도됩니다. 이것들은 대부분의 사람들을 혼란스럽게하는 개념이며, 구문과 기본 프레임 워크 기능을 배우는 경우 실제로 더 복잡하지 않아도됩니다.
일부 프로젝트 :
- 안녕하세요 세계!
- 내 출생 연도를 취하고 내 나이를 계산하십시오 (지금은 그때 수정하지 않음). (간단한 수학, 입력, 출력)
- 방향 (위, 아래, 왼쪽, 오른쪽)을 요청한 다음 사용자에게 자신의 운명을 알려줍니다 (구멍에 빠지거나 케이크 찾기 등). (부울 논리)
- FizzBuzz이지만 매초 한 번씩 계산합니다. (루프, 타이머 및 기타 로직)
- 나이에 따라 실제로는 일정한 간격으로 사용자를 무작위로 모욕하는 앱과 같습니다. (간격을 무작위로 만드는 경우 루프, 배열, 타이머 및 임의)
2) 간단한 프로젝트 일단 언어 기능을 잘 이해하면 프로젝트를 시작할 수 있습니다 (간단하고 재미있는 게임이 효과적입니다). 6-12 시간 내에 첫 번째 프로젝트를 완료 할 수 있도록해야합니다. 일찍 설계하는 데 시간을 소비하지 마십시오. 빨려도 디자인 할 수 있습니다. 문제가 발생하면 어떤 일이 발생했는지, 왜 실패했는지 이야기 한 다음 다른 주제를 선택하여 다시 시작하십시오.
여기에서 도구의 디버깅 기능을 소개합니다. 코드를 읽음으로써 문제를 볼 수 있더라도 도구 사용법을 알려주고 어떻게 볼 수 있는지 보여 주어야합니다. 이는 디버깅 도구를 가르치고 도구없이 오류를 식별하는 방법을 가르치는 두 가지 목적을 수행합니다.
한 번 또는 프로젝트가 작동하면 리팩토링 도구를 소개하는 데 사용할 수 있습니다. 계획하지 않은 몇 가지 간단한 기능으로 프로젝트를 확장 할 수 있으면 좋습니다. 일반적으로 리팩토링과 상당한 디버깅이 필요합니다. 처음에는 절반 정도의 코드를 작성하는 사람이 거의 없기 때문입니다.
일부 프로젝트 :
- 행맨 게임
- 로봇 공학 실험 ( Vex 및 Mindstorms 는 옵션 임)
3) 실제 프로젝트 시간이 걸릴 수있는 실제 프로젝트를 시작하십시오. 적절한 소스 컨트롤을 사용하고 일정을 잡으십시오. 도구를 다루는 좋은 경험이 없다면이 프로젝트를 실제 프로젝트처럼 실행하십시오.
분명히 각 사람마다 이것을 조정해야합니다. 내가 찾은 가장 중요한 것은 첫 번째 간단한 앱조차도 사람이 관심있는 것에 적용하는 것입니다.
일부 프로젝트 :
- 테트리스
- 텍스트 파일 기반 블로그 엔진
- 보다 진보 된 로봇 작업
답변
Alice를 사용해보십시오 . 입문 프로그래밍 클래스에서 사용하도록 설계된 3D 프로그램입니다.
새로운 프로그래머에게 가장 큰 장애물 두 가지는 다음과 같습니다.
- 구문 오류
- 동기 부여 (기여하기보다는 의미 있고 재미있는 것을 쓰는 것)
Alice는 프로그램 구성을 위해 끌어서 놓기 인터페이스를 사용하여 구문 오류 가능성을 방지합니다. Alice를 사용하면 3D 세계를 구성하고 코드 제어 (간단한) 3D 캐릭터 및 애니메이션을 사용할 수 있습니다. 이는 일반적으로 링크 된 목록을 구현하는 것보다 훨씬 흥미 롭습니다.
숙련 된 프로그래머는 Alice를 장난감으로 생각하고 코드 줄을 끌어다 놓는 데 비웃을 수 있지만 연구 결과에 따르면 이러한 접근 방식이 효과적입니다.
면책 조항 : 나는 Alice에서 일했습니다.
답변
기본 개념을 얻으려면 로고 (일명 거북이)를 추천합니다. 즉각적인 그래픽 피드백을 제공하는 우수한 샌드 박스를 제공하며 루프, 변수, 함수, 조건 등을 정리할 수 있습니다. 이 페이지 는 훌륭한 자습서를 제공합니다.
로고 다음에 Python 또는 Ruby로 이동하십시오. 프로그래밍을 가르치기 위해 고안된 ABC에 기반한 파이썬을 추천합니다.
프로그래밍을 가르 칠 때는 간단한 프로젝트에 대한 EHaskins의 제안과 복잡한 프로젝트에 대해 두 번째로 제안해야합니다. 배우는 가장 좋은 방법은 확실한 결과와 측정 가능한 이정표로 시작하는 것입니다. 그것은 수업에 초점을 맞추고, 학생이 기술을 쌓고 그 기술을 쌓을 수있게하며, 학생들에게 친구들에게 보여줄 무언가를줍니다. 자신의 작품에 보여줄 무언가를 갖는 힘을 과소 평가하지 마십시오.
이론적으로 파이썬은 거의 모든 일을 할 수 있기 때문에 파이썬을 고수 할 수 있습니다. 객체 지향 프로그래밍과 (대부분의) 알고리즘을 가르치는 좋은 수단입니다. 명령 행과 같은 대화식 모드에서 Python을 실행하여 작동 방식에 대한 느낌을 얻거나 전체 스크립트를 한 번에 실행할 수 있습니다. 스크립트를 즉석에서 실행하거나 바이너리로 컴파일 할 수 있습니다. 기능을 확장하기 위해 수천 개의 모듈이 있습니다. Windows에 번들로 제공되는 것과 같은 그래픽 계산기를 만들거나 IRC 클라이언트 등을 만들 수 있습니다.
XKCD 는 파이썬의 힘을 조금 더 잘 설명합니다 :
파이썬이 가지고 있지 않은 것을 많이 제공하지는 않지만 C #이나 Java로 옮길 수 있습니다. 이것의 장점은 많은 언어가 사용하는 C 스타일 구문을 사용한다는 것입니다. 아직 메모리 관리에 대해 걱정할 필요는 없지만 언어 통역사로부터 좀 더 자유롭고 손을 잡는 데 익숙해 질 수 있습니다. 파이썬은 공백과 들여 쓰기를 강제합니다. 이것은 항상 좋은 것은 아니지만 항상 그런 것은 아닙니다. C # 및 Java를 사용하면 강력한 형식을 유지하면서 자신의 공백을 관리 할 수 있습니다.
거기에서 표준은 C 또는 C ++입니다. 이러한 언어의 자유는 거의 실존 적입니다. 이제 자신의 메모리 관리를 담당하고 있습니다. 도움이되는 가비지 콜렉션이 없습니다. 여기서는 정말 고급 알고리즘 (예 : mergesort 및 quicksort)을 가르칩니다. 여기에서 “세그먼트 결함”이 저주 인 이유를 배울 수 있습니다. 여기에서 리눅스 커널의 소스 코드를 다운로드하여 Abyss를 살펴보십시오. 문자열 처리를위한 순환 버퍼와 스택을 작성하여 시작하십시오. 그런 다음 길을 따라 가십시오.
답변
좋은 파이썬 코스는 MIT의 Python을 사용한 프로그래밍 소개 입니다. 온라인으로 모두 무료이며, 그것을 이해하기 위해 MIT 학생 일 필요는 없습니다.
[ 저스틴 표준 ] 편집
이 과정은이 무료 온라인 서적을 사용합니다 : 컴퓨터 과학자처럼 생각하는 방법
확실히 유용합니다.
답변
Python 패키지 VPython- 일반 필사자를위한 3D 프로그래밍 ( 비디오 자습서 ).
from visual import *
floor = box (pos=(0,0,0), length=4, height=0.5, width=4, color=color.blue)
ball = sphere (pos=(0,4,0), radius=1, color=color.red)
ball.velocity = vector(0,-1,0)
dt = 0.01
while 1:
rate (100)
ball.pos = ball.pos + ball.velocity*dt
if ball.y < ball.radius:
ball.velocity.y = -ball.velocity.y
else:
ball.velocity.y = ball.velocity.y - 9.8*dt
답변
Python에서 Turtle 그래픽으로 시작하십시오.
파이썬에서 표준으로 제공되는 거북이 그래픽을 사용합니다. 시각적이고 단순하며이 환경을 사용하여 구문에 너무 많이 들어가기 전에 반복 및 프로 시저 호출과 같은 많은 프로그래밍 개념을 도입 할 수 있습니다. 파이썬에서 다음 대화식 세션을 고려하십시오.
>>> from turtle import *
>>> setup()
>>> title("turtle test")
>>> clear()
>>>
>>> #DRAW A SQUARE
>>> down() #pen down
>>> forward(50) #move forward 50 units
>>> right(90) #turn right 90 degrees
>>> forward(50)
>>> right(90)
>>> forward(50)
>>> right(90)
>>> forward(50)
>>>
>>> #INTRODUCE ITERATION TO SIMPLIFY SQUARE CODE
>>> clear()
>>> for i in range(4):
forward(50)
right(90)
>>>
>>> #INTRODUCE PROCEDURES
>>> def square(length):
down()
for i in range(4):
forward(length)
right(90)
>>>
>>> #HAVE STUDENTS PREDICT WHAT THIS WILL DRAW
>>> for i in range(50):
up()
left(90)
forward(25)
square(i)
>>>
>>> #NOW HAVE THE STUDENTS WRITE CODE TO DRAW
>>> #A SQUARE 'TUNNEL' (I.E. CONCENTRIC SQUARES
>>> #GETTING SMALLER AND SMALLER).
>>>
>>> #AFTER THAT, MAKE THE TUNNEL ROTATE BY HAVING
>>> #EACH SUCCESSIVE SQUARE TILTED
마지막 두 가지 과제를 수행하려고 시도하면 많은 실패한 시도가 있지만 실패는 시각적으로 흥미로울 것이며 예상 한 결과를 얻지 못한 이유를 알아 내려고 시도하면서 빠르게 배우게됩니다.
답변
중요한 것은 문제의 사람이 해결할 문제가 있다는 것입니다. 작성하고 싶은 프로그램이없고 “다음 퀘이크를 쓰고 싶지 않다!”가 아니라 현명하고 잘 정의 된 프로그램이 없다면, 동기 부여 할 것이 없기 때문에 프로그램을 배울 수 없다 . 책을 읽고 언어의 구문과 의미를 대략적으로 이해할 수 있지만, 원하는 프로그램을 만들 때까지는 쐐기풀을 잡지 못할 것입니다.
그 자극이 존재한다면 다른 모든 것들은 사소한 세부 사항 일뿐입니다.