具备了计算思维,你就可以四两拨千金

人邮异步社区 2023-02-16 16:22:56

李开复博士在《AI·未来》一书中指出,中国科技界有一项“天然资源”,就是多到爆炸的数据。这些数据必将催生诸多赚钱的人工智能企业。而对于程序员来说,要想抓住新时代的红利,就要具备计算思维出众的算法能力

吴军老师集十年之功,写成一本《计算之魂》,帮助程序员提升自己,去抓住未来的红利。吴军老师是自然语言处理的计算机专家,也是优质高产的作家。

熟悉他作品的读者可能都会有疑问,这本书到底说的是什么,为什么需要十年时间来完成它?

因为吴军老师想要告诉程序员们,计算思维才是最重要的核心能力,以及如何去培养它。所以这十年,是吴军老师系统思考的过程,它凝结出的思想结晶,就是计算、计算机科学的魂之所在。

培养计算思维的第一步,就是要能够将现实问题转化为可计算的模型,接下来我们就从这一步开始说起。

 

工程师的七个等级

 

程序员要先对自己有一个清醒的定位,然后才知道朝着哪些方面去努力。吴军老师参照苏联科学家朗道给物理学家划分等级的方式,给程序员划分了七个等级。

第一级:开创一个产业,或者奠定一个学科的基础。

第二级:能设计和实现别人不能做出的产品。

第三级:能独立设计和实现产品,并在市场上获得成功。

第四级:能指导和带领其他人完成有影响力的工作。

第五级:能独立解决问题,完成工程工作。

第六级:能在他人指导下完成工程工作。

第七级:能完成大学课堂作业水平的编程工作。

只看描述的话,你可能会挺自信地觉得自己能在三级,或者够上二级。那么看看吴军老师给自己的定位吧,是2.5级。也就是过了三级,但还不到二级。是不是有点被吓到,那第一级的得是什么人物?

第一级上站着手拿图灵奖的各路宗师,二级上则是谷歌这种世界顶级大厂里的技术领军人物,三级可以对标国内大厂的首席架构师。四至七级则可以从字面意思上来理解。每一级之间的差距可以理解为一个数量级,即十倍的差别。

所以这个列表不是国内大厂里的职级晋升表,而是对程序员纯粹实力的评判表。其实吴军老师也提到,大多数程序员能做到三级就很了不起。

大家不妨对照着吴军老师给自己的评级,再评估一下自己的级别,接下来就是努力学习怎样不断突破自己的天花板吧。

 

建立现实问题与计算的桥梁

 

今天的计算机功能很强大,但它并不是无所不能的,我们首先要知道计算机能解决哪些问题。这要感谢英国科学阿兰·图灵的研究工作,他为计算机划下了一条边界。

这条边界就是:计算机能解决的是那些通过有限步计算,明确能得出结果的问题。有了这条边界,计算机才算是从理论走向了实用。

那么,要将现实问题转化为计算机可解决的问题,这就要在数学上找到问题的最优解,程序员的算法能力就特别重要。

学习算法的第一步,不是刷一堆题,而是先要理解数字量级变化的差距,以及学会分析算法的时空复杂度。

例如问到int32与int64所容纳的数量,它们之间的比例应该是什么样的?

初学者脑子里也许会出现芝麻和西瓜的对比。但实际上用芝麻和摩天大楼来对比,才更准确一些。

算法的复杂度,初学者会理解成程序实际运行的benchmark值。例如对少量数据用插入排序花费5毫秒,用快速排序花了1毫秒,得出结论两种方法相差五倍,这就掉到坑里去了。

分析算法的复杂度,是假定问题中变量的值,向着无穷大的方向增长时,解决问题的算法所体现出的性能差异。大学的算法课上,老师首先讲的就是O()标记的性能计算方法,希望大家都还记得。

能够为现实问题找到数学上的解,那么接下来就要计算机上去实现它。透彻理解计算机的工作方式,掌握计算思维就是程序员摸向天花板的梯子。

吴军老师认为计算思维中最重要的首推递归思维,它是一种自顶向下,先整体再局部的思考方式。其次就是分治思想,它的核心原则是将规模很大的问题,分解成较小的可计算的子问题,再将子问题的处理结果合并,从而得到最终解。

我们先从递归思维开始说起吧。

 

递归:自顶向下解难题

 

看下书中一道简单的面试题:

有一层20级的楼梯,你从第一级开始往上走,每次可以跨一级或者两级,直至20级。比方说:1,3,5,6,8,10,12,14,16,18,20就是一种,那么从1级到20级之间可以有多少种走法?

有的面试者会从第一级开始逐级研究有多少种可能,然后寄希望找到规律,总结公式来解决问题。这种从前往后,从小到大的推导方式符合人的自然直觉,也被称为递推方法(Iterative)。但递推的计算方式解这道题会比较复杂,面试者很难在几十分钟内完成。

递归(Recursive)与递推相反,它是一种逆向思维。递归是自顶向下,先全局后局部的思维方式。

那么用递归的思想来解决,先假设F(20)是最终解,那么要走到20级,就得先走到19或者18级。那么F(20) = F(19) + F(18),可以总结出递归公式:F(n) = F(n-1) + F(n-2)。

那么第一级只有一种情况,就记为F(1) = 1,第二级为F(2) = 2,第三级套用递归公式计算,为F(3) = 3,第四级为F(4) = 5 ……

所以最终结果F(20) = 10946。有同学可能已经看出来了,这就是斐波那契数列。如果把问题换成求斐波那契数列的第N项值,估计同学们很快就能做出来。这就是将现实问题转换成可计算的过程

递归之所以能够解决难题,吴军老师总结其有两个主要优点:

第一,解决当前的一步问题,就能解决全部问题。例如上面计算梯级走法问题里,要计算20级,只需要关心19级与18级就可以,以此类推。

第二,每一步的解决方法都是相同的,程序只要反复调用就可以。这就是调用自身的形式,但必须要有结束条件,否则就产生无法终止的函数调用。

 

分治:化繁为简好计算

 

分治思想,它是将规模很大的复杂问题,分解为简单可计算的子问题,求解后合并,得到最终的结果。

引用书中对于分治思想的实现步骤,表述如下:

第一步,分割(divide):将一个复杂的问题,分成若干个简单的子问题。

第二步,解决(conquer):判断子问题是否易解,如是直接计算返回;否则再将子问题分解至易解。

第三步,合并(combine):将每一层的微小局部结果逐级合并,直至最上层得到完整问题的解。

有同学会觉得,这跟把大象关进冰箱有什么区别?看起来好像是,但举个栗子,同学也许会改变想法,这个栗子也跟大象有关。

曹冲称象的故事,大概是最典型的分治思想应用。曹操的部下按照常规思维出主意,要么造个超大的秤(超额消耗资源);要么把大象宰了剁成片来称(不能解决问题,就解决造成问题的对象)。

聪明的曹冲想到了这个问题的等价情况,这就为分割建立了基础。所以第一步分割,就是将石头一块一块地搬上船;第二步是解决,判断所有石块重量与大象等重了,就逐块地称重;第三步就是合并,将所有石块的重量相加。

吴军老师在书中提到,谷歌提出的MapReduce编程模型,就是分治思想的典型应用。

将一个大任务拆分成小的子任务,并且完成子任务的计算,这个过程叫做Map,对应于分治思想中的分割。将中间结果合并成最终结果,这个过程是Reduce,对应分治思想中的合并

MapReduce开启了云计算的时代,使用大量廉价的服务器,就可以并行实现大数据的分析与处理,从而构建起高效可伸缩的弹性云服务。

而MapReduce的两位主要发明者,是Jeff Dean 和 Sanjay Ghemawat ,这对共用一台电脑编程的好兄弟。这个成就,说明他们具备了二级工程师的水平。

这就是修炼思维的重要所在,别人只会大力出奇迹,而具备了计算思维,你就可以四两拨千金。

 

结语

 

谷歌公司招人的标准非常之高,候选人被谷歌录取的难度,是被哈佛、斯坦福这类顶尖大学录取难度的20倍。因为其创始人 Larry Page 与 Sergey Brin 认为一个优秀的工程师的生产力,是平庸工程师的五十倍。

那么,对于程序员来说,修炼计算思维,善于在现实问题与计算之间建立桥梁,寻找问题的最优解,就是走向优秀工程师的必经之路。

书中开列的算法面试题是一大亮点,吴军老师曾笑称,能全部解出来的,世界上的顶级大厂可以随便进。但我想他的目的,并不是将这本书定为大厂敲门砖,而是以具体问题引出思考的逻辑,说明计算思维的奥义。

《计算之魂》给程序员们指明了前进的方向,但并不意味着可以一蹴而就。这仍然需要程序员打好计算机科学的基础,对问题善加思考,不断挑战自己,在理论学习与工程实践中逐渐成长,直至触及程序员的天花板。

购买链接:https://item.jd.com/13515688.html

 

本书是吴军近十多年的技术与思考沉淀力作,他将人文历史与计算机科学相结合,通过一些具体的例题,分10个主题系统地讲解了计算机科学的精髓。

不仅有助于了解计算机科学,更有助于了解 IT 产业的技术特点、培养一些特殊的思维方式、掌握信息时代特殊的做事方法,通过具体的例子,从“术”的层面获得“道”的层面的提升。

 

 

...全文
1295 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
SoftwareTeacher 2023-02-20
精选
  • 打赏
  • 举报
回复
5.00元

你希望成为哪一级的工程师?

[本课程属于AI完整学习路线套餐,该套餐已“硬核”上线,点击立即学习!] 【为什么要学习深度学习和计算机视觉?】 AI人工智能现在已经成为人类发展中最火热的领域。而计算机视觉(CV)是AI中最热门,也是落地最多的一个应用方向(人脸识别,自动驾驶,智能安防,车牌识别,证件识别)。所以基于人工智能的计算视觉行业必然会诞生大量的工作和创业的机会。如何能快速的进入CV领域,同时兼备理论基础和实战能力,就成了大多数学习者关心的事情,而这门课就是因为这个初衷而设计的。 【讲师介绍】 CHARLIE 老师 1、人工智能算法科学家2、深圳市海外高层次人才认定(孔雀人才)3、美国圣地亚哥国家超算中心博士后4、加利福尼亚大学圣地亚哥全奖博士5、参与美国自然科学基金(NSF)及加州能源局 (CEC)资助的392MWIVANPAH等智慧电网项目6、21篇国际期刊文章(sci收录17篇),总引用接近10007、第一作者发明专利11份【推荐你学习这门课的理由:知识体系完整+丰富学习资料】 1、本课程总计9大章节,是一门系统入门计算机视觉的课程,未来将持续更新。2、课程从计算机视觉理论知识出发,理论结合实战,手把手的实战代码实现(霍夫变换与模板匹配,AlexNet OCR应用,VGG迁移学习,多标签分类算法工程) 3、带你了解最前沿技术,各类型算法的优点和缺点,掌握数据增强,Batchnormalization, Dropout,迁移学习等优化技巧,搭建实用的深度学习应用模型 4、学习完后,你将具有深度学习与计算视觉的项目能力,比如大学生学完可以具备独立完成机器视觉类毕业设计的能力,在求职过程中可以体系化的讲解机器视觉核心知识点,初步达到人工智能领域机器视觉工程师的水平 【学完后我将达到什么水平?】 1、零基础入门计算视觉,学习掌握并应用从经典图像处理到深度学习分类任务的要点知识 2、掌握数据增强,迁移学习等优化技巧,搭建实用的深度学习应用模型 3、学习完课程,可以独立应用多个经典算法和深度学习算法 4、以大学毕业设计,面试找工作为目标,手把手带大家编程,即使没有太多计算视觉的背景知识也可以循序渐进完成课程,获得实战项目的经验 【面向人群】 1、对AI感兴趣,想要系统学习计算机视觉的学员 2、需要毕业设计的大学生 3、做图像分析或相关数据分析的研究生 4、准备面试计算视觉和深度学习岗位的应聘者 5、希望在项目中引入计算视觉/深度学习技术的开发人员 【课程知识体系图】 【实战项目】

263

社区成员

发帖
与我相关
我的任务
社区描述
作者在书中结合自己对计算机工程师的五级分级标准,详细讲解了不同层次的解决方法、思考深度,深度阐述题目背后的计算机科学精髓。
算法人工智能青少年编程 个人社区
社区管理员
  • SoftwareTeacher
  • 高博
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧