计算思维与算法及程序设计
算法思想并不等同于计算思维,它需要考虑更加实际的“计算”问题。计算思维是一种抽象的思维活动,算法则是把这种思维活动具象化,描述成具体的方法与步骤。
程序设计则是算法在计算机上的正确实现,它是计算思维的最终结果。
例如同样的问题:求解:S=1+2+3+……+ n。
计算思维:通过计算思维可以得到“直接从1累加到n”的解决方案;
算法:算法则要考虑采用何种方法、通过何种步骤来实现这个方案,比如,如何输入与输出,怎样用循环实现累加等;
程序设计:程序设计是将算法所描述的方法与步骤转换成计算机所能理解和操作的指令代码,比如使用“For/Next”语句进行循环、用“S=S+i”赋值语句实现累加等,使程序能够在计算机上运行并获得正确结果。
由此看来,数学思维是计算思维的基础,计算思维是解决问题的一种思考方式,算法是对计算思维的具体设计,程序设计则用于实现算法设计。
综上所述,构建计算思维活动的基本要素是“由问题引发思维、由思维产生算法、由算法形成程序”,它是体现计算思维的关键,是人脑的独立思考活动,所形成的问题解决方案是多样的,并且不受编程语言的限制,也就是我们所说的“一个问题可以有不同的解决方案,一个方案可以有不同的算法设计,一个算法可以用不同的编程语言来实现”。因此,在教学中应该着重体现利用计算思维解决问题的完整过程,而不是单一的教会学生某种编程语言。
计算机思维和数学思维,都包括了抽象和逻辑。
抽象对比
数学的抽象,在于剥离具体。数学研究从公理出发,可以变成纯思维的活动,和具体的的现实脱离关系。数学上的人为"定义",就是为了尽可能给出范围明确,不冗余的信息抽象。以后在利用这些信息,得出范围明确不冗余的抽象信息(证明的过程),如此反复。可见这里,数学需要的是一个自洽信息结构和关系。这些信息是架空具体和现实的。虽然,数学在极力的寻找关系,但这个行为发生在圈定好的有限范围内,由层层已知的定理和定义的护栏内。
计算机思维的抽象,在于映射具体。计算机是用来模拟现实和解决现实问题的。所以,计算机思维是和现实极为紧密的,而现实的关系是错综复杂的。我们无法避免信息冗余,乱入的信息随机出人意料的自由组合。这也是为什么,数学正确和错误清晰而明确。计算机无法保证正确,只能说目前没有错误,bug永远存在需要不断的修复。现实变化了,计算机的思维模型就要跟着变化。
数学的抽象,全在于思维的目的和证明猜想的必要。计算机思维的抽象,在于需要解决的问题和模拟的程度。有相似的地方,但最大的区别在于,计算机思维需要有生活的理解,有对现实问题的体验经历,个人的世界观和品位生活的能力有所关联。数学对现实要求不高,大数学家可以是疯子,社交障碍,精神分裂,抑郁症。但,计算机科学家顶多是个同性恋。
逻辑
关于逻辑。其实,逻辑就是事物之间的关系,而掌握了关系的触发条件,就被看成规律。为什么按照逻辑,应该是这样的,为什么你的逻辑是对的,我的逻辑就是错的。就是因为逻辑本质的关系是物质固有的,在相同的环境和姿势条件下,关系所呈现的规律被观察,被体验,被总结,理解并记住。每每当我们对规律有了新的认识,相当于重新定义了关系,过去的逻辑就会被推翻,建立新的逻辑。逻辑推理,就是对关系的猜测,猜对了关系就是规律,猜错了就是毫无逻辑。
数学研究结构和关系,而现实世界就是由结构和关系构成。这里就是有意思的地方了,现实是完美运行的结构和关系,数学是在人脑里模拟探索的结构和关系。所以,数学是计算机科学的工具。当计算机科学在某个方面无法抽象和映射了,就需要等待数学同步意淫出来和现实世界一样的结构和关系。比如人工智能就是。 现实在随机发展,数学在随机猜想,而数学又是现实的一部分,这又像是计算机运行的原理,充满了递归。人脑像个计算机,人脑也像个宇宙,宇宙发明了人类,人类发明了计算机,人类能否用计算机递归发明人脑。现在不就在这个方向发展么?
计算能力不是产生智能的本质原因(这句话,博主非常赞同!)。人类大脑的计算能力有限却有逻辑推理能力。目前计算机的运算能力远远超过人类的运算能力,却无法产生类似的学习和逻辑推理能力。但有一点计算机和人脑是一致的,就是信息通过二进制0和1(比特)来存储传递和表达。算法和结构有一个关系,就是结构越复杂算法就可以越简单,结构越简单那么算法就需要越复杂。所以,人类大脑的智能是因为大脑的结构非常复杂。对比计算机的结构如此的简单,是把复杂的算法都转移到了程序设计上面,也就是让人类的大脑来产生。未来人工智能能够像人类靠近的话,需要的不是计算能力而是一个复杂的硬件结构。并且人类的逻辑思维和智能的演变和人类使用的语言密切相关,所以人工智能也是需要配套的和人类语言差不多的编程语言出现(这就是博主说过的,走向AGI必须要有创新性的定义)。当然,这都是我的猜测和理解,是思考人类智能本身产生的,不排除计算机本身发展出有别于人类智能模式的智能,比如变形金刚。
编程与数学
关于编程和数学的问题。虽然,数学是计算机的工具,在思维的本源上有相似和共同性。但是,学习和掌握一个技能需要练习和时间,需要在大脑中训练出特定的结构。纵然有了相同的基础结构,但是要想做的更好发展的更好需要的是训练和时间。
纵然,数学是工具是基础是上层的依赖。并不是说,数学高于一切,优于一切是最强大的。最基础的并不是最强大的,是最必要的最开始的。比如,沙子是建筑的基础但不能代表建筑的价值。无机物是有机物的基础,有机物是生命的基础,但生命的价值放在那里。发展的过程,环环相扣,关系的道路上谁也少不了谁。基础代表必要,发展才是未来。
计算机中的比特
比特是信息的基本单位,结构和关系是信息的属性。计算机的伟大之处,就是在于创造了比特的概念,又开始用比特去描述世界,万物皆比特。
结构是固有存在的,是信息的排列组合。关系是观察者从某一个角度看到的排列组合,并且这个角度看到的是可以被观察者所理解的。这里的理解包含可感知,有些物质的排列组合所呈现出来的关系无法被感知(可展开想象)。所以不同的角度看相同的结构会有不同的关系。
延伸
总结,对的能证明的就是数学,对的不能证明的就是哲学(一旦证明了就又变成了数学),无法解释的我们还有神学。