最近读了一本关于产品的好书《用户思维+ 好产品让用户为自己尖叫》,虽然是一本产品相关的书,但是全书都在围绕如何让你的用户变得更优秀展开讨论。作者的观点很明确也很独到,可持续成功的产品都是由推荐(口碑传播)产生的。而激发这些推荐的是用户对自己的感觉,也就是我们的产品或服务帮助他们做了什么或成为什么样子。这可能也是知识付费这几年火热的原因之一吧。
这本书的作者可谓将用户思维挖掘到了极致,这一点在此书中随处可见。可以这么讲,这本书本身就非常的用户思维,在关键的观点或知识点上,总是配有恰到好处的生动插图,读起来毫不费劲,想象一下《Head First》系列图书的画风。奥对了,这本书的作者Kathy Sierra就是Head First系列图书的策划人之一。
我在读这本书的时候,更多的是将自己当成了书中的用户。所以读完之后最大的感触就是,我能不能运用书中讲的这些让自己变得更优秀呢?毕竟用户思维就是一切从用户出发。思考过后,我觉得是可以的。从这个角度而言,这本书已经超出了讨论如何做好产品的范围,着重的是用户思维中的思维这两个字。而这种思维就是译者序中提到的成长型思维模式。这也是我写此文的目的,希望这种成长型思维能对自己的进阶之路有借鉴意义。如果能对大家也有所帮助,那就再好不过了。
用户理想成长曲线:
若是顺着成长曲线向右上方移动,最终我们将达到专家(某一领域)的高度。但其实我们大多数人只是想变得更好一些而已,一点点进步就会非常明显。那么如何做才能顺着成长曲线向右上方快速移动,甚至接近理想曲线呢?或许可以从专家身上找到答案,首先我们需要了解一下什么是专家?
专家不只是指他们知道什么。重要的是,他们能将已有的知识应用到实践中。而且,他们可将这一过程一次次地重现。在一个领域中,给定一项具有代表性的任务,专家的完成情况更好、更可靠。
然后我们再来看看专家是如何做的?
要想具备专业能力,就必须构建专业技能。技能的构建就是将一项技能由“不能做”移动到“能做”。能做又划分为两种类别:费力(不可靠)和精通(可靠、已内化)。
我们设想中的技能构建过程可能是这样:
但是,这不是一条通向高水平专业能力的有效途径:
我们看一下专家是如何做的:
我们应该格外注意这个过程:
刀不磨要生锈,那些无需我们有意识练习的技能将慢慢退化。所以仅仅使用是不够的,还需要拿出来有意识的练习。
我们经常会有这种感觉,在某一项技能的练习上,我们付出了努力,也付出了时间,但是效果就是不理想。很多人可能会将此归咎为自己笨,没有天赋;其实并不是,很有可能是自己练习的姿势不对。
在时间一样的情况下,专家会将更多的时间放在刻意练习上,注意可以刻意练习不是刻意地练习。可以练习有助于防止陷入平庸,这是因为:精通半个技能完胜一堆半生不熟的技能。
通常情况下,更细粒度的子技能学习法是构建技能的最佳途径,但是没有人愿意把一周的时间都用在简单的练习上。刻意练习总是恰好超出我们当前的能力范围(舒适区)。这一点非常重要,如果我们练习那些远超出当前能力的技能,很可能会因为太困难、长时间没有反馈而放弃。而如果一直练习没有难度没有挑战的技能,后果可能会更严重,我们在平庸阶段进行的练习越多,对平庸技能的强化就越大,并且练习造成的影响是永久的。
刻意练习的简明原则:完成一项细粒度的任务,经过一到三组45-90分钟的练习就能达到95%的精通度。
如果无法达到这一要求,我们可以将任务划分为更小的子任务,或者降低要求和标准。
但是大多数人在大多数的专业能力成长曲线上遇到的最大问题是,阶段B堆积了太多东西。与一次只做一件事情相反,我们想要同时学习和练习的东西太多了。这种形式的技能堆砌会拖慢进步速度、扼杀进步。
专家将更多的时间放在刻意练习,给了我们借鉴的意义。程序员这个职业,不学习就会被淘汰,学习就意味着要构建新的技能,丰富自己的技能库。这个时候就可以运用上面的刻意练习的方式。首先我们要明确自己学习的目标,学习此技能能帮助我们完成什么,是否值得我们学习,切莫贪大贪全,应该确定自己的核心竞争力是什么。以阅读优秀源码(至于为什么阅读源代码,后面有提到)为例,一般一个项目的源码到了值得阅读学习的阶段,此项目应该已经比较成熟了。那么此项目的代码量以及代码难度应该都是不小的,如果从最新最全的版本开始看起,很容易就因为太困难放弃了。那么此时就可以进行任务拆解,可以从比较早期的版本看起,这个时期的代码量比较小,代码设计要比较好理解。或者是可以研究此项目中其中一个功能,掌握以后再切换到别的功能上。例如研究数据库,数据库发展到现在,其中的实现无比复杂。那么我们就可以从其中的几个主要的功能特性入手,比如索引、锁之类。
此外我们需要格外注意上面提到的两个问题,一个是阶段B堆积了太多东西,我们想学习的东西太多,但是精力有限。此时应该收缩战线,专注构建最重要的技能。精通半个技能完胜一堆半生不熟的技能。另一个是我们在平庸阶段进行的练习越多,对平庸技能的强化就越大,并且练习造成的影响是永久的。有很多工作年限比较久的程序员,专业能力还不如刚工作几年的新人。究其原因,都是因为不努力吗?不然,他们也努力了,只不过他们待在舒适区的时间太长了。
我们会经常听到这么一个观点,中国人学不好英语,是因为中国人从来不用英语,只是单纯的死记硬背。同样的道理,专家之所以成为专家,是因为专家周围的环境更好,他们接触了大量高质量的专业技能。中国有句古话,“近朱者赤,近墨者黑”,也是同样的道理。放在现在就是,如果你身边都是优秀的人,那你多半也差不到哪里去。但是,除非满足特定的条件,否则简单地接触专业人士并不能帮助你构建专业能力。
书中有个很生动的例子,小鸡性别鉴定。辨别刚出生的小鸡的性别异常困难,但是更早的辨别出小鸡性别,将公鸡和母鸡分开,有助于更快的进入鸡蛋生产环节。在20世纪初,日本人开发了一套鉴别小鸡性别的方法,但是只有很少的几位专家掌握了这一技能。现在的关键是培训具备这一技能的新手,便可以大规模应用这一技能。问题是身为掌握这一技能的专家也不知道自己是如何做到的。你的大脑能够学习一些你无法学习的东西,这不是什么魔法,而是感性知识。
他们是这样培训新人的,让新人随意指出小鸡的性别,只是随意的猜测。然后小鸡性别鉴定专家给予新人反馈,对,不对,不对,对。新人的每次猜测都会得到专家的反馈。终于,随着时间的流逝,新人在小鸡性别鉴定方面的表现越来越好了。只不过这时候新人还是不知道这是为什么?
其实在接触足够多的反馈之后,你的大脑在无需意识介入的情况下,开始发现模式和潜在的结构,伴随着更多的接触,你的大脑开始精心调整它的感知能力,最终找到真正的解决方案。你的大脑能够觉察更加细微的特征,将信号和噪声区别开来,即使你无法解释其中的原理。
所有领域的专家都在学习和利用无意识的感性知识,他们的大脑知道的东西远比展现出来的多得多。
当你接触了大量多样化的实例时,你的大脑便开始观察什么是不变的。在感性学习能够发挥作用的地方,“发现”其实比“讲授”更有效。我们的目标就是通过展现更好的实例,帮助自己变得更加优秀。
现在知道为什么要读源码学习了吧,而且要读优秀的源码。你无需观察优秀程序员是如何编写代码的,只需要阅读很多优质代码即可。所以不要把自己写不出好代码的原因归咎于身边没有大牛,也不要妄想着要是有个大牛带带我写代码就好了。
那么要不要看烂代码呢?要看!因为有时候这不是你想不想看的问题,而是你不得不看,是项目就会有烂代码。当你确实需要展示或者阅读错误或不良的实例时,要营造不适感。我曾经和我的组员说,有时候阅读烂代码反而比阅读优秀代码进步更快。但是前提是你要能识别出什么是好代码,或者什么是烂代码。当你看到烂代码时,你就会打心底里嫌弃,然后就是想办法去改造它,这就是进步的机会啊。学习鉴别“不良”实例的最佳办法,就是学习“优秀”实例的潜藏模式。《重构 改善既有代码的设计》这本书就是这样做的,首先明确指出烂代码都有哪些特点,然后才是针对这些特点的代码重构方法和解决方案。
如何能保证自己顺着理想成长曲线不断前进呢?要知道在愿望和现实之间存在着一条鸿沟。有一些东西干扰了我们,有两种不同类型的干扰性鸿沟。
第一次学习编程的你会遭受很多痛苦。任何一件值得你付出的事情,都是如此。所以当我们面对困难时,第一件事就是要承认困难。人们之所以在遭遇困难时放弃,并不是因为他们遭遇了困难。这是因为他们不知道他们的境遇是正常的。这是因为他们不知道他们的努力方向是正确的。这是因为他们不知道其他人也会在同一阶段遭遇困难。那些放弃的人们,没有意识到,困难只是暂时的,也是正常的。
在承认困难之后,我们还要对成长曲线上可能会遇到的问题做出预测和补偿。预测出可能会干扰我们前进的因素。比如我自己在看书时,会将手机静音放到自己够不到的地方去。这样我就不会一直惦记手机会不会有消息,等到看完书再处理就是了。然后要对自己遇到的困难做出补偿,以编程为例,我们遇到的问题基本上前辈们都遇到过,这个时候善用搜索引擎就非常有用了。论坛和社区也非常重要。
我们知道了阻碍我们前进的因素,但是吸引我们前进的因素是什么呢?我觉得是成就感。成长路线上所收获的,会让我们获得成就感。如果我们没能从进步中获得任何好处,一切将变得没有任何意义。所以规划好成长路径图就非常重要了,仅仅知道有这么一条成长路径存在,就是强烈的动机来源。
对于程序员而言,制作一份技能清单,内容涵盖从初级到高级的技能。然后将其划分为不同的级别和层次。一种可行的做法是,在每个层次所花费的时间是前一个层次的两倍。即使这条路径不是最佳也无所谓,因为重要的不是路径,而是取得进步。让我们大胆一些,尽管尝试就是了。另外使用领域特定的专业术语进行交流,不仅有用,而且也是一种激励。所以和同事交流,或者写博客分享我们的技巧都是很好的激励方式。
1999年,Baba Shiv教授以及165位大学生一起开展了一项简单的实验。他要求一半的学生记忆一个7位数,其余学生记忆一个2位数。
上图中的结果,可能很多人认为是大脑在工作之后需要更多的卡路里,需要吃点蛋糕补充能量。但是研究人员向我们揭示了一个违反直觉、令人震惊的事实:
意志力与认知加工能力从同一个资源池中获取能量。
记忆7位数的参与者选择蛋糕,不仅是因为他们大脑需要更多的热量,还因为这项记忆性任务耗尽了他们抵抗蛋糕诱惑的意志力。所以我们应该确保自己把稀缺、易耗的认知资源用在正确的事情上。核心任务就是减少资源泄露。
我们的大脑总是努力区分噪声和信号,这其实是好事,只不过我们无法控制这个过滤器。所以我们需要做另外一件事,阻止大脑把我们应该关注的事情当成垃圾。
我们必须帮助大脑同意:
大脑喜欢即学即用式学习,而不是储备式学习。这也是为什么同样的工作时间,不同的人能力提升却差别很大。如果你的工作是极具挑战性的,那么你就需要一直学习新的技能来满足工作的需要,并且都是即学即用式学习,这可是我们的大脑所喜欢的。相反,你的工作没有任何挑战性,即使你在不断学习,但是始终用不到学到的新技能。我们经常会有这种感觉,很多当时学会的东西,过一段时间基本就忘却了,因为我们的大脑不喜欢储备式学习。所以我们可以利用技能映射验证知识的有用性,通过将知识映射为技能来验证(减少)必须学习的知识。直接把多余的知识删除、删除、删除。
利用应用场景说服大脑。当我们学习很抽象的技能,不好理解和记忆时,可以尝试利用应用场景来说服大脑。例如在学习Redis的5种基本数据结构(现在是6种了)时,就可以思考每种结构可以应用在什么场景?hash可以用于记录帖子的点赞数、评论数和点击数;zset可以用于记录热榜帖子ID等等。
加油吧,骚年,成就卓越的自己