最初的问题

我目前正在教我弟弟编程。他完全是个初学者,但很聪明。(他真的很想学)。我注意到我们的一些会议陷入了一些小细节,我觉得我不是很有条理。(但这篇文章的答案有很大帮助。)

我怎样才能更好地有效地教他?是否有一个逻辑顺序,我可以用一个概念一个概念地运行?是否有什么复杂的问题我应该在以后再讨论?

我们正在使用的语言是Python,但任何语言的建议都是受欢迎的。


如何提供帮助

如果你有好的答案,请在你的答案中添加以下内容:

初级练习和项目想法 初学者教学资源 屏幕视频/博客文章/免费电子书 印刷适合初学者的书籍

请用链接描述资源,以便我可以看一看。我想让每个人都知道,我确实在使用其中的一些想法。你提交的内容将在这篇文章中汇总。


初学者在线教学资源:

A Gentle Introduction to Programming Using Python How to Think Like a Computer Scientist Alice: a 3d program for beginners Scratch (A system to develop programming skills) How To Design Programs Structure and Interpretation of Computer Programs Learn To Program Robert Read's How To Be a Programmer Microsoft XNA Spawning the Next Generation of Hackers COMP1917 Higher Computing lectures by Richard Buckland (requires iTunes) Dive into Python Python Wikibook Project Euler - sample problems (mostly mathematical) pygame - an easy python library for creating games Invent Your Own Computer Games With Python Foundations of Programming for a next step beyond basics. Squeak by Example Snake Wrangling For Kids (It's not just for kids!)


推荐印刷书籍的教学初学者

加速c++ Python编程绝对初学者 Charles Petzold编写的代码 Python编程:计算机科学介绍第二版


当前回答

+1次斯坦福大学讲座。http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111

它们简单,质量高,我可以保证它们教初学者的能力(我是其中之一)。

其他回答

我会让他写大量的代码。你们做什么事都让他插手,随时回答问题就好。

信不信由你,在写了几个月的烂代码之后,他会开始明白这个想法,并开始写更好的程序。在这一点上,你可以陷入细节(内存等),也可以谈论一般的设计原则。

我听说伟大的艺术家和平庸的艺术家的区别在于,他们每次练习都会在某些方面有所改进,不管这些改进有多小。让你弟弟练习,他每次坐在键盘前都会进步。

编辑:[Justin Standard] 埃斯特班,这让我想起了最近的一篇编程恐怖文章,我认为你是对的。但我认为仍然值得寻找方法来指导他的实践。毫无疑问,我希望他能写尽可能多的代码。这是我要求样本项目的原因之一。

一些额外的信息可以附加到Jason Pratt之前关于Alice的帖子中…具体来说,是一个讲故事的爱丽丝变体。

虽然这项研究针对的是中学女生,但你可能会觉得凯特琳·凯莱赫撰写的白皮书很有趣。

这可能看起来很奇怪,但我在以前的工作中通过自动化任务和数据分析开始编写代码。这是通过记录和研究Excel宏生成的代码来完成的。当然,这种方法假设您可以通过VB学习。

从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

在尝试完成最后两个任务时,他们会有很多失败的尝试,但这些失败在视觉上很有趣,他们会很快学会,因为他们试图弄清楚为什么没有画出他们期望的样子。

起初,我对不同的程序是如何工作的很感兴趣,所以我从查看源代码开始。然后,当我开始了解程序的工作原理时,我会改变某些参数,看看会发生什么。所以基本上我在学会写字之前就学会了阅读。巧合的是,大多数人都是这样学英语的。

所以如果我想教别人如何编程,我会给他们一个小程序,让他们试着阅读和理解它是如何工作的,让他们只是玩玩源代码。

只有这样,我才会给他们布置“任务”去完成。

现在,如果他们有一个特别的原因想要学习如何编程,那么从他们想要完成的事情开始肯定是一个好主意。例如,如果他们想精通blender这样的应用程序,从Alice开始肯定是个好主意。

我绝对推荐使用具有垃圾收集功能的语言,如D、Perl或一些解释性语言,如javascript。在Perl 6接近完成之前远离Perl可能是一个好主意,因为它解决了阅读和理解Perl的一些困难。