做一个有批判性思维的程序员!
作为一名程序员,我也喜欢对自己和别人的代码进行批判,为什么要这样写,这个注解有什么用、有没有更好的实现方式等等。对自己写的每一行代码、用到的每一个工具类,都要理解,不然不知道这个工具类都做了什么,怎么敢保证用了之后不会带来Bug?
好的游戏一定要让玩家玩的很爽吗?王者荣耀和吃鸡游戏的成功,让这个问题的答案似乎毫无争议,不能带给玩家刺激的游戏就不是好游戏。
什么样的游戏才能吸引玩家不断的玩下去?答案就一个字,爽,用罗胖的话说就是,从前打一局CS,让你十几分钟爽一次,现在,来一盘农药,让你几分钟就爽一次。然后,吃鸡,一款让你爽的更频繁的游戏又出来了,紧接着,各个大厂的吃鸡游戏陆续上线,大家都在力争带给玩家更多的刺激,因为他们都相信,只有让玩家爽下去,他们才不会把游戏卸载掉。
就在游戏制造商们为生产出更加痛快的游戏杀红了眼的时候,一只青蛙,一边旅行着,一边给家里寄照片,默默的嘲笑道,“他们真俗!”。
就是这样一款只有两个场景、玩家除了给蛙准备便当、拔拔杂草就几乎没什么事干的游戏,上线后却刷爆了朋友圈。
而试想一下,如果在王者荣耀、吃鸡火的不行的时候,你能够稍微质疑一下,反问一句,“佛系游戏难道就不能火吗?”,说不定你就造出一款“旅行的喵”了呢!
这种质疑的态度,其实就是我们今天要讲的主题——批判性思维。所谓批判性思维,其实就是对待外部的输入,首先持一种怀疑的态度,过滤掉那些自己认为错误的东西之后,剩下的才是自己的。
不会批判性思维的你,显得很傻
有人说,整天疑神疑鬼的,过着会很累,但是,我想说,如果学会质疑,你不仅会错过旅行的蛙,而且还会显得你很傻。
你看到一篇文章,《成功的人,没有哪个是不阅读的》,文章写得非常励志,让很久没有读书的你非常惭愧,心想,都怪自己太懒,要是利用业余时间多读点书,现在说不定都身家千万了,于是你转发了这篇文章,转发时还不忘附上一句:从今天起,我要坚持天天读书[奋斗脸]
朋友看到你的朋友圈,心想,这人真傻,这话也信,没读过书造样过得很舒服很幸福的人多得是。 于是你成了朋友眼中那个很傻的人。其实,阅读是件好事,但是转发这样的文章,就显得你很没主见,显得很low,很鸡汤,甚至有点“中老年表情包”的范。
缺少批判性思维给你带来的傻还不止与此,你看了上面那篇文章后开始看书、开始关注各种微信公众号,你看到一篇文章说“晚上吃姜对身体有害”,于是有一天晚上聚餐,你看到服务员上了一盘姜葱鸡,就硬是让服务员把菜退了。
你聚餐完回到家,刷朋友圈时发现刚刚一起吃饭的小刘,转发了一篇文章,《晚上吃姜有害健康?哈佛教授用实验告诉你真相》,文章中列举了各种真实可靠的实验数据,你顿时有点脸红了,更要命的是,你看到小刘这条朋友圈下面,一堆点赞,而且,点赞的,都是晚上一块吃饭的同事……
因为没有批判性思维,你把所有的书都视若珍宝,把作者说的话都当成金玉良言,还为了显摆自己看过很多书,不断地再别人面前宣扬书中的各种错误观点,一个字,傻!
所以,是累好还是傻好呢?我想大多数人还是宁愿累点吧。
批判性思维就像给大脑装上了一道防火墙,外界的输入在进入我们大脑之前,都要经过筛选,通过筛选的观点和想法,才能进入我们的大脑。
那么,要怎样进行批判性思维呢,最近阅读了《学会提问——批判性思维指南》,作者Marcia Brown对如何批判性思维进行了系统性的介绍。
如何进行批判性思维
要想对一个推理进行批判,首先就要找准这个推理的论题和结论,如果连对方在谈论什么话题、对方的立场是什么都不清楚,那就谈不上什么批判了。
确定了对方的论题和结论之后,就要找到对方的理由,也就是支撑结论的证据。
找到对方提供的证据之后,接下来你就可以开始对它进行全方位的批判了。
总结一下:
对方在讨论什么(论题)-> 对方想说服我相信什么(结论)-> 对方给出的理由是什么(证据) -> 这些证据靠谱不(批判)
其中前面三步都很简单,这里就不细说,我们直接谈谈,如何对证据进行批判。
哪些词语意思不明确
你以为的不一定是他以为的。
“某某牌贴膏,只需三片,即可见效”。
上面是很多药品广告的广告语,药商往往还会请上几个健康活泼的老人来念这些广告词,但是“见效”这个词是什么含义呢?是指让你再也不会疼痛呢,还是让你一个月内不再疼痛呢,还是只是短暂地缓解病情?显然,这个歧义不解决,你就无法决定是否信服。
类似的歧义还有很多,最常见的就是模糊不清的需求。客户要求提供一个登录界面,你以为只需要做简单的用户名密码校验就好了,结果呢,客户不单要求输错密码一次后要输入验证码,还要求输错密码五次后当天不得再次登录,甚至还要求可以通过手机和邮箱找回密码……
解决这类问题的办法——不断质疑:
“你的意思是……吗?”
“除了……还需要……吗?”
“这样子可以满足要求吗?”
在向客户或者SE的不断提问的过程中,需求也慢慢得到澄清,我们也慢慢看到了客户的真实“验收标准”。
总之,不要猜测,弄清歧义,才可以下决定。
推理过程中有没有谬误
总有一些推理听起来非常有说服力,但往往经不起推敲。
“你代码不能这样写,我们组基本上不用这种写法,而且老黄(某组内专家级人物)推荐要采用另一种写法……”
很多项目的新人都会遇到类似的说辞,有些人听完就点点头,把自己代码改了。
然而如果你是一个求知欲很强的程序员,听到类似的解释,至少会在心里回怼一句:“凭什么???”
其实只要仔细思考一下对方的说辞,就会发现对方根本不是在说服你,而是在要挟。
首先,“我们组基本上不用这种写法”,这是用组内的“江湖规矩”在要挟你,意思是你要入乡随俗;
其次,“老黄推荐要采用另一种写法”,这是用权威在要挟你,你不可以不服从权威。
然而,这些都不属于证据,真正的证据应该是像这样的:这样写会有什么性能问题,或者是耦合性问题,用“江湖规矩”和”权威“来试图说服别人,恰恰犯了书中提到的诉诸公众谬误和诉诸可疑权威谬误。
类似的推理谬误还有很多,我们不可能一一记住。只需记得,在接受对方观点之前,不妨多问一句,凭什么???,唤醒自己的懒人脑,进行理性的批判思考。
证据的效力如何
证据的来源有很多,常见的有这四种:
- 个人经历
- 典型案例
- 专家意见
- 研究报告
这些证据的可信度有多少呢?
1、个人经历和典型案例
很多人都知道个人经历不可信,可是当看到别人炒股赚的盆满钵满、别人追求自己的理想出去创业收获人生巅峰时,还是忍不住想把对方当做偶像去模仿。
然而,现实是,那些炒股炒的倾家荡产的、那些创业失败破产倒闭的人,你是看不到对他们的报道的。《清醒思考的艺术》的作者罗尔夫·多贝里,在书中建议读者,多去失败者的“墓地”走走,想想也是很有道理的。
2、专家意见和研究报告
既然称为专家,那么也就意味着对方经验丰富、技术高深,在大多数情况下,专家都是对的,不然也不能被人叫做专家。
然而,专家并不总是对的,在这个时候,你也不必对其冷嘲热讽。我们要做的是,即使是专家的意见,也要批判性对待,不断提出质疑,敢于挑战权威,即使最后证明你的质疑是错的,你的收获,也比那些把专家意见当做真理的人要多很多。
研究报告也是类似的,很多研究报告都出自著名的实验室,但是这并不代表他们的结论就是正确的。他们做了那些实验,不代表就可以得出那些结论,我们同样需要对他们的实验过程和推理过程进行批判性思考。
数据有没有欺骗性
“大人总是喜欢数字”,小王子的这句话恰恰说明了人性的弱点。
人们往往容易被带有数字的证据说服,最常见的就是“平均数”陷阱,“XX公司员工平均年收入XXX万”,这种平均数,根本无法说明问题。九个年薪十万的员工和一个年薪千万的员工,平均下来,每人年薪超百万,但是他们十个人中却只有一个过上年薪百万的生活。在很多时候,中位数和众数,比平均数更能说明问题。
除此之外,数据来源也是你非常值得批判的一个角度,人们总喜欢使用不明来历的数据来证明自己的观点。
下次再看到金光闪闪的数据或者图表时,先想想数据从何而来,这些数据又有多大意义。
哪些场合要使用批判性思维
生活中有很多场合都需要用到批判性思维:
1、评价别人的观点
我们每天都会从各种各样的渠道获取各种新的观点,书籍、微信公众号推送、知乎、简书等等。在接纳这些新观点,或者为之付诸行动之前,应该先批判思考一下,有歧义吗?有谬误吗?凭什么这么说???
2、评价自己的想法
批判性思维不仅仅是对外进行批判,对自己进行批判也很重要。
养成记日记的习惯,在回顾自己一天做了什么的时候,顺便批判思考一下,自己今天的哪些行为做的不好。比如我某天晚上记日记的时候,发现自己写了一天代码,但是效率很低,于是第二天就给自己的屏幕录了视频,研究一下自己一天对着电脑都做了什么,看看有哪些可以提高效率的地方。
3、写作
既然对别人的文章可以进行批判,那么对自己的文章也同样可以。不妨把自己当做读者,看看自己写的文章里,有哪些没有依据的断言、有哪些词语带有歧义、有哪些论据带有谬误等等。
同时,对于那些技术性较强的文章,在写完文章初稿之后,不妨接着寻找更多的相关主题的文献,来证明和冲击你的观点。永远不要满足于少量文献,这也是论文通常对参考文献的数量达到一定数量的原因。
4、学习
很多人学习一项知识时,喜欢把书或者其他学习资料从头看到尾。事实上,这样做是很没效率的,因为你很难保持那么长时间的专注,尤其是在阅读一些英文的文献时,更是如此。
这时候就有一个好办法,你可以在粗读了文章,比如文章的标题、文章的开头结尾、段落开头结尾之后,向自己提问题,记下问题清单,然后带着问题清单去文章中找答案,这样学习起来会非常有效率。
我在学习Kafka的时候,就是阅读了Kafka官方文档中Introduction的章节,对着Get Started做了个Hello World,然后就给自己提了一堆问题,什么Kafka的broker.partition都是啥、Kafka的架构是怎样体现分布式和集群的、Kafka和RabbitMQ相比,有什么优势和劣势,诸如此类自己非常感兴趣、很想了解的问题,接着下一步就是把一个个问题给解决掉,在寻找答案的过程中,不知不觉就把文档翻了好几遍,而且由于我是主动学习,学习的时候十分专注,效率奇高。
5、批判代码
作为一名程序员,我也喜欢对自己和别人的代码进行批判,为什么要这样写,这个注解有什么用、有没有更好的实现方式等等。对自己写的每一行代码、用到的每一个工具类,都要理解,不然不知道这个工具类都做了什么,怎么敢保证用了之后不会带来Bug?如果实在来不及去弄清楚,我也会把问题先记下来,等后面有空闲时间了再来慢慢学习。
哪些场合不必使用批判性思维
也不是所有场合都适合使用批判性思维的,我们也要用批判性思维去看待批判性思维。
比方说看电影、电视剧, 我身边很多朋友,喜欢在看到电影一些非常不可思议的巧合的时候,说一句,“怎么可能这么凑巧”,每当这时,我就在心里默默的怼一句,“你这人不适合看电影……”
电影、电视剧、小说等很多虚构的故事,不一定完全符合正常逻辑,但是我们看电影不就是为了放松么?只要在那一瞬间,剧情打动了你或者逗的你哈哈大笑,看电影的目的就达到了。
我看到的最搞笑的事是,有一次和朋友去看一部喜剧片,看的时候他笑得眼泪都出来了,然后看完电影,他却在朋友圈发了一张图片,晒了他在豆瓣上给这部电影打了两颗星的影评……
总之,善用批判性思维,看穿生活中的那些谬论,做一个清醒思考的程序员。
原文作者:SexyCode;