计算思维极简指南
我们身处于一个充满数据、信息和代码的时代。
芯片、算法、数据会越来越深入地嵌入我们的生活,甚至有一天,我们会与计算机连接共生。
计算思维并不是一个简单的编程概念,而是一种以解决问题为导向,在长期实践中磨练出的思考方法。
计算思维极简指南
文 | 博雅君
博雅人文(ID:boyarw)
我们身处于一个充满数据、信息和代码的时代。
计算机从实验室里的庞然大物,到今天的无处不在、不可或缺,只用了短短半个世纪。未来,芯片、算法、数据会越来越深入地嵌入我们的生活,甚至有一天,我们会与计算机连接共生。或好或坏,但我们难以抗拒和逃离。我们也无从否认,计算机是这个时代最强大的工具。
传播学大师马歇尔·麦克卢汉曾说:
我们成为我们所看到的东西,
我们塑造工具,此后工具又塑造我们。
技术从来都不是中立的,人类在创造和使用工具的同时,工具也在改变着人类的生活、思维和世界观。就好比一个人日复一日锤钉子,他最后就难以避免地被他每天抡起的那柄锤子所“锤化”。
技术和工具也也塑造着我们的文化,我们用石器时代、青铜时代、蒸汽时代、电气化时代、信息时代来为历史的各个时期命名,不仅仅是因为一种技术代表着一个时代的生产力水平,更因为一种技术塑造着一个时代的社会形态、思维方式和文化特征。
我们这个时代可以称为“计算时代”。身处于“计算时代”,也许你并不需要练就吊炸天的编程绝技,竞争上岗成为996码农大军的一员,但你绝对有必要了解一点计算思维,以及这种思维是怎样塑造世界的。如果你能将计算思维运用到你的生活和工作中,那么恭喜你,你又多了一种应对复杂现实问题的思想工具。
如何了解计算思维呢?博雅君为你准备了这份简明指南。
计算思维并不是一个简单的编程概念,而是一种以解决问题为导向,在长期实践中磨练出的思考方法。下面我们通过追溯计算机的发展历史,聊聊什么是计算思维?计算思维有什么用?如何像计算机科学家一样去看待问题?
01
什么是“计算思维”?
计算思维,是一种以解决问题为导向的思维方式,它通过拆分问题,设置合理的解决步骤来解决问题,同时大幅度提升生产效率。
这和我们普遍的认识很不一样,一般我们说什么思维,比如管理者思维,都是说你要先对这个领域足够熟悉,才能培养出这种思维。但是计算思维刚好相反。是先有计算思维,后有计算机。
在展开讲这个之前,我们先来弄清楚一个基本概念:算法。近些年,算法这个词在互联网行业很流行,但实际上,“算法”这个概念早在十七世纪就已经有了,意思很简单,就是指流程化、规范化的运算步骤。
我们举个例子来说明算法的作用。
在二战时期,美军在用远程炮弹作战前,通常需要先解决一些实际问题,比如射击距离是多远、实时风速是多大等。你当然可以找个专家拿笔现场算,但是在千钧一发的战场上,为了确保算得快,算得准,最好的办法是把运算步骤拆开,交给不同的计算师同时计算。
这么做有两点好处:
第一,每个运算师只算其中一部分,很快能出结果;
第二,计算步骤是提前设置好的,计算师只要执行就可以,甚至不用懂其中的逻辑,每个人只需要流水线化地进行计算就行了,因此运算误差也很小。
这其实就是现在很多超级计算机进行“分布式并行计算”的原理。所以你看,当一个问题可以通过计算被解决时,使用算法思想就能快速、准确地解决它,这就是算法的好处。
最初的算法思维代表了人类对理性、效率的追求。17世纪,当时的西方哲学家认为人都是有主观性的,因此算法甚至被用来推导哲学问题。
工业革命之后,随着技术水平的提升,人们就开始幻想,如果有一台机器,既能控制它的计算步骤,又能让它自动计算,那解决问题的能力不就大大提升了嘛。从这个设想中,我们其实可以归纳出计算机的两个特点:第一是自动化、第二是可编程。
自动化、可编程的机器最早出现在18-19世纪的欧洲。
1768年,瑞士一个钟表师做出了一个能自动写字的人偶,通过组合齿轮,人偶能在纸上写出特定的字,人偶能写字就是“自动化”。
随后,在1804年,在法国出现了可以织出不同图案的织布机,当然,得需要借助不同花纹的打字卡,才能织出各种图案。提前把布匹的花纹通过卡片设计、固定下来,这就实现了“可编程”。
这两种机器的出现说明,在自动化、可编程两方面,人类已有所尝试,但这离计算机还相去甚远。后来,“自动化”和“可编程”这两个特点被结合起来,才出现了现代计算机的雏形。
1830年,因为不满意人类本身的计算能力,英国人巴贝奇决定做一个分析机,来代替人完成计算工作。巴贝奇厉害在哪儿呢?在他的设想中,他不仅希望分析机能自动计算,还希望分析机的计算步骤是可以被设计的,每次的计算的时候,都可以根据需要去设定步骤。但是由于技术尚且不成熟,最终分析机没能实现。
一直到了1945年,随着电子真空管的技术成熟,加上军方的支持,世界第一台通用计算机才在美国诞生,真正实现了自动化与可编程的结合。当然,计算机的诞生远没有我们概括的这么简单,今天限于篇幅我们无法展开。但是你可以发现,尽管几十年来信息产业发展迅猛,但自动化、可编程这两个核心却从未改变过。
小结
计算机思维是一种以解决问题为导向的思维方式,通过流程化地设置解决步骤,可以提升我们的工作效率。工业革命之后,人类开始尝试制作真正的计算机,并期望这种机器有自动化、可编程两种特点。由于技术原因,直到1945年才诞生了第一台通用计算机,但是,这两个核心特点却从未变过。
02
计算思维能帮我们做什么?
我们可以把计算思维的作用分为三个层次:
第一层,计算思维能帮我们实现自动化,提升做事的效率;
第二层,计算思维可以帮助人类攻克一些复杂的问题;
第三层,计算思维可以运用在其他科学领域,让我们从计算的角度去看待世界。
我们先来看第一个层次,计算机思维帮助我们实现自动化,提升效率。
实际上,1940年代尽管计算机已经诞生,但自动化程度还远远不够。随着计算机技术的发展,人们从没停止过对自动化的探究。
我们拿编程语言的发展来举个例子。在计算机刚诞生时,人最早们都是拿“汇编语言”编程,因为汇编语言是属于机器的语言,所以使用起来门槛很高。为了提升自动化程度,就很有必要发明通用简易的编程语言。于是在1957年,人们发明了Fortran语言,这种语言让写公式变得容易。到了1958年,LISP语言出现,提升了符号处理和逻辑运算的能力。1959年又发明了用于商业数据库编写的COBOL语言等。从1957年到1959年,每年都会诞生一门以上的新语言。
再往后,随着软件越做越大,还出现了“面向对象”的程序设计语言,比如现在很流行的C++、JAVA、Python等。以往程序员编程时使用的语言是线程式的,就是说,只需要操控计算机就可以了,而到了面向对象的程序设计这里,程序员要操控的不再是单独一台计算机,而是一系列对象。此外,除了高级编程语言的完善,根据应用需要还衍生出了系统思维、网络思维、安全思维等一系列,进一步提升了自动化水平。以上,就是计算机思维的第一个作用:实现自动化、提升效率。
计算机思维的第二层作用,是可以帮助人类攻克一些复杂的问题。
这里的复杂问题是一种绝对的复杂,和大多数人理解的复杂并不一样。比如,让小学生去做一道高数题,这听上去很复杂,但实际上只是一种相对复杂,只要掌握了方法,还是能够解决的。但是就存在一类问题,光是巨大的运算量人们就难以应对,更不用提找到简单的算法进行优化了。因此我们称其为真正意义上的难题。
我们以“旅行推销员问题”为例:
假如现在你是一个推销员,现在你需要从所在的城市出发,去N个城市进行推销,最后回到你所在的城市。那么应该如何安排路线,总路程才最短呢?
有点数学基础的朋友,肯定能想到用排列组合的解法计算,最后比较出最短路线就可以了。但是,假设这里的N等于10,你会发现需要计算36万种路线,如果是15个城市,那计算量就是百亿级别的了。
像这种随着复杂度的提升,计算量呈指数级别增长的问题,才是真正的难题。
在计算机出现之前,由于计算能力不足,人类对这种问题几乎束手无策。但是,计算机出现之后,虽然难题依然是难题,但至少可以考虑通过改善算法,来提升运算速度。这就是计算机思维的第二个作用:帮助人类攻克复杂的问题。
计算机思维的第三层作用,是给人类提供了新的视角,让人类从计算的角度去攻克其他领域的问题。
20世纪80年代出现的“计算机模拟”研究法,提供了理论、实验两种模式之外的第三种研究方法。这种计算机模拟的好处在哪呢。我们都知道,传统的研究方法在很多场景下都有局限。
举个例子,如果要分析飞机在高空的气流情况,总不能真的在高空实地做实验吧。但是把气流情况模拟成可计算的问题,用计算机模拟飞行系统,就可以解决这个问题,省钱省时间,关键还没什么风险。也就是说,计算机思维可以帮我们模拟真实系统,克服许多传统实验方法的局限。
随着这种研究方法的不断运用,计算机思维渗入到了各种学科,“计算”变成了很多学科领域的底层思维。
所以现在有了很多传统学科与计算机结合的交叉学科,比如计算语言学、数字人文、计算生物学、计算传播学等等,因为很多问题都可以化归为计算问题加以解决。这就是计算机思维的第三个作用:给人类提供了新的视角,让人类从计算的角度去攻克其他领域的问题。
03
“计算思维”的启示
计算机思维在我们的实际生活中能发挥什么作用呢?我在这部分总结了计算机思维的三点启示。借助这三点启示,能帮我们看清生活中许多事情的本质。
计算机思维给我们的第一点启示是:
解决复杂的问题和任务,要学会用流程化的思维应对。
算法的核心在于:通过规范化的运算步骤来提升计算速度,同时保证正确率。
这实际上也是整个机械化生产的秘诀。日常生活中,大多数人都不需要去了解真正的运算逻辑,但是流程化思维仍然对我们有好处。这是计算机思维给我们带来的第一点启示。
第二点启示是:
计算机的发展历史总是受到硬件水平的制约,因此做事情时,要兼顾客观事物的发展条件。
计算思维并非是在计算机出现之后才产生的。但在技术成熟之前,尽管像巴贝奇这些人已经琢磨清楚了基本逻辑,却仍然无法真正发明计算机。思想再伟大,也需要一场硬件革命。想法再丰满,但想要最终解决问题,仍然需要我们顺势而为。这是计算机思维给我们的第二点启示。
第三点启示是:
尽管计算机非常强大,但也并非所有问题都能解决,因此我们要学会明确问题的边界,考虑实用性而不要一味追求最优解。
计算机解决问题的前提在于问题的“可计算”,也就是说,如果问题本身无法被计算,即使信息技术再强大,人类仍然束手无策。
比如我们刚刚提到的那个“旅行推销员问题”,即使有了计算机,但直至目前仍没有找到完美的算法来解决这个问题。但找不到最短路径,不意味着找不到相对短的路径。
因此这个时候,就需要我们明确问题的边界,先在能力范围之内找一个相对好的解决方案,在保证够用的前提下,再去探究最优解,而不是一上来就不达目的不罢休。
以上就是计算机思维带给我们的第三点启示。
总结
计算机思维是一种以解决问题为导向的思维方式,通过流程化地设置解决步骤,可以提升我们的工作效率。这种思维要求计算机具备两种特点,自动化和可编程。
计算机思维的三个作用:
(1)计算机思维能帮人类实现自动化,提升生产效率;
(2)计算机思维给人类提供了计算的思路,让我们有机会去攻克一些真正意义上的难题;
(3)计算机思维可以被运用在其他科学领域,给人类提供了一个看待世界的新视角。
计算思维的三点启示:
(1)要学会用流程化的思维去应对问题;
(2)要正视限制事物发展的客观条件;
(3)明确问题的边界,考虑实用性而不要一味追求最优解。