作为入门,D 语言究竟如何呢?我可以自信地说,孩子们不仅理解了 D 语言,还学习其他语言的基础知识。由于 D 语言是他们接触的第一种类型语言,所以首先我必须解释类型是什么,以及为什么类型很重要。此外,我必须挑选 D 语言中不会造成混淆的概念。为此,我略过了许多高级功能,例如:

● 模板

● 类型推断

● 运算符重载

● 通常意义上的重载

● 类/接口/OOP

● 指针/引用(大部分)

● 通常意义上的内存管理(感谢 GC!)

这意味着,我介绍的 D 语言缺少很多语言特性,尽管我个人特别喜欢其中的很多特性。但我不得不在教学中避开这些特性,以免孩子们感到困惑。此外,我也希望尽量避免走捷径,因为我希望他们在学习如何更快地编写代码之前,首先掌握基本的概念。例如,我努力尝试使用花括号将作用域括起来,而没有采用单行的语句。

我发现孩子们处理得很好的特性是基本类型,如整数和字符串(尽管“字符串”这个名字值得回味,但他们需要过一段时间才能理解)、if 语句和 /while 循环、结构和函数。他们很难理解数组和关联数组,这可能是由于我缺乏教学经验。我还要指出,虚拟教学面临着一些重大的挑战,不只是你无法走到孩子身边帮助他们,或者是无法在白板上画出数据的布局方式,虚拟教学无法替代面对面的交流。但是,他们能够从容地处理嵌套函数,这让我感到十分惊喜。这是 D 语言中的一个很好的特性, C 中没有,C++ 中也几乎没有,而且我个人花了一段时间才习惯。

问题反思

问题多到不胜枚举。首先,我必须时刻谨记对编程一无所知是什么感觉。我没有参加过任何编程教学的课程,也没有寻找“正确”的教学方式,只是根据孩子们的技术和经验选择了最好的方法。每两周上一次课也是一个大问题,因为孩子们需要回忆上次课程的内容。当然,每天或每周两次的课程安排会更好些,只可惜我没有那么多时间来备课。

其次,我没有游戏编程的经验。好在有了 的帮助,只要能理解事件循环,就会非常简单易懂,而且很有趣。

除了个人和环境的问题,我还有一些给 D 语言和社区的建议,为的是让 D 语言成为更好的“入门语言”。以下建议没有特定的顺序:

错误信息

D中的错误消息有时非常难懂,我指的不只是模板。孩子最常犯的错误是标点问题。而 D 会给出一堆乱七八糟的消息。大多数时候,我需要解释发生了什么,但即使我自己有时也会被编译器迷惑。例如,如果忘记分号:

void main(){
import std.stdio;
int x = 5
writeln(x); // line 5
}

就会得到如下错误信息:

foo.d(5): Error: semicolon expected, not `writeln`

可是,第5行明明有分号!为什么会出问题呢?理论上,只需在第 5 行的 调用之前添加一个分号即可解决这个错误(毕竟,D 中的空格没有实际意义)。但实际上,编译器不应该建议这样做。

我觉得以下错误信息会更好:

foo.d(5): Error: previous statement not terminated, perhaps youneed
a semicolon on line 4?

如果少一个或多一个括号,怎么办呢?编译器会给出一堆难懂的错误信息。我知道这不是一个容易解决的问题,但由于编译器不涉及棘手的语义部分,如果通过源代码的其他提示来给出解决方案,会怎么样?比如通过缩进获取提示。

D编译器的一个重要功能是检查拼写,并给出更正建议。但有时,很难看出给出的建议究竟想更正哪个拼写(尤其是当大小写不同时)。为什么不突出显示应该更正的字母?既然 D 语言使用不同的颜色输出错误信息,我认为可以让输出更加清晰。

我必须转达一个学生的评论,他说他很喜欢 VS Code 的一个功能:跳转到编译器报错所指的那一行。这可以让我们看出他们的感受。

上的 调试器

我面临的另一个挑战是, 上缺乏良好的 VS Code 调试体验。例如,在 VS Code 中,C 语言的调试器会显示一个字符串的长度和一个C风格的字符串(可能由于结束符问题而显示一堆垃圾)。我不希望这些信息让孩子们感到迷惑。我知道 D 有更好的调试体验,但这些项目需要 Dub 支持,而 D 只能与 集成,我不想在教这些孩子时掺和这些问题。

我认为 的 VS Code 插件非常好用,而且在大多数情况下,运行良好。谢谢!我知道调试是一件很难的事情。

外部库的链接

我遇到的难题还有一个,使用Dub进行链接。如果你只使用 D 和 OS 提供的库,那么 Dub 非常棒。然而,如果你需要依赖操作系统之外的 C 库(例如 ),那么不仅需要添加依赖项,还要下载预构建的库,或者自己动手构建。虽然对此我没有很好的建议,但我希望通过某种方式告诉 Dub 从哪里下载这些库,或者有一个中心仓库来存放这些库,以方便链接器在 dub.json文件指定的路径之外找到这些库。许多库都在 上,因此可以将 作为下载和安装外部库的主要来源。

我花了大量时间帮助孩子们搭建环境,如果能内置到 IDE 或 Dub 中,对 D 语言的教学会有非常大的帮助。

今后的建议

我相信 D 可以成为入门级的编程语言。在我的班上,有些孩子从未编写过真正的代码,但现在也能够使用 D 和 创建二维游戏(尽管需要大量的手把手教学)。我认为 D 语言想进一步扩大这种成功的案例,就需要提供一组面向新手的学习资源。D 的大部分学习资源旨在教授有经验的程序员如何根据已有的知识使用 D 语言编程。这些资源解决的问题是:“如何在D语言中实现某个语言的某个功能?”但我需要解决的问题是:“如何编写代码”,而且还是使用 D 语言。

这些资源的创建应该不难,因为 C 语言编程的学习资源非常丰富。而 D 与 C 非常相似,二者几乎可以互换。

最后,这些资料必须富有吸引力!在学习编程时,做一些有趣的项目非常重要。兴趣能够让孩子们更加投入,与编写简单的 hello world 程序或 页面相比,编写出自己喜欢的游戏更能激发孩子的兴趣。一种很好方式是,用 D 语言编写一个游戏,然后再引入其他特性,改进代码。

我希望这些建议能够实现,因为我认为该领域的开发大部分集中在一些降低学习门槛的框架上,从而让孩子们也能够学习编程,或者是一些纯粹的 hello world 级别的千篇一律的教学上。我认为我们应该尽可能展示 D 的潜力,通过有趣的项目吸引热心的学习人员,引导他们使用我们最喜欢的语言学习编程!

参考链接:

END

《新程序员001-004》全面上市,对话世界级大师,报道中国IT行业创新创造

成就一亿技术人

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666

声明:1、本内容转载于网络,版权归原作者所有!2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。3、本内容若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!