前言
写作背景
在阿里巴巴的晋升会议上,评委经常会问:“你的成功可以复制吗?”我最初做评委时基本不会问这样的问题,因为我认为这样的问题很虚,工作完成就行了,不需要那么多道理。
然而随着时间的推移,我发现这的确是一个好问题。因为它可以区分出你是碰巧把事情做对了,还是你具备了一直做对事情的能力,二者是有本质区别的。碰巧做对,说明你的能力可能还不足,换一种情景,你就不一定能应付。因此,好的晋升制度不仅要考查成绩,更重要的是考查能力。对从事脑力劳动的技术人员来说,“能力”主要指的是“思维能力”。
正所谓“有道无术,术尚可求也,有术无道,止于术”。如果说我的第一本书《代码精进之路:从码农到工匠》主要是关于编程技艺——“术”层面的,那么本书则主要是关于技艺背后的底层思维——“道”层面的。
说到“道”,大家可能会想到“道可道,非常道”,觉得它“玄之又玄”。然而我这里所说的“道”更侧重于“道理”,即我们做事背后的道理、思维方式是什么。思维能力是比解决具体问题更重要的能力。问题也许各有不同,但思维方式可以复制和迁移。我们一旦掌握了正确的思维方式,便可以举一反三、触类旁通。
例如,我们都知道编程的时候命名很重要,也很难,可为什么会这样呢?如果要深挖其背后的原因,将是一个非常有趣的话题,甚至可以和哲学有关。命名工作中暗含了抽象思维能力和语言哲学,语言本身是抽象的符号,比如当你说“花”的时候,指的并不是某一朵具体的玫瑰花、郁金香,而是花的抽象概念。一朵具体的花虽然看得见、摸得着,但总会有凋零消亡的时候,而“花”这个字作为精神实体将永不会消亡。所以,抽象的花和具体的花到底哪个才是本真呢?这是一个哲学问题。
抛开哲学争论,就“花”这个字而言,它是提取了所有花的共性的抽象符号。命名之所以难,是因为你要经历一个提取共性、归纳要义,并赋予恰当名称的抽象思维过程。因此,要想真正做好命名,除了要掌握一些命名技法,还需要更深层次的修炼——提升抽象思维能力。
又如,有些人说话重点突出、易于理解,而有些人则前言不搭后语,让人不知所云;有些人写文章、写邮件思路清晰、有条理,而有些人的文章则词不达意、东拼西凑;有些人写的代码结构清晰、可读性强,而有些人写的代码则是一团乱麻、难以维护……问题的本质在于逻辑思维和结构化思维的差异,可逻辑思维和结构化思维又是什么呢?这些思维能力是可以习得和提高的吗?
维特根斯坦在《逻辑哲学论》中说,思维本身就能解决问题,我们所要做的,就是观察它是如何做到的。
认知水平有4个层次,从低到高依次是“不知道自己不知道、知道自己不知道、知道自己知道、不知道自己知道”。“不知道”并不糟糕,最糟糕的是“不知道自己不知道”,而因为缺少对自身思维的观察和培养,所以很多人对思维的认知尚处于“不知道自己不知道”的层次。
这种无意识会导致我们很多时候盲目地做事。虽然一些人“996”工作很辛苦,但也许大部分工作内容是无意义的重复,在工作过程中,思维能力并没有得到锻炼和提高。这样的人即使侥幸晋升成功,他的能力水平仍然停留在低层次。
就像混沌大学创始人李善友教授说的,没有好的思维模型,再多的知识积累也是低水平的重复。成人学习的目的不是获取更多的信息量,而是学习更好的思维模型。
综上,本书的首要目的就是打破“不知道自己不知道”的思维禁锢,把软件设计中会用到的各种思维能力显性化地呈现出来,让你意识到原来有这么多思维模型在软件设计中发挥着至关重要的作用。
一个人如果永远躺在自己的认知盲区,那么既得不到锻炼,更无法提高。只有意识到这些思维能力的存在,我们才有可能去学习、练习和提升。
我也是从这样的认知盲区中走过来的,自从意识到思维能力的重要性之后,便开始主动地学习各种思维方法,并努力将这些思维方法运用到软件设计中。在探索和学习的过程中,我发现讲思维能力的书有很多,讲软件设计的书也有很多,然而却没有一本将思维能力和软件设计相结合的书。君子求诸己,既然没有现成的书,那就只能靠自己一点一点去摸索。摸索的过程虽然要付出大量的时间和精力,但也充满乐趣,这是学习、成长和认知突破的乐趣。功夫不负有心人,你现在看到的这本书便是我“上下求索”的结果。
实际上,在本书出版之前,我已经在多个场合做过不少于十次的有关“程序员的底层思维”的分享和演讲,令我欣慰的是,每次分享都能得到很好的反馈。为此,我还专门在阿里巴巴内部开设了思维训练的培训课,课后有同学留言:“这样的课程应该被纳入新人入职的必修课”。
我想,这门课程之所以能够引发大家的共鸣、使大家获得启发,是因为其中涉及的曾经困扰我的问题亦困扰着很多人。既然我有幸能从这些困惑中走出来,那么我希望这些经验同样可以帮助你。
本书内容
这是一本超越具体编程技法的技术书,适合软件从业人员阅读,不管你是程序员、架构师,还是技术主管,都可以从书中习得各种有用的思维能力,并运用它们提升自己的软件设计技能。
这也是一本培养思维能力的通用技能书,即使你不是计算机专业出身,也能在书中学会一些通用的思维能力,来解决生活或工作中的问题。
我记得在一次“程序员的底层思维”分享之后,有一名财务人员对我说:“感觉这些思维能力不仅适用于程序员,而且适用于所有人。”的确是这样的,好的思维能力是可以被复制和迁移的,它应该是普适的,而不应该有行业的界限。
本书共18章,分为基础思维能力、专业思维能力和综合运用实践三大部分。
第一部分 基础思维能力(第1~9章)
这部分主要介绍解决日常问题的基础思维能力。这些思维能力不受行业的局限,比如我们在解决数学问题时需要动用抽象思维和逻辑思维;结构化思维更多地被用在写作和表达中;在当今信息爆炸的时代,每个人都需要有一些批判精神,这是批判性思维;化繁为简是我们要一直追寻的目标,这需要具备简单思维;面对困难,要有成长型思维;等等。
第二部分 专业思维能力(第10~16章)
这部分主要结合软件行业的特点介绍其特有的专业思维能力。比如,契约思维、模型思维、工具化思维、量化思维、数据思维、产品思维等都是在软件领域中非常重要且经常会用到的思维能力。
第三部分 综合运用实践(第17、18章)
这部分会结合我在商品技术团队的落地实践过程,以及COLA架构的演化过程,进一步讲解如何综合运用上述思维能力来解决工作中的问题,力求做到知行合一。
建议和反馈
思维能力是一个很宏大的话题,本书既不是集大成者,也不是完备指南,毕竟还有更多有用的思维能力等待我们去挖掘和探索。即使是书中提到的思维能力,由于我个人的认知局限,也会存在讲解不够透彻或者理解片面的问题。如果你有不同的见解或者新的发现,欢迎发送邮件至25216348@qq.com或在微信公众号“从码农到工匠”中与我交流,也可以致信本书编辑邮箱zhangshuang@phei.com.cn,我将不胜感激。
致谢
感谢我的家人和朋友在本书写作过程中给予我的大力支持!
感谢提供宝贵意见和技术支持的同事、朋友们!
特别感谢编辑张爽,这是我们的第二次合作,你的敬业和高效一如既往,没有你,就没有这本书的顺利出版和面世!
张建飞
2022年1月