现在很多地方都在讲计算思维、编程思维,这到底是什么?和我们有什么关系?今天我们就来聊聊这个话题。
计算思维,或者称为编程思维也行,这是不同的译者给出的结果,其实就是一个东西。计算思维的提出人是美国卡内基·梅隆大学计算机科学系主任-周以真。
所谓计算思维,可以理解为“计算机是如何解决问题的”,包括四个部分:分解、算法、模式识别、抽象。
我们先来看分解。下面这张图如果是会编程的朋友,一眼就能够看出来它是什么。
对,这就是流程图,也就是程序的思路。这和我们写文章是一个意思,写一篇文章,都是要先构思,形成框架,时间、地点、人物、起因、过程、结果,然后再逐步细化。编程也是一样,首先要根据用户的需求,形成一个概要设计文档,描述清楚这个程序做什么用?给谁用?大体的思路、过程……,然后在这个基础之上,再形成详细设计文档,流程图就是这些文档中最常用的描述工具。
流程图体现的就是分解的思想,即把一个大问题逐步分解为多个小问题,然后逐个击破,这样无论多复杂的问题都可以化解。而生活中的分解思想随处可见,比如国庆节计划全家出去自驾游,从行程、订票、住宿、交通到随行物品、个人偏好、风土人情等等,这些因素都要考虑,也是一个大工程,弄不好就会留有遗憾,但如果提前规划好,将旅行分解为若干个部分,比如行程规划、各类票的预订……,然后每个部分再做进一步分解,最后一项项落实,整个过程就会有条不紊,不留遗憾。所以具备分解思维的人,往往不畏难,即使再复杂的问题交给他,他也会条理清晰的规划出具体方案。而生活中也常见这种人,一遇到事情就退缩,“太难了”,“我做不了”,因为在他眼中,这是一个无比复杂的事情,毫无头绪,所以不敢做,但如果他懂得分解,就会发现这个事情虽然复杂,但并非不可做。
计算思维的第二部分是算法。算法这个词比较专业,但并不难理解,字面意思就是计算的方法,专业的解释是“计算机解决通用问题的一系列步骤”。现在人工智能已经影响到生活的方方面面,像ChatGPT之类的大语言模型,更是掀起了人工智能的新高潮,那么这些人工智能为什么那么厉害呢?这背后就是算法,各类算法。当然这些算法往往有着高深莫测的名称,例如Transformer、BERT、K-means、Random Forest、RLHF、Q-Learning,算法的背后往往是苦涩难懂的高等数学公式。但我们不要被表象欺骗,所有的算法都只是计算机解决某类问题的步骤而已,而计算机如何解决问题是人(程序员)告诉它的,所以算法和日常生活有着紧密的联系。
接下来我们举个生活中的例子,来解释一类常用算法。上学期间,我们经常会遇到站队这个场景,要按照高矮进行排序,如果你是老师,要如何做呢?
方法一:找出最矮的站在第一,然后在剩余人中找最矮的,站第二,以此类推。这种方法很简单,在计算机算法中我们把它称为“选择排序算法”,属于排序算法中的一种。原理看起来高大上的算法也不过如此吗。当然这种算法是有弊端的,如果只有几个人排队,一眼就能看出谁最矮,如果有100个人呢,恐怕就没那么容易了,所以我们可以用第二种方法。
方法二:每次两两比较,矮的站前面,以此类推。比如一开始先比较左边二人,矮的站右边(以右边为队首),会发现原来二人的位置无需调整。
接着比较第二第三两人,会发现他两的位置需要调整。
继续比较第三、第四两人,他们的位置也需要调整。
然后是第四、第五两人,同样需要调整。
经过前几次比较调整,我们发现了一个规律,就是最矮的那位同学从原来左边第二移到了最右边,也就是队首,如果把这个同学想象成一个水中的气泡,因为它最轻(最矮),所以直接升到了水面(队首),这个过程可以形象的叫做冒泡。经过第一轮的多次比较,我们把最矮的同学放到了队首,接下来我们按照刚才的思路继续。重新从左边二人开始比较,二人的位置无需调整。
比较第二、第三两人,位置无需调整。
比较第三、第四二人,位置需要调整。
因为第五个人就是队首,也就是第一轮比较中筛选出的最矮者,所以无需比较第四、第五。这样经过第二轮比较,我们将第二矮的同学放到了对应的位置。剩下的步骤都是类似的了,重新从左边开始第三轮比较……,直到将所有同学排序完毕。这个排序方法在计算机中被称为“冒泡排序算法”。这个方法的好处是不论是5个人,还是5万人,都可以用这种方法排序。
我们刚刚用生活中的例子解释了计算机中的排序算法,只要我们掌握了一种算法,就可以解决所有同类型的问题,比如有了冒泡排序,不仅可以做队伍的排序,也可以做任何事物的排序,只要这些事物之间可以比较大小即可。在计算机中排序随处可见,比如打开各类商品网站,映入眼帘的是各类商品,这些商品都是排序的。
排序算法只是算法中的一类,其他还有:加密算法、图论算法、搜索算法、压缩算法、机器学习算法……。
有人会说,这些专业的内容对生活有用吗?别说,还真有用。大家有收到过垃圾短信或垃圾邮件吧,这些垃圾信息中除了大量广告之外,就是诈骗信息,比如说下面这个场景:足球世界杯期间,你是个球迷,每场比赛必看,同时也会和朋友激烈争论接下来某场比赛的胜负。
这时你收到一个短信“内部消息:哥伦比亚 vs 乌拉圭,哥伦比亚胜!”,你的第一反应可能是“无聊”,接下来这场比赛如期举行,结果居然和短信预测相同,哥伦比亚果然胜利了。“这不过是狗屎运!”,你如是想。接下来的比赛是美国对阵比利时,你又收到一个短信“内部消息:美国 vs 比利时,比利时胜!”,你在想“又是这个垃圾短信,我到要看看结果如何”,结果出来了,短信又预言准了!你有些动心了,连续二场比赛预测准确,还是有些本事的。接下来是半决赛,法国对阵德国,法国队如日中天,是夺冠大热门,你和朋友们都认为法国会赢。那个短信又如期而至“内部消息:法国 vs 德国,德国赢!”,怎么可能?德国队员都是老态龙钟了,简直胡说八道。但是前面二场都预测准了,对方也许大有来头,我要不要小赌一把?于是你找到一个博彩网站,里面可以针对世界杯结果下注,你花了100元赌德国赢,“反正就100,输了也没关系”,比赛完毕,结果如你所愿,德国真的赢了!媒体一片哗然,出乎了大部分人的预料,你如期赢了一小把,更关键的是你对短信的内容深信不疑,“这必然是有高人在背后,否则不可能连续三场都准,连某名嘴都没预测准确”。接下来就是决赛,德国对阵巴西,你急切的等待短信的到来。“内部消息:德国 vs 巴西,想知道预测结果吗?请往XXXX账号汇款1万元”。果然天下没有免费的午餐,还是要花钱的,不过可以理解,人家当然也要盈利,既然前三场都那么准,第四场我就赌把大的,给他一万,然后在博彩网站下重注,这样绝对能大赚一笔!于是你把钱打给了对方,至此,骗局完成!不论比赛结果如何,你都输了。
这种场景我们都似曾相识,有人说既然对方能连续预测准确,肯定是有高人在啊,不可能都是运气吧。你输就输在这了!骗子很巧妙的运用了一个方法,在计算机中被称为二分法,骗子的做法是这样的:首先拿到大量(假设10万个)个人联系方式,比如手机号、邮箱等,然后在第一场比赛(哥伦比亚vs 乌拉圭)之前,编辑二段内容,一段是预测哥伦比亚赢,一段预测乌拉圭赢,然后分别发送给一半人,也就是说5万人收到的信息是哥伦比亚赢,5万人看到的是乌拉圭赢,不论比赛结果如何,都有一半人会看到正确的结果。在第二场比赛(美国vs比利时)之前,再编辑二段信息,分别预测美国和比利时赢,然后分别发给上一轮看到正确结果的5万人。
第二场比赛结果出来后,剩下2.5万人看到了正确的预测结果,接下来如法炮制:
到最后决赛之前,还剩下1.25万人,骗子会编辑信息要求所有人汇款1万元给他,假设大部分人有足够的警惕性,只有1/100的人汇款,那么骗子也会收到125万元!不仅如此,最后比赛结果出来,总有一半人看到了正确的预测结果,那这些人就是铁粉了,骗子接下来说什么,他们都会相信的……,所以骗子最终获利远不止125万,而他的花费成本几乎可以忽略不计,只是发送了10多万条短信而已。
骗子应用了计算机中的二分法,也是算法中的一种,而如果你了解二分法,就不会上当受骗了。
接下来我们看计算思维中的第三部分:模式识别,简单来说模式识别就是“透过表象看本质,找规律”,举个例子:
过路口时,红绿灯的规则我们都懂:
如果遇到红灯,就停止
如果遇到绿灯,就通过
如果遇到黄灯,就……
这三条规则我们可以归纳为以下一条规律:如果遇到X灯,就执行Y动作。这个X就代表前面的红绿黄,Y代表停止、通过……,所以看起来模式识别并不难。
那么模式识别在计算机中有哪些应用呢?这太广了,我们会发现现在的APP非常聪明,推送给我们的内容往往是我们所关注的,而不像早期的APP,往往需要翻阅很多内容才能看到自己感兴趣的。这其实是基于大数据分析的用户画像在起作用。
简单来说,就是APP会搜集你的各类信息,包括基本信息:设备型号、使用时段、浏览内容类型等等,也包括个人信息:性别、年龄、职业、收入、爱好、行业……,然后APP提供商会根据这些信息进行分析,将你进行归类,打上标签。比如你经常浏览购物网站,系统会给你打上“购物达人”的标签,并且带有一个权重,代表这个标签的重要性。同时你还爱听音乐,浏览音乐网站,系统会给你打上“音乐迷”的标签,同时带有权重。随着标签的增多,慢慢你的画像就出来了。接下来系统会分析贴有相同标签的人具有哪些共性的行为或喜好,然后将符合条件内容推送给属于这个画像的用户。举个例子,你是一个职场年轻人,通过对你的信息搜集,系统分析出你的画像是A,而属于A的用户基本都喜欢滑雪、爬山,而你从未浏览过相关内容,那么系统除了推送日常你喜爱的内容之外,还会将滑雪、爬山的文章、广告推送给你,这样就可以进行精准营销。我们刚才说的用户画像,就是模式识别的应用。
那么模式识别在生活中有哪些应用呢?我们说过模式识别就是透过表象看本质,找到规律,借助《教父》中的一句台词“花半秒钟就看透事物本质的人,和花一辈子都看不清事物本质的人,注定是截然不同的命运”。所以生活中活的通透的人都是模式识别的高手!
计算思维最后一部分是抽象,所谓抽象指的是“忽略细节,关注要点”,在计算机编程中有很多抽象的概念,例如:变量、指针、封装、函数、继承、多态、依赖注入、耦合……,正因为如此编程被认为是比较难学的一门技术。经常写程序的人,对抽象绝对不陌生。那么抽象的思维对生活有什么帮助吗?其实生活中的抽象也比比皆是,比如我们常用的地图就是抽象的概念,一张行政地图中只关注地名、公路、河流等主要信息,而忽略建筑、植被等信息。
如果你炒股的话,对股票走势图会非常熟悉,这里面同样只关注涨落、成交量、趋势等信息,而忽略市值、收益等细节。
我们可以举出很多这样的抽象例子,在现代社会中,不管你愿不愿意,是必须要具有一定的抽象思维的。更不要说我们从小学到大的数学,那更是抽象的学科了。
总之,以分解、算法、模式识别、抽象为代表的计算思维代表着另一种思维方式,与日常思维相比,这是完全不同的一个角度,当我们有了另一个视角,这个世界在我们眼中就会完全不同!
来源: 孙老师聊人工智能