教新手入门的最佳方法?

原始问题

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

我能更好地教他有效地做什么? 有没有一种逻辑顺序可以用来贯穿概念概念? 到了晚些时候我应该避免复杂吗?

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


如何帮助

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

  • 初学者练习和项目想法
  • 教给初学者的资源
  • Screencasts /博客文章/免费电子书
  • 打印适合初学者的书
  • 请用链接描述资源,以便我可以看一看。 我希望每个人都知道我肯定使用了其中的一些想法。 您的意见将汇总在这篇文章中。


    为初学者提供的在线资源

  • 使用Python进行编程的简单介绍
  • 如何像计算机科学家一样思考
  • 爱丽丝:适合初学者的3D程序
  • Scratch(开发编程技巧的系统)
  • 如何设计程序
  • 计算机程序的结构和解释
  • 学会编程
  • 罗伯特·雷德如何成为一名程序员
  • 微软XNA
  • 产生下一代黑客
  • COMP1917 Richard Buckland的高级计算讲座(需要iTunes)
  • 潜入Python
  • Python Wikibook
  • 欧拉项目 - 样本问题(主要是数学问题)
  • pygame - 一个用于创建游戏的简单python库
  • 用Python发明你自己的电脑游戏
  • 编程基础超越基础的下一步。
  • 例如吱吱作响
  • Snake为孩子而战(这不仅仅是为了孩子!)

  • 推荐打印书籍教学初学者

  • 加速C ++
  • 为绝对初学者编写Python程序
  • 由Charles Petzold编码
  • Python编程:计算机科学入门第2版

  • 我不得不与几位初学者(从来没有写过一行代码)的程序员一起工作,今年秋天我会和高中学生一起做一个课后工作坊。 这是我需要记录的最接近的东西。 这仍然是一项进展,但我希望它有帮助。

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

    如果没有其他事情像FizzBu​​zz是好项目。 您的前几个应用程序不应该处理数据库,文件系统,配置等。 这些概念只是混淆了大多数人,当你刚刚学习语法和基本框架特性时,你并不需要更多的复杂性。

    一些项目:

  • 你好,世界!
  • 以我的出生年份,并计算我的年龄(只是(现在 - 然后)没有月份更正)。 (简单的数学,输入,输出)
  • 询问一个方向(上,下,左,右),然后告诉用户他们的命运(落在洞里,找到蛋糕等)。 (布尔逻辑)
  • FizzBu​​zz,但每秒钟计数一次。 (循环,定时器和更多逻辑)
  • 根据他们的年龄,一些真的很喜欢一个应用程序,它会在某个时间间隔内给用户一个随机的侮辱。 (循环,数组,定时器和随机间隔,如果你使间隔随机)
  • 2)简单的项目一旦他们掌握了语言特性,就可以开始一个项目(简单,有趣的游戏工作良好)。 你应该尝试让第一个项目能够在6-12小时内完成。 不要花时间来尽早设计它。 让他们设计它即使它很糟糕。 如果它分崩离析,请谈论发生了什么,为什么会失败,然后选择另一个话题并重新开始。

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

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

    一些项目:

  • Hang子手游戏
  • 试验机器人(Vex和Mindstorms是选择)
  • 3)真正的项目开始一个真正的项目可能需要一些时间。 使用适当的源代码管理,并指出有一个时间表。 像一个真正的项目一样运行这个项目,如果没有其他的经验,就不得不处理这些工具。

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

    一些项目:

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

  • 你可以尝试使用Alice。 这是一个用于入门级编程课程的3D程序。

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

  • 语法错误
  • 动机(写一些有意义而有趣的东西而不是人为的)
  • Alice使用拖放界面来构建程序,避免了语法错误的可能性。 Alice可以让你构建3D世界,让你的代码控制(简单)3D角色和动画,这通常比实现链表更有趣。

    有经验的程序员可能会低头看待Alice作为玩具,并嘲笑拖放代码行,但研究表明这种方法可行。

    免责声明:我曾在爱丽丝工作。


    我推荐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内核的源代码并注视深渊的地方。 首先编写一个循环缓冲区和一个字符串操作栈。 然后工作你的方式。

    链接地址: http://www.djcxy.com/p/9201.html

    上一篇: Best ways to teach a beginner to program?

    下一篇: Difference between abstract class and interface in Python