很多同学现在正在搞ACM,知道C++在很多情况下不如C语言灵活,尤其是stl等工具的使用上,不能随心所欲编写想要的算法。但是,C++作为C语言的超集,面向对象的思想等等都是C语言不可及的。它兼具其他面向对象语言的特性,并向下兼容C语言,在在很多同学看来应该拿它作为入门语言。当然,初读C++ Primer这类书的时候很难啃下来,但是如果结合上课讲解的知识,对C++有个大致的了解是没有问题的。但是很多学校仍旧拿C语言作为入门计算机语言,C++课程名字直接就是面向对象,有些不可思议。
还有为什么学校不会介绍一个重要的工具——STL?它的正确性、稳定性和高效性已经被无数次验证,为什么学校不介绍它。很多同学相信STL在真正的软件设计里面应用十分广泛的。
他们问了一个非常好的问题。不过我的回答也许让你失望,我今年1月去做过学校调研交流,对学校在程序设计教学中的做法还是认可,并且作为一段时间以来要学习的。在我所在的学校,尽管第一门程序设计课称为程序设计基础或C++程序设计,在这个为时两学期的课中,第一个学期基本还是C的内容,讲C++中面向过程的程序设计,第二个学期是面向对象的部分。你们学校的分两门课的教学,中间还要插入一个以实践能力提高为主的短学时课程,其好处是明显的。
要回答你们的问题,必须明确,在大学里第一门程序设计课程中要解决的主要问题是:学会编程序。因此名为XX语言程序设计,重点在于程序设计方法,然而现实的考虑中也不得不将很大的精力投入到语言本身中来。学习第一门语言,首先在于能设计程序,至于用这个语言解决工程中实际问题的方案,倒是要放在其次了。
大学的课程是一个体系,想要实现的某一个目标常体现在多门课程中,并且各门课程之间能够形成承接关系。举一个例子,排序在学科中很重要,数据结构中有专门的内容,在程序设计入门课程中,也要初次尝试。这些尝试要比学会用STL中的sort算法更有意义,更应该放在优先的地位。再如,你正在做的计算几何问题,以及图形学课程中将要学习的算法,不是也有现成的图形包可以直接使用吗?实际上,大学的课程从用的角度有两方面的兼顾,一是能够直接用,二是要通过这种体系,为你将来进一步地理解STL、图形包之类的机制、工具提供支持。而后者,你应该意识到,这是专业人员,无论在思维方式上,还是对适应行业变化,甚至是引领行业变化的资本所在。
有一句大家相传甚广的话你没有说出来:大学,有用的不教,尽教没有用的。从某种意义上这句话对,但是,在“用”的层次上多加区分之后,你会发现,直接用于工程,以及直接用于学习能力提高与思维方式改变,间接用于形成终身学习能力,适应技术的可能变化,这都是大学之用。在此当中,“直接用于工程”没有太多的突出,也不见怪。学习计算机的另外一些路子,市场用什么就学什么,想转做另外一个方向的工作,必须接受培训,他们所学的全部就是直接用于工程的知识。
做了如上的解释,我不能回避学校教育中的缺失。我们正处在这个时期,其实真实的世界中,补上这个缺失,又会在新的发展阶段遇到新的不足。其中还有一个缺失是,没有让同学们体会到直接用和间接用之间的关系。我当老师多年,也深知在“读高中是为了考大学”,“上大学是为了找工作”这样的直接思维甚浓的条件下,大学在改变学生的学习方面,不只是只坚持目前该有的做法就算可以的了。C++课中是需要有STL的内容的,但在有限学时,以及不少学生在学习上的投入问题,其中的取舍,作为老师是有纠结的,当学生的,不同的人,根据情况,可以有不同的应对。
意识到这一点,也就知道了,大学的教学计划只是一个公共的要求,是一个获得毕业证的最低标准,要知道除了老师教的,课外必须要有自己额外加的。这一部分是可以有充分的自主性的。你另加STL就是一个很好的做法。参加ACM竞赛要额外做大量练习,这也是一个超越教学计划的做法。在某个时期,需要,也可在应用能力提高上投入了,自行安排学习即是。如果届时选择用的语言是C++,把STL用熟,那是不可回避的事。上过了大学,就要有准备,也要练出自学能力,需要学的东西,并不一定需要人教。如果不去摆脱总让人教的思维,结果就是当技术发展了,你将不能主动地站到前沿,在等人教的过程中,面临无情的淘汰。
回到你问的问题上,在工程中用哪种语言,根据需要去定。而实际上,在大学中程序设计入门,选用哪种语言,是可以有多种选择的。比如还有的学校用Java,国外开始有用Python的。这都是多种选择中的一种,各有利弊。作为学生,你的选择是,照你的学校安排的路线去执行。其中的不足,还要有课外的学习作为补足。上课只造就所有同学共性的地方,课外却使你拥有了自己的精彩。不同的同学在课外有了不同的选择,于是分出了水平上的阶梯,以及出现了各具特色的人才。
用好你当前的教学计划中提供给你的帮助,开创出自己有效的自学,让你的大学更精彩。
热门跟贴