如何学习编程
(我的编程生涯)

最近,我在设计一款基于课程学习的商业平台,将paracraft与一网乾坤结合起来。我试用了几十个同类型的课程学习平台和游戏软件,包括teachergaming,tynker.com, 谷歌课堂等。

市场上,有很多教孩子们学习编程的平台。我认为,它们都太糟糕了。我宁愿让我的小孩去玩游戏,也不愿意让他们去这样的平台上学习编程。那么,一个优秀的程序员应该如何教自己的孩子编程呢?这就是我们的软件和课程需要解决的问题。因此,我以我自己从7岁开始到今天的编程经历做了一项研究。

我从7岁开始学习编程。在早期的学习过程中,有几个核心内容想分享给世界各地的小朋友。

核心内容一

1989年,我7岁,我父亲带我去他的实验室,给了我一本我完全看不懂的书。但是,当我在IBM电脑上,对照着书,用键盘敲出20行代码后,我看到电脑屏幕上出现了一个漂亮的动画形象。我父亲用我几乎可以理解的语言解释了几个代码指令的含义。“代码太神奇了!”我大叫道。在我小小的脑袋里,萌生了一个念头,将来我要用代码做更多更伟大的事情。

核心内容一:

孩子们学习编程,并不是从写程序或者解决难题开始的,他们先看代码,然后模仿一个专业程序员写代码,他们不需要全部理解这些代码。就像他们学习说自己的母语一样,也是通过这样的方式习得的。

核心内容二

一年后,我拥有了一台自己的IBM家用电脑。我父亲下载了好多个电脑游戏,先存在了软盘里,后来又存到了光盘里。我用3年的时间把所有的游戏都玩了一遍,其中,至少有300款游戏是我很擅长的。我学会了用DOS指令安装和运行大型游戏和秘籍。20世纪80年代晚期和20世纪90年代早期的游戏设计者们,在设计游戏时,耗费了很强的脑力。我仍然认为,孩子们现在玩的那些2010年代的游戏远远比不上我掌握的那些早期游戏。我长大的过程中,一直在收集比较好的单人游戏。但是,随着科技变革,每年好游戏反而越来越少了。(图形越来越好了,游戏采用了升级和多玩家模式,更容易让人上瘾了。现在大多数游戏都让用户快速做决定,而不是慢慢地思考。)直到1995年,12,3岁的时候,我慢慢不玩游戏了。我已经掌握了一些技能,我相信我玩的那些游戏中有90%我都有能力自己开发,我还花了很多时间编写和调试自己的游戏。

核心内容二:

玩很多好游戏是非常重要的,孩子们可以通过这种方式知道,等他们长大后,他们想开发什么样的游戏。玩的游戏太少,是无法对自己想做的项目有一个清晰的规划的。孩子们应该尽可能地玩更多的游戏,而且要非常擅长。这一点对于男孩子尤其重要。

核心内容三

早年的时候,我都是用IBM电脑玩游戏,先用键盘,后来用鼠标。我的很多同龄人只在专门的游戏设备上玩,他们只能成为厉害的游戏玩家,却无法成为优秀的程序员。因为他们没有键盘,无法像我一样用指令手动安装游戏,并以640KB内存运行。顺便提一句,我的同龄人,有一些是在苹果电脑上玩游戏,但是他们也成为不了程序员。尽管在我的朋友向我展示第一台Mac笔记本的时候,我觉得它真是太酷了,但是,我还是更喜欢我的80386运行Windows3.1.

核心内容三:

让孩子们尽可能早地用电脑玩游戏,教他们用键盘和鼠标打字,并要选择合适的操作系统(个人更喜欢Windows系统。虽然,现在MAC很不错,但那个时候不行)。

核心内容四

我起初是在DOS下用QuickBasic/C,后来微软发布了他们的第一个IDE,visual basic 和 c++,版本1. 我立即就转向了它。因为第一版Windows和IDE可以开发图形窗口应用程序。他们的IDE陪伴我度过了早期编程生涯。它仍然是当前最流行的IDE。尽管如此,那时的小学只教DOS的QuickBasic,所以我们学校的学生不能像我一样成为年轻的程序员。

核心内容四:

孩子们不应该只是简单地使用那些用来模拟编程的一次性代码,而应该用正确的工具和语言去编程,这可以让他们在接下来的10年中更好地提高编程能力。

核心内容五

我是否提到过,我有一个计算机老师,他从我8岁起,每周末都会检查我写的代码。是的,这是我早期项目式学习中最重要的一个环节。在前19年时间里,我住在HIT大学的校园里(HIT建造了中国第一个计算机和机器人实验室)。我的计算机老师叫LuYang,他比我大12岁,也在同一所大学里生活和学习。对我来说,他是一个计算机天才。

核心内容五:

项目式学习中,每个孩子都应该有一个至少比他们大12岁的老师,老师跟他们一起学习,帮他们检查代码,给他们提供帮助。这是很重要的。这个老师最好是一个大学生,就像我的老师一样。成年人学的比孩子快,能提供必要的帮助。

核心内容六

互联网还没有诞生的时候,我的书架上有我能买到的所有电脑书籍。1990年到1992年间,微软通过MSDN订阅(两本很厚的书)发布了windows NT预览API。我老师有一本,他看完后把这本书给了我。他还向我推荐了一两本很厚的书,其中有些章节我读了一百多遍。早期,我花了很多时间看书,印刷版的API参考手册和MSDN的帮助页面。我学习英语主要是为了阅读这些文档。我还记得有两本书神奇地出现在我的书架上,有一本包含了100个计算机游戏设计文档,还未实现但有一些代码提示;另一本包含了300个自制科学发明的设计文档。在我10岁到12岁的时候,我将很多设计文档在软件和物理世界中实现。之后我就能设计自己的游戏了,花了更多时间在软件方面。1995年,互联网、门户网站、光盘突然出现了,开启了一个新世界。1997年,我完成了一个web版的游戏,这个游戏从1995年就开始开发。之后我又做了一些3D游戏,创建了自己的网站,并在上面开放了我的所有游戏源代码,一共20款。(早期,由于电脑故障,我多次丢失代码,还哭了。)从上中学开始,我的项目就很大,由于学业繁重,每年我只能发布一到两个项目,我几乎把所有的空闲时间都花在了编程上。

核心内容六:

对孩子们来说,怎样获得信息,从哪里获得信息,是非常重要的。孩子们应该很快学会从现实世界中获取信息,比如官方的开发网站、搜索引擎、那些真正的专家给专业程序员编写的书籍。父母和老师应该帮助孩子们获取那些信息源。孩子们不需要全部理解它们,但是,依据我的经验,孩子们是能够理解它们,并在大脑中留下占位符的。这是真的,就像一个新生儿在一个如此复杂的世界里出生,没有足够的知识储备也必须在这个复杂的世界生存下去。但是,他们都安然无恙地存活下来了。

核心内容七

我是幸运的,和那些我使用的工具的开发者们一起成长,阅读他们的变更日志。我见证了Windows和visual studio的完整变革。我知道每次发布后,新功能、新技术、新语言和用户界面的变化。哈奇用户也同样见证了paracraft四年的成长。这就是为什么自最初发布以来,我们的用户很多都是老用户的原因。

核心内容七:

如果我们不能跟苏格拉底一起生活,那我们就模仿他。这就是为什么我们要创建课程、编写书籍和教程来模拟伟大思想和复杂软件的进化。现在,孩子们有很多大游戏和成熟的工具可以选择。与我的童年时代不同,他们很容易迷失方向,无法专注地学习编程。我们应该创建一些让孩子们上瘾的课程,引导他们走上正确的道路,并与之一起成长。就像他们可以好多年一直玩一款喜欢的游戏一样。

结语:

一网乾坤的课程学习系统应该与我自传中提到的核心内容相匹配。我发现,目前的校本或自定进度的编程课程离理想状态还差很远,有些甚至给孩子们灌输错误的方法。孩子们有了正确的引导和支持后,是可以学到很多编程知识的。到15岁的时候,他们中有一些人甚至可以像专业的程序员一样编程。这就是我们课程学习系统的目标。

对于一网乾坤的编程课与其他平台的编程课,我们做了一个对比,如下:

一网乾坤课程体系 其他平台课程体系
第一堂课 读写20行由专业程序员书写的代码,不理解也没有关系。然后一起观看这些代码运行的效果。 写几个小时的代码,去解决一个愚蠢的问题,没有键盘可以用来执行拖拽和点击操作。(还不如去玩一些很棒的游戏,更有效果。)
接下来5-10堂课 观看和阅读优秀的游戏和动画作品,每堂课学一个简单的指令或者用户界面。学生们课后也可以在家学习我们的课程。使用Paracraft软件,我们可以在游戏世界中阅读所有的源代码。 支持多玩家的工具平台,更多的游戏漏洞需要去解决。(竟然没有设置课后作品这个环节,那如果有些玩家比其他人更快地解决完所有漏洞后,他们要做什么呢?)
接下来的20堂课 再观看20个优秀的游戏和动画作品,在paracraft这个工具平台上至少学习20个有用的操作(我们观看的优秀的游戏和动画作品都是使用paracraft创作的)。学生们玩了30多个优秀的示范游戏后,应该就知道paracraft这个工具可以做什么了,也能对他们自己想创作的故事有一个清晰的设想了。等学生们掌握足够多的编程技能后,我们会引导他们在一网乾坤网站上找到一个老师,和老师一起研发他们的项目。 只剩下20堂课了,编程教学很快就完结了,他们自己的项目也快完成了。但是,学生们直到现在还是只会修复漏洞,他们不知道自己想要研发什么项目,想要创作什么故事。即使他们有想法,也不具备开发这些项目的所有技能,他们甚至不知道他们使用的这些工具有哪些功能。虽然他们在课堂上看了一些程序员同行们做的项目,却从来没有学过他们的源代码。(Scratch很适合2D世界的项目学习,但是Paracraft更适合3D世界。)
更多的课程,适合K12阶段的孩子们 Paracraft有一个工具链,从游戏中的命令和脚本,基于网络的IDE,到visual studio和vs代码的专业IDE。我们也提供高级课程供专业程序员学习。我们致力于让10%的孩子们在15岁能达到专业程序员的编程水平,如果他们从7岁开始就学习我们的课程,这个目标是可以达到的。对于K12阶段的编程教学,我们让学生们玩世界级的游戏,读世界级的代码,并给他们提供一套编程工具链,他们可以一起开发自己的应用程序和游戏。学完paracraft或npl后,他们也可以通过专业的方式学习其他编程语言。我们也会提供一些介绍其他专业语言的课程,但是教授这些语言不是我们的教学范围。学完paracraft或npl后,学生们应该能明白怎样学习其他语言是比较专业的,就像我一样,我的专业编程生涯中共使用了超过20种语言。 大多数平台的课程总量不会超过30个。学生们完全采用自学的形式学习编程,没有老师会指导他们。