Jus*_*ard 324 python language-agnostic
原始问题
我目前正在教我的兄弟去编程.他是一个初学者,但非常聪明.(而他实际上想学习).我注意到我们的一些会议陷入了细微的困境,我不觉得自己组织得很好.(但这篇文章的答案有很多帮助.)
我能做些什么来有效地教他?是否有一个逻辑顺序,我可以使用概念按概念运行?是否有复杂性我应该避免到以后?
我们使用的语言是Python,但欢迎任何语言的建议.
如何帮助
如果您有好的,请在答案中添加以下内容:
请描述资源及其链接,以便我查看.我希望每个人都知道我一直在使用这些想法.您的提交内容将在此帖中汇总.
教学初学者的在线资源:
推荐用于教学初学者的打印书籍
Eri*_*ins 118
我不得不与几个初学者(从未写过一行代码)的程序员一起工作,今年秋天我将和高中生一起做一个课后研讨会.这是我最接近文档的东西.它仍在进行中,但我希望它有所帮助.
1)FizzBuzz.从命令行程序开始.您可以非常快速地编写一些有趣的游戏或工具,并且您可以非常快速地学习所有语言功能,而无需先学习GUI工具.这些早期的应用程序应该足够简单,您不需要使用任何真正的调试工具来使它们工作.
如果没有别的东西,比如FizzBuzz就是好项目.您的前几个应用程序不应该处理数据库,文件系统,配置等.这些概念只会让大多数人感到困惑,当你只是学习语法和基本框架功能时,你真的不需要更多的复杂性.
一些项目:
2)简单项目一旦他们掌握了语言功能,你就可以开始一个项目(简单,有趣的游戏工作得很好).您应该尝试让第一个项目能够在6-12小时内完成.不要花时间尽早设计它.即使它很糟糕,让他们设计它.如果它崩溃了,请谈谈发生了什么以及它失败的原因,然后选择另一个主题并重新开始.
这是您开始介绍工具的调试功能的地方.即使您可以通过阅读代码来查看问题,您应该教他们如何使用这些工具,然后向他们展示如何看待它.这有助于教学调试工具和教授如何在没有工具的情况下识别错误的双重目的.
一旦或如果项目正常运行,您可以使用它来引入重构工具.如果您可以使用一些您从未计划过的简单功能扩展项目,那将是很好的.这通常意味着重构和重要的调试,因为很少有人第一次写出一半代码.
一些项目:
3)真实项目开始一个可能需要一些时间的真实项目.使用适当的源代码控制,并指出有一个时间表.像一个真实的项目一样运行这个项目,如果没有别的,那么它必须处理这些工具.
显然你需要为每个人调整这个.我发现最重要的事情是让第一个简单的应用程序适用于该人感兴趣的内容.
一些项目:
小智 28
我推荐使用Logo(又名乌龟)来获取基本概念.它提供了一个具有即时图形反馈的良好沙箱,您可以演示循环,变量,函数,条件等.此页面提供了一个很好的教程.
在Logo之后,转到Python或Ruby.我推荐Python,因为它基于ABC,它是为教授编程而发明的.
在教授编程时,我必须首先提出EHaskins对简单项目和复杂项目的建议.学习的最佳方式是从明确的结果和可衡量的里程碑开始.它使课程集中,允许学生建立技能,然后建立在这些技能的基础上,并给学生一些东西给朋友炫耀.不要低估为某人的工作展示某些东西的力量.
从理论上讲,你可以坚持使用Python,因为Python几乎可以做任何事情.这是教授面向对象编程和(大多数)算法的好工具.您可以像交互模式一样在命令行中运行Python,以了解它的工作原理,或者一次运行整个脚本.您可以运行动态解释的脚本,也可以将它们编译为二进制文件.有数千个模块可以扩展功能.您可以制作与Windows捆绑的图形计算器,也可以制作IRC客户端或其他任何东西.
XKCD更好地描述了Python的强大功能:

之后你可以转移到C#或Java,尽管它们没有提供Python已经没有的东西.这些的好处是它们使用C风格的语法,许多(我敢说最多?)语言使用.您不需要担心内存管理,但您可以习惯从语言解释器中获得更多的自由和更少的操作.Python强制执行空格和缩进,这在大多数情况下都很好,但并非总是如此.C#和Java允许您管理自己的空白,同时保持强类型.
从那里,标准是C或C++.这些语言的自由几乎是存在的.您现在负责自己的内存管理.没有垃圾收集来帮助您.这是您教授真正高级算法(如mergesort和quicksort)的地方.在这里,您可以了解为什么"分段错误"是一个诅咒词.这是您下载Linux内核源代码并凝视深渊的地方.首先编写一个循环缓冲区和一个用于字符串操作的堆栈.然后继续努力.
Mar*_*son 15
一个很好的python课程是麻省理工学院的使用Python编程的温和介绍.这一切都是免费在线的,你不必是MIT uberstudent就能理解它.
编辑[ 贾斯汀标准 ]
本课程使用这本免费的在线书籍:如何像计算机一样思考科学家
我肯定发现它非常有用.
jfs*_*jfs 12
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
Run Code Online (Sandbox Code Playgroud)
VPython弹跳球http://vpython.org/bounce.gif
小智 12
从Python中的Turtle图形开始.
我会使用Python标配的龟图形.它是直观的,简单的,你可以使用这个环境来引入许多编程概念,比如迭代和过程调用,然后再深入语法.考虑python中的以下交互式会话:
>>> 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
Run Code Online (Sandbox Code Playgroud)
在尝试完成最后两项任务时,他们将尝试许多失败,但失败将在视觉上很有趣,他们会在他们试图找出为什么没有得出他们所期望的内容时快速学习.
DrP*_*zza 11
关键是有问题的人需要解决他们想解决的问题.如果你没有想要编写的程序(以及一些明智且定义明确的程序,而不是"我想写下一个Quake!")那么你就无法学习编程,因为你没有任何东西可以激励你.我的意思是,你可以阅读一本书并对语言的语法和语义有一个粗略的理解,但是在你有一个你想写的程序之前,你永远不会掌握荨麻.
如果存在这种推动力,那么其他一切都只是微不足道的细节.
如果他感兴趣的话,小细节不就是好的部分吗?使用Python,你已经去掉了GUI,这样混乱就消失了。为什么不选择一个项目、一个游戏或其他东西,然后实施它。经典的 hi-lo 猜数字游戏可以通过 20-30 行代码(当然取决于语言)从命令行简单地实现,并为您提供变量、条件、循环和用户输入。