目前,发达国家都在大力推行编程教育,培养人才,储备竞争力。
当我们学编程时,我们该学什么?
学知识吗?为了将来做程序员吗?
其实,学会编程思维才是人生赢家的入场券。
▲1.什么是编程思维
会编程不一定有编程思维
电脑能帮人类解决问题,但在此之前,人类首先要做的是理解这个要解决的问题,并找到解决问题的路径。换句话说,电脑只能搬砖,搬哪块砖、搬到哪去、走哪条路,还得人说了算。
所谓“编程思维(computational thinking)”就是“理解问题——找出路径”的思维过程,它由四个步骤组成:
1、分解(decomposition)
把一个复杂的大问题,拆解成更可执行、更好理解的小步骤。
复杂问题很难一下子破解,但如果把它细分成很多个小问题,逐步解决,就容易多了。
比如,破案。
找出犯罪分子可不是件容易的事。但通常警察都会通过搞懂一系列相关的小问题破案,包括:发生了什么犯罪,什么时间,什么地点,有什么证据,有没有目击者,最近、附近是否有相似案件发生……等等。
通过拆解问题,可以深入了解犯罪的过程、细节,获得大量信息。而理解是解决的第一步。
2、模式识别(pattern recognition)
找出相似模式,高效解决细分问题。
这点至关重要。识别模式,意味着新问题变成了老问题,我们在经验库里搜索以往的类似问题及解决方法,套用解决。识别的模式越多,解题的速度就越快。
举个例子:假如你需要画100只猫,你会怎么办?找100只猫来挨个临摹?还是找出猫的“模式”?
如果是后者,你可能要知道猫长毛,有眼睛、尾巴、四条腿。然后,按照这个“模式”,你就可以“批量”画猫了——你不用每次画一个新动物,只需要变换局部特征:黄白条的猫还是黑猫,长尾巴的猫还是短尾猫。
3、抽象(abstraction)
聚焦重要的关键信息,忽视无用细节。
这是一个过滤的过程,通过认知问题的核心本质,帮助我们形成解决问题的构想。
接着举刚才画猫的例子,我们了解了猫的特征,就可以根据这些抽象的特点,形成关于猫的整体设想,做出一个模型。
4、算法(algorithms)
设计一步一步的解决路径,解决整个问题。
通过这四个步骤,一个棘手的复杂问题先被拆解成一系列好解决的小问题;每一个小问题被单独检视、思考,搜索解决方案;然后,聚焦几个重要节点,忽视小细节,形成解决思路;最后,设计步骤,执行——问题解决。
所以,所谓“编程思维”并不是编写程序的技巧,而是一种高效解决问题的思维方式,不当程序员也用得上。
▲2.编程思维=赢家思维
从学到玩都能用上
编程思维可以用于处理任何事。
比如——组织一次朋友聚会。
你可能需要拆分问题:你们能去哪、做什么,每个人喜欢什么、想干什么,之前你们一起玩的成功经验和失败教训,预算和每项活动的成本,时间长短,天气……
显然,用编程思维组织的朋友聚会,选择起来会更容易,也更有可能让大家玩得开心。
再比如——打电子游戏。
为了玩到一定级别,你需要知道:要收集什么物品,去哪收集,怎么收集,时限是多少,最佳路线是什么,怎么躲过敌人……通过了解细节、掌握要点,你就能制定计划,用最短时间完成升级。
处理正经事,更离不开“编程思维”,比如——写作。
想把作文写得又快又好,得先解题,拆分出可能的层次内容;然后调用大脑存储的相关信息——例子、格言,甚至曾经写过、看过的文章;列出提纲,理清思路;最后,写。
做数学题也一样,拆解、理解新问题——搜索出对应的老问题和公式——理清思路——做题。
职场牛人个个都有“编程思维”。
麦肯锡的第一个女咨询顾问芭芭拉·民托(Barbara Minto)曾提出著名的思考方式——“金字塔原理(The Minto Pyramid Principle)”。
其中,提到了一个重要原则:MECE,即Mutually Exclusive Collectively Exhaustive,中文意思是“相互独立,完全穷尽”。也就是,将影响一个重大议题的原因,不重叠、不遗漏地拆分,借此有效把握问题核心,找到解决方案。
▲ 芭芭拉·民托
和编程思维类似的“金字塔原理”不但是麦肯锡的经典教材,也是顾问及学术界的必读书目。
网上曾有一个段子,说就算高考改成考怎么玩,玩得好的也还是这些学霸。
这是有道理的,因为人的选择决定事的结果,而选择是以思维模式为基础的。
正如教父中所说:“花一秒钟就能看透事物本质的人,跟花一辈子都看不清事物本质的人,注定有截然不同的命运。”
编程思维不但能大大提高解决具体问题的效率,当拥有编程思维的人面临人生选择时,也会更理性地分析利弊,目标更明确,更善于利用有限的资源。
而最重要的是,具有编程思维的人不会被貌似艰巨的困难吓倒,他们知道并相信——问题是可以解决的,也会更有勇气、毅力和自信去面对生活的挑战,不会轻易被挫折打败,陷入迷茫焦虑和自怜自艾。
学业、事业、社交、玩乐,无论你的目标是什么,编程思维都能让你更迅速、更容易地达成,人生又怎么会不快乐,不幸福?
▲妥妥的人生赢家啊。
——————————
“我是一名从事了10年开发的老程序员,最近我花了一些时间整理关于C语言、C++,自己有做的材料的整合,一个完整的学习C语言、C++的路线,学习材料和工具。C/C++、编程爱好者的聚集地就在我这里 <进入我的专栏即可>!欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下一个优秀的程序员。工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以跟我一起学习!”
关注我的专栏,带你遨游代码世界!C语言/C++进阶之路 - 专题 - 简书