虽然世界这么乱,但说好的教案还是来了。
先说点废话,昨天给两个小朋友上了第一堂课,1个多小时的时间很快就过去了。主要原因是编程说到底是个习练的过程,需要自己上手试。看别人敲代码和自己试是两个完全不同的体验。
这两个小朋友都10岁,都有一些简单的编程背景,即知道scratch,知道基本的操作。所以python对他们来说没那么抽象。
如果你是自己参考这个教案教授自家小朋友,且自家小朋友0基础,肯定需要家长花些时间在这上面。所以这是为什么我上一篇文章说我不知道这到底是解救了家长还是害了家长。
但是如果你家小朋友对编程有一点基础,或者没有基础但是感兴趣,我尽力把教案写的可以让小朋友自己理解。
有不少家长问能不能开直播,我仔细想了想,很难。
我最初教python是在cmu时,python这门课是计算机学院本科生第一门入门课。
关于这门课,我写过一篇文章详细的介绍。
全美最好的五门计算机课程之一——CMU15112
为了给两个小朋友开课,我参考了Kosbie的教案,特此鸣谢Prof. Kosbie。他的课程全部内容包括讲义作业测验都是公开的,如果想学习的大朋友也可以自己去看,他现在也公开了每一个内容的视频讲解。
https://www.cs.cmu.edu/~112/schedule.html
但是对小朋友来说,讲算法和数据结构的意义是不大的,并且如果上来花很多时间讲基本的理论知识估计也会略显枯燥。对小朋友来说,能做个图形界面的游戏是最直观的,而python恰恰可以实现这一点,基本的理论知识可以贯穿在每一个图形界面的讲解里。
基于这样的教学目的,我的第一课内容就敲定了。
后台有些非小朋友想要学习,我建议可以看?Kosbie的课程链接。
或者可以在coursera上看python的课,为了准备小朋友们的课,我也看了下多伦多大学的一门网课,这门课我当初学python时候看过,简单易懂,不要课程认证的话也是免费的。
链接在这:https://www.coursera.org/learn/learn-to-program/home/welcome
最后,我想再强调一下,编程是一门实际操作课,所以一定一定要自己动手,每次结束后把每一段程序自己跑一下,把作业完成,这样你才能看到进步。
准备工作
安装python: https://www.python.org/downloads/
安装VS code:https://code.visualstudio.com/download
VS code配置:https://www.cs.cmu.edu/~112/notes/notes-getting-started-with-vscode.html
课程目标
Write clear, robust and efficient code i python using:
(能用python写清楚有效可靠的代码,学习内容如下, 其中O代表可选内容,要根据学校停课时间和小朋友的学习进度来看)
[M]sequential, conditional, and loop statements
[M]strings, lists, tuples, sets, and dictionaries
[M]graphics and interaction
[O]object and class
[O]recursive
Design and implement your own game
(这是15112的一次作业,那时我们住在匹兹堡松树山5537 Covode,是一个一年四季都有各种小动物的地方,窝在我们没有床架只有床垫的“床”上,写完了这个游戏。zz作为第一个用户,立志把蛇布满整个屏幕,他也的确成功了。)
第一课
print (试)
print("hello world!")
Comment (不执行,让小朋友们试,发现什么也没发生)
# print("hello world!")
Importing Modules(为接下来画图做准备,类比打游戏装备包)
from tkinter import *
Syntax, Runtime, and Logical Errors (讲解不同类型的错误,教小朋友学会看错误信息,毕竟以后是他们要debug)
# Syntax Errors (Compile-Time Errors)Print(“hello)# Runtime Errors ("Crash") print(1/0)# Logical Errors (Compiles and Runs, but is Wrong!)print(“2+2=5”)
Basic console input(第一次人机互动)
# Input a string from keyboardname = input("Enter your name: ")print("Your name is:", name)
DataTypes(讲解数据类型,对float小朋友们没概念,他们知道小数,说清楚)
x = 42 # intprint(x)x = 42.5 # float print(x) 讲解值overwritez = "Hello World" # string
Graphics (激动人心的图形来了,重点,一定要小朋友自己试!换个颜色,画个正方形,五边形,椭圆,讲解canvas坐标(左上是(0,0))。不得不说我不知道4年级的小朋友还不知道xy轴,也许国内的小朋友会知道?图形果真是小朋友最爱,我听到小朋友画出来时开心的喊yeah,替他们莫名的开心!)
from tkinter import * #The tkinter module, containing the Tk toolkit, has always to be imported.root = Tk() # To initialize tkinter, we have to create a Tk root widget, which is a window with a title bar and other decoration provided by the window manager. The root widget has to be created before any other widgets and there can only be one root widget.canvas = Canvas(root, width=300, height=200) # need a canvas to drawcanvas.create_oval(100, 50, 300, 250, fill="yellow") # draw a circlecanvas.create_polygon(50,30,150,50,250,30, fill="green") # draw a trianglecanvas.pack() # The pack method tells Tk to fit the size of the window to the given text.root.mainloop() # The window won't appear until we enter the Tkinter event loop
感觉没有多少东西,一个小时就过去了。
看上去没几行代码,但是有很多细节需要和小朋友讲清楚。
然后就是激动人心的作业时刻了。
Homework
drawCircle
drawArrow
关于作业
作业要覆盖课程基本内容
但不能是课程内容的简单重复
我们小时候的作业多数练习的是举一反三的能力,比如老师教了1+2=3,作业就会留1+2=?2+1=?这有好处就是巩固了知识,但是缺点也很明显,就是小朋友没有探索的空间。对于现在小朋友来说,网络如此发达,要教会他们使用搜索引擎,具体来说就是google和stackoverflow,有了问题,学会自己去解决。
比如课堂上我并没有教他们怎么在画板里写字,也没有告诉他们怎么样去掉图形的边线,希望他们可以自己搞清楚。
所谓学习,学的不应该只是一种技术,而更应该是一种思维方式。
突然觉得自己是个不错的老师。
大娃昨天上完课到今天就把作业写完了,然后问我,课能上多久。
我说看学校停多久课了。
他说即使开课了,你周末还是可以上啊。
内心忍不住os:哈哈,你知道你妈准备给你讲一节课需要花多长时间吗?不考虑我自己学习python的时间做过助教的经历,单纯就是为了找个适合你们的方式还有每节课需要的内容,我就花了我宝贵的周五晚上和周六早上,若考虑上你妈的时薪,你这节课大概要天价了。
虽然内心千军万马,表面上还是要对他乐于好学的精神表示肯定。
花了那么多时间准备,然后我又花了一下午总结出来这第一篇教案。以前人们说一字千金,我不理解。现在我懂了,毕竟这是我牺牲了我宝贵的唯一能午睡的下午写出来的,千金不换,但是如果对你们有用,那就够了。
既然是好不容易写的,希望你们可以分享给更多的人看。
谢谢大家。