如何提高编程效率

阅读英文资料
 对于全栈工程师来说,遇到问题时常常会求助搜索引擎,尤其是在学习新的编程语言,或者学习某个框架的新版本的时候。这是最快速的方案,在很多时候比看官方文档还有效。有的时候我们只是想快速了解一个新的技术,或者快速上手,这时候也会用到搜索引擎。
为什么我推荐使用英文,而不是使用中文搜索,有这样几个原因:

英文的技术资料更多
 在全世界范围内,IT工程师普遍使用英文(即使中国工程师的数量也许更多),于是用英语写作就有了最大的读者群,然后有更多的人用英语写作……。
在Google中用英文搜索技术问题,往往能得到很详细的说明,以及相应的代码示例。有的时候您会进入英文维基百科,里面有关于词条的详细解释,包括历史、版本、理念、竞争者,等等。有的时候您会进入一个教程(tutorial),里面会详细介绍完成一个任务的整个流程,甚至还可能贴心地提供工程示例文件的下载,这是新手学习的最好方法。

StackOverflow有完善的鼓励机制
 内容筛选机制、严格的内容把关政策,这让Google的内容质量很高。如果您键入的关键词足够多,那么您很有可能看到很多StackOverflow的问答链接。
 StackOverflow是一个与计算机编程相关的问答网站,也是最大的IT工程师平台。在这里有很多知名开发者,由于有完善的系统鼓励政策,他们都很热衷于回答其他开发者遇到的问题。用户可以在网站免费提交问题,浏览答案,赞同或者反对答案。StackOverflow是一个英文网站,所有用户都必须用英文提问和回答问题。很多时候,在一个问题下都会有多个回答,有经验的用户可以赞同或者反对其他人的回答,新手可以根据每个回答的赞同数来判断回答的可靠性。
 关于StackOverflow,还有一点题外话。StackOverflow由两个世界著名的博客作者共同创建,Jeff Atwood和Joel Spolsky。Jeff Atwood提出了著名的Atwood定律:“任何能够用JavaScript实现的应用系统,最终都必将用JavaScript实现。”JoelSpolsky可能是软件工程师中写博客最有名的一位,他是“Joel on Software”博客的作者,读者人数可以排进全世界前100名。两位创始人对工程师心理有着深刻的洞察,包括追求荣誉感这一特点,所以他们设计的StackOverflow的鼓励机制,取得了巨大的成功。

Google的搜索能力非常强
 Google在搜索引擎方面的技术实力可以说是绝对领先,它比排名第二的搜索引擎的技术实力和用户体验要强一大截。我曾经对比了大量词汇在不同搜索引擎中的搜索结果,有时候差不多,有时候差别很大,Google总是好得多。所以即使您要搜索中文问题和词汇,也仍然建议使用Google。

英语世界的语言风格比较严谨
 中文互联网世界上的语法一般比较口语化,而且不太在意语法正确性和逻辑的严谨性。在整篇文章的行文和逻辑构建上,英文也往往更严谨。
如果您的英文不够好,没有关系。在长篇的英文技术文章或者StackOverflow中,写作者都会有意使用最简单的词汇和语法。如果您能编程,您就能理解这些简单的英文

时间管理四象限
 一个领导说过,如果您平时没有做重要的事情,就会发现自己常常在做紧急的事情。如果您平时没有注意锻炼身体,就会常常去医院,花费更多时间。如果没有培养后辈,为每个项目设置接班人,就会常常需要到处救火。如果您没有配置好版本管理系统就开始工作,就会浪费更多时间去找回丢失的代码。如果偷懒硬编码(hard code)了一些变量在代码中,后续一定会花费更多时间去调试。时间管理四象限将我们平时需要做的事情分为4类:重要而且紧急、重要但不紧急、不重要但紧急、不重要而且不紧急。

 时间四象限教我们把不同的事情分在不同象限之中,然后采用不同的处理方法。
第一象限是重要又紧迫的事情。比如线上出现严重bug、服务器出现安全漏洞、用户的投诉,等等。对于这些问题,是考验自己的经验和判断力的时候,用自己最好的判断力,立即执行。不过也要意识到,在这一象限的问题往往是第二象限的问题没有制定好的计划而滑落过来的,如果大部分的工作都落在第一象限,说明还是在“瞎忙”。

 第二象限是紧急但不重要的事情。比如会议、一些可转交的需求,等等。这种事情往往会由于对方强烈的呼声让您认为它处于第一象限,有一种“这事很重要”的错觉。我们花很多时间在这里打转,其实只是在满足他人的需求,而没有关注自己的职责。对于这种事情应该请他人代劳,不一定是自己的下属,还可以是平级的同事。有一些会议不一定需要自己去参加的,可以提前跟主持人(项目经理)沟通。

 第三象限是重要但不紧急的事情。比如一些线上体验优化计划、团队的长期发展方向和个人培训等。有一次老板提出了线上的一个体验问题,我们以为这是第一象限的问题,马上执行。结果老板说,这个事情不需要您们这么快去执行,希望可以做深入一点的调研。建议工程师把80%的工作投入到该象限中,避免“瞎忙”。

 第四象限是不重要也不紧急的事情。逛论坛、刷朋友圈就属于这一象限。简而言之就是浪费生命,所以根本不值得花半点时间在这个象限。但我们往往在一、二象限来回奔走,忙得焦头烂额,不得不到第四象限去疗养一番再出发。所以我们要避免浪费时间在第四象限,也不要疲于奔命,各处“救火”。
有时候我们以为是外部原因让我们分神,其实更重要的原因是人的精力被耗尽了。我们在一些以为是消遣和休息的活动上投入了很多时间(比如刷朋友圈、玩游戏),回到工作的时候,并没有感到重返工作的舒畅,反而精力涣散,容易分神。我们身体上的劳累让我们的精力无法集中。

消除重复工作
 重复的工作应该交给计算机去干,这是我们都知道的一个道理。
有趣的是,我们往往不知道我们的时间花在哪里,有一个办法就是详细地记录自己一天的时间消耗。在合并代码上面花费太多时间?还是提交测试?发布流程繁琐?编译太久?切图的工作枯燥无味?
 第一步便是识别出自己的时间花费在了哪里,以此作为优化的目标。
 有了优化目标之后,第二个思考的问题是,能否使用已有的工具——免费的或付费的——来无缝衔接在已有的流程中。如果新的流程成本太高,那就无法有效推进。普通工具可以用英文在GitHub上搜索相关的关键词,前端开发者可以在Gulp和Grunt社区寻求帮助。
如果不能使用已有的工具的话,就要自己去编写了。在语言的选择上可以从几个角度考虑:工具的使用者是谁?如果需要分发给同事安装,那么他们使用什么系统?Windows还是OSX?如果使用Web来作为用户接口,那么就可以使用任何您喜欢的语言。用脚本语言开发小型工具非常快,无需编译即可运行。Paul Graham在《黑客与画家》里面就提到过他使用Lisp语言来快速开发的经历。
 给自己留出不被打扰的时间
  当我们被QQ、微信、RTX、电话等提示工具打扰时就会频繁分神,这使得专注力如今已成为稀缺资源。
 Paul Graham在一篇文章中说过,创作者的时间计划与经理的时间计划是非常不一样的。工程师作为创作者,遵循创作者的时间计划。编写程序需要大量的精神投入,需要整块连续的时间思考,所以工程师工作时是不希望被打扰的,若思路被打断则后果很严重。
Facebook的每周三是没有会议的日子(No Meeting Wednesdays),每一个团队成员都知道,除非万不得已,不要在这一天安排任何会议。事实证明这对团队的效率很有好处,它鼓励所有人(包括产品经理)成为“做事情的人”而不是“计划事情的人”,而且所有人都有一整块的时间工作。对于远程工程师来说,还可以选择在家里工作,根本不用出现在办公室。

番茄工作法
 有些时候,我们没有办法得到一整天的大块、连续的工作时间,为此可以采用短迭代的工作方法,高效地利用每一小块的工作时间。
 我在跟Facebook的工程师聊天的时候,发现他们都很注重锻炼身体,每天早上开始工作之前都会花一个小时跑步和健身,然后洗澡吃早餐,再开始一小段高效的工作时间。下午的工作时间中也会穿插一些运动和甜点时间,等等,不会像国内的工程师们,需要长时间地坐在电脑前。这种状态的转换让他们的效率得到了很大的提升。所以包括腾讯在内的一些国内公司现在也开始把健身房和团队运动作为一项员工福利,有时候还会组织晨跑或者徒步等团体运动。
番茄工作法”是由弗朗西斯科-西里洛于1992年创立的一种微观时间管理方法。使用番茄工作法,选择一个待完成的任务,将番茄时间设为25分钟,专注工作,中途不允许做任何与该任务无关的事,直到番茄时钟响起,然后在纸上画一个X,短暂休息一下(5分钟就行),每4个番茄时段则多休息一会儿。
 番茄工作法极大地提高了工作效率,还会有意想不到的成就感。为什么25分钟是一个比较好的时间点?因为如果过短,思维还没有恢复过来,就马上要被打断,不利于创作。番茄工作法主张在25分钟时间段内专注地完成高质量的工作,接着是5分钟的休息。如果让压力系统一直工作,而不借助心智休闲进行调节,一些症状会找上门来。

跨界思考
 有时候项目会频繁变动,从A计划临时转变成B计划,然后再回到A计划的事情屡见不鲜,这是浪费工程师精力的最大因素。
 从项目的角度来讲,也许这是好事情,谁也不希望把不好的产品发布出去。每个人都希望自己做的产品能够成功,但是不是做重复的脑力劳动。归根结底,是双方在沟通的过程中充满了障碍,不同岗位的人的思考问题的方式不同。
 设计师们是典型的浪漫主义者,他们的世界里没有公式、没有定理、永远没有标准答案,更多的是用发散的思维去构思创意,更容易产生好想法。而工程师注重逻辑的严谨性、技术的可行性,他们往往用“我是否能够做到”和“我要花多少时间才能做到”这个思维在思考。
 那么这种矛盾如何解决?在初级设计师和初级开发者之间,我们鼓励他们频繁沟通,把自己的想法用对方能懂的语言说出来。在高级设计师和高级开发者之间,界限就没有那么明显了,我鼓励他们帮对方做一些工作。这说明什么呢,沟通固然重要,跨界学习更加重要!当双方带着完全不同的思路去讨论一个话题,讨论出来的结果必然是双方妥协的产物,而不会是最优的结果。
很多工程师都向往国外大公司的“工程师文化”。为什么?因为“工程师文化”代表了工程师是产品开发中的强势方,在跟产品和设计师的沟通中有更多的话语权(甚至某些产品跳过设计师和产品经理)。但是我认为,这是因为国外的工程师有更高的跨界思考能力,才得到了自己的投票权。很多工程师主导的项目,界面不华丽,但是可用性都非常高。这就是跨界能力带来的另一个好处,可以做一个“产品创作者”。
 过去跨界学习的成本很高,大部分人都不敢轻易尝试。但如今互联网时代给我们带来了机遇,每天上网都可以看到其他领域名人写的文章和微博,通过查看这些内容,我们就能对原本完全陌生的领域有一个感性的认识。时间一久,我们就能够在潜移默化中理解另一个领域的从业者的思维方式,当您开始跨界学习之后,就会增加更多的机会.
 我在工作的这几年中也在渐渐受到设计师和管理者的影响,开始学习设计师和管理者的思维方式,所以有时候我被认为是“有一点设计感觉的工程师”,但我仍在学习。或许每个工程师会在不同的环境中跨不同的界,但是在未来,我认为跨界出来的那部分能力才真正定义了“您”。
纸上头脑风暴
 我使用过很多工具,比如MindMap类软件,或者简单的记事本软件、手机上的绘图软件等。最终,我的经验是,在电脑上工作之前,先在纸上画出自己的想法。笔跟纸是最灵活、最容易修改、成本最低的头脑风暴方式。
 比如在写一篇文章前,就可以先画一个思维导图,把头脑风暴出来的所有关键词都列出来,然后再根据金字塔式的写作方式层层分解。如果是开发一个软件,或者写一个脚本程序,可以把每一步的主要工作都写下来,类似伪代码,但是抽象层级更高一点。

使用版本控制和构建系统
 数据表明,对于没有使用版本控制工具的工程师而言,浪费在代码合并、版本回溯以及bug修改上的时间远远超过了使用版本控制工具的工程师。所以,这是针对所有人都适用的建议,尽快使用版本控制工具。
 好的构建系统可以让工程师完全从枯燥的操作中解脱出来。在极端情况下,不使用构建系统的工程师可能要花费80%的时间在编译和等待生效、清除缓存等操作上。

加班是一种文化?
 我不认同加班是一种“文化”。加班就是加班,是由于工作没有完成导致的。
 在一个项目和人力都很稳定的团队中,有两种原因会导致加班。
 一种是糟糕的项目管理,领导失职,没有安排好工作。
 第二种是员工能力不够,效率不高,没有按时完成目标。在这两种情况下,我都建议您跟领导去沟通。
 我时常听人抱怨说,团队有加班的氛围,他早早完成了工作,可是看见大家下班后还待在座位上(尤其是领导还在),就不好意思自己一个人下班,只好留下来“陪加班”。甚至,因为长期在这种环境下工作,有人认为领导在升职加薪的时候优先考虑爱加班的人,所以白天就慢慢吞吞,晚上就开始加班。
 我认为这种情况也许只是个别人的认知问题:认为领导推崇加班的氛围,以及领导按工作时长来判断投入度,以此作为升职加薪的考量因素;或者认为领导不知道谁工作成果更好,所以按劳累程度来判断……所有这些认知都是因为茫然和不自信,不知道自己的核心竞争力是什么,也不知道老板真正需要的是什么。拿工作时长来拼,这还是体力劳动时代打工者的心态在作祟。
稍有常识的老板,或者接受过一点点管理培训的领导者,都知道评估员工是看结果,而不是看努力和过程。您在把老板当傻子,拼命展示“辛苦”,结果更加不如意,只好天天抱怨:“小A这个家伙每天不加班,怎么老板那么喜欢他,升得比我还快!”
 工程师需要提高自己的沟通能力,如果大家因为紧急项目等原因在加班,您不妨过去问问,能不能帮到什么忙。用积极的态度去思考问题,而不是消极地坐在那里,浪费自己的时间和情绪。大部分老板都会很欢迎员工主动的沟通。
 如果团队内年轻人比较多,有些时候他们下班后喜欢留在办公室,并不是因为项目需要,而是公司内有免费的晚餐、空调、饮料、电脑……几乎是一个单身宅男需要的一切了,所以他们喜欢待在公司也是比较容易理解。我常常跟他们说的是,下班之后尽量不要处理工作需求了,多点时间自我学习,或者准备一些分享,甚至做一些编外项目(side project)。重点是,不要加班做白天遗留下来的工作。
 如果下属经常需要加班才能完成工作,我会认为是管理者的失职,一方面我会看看是否给员工安排的工作太多,能否转移一些给其他人,另一方面也会看是否需要借调其他资源,或者招聘更多人手。
 加班狂的英文是Workaholism,直译为“工作上瘾”。长期加班的人会有一种错误的观念,就是午夜鏖战全情投入项目的标志。他们不会去找高效的方法,因为他们确实喜欢加班。这往往导致恶性循环,熬夜和过量的工作让人疲惫,影响人的思维和判断力,这样更加无法找到高效的方法来完成工作。
 最后,过量的工作和压力严重影响健康,最终导致一些慢性病,甚至猝死。我们经常在媒体上看到某IT公司员工猝死,临死前还在朋友圈发加班的照片。
 我不确定家庭状况、个人健康或者具体项目对猝死员工产生了什么影响,但我认为一个接受过高学历教育的成年人,应该有能力权衡自己的健康、家庭的责任,以及长期工作回报。每个人都可以有自己的选择。工作上瘾者不光把自己逼上绝路,也把老板逼上绝路。您认为自己能高负荷工作坚持一个月,他就认为您还能坚持半年。

 总结一下,加班不是一种“文化”,它往往是我们心中假想的老板,还有媒体渲染出来的一种畸形工作模式。在这种模式中,加班狂习惯了熬夜和过量的工作,他们往往也给了老板长期加班的预期,同时也带来低迷的士气,以及疲倦的身体。

延伸阅读:
1.《软件随想录:程序员部落酋长Joel谈软件》(美)Joel Spolsky,人民邮电出版社
2.《卓有成效的程序员》(美)Neal Ford,机械工业出版社

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值