很多计算机专业学生和致力于计算机从业的人士经常困惑于如何提高计算机科学(Computer Science,以下简称CS)及编程的水平,他们日复一日地从事大量繁复的编程工作,创造了大量低质量,缺乏insight的代码,既没有解决理论计算机的问题,也没有解决计算机科学工程的问题,反而徒劳地耗费了大量时间。
问题究竟出在哪里?
作者认为,问题主要出在以下方面:
1.计算机相关领域内的知识储备不足,缺乏良好创意,想法和构思,从认识论角度讲,人,无法超越性地解决理论及工程问题。
2.CS学习者研究者和从业者缺乏计算机领域之外的知识储备和经验认知,对世界的看法不足,从认识论角度讲,缺乏良好的思维模型。
3.CS学习者研究者和从业者停留于低水平学习工作的状态,没有继续深入研究学习,缺乏刻意练习,从人的意志的角度讲,人丧失了进取心和斗志。
CS并不是一个独立学科,事实上并不存在纯粹的,完全独立的计算机科学,所谓的广义CS,就是系统性研究信息与计算的理论基础以及它们在计算机系统中如何实现与应用的实用技术的学科,其本质是数学,物理学,电子电路技术,光学技术,材料科学,化学,通信技术,语言学等等诸多学科及技术的交叉领域,涉及到的学科领域知识和技术应用纷繁复杂,包罗万象,尤其是数学,物理学和统计学对于CS至关重要,是构成算法,计算模型和软件等计算机灵魂的关键,而缺乏这些知识就会导致一个严重后果,人就不能良好解决问题。
在任何领域,自然也包括CS领域:原理高于一切。
举几个关于CS学科本身的例子,如果一个研究CS的人,他不能很好地理解大整数分解问题和离散对数问题,那么他就无法对RSA算法地优缺点和局限性有着更为深入的理解,遑论超越RSA算法(这是CS领域内知识不足的情况);如果一个研究CS的人,他不能搞明白计算语言学的知识,那么他也就无法对发明设计计算机语言有着不同凡响的insight;如果一个研究CS的人,他不懂物理学基础知识,信息论和通信原理,那么他也很难对无线通信技术有着什么深入的创见。
再举一个关于CS学科外的例子,现实世界的很多的计算机工程问题都建立在现实世界很难用准确的形式语言或well-defined的语言去定义和分析的基础上的,即便是可以well-defined的情况下,世界也由于过于复杂,CS学习者研究者和从业者也会由于知识水平有限而无法深刻理解具体事物的技术细节和来龙去脉,一方面是现实世界无法well-defined,另一方面是工程问题的目标和目的很难well-defined,所以你就无法对工程问题逐级拆解,逐步分析,逐步解决(话说现实世界中很多这方面的工作是产品经理的职责)。比如,如果你要设计一款绩效管理软件,你首先对绩效管理都没有足够的认知和知识储备,你有天大的技术水平也难办,再比如自动驾驶,需要汽车动力,力学和物理学等方面的知识,再比如,酒店管理软件,需要了解酒店管理,等等。这些知识的不足是属于那种CS领域外知识不足和经验认知不到位的情况。
正是由于这些知识上的不足,以及增添新知过程中巨大的难度,让学习者对CS领域内及领域外的刻意练习望而却步,大多数CS学习者止步于简单应用已经滚瓜烂熟的理论和技术,而对学习新知识新技术很抵触,学习研究CS学科内和学科外不利的唯主观心理上的根源,追根究底还是在于:人,很难克服自己的内在动机不足和畏难情绪。
而这种内在动机不足和畏难情绪一方面在于,主观上的学习本身就难,自身的智力和方法准备不足,另一方面也在于,各种各样的客观限制性的约束条件太多。
网友评论