这年头,信息奥赛逐渐进入了大众的视野。孩子进入四年级以后,总有家长问:孩子该学C还是C ? 其实还有Python,我先选择性忽略。
从计算机从业人员的角度而言,两门语言有着很大的区别,C语言是面向过程的通用程序设计语言,而C 则是面向对象的通用程序设计语言。
啥叫面向过程和面向对象?通俗地讲,面向过程侧重于分析解决问题所需要的步骤,然后用一个个函数去实现这些步骤。而面向对象则侧重于分析问题中的参与对象以及这些对象之间的关系。
CSDN上举的一个例子比较形象。
用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。
啥意思呢?
蛋炒饭制作的最后一道工序是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。
蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了(讲的是紧耦合)。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了(讲的是松耦合)。
盖浇饭的好处就是"菜"“饭"分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是"可维护性"比较好,“饭” 和"菜"的耦合度比较低。蛋炒饭将"蛋”“饭"搅和在一起,想换"蛋”"饭"中任何一种都很困难,耦合度很高,以至于"可维护性"比较差。软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。
当然,C语言在解决紧耦合问题方面也不完全像上面的例子那么不堪。一名C语言高手也能写出很好的松耦合程序,而只学习了C 语法的程序员却写不出好的面向对象程序。这背后,是程序员对问题抽象和系统可扩展性的深入理解和追求,已经上升到了内功层面。抽象与解耦,这是一名优秀的程序员深入骨髓的思维方式,并不会因为你学了一门语言就有根本的改观。
好了,说了这么多。那肯定要学C 啊。
其实,千万不要听外人忽悠,对于参加信息竞赛的中小学生而言,上面说的这些都不是原因。孩子学C 原因只有一个,就是C 是考试语言!
中小学生所学的C ,基本不涉及面向对象的内容,所以基本等同于C。家里有一本中国计算机学会主编的《CCF中学生计算机程序设计》书,就是用的C 语言,里面对面向对象的内容基本上只字未提,而这其实才是C 的核心。所以,信息竞赛所学的C ,其实是被阉割了的C !
当然,如果要真正学C ,那推荐《C Primer》和《C 编程思想》。不过,中小学生要理解面向对象这一套东西,还是有难度的。
公众号xuanbamath创立四周年
为大家精选了12篇必读文章。
- 深度好文:小学数学应该学什么,怎么学?
- 一个数学学霸爸爸辅导孩子的心路历程
- 是什么样的教育,竟要让我们的孩子以命相搏?
- 奥数冠军教你如何解题(付费阅读,买一赠一)
- 讲座视频:怎样在生活中引导孩子进行数学思考?
- 为什么飞机的往返飞行时间不同?
- 古诗词中的数学
- 孤独而高冷的素数
- 原来,毁掉一个孩子的深入思考这么容易!
- 没有葫芦也要会画瓢, 说说我的奥数启蒙经历
- 少儿编程,我这样教
12.李国杰院士作序推荐高考数学满分得主新书《给孩子的数学思维课》