教初学者编程的最佳方法是什么?

324 投票
86 回答
149719 浏览
提问于 2025-04-10 23:55

原问题

我现在在教我弟弟编程。他是个完全的新手,但很聪明。(而且他真的想学。)我注意到我们的一些课程在一些小细节上拖了很久,我觉得自己没有很有条理。(不过这篇帖子里的回答帮了我很多。

我该怎么做才能更有效地教他呢?有没有一个逻辑顺序可以让我逐步讲解每个概念?有没有一些复杂的内容我应该等到后面再讲?

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


如何提供帮助

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

  • 初学者练习和项目创意
  • 适合初学者的教学资源
  • 视频教程/博客文章/免费电子书
  • 适合初学者的纸质书籍

请描述一下这个资源并附上链接,这样我可以去看看。我想让大家知道我确实在使用这些想法。你的建议会在这篇帖子中汇总。


适合初学者的在线资源:


推荐的纸质书籍,适合初学者

86 个回答

28

我推荐使用Logo(也叫海龟图形)来掌握基本概念。它提供了一个很好的练习环境,可以立即看到图形反馈,你可以在这里演示循环、变量、函数、条件语句等。这个页面提供了很棒的教程。

学完Logo后,可以转向Python或Ruby。我推荐Python,因为它是基于ABC语言开发的,ABC是为了教编程而设计的。

在教授编程时,我非常赞同EHaskins的建议:先做简单项目,再做复杂项目。最好的学习方式是从一个明确的目标和可衡量的里程碑开始。这能让学习内容更集中,让学生逐步建立技能,并在此基础上继续进步,还能给学生一些可以向朋友展示的成果。不要低估展示自己成果的力量。

理论上,你可以一直使用Python,因为Python几乎可以做任何事情。它是教对象导向编程和(大多数)算法的好工具。你可以像使用命令行一样在交互模式下运行Python,感受它的工作方式,或者一次性运行完整的脚本。你可以实时解释运行脚本,或者将它们编译成可执行文件。还有成千上万的模块可以扩展功能。你可以制作一个像Windows自带的图形计算器,或者制作一个IRC客户端,甚至其他任何东西。

XKCD更好地描述了Python的强大: "你在飞!怎么做到的?" "用Python!"

之后你可以转向C#或Java,虽然它们并没有提供Python没有的功能。这些语言的好处在于它们使用C风格的语法,很多(我敢说大多数?)语言都使用这种语法。你暂时不需要担心内存管理,但可以习惯于有更多的自由度,而不是依赖语言解释器的过多指导。Python对空格和缩进有严格要求,这在大多数情况下都很好,但并不总是如此。C#和Java允许你自己管理空格,同时保持强类型。

接下来,标准语言是C或C++。在这些语言中,你几乎拥有完全的自由。你现在需要自己管理内存,没有垃圾回收来帮助你。这是学习真正高级算法(比如归并排序和快速排序)的地方。这也是你会明白“段错误”为什么是个禁忌词的地方。在这里,你可以下载Linux内核的源代码,深入探索。可以从编写一个循环缓冲区和一个字符串操作的栈开始,然后逐步深入。

30

你可以试试Alice。这是一个专门为初学编程的课程设计的3D程序。

对于新手程序员来说,通常会遇到两个最大的难题:

  • 语法错误
  • 动力(想写一些有意义和有趣的东西,而不是无聊的代码)

Alice使用拖放界面来构建程序,这样就避免了语法错误的可能性。你可以用Alice创建3D世界,并让你的代码控制(简单的)3D角色和动画,这通常比实现链表要有趣得多。

有经验的程序员可能会觉得Alice像个玩具,嘲笑拖放代码行的方式,但研究表明,这种方法是有效的。

免责声明:我参与了Alice的开发。

118

我之前和几个完全没有编程经验的初学者一起工作过,这个秋天我还要和高中生们进行一个课后工作坊。这是我目前能找到的最接近文档的东西。虽然还在不断完善中,但希望能对大家有所帮助。

1) FizzBuzz. 从命令行程序开始。你可以很快写出一些有趣的游戏或工具,而且能快速学会语言的各种特性,而不需要先学习图形界面的工具。这些早期的应用应该简单到你不需要使用任何复杂的调试工具就能让它们运行。

如果没有别的,像FizzBuzz这样的项目是很好的选择。你最开始的几个应用不需要涉及数据库、文件系统、配置等。这些概念会让大多数人感到困惑,而在你刚学习语法和基本框架特性的时候,真的不需要增加更多的复杂性。

一些项目建议:

  • 你好,世界!
  • 输入我的出生年份,计算我的年龄(只需计算现在减去那时,不用考虑月份)。(简单的数学,输入,输出)
  • 询问一个方向(上、下、左、右),然后告诉用户他们的命运(掉进洞里、找到蛋糕等)。(布尔逻辑)
  • FizzBuzz,但每秒计数一次。(循环、计时器和更多逻辑)
  • 根据他们的年龄,有些人会喜欢一个应用,定期随机骂他们。(循环、数组、计时器,如果间隔随机的话还可以用随机数)

2) 简单项目 一旦他们对语言特性有了较好的理解,就可以开始一个项目(简单有趣的游戏效果不错)。你应该尽量让第一个项目在6到12小时内完成。不要花时间去提前设计架构。让他们自己设计,即使设计得不好也没关系。如果项目失败了,可以讨论一下发生了什么,为什么会失败,然后换个主题重新开始。

在这个阶段,你可以开始介绍调试工具的使用。即使你能通过阅读代码看到问题,也应该教他们如何使用工具,并展示你是如何发现问题的。这既能教他们调试工具的使用,也能教他们如何在没有工具的情况下识别错误。

一旦项目能够正常运行,你可以用它来介绍重构工具。如果能在项目中增加一些你之前没有计划的简单功能,那就更好了。这通常意味着需要重构和大量调试,因为很少有人第一次写的代码能达到不错的水平。

一些项目建议:

  • 猜单词游戏
  • 尝试机器人技术(可以选择VexMindstorms

3) 真实项目 开始一个可能需要一些时间的真实项目。使用合适的版本控制,并确保有一个计划。像对待真实项目一样运行这个项目,至少能让你获得处理工具的经验。

显然,你需要根据每个人的情况进行调整。我发现最重要的是让即使是最简单的应用也与个人的兴趣相关。

一些项目建议:

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

撰写回答