诸葛越新书《未来算法》

(图片来源:摄图网)
作者|诸葛越 来源|东西方教育(ID:eastwestedu)
现代世界是计算机的世界。当今世界的每个人,几乎每时每刻都在跟计算机打交道。从早上出门打车用的打车软件、导航软件,上班用的电脑、文件和在线工具,点外卖咖啡的App(应用程序)和快递调度,到手机支付,孩子上的网课,在淘宝、京东购物,看微信,刷抖音,用语音助手,和机器人聊天,这些行为背后全是强大的计算机在操纵。
未来是人和机器一起仰望星空的时代。新兴的计算技术给世界带来了波澜壮阔的变革。从载人火箭的发射和回收,到无人驾驶,从高尖的AI(人工智能)、大数据、搜索,到人脸识别、基因检测、电子医疗、智慧城市规划,所有这些大型的工程项目,唯有我们和强大的计算技术携手才能做到。
2016年,谷歌旗下公司开发的AI计算机程序AlphaGo战胜了围棋世界冠军李世石。其实,早在1997年,计算机“深蓝”已经战胜了世界上最厉害的国际象棋选手加里·卡斯帕罗夫(Garry Kasparov),但是围棋的棋局变化众多,一直到最近,都还是人略胜计算机一筹的。AlphaGo2016年之后的连续胜利,让所有人认同,AI在围棋方面已经超越人类职业围棋的顶尖水平。这个现象引发了社会上非常多的探讨:计算机的能力是否已经全面超过人类?在未来的计算世界里,我们的生存空间在哪儿?
计算机的发展始于20世纪初,20世纪四五十年代开始应用,80年代电脑进入家庭,90年代互联网兴起,21世纪初移动互联网和智能手机带来变革。半个多世纪以来,计算机科学家们发展出了一套方法来指导计算机,让计算机实现前面描述的这些变革性的应用。那些强大而精妙的、影响我们未来每一天的算法,就是本书要给大家介绍的未来算法,而这套思维方法也叫计算思维(computational thinking)。
现有的科学领域,比如说医学、物理学、生物学、教育,是很专业的领域,而计算机科学是解决问题(Problem Solving)的科学领域。它的影响力,在于它的方法能够渗入和帮助其他的各个领域,解决那个领域本身所在的问题。比如,计算机帮助医生在图像中寻找可能的癌症,帮助物理学家在千万张星空影像中找到新星,帮助生物学家快速排序病毒DNA和预测可能的变异,帮助教育专家了解每个孩子的不同而真正做到个性化教学。目前业界公认,计算思维包含四个方面:分解问题,抽象,算法,模式识别。

计算思维教你像计算机一样思考。学会了计算思维,你可以看透互联网世界和AI是怎么运作的,你也就学会了一种解决大规模复杂问题的方法。计算机最强有力的地方在于以一抵万。它做的不是小事,是大事,是在10亿个网页里找出一条信息,统计识别全国人口的身份,同时处理上千万笔订单,或者给几亿名用户个性化推荐短视频这样的大事。计算机最强大的地方在于它的规模,学习计算思维会让你学会这种规模思考。
计算思维给你一套未来社会的交往语言——算法、数据、模型、迭代、AI等,这些都是现代人必须深入了解的概念。计算思维的方法,比如分解问题、资源优化,也成为我们处理问题的标准方法。看完这本书,你再见到这些概念的时候就不再感到陌生,不再是外行,你在交谈和决策时就会不惧不恐,不停留在空洞模糊的理解中。
计算思维会对你的每日生活和工作有帮助,你会发现生活中处处是算法,会从一个全新的角度看待日常的问题,比如如何找到去公司的最短路径,如何管理时间,如何用优化的方法找餐馆和找伴侣,如何加密你的信息,机场人流是怎么回事,骗子是怎么利用简单算法让很多人上当的。计算思维也能帮你了解日常应用是怎么工作的,比如为什么滴滴知道你要去哪里,朋友圈为什么可以一直刷。
计算思维也可以帮助你解决人生的复杂问题。计算思维是一套方法论,一套解决复杂问题的方法论,这套方法论可以迁移到生活当中,给你指导:如何做好一名CEO?如何让孩子上好大学?如何在享受现在的生活和探索新的机会之间找到平衡?这些问题的本质是如何优化,如何做选择,如何做成一件大事。我们都知道人生的难题不能用一个算法来解。计算思维会教你分解问题,找出规律,教给你直觉和框架。这对我们了解复杂的世界,做正确的人生决策有很大的帮助。
说到计算思维,人们有两个最常见的问题:
第一个问题,计算思维和数学思维是一回事吗?
答案:不是。简单地说,数学寻求的是真理,数学问题会有一个答案,或者一个证明,数学关心的是正确性。比如7+3=10。计算思维更关心怎样有效地把一件事做出来。对计算机来说,一个问题有解还是不够的,关键是怎么解,是否能在合适的时间内找到满意的答案。比如说,能否在1秒钟内给我推荐合适的视频,在10秒钟内找到去公司的最短路径,或者要在50亿个网页找到和“火箭”相关的网页。怎么才能在合理的时间内做出来,是计算思维关心的问题。
再比如说,103是不是个素数,这是个数学问题。写一个算法判断任何数字是不是一个素数,这是个计算机的问题,它解决所有判断素数的问题。三百万和两百万哪个大,这是个数学问题。如何让三百万人同时在线看球赛,这是个计算机的问题。
第二个问题,计算思维和编程是一回事吗?
答案:不是一回事,但是有一定关系。计算思维可以说是学计算机和编程之前的基础技能,也可以说是贯穿编程过程的底层思维。没有计算思维就学不好编程,但是计算思维不受限于编程语言,比编程囊括得更广。把算法用一个编程语言写了交给计算机去运行,用C语言,Python, Java或者其他编程语言,这个过程是编程。自从计算机编程诞生以来,已经被设计的编程语言就有100多种,而学习算法,是不需要知道任何编程语言就可以学会的。
用写文章做比喻,编程语言好比写汉字,写英语或者写日文,计算思维则是文章的构思,组织和内容。编程只是和计算机直接交流的语言,而有计算思维才能写出正确的程序。我们都知道,人的交流可以通过非文字的方式,比如画画。和计算机交流也可以通过使用现成的App,图形化编辑软件等,不一定通过编程。
为什么我要写这本书
我受过两次完整的计算机的教育,
第一次是本科,在清华大学计算机系,我学习了所有的计算机方面的基础课。当时,计算机是个新兴的科目,有非常优秀的专业老师,我学到了很多的计算机基础思维。我的本科专业是人工智能。当年清华计算机系每个年级六个班,入学的时候就把每个班的专业分好,我们三班的专业是人工智能。所以在本科的时候,我们就接触到许多当时人工智能领域前沿的技术。
当时清华本科是5年制,正要开始改革,有少部分学生可以在四年级的时候开始接触研究生的一些活动,六年可以拿到硕士学位。我有幸成为被选中的几个学生之一,在本科四年级的时候,我进入了清华的人工智能实验室,师从于张钹老师,做一些简单的机械手方面的研究。从张老师和高年级的同学们那里,我学到不少当时国际先进的人工智能领域知识,也对做如何研究有了初步了解。
当我到斯坦福大学计算机读硕士和博士的时候,却发现我有很多的同样的课程,他们教的方法是很不一样的,比如说我们学编译器,操作系统,在那里都是做几个项目,直接写一个编译器或者操作系统。所以,我在斯坦福又把所有的计算机课学了一遍。
运气的我刚好赶上了斯坦福计算机专业的黄金时代。那时候刚好计算机界的大师还在,比如世界公认的人工智能鼻祖John McCarthy (约翰·麦卡锡)教授还来参加讨论,Donald Knuth(唐纳德·克努特)在做Computer Musing (计算沉思)的系列演讲和写他的举世名作《计算艺术》(The Art of Computer Programming)。我有幸跟从许多后来世界闻名的学者和老师直接学习,比如我上的计算机体系架构基础课的是John Hennessy(约翰·汉尼斯),后来的斯坦福大学校长,图灵奖获得者,MPIs公司创始人。人工智能基础课教授是Nils Nilsson(尼尔斯·尼尔森)教授。他是另外一位人工智能的学科创始人和世界级专家,写作了被广泛引用的经典之作《对人工智能的探索》(Nilsson, The Quest for Artificial Intelligence)。操作系统基础课老师是Mendel Rosenblum, 后来的VMWare创始人。他刚刚从伯克利毕业,给我们上课迟到因为不知道去哪里领结婚证。当然,在数据库和大数据领域,著名的Stanford Info lab在那个时候成立,我的三位博士导师Hector Garcia-Molina, Jeffrey Ullman 和 Jennifer Widom几乎书写了整个领域的教科书。
当然,我们当时也不知道这里有即将在工业界有世界影响的小辈们,比如Daphne Koller, Coursera联合创始人,当时快要读完博士,是我们为数不多的女生的小组长。年轻的一代学生,隔壁楼的黃仁勳刚毕业创立英伟达(Nvidia), 杨致远(Jerry Yang)和David Filo趁Hennessy老师休假期间做了世界万维网最流行导图雅虎(Yahoo!),和我坐在同一个cube的同学是谷歌的创始人Sergey Brin,等等。在这里,我们共同见识了计算机技术领域的世界前沿。
毕业后,我在硅谷和北京工作,一直在技术行业,做过研究员,架构师,产品经理,创业公司CEO,技术高管。我现在在一家叫Hulu的美国公司做中国区总经理,团队做技术开发,使用人工智能和机器学习技术做视频内容识别,推荐,搜索等。我还带领团队写了两本关于机器学习算法的畅销书《百面机器学习》和《百面深度学习》。
多年以后我才理解到,计算机学科教给我的分解问题、优化,模式识别的办法其实在很多方面帮助了我,不仅在技术,也在战略,决策,公司管理,个人成长等等方面。受过计算思维训练的人有一套结构性看待问题的方法,永远不会害怕复杂的难题,会清楚的看到重要的点,把时间精力花在关键问题上。
同时,我是两个孩子的妈妈,老大在剑桥大学读物理,老二今年去芝加哥大学。我写了关于他们两人成长的的书《魔鬼老大,天使老二》,也运营家庭教育相关的微信公众号“东西方教育”,我的“得到”课程“如何培养面向未来的孩子”有13万付费用户。有趣的是,去年“东西方教育”最受欢迎的文章叫:“我的孩子要不要学计算机?”
几年前,我家二儿子骐骐十二三岁时,有一次回到家里说,他在学校参加了一个“奇怪的比赛”。这个竞赛叫“Bebras计算挑战”,是一个有超前意识的比赛,由牛津大学和谷歌承办,目的是“让全世界的孩子为计算而兴奋”。竞赛的内容,是“计算机科学家们喜欢解决的问题”,是评测孩子的计算思维。世界上各国的孩子,不需要学统一的编程语言,不需要统一的语言,都可以参赛。
在我的教育理念方法中有一点比较独特,是其他教育工作者不曾提及的,那就是关于复杂技能的培养。人的基础技能是像数学、语文、英文、图画等学校可以学到的技能,而复杂技能是把这些基础技能组合在一起做成一件大事的能力。比如说,一个项目的领导,一个公司的总裁,一个桥梁的总工程师或者一个乐队的指挥,他们需要有把一个大项目,清晰地分解成可执行的小项目,领导团队协作完成,并且帷幄全局的能力。教孩子们既能站得高,又能解决问题,得益于计算思维。
作为一个计算机行业的从业者,作为一个培养过上千技术和管理人才的领导者,在我头脑里“计算”和“教育”这两条线的交汇清晰起来,我深深地理解了为什么计算思维能力很重要,它的精髓所在,它和其他数理能力的不同,以及它可以怎样一步步培养。
“计算”和“教育”这两条线的交汇,让我决定写这本计算思维的科普书。我希望能把我这么多年领会到的计算思维的精髓,用简单的形式教给更多的人。希望不了解计算机的读者能入门而不再望而生畏,希望已了解计算机的读者能更加清晰地思考和应用这些能力。
本书不打算面面俱到,但是希望覆盖计算思维最经典的概念,比如什么是算法,递归,什么是决策树,本书也试图介绍计算机领域最经典的例子,比如说汉诺塔,比如旅行中的销售员。另外,我也在尽可能简化的情况下给大家一些计算思维怎么帮助我们解决日常生活常用的强大应用,比如说短视频,搜索,电商,电子扫地机器人,人工智能等等。书中还有一些我本人学习计算思维的小故事和一些和计算思维相关的著名历史故事。当然,我主要是根据重要性和趣味性,选择一些话题,希望能够带大家进门,引起大家的兴趣。
编者按:本文转载自微信公众号:东西方教育(ID:eastwestedu),作者:诸葛越
广告、内容合作请点这里:寻求合作
咨询·服务
