精华内容
下载资源
问答
  • 工程师如何在工作中提升自己?

    万次阅读 多人点赞 2018-04-13 00:13:28
    引言 ...如何在繁忙的工作中做好技术积累,构建个人核心竞争力,相信是很多工程师同行都在思考的问题。本文是我自己的一些总结,试图三个方面来解答: 第一部分阐述了一些学习的原则。任何时...

    引言

    古人云:“活到老,学到老。”互联网算是最辛苦的行业之一,“加班”对工程师来说已是“家常便饭”,同时互联网技术又日新月异,很多工程师都疲于应付,叫苦不堪。以至于长期以来流传一个很广的误解:35岁是程序员工作的终点。

    如何在繁忙的工作中做好技术积累,构建个人核心竞争力,相信是很多工程师同行都在思考的问题。本文是我自己的一些总结,试图从三个方面来解答:

    • 第一部分阐述了一些学习的原则。任何时候,遵循一些经过检验的原则,都是影响效率的重要因素,正确的方法是成功的秘诀。

    • 提升工作和学习效率的另一个重要因素是释惑和良好心态。第二部分分析了我在工作中碰到和看到的一些典型困惑。

    • 成为优秀的架构师是大部分初中级工程师的阶段性目标。第三部分剖析架构师的能力模型,让大家对目标所需能力有一个比较清晰的认知。

    如何学习

    在繁忙的工作中,持之以恒、不断学习和进步是一件艰巨的任务,需要坚强的毅力和坚定的决心。如果方法不得当,更是事倍功半。幸好我们的古人和现在哲人已经总结了很多优秀的学习方法论,这里汇总了一些重要原则。遵循这些方法必会对大家的工作学习大有裨益。

    贵在坚持

    有报道指出,过去几十年的知识量超过之前人类几千年的知识量总和。而计算机领域绝对是当代知识更新最快的领域之一,因此,工程师必须要接受这样一个现实,现在所掌握的深厚知识体系很快就会被淘汰。要想在计算机领域持续做优秀架构师,就必须不停的学习,掌握最新技术。总之,学不可以已。

    所谓“冰冻三尺,非一日之寒,水滴石穿,非一日之功”,通往架构师的道路漫长而又艰巨,轻易放弃,则所有付出瞬间付之东流。要想成为优秀的架构师,贵在坚持!

    虽然知识更新很快,但是基础理论的变化却非常缓慢。这就是“道”和“象”关系,纵是世间万象,道却万变不离其宗。对于那些非常基础的理论知识,我们需要经常复习,也就是“学而时习之”。

    重视实践

    古人云:“纸上得来终觉浅,绝知此事要躬行。” 学习领域有所谓721模型:个人的成长70%来自于岗位实践,20%来自向他人学习,10%来自于培训。虽然这种理论存在争议,但对于工程师们来说,按照实践、学习和培训的方式进行重要性排序,大致是不错的。所以重视实践,在实践中成长是最重要的学习原则。

    人类的认知有两种:感性认知和理性认知。这两种认知互相不可替代性。实践很大程度来自于感性学习,看书更像是理性学习。以学开汽车做例子,很难想象什么人能够仅仅通过学习书本知识就会开汽车。

    书本知识主要是传道——讲述抽象原型,而对其具体应用场景的讲述往往含糊其辞,对抽象原型之间的关系也是浅尝辄止。采用同样精确的语言去描述应用场景和关联关系将会失去重点,让人摸不着头脑。所以,仅仅通过看书来获得成长就像是用一条腿走路。

    重视实践,充分运用感性认知潜能,在项目中磨炼自己,才是正确的学习之道。在实践中,在某些关键动作上刻意练习,也会取得事半功倍的效果。

    重视交流

    牛顿说:“如果说我看得比别人远一些,那是因为我站在巨人的肩膀上。”我们需要从别人身上学习。从老师、领导、同事、下属甚至对手身上学习,是快速成长的重要手段。

    向老师和领导学习已经是人们生活习惯的一部分了。但是从同事甚至对手那里学习也很重要,因为这些人和我们自身更相似。所以要多多观察,取其所长,弃其所短。对于团队的小兄弟和下属,也要“不耻下问”。

    此外,在项目中积极参与具体方案讨论也非常重要。参与者先验感知了相关背景,并且讨论的观点和建议也是综合了发言者多种知识和技能。所以,讨论让参与者能够非常全面,立体地理解书本知识。同时,和高手讨论,他们的观点就会像修剪机剪树枝一样,快速的剪掉自己知识领域里面的疑惑点。

    重视总结和输出

    工程师在实践中会掌握大量细节,但是,即使掌握了所有细节,却没有深刻的总结和思考,也会陷入到“学而不思则罔”的境地。成长的“量变”来自于对细节的逐渐深入地把控,而真正的“质变”来自于对“道”的更深层次的理解。

    将经验输出,接受别人的检验是高层次的总结。这种输出不仅帮助了别人,对自身更是大有裨益。总结的方式有很多,包括组织分享,撰写技术文章等等。当然“日三省吾身”也是不错的总结方式。总之,多多总结,多多分享,善莫大焉!

    解答别人的问题也是个人成长的重要手段。有时候,某个问题自己本来不太懂,但是在给别人讲解的时候却豁然开朗。所以,“诲人不倦”利人惠己。

    重视规划

    凡事预则立,不预则废。对于漫长的学习生涯而言,好的计划是成功的一半。

    长期规划

    长期规划的实施需要毅力和决心,但是做正确的长期规划还需要高瞻远瞩的眼界、超级敏感的神经和中大奖的运气。对于大部分人来说,长期规划定主要是“定方向”。但遵循如下原则能够减少犯方向性错误的概率:

    • 远离日暮西山的行业。

    • 做自己感兴趣的事情。

    • 做有积累的事情。

    • 一边走一边看,切勿一条道走到黑。

    短期规划

    良好的短期规划应该在生活、成长、绩效和晋升之间取得平衡。大部分公司都会制定一个考核周期——少则一个月,多则一年。所以不妨以考核周期作为短期学习规划周期。本质上,规划是一个多目标优化问题,它有一系列的理论方案,这里不一一细说。基于相关理论,我给出一个简单易行的方案:

    • 确定目标优先级。比如:成长、生活、绩效。

    • 确定每个目标的下限。从优化理论的角度来看,这被称为约束。比如绩效必须在一般以上,之前已经规划好的旅行不能更改,必须读完《Effective Java》等等。

    • 优先为下限目标分配足够的资源。比如,事先规划好的旅行需要10天,这10天就必须预算出去。

    • 按照各主目标的顺序依次分配资源。比如,最终分配给学习的时间是10天。

    • 在给定的学习预算下,制定学习目标,要激进。然后给出执行方案。比如,学习目标是掌握基本的统计学知识,并成为Java专家。具体方案为:完成《Effective Java》、《Java Performance》、《Design Pattern》、《Head First Statistics》四本书的阅读。

    • 对规划中的各学习任务按目标优先级进行排序,并最先启动优先级最高的任务。比如,最高优先级是掌握统计理论,那么就要先看《Head First Statistics》。

    对于该方案,要注意以下几点:

    • 最低目标必须能够轻松达成的目标,否则,从优化理论的角度来讲,该命题无解。比如,类似“半年内完成晋级两次、绩效全部S、从菜鸟成为Java专家”就不太合适作为最低目标。总之,要区分理想和梦想。
    • 主要目标规划必须具备一定的挑战性,需要规划出不可能完成的目标。过度规划本质上是一种贪婪算法,目的是目标价值最大化。因为一切皆有变数,如果其他目标能够提前完成,就不妨利用这些时间去完成更多的学习目标。总之,前途必须光明,道路必须坎坷。

    • 各目标之间不一定共享资源,规划不一定互有冲突。

    此外,短期规划还可以从如下几个方面进行优化:

    • 学习计划最好能结合工作计划,理论联系实际结合,快速学以致用。比如,本季度规划去做一些数据分析工作,那么不妨把学习目标设置为学习统计知识。

    • 要灵活对待规划的目标和具体执行步骤,需要避免“郑人买履”式的笑话。面临新的挑战和变化,规划需要不断地调整。

    那些令人纠结的困惑

    人生是一场马拉松,在漫长的征途中,难免有很多困惑。困惑就像枷锁,使我们步履蹒跚,困惑就像死锁,让我们停滞不前。

    接下来我将总结自己在工作中碰到和看到的一些典型困惑。这些困惑或者长期困扰作者本人,或者困扰我身边的同事和朋友。当这些困惑被释然之后,大家都感觉如重获释,为下一阶段的征程提供满满的正能量。人生就像一场旅途,不必在乎目的地,在乎的,应该是沿途的风景,以及看风景的心情。良好的心态是技术之旅最好的伴侣。期望通过这个解惑之旅,让大家拥有一个愉快的心情去感受漫长的学习旅途。

    学无止境吗

    必须要承认一个残酷的现实:人的生命是有限的,知识却是无限的。用有限的生命去学习无限的知识是不可能完成的任务。一想到此,有些工程师不免产生一些悲观情绪。如果方法得当并且足够勤奋,悲伤大可不必。

    虽然,人类的整体知识体系一直在扩张。但是就很多重要的工程细分领域,基础理论并不高深。计算机的很多重要领域,工程师有能力在有限时间内抓住核心要害。

    比如,密码学被认为是门非常高深的学科,但是一大类密码技术的基础是数论中一个非常简单的理论——素因数分解:给出两个素数,很容易算出它们的积,然而反过来给定两个素数的积,分解的计算量却非常惊人。

    “一致性”算得上是计算机领域里面最经典的难题,它是所有分布式系统的基础,从多核多CPU到多线程,从跨机器到跨机房,无所不在,几乎所有的计算机从业人员都在解决这个问题,但是Paxos给出了一个很优雅的解决方案。

    权限管理是很多工程师的噩梦,但如果你能搞定“Attribute Based Access Control(ABAC)”和“Role-Based Access Control(RBAC)”,也能达到相当高度。

    另外,技术学习是一场对抗赛,虽然学无止境,超越大部分对手就是一种胜利。所以,以正确的学习方式,长时间投入就会形成核心竞争力。

    没有绝对高明的技术,只有真正的高手

    致力于在技术上有所成就的工程师,都梦想有朝一日成为技术高手。但技术高手的标准却存在很大的争议。这是一个有着悠久历史的误解:以某种技术的掌握作为技术高手的评判标准。我经常碰到这样一些情景:因为掌握了某些技术,比如Spring、Kafka、Elasticsearch等,一些工程师就自封为高手。有些工程师非常仰慕别的团队,原因竟是那个团队使用了某种技术。

    这种误解的产生有几个原因:首先,技多不压身,技术自然是掌握的越多越好,掌握很多技术的人自然不是菜鸟。其次,在互联网时代来临之前,信息获取是非常昂贵的事情。这就导致一项技能的掌握可以给个人甚至整个公司带来优势地位。互联网时代,各种框架的出现以及开源的普及快速淘汰或者降低了很多技能的价值,同时降低了很多技术的学习门槛。所以,在当前,掌握某项技能知识只能是一个短期目标。怀揣某些技能就沾沾自喜的人需要记住:骄傲使人退步。

    所谓麻雀虽小,五脏俱全。如果让你来做造物主,设计麻雀和设计大象的复杂度并没有明显区别。一个看起来很小的业务需求,为了达到极致,所需要的技术和能力是非常综合和高深的。真正的高手不是拿着所掌握的技术去卡客户需求,而是倾听客户的需求,给出精益求精的方案。完成客户的需求是一场擂台赛,真正的高手,是会见招拆招的。

    不做项目就无法成长吗

    在项目中学习是最快的成长方式之一,很多工程师非常享受这个过程。但是一年到头都做项目,你可能是在一家外包公司。对于一个做产品的公司,如果年头到年尾都在做项目,要不然就是在初步创业阶段,要不然就是做了大量失败的项目,总之不算是特别理想的状态。正常情况,在项目之间都会有一些非项目时间。在这段时间,有些同学会产生迷茫,成长很慢。

    项目真的是越多越好吗?答案显然是否定的。重复的项目不会给工程师们带来新的成长。不停的做项目,从而缺乏学习新知识的时间,会导致“做而不学则殆”。真正让工程师出类拔萃的是项目的深度,而不是不停地做项目。所以,在项目之间的空档期,工程师们应该珍惜难得的喘息之机,深入思考,把项目做深,做精。

    如何提高项目的深度呢?一般而言,任何项目都有一个目标,当项目完成后,目标就算基本达成了。但是,客户真的满意了吗?系统的可用性、可靠性、可扩展性、可维护性已经做到极致了吗?这几个问题的答案永远是否定的。所以,任何一个有价值的项目,都可以一直深挖。深挖项目,深度思考还可以锻炼工程师的创造力。期望不停地做项目的人,就像一个致力于训练更多千里马的人是发明不出汽车的。锻炼创造力也不是一蹴而就的事情,需要长时间地思考。总之,工程师们应该总是觉得时间不够用,毕竟时间是最宝贵的资源。

    职责真的很小吗

    很多时候,一个工程师所负责系统的数量和团队规模与其“江湖地位”正相关。但是,江湖地位与技术成长没有必然关联。提升技术能力的关键是项目深度以及客户的挑剔程度。项目越多,在单个项目中投入的时间就越少,容易陷入肤浅。特别需要避免的是“ 在其位不谋其政”的情况。团队越大,在管理方面需要投入的精力就越多。在管理技巧不成熟,技术眼界不够高的前提强行负责大团队,可能会导致个人疲于应付,团队毫无建树。最终“ 一将无能,累死三军”,效果可能适得其反。

    从技术发展的角度来说,技术管理者应该关注自己所能把控的活跃项目的数量,并致力于提高活跃项目的影响力和技术深度。团队人数要与个人管理能力、规划能力和需求把控能力相适应。一份工作让多个人来干,每个人的成长都受限。每个人都做简单重复的工作,对技术成长没有任何好处。团队管理和项目管理需要循序渐进,忌“拔苗助长”。

    一定要当老大吗

    有一些工程师的人生理想是做团队里的技术老大,这当然是一个值得称赞的理想。可是,如果整个团队技术能力一般,发展潜力一般,而你是技术最强者,这与其说是幸运,不如说是悲哀。这种场景被称之为“武大郎开店”。 团队里的技术顶尖高手不是不能做,但为了能够持续成长,需要满足如下几个条件:

    • 首先你得是行业里面的顶尖专家了——实在很难找到比你更强的人了!

    • 其次,你经常需要承担对你自己的能力有挑战的任务,但同时你拥有一批聪明能干的队友。虽然你的技术能力最高,但是在你不熟悉的领域,你的队友能够进行探索并扩展整个团队的知识。

    • 最后,你必须要敏而好学,不耻下问。

    否则,加入更强的技术团队或许是更好的选择,最少不是什么值得骄傲的事情。

    平台化的传说

    平台化算得上是“高大上”的代名词了,很多工程师挤破头就为了和“平台化”沾点边。然而和其他业务需求相比,平台化需求并没有本质上的区别。无论是平台化需求还是普通业务需求,它的价值都来自于客户价值。不同点如下:

    • 很多平台化需求的客户来自于技术团队,普通需求的客户来自于业务方。

    • 产品经理不同。普通业务需求来自于产品经理,平台化需求的产品经理可能就是工程师自己。长期被产品经理“压迫”的工程师们,在平台化上终于找到“翻身农奴把歌唱”的感觉。

    • 很多平台化的关注点是接入能力和可扩展性,而普通业务的关注点更多。

    归根结底,平台化就是一种普通需求。在实施平台化之前,一定要避免下面两个误区:

    • 平台化绝对不是诸如“统一”、“全面”之类形容词的堆砌。是否需要平台化,应该综合考虑:客户数量,为客户解决的问题,以及客户价值是否值得平台化的投入。

    • 平台化不是你做平台,让客户来服务你。一些平台化设计者的规划设计里面,把大量的平台接入工作、脏活累活交给了客户,然后自己专注于所谓“最高大上”的功能。恰恰相反,平台化应该是客户什么都不做,所有的脏活累活都由平台方来做。本质上讲,平台化的价值来自于技术深度。真正体现技术深度的恰恰是设计者能够很轻松的把所有的脏活累活搞定。

    所以平台化的最佳实践是:投入最少的资源,解决最多的问题。平台解决一切,客户坐享其成。

    搞基础技术就一定很牛吗

    经常听到同学们表达对基础技术部同学的敬仰之情,而对搞业务技术的同学表现出很轻视,认为存储、消息队列、服务治理框架(比如美团点评内部使用的OCTO)、Hadoop等才能被称为真正的技术。事实并非如此,更基础的并不一定更高深。

    比如下面这个流传很久的段子:越高级的语言就越没有技术含量。但真是这样吗,就拿Java和C来说,这是完全不同的两种语言,所需要的技能完全不同。C或许跟操作系统更加接近一点,和CPU、内存打交道的机会更多一点。但是为了用好Java,程序员在面向对象、设计模式、框架技术方面必须要非常精通。Java工程师转到C方向确实不容易,但作者也见过很多转到Java语言的C工程师水土不服。

    基础技术和业务应用技术必然会有不同的关注点,没有高低之分。之所以产生这种误解,有两个原因:

    • 基础技术相对成熟,有比较完整的体系,这给人一个高大上的感觉。业务应用技术相对来说,由于每个团队使用的不一样,所以成熟度参差不齐,影响力没有那么大。

    • 基础技术的门槛相对来说高一点,考虑到影响面,对可靠性、可用性等有比较高的最低要求。但是门槛高不代表技术含量高,另外成熟技术相对来说在创新方面会受到很大的约束。但是最先进的技术都来自活跃的创新。

    对比下来,业务技术和基础技术各有千秋。但真正的高手关注的是解决问题,所有的技术都是技能而已。

    可行性调研的那些坑

    工作中开展可行性调研时有发生。做可行性调研要避免如下情况:

    • 把可行性调研做成不可行性调研。这真的非常糟糕。不可行性的结论往往是:因为这样或者那样的原因,所以不可行。

    • 避免“老鼠给猫挂铃铛”式的高风险可行性方案。“天下大事必作于细”,可行性调研一定要细致入微,避免粗枝大叶。

    • 避免调研时间过长。如果发现调研进展进入到指数级复杂度,也就是每前进一步需要之前两倍的时间投入,就应该果断的停止调研。

    可行性调研的结论应该是收益与成本的折衷,格式一般如下:

    • 首先明确预期的结果,并按照高中低收益进行分级。

    • 阐述达成每种预期结果需要采取的措施和方案。

    • 给出实施各方案需要付出的成本。

    工程师天生不善沟通吗

    实际工作中,沟通所导致的问题层出不穷。工程师有不少是比较内向的,总是被贴上“不善沟通”的标签。实际上,沟通能力是工程师最重要的能力之一,良好的沟通是高效工作学习的基础,也是通过学习可以掌握的。下面我按工程师的语言说说沟通方面的经验。

    第一类常见的问题是沟通的可靠性。从可靠性的角度来讲,沟通分为TCP模式和UDP模式。TCP模式的形象表述是:我知道你知道。UDP模式的形象表述是:希望你知道。TCP模式当然比较可靠,不过成本比较高,UDP模式成本低,但是不可靠。在沟通可靠性方面,常见错误有如下两种:

    • 经常听到的这样的争论。一方说:“我已经告诉他了”,另一方说:“我不知道这个事情呀”。把UDP模式被当作TCP模式来使用容易产生扯皮。

    • 过度沟通。有些同学对沟通的可靠性产生了过度焦虑,不断的重复讨论已有结论问题。把TCP模式当成UDP来使用,效率会比较低。

    第二类沟通问题是时效性问题。从时效性讲,沟通分为:同步模式和异步模式。同步沟通形象地说就是:你现在给我听好了。异步沟通的形象表述是:记得给我做好了。在沟通时效性方面,有如下两种常见错误:

    • 已经出现线上事故,紧急万分。大家你一言,我一语,感觉事故可能和某几个人有关,但是也不能完全确定,所以没有通知相关人员。最终,一个普通的事故变成了严重事故。对于紧急的事情,必须要同步沟通。

    • 半夜三点你正在熟睡,或者周末正在逛街,接到一个电话:“现在有个需求,能否立刻帮忙做完。”这会非常令人郁闷,因为那并不是紧急的事情。不是所有的需求都需要立刻解决。

    有效沟通的一个重要原则是提前沟通。沟通本质是信息交流和处理,可以把被沟通对象形象地比喻成串行信息处理的CPU。提前沟通,意味着将处理请求尽早放入处理队列里面。下面的例子让很多工程师深恶痛绝:一个需求策划了1个月,产品设计了2周。当开发工程是第一次听说该需求的时候,发现开发的时间是2天。工程师据理力争,加班加点1周搞定。最后的结论是工程师非常不给力,不配合。就像工程师讨厌类似需求一样。要协调一个大项目,希望获得别人的配合,也需要尽早沟通。

    有效沟通的另外一个重点是“不要跑题”。很多看起来很接近的问题,本质上是完全不同的问题。比如:一个会议的主题是“如何实施一个方案”,有人却可能提出“是否应该实施该方案”。 “如何实施”和“是否应该实施”是完全不同的两个问题,很多看起来相关的问题实际上跑题很远。“跑题”是导致无效沟通的重要原因。

    良好沟通的奥秘在于能掌握TCP模式和UDP模式精髓,正确判断问题的紧急性,尽量提前沟通,避免跑题。

    带人之道

    有些初为导师的工程师由于担心毕业生的能力太弱,安排任务时候谆谆教诲,最后感觉还是有所顾虑,干脆自己写代码。同样的事情发生在很多刚刚管理小团队的工程师身上。最终的结果他们:写完所有的代码,让下属无代码可写。“ 事必躬亲”当然非常糟糕,最终的往往是团队的整体绩效不高,团队成员的成长很慢,而自己却很累。

    古人说:“用人不疑,疑人不用。”这句话并非“放之四海而皆准”。在古代,受限于通信技术,反馈延迟显著,而且信息在传递过程中有大量噪音,变形严重。在这种情况下,如果根据短期内收集的少量变形的信息做快速决断,容易陷于草率。在公司里,这句话用于选人环节更为恰当,应该改为:录用不疑,疑人不录。

    考虑到招聘成本,就算是在录用层面,有时候也无法做到。作为一个小团队的管理者,能够快速准确的获取团队成员的各种反馈信息,完全不需要“用人不疑,疑人不用”。用人的真正理论基础来自于“探索和利用”(Exploration and Exploitation )。不能因为下属能做什么就只让他做什么,更不能因为下属一次失败就不给机会。

    根据经典的“探索和利用”(Exploration and Exploitation )理论,良好的用人方式应该如下:

    • 首选选择相信,在面临失败后,收缩信任度。

    • 查找失败的原因,提供改进意见,提升下属的能力。

    • 总是给下属机会,在恰当地时机给下属更高的挑战。 总之,苍天大树来自一颗小种子,要相信成长的力量。

    效率、效率、效率

    经常看到有些同学给自己的绩效评分是100分——满分,原因是在过去一段时间太辛苦了,但最终的绩效却一般般。天道酬勤不错,但是天道更酬巧。工程师们都学过数据结构,不同算法的时间复杂度的差距,仅仅通过更长的工作时间是难以弥补的。为了提升工作学习效率,我们需要注意以下几点:

    • 主要关注效率提升。很多时候,与效率提升所带来的收益相比,延长时间所带来的成果往往不值得一提。

    • 要有清晰的结果导向思维。功劳和苦劳不是一回事。

    • 做正确的事情,而不仅仅正确地做事情。这是一个被不断提起的话题,但是错误每天都上演。为了在规定的时间内完成一个大项目,总是要有所取舍。如果没有重点,均匀发力,容易事倍功半。如果“南辕北辙”,更是可悲可叹。

    架构师能力模型

    前面我们已经讲完了原则和一些困惑,那么工程师到底应该怎么提升自己呢?

    成为优秀的架构师是大部分初中级工程师的阶段性目标。优秀的架构师往往具备七种核心能力:编程能力、调试能力、编译部署能力、性能优化能力、业务架构能力、在线运维能力、项目管理能力和规划能力。

    这几种能力之间的关系大概如下图。编程能力、调试能力和编译部署能力属于最基础的能力。不能精通掌握这三种能力,很难在性能优化能力和业务架构能力方面有所成就。具备了一定的性能优化能力和业务架构能力之后,才能在线运维能力和项目管理能力方面表现优越。团队管理能力是最高能力,它对项目管理能力的依赖度更大。

    架构师能力模型

    编程能力

    对工程师而言,编程是最基础的能力,必备技能。其本质是一个翻译能力,将业务需求翻译成机器能懂的语言。

    提升编程能力的书籍有很多。精通面向对象和设计模式是高效编程的基础。初级工程师应该多写代码、多看代码。找高手做Code Review,也是提升编程水平的捷径。

    调试能力

    程序代码是系统的静态形式,调试的目的是通过查看程序的运行时状态来验证和优化系统。本质上讲,工程师们通过不断调试可以持续强化其通过静态代码去预测运行状态的能力。所以调试能力也是工程师编程能力提升的关键手段。很早之前有个传说:“调试能力有多强,编程能力就有多强。”不过现在很多编辑器的功能很强大,调试能力的门槛已经大大降低。

    调试能力是项目能否按时、高质量提交的关键。即使一个稍具复杂度的项目,大部分工程师也无法一次性准确无误的完成。大项目都是通过不断地调试进行优化和纠错的。所以调试能力是不可或缺的能力。

    多写程序,解决Bug,多请教高手是提升调试能力的重要手段。

    编译部署能力

    编译并在线上部署运行程序是系统上线的最后一个环节。随着SOA架构的普及以及业务复杂度的增加,大部分系统只是一个完整业务的一个环节,因此,本地编译和运行并不能完全模拟系统在线运行。为了快速验证所编写程序的正确性,编译并在线上部署就成了必要环节。所以编译部署能力是一个必备技能。

    让盘根错节的众多子系统运行起来是个不小的挑战。得益于SOA架构的普及以及大量编译、部署工具的发展,编译部署的门槛已经大大降低。基于应用层进行开发的公司,已经很少有“编译工程师”的角色了。但是对于初级工程师而言,编译部署仍然不是一个轻松的事情。

    性能优化能力

    衡量一个系统成功的一个重要指标是使用量。随着使用量的增加和业务复杂度的增加,大部分系统最终都会碰到性能问题。 性能优化能力是一个综合能力。因为:

    • 影响系统性能的因素众多,包括:数据结构、操作系统、虚拟机、CPU、存储、网络等。为了对系统性能进行调优,架构师需要掌握所有相关的技术。

    • 精通性能优化意味着深刻理解可用性、可靠性、一致性、可维护性、可扩展性等的本质。

    • 性能优化与业务强耦合,最终所采取的手段是往往折衷的结果。所以,性能优化要深谙妥协的艺术。

    可以说,性能优化能力是工程师们成长过程中各种技能开始融会贯通的一个标志。这方面可以参考之前的博客文章“常见性能优化策略的总结”。市场上还有很多与性能优化相关的书籍,大家可以参考。多多阅读开源框架中关于性能优化方面的文档和代码也不失为好的提升手段。动手解决线上性能问题也是提升性能优化能力的关键。如果有机会,跟着高手学习,分析性能优化解决方案案例(我们技术博客之前也发表了很多这方面的文章),也是快速提升性能优化能力的手段。

    在线运维能力

    如果说性能优化能力体现的是架构师的静态思考能力,在线运维能力考验的就是动态反应能力。残酷的现实是,无论程序多么完美,Bug永远存在。与此同时,职位越高、责任越大,很多架构师需要负责非常重要的在线系统。对于线上故障,如果不能提前预防以及快速解决,损失可能不堪设想,所以在线运维能力是优秀架构师的必备技能。

    为了对线上故障进行快速处理,标准化的监控、上报、升级,以及基本应对机制当然很重要。通过所观察到的现象,快速定位、缓解以及解决相关症状也相当关键。这要求架构师对故障系统的业务、技术具备通盘解读能力。解决线上故障的架构师就好比一个在参加比赛F1的车手。赛车手必须要了解自身、赛车、对手、同伴、天气、场地等所有因素,快速决策,不断调整。架构师必须要了解所有技术细节、业务细节、处理规范、同伴等众多因素,快速决断,迅速调整。

    在线运维本质上是一个强化学习的过程。很多能力都可以通过看书、查资料来完成,但在线运维能力往往需要大量的实践来提升。

    业务架构能力

    工程师抱怨产品经理的故事屡见不鲜,抱怨最多的主要原因来自于需求的频繁变更。需求变更主要有两个来源:第一个原因是市场改变或战略调整,第二个原因是伪需求。对于第一个原因,无论是工程师还是产品经理,都只能无奈的接受。优秀的架构师应该具备减少第二种原因所导致的需求变更的概率。

    伪需求的产生有两个原因:

    第一个原因是需求传递变形。从信息论的角度来讲,任何沟通都是一个编码和解码的过程。典型的需求从需求方到产品经理,最终到开发工程师,最少需要经历三次编码和解码过程。而信息的每一次传递都存在一些损失并带来一些噪音,这导致有些时候开发出来的产品完全对不上需求。此外,需求方和产品经理在需求可行性、系统可靠性,开发成本控制方面的把控比较弱,也会导致需求变形。

    第二个原因就是需求方完全没有想好自己的需求。

    优秀的架构师应该具备辨别真伪需求的能力。应该花时间去了解客户的真实业务场景,具备较强的业务抽象能力,洞悉客户的真实需求。系统的真正实施方是工程师,在明确客户真实需求后,高明的架构师应该具备准确判断项目对可行性、可靠性、可用性等方面的要求,并能具备成本意识。最后,由于需求与在线系统的紧耦合关系,掌握在线系统的各种细节也是成功的业务架构的关键。随着级别的提升,工程师所面对的需求会越来越抽象。承接抽象需求,提供抽象架构是架构师走向卓越的必经之途。

    市场上有一些关于如何成为架构师的书,大家可以参考。但是架构能力的提升,实践可能是更重要的方式。业务架构师应该关注客户的痛点而不是PRD文档,应该深入关注真实业务。掌握现存系统的大量技术和业务细节也是业务架构师的必备知识。

    项目管理能力

    作为工业时代的产物,分工合作融入在互联网项目基因里面。架构师也需要负责几个重大项目才能给自己正名。以架构师角色去管理项目,业务架构能力当然是必备技能。此外,人员管理和成本控制意识也非常重要。

    项目管理还意味着要有一个大心脏。重大项目涉及技术攻关、人员变动、需求更改等众多可变因素。面临各种变化,还要在确保目标顺利达成,需要较强的抗压能力。

    人员管理需要注意的方面包括:知人善用,优化关系,简化沟通,坚持真理。

    • 知人善用意味着架构师需要了解每个参与者的硬技能和软素质。同时,关注团队成员在项目过程中的表现,按能分配。

    • 优化关系意味着管理团队的情绪,毕竟项目的核心是团队,有士气的团队才能高效达成目标。

    • 简化沟通意味着快速决策,该妥协的时候妥协,权责分明。

    • 坚持真理意味着顶住压力,在原则性问题上绝不退步。

    成本控制意味着对项目进行精细化管理,需要遵循如下几个原则:

    • 以终为始、确定里程碑。为了达成目标,所有的计划必须以终为始来制定。将大项目分解成几个小阶段,控制每个阶段的里程碑可以大大降低项目失败的风险。

    • 把控关键路径和关键项目。按照关键路径管理理论(CPM)的要求,架构师需要确定每个子项目的关键路径,确定其最早和最晚启动时间。同时,架构师需要关注那些可能会导致项目整体延期的关键节点,并集中力量攻破。

    • 掌控团队成员的张弛度。大项目持续时间会比较长,也包含不同工种。项目实施是一个不断变化的动态过程,在这个过程中不是整个周期都很紧张,不是所有的工种都一样忙。优秀的架构师必须要具备精细阅读整体项目以及快速反应和实时调整的能力。这不仅仅可以大大降低项目成本,还可以提高产出质量和团队满意度。总体来说,“前紧后松”是项目管理的一个重要原则。

    项目管理方面的书籍很多。但是,提高业务架构能力同样重要。积极参与大项目并观察别人管理项目的方式也是非常重要的提升手段。

    团队管理能力

    不想做CTO的工程师不是一个好的架构师。走向技术管理应该是工程师的一个主流职业规划。团队管理的一个核心能力就是规划能力,这包括项目规划和人员规划。良好的规划需要遵循如下原则:

    • 规划是利益的博弈。良好的规划上面对得起老板,中间对得起自己,下面对得起团队。在三者利益者寻找平衡点,实现多方共赢考验着管理者的智慧和精细拿捏的能力。

    • 任何规划都比没有规划好。没有规划的团队就是没头的苍蝇,不符合所有人的利益。

    • 规划不是本本主义。市场在变,团队在变,规划也不应该一成不变。

    • 客户至上的是项目规划的出发点。

    • 就人员规划而言,规划需要考量团队成员的能力、绩效、成长等多方面的因素。

    市场上有很多规划管理方面的书籍,值得阅读。最优化理论虽然是技术书籍,但它是规划的理论基础,所以不妨多看看翻阅一下。从自我规划开始,多多学习别人的规划也是规划能力提升的重要手段。

    总结

    因为受邀去做一个关于“一边工作,一边学习”的分享,作者花了一段时间去思考和汇总学习方法论,接着每天不断地采集谣言并尝试解惑,再根据个人经验绘制出优秀架构师的能力模型,最后汇集成文。

    文章系统性地阐述了学习原则、分析了常见困惑,并制定明确学习目标,期望对工程师们的工作学习有所帮助。需要申明的是,文章内容挂一漏万,所谓的架构师能力模型也是作者的个人观点。欢迎大家在评论中分享自己在学习成长方面的心得。

    这里写图片描述

    展开全文
  • Mac提升工作效率Alfred神器开始(下)

    万次阅读 2019-09-08 21:25:26
    但是其实真正让Alfred坐上Mac效率提升第一的神器宝座的而是它的WorkFlow功能; WorkFlow 是工作流的意思; Alfred相当于提供了一个扩展接口,让所有人都能很方便的去制作一些工作流来满足自己的日常需求; 我今天搜罗...

    前言

    上一篇讲了 Alfred的基础篇,虽然基础篇讲的内容已经很强大了. 但是其实真正让Alfred坐上Mac效率提升第一的神器宝座的而是它的WorkFlow功能; WorkFlow 是工作流的意思; Alfred相当于提供了一个扩展接口,让所有人都能很方便的去制作一些工作流来满足自己的日常需求; 我今天搜罗了一些在开发人员看来是非常实用的 WorkFlow; 所有的文件已经打包好;可以一次性下载实用;

    WorkFlow导入到Alfred中也是非常简单的,只要双击WorkFlow文件就行了;

    实用的工作流


    Encode/Decode

    在这里插入图片描述
    回车自动复制到剪切板Encode之后的字符Decode得到原字符
    在这里插入图片描述

    Git Search 搜索GitHub上的项目

    更方便的在Git上搜索项目
    Git Search下载地址

    先授权 gh >login
    在这里插入图片描述 搜索github某用户项目
    在这里插入图片描述
    更多 gh 命令查看Git Search下载地址

    各种加密算法

    直接使用各种加密算法加密
    Hash 下载地址

    //各种加密命令
    md5 <string>
    sha1 <string>
    sha256 <string>
    sha512 <string>
    htpasswd <string>
    crc32 <string>
    whirlpool <string>
    base64_decode <string>
    base64_encode <string>
    

    在这里插入图片描述

    Timestamp 时间戳转换

    时间戳转化下载
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    CopyUrl 复制地址以MarkDown的形式复制

    在当前网页呼出Alfred; 然后输入url关键词;就可以选择格式化这个链接了
    Workflows | Packal

    在这里插入图片描述

    有道词典

    单词翻译
    GitHub下载地址

    关键字 yd ;
    在这里插入图片描述
    cmd+回车 会发音

    kill 杀掉进程

    kill 杀掉指定应用程序; 使用的命令是 kill -9
    一般使用quit 退出程序退不出的时候.用这个kill很方便
    kill process 下载.

    在这里插入图片描述
    正常退出应用用关键词 quit 就行了
    在这里插入图片描述

    文件下载

    以上所有的workflow 全部打包分享到百度网盘中; 可以 关注公众号:进击的老码农 回复Alfred 获取下载链接;
    在这里插入图片描述

    进击的老码农
    展开全文
  • 996工作制,还要抽时间提升自己吗?

    万次阅读 多人点赞 2019-10-21 15:21:02
    有位朋友说,他新近换了工作,9116工作制,打乱了之前所有的计划,几乎没有多余的时间看书和学习,问我应该怎样在这种忙碌抽出时间提升自己。 工作很忙,无暇提升,这是个普遍性问题,今天特意针对它聊一下,包括...

    有位朋友说,他新近换了工作,9116工作制,打乱了之前所有的计划,几乎没有多余的时间看书和学习,问我应该怎样在这种忙碌中抽出时间提升自己。

    工作很忙,无暇提升,这是个普遍性问题,今天特意针对它聊一下,包括如下3部分内容:

    1. 关于提升自己的两个认知错误
    2. 996、9116工作制的时间管理建议
    3. 如何在工作中提升自己

    有你感兴趣的,就接着往下看吧。

    1)关于提升自己的两个认知错误

    第一个认知错误:把提升自己等同于看书学习

    但实际上,1)看书学习可能提升自己;2)但提升自己不等于看书学习。

    因为个人的提升,有两个常见途径:

    从知识中学习,就是我们说的看书学习了;

    从自己的实践经验中学习。即你做了一件事后,从这件事中萃取经验,提升自我。从经验中学习,是成人使用更多的方式。

    第二个认知错误:上班时间要用来完成工作,业余时间才可以提升自己

    实际上,更多的提升,来自于工作时间和工作过程。业余时间的提升,效率并不如工作时间。

    你可能会说,业余时间才能自主掌控,才可以合理安排,系统、有效地进行自我提升。但实际上,知识的内化、技能水平的提升,最重要的是实践!而工作环境,对职业相关技能来讲,是天然的实践环境,是以战养战的最佳场所!

    举个例子,你想刚学习了一些Python的基础语法,接下来想要提升Python编程技能,一种方式是业余时间自己找一些DEMO项目来做,一种方式是参与公司的一个商业项目。你觉得,哪种方式,能让你更快地提升Python编程水平?

    显然是公司的商业项目呀!

    这也是很多公司在招募开发者时要求你有实际项目经验的缘故,因为只有实际项目,才能真正淬炼你的技能。

    2)996工作制的时间管理建议

    避开前面说的关于提升自己的两个认知错误,996、9116如何找时间提升自己,就不是问题了,答案很明显,对于996、9116工作制,提升自己的关键策略就是——一定要想办法在工作中有目的的提升某些能力。这些能力不一定是专业技术方面的,也可能是软实力,沟通、协调、组织、规划、演讲、开会、分解任务等等。

    当你充分利用了工作时间来完成工作,顺便提升自己,那工作外的时间,就可以更多的分给家人。不然的话,996、9116你已经很忙了,周日那天还要把时间交给学习提升,那家人就被忽略了,生活很容易出状况。这样是不可持续的。

    3)如何在工作中提升自己

    看到我说996工作制的小伙伴提升自己的最佳方式是在工作中以战养战,有的小伙伴会说,感觉工作中做了很多项目,也没什么提升呀,都是重复性工作和驾轻就熟的工作。

    即便做重复性工作和驾轻就熟的工作,也可以获得提升!没有提升,那是因为,你的姿势不对。

    举两个常见的例子。

    第一个例子。

    很多程序员都熟悉单例模式,也写过不少单例模式的代码,有新项目要用到单例模式时,就总是复制粘贴之前实现过的一段代码,改改类名、变量名、函数名,然后就完事大吉。这样的方式,就不可能提升。能让你提升的做法,是采用不同的方式、提出更高的要求来重新实现单例模式,比如做一个模板单例类,这样就可以在每个项目中包含头文件,通过特化直接生成需要的单例类。

    第二个例子。

    很多程序员做完项目就完事大吉,不回顾、不反思、不梳理,这样用过的某个知识点、某个技能点,仅仅是增加了熟练程度,而且熟练程度提升到一定层次后,多用一次、两次,就很难感觉到有明显的提升增量,整体下来你的感觉,自然是没什么提升。

    在这个例子中,能让你提升的做法,是主动复盘,每做完一个项目或者每隔一段时间,就按照下面的模板来反思自己:

    1. 我在项目中用到了哪些知识点、方法、技能?
    2. 哪些哪些知识点、方法、技能等用得好?好在什么地方?有什么前提条件?下次满足什么条件、该怎样用才能再次用好?用得好的东西,还能用在别的什么地方?
    3. 哪些知识点、方法、技能等用得不合适?为什么?更合适的是使用什么知识点?怎么使用?下次怎样规避不合适不合理的知识点或用法?用得不合适的东西,用在别的什么地方可能是有效的?
    4. 从项目全局视角出发,我关于知识、技术、解决方案等等的选择,有哪些是对的?为什么?哪些是错的?为什么?下一次做项目,遵循什么原则可以提升正确选择的概率?
    5. 我用到的知识点、方法、技能等,有哪些可以更新到我的知识体系中?它们与既有知识体系中的哪些知识点可以发生哪些方面的关联?

    综合刚才的两个例子,做一个归纳总结,我们在工作中想要快速提升自己的技能水平,有下面三种策略:

    1. 用到既有知识、经验、方法、技能时,尝试新的用法
    2. 在使用知识、经验、方法、技能时,提出比上次使用更高的要求
    3. 周期性或项目完结时,主动复盘,把经验变成经验值,把新知识纳入既有知识体系

    当然,策略不止三种,还有:

    • 第四种,把重复性的工作自动化、系统化,实现自动化、系统化的过程就会提升。
    • 第五种,把驾轻就熟的工作交给他人去做,这样自己可以做更有挑战的工作获得更大提升。

    可能还有第六种、第七种……期待你留言补充。


    有时候可能一个环境没法提升,需要换份工作,此时需要系统准备,我开发了一门讲解求职和面试的课程,给有需要的你,戳下面链接了解详情(可以试听):

    程序员面试宝典——助你拿到好offer

    展开全文
  • 就 3 点,提升工作效率

    万次阅读 多人点赞 2017-08-09 09:10:12
    要想提高工作效率,不论你看什么书,看什么文章,用什么工具,只有下面这三点最重要

    要想提高工作效率,不论你看什么书,看什么文章,用什么工具,只有下面这三点最重要:

    • 动力
    • 剖析自己,找到改善的切入点
    • 付诸行动并且坚持

    目标驱动

    有目标才能高效。

    我们爬山,山顶就是目标,心怀山顶,在登顶之前,总是充满希望,纵有沟沟坎坎,也会克服困难,努力前行。

    作为一个有追求的程序员,心中应该不只有一座山,更应该有一条绵延不断的山脉,千峰错落,峰峦叠起,终成峻岭。设立目标,付诸行动,不断攀登,是自我成就的不二法门。

    放到日常工作中,就这么三点,就能让你与众不同:

    1. 每周一问自己:这周干什么,定下这周的目标
    2. 每天早上问自己一个问题:今天干什么,定下今天的目标
    3. 每天下班前花十分钟:今天完成了什么、有什么问题,记录下来

    其实这是我从敏捷开发每日站会的三个问题延伸出来的。我的观点是,敏捷不只是做某一个项目时的模式和手段,而应当是一个有追求的程序员的贯穿始终的工作习惯。

    从现在开始改变

    抱歉,没有银弹,只有不起眼的小小经验谈。

    作为软件开发工程师,在工作时需要高度集中注意力,动员所有神经来解决问题,最怕受到干扰。我正写代码写得HIGH呢,项目经理蹦过来问我进度怎么样,质管发邮件过来说过程检查不合格,测试MM说某个需求理解不了,有个无聊的网友在QQ发消息撩拨你晚上去幻影凶间,产品经理蹭到身边说不好意思兄弟需求又要改了……要知道保持速度与节奏很重要啊,我正突击呢你来这么一下子,看起来是几秒钟的事儿,可对程序员来讲,也许半天功夫就白费了,要想再找回断掉的思路,花费的时间可是那几秒钟的几十倍几百倍。

    看看下面这张图:

    “树欲静而风不止”。这是我们在开发过程中必须要面对的现实,各种各样的干扰会让我们的工作效率大打折扣。如果你有同感,往下看吧,包你不失望。

    1)邮件的打扰

    领导会要求你关注邮件,每隔多少分钟检查一下邮箱,最好安装一个邮箱客户端,设置一个自动检查新邮件。我原来也要求过部门的同事,现在想想这不大靠谱。关键的一点是:真正重要的事儿,真正紧急的事儿,不走邮件!所以,尽管关注邮件是必要的、必须要的,还是要给它设置一个限度。照下面这么做就好了:

    • 每天早上扫一下邮件标题,把重要的、紧急的标记出来
    • 每天中午查看邮件,汇总重要的事儿

    2)即时通信工具的打扰

    这年头,人都忙着在网上社交了,很多精力和时间都贡献给网络上的虚拟圈子和对象了,其实,我要说的是,玩的是热闹也是寂寞,别上瘾为好。

    看张图片:

    这是我某个时刻的QQ通知截图,同时和十四个人聊天,有的人比我还多,同时聊三五十个,要是笔记本没有静音,“嘀嘀嘀嘀”之声就像农村河畔夜晚的蛙鸣,此起彼伏连绵不绝,真够让人忙活的,你要是每听到一声“嘀嘀”都看一下子,那完了,就算你开着Qt Creator /Eclipse/VS/Android Studio之类的IDE,也没时间切换过去敲代码了。这场景,基本上就变成聊天为主开发为辅,看来淘宝小二的工作更适合你了。

    电脑上有QQ,手机上有手Q、微信、陌陌等,也是一会嘀一下、震一下,也许我们每天要看手机100次以上,重度手机依赖者在300次以上,看微信、看微博、各种通知、看短信、接电话、看时间、看天气、看养的宠物、把玩游戏、看小说、看漫画……尼玛,智能手机太富有侵略性了。假如你从口袋里掏出手机的次数远远大于别人给你打电话的次数,那你可能就存在过度关注的倾向,得注意了,阿猿,你又没那么多女盆友,不会错过晚上的约会的,担心个什么劲儿呢。

    下面几招就可以让你摆脱或降低即时通信工具和手机对工作的干扰:

    • QQ,留给中午休息时间吧,或者下班前;关掉QQ,或者关掉消息提醒、设置提醒周期为很长很长;总之你别来烦我,我想你时去看看你。
    • 微信,关掉提示音吧,把那些个不咸不淡的群,都设置为消息免打扰。
    • 微博,关掉提示吧。
    • 手机,调整为震动或者静音。
    • 陌陌,办公室都是熟人,干掉它吧。
    • 智能手机上各种应用的通知,都使用安全软件禁止掉吧,或者设置通知的提醒模式,不要提醒
    • 断网,给手机断网,3G/4G/WIFI统统不要打开,看哪个软件还发通知

    一句话:不要让手机和社交软件不停地通知你干扰你,你一个小时去查看一下状态即可

    3)张弛有度

    工作一阵子(譬如45分钟、30分钟)就休息一下,有张有弛,活动下筋骨、站起来走走、活动脖子、腰、手,转转眼球看看远方,总之,一个人能集中注意力的时间长度是有限的,你要说你能连续高效工作四个小时,那我表示佩服。

    为了能够张弛有度,程序员还需要做一些工作任务上的调整,把编码、设计、杀虫等工作的粒度细分,最好一个小任务能在几十分钟内完成,这样节奏就配合上了。

    这方面有个著名的方法:番茄工作法。可以试试。

    4) 提升开发效率的小贴士

    程序员要写代码,这里有一些小贴士可供参考,也许能提高开发效率:

    • 自测,每完成一个小功能都自测一下,看看这个功能自身是否正常,集成一下,看看有没有影响其他模块。开发人员的自测非常重要,编码期间频繁地测试、集成,会大大节省送测后回归的时间。
    • 一个小功能完成后,提交到svn或者github之类的代码托管平台上,免得宕机、停电、误修改造成重复工作,对心情产生恶劣影响,这种影响甚至比外来干扰还要大、持久。
    • 多与产品经理、需求人员沟通,完成一个功能就给他们看看,一方面是看是否是他们期待的,以便及时调整,另一方面是让他们对进度有所了解,降低他们因未知产生的焦虑,同时也能降低他们干扰你的频率。
    • 多与测试人员沟通,完成一个功能集就可以Build一个版本给他们看看,玩玩儿,让测试人员熟悉产品,建立对产品的直观感受,也给他们时间写用例。
    • 多与项目经理沟通,完成一部分功能,就可以给他们看看,让他们知道你在keep moving,也许他们也有一些想法,可以就此交流,免得什么都弄完了有人对结果不满意,要推倒重来,浪费时间。
    • 多与团队成员沟通,很多功能都是要相互协作的,让他们知道你前进到哪里了,和与你有工作衔接的同事约定联调时间,相互发布进度。如果不能在预期时间内联调,提前告知。
    • 多和UI及美工沟通,做出能看的东西就让他们看,看看是不是他们要的效果,免得到后面了返工浪费工作量。

    知易行难

    如果你发现自己的工作效率有待提高,并且拟定了一系列的措施,那就执行吧,坚持执行。想再多,落不到行动上,都是白瞎。

    执行了,还要想办法度量效果。比如你觉得QQ影响你的开发效率,那就关掉它,坚持一周,看看有什么变化?要想度量效果也很简单,找一个时间跟踪软件,看看你每天花费在QQ聊天上的时间,花在开发工作上的时间,记录下来。然后在关闭QQ的情况下,再记录你花在开发上的时间。对比一下,在时间投入这个维度的结果就出来了。而工作成果这个维度,就看你自己如何度量了,比如通过工作量、完成的任务数等都可以。

    总而言之,如果你觉得某个因素使你效率低下,那就制定策略,落实到行动上来,一定有效果。可惜的是有时我们明知那么做会有改善,可就是懒得动弹啊。

    展开全文
  • 是否想过找一帮志同道合的人,专心去做一番有意义的事情,打造一个理想的美好公司 是否想过出国留学工作,去见识下外面的工作 是否想过学习一两门才艺,提升自己的魅力与气质 是否想过提升自己的心态,更加坦然...
  • 工作过程,如何提升个人能力,这是一个很重要的问题。有的人也许很清楚,有的人是在混日子。 那究竟该如何提升个人能力呢。
  • 其实我们换个问法:你记忆力小学开始,得到提升了吗?相信只有一个答案,没有。那你数学能力提升了吗?也没有吧?为什么别的能力不能提升工作能力就能提升?那是一个错觉:  大家把知识的获取,工作的经历,...
  • 丰厚的薪水,轻松的工作量,无穷的假期,这些并不一定能让员工开心。事实上,美国最快乐的雇员认为自己的幸福来自一流的员工激励机制、充足的福利、职业发展计划,以及工作与生活的绝妙平衡。过去一年里,用心培植和...
  • 牺牲pypy一部分的性能提升空间,来换取它对C扩展模块的支持,或者使用JIT即时编译技术 加入到CPython编译器 来获得2倍性能提升,但是不知道这两种方法的可行性如何,如果可能实现的话需要做那些技术工作。...
  • 我和我们数据分析师总监深入聊了一下,这个答案不仅会和大家聊一下工作内容和工作职责,还会真心实意的和大家聊下这个工作是不是像想象那么光鲜,有什么大家其实没想到的工作,其实很重要,也很闹心,也很有成长。...
  • 提升度,提升表和提升图 lift chart

    千次阅读 2019-10-31 16:56:40
    提升指数、提升表和提升图(草稿) 胡江堂,北京大学软件与微电子学院 2006-11-5 1. 什么是Lift? I) Lift(提升指数)是评估一个预测模型是否有效的一个度量;这个比值由运用和不运用这个模型所得来的结果计算...
  • 工作5年,我的互联网工具箱(30个提升办公效率的神器)   PM田宇洲 关注 2017.10.12 08:49 字数 1699 阅读 14753评论 70喜欢 1390赞赏 5 上学时,总有些同学给人的感觉是没怎么努力学习,...
  • 8中提升模型精度的方法

    万次阅读 2017-08-04 14:13:41
    模型开发周期需要经历数据收集到模型构建的各个阶段。 在这之前重要的是花时间思考给定的问题并获得专业领域知识。 在这个阶段,你应该对这个问题采取结构化思维,即考虑一个特定问题的所有可能方面的思考过程。...
  • 3.日记值得写的内容有常见的三类:工作日记、读书心得和特殊的经历。 工作日记、读书心得和特殊的经历 写好日记的第一要素是“写什么”,比“怎么写”更重要。 以下三类内容非常值得写,却又是很多人忽视的。它们...
  • 将矿用挖掘机提升机构中提升钢丝绳离散为多段刚性圆柱体,在刚性圆柱体之间施加柔性连接来模拟钢丝绳,并结合UG NX软件建立工作装置虚拟样机模型,通过对工作装置提升机构的仿真分析,得到了卷筒轴轴向受力的主要影响...
  • 在WebGL应用使用Web Worker提升效率

    千次阅读 2017-06-24 14:14:47
    Web Worker介绍:  js本身是一种单线程设计,我们无法在同一时刻并行运行多个脚本。...Web Worker通过引入类似线程的机制使这种问题得到了解决,通过在当前js主线程使用worker类加载一个js文件来开辟
  • 提升团队编码效率的10个提示

    千次阅读 2014-02-10 01:36:38
    本文来源于我在InfoQ中文站原创的文章,原文地址是:...近日,Voja撰写了一篇文章,谈到了如何提升团队的编码效率,如何提升团队每一个成员的工作效率。毕竟,团队是由一
  • 程序人生的八大建议,助你提升编程能力

    千次阅读 多人点赞 2018-05-09 15:21:52
    编程小白到大牛,每个程序员在程序人生的发展不尽相同。无论你是新手还是老司机,以下这8大建议,对提升编程能力会有帮助。1. 了解自己的学习风格每个人都有属于自己的学习风格。有些人喜欢通过读书来获取知识,...
  • 提升机逆变器在实际工作环境,受背景噪声和负载变化等因素影响,运用单一的特征提取方法难以获得能有效表征故障的特征,导致提升机逆变器故障诊断准确率低。针对上述问题,提出了一种基于统计特征与深度特征融合的...
  • 基于流程自动化提升研发效率

    千人学习 2017-09-11 17:36:55
    基于独创开源流程自动化工具”mcg-helper“,基本使用、工作原理、控件详解、入门示例来逐步熟悉工具后,以研发工作中较典型需求场景,如“代码生成、环境搭建、应用部署、模拟操作、自动检测、数据处理“为题材,...
  • 我们知道在 ES6 提出了块级作用域的概念,块级作用域声明的变量也会存在变量提升,但是部分提升的方式和其他作用域稍微不同。 看下面的例子,是不是和我们平常碰到的情况不太一样: // undefined console.log('...
  • 很多职场新人都谈到了工作经验的问题,似乎招聘公司不给你机会,你就没办法获得必要的工作经验,其实并不一定。   很多资料在网上都是可以找到的,只是看你具备不具备足够的信息收集与处理能力,而这个收集与...
  • Kali Linux 秘籍 第七章 权限提升

    万次阅读 2016-10-05 16:21:25
    第七章 权限提升 作者:Willie L. Pritchett, David De Smet 译者:飞龙 协议:CC BY-NC-SA 4.0 简介我们已经获得了想要攻击的计算机...这一章我们会探索几种提升权限的方式。7.1 使用模拟令牌这个秘籍,我
  • 程序员自我提升方式

    千次阅读 2008-05-30 15:19:00
    IT招聘专家和工作场所...熟悉SAAS产品IT人员配备和随需应变的咨询公司Bluewolf的共同创始人和负责人Michael Kirven说,SAAS(软件服务)知识在用人要求条件的比例已经三年前的5%提高到了35%。拥有这方面知识的人可
  • 程序员如何提升自己的能力

    千次阅读 2019-05-15 21:25:24
    可能很多人觉得,在一家公司干久了,每天都是做着相似的工作,专注于自己那一块的业务,能力没什么提升。这是一个很普遍的现象,企业越大,分工越明细,而且很多程序员都是干的和业务相关的工作,每天都是实现业务...
  • 工作中的方法论

    万次阅读 2015-03-08 22:22:49
    方法论的重要性,不言而喻。... 方法论有别于方法,方法论往往道理浅显,但是灵活运用非常难,并且是做事能够解决一列问题的指导原则,而方法是如何做完成一件或类似相对较为具体的任务。 方法论,在精而不在多。
  • 如何提升SEO效果?只需要做到这3点

    千次阅读 2019-07-03 14:05:08
    得流量者得天下,有了流量,客户和生意才会跟着来,所以流量的获取一直都是市场部门的核心目标之一。这几年,SEO的重要性一点都没衰减,甚至有很多小型的...获得10个新客户,不如得到1个老客户的多次回访。 一、利...
  • 产品经理如何提升自己的知识

    千次阅读 2011-12-01 20:22:13
    产品经理如何提升自己的知识     亮仔自然是不可能把自己20.1寸的笔记本作为服务器去配置wiki的,最后还是用他的那台台式机作为了服务器。 “你这台式机不错啊,能当服务器用。”我对他说。 “什么能当,本来...
  • 深度学习模型提升性能的策略

    万次阅读 2020-04-28 14:12:45
    文章目录角度1缺乏可用于训练的数据过拟合欠拟合训练时间长角度2数据上提升性能算法上提升性能算法调优上提升性能模型融合上提升性能 角度1 缺乏可用于训练的数据 一般来说,数据越多,模型的性能就越好。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 530,703
精华内容 212,281
关键字:

从工作中得到哪些提升