干了5年初级程序员,我好像开窍了……

很多刚刚踏入职场的“初级程序员”常常会期待自己在不断提升技能和丰富实践经验后,有朝一日晋级为“高级程序员”。

近日,一篇《是什么造就了高级程序员?编写软件与建筑系统》的文章,在Hacker News上引发了许多程序员的关注与讨论。不少开发小白感叹:我该如何跨越成为高级程序员,需要做哪些努力?

那么,这两者之间都有哪些区别呢?

干了5年初级程序员,我好像开窍了……_第1张图片

初级程序员 vs. 高级程序员

从工作内容的角度出发,两者最大的区别,其实在于更关注的是“软件”还是“系统”。

初级程序员关心编写软件。因此,会重视代码质量,采用最佳实践,尝试采用尖端技术。他们在学习新技术方面投入了大量时间。对初级程序员来说,最终的目标是创建优雅的、可执行的、可维护的软件。

高级程序员关心构建系统。编写软件只是构建系统中的一个步骤。首先,他们需要对“一个软件是否需要创建”的问题做出思考,例如它会解决什么问题、为什么解决。并且,他们还会询问谁将使用该软件以及以何种规模使用该软件。同时,他们还需考虑软件将在哪里运行,以及如何监控它是否正常工作,软件是否真正解决了问题等。

高级程序员的不一样经历

事实上,构建系统比编写软件更复杂且困难,但也能带来更多的不一样的经历。

作为最了解软件的人,高级程序员懂得如何运行它、监视它、扩展它,更重要的是,他们的分析思维和解决问题的能力,对产品要求的见解非常有价值。

在构建系统的过程中,高级程序员需要参与以下的工作内容(非详尽):

  • 明确需求 。在与产品经理合作时,能够了解他们的问题并高效解决;

  • 明确非功能性需求。需要与项目经理讨论系统应处理多少用户,对性能、吞吐量、延迟的要求,以及任何安全性或合规性注意事项等;

  • 规划迭代。在团队合作中提出实施计划,确保某个期限内可是实现的目标;

  • 确定依赖关系。在识别了团队外部的依赖关系后,直接与EM或团队合作,为他们获取一些ETA,随之相应地调整团队的目标;

  • 测试。根据公司运营方式,需要与自身团队或QE团队一起决定测试策略。就推出所需的质量阈值达成一致(例如,没有未解决的主要错误或测试覆盖率超过 X%);

  • 部署。与团队合作,决定如何部署系统。例如是否需要一些新的基础架构、是否可以重用现有的基础架构、成本预算等;

  • 可观察性。需要决定如何监控系统的运行状况,并设置解决生产问题的流程。同时,使用第三方解决方案(如相扑逻辑)为此目的设置监视器和仪表板;

    推出沟通。在与团队和 PM 就推出日期达成一致时,需要确保所有利益相关者了解,并检查是否需要更改文档;

    衡量成功。确定自身知晓项目是否成功的指标,例如是否有人使用新系、用户是否完成任务等,高级程序员可以利用可观察性套件来实现。

网友:“高级”的头衔不等于“高级”的角色

从初级程序员到高级程序员,“打怪升级”之路必然会面临重重挑战。在时间的沉淀下,程序员的技能不断提成,也收获了属于自己影响力,是否就能进阶为高级程序员呢?“高级”、“大师”这类的“头衔”是否真正具备意义?

在Hacker News上,文章得到了许多程序员的反响:

  • “从初级到高级,应有一个客观的进步阶梯,不能用时间来定义”;

  • “虽然技术知识至关重要,但它不应该成为某人能否高级程序员的决定性因素”;

  • “有效沟通能力、协作能力和指导能力对高级程序员也很重要”;

  • “在我的团队中,有几个非常资深的程序员仍然在认真的编码”;

  • “当我不为工作而编码时,我学到的最有趣的技术”。

时下,拥有职场竞争力变得越来越重要。对于程序员而言,夯实自身技术知识、提升技能固然重要,但并非能成为高级程序员的关键。每一个高级程序员都不只是代码的搬运工,也不止于专注技术,他们同样具备思考、协作、沟通等其它的职业能力。如果你想进阶为一个高级程序员,会从哪个方面开始努力呢?

参考链接:

  • https://codewithstyle.info/software-vs-systems/

  • https://news.ycombinator.com/item?id=32809817


《新程序员001-004》已全面上市,欢迎扫描下方二维码或点击进入立即订阅,即可畅享电子书及精美纸质书!

你可能感兴趣的