高效的时间管理是大部分成功的软件工程师具备的能力。它能够帮助你在职业生涯上快速进步,而不是每个敏捷迭代末疯狂加班。
每个企业都试图通过自动化流水线,升级版IDE和DevOps来降低成本提高效能。而通过避免以下六种低效陷阱可以让你的领先一步,收获高效的一天。
过度开发
你是否曾经将需求复杂化,考虑哪些奇奇怪怪的可能会出现的场景。比如设计的这个API是否可以无缝的接入其它平台?或者控制面板是否能够自动发送报告?
控制住这些想法,不要过度设计!你不应该话大量时间在一些过于超前的功能上。而且,代码越多意味着更多的bug和不必要的脚本将会加到本已臃肿的程序中,从而导致代码可读性扩展性的降低。
要想避免这一点,要经常反问自己这段代码是否在解决当前的需求。你只需要考虑用例和边界场景,不要花大量的时间在一个短期内不会用到的功能上。
如果你不确定是否要新增一个功能用于解决一个潜在的极端场景,在下一次的敏捷会议上提出来并和大家讨论。这能帮助你节省大量时间,并且促进团队合作精神。
一次又一次的编写同样脚本
作为一个工程师,你应当尽可能的遵循不要重复开发原则(DRY-Don’t Repeat Yourself)来提效。 有两种方法可以贯彻这一原则:减少冗余代码或是流水线开发流程。
代码冗余
搭建一个服务或者是虚拟环境往往意味着需要写同样的脚本并且反复执行。如果你需要搭建一个包含四层的分层架构服务,并且适配到开发,测试,预发和生产环境上,它们所需要的代码和执行的步骤基本是相似的。除此以外,基础服务的依赖正在变得日益复杂。上述的工作不仅重复而乏味,人工执行还可能会导致误操作带来故障。
低代码平台提供了开箱即用的工具,包括可复用的组件和图形化的界面拖拽生成器。当然,你不能为每个场景找到完美适配的方案,但是它可以完成最基础的重复的工作。自动化流水线可以帮助你构建,复制和部署代码到很多的环境上。
重复流程
详细的列出开发过程中的所有步骤并且思考你是否可以去掉其中几步,将它们自动化吧。
除此以外,额外关注执行超过两次以上的步骤。如果可以在需要做这些任务时通过一键触发自动化流程完成,你将极大提高效率。
在开始自动化之前,你还需要评估一下自动化的性价比。建议问一下自己:自动化真的比手动操作更节省时间吗?我是否在后面几周频繁的做这个操作?
如果答案是肯定的,开始写自动化脚本吧。它能极大减少浪费时间(和头痛)。
从0搭建系统
如果一个开发者每次搭建一个Web服务都需要写JDBC数据库链接的定制化代码,它将永远没法完成项目的开发。
开发可维护的并且安全的软件是我们的最高优先级。但是,这并不意味着要从0搭建系统。我们不需要重复造轮子,并且开发一些已经有现成实现的功能。
公司需要的是高效的工作,而从0搭建系统所花费的时间在大多数情况下都是不必要的。所以使用现成的二方包或框架并对其做一些定制化的处理来满足客户的需求。
你还可以查看公司的代码仓库,如果有些功能和你需要实现的类型,你完全可以调研一下是否通过一个方法调用就可以拿到你想要的数据,
然而,在处理一些敏感数据如金融或健康类的数据时,从0搭建功能来保证安全性就很有必要了(毕竟你不知道引入的框架是否存在安全问题)。但是,在大多数场景下,线程框架、开源库或是付费插件完全够用了。
糟糕的测试用例
在自动化和手动测试之间技术选型时,必须注意一个微妙的平衡。因此,让我们了解如何使用它来制定有效的测试策略。
编写一个小的手动测试来确保您添加的新功能正常工作很容易。但是当你扩展时,运行这些手动测试需要更多的时间,尤其是当你试图找到那个不断破坏你的代码的讨厌的错误时。
如果你的应用程序或网站有许多组件,那么正确地运行特定测试的可能性也会增加。自动化测试甚至更有效地运行测试的系统有助于避免这种情况。
你可能需要花些许时间来设置自动化测试。但是,一旦它们被编写好,无论进行任何代码更改,它们就可以被重用和触发。因此,你不必因为添加了新功能而手动重新测试以前的功能。
相反,选择正确的任务进行自动化同样重要。不幸的是,这是QA自动化测试中最常见的错误之一。很容易陷入过度自动化的陷阱并最终逐个脚本地复制测试。这是一个重大的时间浪费,因为弄清楚为什么这些复杂的自动化失效了仍然是一项人工操作-——这正是你想要避免的事情。
不要让它变得比它预期的更复杂。相反,应专注于简单的测试用例,而忽略具有许多依赖项的低频的或复杂的任务。在开始编写任何单元测试用例之前优化和计划你的测试策略,将帮助节省大量时间。
不正确的代码优化
这是一种相当常见的时间浪费,通常很难从一开始就发现。你花费大量时间为低优先级甚至可能不需要的用例优化代码。
你唯一的关注点应该是让功能正常运行,然后再考虑优化。但是,不要设定不切实际的优化目标。优化决策通常是不同场景定制的。
如果性能优化只需要几分钟,那就去做吧。但是,在大多数业务场景中,皮毛级的优化通常对项目来说并不重要。进行优化是好事吗?是的。但是,如果您需要花费数小时才能获得1%的性能提升,最好先与使用方进行讨论。
举个例子,假设您正在为内部团队开发网页。如果网站在1秒内成功加载,你实际上不需要优化到在0.5秒内加载该网站,因为这不会显着改善业务运营。然而,如果它是一个电子商务商店,让它在一秒内而不是两秒内加载将是一个强烈的诉求。
解决这种时间浪费的最佳方法是定期从用户那里获得反馈。根据他们的具体用例进行优化,而不是构建自己的用例。
6无效沟通
无效的沟通是软件开发中时间浪费的直接原因,有时是间接原因。
软件开发包含许多步骤——各个团队成员致力于不同的产品功能,然后交到QA团队进行测试,最后成为用户的产品。
沟通至关重要,尤其是在开发和测试阶段。假设开发人员误解了需求的商业用途。产生的误差会使解决方案过于复杂,从而导致技术方案错误并增加异常或返工的机会。
由于沟通是软件开发中最人为介入的方面,因此无法完全消除这种时间浪费。然而,有了适当的项目管理工具和协作环境,它完全可以降低。
在个人层面上,在开会或开发功能时,始终考虑大局。学会倾听和有效协作。养成将会议讨论的内容写下来或发送摘要的习惯,以对齐双方的期望。
除此以外,尽早沟通。不要猜测需求,并在可能的情况下,在正式投入整个项目之前做一个demo演示。
总结
本文关键是养成避免这些浪费时间行为的习惯。短期生产力“提示和技巧”只能带您到此为止。但是良好的编码实践和自我意识将帮助您提高效率。注意你的时间花在什么地方,试着减少它,你就可以成为一名成功的软件工程师了!