不久前,在团队内部和你们作了一次分享,内容就是此次要讲的“用认知和人性来提高本身的技术水平”,你们反响不错,因此此次整理一下也分享给你们。
最初我是想用“借优秀的产品经理思惟来作最棒程序员”的这个标题,但想一想仍是要有同理心,技术同窗平时和产品同窗已是相爱相杀了,就不刺激你们啦。可是必需要说的是优秀的产品经理思惟和优秀的程序员思惟确实是异曲同工的,二者是想通的,就是来自认知和人性。
这里我不会过多去梳理认知和人性的概念,后面会用不少例子来讲明,保证通俗易懂,只想先提2个概念:php
下面我来逐一举例说明前端
flutter带来的生产效率提高,不只仅是一个开发能够同时产出android和ios两端应用。更在于产品经理之后只须要和一个开发沟通需求细节,不会再担忧出现android和ios功能细节实现误差的问题了。因为有了这样的认知,虽然flutter做为新技术,还有须要完善的地方。但这不是主要问题,咱们愿意为它去冒险,在咱们的产品里去尽快实践。vue
怎么让查问题更有效率?其实很简单,咱们若是借鉴名侦探柯南的想法,那就是“抓住案发第一现场”。举两个例子,对于JAVA这样的静态语言,查询线上日志的方法是很是重要的。不少同窗发现某个请求出问题了,就去看当次请求的日志,这种方式不必定准确。由于对于静态语言,它的案发第一现场可能已经不是当次请求了,颇有多是首次发生这个问题的时候,或者服务器刚刚启动的时候(静态语言的”缓存”特点)。当你发现上层的业务系统发生了mysql死锁的报错,就不要太纠结于上层业务系统的日志了。应该去看mysql的bin log,抓住这个案发第一现场,看看到底发生了什么。不知道怎么解决线上问题,99%是由于连案发第一现场都没找到,等你找到了,基本也有解决方法了。java
正确的方式应该是:让他讲一个以前投入度比较高的项目,描述下本身是怎么独立去解决问题的。对每个点的描述,只要你以为还不能体现他“独立解决问题”的能力,那就继续扒皮深问,直到他不遗余力,被你”逼到墙角”。特别优秀的人被逼到墙角后,具有现场把墙砸掉的能力,这样的人是死也不能放过的,具体什么意思你们能够去体会思考。
以前咱们曾经面试过一个性能测试工程师,从技术细节看对性能测试的工具和方法是比较了解的。在项目描述中咱们问了他一个问题:你以前经过性能压测发现的服务端问题,有去了解过发生的缘由吗?他给的答复是:由于咱们是外企,制度比较明确,开发也是另一个部门,因此我没有去了解。很差意思,这个回答基本体现了没有独立解决问题的能力乃至意识。碰到一堵很小的墙,他都没有办法独立解决,好奇和学习的欲望也很弱。他在技术细节上的积累只是由于看了几本书,用了几回工具,这些都只是为了应付面试和不懂的领导,根本没有深刻实践,他将来的瓶颈必定很是大。
只要可以独立解决问题,就必定能经过面试,有些技术不了解,最多就是被砍点薪资而已。在这一点上,10年工做经验的同窗还真未必比得上2-3年工做经验的同窗,若是没有独立解决问题的能力,那只是多累积了一些所谓的专业经验,但仍是没法解决问题。不少大公司喜欢校招优秀的毕业生,也是这个缘由,虽然这些学生尚未实际工做过,但已经具有了很强的独立解决问题能力。咱们曾经招过一名同济大学的测试实习生,有一次她独立组织了部门的团建活动,搞得层次分明,方方面面都考虑到了,这样的同窗作好技术只是时间问题。:)python
集体性的认知出错每每是从一些小现象开始的,好比咱们的团队曾经发生过一次正常的项目延期,缘由是周五到了,没有完成测试,为了不仓促上线出问题,因此延期一天发布。其实到这里都是很是正常的,可是当测试同窗在钉钉群里发出这个缘由的时候,有一些同窗发出了大拇指的表情。注意,这个时候你们是没有犯错的,可是认知已经出现了误差,变成了“之后就算测不完,只要说项目风险,就能够延期”。群里不少同窗都看着,一旦这个集体性的认知误差造成,将来项目的延期就会愈来愈多。因此须要马上出来讲一句:由于风险项目暂时不上能够,可是延期的缘由要总结反思。 经过这样一句让你们内心不太舒服的话,尽快把集体性认知误差扭转过来。马云说过”小事要大作”,就是这个道理,不大作,等发生大事的时候就来不及了。mysql
分久必合,合久必分,这个的理解就颇有意思了。你们都知道,这句话的出处来自三国演义,说的是一个国家分裂久了就会合并,合并久了也会分裂,其实对代码逻辑的复用也是如此。你们在合并抽出公共函数时,会发现有10%-20%的逻辑不是那么顺眼,总感受暂时放在里面是能够的,但未来可能会拆出来。那么在写公共函数时,就要特别注意这部分逻辑。它虽然暂时在函数里,可是须要作到和上下文相对隔离,甚至还能够加入明显的换行和TO DO,为下一次的拆作好准备。而在拆出一些独立逻辑的时候,也要思考这些逻辑可能和其它的哪些逻辑有机会是合起来的,那么尽可能放在一个类里,一个包里,为后续的合作好准备。react
带来的好处太多了,由于用了你的开源消息队列,以后就会用你的云计算平台。由于程序员都很懒,开发环境和线上保持一套嘛,你后面必定能赚大钱。由于开源项目很是知名,让你公司的技术形象马上高大起来(先无论这个项目到底创造了多少有价值的产品),每一年校招的优质学生资源尽收囊中,其余公司要抢人,只能花更多的钱。而每一年中国优秀的毕业生就那么多,早就供需失衡,谁抢到了大部分,那以后在技术上必定能保持绝对优点。最后万一公司财报很差看了,很差意思开始收受权费,就像google收android的费用同样。不做恶只是口号,开源带来了无比巨大的利益,不能赚钱,谁开源?!如今微软也懂了这个道理,成为了开源社区的标杆,但在早期的鲍尔默时代但是出现了认知误差呢。android
心里越简单的人,未来能到达的境界就越高。你们千万不要误解了,我说的不是思想浅薄,而是心里简单纯粹要像少年同样。一个很好的例子,郭靖,用世俗的眼光来看他天资不高,开始学什么都慢。可是他有一个很大的优势,就是想法简单,无私心,锲而不舍。报家仇,报国仇,保护好他爱的人,不会去想是否是别人骗了他,他多作一点是否是亏了。20岁就达到五绝水平,最后终于融合“降龙十八掌”、“九阴真经”和“左右互搏”三大盖世武功为一体,武林尊为“天下第一侠士”。
心里越简单,就越不会花费额外的精力在一些可有可无的事上面。随着时间的推移,你的认知水平就必定能提高得更快。不要去想今天你学的语言明天是否还流行,先利用当前语言训练好你的思惟模式。不要去想我做为测试给开发指出太多问题后,开发会不会不爽,作为测试你的核心是保证产品质量。不要去想今天我帮组内的开发分担了额外的代码编写,我是否是亏了,这些付出必定会在未来某个时候兑现,由于你比他们有更多的代码实践。ios
ipod+手机诞生了iphone,手机+钱包诞生了支付宝,c,python+java诞生了go,人类的创新其实都是来自于跨界的结合。不少时候你们去看一个技术大神,会认为他必定是看了不少专业的书,看了不少牛逼开源项目的代码,写了不少项目才达到如今的这个水平。而后又看到别人的兴趣爱好:音乐,滑雪,画画,牛逼,大神就是大神,作好技术的同时还能“兼顾”这些兴趣。
这个认知彻底错了好吗,我告诉你,写代码看书当然很重要,但若是他没有这些兴趣,他在技术上可能根本达不到今天的程度。一个有画画功底的人,理解向量,理解数据的PCA分析就是快好吗。一个财务出身的人,写支付系统的代码就是不容易出错好吗。人类的大脑历来都是一个网状的,互相关联的知识图谱,根本不存在靠”单一事物”修炼成功的好吗。千万不要成为技术上的孔乙己,每天学各类API的写法,和学习茴香豆的茴字有几种写法没有任何区别。在方案想不出来的时候,在代码水平感受到瓶颈的时候,在看不懂一些专业书籍的时候,必定要跳出来,和本身的兴趣结合,和本身经历结合,和本身的生活结合,这样才能突破瓶颈,提高到更上一层的认知。程序员
科幻神做三体里,外星人看地球人就像纸片同样,在三体人的眼中,地球人是二维的,而不是三维的。回到现实中,高认知的人看低认知的人也是同样的,不是低认知的人不够努力,而是你的知识图谱里比高认知的人少了一些维度。因此无论你怎么努力,你会发现仍旧没法超过他,他还比你轻松,学霸给你们留下的阴影就是这么来的。
在实际工做中,你的leader,你的架构师只要不是水货,每每他们的认知就是比你高的。一旦你以为这我的的本性是靠谱的,你就该无条件去相信他给你的建议和指引。由于他能看到在你那个维度上感觉不到的东西,照他的话去实践几回,你才有机会到达他那个维度,才能升级认知。不过在现实状况中,咱们每每看到不少leader和架构给下面的同窗苦口婆心说了不少,可是他们不理解,反而更叛逆。这份痛苦我懂,你是拼了命想拉他到你那个维度,可是他还年轻着呢。:)
人就是一个如此奇妙,如此复杂的生物,无论你看多少书,看多少源码,写多少demo,你不真刀真枪地去实践,去写代码,这些知识不管如何都没法进入你大脑的知识图谱。它们永远只能是“狭义上的知识”,而不是“有价值的认知”。相信你们人生中都有过相似的经历了,越是辛苦的实践,越是坚持,你最后的收获必定越大。简单来讲,认知不经过锲而不舍的实践是不可能升级的。
还有一点我必需要强调,实践应该尽可能和公司的项目去结合,而不是依靠于本身写demo。这里面有一个很大的误区,本身私下写demo常常是没有“明确,高压的”目标的(人性老是偏懒的),这种实践每每很难提高认知。而公司的项目每每不一样,会提出"支持多少用户访问",“为何你每次开发都不能更快一点”(核心挑战的是你架构的扩展能力),“为何这个功能这么卡”(性能优化),这些“明确的,高压的”目标能督促你去拼命提高本身的认知(只是写demo是很难给本身设下这些障碍的,是反人性的)。固然从结果来看,又是公司的压榨剥削拉,让咱们回忆一下前面说的,若是你以为这个公司是靠谱的,那就让咱们的“心里简单一点”,锲而不舍地实践升级认知吧。:)
最后总结一下,如今已经不是一个单纯比拼知识量的时代,而是比拼认知高低的时代。做为程序员咱们并不特殊,和市场,财务,产品,运营的这些同窗同样,核心看的是认知,并不存在谁比谁困难,谁比谁辛苦的这种浅层比较。而咱们学习的那些语言,框架,工具,和咱们大学时期学习的微积分,高等物理没有区别,都只是帮助咱们不断训练提高认知的实践工具,而不是认知自己。让咱们不要再局限于程序员狭义技术的范畴内,把提高本身的认知做为最重要的目标,咱们要努力作到“既是程序员,也不是程序员”。