关于语言不可知论:奖励*完整*初学者的代码项目

Rewarding code projects for *complete* beginners

对于被介绍编程的人来说,课程通常包括一个代码项目,我认为这是一个很好的学习方法。然而,这样的项目往往感觉太人为,因此工作不太有回报。

你对奖励代码项目有什么想法?(最好是容易开始,并且可以任意扩展以获得更高级的版本!).

编辑:

@马克:谢谢你的链接,尽管我对那些完全不懂编程的人的项目更感兴趣(这个链接似乎更多的是指那些已经精通至少一种语言,并试图学习一种新语言的人——我会说的典型的这么多的听众)。

@凯文,维伯霍夫,加里:我在想那些通过一种语言学习编程的人,所以在课程开始的时候,有些人对控制结构一无所知(更不用说任何语法了)。然而,我考虑的是一个相当大的项目(通常在1K-10K行的代码范围内,可能是2到3个学生组成的小组)。这是在我的学校为完全初学者所做的,而且对他们来说确实很有用……除了他们中的大多数人觉得自己的项目很无聊!


如前几次所述,您试图教初学者的内容对项目非常重要。

我建议你计划这样的事情:

1)避免玩电脑游戏

一个计算机游戏,虽然制作起来很有趣,但并不能在早期就给程序员带来结果(它非常复杂)。您希望集中于小而有用的应用程序,如端口扫描仪。这个例子有点复杂,但它是我在网上看到的最好的学习项目之一。

2)早期教授图形

早点看到你的劳动成果是值得的,它激励你走得更远。无论您使用的是winforms、mfc还是win32 api、opengl或directx,请及早讲授。

3)许多小的经验教训和深入的信息

该原理与上述链接端口扫描器项目相结合,运行良好。把每一部分都教得很透彻,给初学者时间来吸取教训。我认为Zophusx提供信息的格式很好。太糟糕了,他大部分时间都放弃了自己的网站。

4)需要时间

别着急。没人能在几周内成为一流的程序员。试着把课程简单化,但要有吸引力,并不断从以前的课程中学习。

5)及早、经常得到反馈

你可能认为一个项目是非常有趣的,或者一个特别的课程,或者类似的,但是你不是唯一的学习者。你的学生会非常感激你早点问他们事情进展如何,以及他们想知道的更多。要有足够的灵活性,以便您能够满足其中的一些请求。

6)有趣的教学

玩得高兴。激情是具有传染性的,如果你的学生看到你对这个主题有多喜欢,那么其中的一些热情也会感染到他们身上。

希望有帮助!


一些很好的有回报的项目,就你所能学到的和在复杂性方面具有相当的可扩展性而言,其特点是:

  • 游戏
  • 旅行和交通预订/预订系统
  • 百科全书或术语、文章词典
  • 换算计算器(货币、单位等)

关键是选择一个足够简单的项目,这样当您查看项目标题时,它的一些特性就会立即显现出来。如果真的有一个想法,你会发现更多的功能,你可以添加到它。

这个项目应该有足够的难度,使它的特性看起来刚刚超出初学者的范围,从而激励他一直学习新的东西。


我确实认为游戏和谜语是一个很好的起点,因为它们可以为开发更复杂的版本提供很大的空间。例如,一个tic-tac-toe程序可以被构建为一个简单的命令行程序,最初让两个玩家玩这个游戏。

这个步骤可以用来显示一个简单的数据结构或数组如何表示游戏板,简单的输入来获取用户命令/移动,简单的输出来显示游戏板和提示等。然后你可以开始显示一个算法如何允许玩家与计算机模式。我喜欢简单的魔方数学算法,因为它是基于非常简单的数学。在此之后,天空的限制,用户界面的改进,使用文件I/O来加载和保存游戏,更先进的算法来让电脑玩得更好等等。更复杂和令人满意的游戏仍然可以用文本模式或简单的图形制作。

多年来,我一直把索科班游戏作为展示很多技巧的一种手段。

我用过的最简单的游戏是一个倒数游戏。这涉及1-9之间的数字的混合列表。玩家可以在列表左侧指定要反转的数字。目的是把清单分类。这对初学者来说很好。游戏的每个小部分都可以单独编写和测试。


如果你在公司培训新人,那么把他们作为实习资源加入到实况项目中是非常有益的。

这会稍微增加主要开发人员的工作量(因为他们必须审查实习生所做的所有工作),但在人员培训和发展方面却有很长的路要走。


文本冒险。

  • 这是一个控制台应用程序
  • 您需要做一些有用的事情,保存清单、地图和房间状态并解析输入。
  • 很有趣,你可以把它给别人玩!D

请看一下《绝对初学者的Python编程》一书中的代码示例


这取决于你想教初学者什么。如果你想教语法,那么简单的"hello world"程序和那些把1到100之间的奇数都吐出来的程序就可以开始了。如果你想教数据结构,那么可能是20个问题的游戏或者简单的排序程序。如果你试图教递归,那么也许是一个广度优先的搜索程序。如果你想教数据库操作,那么像订单跟踪系统之类的东西是合适的。