python -教初学者编程的最佳方法?

Translate

原始问题

我目前正在教我的兄弟编程。他是一个初学者,但非常聪明。 (他实际上想学习)。我注意到我们的某些会议在次要细节上陷入了泥潭,而且我感觉自己组织得不够好。 (但是这篇文章的答案很有帮助。)

我要如何更好地有效地教他?我有一个逻辑顺序可以用来逐个概念地贯穿整个概念吗?我应该避免复杂到以后吗?

我们正在使用的语言是蟒蛇,但欢迎提供任何语言的建议。


如何帮助

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

  • 初学者练习和项目构想
  • 教学初学者的资源
  • 截屏视频/博客文章/免费电子书
  • 打印适合初学者的书籍

请描述资源带有链接我来看一下我希望每个人都知道我肯定已经使用了其中一些想法。您的意见将汇总在此帖子中。


在线资源对于教学初学者:


推荐印刷书籍用于教学初学者

This question and all comments follow the "Attribution Required."

所有的回答

Translate

我不得不和几个初学者(从来没有写过任何代码)程序员一起工作,今年秋天我将与高中生一起进行课后工作坊。这是我最接近文档的内容。这项工作仍在进行中,但希望对您有所帮助。

1)FizzBuzz。从命令行程序开始。您可以非常快速地编写一些有趣的游戏或工具,并且无需首先学习GUI工具即可非常快速地学习所有语言功能。这些早期的应用程序应该足够简单,以至于您无需使用任何真正的调试工具即可使其运行。

如果没有别的,像FizzBuzz这样的项目都是好项目。您的前几个应用程序不必处理数据库,文件系统,配置等。这些概念使大多数人感到困惑,而当您仅学习语法和基本框架功能时,您实际上并不需要更多的复杂性。

一些项目:

  • 你好,世界!
  • 以我的出生年份,并计算我的年龄(仅(现在-然后)没有月份修正)。(简单的数学,输入,输出)
  • 询问方向(上,下,左,右),然后告诉用户他们的命运(掉进洞里,找到蛋糕,等等)。(布尔逻辑)
  • FizzBuzz,但每秒计数一次。(循环,计时器和更多逻辑)
  • 根据他们的年龄,有些人真的很喜欢一个应用程序,该应用程序会在一定间隔内对用户进行随机侮辱。(如果将间隔设为随机,则循环,数组,计时器和随机)

2)简单项目一旦他们很好地掌握了语言功能,就可以开始一个项目(简单,有趣的游戏就可以了。)。您应该尝试使第一个项目能够在6到12个小时内完成。不要花时间来架构它。让他们设计它,即使它很烂。如果失败了,请谈论发生的事情以及失败的原因,然后选择另一个主题并重新开始。

从这里开始介绍工具的调试功能。即使您通过阅读代码可以看到问题,也应该教他们如何使用工具,然后向他们展示如何看到它。这具有教调试工具和教如何在没有工具的情况下识别错误的双重目的。

一旦项目开始运行,或者如果项目开始运行,则可以使用它来引入重构工具。如果您随后可以使用一些您从未计划过的简单功能来扩展项目,那就很好了。这通常意味着重构和大量调试,因为很少有人会在第一次编写甚至一半的体面代码。

一些项目:

3)真实项目开始一个实际的项目,可能需要一些时间。使用适当的源代码控制,并制定时间表。像实际项目一样运行此项目,如果没有其他必要的经验,则必须使用这些工具。

显然,您需要针对每个人进行调整。我发现的最重要的事情是,即使第一个简单的应用程序也可以应用于人们感兴趣的内容。

一些项目:

  • 俄罗斯方块
  • 基于文本文件的博客引擎
  • 更先进的机器人工作
来源
Translate

您可以尝试使用爱丽丝。这是一个3D程序,专门用于入门编程课。

新程序员的两个最大障碍通常是:

  • 语法错误
  • 动力(写一些有意义而有趣的东西,而不是做作)

Alice使用拖放界面来构建程序,从而避免了语法错误的可能性。通过Alice,您可以构建3D世界,并具有代码控制(简单)的3D字符和动画,通常比实现链表更有趣。

经验丰富的程序员可能会视爱丽丝为玩具而嘲笑拖放代码行,但是研究说明此方法有效。

免责声明:我在Alice上工作。

来源
Translate

我推荐徽标(又名乌龟)来介绍基本概念。它提供了具有即时图形反馈的良好沙箱,并且您可以演示循环,变量,函数,条件等。这一页提供了出色的教程。

徽标后,移至Python或Ruby。我推荐Python,因为它基于ABC,它是为教学编程而发明的。

在教授编程时,我必须赞同EHaskins关于简单项目然后是复杂项目的建议。最好的学习方法是从确定的结果和可衡量的里程碑入手。它使课程保持重点,允许学生建立技能,然后再利用这些技能,并给学生一些向朋友炫耀的东西。不要低估了为自己的工作展示某些东西的力量。

从理论上讲,您可以坚持使用Python,因为Python几乎可以完成任何事情。这是教授面向对象的程序设计和(大多数)算法的好工具。您可以像命令行一样在交互模式下运行Python,以了解其工作方式,或一次运行整个脚本。您可以动态运行解释的脚本,也可以将它们编译为二进制文件。有成千上万的模块可以扩展功能。您可以制作一个与Windows捆绑在一起的图形计算器一样的图形计算器,也可以制作IRC客户端或其他任何东西。

XKCD更好地描述了Python的功能:"You're flying! How?" "Python!"

之后,您可以迁移到C#或Java,尽管它们没有提供Python所没有的很多功能。这些方法的好处是它们使用C语言风格的语法,这是许多(我敢说最多吗?)语言所使用的语法。您不必担心内存管理,但是您可以习惯使用语言解释器的更多自由和更少的处理。 Python强制使用空格和缩进,这在大多数情况下会很好,但并非总是如此。使用C#和Java,您可以在保持强类型的同时管理自己的空格。

从那里开始,标准就是C或C ++。这些语言的自由几乎是存在的。现在,您将负责自己的内存管理。没有垃圾收集可以帮助您。在这里,您可以教授真正的高级算法(例如mergesort和quicksort)。在这里,您可以了解为什么“细分错误”是一个诅咒词。在这里,您可以下载Linux内核的源代码并凝视Abyss。首先编写循环缓冲区和用于字符串操作的堆栈。然后继续前进。

来源
Translate

麻省理工学院的一门很好的python课程使用Python进行编程的简要介绍。它全部在线免费提供,您不必一定要成为麻省理工学院的学生才能了解它。

编辑[贾斯汀·标准]

本课程使用以下免费在线书:如何像计算机科学家一样思考
我绝对会发现它非常有用。

来源
Tobey Lee
Translate

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

VPython弹跳球http://vpython.org/bounce.gif

来源
Channing Lee
Translate

从Python中的Turtle图形开始。

我会使用Python标配的turtle图形。它是直观,简单的,您可以在不深入语法的情况下使用此环境引入许多编程概念,例如迭代和过程调用。考虑以下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

在尝试完成最后两个任务时,他们将进行许多失败的尝试,但是这些失败将在视觉上引起人们的兴趣,并且他们将很快学会,因为他们试图弄清楚为什么它没有达到他们的期望。

来源
Lucy Lee
Translate

关键是有问题的人需要解决一些问题。如果您没有想要编写的程序(以及一些明智且定义明确的程序,而不是“我想编写下一部Quake!”),那么您将无法学习编程,因为您没有动力去激励自己。 。我的意思是,您可以读一本书并对语言的语法和语义有一个大概的了解,但是直到您掌握了您要编写的程序您将永远无法掌握荨麻。

如果存在这种推动力,那么其他所有内容都只是次要的细节。

来源
Translate

我不知道这里是否有人提到过,但是您可能想看看泽德·肖艰苦学习Python

希望这可以帮助

来源
Agatha Lee
Translate

http://tryruby.hobix.com/“>尝试使用Ruby(在您的浏览器中)

来源
Cathy Lee
Translate

这是一本很棒的书,我的小兄弟曾经学习过:

http://pine.fm/LearnToProgram/

当然,最重要的是在完成本书后立即开始一个真正有用的某种程序。

来源
Glenn Lee
Translate

如果他有兴趣,次要细节不是很好的部分吗?使用python,您已经将它的GUI切断了,以免造成混乱。为什么不选择一个项目,一个游戏之类的东西并实现它。经典的hi-lo数字猜测游戏可以在命令行中以20-30行代码(具体取决于语言)简单地实现,并为您提供变量,条件,循环和用户输入。

来源
Translate

我只是让他写大量的代码。让他开车去做你们所做的一切,并且随时可以回答问题。

信不信由你,经过几个月的编写大量笨拙的代码,他将开始明白这个想法,并开始编写更好的程序。到那时,您可以陷入细节(内存等)的泥潭,还可以讨论一般的设计原则。

我听说,伟大的艺术家与平庸的艺术家之间的区别是,每一次练习,无论大小,他们都会有所进步。让您的兄弟练习一下,他每次坐在键盘上都会使他得到改善。

编辑:[贾斯汀标准]

埃斯特万,这让我想起了最近恐怖片编码, 和我do认为你是对的。但我认为仍然值得寻找方法指南他的做法。没问题,我希望他编写尽可能多的代码。这就是我要求示例项目的原因之一。

来源
Elsa Lee
Translate

首先,像其他所有人一样开始工作:你好,世界程序。这很简单,并且给了他们基本的程序布局感觉。尝试回想起您第一次编程的时间以及其中一些概念的难易程度-从简单开始。

在Hello World之后,继续创建一些基本变量,算术,然后创建布尔逻辑和if / else语句。如果您有一本旧的编程教科书,请查看一些早期示例,并让他复习这些示例。只是不要尝试一次引入太多内容,否则这将使您不知所措。

来源
Samantha Lee
Translate

在教您的兄弟编程时,您应该谨记的一点是,不要太依赖您。通常,当我发现自己在帮助别人时,他们会开始将我视为所有问题的答案书,而不是尝试寻找答案,他们只是问我。通常最好的老师是实验,每当您的兄弟有一个问题,例如“如果我在字符串中加2,会发生什么?”。您应该告诉他尝试一下,亲自看看。我还注意到,当我无法将概念传达给某人时,它有助于查看一些示例代码,在这些代码中我们可以分别查看每个段并逐个进行解释。附带说明一下,刚接触编程的人们经常对面向对象编程的想法感到困惑,他们会说,当您向他们教授时,他们会理解它,但是直到真正实现它之前,他们才有一个清晰的概念。

来源
Translate

我曾经教编程,与您想学习的大多数学生相比,您的兄弟有一个主要优势:)

如果您决定选择C朋友有一个网站带有那些较早一代使用的程序的程序,它们被称为基本键入命令。他们中较复杂的人使用ncurses,这在某种程度上抵消了它们作为教学辅助工具的使用,但是其中一些是很小的小东西,您无需学习即可学习负载。

我个人认为Python和Ruby将成为出色的第一语言。

编辑:初学者编程作业列表一夜之间出现也许正是您想要的。

来源
Franklin Lee
Translate

这确实取决于您兄弟的学习风格。许多人会变得肮脏,只有动手就可以学得更快,在不断发展和积累知识的过程中,可以使概念和全局更加清晰。

我,我更喜欢从大局开始,深入研究细节。我想知道的第一件事是它们如何融合在一起,然后是所有面向对象的蠢事,然后是类和实例等等。在学习语法之前,我喜欢了解基本概念和一些理论。我有一个优势,因为20年前我用BASIC编写了一些游戏,但此后没什么。

在实际编写代码之前,先从总体任务说明,计划和/或流程图开始,然后详细说明一些伪代码(倾向于最终使用的语法),以掩盖生产过程,这可能是有用的。

这里的黄金法则是保持学生的学习风格。

来源
Kenneth Lee
Translate

如果您的兄弟可以使用iTunes,则可以下载新南威尔士大学的Richard Buckland开设的计算机科学入门课程的视频讲座。他是一位引人入胜的讲师,涵盖计算和C语言的基础知识。如果没有其他要求,请告诉您的兄弟在后台播放视频,某些概念可能会因渗透而沉入其中。 :)

COMP1917更高的计算-2008会话1 http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444

如果链接不起作用,请使用以下路径:

主页-> iTunes U->工程-> COMP1917高等计算-2008第1节

来源
Victoria Lee
Translate

有个Wikibook对学习python相当不错.

我不知道其他语言的Wikibooks如何使用,但是我个人从Wikibook中学习了python,就像2007年2月一样

ps-如果您不熟悉维基书籍,基本上就是书籍创作的维基百科版本。这很难描述,但是如果您查看那里的几本书,就会知道它是如何工作的

来源
Translate

我认为Python是个好主意。我会给他一些基本任务,让他自己做,并告诉他,他遇到的任何死胡同都可以通过去Google来解决。至少对我来说,独自解决一个问题总是比别人告诉我解决方案更好。

一些可能的项目(无特定顺序):

  • 硬币翻转模拟器。让用户输入所需的硬币投掷次数。执行它并显示结果以及正面或反面的百分比。

  • 用菜单制作温度转换器,该菜单需要用户输入以选择用户要执行的转换类型。选择转换并完成转换后,应返回主菜单。

    这是具有相同想法的扩展转换器的示例:http://pastebin.org/6541

  • 编写一个使用数字输入并显示要转换为的字母等级的程序。最终将根据if和elif语句评估输入,以找到适合的位置。

  • 进行一次简单的测验,以进行多项选择或填写空白问题。最后,它将显示用户的操作方式。他可以选择任何想要的问题。

  • 输入一些(可能很大)的便士,并将其转换成更大的面额。例如,149便士= 1美元,1个季度,2个角钱和4个便士。

  • 创建一个简单的列表管理器。能够添加/删除列表以及在这些列表中添加/删除条目。这是圣诞节清单管理器的示例:http://pastebin.org/6543

  • 创建一个将生成的程序,然后测试输入的数字是否形成一个魔方(带有2D数组)。这是一些示例代码,但实际上它应该在每个步骤中打印出正方形,以便显示用户在构建正方形方面的位置:http://pastebin.org/6544

我还建议使用xTurtle或其他图形模块做一些事情,以使事情变得混乱,避免他变得无聊。当然,这是非常实际的编程,而不是很多人真正会使用python的脚本,但是我给出的示例几乎直接取自于我通过python学习时,并且对我来说非常有用。祝好运!

来源
Colby Lee
Translate

只是取笑!

令人惊讶的是,如果您尝试使用Scala可能是最简单的小城

来源
Eunice Lee
Translate

如果您的兄弟喜欢拼图,我建议Python挑战。在一对一的教程中,我不会将其用作正式的教学工具,但是当您不在一起挑战自己并享受一些乐趣时,他可以做这件事。

来源
Burton Lee
Translate
Bblythe Lee
Translate

浏览了几本免费的电子书后,我发现最适合学习编程的书是O'Reily Press出版的Head First Programming。它使用Python作为语言,并从一开始就为您提供程序。他们比“ Hello World”更有趣。我花在上面的钱很值得,而且由于花了一点时间,您也许可以在Ebay或Amazon上找到更便宜的二手副本。

来源
Enid Lee
Translate

如果您想教编程的基础知识,而又不特定于语言,则有一个名为那是在麻省理工学院创建的。它旨在帮助人们发展编程技能。当用户创建Scratch项目时,他们会学习创建条件,循环等。还有一个Scratch项目社区,可以下载项目的表单-这样您就可以浏览其他人的程序并查看其构建方式。

来源
Yale Lee
Translate

我认为,一旦他掌握了基础知识(变量,循环等),就应该尝试帮助他找到他感兴趣的特定事物,并帮助他学习实现它的必要性。我知道,如果我感兴趣的话,我会更倾向于做某事。另外,确保让他为一些棘手的问题而苦苦挣扎,没有什么比自己解决这个问题更令人满意的了。

来源
Everley Lee
Translate

通过学习如何使用流程图和客运专线(程序设计语言)。几周之后,我学会了将编写的PDL转换为语言。我很高兴能学到这种方式,因为我花了大部分时间进行编程,解决了各种问题,而又不受语言的束缚。我使用的语言一直都是实现细节,而不是设计的一部分。

必须通过将问题分解为基本步骤来解决问题是一项关键技能。我认为这是将可以编程的人与不能编程的人分开的一件事。

就如何处理语言的概念顺序而言,我认为最简单的方法是决定要考虑一个项目并根据需要解决这些概念。这样,您就可以根据需要将它们应用到您感兴趣的事情上。学习语言时,最好记住几个简单的项目,而一些项目会逐渐复杂。确定这些内容将帮助您确定所需的概念及其顺序。

来源
Cecilia Lee
Translate

我建议您还观看一些截屏视频-它们通常是在特定技术而非语言的背景下创建的,尽管如果显示Python代码,则可以这样做:)。关键是-它们是由一些优秀的程序员创建的,看着优秀的程序员编程是一件好事。您和您的兄弟也可以进行一些对等编程,这可能是一个更好的主意。只是别忘了解释为什么您要以这种方式而不是那样的方式做事。我认为学习编程的最好方法是从好的例子中去,甚至不要去看坏的例子。

来源
Duncan Lee
Translate

罗伯特·雷德(Robert Read)撰写了有用的指南,如何成为一名程序员,它涵盖了广泛的编程问题,对于初学者来说会有所帮助。

来源