古人云:“活到老,学到老。”互联网算是最辛苦的行业之一,“加班”对程序员来说已是“家常便饭”,同时互联网技术又日新月异,很多程序员都疲于应付,叫苦不堪。
以至于长期以来流传一个很广的误解:35岁是程序员工作的终点。
如何在繁忙的工作中做好技术积累,构建个人核心竞争力,相信是很多程序员都在思考的问题。
任何时候,遵循一些经过检验的原则,都是影响效率的重要因素,正确的方法是成功的秘诀。
提升工作和学习效率的另一个重要因素是释惑和良好心态。
工作中的困惑成为优秀的架构师是大部分初中级程序员的阶段性目标。
如何学习在繁忙的工作中,持之以恒、不断学习和进步是一件艰巨的任务,需要坚强的毅力和坚定的决心。如果方法不得当,更是事倍功半。所幸古人和现代哲人总结了很多优秀学习方法论,这里汇总了一些重要原则。遵循这些方法必会对大家的工作学习大有裨益。
有报道指出,过去几十年的知识量超过之前人类几千年的知识量总和。而计算机领域绝对是当代知识更新最快的领域之一,因此,程序员必须要接受这样一个现实,现在所掌握的深厚知识体系很快就会被淘汰。要想在计算机领域持续发展做到优秀架构师阶段,就必须不停的学习,掌握最新技术。总之,学不可以已。
所谓“冰冻三尺,非一日之寒,水滴石穿,非一日之功”,通往架构师的道路漫长而又艰巨,轻易放弃,则所有付出瞬间付之东流。要想成为优秀的架构师,贵在坚持!
虽然知识更新很快,但是基础理论的变化却非常缓慢。这就是“道”和“象”关系,纵是世间万象,道却万变不离其宗。对于那些非常基础的理论知识,我们需要经常复习,也就是“学而时习之”。
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:642 363 427,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
重视实践古人云:“纸上得来终觉浅,绝知此事要躬行。” 学习领域有所谓721模型:个人的成长70%来自于岗位实践,20%来自向他人学习,10%来自于培训。虽然这种理论存在争议,但对于程序员来说,按照实践、学习和培训的方式进行重要性排序,大致是不错的。所以重视实践,在实践中成长是最重要的学习原则。
人类的认知有两种:感性认知和理性认知。这两种认知互相不可替代性。实践很大程度来自于感性学习,看书更像是理性学习。以学开汽车做例子,很难想象什么人能够仅仅通过学习书本知识就会开汽车。
书本知识主要是传道——讲述抽象原型,而对其具体应用场景的讲述往往含糊其辞,对抽象原型之间的关系也是浅尝辄止。采用同样精确的语言去描述应用场景和关联关系将会失去重点,让人摸不着头脑。所以,仅仅通过看书来获得成长就如同纸上谈兵没有实践发挥经验归纳只会成就失败之作。
重视实践,充分运用感性认知潜能,在项目中磨炼自己,才是正确的学习之道。在实践中,在某些关键动作上刻意练习,也会取得事半功倍的效果。
重视交流牛顿说:“如果说我看得比别人远一些,那是因为我站在巨人的肩膀上。”我们需要从别人身上学习。从老师、领导、同事、下属甚至对手身上学习,是快速成长的重要手段。
向老师和领导学习已经是人们生活习惯的一部分了。但是从同事甚至对手那里学习也很重要,因为这些人和我们自身更相似。所以要多多观察,取其所长,弃其所短。对于团队的小兄弟和下属,也要“不耻下问”。
此外,在项目中积极参与具体方案讨论也非常重要。参与者先验感知了相关背景,并且讨论的观点和建议也是综合了发言者多种知识和技能。所以,讨论让参与者能够非常全面,立体地理解书本知识。同时,和高手讨论,他们的观点就会像修剪机剪树枝一样,快速的剪掉自己知识领域里面的疑惑点。
程序员在实践中会掌握大量细节,但是,即使掌握了所有细节,却没有深刻的总结和思考,也会陷入到“学而不思则罔”的境地。成长的“量变”来自于对细节的逐渐深入地把控,而真正的“质变”来自于对“道”的更深层次的理解。
将经验输出,接受别人的检验是高层次的总结。这种输出不仅帮助了别人,对自身更是大有裨益。总结的方式有很多,包括组织分享,撰写技术文章等等。当然“日三省吾身”也是不错的总结方式。总之,多多总结,多多分享,善莫大焉!
解答别人的问题也是个人成长的重要手段。有时候,某个问题自己本来不太懂,但是在给别人讲解的时候却豁然开朗。所以,“诲人不倦”利人惠己。
重视规划凡事预则立,不预则废。对于漫长的学习生涯而言,好的计划是成功的一半。
长期规划长期规划的实施需要毅力和决心,但是做正确的长期规划还需要高瞻远瞩的眼界、超级敏感的神经和中大奖的运气。对于大部分人来说,长期规划定主要是“定方向”。
遵循如下原则能够减少反方向性错误的概率
远离日暮西山的行业。 做自己感兴趣的事情。 做有积累的事情。 一边走一边看,切勿一条道走到黑。
良好的短期规划应该在生活、成长、绩效和晋升之间取得平衡。大部分公司都会制定一个考核周期——少则一个月,多则一年。所以不妨以考核周期作为短期学习规划周期。
主要目标规划必须具备一定的挑战性,需要规划出不可能完成的目标。过度规划本质上是一种贪婪算法,目的是目标价值最大化。因为一切皆有变数,如果其他目标能够提前完成,就不妨利用这些时间去完成更多的学习目标。总之,前途必须光明,道路必须坎坷。
各目标之间不一定共享资源,规划不一定互有冲突。
令人纠结的困惑人生是一场马拉松,在漫长的征途中,难免有很多困惑。困惑就像枷锁,使我们步履蹒跚,困惑就像死锁,让我们停滞不前。接下来我将总结自己在工作中碰到和看到的一些典型困惑。这些困惑或者长期困扰作者本人,或者困扰我身边的同事和朋友。当这些困惑被释然之后,大家都感觉如重获释,为下一阶段的征程提供满满的正能量。人生就像一场旅途,不必在乎目的地,在乎的,应该是沿途的风景,以及看风景的心情。良好的心态是技术之旅最好的伴侣。期望通过这个解惑之旅,让大家拥有一个愉快的心情去感受漫长的学习旅途。
必须要承认一个残酷的现实:人的生命是有限的,知识却是无限的。用有限的生命去学习无限的知识是不可能完成的任务。一想到此,有些程序员不免产生一些悲观情绪。如果方法得当并且足够勤奋,悲伤大可不必。
虽然,人类的整体知识体系一直在扩张。但是就很多重要的工程细分领域,基础理论并不高深。计算机的很多重要领域,程序员有能力在有限时间内抓住核心要害。
另外,技术学习是一场对抗赛,虽然学无止境,超越大部分对手就是一种胜利。所以,以正确的学习方式,长时间投入就会形成核心竞争力。
全新iOS进阶知识体系图
全新iOS进阶知识体系图
没有绝对高明的技术,只有真正的高手致力于在技术上有所成就的程序员,都梦想有朝一日成为技术高手。但技术高手的标准却存在很大的争议。这是一个有着悠久历史的误解:以某种技术的掌握作为技术高手的评判标准。
这种误解的产生有几个原因:首先,技多不压身,技术自然是掌握的越多越好,掌握很多技术的人自然不是菜鸟。其次,在互联网时代来临之前,信息获取是非常昂贵的事情。这就导致一项技能的掌握可以给个人甚至整个公司带来优势地位。互联网时代,各种框架的出现以及开源的普及快速淘汰或者降低了很多技能的价值,同时降低了很多技术的学习门槛。所以,在当前,掌握某项技能知识只能是一个短期目标。怀揣某些技能就沾沾自喜的人需要记住:骄傲使人退步。
所谓麻雀虽小,五脏俱全。如果让你来做造物主,设计麻雀和设计大象的复杂度并没有明显区别。一个看起来很小的业务需求,为了达到极致,所需要的技术和能力是非常高深的。完成客户的需求是一场擂台赛,真正的高手,是会见招拆招的。
在项目中学习是最快的成长方式之一,很多程序员非常享受这个过程。但是一年到头都做项目,你可能是在一家外包公司。对于一个做产品的公司,如果年头到年尾都在做项目,要不然就是在初步创业阶段,要不然就是做了大量失败的项目,总之不算是特别理想的状态。正常情况,在项目之间都会有一些非项目时间。在这段时间,有些同学会产生迷茫,成长很慢。
项目越多越好?答案显然是否定的。重复的项目不会给程序员们带来新的成长。不停的做项目,从而缺乏学习新知识的时间,会导致“做而不学则殆”。真正让程序员出类拔萃的是项目的深度,而不是不停地做项目。所以,在项目之间的空档期,程序员应该珍惜难得的喘息之机,深入思考,把项目做深,做精。
如何提高项目深度?一般而言,任何项目都有一个目标,当项目完成后,目标就算基本达成了。但是,客户真的满意了吗?系统的可用性、可靠性、可扩展性、可维护性已经做到极致了吗?这几个问题的答案永远是否定的。所以,任何一个有价值的项目,都可以一直深挖。深挖项目,深度思考还可以锻炼程序员的创造力。期望不停地做项目的人,就像一个致力于训练更多千里马的人是发明不出汽车的。锻炼创造力也不是一蹴而就的事情,需要长时间地思考。总之,程序员们应该总是觉得时间不够用,毕竟时间是最宝贵的资源。
很多时候,一个程序员所负责系统的数量和团队规模与其“江湖地位”正相关。但是,江湖地位与技术成长没有必然关联。提升技术能力的关键是项目深度以及客户的挑剔程度。项目越多,在单个项目中投入的时间就越少,容易陷入肤浅。特别需要避免的是“ 在其位不谋其政”的情况。团队越大,在管理方面需要投入的精力就越多。在管理技巧不成熟,技术眼界不够高的前提强行负责大团队,可能会导致个人疲于应付,团队毫无建树。最终“ 一将无能,累死三军”,效果可能适得其反。
从技术发展的角度来说,技术管理者应该关注自己所能把控的活跃项目的数量,并致力于提高活跃项目的影响力和技术深度。团队人数要与个人管理能力、规划能力和需求把控能力相适应。一份工作让多个人来干,每个人的成长都受限。每个人都做简单重复的工作,对技术成长没有任何好处。团队管理和项目管理需要循序渐进,忌“拔苗助长”。
一定要当老大?有一些程序员的人生理想是做团队里的技术老大,这当然是一个值得称赞的理想。可是,如果整个团队技术能力一般,发展潜力一般,而你是技术最强者,这与其说是幸运,不如说是悲哀。
团队里的技术顶尖高手需要满足如下几个条件
首先你得是行业里面的顶尖专家了——实在很难找到比你更强的人了!
其次,你经常需要承担对你自己的能力有挑战的任务,但同时你拥有一批聪明能干的队友。虽然你的技术能力最高,但是在你不熟悉的领域,你的队友能够进行探索并扩展整个团队的知识。
最后,你必须要敏而好学,不耻下问。
否则,加入更强的技术团队或许是更好的选择,最少不是什么值得骄傲的事情。
搞基础技术就一定很牛?基础技术和业务应用技术必然会有不同的关注点,没有高低之分。
产生误解的两个原因
基础技术相对成熟,有比较完整的体系,这给人一个高大上的感觉。业务应用技术相对来说,由于每个团队使用的不一样,所以成熟度参差不齐,影响力没有那么大。
基础技术的门槛相对来说高一点,考虑到影响面,对可靠性、可用性等有比较高的最低要求。但是门槛高不代表技术含量高,另外成熟技术相对来说在创新方面会受到很大的约束。但是最先进的技术都来自活跃的创新。
对比下来,业务技术和基础技术各有千秋。但真正的高手关注的是解决问题,所有的技术都是技能而已。
带人之道有些初为导师的程序员由于担心毕业生的能力太弱,安排任务时候谆谆教诲,最后感觉还是有所顾虑,干脆自己写代码。同样的事情发生在很多刚刚管理小团队的程序员身上。最终的结果他们:写完所有的代码,让下属无代码可写。“ 事必躬亲”当然非常糟糕,最终的往往是团队的整体绩效不高,团队成员的成长很慢,而自己却很累。
古人说:“用人不疑,疑人不用。”这句话并非“放之四海而皆准”。
在古代,受限于通信技术,反馈延迟显著,而且信息在传递过程中有大量噪音,变形严重。
在这种情况下,如果根据短期内收集的少量变形的信息做快速决断,容易陷于草率。在公司里,这句话用于选人环节更为恰当,应该改为:录用不疑,疑人不录。
效率、效率、效率经常看到有些同学给自己的绩效评分是100分——满分,原因是在过去一段时间太辛苦了,但最终的绩效却一般般。天道酬勤不错,但是天道更酬巧。程序员都学过数据结构,不同算法的时间复杂度的差距,仅仅通过更长的工作时间是难以弥补的。
提升工作学习效率,需要注意以下几点
主要关注效率提升。很多时候,与效率提升所带来的收益相比,延长时间所带来的成果往往不值得一提。
要有清晰的结果导向思维。功劳和苦劳不是一回事。
做正确的事情,而不仅仅正确地做事情。这是一个被不断提起的话题,但是错误每天都上演。为了在规定的时间内完成一个大项目,总是要有所取舍。如果没有重点,均匀发力,容易事倍功半。如果“南辕北辙”,更是可悲可叹。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。