原始问题

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

我能做些什么来有效地教他? 是否有一个逻辑顺序,我可以使用概念按概念运行? 是否有复杂性我应该避免到以后?

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


如何帮助

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

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

请描述资源及其链接,以便我查看。 我希望每个人都知道我一直在使用其中的一些想法。 您的提交内容将在此帖中汇总。


教学初学者的在线资源


推荐用于教学初学者的打印书籍

===============>>#1 票数:118

我不得不与几个初学者(从未写过一行代码)的程序员一起工作,今年秋天我将和高中生一起做一个课后研讨会。 这是我最接近文档的东西。 它仍在进行中,但我希望它有所帮助。

1) FizzBu​​zz。 从命令行程序开始。 您可以非常快速地编写一些有趣的游戏或工具,并且您可以非常快速地学习所有语言功能,而无需先学习GUI工具。 这些早期的应用程序应该足够简单,您不需要使用任何真正的调试工具来使它们工作。

如果没有别的东西,比如FizzBu​​zz就是好项目。 您的前几个应用程序不应该处理数据库,文件系统,配置等。 这些概念只会让大多数人感到困惑,当你只是学习语法和基本框架功能时,你真的不需要更多的复杂性。

一些项目:

  • 你好,世界!
  • 拿我出生的年份,计算我的年龄(只是(现在 - 然后)没有月份更正)。
  • 询问方向(向上,向下,向左,向右),然后告诉用户他们的命运(落入洞中,找到蛋糕等)。
  • FizzBu​​zz,但每秒计算一次。
  • 根据他们的年龄,一些人非常喜欢一个应用程序,它会在某个时间间隔内随机调用用户。

2) 简单项目一旦他们掌握了语言功能,你就可以开始一个项目(简单,有趣的游戏工作得很好)。 您应该尝试让第一个项目能够在6-12小时内完成。 不要花时间尽早设计它。 即使它很糟糕,让他们设计它。 如果它崩溃了,请谈谈发生了什么以及它失败的原因,然后选择另一个主题并重新开始。

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

一旦或如果项目正常运行,您可以使用它来引入重构工具。 如果您可以使用一些您从未计划过的简单功能扩展项目,那将是很好的。 这通常意味着重构和重要的调试,因为很少有人第一次写出一半代码。

一些项目:

  • 刽子手游戏
  • 尝试使用机器人技术( VexMindstorms是选项)

3) 真实项目启动一个可能需要一些时间的实际项目。 使用适当的源代码控制,并指出有一个时间表。 像一个真实的项目一样运行这个项目,如果没有别的,那么它必须处理这些工具。

显然你需要为每个人调整这个。 我发现最重要的事情是让第一个简单的应用程序适用于该人感兴趣的内容。

一些项目:

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

===============>>#2 票数:30

你可以尝试使用Alice 这是一个专为入门编程课程设计的3D程序。

新程序员面临的两大障碍通常是:

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

Alice使用拖放界面来构建程序,避免了语法错误的可能性。 Alice允许您构建3D世界并拥有代码控制(简单)3D角色和动画,这通常比实现链接列表更有趣。

经验丰富的程序员可能会把爱丽丝视为一个玩具并嘲笑拖放代码行,但研究表明这种方法有效。

免责声明:我曾在Alice工作过。

===============>>#3 票数:28

我推荐使用Logo(又名乌龟)来获取基本概念。 它提供了一个具有即时图形反馈的良好沙箱,您可以演示循环,变量,函数,条件等。 此页面提供了一个很好的教程。

在Logo之后,转到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内核源代码并凝视深渊的地方。 首先编写一个循环缓冲区和一个用于字符串操作的堆栈。 然后继续努力。

===============>>#4 票数:15

一个很好的python课程是麻省理工学院的使用Python编程的温和介绍 这一切都是免费在线的,你不必是MIT uberstudent就能理解它。

编辑[ 贾斯汀标准 ]

本课程使用这本免费的在线书籍: 如何像计算机科学家一样思考
我肯定发现它非常有用。

===============>>#5 票数: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

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

===============>>#6 票数: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

在尝试完成最后两项任务时,他们将尝试许多失败,但失败将在视觉上有趣,他们会在他们试图弄清楚为什么没有得出他们所期望的东西时快速学习。

===============>>#7 票数:11

关键是有问题的人需要解决他们想解决的问题。 如果你没有想要编写的程序(以及一些明智且定义明确的程序,而不是“我想写下一个Quake!”)那么你就无法学习编程,因为你没有什么可以激励你的。 我的意思是,你可以阅读一本书并对语言的语法和语义有一个粗略的理解,但是在你有一个你想要编写的程序之前,你永远不会掌握荨麻。

如果存在这种推动力,那么其他一切都只是细微的细节。

===============>>#8 票数:8

我不知道是否有人在这里提到过这个,但你可能想看看Zed Shaw学习Python的艰难之路

希望这可以帮助

===============>>#9 票数:7

http://tryruby.hobix.com/“>试试Ruby(在浏览器中)

===============>>#11 票数:5

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

http://pine.fm/LearnToProgram/

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

===============>>#12 票数:4

如果他有兴趣,那么好的部分不是细节吗? 使用python,你已经切断了它的GUI,以免混淆。 为什么不选择项目,游戏或其他东西,并实施它。 经典的hi-lo数字猜测游戏可以简单地从命令行中实现20-30行代码(当然取决于语言),并为您提供变量,条件,循环和用户输入。

===============>>#13 票数:4

我只是让他写出大量的代码。 让他驾驶你们所做的一切,只是回答问题。

信不信由你,经过几个月的蹩脚代码写作,他将开始理解并开始编写更好的程序。 那时,您可能会陷入细节(内存等),并谈论一般设计原则。

我听说伟大的艺术家和平庸的艺术家之间的区别在于,每当他们练习时,无论多么小,他们都会改进某些东西。 让你的兄弟练习,每次他坐在键盘上他都会提高。

编辑:[贾斯汀标准]

埃斯特万,这让我想起最近的编码恐怖后 ,我确实认为你是对的。 但我认为找到指导他的实践的方法仍然是值得的。 毫无疑问,我希望他编写尽可能多的代码,因为他知道该怎么做。 这就是我要求样品项目的一个原因。

===============>>#14 票数:2

我认为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学习时获得的,它对我来说非常棒。 祝好运!

===============>>#15 票数:2

如果您的兄弟可以访问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期

===============>>#16 票数:2

只是让它变得有趣!

令人惊讶的是,如果你尝试Kojo, Scala可能是最简单的

===============>>#17 票数:2

如果你的兄弟喜欢拼图,我会推荐Python Challenge 我不会在一对一教程中将它用作正式的教学工具,但是当你不在一起挑战自己并获得乐趣时,他可以做些什么。

===============>>#18 票数:2

有一个wikibook非常适合学习python

我不知道wikibooks是如何用于其他语言的,但我个人从2007年2月的wikibook中学到了python

ps - 如果你不熟悉wikibooks ,它基本上是维基百科版本的书籍创作。 这有点难以描述,但如果你看看那里的一些书,你会看到它是如何工作的

===============>>#19 票数:2

首先,像其他人一样开始:使用Hello World程序。 它很简单,它给了他们对程序布局的基本感觉。 试着回想一下你第一次编程时的情况,以及一些概念的难度 - 从简单开始。

在Hello World之后,继续创建一些基本变量,算术,然后是布尔逻辑和if / else语句。 如果你有一本旧的编程教科书,请查看一些早期的例子并让他仔细阅读。 只是不要试图一次性引入太多,否则它将是压倒性和令人困惑的。

===============>>#20 票数:2

在教你的兄弟编程时你应该非常注意的一点是他不要过分依赖你。 通常当我发现自己在帮助他人时,他们会开始把我当作他们所有问题的答案书,而不是试图找到答案,他们只是问我。 通常最好的老师是实验,每次你的兄弟都有一个问题,如果“如果我在字符串中加2,会发生什么?” 你应该告诉他试一试,亲眼看看。 另外我注意到,当我无法将某个概念传达给某人时,有助于查看一些示例代码,我们可以单独查看每个段并逐个解释。 作为旁注,编程新手常常遇到面向对象编程思想的问题,他们会说当他们教给他们时他们理解它但在实际实现之前不会得到明确的概念。

===============>>#21 票数:2

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

如果您决定使用C, 那么朋友有一个网站 ,其中包含来自老一代的那些程序,记住作为基本类型输入。 他们中较为复杂的人使用的是ncurses,它们在某种程度上否定了他们作为教学辅助工具的用处,但其中一些是微不足道的小东西,你可以在没有被教导的情况下学习负荷。

我个人认为Python和Ruby会成为第一语言。

编辑:一夜之间出现的初学者编程作业列表可能正是您正在寻找的。

===============>>#22 票数:2

这真的取决于你兄弟的学习风格。 许多人通过亲自动手并进入其中来学得更快,在他们进步和建立知识时,将概念和大局结晶。

我,我更喜欢从全局开始,深入研究细节。 我想知道的第一件事是它是如何将所有面向对象的gobbledygook组合在一起,然后是关于类和实例等等。 在学习语法之前,我想知道基本概念和一些理论。 我有一点优势,因为我在20年前在BASIC写了一些游戏,但后来没有多少。

也许通过从总体任务声明开始,然后是计划和/或流程图来影响生产过程,然后在实际编写代码之前详细说明一些伪代码(倾向于最终使用的语法)。

这里的黄金法则是要求学生的学习风格。

===============>>#23 票数:2

Python挑战

===============>>#24 票数:2

经过一些免费的电子书,我发现最好的学习编程的书是O'Reily Press出版的Head First Programming。 它使用Python作为语言,并从一开始就为您提供程序。 他们更有趣的是'Hello World'。 这是值得我花在它上面的钱,因为它已经出了一点,你可能能够在Ebay或亚马逊上找到更便宜的二手副本。

===============>>#26 票数:1

如果您想教授编程的基础知识,而不是特定于语言,那么在MIT中创建了一个名为Scratch的应用程序。 它旨在帮助人们发展编程技能。 当用户创建Scratch项目时,他们学会创建条件,循环等。还有一个临时项目社区,可以下载项目的形式 - 这样您就可以探索其他人的程序并查看它们是如何构建的。

===============>>#27 票数:1

我认为,一旦他掌握了基础知识(变量,循环等),你应该尝试帮助他找到他感兴趣的具体内容,并帮助他学习实现这一目标的必要性。 我知道如果我感兴趣的话,我会更倾向于并且有动力做某事。 另外,一定要让他努力解决一些更棘手的问题,没有什么比你自己解决的那一刻更令人满意。

===============>>#28 票数:1

通过学习如何使用流程图和PDL (程序设计语言)以语言无关的方式解决问题来教我。 几周之后,我学会了将我写的PDL转换为一种语言。 我很高兴我学会了这种方式,因为我花了大部分时间编程,解决问题而不依赖于语言。 我使用的语言一直是实现细节而不是设计的一部分。

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

至于你如何处理语言概念的顺序,我认为最简单的方法是决定是否考虑项目并在需要时处理概念。 这使您可以根据需要将它们应用于您感兴趣的事物上。 学习一门语言时,最好考虑几个简单的项目,一些具有渐进的复杂性。 决定这些将有助于您绘制所需的概念及其顺序。

===============>>#29 票数:1

我建议也观看一些截屏视频 - 它们通常是在特定技术而非语言的背景下创建的,但如果显示的是Python代码,那就行了:)。 重点是 - 它们是由一些优秀的程序员创建的,并且观察优秀的程序员编程是一件好事。 你和你的兄弟也可以做一些同行编程,这可能是一个更好的主意。 只是不要忘记解释为什么你这样做而不是那样。 我认为学习编程的最好方法是从好的例子开始,尽量不要看坏的。

===============>>#30 票数:1

Robert Read写了一本有用的指南, 如何成为一名程序员 ,它涵盖了初学者会发现有用的广泛的编程问题。

  ask by community wiki translate from so

未解决问题?本站智能推荐: