学编程和学某门语言是两个不同的概念。立志做程序员,首先是学编程,那是一种思维能力和技能,通用的,任何编程语言都管用。但编程能力不可能凭空,必须通过某门语言表达,此时才是学语言。有些人本身已经是资深程序员,只是刚接触某门语言,那么他就会说学语法很重要,但若是连编程都是初学的,就不能把重点放在语法上了(也就是说以人家的基础那样说是对的,但你自己的基础未必跟人一样,就不要道听途说),那样反而会舍本逐末,被语言的细枝末节吸引,埋头死钻,而忽略了从更高的层次领悟编程之道。比如,链表这样的东西,其实对大多数编程语言来说,都不过是一种现成的模型(即使是现在的C++它也成了标准库提供的东西),初学编程,重点应放在什么问题、什么时候应该运用链表这种数据结构来解决,而不是去学习如何构造链表的增、删、改、排序之类算法,只需要知道链表这个东西该怎么用就可以了,因为那是现成的工具。学编程,重点是如何解决各种各样的现实中最经常碰到的问题,先做熟练技工,能独立操作机床,而不是去学如何设计和制造机床。随着实践经验的积累,慢慢就能领悟到设计之道,那个时候,才有资格理解链表为什么要这样设计,是什么原因促使这种数据结构出现,而平时的经验已经给了你充分的例子,反过来就能更好地应用于实践,不至于张冠李戴套错模型。
C语言正是把细节落到最底层的编程语言,对资深程序员来说,它当然是利器,但不是初学编程者能用的。李小龙挥舞双截棍威力无穷,而且也能解释得通双截棍为什么有那么大的威力,但你也去舞,能打得过谁?须知自己是一个连对方出招有什么征兆都不知道的人,纵使拿着手枪,也只有被抢的份。总之,我还是那句老话,初学编程的人学C,是很危险的事,往往半途而废,因为那些知识,超过大半是根本不知道用在何处的。特别是看到那些说指针能解决啥啥啥问题的,就觉得好笑——如果只有指针能解决问题,别的大多数语言会那么尽力回避它?连C++都要用迭代器概念来取代指针,可想而知指针有多危险,不是给初学者用的。只要初学者一沾这方面,所遇到的巨大困难很容易就把他们吓退,从此不碰编程,他觉得没指望,别想成高手了。
看看那几个问联合体的问题就知道了。联合体,书上是有讲,但这种东西在什么地方会用到?你知道吗?遇到什么问题你会想起这样用可以较方便?你连这种需求都没碰到过,现在来钻它的问题,讲了能理解吗?那算理解吗?这样考试过关了就等于懂编程了吗?多少人在追求深入的书,但最深入的东西其实就是最初就接触过的基础知识,到最后才明白自己原来一直不知道那个用了无数遍的东西居然有如此深奥的内涵。没有实践,看什么秘笈、高手指南,都是多余的。
我曾跟很多人说过,“力学”这门课程的核心概念“力”,其实是最搞不清楚的概念,恰恰现代力学理论体系中,视“力”仅为中介理念,既不是实在,也不需要出现,它的唯一作用,不过是构造某些定律公式。甚至在现代物理学中,连“质量”的概念都没有确切定义。可见最深奥处其实就在最浅显处,这是真理。凡是求深的,实际上是没入门。
[
本帖最后由 TonyDeng 于 2011-12-13 23:25 编辑 ]