@
djoiwhud ……我其实就只提了反例没给出明确结论,不知道你所谓我的结论是哪来的。
除了原始主题的和你更打不着杆子的结论外,我补充几个要点吧。
1. 就算抛开编程不谈,很多教育问题跟年龄没多少关系,至少没那么大的直接关系。
我说过了,差别是“系统训练”。积累不足,所以解答不了一些问题,这很自然。
积累是需要时间的。
如果启蒙得早,一样可以解答出来。我说的反例也全是这样。
你这里的实验设计即便能使结论的普遍性没疑问,也只能证明普通的小学生低年级数学教育的累积年限通常不足以回答这些问题。
要支持你的结论,那么至少还要有提前教育的对照组。
2. 从某种意义上来说,这些小孩确实是挺笨的,都达不到有必要学习编程的门槛——教了基本白教。
这倒不是说这些小孩天份一定差,而只是说天赋还不够到克服学习年限和保守的教学广度等方面的劣势而已。
一定程度上,更笨的是没能力分析清楚这些问题的家长,以及抱有刻板印象自作聪明的你。
3. 我要从另一个侧面强调学习编程跟年龄普遍无关(只要有足够年限的前置基础知识学习的支持):大多数成人其实在编程上也没学得好到哪去。
虽然你给的这个例子上超过 12 岁的小朋友就不会翻车,但这只是一小部分前置知识。正确理解一般意义上的所谓“编程”是更难的问题,难到你区分年龄也没多少用。
比如我给其他人的回复中提到,不理解递归的人,很难真正地理解了 for ,就算会用 for 去写代码。因为理解具体语法和语用相对系统性理解知识体系来讲真是小意思,一不小心小朋友死记硬背都能蒙混过关了。但是就算会做对要求 for 去写代码的题就一定算是“理解”了么?显然还有个仅仅因为这题目只是要求你用 for 于是蒙混过关的可能。
所以我会把真正理解的门槛提升到“无中生有”,用掌握使用更一般通用的知识来提供等价效果来衡量理解程度。但这样更不容易出标准化试题,非得出题画风就类似:
给定一个没有 for 之类的语法的语言,如何用其它特性实现 for 的功能,或者给出理由说明这种语言不可能实现这种功能?
——这就有个鸡蛋问题。如果学员没有接触过已有语言的 for ,怎么知道“for 的功能”是个什么玩意儿?
于是,如果要刨除这种任意的具体“实现细节”的知识,那么递归这样的关于“如何描述计算”的框架性知识就是不可能逃避的。非得逃避,都没法鉴别出学员到底是不是只是会了个 for 的套路,连循环(迭代)都没理解了——注意,迭代只是尾递归的变体。
这里考察的就是编程的真正基本核心技能之一。(重复:会不会用 for 之类的具体语法去写东西,真不是什么大不了的事。)就这么个基本知识,偏偏还有不少半桶水咣当响的拎不清重点,还能有不少强行跟实现性能扯上关系所以“不建议用”,也是呵呵哒。
总之很遗憾,大部分成年人编程的水平可能水得出人意料了。
基础不牢靠不说,更上层的东西也要划水死记硬背,不懂相关历史和知识点在整个体系中存在的意义,为了给自己理解的坑擦屁股搞什么“模式”( t/599048 ,t/835769 ,...),拉着别人一起坑……
造成这种水货问题的原因之一是对编程学习内容上的一些刻板印象。这类问题对业界的毒害比所谓少儿编程对业界的影响明显大的多了,以至于要不是你的刻板印象也与之有些相似的可比性,我都有些懒得怼你这样观点。
题外话,虽然无意散布焦虑,基于公益目的地图炮还是得放:趁早转型深耕其它业务(包括管理),编程这个业务真不适合没天赋的大龄程序员,不管合格的后浪多不多,迟早会被淹没……何必损人不利己继续卷呢。