五千年(敝帚自珍)

主题:【原创】三年级也可以学编程 -- 月色溶溶

共:💬209 🌺336
全看分页树展 · 主题 跟帖
家园 理论上的东西大家说得比较多了

那我就谈谈目前国内c语言教学的现状。我本人在工作中经常使用C++/python,也在大学里教过C语言。目前国内大学面向非计算机专业的编程课仍然以C语言为主,造成这种现象的主要原因是:1,国家二级考试仍然以C和basic为主,不过basic现在用得实在不多,所以学生们更愿意选c语言;2,c语言的教师很好找,计算机系出来的人都会。不过在教学实践上,目前国内教授的基本是经过“阉割”的C,对于c语言比较复杂的地方比如指针,内存分配,宏等,都不做重点要求,少讲,浅讲甚至回避,重点还是放在C语言的基本语法上。这也是经过多年的教学实践,大家对于现实所做的一个妥协。对于初学者而言,面临的主要困难有2个地方:1, 如何用计算机的方式去解决问题,也就是设计计算机算法;2,学会并使用编程语言实现算法。对于编程者而言,前者最重要,后者不过是为了实现前面的目的而附带学习的技能。

在有限的时间内(16周,2节(课堂学习)+2节(上机实践)),通过学习c语言而达到上述两个目标事实上是比较困难的。所以目前的教育者们通过减少第二项的难度来节省出时间来提高第一项的学习效果。所以大家虽然还是在学C语言,但在计算机专业出身的人来看,这个C并不是真正的C。

这样的效果如何呢?我认为并不是很好,对于以后需要用到c的专业来说,比如数学,物理以及一些工科,这样讲得太浅,受得训练不足。以后需要的时候还得自己花时间学习。所以这些专业很多时候要求为他们单独开设c语言课程,提高难度和深度。对于其他的专业来说,他们花了很多时间学习c语言,其成果不过是帮助他们拿了个二级证书。对于他们的工作意义不大。这是因为C语言是一种很适合造轮子的工具,但是大多数人更需要的是把现成的轮子按照自己的要求组装成汽车的工具。造轮子不但需要很多时间,还需要很多很专业的知识和经验,光会个c语言是远远不够的,所以对于非计算机的人从头造轮子并不实际。如果学完c语言,却不学数据结构之类的课程,用c语言做不了什么有意义的工作。至于其他的很有用的工具,例如网络,文本处理,图形界面,图形图像处理等等,就更得寻找第三方的程序库了。c可以使用的程序库确实很多,但是关于这些库的学习资料却很少,即使有大部分也是外文资料,对于使用者来说非常不方便。事实上大多数人找都找不到。相比之下,一些高级的脚本语言,例如python,不但内置常用的数据结构作为语法的一部分,也提供了很强大的标准程序库,学习资料也比较多。所以从使用的角度来看,学习python,c#/java的效益比c语言高得多。

从学习的角度来看,c语言即使经过阉割后,学习难度依然高于python,以及经过类似阉割的c#和java。主要是c语言语法太灵活,针对初学者的陷阱比较多。我见过相当多的学生即使写过比较多的程序后,依然有时会把“==”写作“=”,或者在case后面忘了写break,在臭名昭著的scanf上栽跟头的人更是不计其数。python的语法则很简单不易写错,还可以养成良好的缩进习惯,内置的数据结构更是十分的方便有用。而且同样地功能用python实现,即使不用库函数,代码行数绝对要大大少于c语言。所以现在我如果能用python,绝对不会用c++的。

所以我觉得如果想做长线投资,可以考虑学c语言,虽然java/C#可能更好一些。对于楼主的情形,python足够了。你自己也许有足够的意志和C语言各种陷阱做斗争,学完c语言古怪的语法(对于初学者而言),3年级的学生会不会用这种意志就很难说了,对于这个年龄段的孩子,培养他们的兴趣比教他们知识更有价值。

最后我再补充一点,c语言的学习对于计算机工作原理的理解帮助十分有限。我当年学c的时候,对计算机如何工作仍然不理解,直到学了汇编语言之后,我才明白c语言为什么要设计成那样,c语言程序是如何工作的。因为它们的对应关系十分明显。单学习c是不会有太大的帮助的。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河