如何成为高级工程师?编写软件还是创建系统

在 Hacker News 上有一个正火的讨论,大家可以参与其中。

初级程序员关心编写软件。他们看重代码质量,运用最佳实践,尝试应用最前沿的技术。他们投入大量时间在学习新技术上。对他们而言,最终目标是要创造优雅的、高性能、可维护的软件。
高级程序员关系构建系统。对他们而言,创建软件只是其中的一个步骤。首先,他们会问是否需要创建软件。他们会问软件能解决什么问题,并且它为是否重要到要被解决。他们询问谁将使用这个软件,并且在多大程度上使用。他们思考软件在何处运行,以及如何监控软件是否正常运行。他们同样判断软件是否真正的解决了它应该解决的问题。
建立系统比单纯的写代码难的多。它令人更加脱离舒适区。作为一个工程师,呆在自己的洞穴里,专注于完善这段漂亮的代码是非常诱人的。这种想法是偷懒的,认为确定需求是产品经理的职责,软件运行是运维团队的职责,自己只是写代码的。
然而,当你参与其中的时候,你将带来许多价值。你是唯一的掌控者,如何运行代码,如何监控天它,如何将它大范围推广。更重要的是,善于分析的头脑和问题解决技巧让你洞悉产品需求非常有价值。
技术专长当然非常重要,优雅的,性能优秀的,可维护的代码更加易于运行,故障更少,更易于拓展,更容易 debug。然而,他可能解决了一个错误的商业问题。或者,客户可能因为性能问题而不喜欢它,而你甚至不知道这些性能问题,因为你没有对其进行监控。
让我们深入看看创建一个系统涉及到的各个部分:

  1. 定义需求:和产品经理一起工作,试图理解他们要解决的问题,也许你会有其他思路,或者以更省力的方式解决问题?
  2. 定义 NFR(非功能性需求):和你的产品经理讨论非功能性需求:这个系统服务多少用户,性能的指标有哪几个?有安全或合规的需求吗?我们需要审计吗?所需的可用性是多少?
  3. 规划迭代:和你的团队一起提出一个实施计划,确保定义出一个最小,可演示的版本的里程碑,这样你就可以尽快开始交付价值,进行可行性验证
  4. 查明依赖关系:确保你判断了所有的依赖,该依赖可能来自你的团队外部,以此来调整你的迭代计划。
  5. 测试:取决于你的公司如何运行,决定与你和你的团队测试的规模。
  6. 部署:和你的团队一起决定如何发布系统。你是否需要新的基础设施,或复用现有的基础设施?如果你需要很多资源,那么成本是多少?
  7. 监控:决定你将如何观察系统的健康程度,以及如何采用措施解决问题。可以使用第三方的解决方案建立监控系统。
  8. 发布前交流:一旦和团队就软件发布时间达成共识,确保各个相关方都知道这个信息。需要检查是否有文档需要变更。
  9. 衡量成功:根据标准来进行度量,将会告诉你该产品是否成功。新系统有人用吗?用户通过系统是否完成了他们的任务?你可以利用监控套件达到此目标。

我遇到了太多的程序员,他们坚信进阶为高级程序员的方式是持续投入时间到自己的编程技巧中。虽然这很重要,但对你的公司来说,它在意的是在整个生意中,你施加了多少影响。将重心从单纯的编码转到构建系统,可以是你在增强它方面处于更好的位置。

我自己翻译的文章,说实话还没机翻的好。。。
翻译自:https://codewithstyle.info/software-vs-systems/

你可能感兴趣的:(如何成为高级工程师?编写软件还是创建系统)