一个程序员如何提高其生产力,从而成为一个卓越的程序员。关于这个主题可以写(而且已经写了)一整本书。本文会介绍一些可以用来提高个人和团队工作效率的技术。文末再推荐一本软工好书给你,不能错过!
01
合理选择选件开发工具
作为一个软件开发人员,你将大部分时间花费在使用软件开发工具上,并且工具的质量对生产力有巨大的影响。遗憾的是,选择开发工具的主要标准似乎是对工具的熟悉程度,而不是工具对当前项目的适用程度。
请记住,当你在项目开始时选择工具的时候,你可能需要在整个项目期间(甚至更长时间)都必须使用这些工具。
例如,一旦你开始使用缺陷跟踪系统,由于数据库文件格式不兼容,你可能就很难切换到其他系统,源代码控制系统也是如此。幸运的是,软件开发工具(尤其是IDE)现在已经相对成熟,而且许多工具之间都是可互操作的,因此你不太会做出错误的选择。
尽管如此,但是在项目开始时仔细考虑如何选择工具,可以为你省去很多后续的烦恼。
对于一个软件开发项目来说,最重要的工具是选择使用哪种编程语言,以及使用哪种编译器/解释器/转换器。选择最佳的语言是一个很难解决的问题。你很容易证明一些编程语言是正确的,因为你熟悉它们,你不需要再去学习它们;然而,未来新的工程师在学习编程语言的同时还要维护代码,他们的工作效率可能会低得多。
此外,选择某些语言可以简化开发过程,充分提高生产力,以弥补学习语言所损失的时间。正如前面所提到的,选择一种糟糕的语言可能会浪费很多开发时间,直到你发现它不适合这个项目,于是不得不重新开始。
编译器性能(每秒可以处理一个普通源文件的多少行代码)会对你的生产效率产生巨大的影响。如果编译器平均编译一个源文件只需要2秒钟而不是2分钟,那么使用更快的编译器可能会提高效率(尽管更快的编译器可能会缺少一些特性,从而在其他方面降低了效率)。工具处理代码的时间越少,留给设计、测试、调试和优化代码的时间就越多。
使用一系列能够很好地协同工作的工具也很重要。
今天,我们认为使用集成开发环境(IDE)是理所当然的,它将编辑器、编译器、调试器、源代码浏览器和其他工具集成到一个单独的程序中。这使得我们可以在屏幕的同一个窗口内,快速地在编辑器中进行更改,重新编译源代码模块,并在调试器中运行结果,极大地提高了工作效率。
然而,你经常不得不在IDE之外处理项目的某些工作。例如,有些IDE不支持源代码控制或者缺陷跟踪(尽管许多IDE都支持)。大多数IDE没有提供用于编写文档的文字处理程序,也没有提供简单的数据库或者电子表格功能来维护需求列表、设计文档或者用户文档。
最有可能的是,你不得不使用一些IDE之外的程序,例如文字处理、电子表格、绘图/图形工具、Web设计工具和数据库程序等,来完成项目所需的所有工作。
在IDE之外运行程序不是问题,只要确保你选择的应用程序,与你的开发过程和IDE生成的文件是兼容的即可(反之亦然)。如果在IDE和外部应用程序之间移动文件,你必须不断运行一个转换程序,那么你的生产效率将会降低。
我能为你推荐一些工具吗?不能。因为项目的需求多种多样,所以我在这里无法给出这种建议。我的建议是在项目开始时就注意到这些问题。
但是我可以给出一个建议,就是在选择开发工具时避免有“为什么我们不尝试这种新技术”的想法。在使用了一个开发工具6个月之后(并基于它来编写源代码),如果你发现它不能够完成工作,那么后果可能是灾难性的。
除了考虑产品开发,你还要认真评估这些工具,只有在确信新工具确实有用之后,才能选择使用它们。苹果公司的Swift编程语言就是一个典型的例子。在Swift v5.0发布之前(大约在Swift首次发布的4年之后),使用Swift语言一直是令人沮丧的。每年苹果公司都会发布一个与之前版本代码不兼容的新版本,迫使你不得不修改旧的程序。
此外,该语言的早期版本中缺少许多功能,并且一些功能并不完善。直到5.0版本(在编写本书时发布)以后,Swift语言才变得相对稳定。然而,那些早期迎合这一潮流的可怜的人,为该语言的不成熟发展付出了代价。
遗憾的是,在许多项目中,你自己无法选择开发工具。这个决定来自上级的命令,或者你沿用产品以前的工具。抱怨它不仅会浪费时间和精力,还会降低你的工作效率。相反,你应当充分利用你所拥有的工具集,并成为使用它的专家。
02
管理开销
对于任何项目,我们都可以将工作分为两种类型:与项目直接相关的工作(例如,为项目编写代码或者文档)和与项目间接相关的工作。间接的活动包括会议、阅读和回复电子邮件、填写考勤卡和更新日程安排。这些都是日常开销活动,它们增加了项目的时间和成本,但是并不直接有助于完成工作。
通过遵循Watts S. Humphrey在Personal Software Engineering(《个人软件工程》)中介绍的方法,你可以跟踪在项目期间将时间都花费在了何处,并且很容易地看到直接花费在项目上的时间,以及花费在间接的开销活动上的时间。
如果你的开销活动时间超过总时间的10%,那么你应当重新考虑日常活动。你应当试着减少或者整合这些活动,来降低它们对你的工作效率的影响。如果你没有跟踪项目之外花费的时间,那么就会错过通过减少管理开销来提高生产力的机会。
03
设置明确的目标和里程碑
如果不是最后期限迫在眉睫,人们往往会放慢工作节奏,当最后期限临近时,他们又会进入“超级模式”,这是人类的天性。如果没有目标,那么人们就很难高效地完成工作。如果没有最后期限,那么人们就很难有动力及时去实现这些目标。
因此,为了提高你的工作效率,一定要有明确的目标和子目标,并将其附加到里程碑上。
从项目管理的观点来看,里程碑是项目中的一个标记点,它代表了工作的进展程度。一个好的管理者总是会在项目进度中设定目标和里程碑。然而,很少有时间进度计划会为单个程序员提供有用的目标。这就是个人软件工程需要发挥作用的地方。
要想成为一个超级高效的程序员,你需要对自己项目中的目标和里程碑进行微管理。一些简单的目标,例如,“我要在吃午饭之前完成这个功能”或者“我要在今天回家之前找到这个错误的根源”,可以让你集中注意力。
而另一些更大的目标,例如,“下周二我将完成这个模块的测试”或者“今天我将运行至少20个测试程序”,可以帮助你评估生产力,并确定你是否实现了自己的目标。
04
练习自我激励
能否提高工作效率取决于你的态度。虽然别人可以帮助你更好地管理时间,或者在你陷入困境时帮助你,但是最重要的是你必须主动改善自己。你需要时刻注意自己的节奏,不断努力提高自己的表现。通过跟踪自己的目标、努力和进步,你会知道什么时候需要“让自己振作起来”,通过更努力地工作来提高工作效率。
缺乏动力可能是提高工作效率的最大障碍之一。如果你的态度是“啊,我今天还要做这件事”,那么你完成这个任务所花费的时间可能比你的态度是“哇!这是最棒的部分!这将会很有趣!”更多。
当然,你做的每一个任务并不都是有趣的。这是个人软件工程需要介入的一个领域。如果你想要保持高于平均水平的生产力,那么当一个项目让你感到“缺乏动力”时,你需要有足够的自我激励。
试着创造一些理由让这份工作更有吸引力。例如,为自己创造一些小挑战,并在完成后奖励自己。一个高效的软件工程师会经常练习自我激励:你对一个项目保持动力的时间越长,你的工作效率就越高。
05
集中注意力,消除干扰
专注于一个任务并消除干扰,是另一种能够显著提高生产力的方法。你应当能够“进入状态”。通过这种方式工作的软件工程师比那些一心多用的人更有效率。为了提高工作效率,你应尽可能长时间地专注于某一个任务。
在没有任何视觉刺激(除了显示屏)的安静环境中,专注于一个任务是最容易的。有时候,工作环境并不利于让你专注。在这种情况下,戴上耳机,播放背景音乐可能有助于消除干扰。如果音乐太让人分心,则可以试着听听白噪声,网络上有一些白噪声的应用程序。
无论什么时候你在工作中被打断了,你都需要时间恢复状态。
事实上,你可能需要半个小时才能完全集中精力工作。当你需要集中精力完成一个任务时,可以贴一个告示说只有紧急的事情才能打断你,或者在你的工作台附近贴上“办公时间”,即你可以被打断的时间,例如,你可以允许别人打断你5分钟。
回答同事们自己能想明白的问题,可以节省其10分钟的时间,但是这可能会浪费你半个小时。你必须作为团队的一部分工作,成为一个好队友,然而,同样重要的是,需要确保过度的团队互动不会降低你(和其他人)的生产力。
在一个典型的工作日中,会有许多已经预定的工作中断时间,例如用餐时间、休息时间、会议、行政管理(如处理电子邮件和时间核算)等。如果可能的话,你可以试着在这些事件周围安排其他活动。
例如,关闭任何邮件提醒,因为在几秒钟内回复邮件很少是必需的,而且如果有紧急情况,别人会亲自找到你或者打电话给你。
如果别人确实希望你能快速回复,那么你可以设置一个闹钟,提醒自己在固定时间查收邮件(对待短信和其他干扰也是如此)。
当你接到很多非紧急电话时,你可以考虑把手机调成静音,在休息时每隔1小时左右查看一下短信。
如何做取决于你的个人和职业生活,但是你受到的干扰越少,你的工作效率就越高。
06
如果你觉得无聊,那就做点别的事儿
有时候,无论你多么有动力,你都会对自己的工作感到无聊,也很难集中注意力,你的工作效率会大幅下降。
如果你不能进入状态,无法将注意力集中在任务上,那么就休息一下,做一些其他事情。
不要以无聊为借口,在一个又一个任务之间来回奔波,却又完成不了多少工作。
但是,当你真的遇到障碍,无法前进时,不妨试着换一些你可以做得更有成效的事情。
07
尽可能自立
你应该尽力尝试处理所有分配给你的任务。虽然这不会提高你的工作效率,但是如果你不断地向其他工程师寻求帮助,则可能会降低他们的生产力(记住,他们也需要保持专注,避免干扰)。
如果你正在做一个需要更多知识的任务,而你又不想经常打断其他工程师,那么你可以有以下几种选择:
花点时间自学,这样你就能完成任务了。虽然这可能会影响到你短期的工作效率,但是你所获得的知识将帮助你完成未来类似的任务。
去见你的经理,解释你遇到的问题。讨论一下是否可能把任务重新分配给更有经验的人,然后给你分配一个你能够更好地处理的任务。
与你的经理安排一次会议,在不太影响其他工程师工作效率的时间(例如,在工作日的早上)寻求帮助。
08
识别何时需要帮助
有时候,你的自立态度可能会有点过头。你可能在一个问题上花费了太多的时间,而你的队友只需要几分钟就能解决这个问题。
成为一个卓越程序员的一个方面是,认识到自己陷入困境,需要帮助才能继续前进。
当你被困住的时候,最好的方法是设置一个定时闹钟——在被困在这个问题上几分钟、几小时甚至几天之后,寻求帮助。
如果你知道该向谁寻求帮助,那么就直接寻求帮助。如果你不确定,那么就和你的经理谈谈。
最有可能的情况是,你的经理会指引你找到合适的人,这样你就不会打扰到那些无论如何也帮不了你的人。
团队会议(每天或每周)是向团队成员寻求帮助的好地方。
如果你手头上有好几个任务要做,而你又被困在一个特定的任务上,那么可以把它放在一边,做其他任务(如果可能的话),然后把你的问题留到团队会议上来问。
如果你在会议之前把工作做完了,则可以让你的经理分配一些其他工作,这样你就不必打扰别人了。此外,在处理其他任务时,你可能也会找到解决方案。
09
克服士气低落
没有什么比团队成员士气低落能更快地扼杀一个项目了。这里有一些建议可以帮助你克服士气低落:
了解项目的商业价值。通过了解或提醒自己项目的实际用途,你将对项目投入更多的热情,也更感兴趣。
对项目(你的部分)负责。当你对这个项目负责时,你的骄傲和荣誉就与它绑在一起了。不管发生什么事情,请确保你总是可以谈论自己对项目所做的贡献。
避免在你无法控制的项目问题上投入精力。例如,如果管理层做出了一些影响项目进度或者设计的糟糕决定,那么就在这些限制范围内尽最大努力工作。当你可以努力去解决问题时,不要只是坐在那里抱怨那些管理决定。
如果你的个性给你的士气带来了问题,请与你的经理和其他受影响的人员讨论一下。沟通是关键。任由问题继续下去,只会导致更大的士气问题。
时刻警惕可能会降低士气的情况和态度。一旦项目团队的士气开始下降,通常就很难恢复。你越早处理士气问题,就越容易解决它们。
有时候,财务、资源或者个人问题都会降低项目参与者的士气。作为一个卓越的程序员,你的工作就是躬身入局,战胜挑战,继续编写卓越的代码,并且鼓励项目中的其他人也这么做。这样做并不总是容易的,但是没有人说过成为一个卓越的程序员是容易的。
本文节选自《编程卓越之道(卷3):软件工程化》一书!
想要了解如何更好地进行软件开发,走向卓越吗?
推荐阅读本书!
▊《编程卓越之道(卷3):软件工程化》
[美] Randall Hyde(兰德尔・海德) 著
张若飞 译
媲美高德纳TAOCP的程序设计领域经典系列
100本书都没有讲明白的事情被这本书说清楚了
机器原理→底层语言→高级代码→团队生产力
本书深入介绍了从开发方法、生产力到面向对象的设计需求和系统文档的方方面面。
通过本书,你将学习到:为什么遵循软件匠艺模型可以让你做到最好;如何利用可追溯性来加强文档的一致性;如何通过用例分析来创建自己的UML需求;如何利用IEEE文档标准开发出更好的软件。
通过对高质量软件开发中技能、态度和道德方面的深入讲解,本书揭示了如何将工程原理应用于编程的正确方法。在这个过程中,Hyde不仅会教给你规则,还会告诉你什么时候该打破规则。他不仅会启发你认识什么是最佳实践,同时还会让你发现适合自己的最佳实践。本书中包含了大量的资源和示例,它是你编写代码的最佳指南,将让你从同行中脱颖而出。
(限时下单立减50,快快扫码抢购吧!)