批判性思维。所谓批判性思维,其实就是对待外部的输入,首先持一种怀疑的态度,过滤掉那些自己认为错误的东西之后,剩下的才是自己的。
你以为的不一定是他以为的。
“某某牌贴膏,只需三片,即可见效”。
上面是很多药品广告的广告语,药商往往还会请上几个健康活泼的老人来念这些广告词,但是“见效”这个词是什么含义呢?是指让你再也不会疼痛呢,还是让你一个月内不再疼痛呢,还是只是短暂地缓解病情?显然,这个歧义不解决,你就无法决定是否信服。
类似的歧义还有很多,最常见的就是模糊不清的需求。客户要求提供一个登录界面,你以为只需要做简单的用户名密码校验就好了,结果呢,客户不单要求输错密码一次后要输入验证码,还要求输错密码五次后当天不得再次登录,甚至还要求可以通过手机和邮箱找回密码......
解决这类问题的办法——不断质疑:
“你的意思是......吗?”
"除了......还需要......吗?"
“这样子可以满足要求吗?”
在向客户或者SE的不断提问的过程中,需求也慢慢得到澄清,我们也慢慢看到了客户的真实“验收标准”。
总之,不要猜测,弄清歧义,才可以下决定。
因为没有批判性思维,你把所有的书都视若珍宝,把作者说的话都当成金玉良言,但却又不去思考为什么要这么做
例如java中string字符串类为什么不能改变,看书我们知道因为string被final关键字修饰
,如果带有批判性思维去看问题的时候,就会去思考java设计者为什么要这么做, 哦,后面发现
String类经常作为哈希表中的key,经常要使用到其hash值,基于String不可变的特性,可以对其hash值进行缓存,减少重复运算,String类有一个成员变量hash,对hash值进行了缓存
这样做就可以提高效率
String是最常用的对象,为了节省内存,基于String不可变的特性,可以实现字符串常量池。
创建String对象前,jvm会先检查字符串常量池中是否存在该对象,若存在则直接返回其引用,否则新建一个对象并缓存进常量池,再返回引用。
字符串常量池避免了重复String对象的创建,节省了内存资源,同时由于减少了对象创建的次数,也提高了程序的执行效率
提高资源的利用率
这样子带着批判性思维去学习,收获就会更多,印象也会更深刻
5、批判代码
作为一名程序员,对自己代码进行批判,为什么要这样写,这个注解有什么用、有没有更好的实现方式等等。对自己写的每一行代码、用到的每一个工具类,都要理解,不然不知道这个工具类都做了什么,怎么敢保证用了之后不会带来Bug?如果实在来不及去弄清楚,把问题先记下来,等后面有空闲时间了再来慢慢学习。