如何成为一名高级工程师?编写软件 vs. 构建系统

107 阅读5分钟

原文地址:codewithstyle.info/software-vs…

原作者:Miłosz Piechocki

文章采用意译,而非直译,如有不准确的地方,请在评论区指出~

初级工程师关注软件编写。

通常来说,初级工程师更加关注代码质量,喜欢探索解决问题的最佳实践,并不断地尝试前沿技术。他们通常会投入大量的时间和精力去学习新的技术。对他们来说,首要的目标是创建简洁的、高性能以及可维护的软件应用。

高级工程师关注系统构建。

对他们来说,软件的编写仅仅是整个系统中的一个步骤。

首先,他们会提出疑问,我们是否真的需要创建该软件?创建的软件能解决什么问题呢?解决这些问题是否真的很重要?

然后,进一步去调研谁会使用他们的软件,用户规模预计是多少?同时思考软件会在什么环境下运行?如何监控软件从而保障软件正常稳定地运行?

最后,如何去衡量软件是否真正地解决了我们遇到的问题且这些问题是值得被解决的?他们需要持续地做出判断。

我们知道,构建系统比构建软件更加困难,有时甚至会非常棘手。对一名软件工程师来说,只关注代码本身并可以持续对其做出优化改进是非常有诱惑力的。而且通常我们都认为,确定产品需求是产品经理的职责,软件应用部署应该由运维团队来操心。然而,通过参与构建系统的各个方面,你可以创造很多价值。

你会成为团队中最了解软件的那个人,知道如何更好的运行它、监控它以及如何更加轻松地扩展它等等...

更重要的是,你的分析能力和解决问题的能力对你理解和洞察产品需求非常有价值。

专业的技术能力当然也非常重要。一个简洁的、高性能的和可维护的软件更容易运行,更少发生故障以及更易于扩展和重构。然而,它可能解决了一个错误的业务问题或者由于性能问题导致用户并不喜欢它,因为没有实时监控,你甚至找不到问题所在。

让我们深入了解一下构建一个系统,需要做哪些事情,包括但不限于如下:

  • 准确定义需求 - 与产品经理一起合作,了解他们想解决的问题,也许你可以找到解决问题的最佳途径;

  • 定义非功能需求 - 与项目经理一起讨论非功能需求,即系统要处理多少用户,包括:对系统的性能、吞吐率和延迟有什么要求?是否有任何安全或合规方面的考虑?是否需要审计?对可用性有什么要求?

  • 制定迭代计划 - 与团队一起制定实现计划,并确保你定义了最小化的、可演示的里程碑(编者注:产品的重要时间节点),这样你可以快速的交付产品并验证其价值,同时与项目经理的里程碑保持一致;

  • 确定依赖关系 - 确保你已经梳理清楚团队之外的所有依赖关系,并与工程管理团队一起合作或直接与团队一起考虑产品最终上线时间,同时相应地调整你们的里程碑;

  • 测试 - 跟公司的整体运作保持一致,与你的团队或 QE 团队一起制定相关的测试策略并指定产品上线时需要达到的质量指标(例如:修复主流程的所有 bugs 或测试覆盖率应达到 X%);

  • 部署 - 与团队一起确定如何部署系统。是否需要搭建新的基础系统设施或者是直接复用已有的?如果你需要构建新的软件设施,成本有多大?

  • 监控 - 决定如何监控系统的稳定运行并制定及时地处理线上问题的流程(例如:预留 on-call 团队),还是使用第三方解决方案?

  • 推广宣传 - 一旦与你的团队、PM 确定了产品上线时间,请确保该时间节点已经同步到所有的参与者和利益相关者。

  • 埋点与数据收集 - 通过埋点,收集用户的关键使用数据并制定相关的指标来判定项目是否成功。我们需要知道,谁在使用我们的系统?使用我们的系统是否解决了用户的问题;

  • ......

我遇到过非常多的工程师,他们确信提升职业生涯的唯一方法就是不断的提高技术能力。专业技能当然是非常重要的,但我们需要明确一点的是,对一家公司来说,他们真正在意的是你对公司的重要业务有多大的影响力。

因此,将你的工作重点从「软件」转移到「系统」上,这样可以获得一个更好的职位,从而提升你的职业生涯。

参考资料

  1. What Makes a Senior Engineer? Writing Software vs Building Systems - codewithstyle.info/software-vs….

大家加油 :)