码农翻身有感
青青翠竹尽是法身,郁郁黄花无非般若。教育小孩和做团队 leader 有相通之处。
做技术切记“本末倒置”,我非常痛恨那些采用 bottom-up 方式来讲解技术的资料和文章,一上来就是技术细节、安装步骤、配置丰富,让初学者晕头转向,不知所云,看完以后也不知道为什么要有这个东西、解决了什么问题、它有什么来龙去脉。换句话说,这些资料和文章习惯于讲解 How,而不是 Why,但是在我看来,Why 有时候比 How 更重要。
当你改变不了别人的时候,抱怨也没有用,还是要先改变一下自己。
程序的局部性原理可以从时空两个维度来进行解释。
时间局部性:如果程序中某条指令开始执行,则不久之后该指令可能被再次执行;如果某数据被访问,则不久之后该数据可能被再次访问。
空间局部性:一旦程序访问了某个存储单元,则不久之后其附近的存储单元也将被再次访问。
GSM 技术的核心是时分多址(TCDMA),将每个无线电频率按照时间均匀分给 8 (或者 16) 个用户,每个用户交互占用 1/8 的信道时间(人们通话的时候,语音的实际间隔时间其实很长,只要编码合理,就可以多用户公用一个信道)
设计模式就是在某种场合下对某个问题的一种解决方案。就是给面向对象程序设计中的一些好的设计取个名字。
互联网公司的崛起大概是在 2012 年左右移动互联网开始出现,互联网的渗透率得以加速,BAT 逐渐开始成为家喻户晓的名字。其次,经过前面时间的积累,互利网企业主导的各种分布式、大数据、移动互联网、云计算等技术的风头开始超过传统的 IT 巨头,阿里开始去 IOE,打造自己的云计算平台,成为先进技术的代表着;最主要的还是互利网企业盈利能力大幅增加,能够提供市场上更有竞争力的薪水和股票。于是互利网企业在人才市场上开始变得炙手可热,BAT 这些企业开始被人称为“大厂”。今天我们感觉这些互联网巨头高高在上,人们纷纷向往。事实上,这个现象出现的时间非常短。今天这些企业有足够的名字和资源将自己营造得高高在上,可以在众多优秀的候选人中挑来选去,仅仅在 10 年前,还不是这样的。但是事情的真正的吊诡之处还不在这里,当今这些互联网大厂的核心技术和业务模式在十几年前就已经奠定了,经过几年的探索,大概在七八年前开始稳定成熟。也就是说互联网企业的技术实力和商业能力是在这些企业还默默无闻的时候就发展起来的,而在这些企业成为明星之后,并没有得到突破性的进展。想想这些所谓的互利网大厂,最近几年并没有什么值得称道的商业模式创新和技术创新。也就是说:十多年前,可能是一些并不优秀的技术人员加入到一个并不出名的公司,然后这些人开创了一个杰出的事业。用马云的话说,就是“二流的人做一流的事”。然后公司开始挑选一流的人,但结果似乎只是在维持这个事业,并没有开创出更加杰出的事业。今天的 BAT 似乎成为了当年的 IBM,历史好像进入了某种循环。如果这就是事情的真相,那么我们或许可以从中得到某种启发,重新考虑下未来的职业规划。也许就会发现:我们可能不需要追逐当前所谓的热门技术,而应该好好想想需要为自己的未来准备些什么。
职业规划
德雷福斯模型
专业人员能力成长模型,这个模型认为所有专业人员都需要经历 5 个成长阶段,不管是医生、律师还是软件开发,任何专业技能的从业者都需要经历新手、高级新手、胜任者、精通者、专家 5 个阶段。
任何一个人进入专业的技能领域,即使在学校已经系统学习过这个专业的相关知识,但是依然无法独立完成工作,必须在有经验的同事指导下,学习相关技能。这里主要学习的是有关工作的规则和套路。比如用什么工具、框架,如何开发程序,如何开会、写周报,如何和同事合作,业务领域的名词是什么意思等等这些这种各样和工作有关的大小事情。这个阶段叫做新手阶段。
通常说来,一个人大约工作了 2-3 年后,就差不多掌握了工作的各种套路,可以拜托新手阶段,独立完成一些基本的工作了。通过新手阶段的人,少部分会直接进入胜任者阶段,而大多数则进入高级新手阶段。高级新手通常是新手的自然延续,他不需要别人指导工作,也不需要学习工作的规则和套路,因为高级新手已经在新手阶段掌握了这些套路,他可以熟练应用这些规则套路完成它的工作。但是高级新手的能力也仅限于此,他不明白这些规则是如何指定出来的,为什么使用这个框架开发而不是另一个框架,也不明白这个框架是如何开发出来的。
因此,一旦需要解决的问题和过往的问题有很大不同,以往的规则套路无法解决这些新问题的时候,高级新手就抓瞎了,不知道怎么办。
一个悲观的事实是,新手会自然进入高级新手阶段,而高级新手却无法自然进入其后的其他等级阶段。实际上,在各个专业领域,超过半数的人终其一生都停留在高级新手阶段。也就是说:大多数人一生的工作就是机遇其专业领域的规则在进行重复性劳动。他们不了解这些规则背后的原理,也无法在面对新问题时,开创出新的方法和规则。那些简历上十多年如一日使用相同的技术方案、开发类似软件项目的资深工程师大部分都是高级新手。
导致一个人终身停留在高级新手阶段的原因有很多,其中一个重要的原因就是:高级新手不知道自己是高级新手。高级新手觉得自己在这个专业领域混得不错,做事熟练,经验丰富。
事实上,这种熟练只是对既有规则的熟练,如果岁月静好,一切都循规蹈矩,也没有什么问题。而一旦行业出现技术变革或者工作出现新情况,高级新手就会遇到巨大的工作困难。事实上,各行各业都存在大量的高级新手,只是软件开发领域的技术变革更加频繁,问题变化也更加快速,使得高级新手的问题更加突出。
少部分新手和高级新手会在工作中学习、领悟规则背后的原理,当需要解决的问题变化,或者行业出现技术革新时,能够尝试学习新技术、解决新问题,这样的人就进入胜任者阶段。胜任者工作的一个显著特点:做事具有主动性。他们在遇到新问题时,会积极寻求新的解决方案去解决问题,而不是像高级新手那样,要么束手无策,要么还是用老办法解决新问题,使问题更加恶化。
胜任者能解决新问题,但他们通常只会见招拆招,局限于解决问题本身,而缺乏反思精神和全局思维:为什么会出现这样的问题?如何避免类似问题再发生?这个问题在更宏大的背景下处于什么位置?还有哪些类似的问题?
而拥有反思精神和全局思维,即使没有新问题也能进行自我突破、寻求新的出路的人,就进入了精通者阶段。精通者需要通过主动学习进行提升,主动进行大量的阅读和培训而不是仅仅依靠工作中的经验和实践。他们在完成一个工作后会反思:哪些地方可以改进,下次怎么做会更好?
精通者拥有了自我改进的能力。
高级新手会把规则当做普适性的真理而使用,甚至引以为豪;而精通者则会明白所有的规则只会在特定的场景下才会有效,工作中最重要的不是规则,而是对场景的理解。
而最终,各行各业大约只有 1% 的人会进入专家阶段,专家把过往的经验都融会贯通,然后形成一种直觉,他们直觉地知道事情应该怎么做,然后用**最直接、最简单的方法把问题解决。**专家通常也是他所在领域的权威,精通者和胜任者会学习、研究专家是如何解决问题的,然后把这种解决方案形成套路,成为行业做事的规则。
如何在工作中成长
德雷福斯模型告诉我们,人的专业能力不会随着工作年限的增加而自然增长,多数人会终身停留在高级新手阶段。那么如何在工作中不断成长,提升自我,最终成为专家?有以下几个建议:
- 用于承担责任。如果只是遵循别人的指令,按照别人的规则做事,你用于不会指知道事物的真相是什么,只有对结果负责,压力之下,才会看透事物的本质,才会抓住核心和关键。
- 在实践中保持技能。通俗来说就是要摘那些跳起来才够得着的苹果,只要再进入一点点就能完成,通过这样持续的工作训练和挑战,在实践中持续获得进步,就可以不断从新手到专家这个方向前进。
有些成功是可遇不可求的,至少要做到团队影响力,努力做到公司影响着,且不仅仅要做到,还要做好。在技术之路上,绝大多数人都是分母,但是这不能是自己不努力的理由。也许我们多么努力都达不到别人的成功,但是不要放弃,你的努力会时刻影响着你。
做为软件工程师,如果只是听从别人的指令开发代码,却不了解这些代码究竟想要解决什么问题,很多时候你是在制造问题,而不是解决问题。加班加点辛苦工作只是在给公司制造麻烦。对于自己而言,日复一日重复执行解决方案,距离成为一个技术专家也越来越远。
如何有效沟通
在日常生活工作中,总要和很多人合作。有时候,我们需要依赖别人的工作结果,以作为我们工作的输入;有时候,我们的工作产出需要交付给别人,才能产生最终的价值。这这些合作过程中,可能会遇到各种问题。
如果某人能解决问题,而他自己却感受不到问题,那么就让他感受一下
在工作合作的过程中,有的时候,对于对方来说,明明是举手之劳的事情,但他偏偏在拖延,你去催促也没有什么效果。这时候,我们很容易将问题归结为对方的工作态度有问题,事实上,很多时候,其实是对方没有理解你的问题,他觉得你在没事找事,你才是工作态度有问题的人。
将问题归结为人的态度问题,大多数情况下,是无法解决问题的,况且,很多时候确实不是态度问题,而是不同的人做事能力、理解能力、立场和看待事物的角度不同。所以,如果只是立场和角度的问题,那么就可以将对方拉到同一立场来解决问题。如果对方没有感受到问题,那么想办法让对方感受一下问题。
通常来说,上司的能力要比你自己的能力强,调动的资源也比你多,有些事情对你而言可能非常困难,但是你的上司也许一句话就可以搞定,这个时候就可以考虑利用自己的上司去解决问题。如果他没有感受到问题,就想办法让他感受到问题。
有句话说:用人的最高境界是用上司。
有的时候,对于一件有风险的工作,如果你自己做决策,那么放事情不顺利的时候,你可能无法承担风险,那么就应该将上司拉进来。你可以直接问他:有这样的方案和计划,你觉得合适么?但是这种提问方式,可能会导致你的方案被上司否定,更好的提问方式是:这里有 A,B 两个方案,你觉得哪个方案更合适?从而将上司的回答引导到你期望的答案上去。而上司一旦回答了你的问题,就等于参与到你的工作中去了,当事情出现风险的时候,你再去找他寻求支持的时候,因为是他曾经做出的决策,那么他更容易跟你站在一起,帮你解决问题。这里需要注意的是,当你寻求上司支持的时候,不要问上司怎么办,不要给上司提开放式的问题。一则上司可能不理解你的问题上下文,无法给出合适建议,从而使上司和你都难堪。再则上司如果给出的方案你你难以执行的,你是在给自己挖坑。而封闭式的问题,只需要回答好或者不好都可以了 —— 例如选择 A 方案还是 B 方案。
相反,如果你给下属提问,就不要提封闭式的问题了,你问下属这个方案好不好可能会导致他质疑你的能力,同时也限制了他的能动性,使他无法思考和调查更多的解决方案。
直言有讳
在合作的过程中,合作的小伙伴可能犯一些错误,如果这个错误影响了你,你应该指出来,而不是为了和谐假装视而不见,任由事情向失败的方向滑落。但是,这里需要注意的是,指出错误是为了改正错误,达成目标,而不是为了责备、打压对方,也就是所谓的:要批评不要责难,要对事不对人。
如果针对人,那么对方就一定和你站在对立的一面,你们就是在进行人际斗争,而不是在解决问题。直言有讳就是说,指出负面情况的时候,要直接,不要兜圈子、说含糊话,否则语言就没有力量,无法解决问题。但是也不是想说什么就说什么,要有所避讳,主要就是不要把问题指向人。可以说这件事情这样做是不对的,但是不要说你这个人是有问题的。