前几天,我的一个朋友问我是否只是在编程的时候查看数字列表,或者它是如何工作的。我试图解释说,它通常更像数学公式,加上一些奇怪的英语单词,而且它通常是可读的。但是,这是一个非常模糊的解释,而且对于非程序员来说,这也解释不了什么。
但这让我开始思考怎样才能树立一个好榜样。不是因为我想教她编程什么的,只是想让她知道程序代码是什么样子的。
这让我想知道什么才是一个好的例子。结果却出乎意料的困难。
我的第一个想法显然是一个简单的“ Hello World”程序。但它真的没有显示任何有用的东西。它并没有真正展示我们如何使用函数,或变量,或者像 if
或 while
这样的控制流结构来制作一个实际上是 做点什么的程序。毫无逻辑可言。程序对任何事都没有反应。
所以也许计算素数会是一个更好的例子。但话又说回来,这可能太理论化和不切实际了... ... (这有什么好处呢?)?这和编写“真正的”程序有什么关系?)再说一次,它没有明显的控制流逻辑。这只是一个直接的数学序列。
还有,应该使用哪种语言?
理想情况下,我不认为它必须是一个非常“干净”的语言。相反,它可能应该使结构更加清晰。如果是这样,那么一定数量的噪音和混乱可能是好的。出于这个原因,也许类似 C + + 的东西实际上比 Python 更好。显式的花括号和类型说明符是显而易见的“挂钩”,用来帮助解释程序的结构,或者突出显示几乎可以读作英语的简单语句不是 只是。
但是在 C + + 中,我们也会遇到一些彻头彻尾的怪异语法。为什么用 std::cout << x
打印 x?为什么不使用“正常”的函数调用语法呢?而且 printf
也好不到哪里去,因为它的字符串格式晦涩难懂,而且缺乏可扩展性(我是否希望通过对字符串使用 char*
来使程序复杂化?或者我使用 std::string
并且满足于调用看似不必要的 s.c_str()
来获得一个可以用 printf
打印的字符串?
也许更高级的语言会更好,但是哪一种呢? 为什么呢?
我知道这里有很多类似的问题,关于用哪种语言/示例程序来教编程。但我认为这里的要求不同。在教授编程时,我们最想要的是简单性。我们要避免任何没有被教过的东西。我们希望确保学生能够理解屏幕上的 一切。
我对简单本身不感兴趣。而是给“局外人”一个“程序是什么样子”的概念。程序并不简单。但他们的 做一般表现出一定的结构和方法的疯狂。什么语言/程序最能突出这一点?
剪辑
谢谢到目前为止所有的建议。你们中的一些人对这件事的看法和我的预期有些不同。
也许应该举个例子。我不会开飞机,但是我对驾驶舱的样子和飞行员在飞行时的“行为”有一个基本的了解。
虽然我不是专业的木匠但我一眼就能看出是锯子还是锤子。
但是当你在电影中看到任何与编程有关的东西时,例如,它通常只是充满垃圾的屏幕(就像 Matrix 中的绿色文本)。看起来不像是一个正常人能做到的。里面什么都没有。不是程序员的人会认为这是黑魔法。
我不想教她飞行,也不想教她编程。
但我想给她一个基本的参照系。只是一个想法,“啊,这就是你的工作。因此,屏幕上不仅仅是随机的符号和数字。”。与矩阵风格的随机符号和数字相比,即使只是显示一个简单的 if
语句也是一个启示。
你们中的一些人建议解释一个算法,或者使用伪代码,但这正是我想要避免的。我想要一些简单地显示什么 真的代码看起来像,在同样的方式,你不必是一个木匠看看一个锯,并得到它是什么,它是如何工作的基本想法。
当我还是个孩子的时候,我们有一次去意大利度假。在下降的过程中,飞行员让我进入了飞机的驾驶舱。当然,我没学过怎么开飞机。但我确实窥见了飞行员的世界。我知道他们是怎么让飞机起飞的,飞行员到底是做什么的。
这就是我想做的。我的朋友对学习编程没有兴趣,我也不想强迫她去理解源代码。但是她很好奇我使用的是什么样的工具或实体。屏幕上滚动的是黑客帝国式的符号吗?纯数学?散文形式的英语?
我所感兴趣的是传达对“我工作时它看起来像什么”的非常高层次的理解。