What is the difference between a junior and a senior software developer? 15 things I wish I had known sooner What is the difference between a junior and a senior developer? 15 things I wish I had known sooner

2025-05-24

初级和高级软件开发人员之间有什么区别?我希望早点知道的15件事

初级开发人员和高级开发人员有什么区别?

我希望早点知道的 15 件事

本文最初发表在我的博客www.yourdevopsguy.com上。

初级开发人员和高级开发人员有什么区别?

刚开始编程的时候,我也感到迷茫和不知所措。我以为只要专注于编程技能就能晋升为高级程序员。随着时间的推移,我意识到了初级程序员和高级程序员之间的区别。

高级软件工程师在无人指导的情况下,为复杂、开放式的问题设计解决方案。他们负责收集需求、设计解决方案、执行任务、编写代码、部署和维护系统。他们关注系统的性能、安全性、测试、可扩展性、伸缩性、检测和可维护性。

这是我后来在亚马逊的一次关于如何晋升的培训课程中学到的。他们期望资深工程师能够独立解决问题,而初级工程师则需要指导。这并不意味着他们无所不知。这包括知道何时以及如何提问,这需要经验。高级工程师承担的任务是其他人不愿做的,而且这些任务无法通过简单的谷歌搜索来解决。

不要把多年的经验等同于智慧。有些人拥有十年的经验,有些人却经历了十次同样的岁月。我建议,永远不要对自己正在做的事情感到太安逸,这样才能不断成长。

这是我作为软件开发人员第一年写下的一些建议。这些建议主要来自于我犯过的错误以及对团队领导和首席工程师的观察。

我希望早点知道的 15 件事

如何更高效地工作

1. 对于你从事的每一项任务,都要有一个明确的完成定义

这有助于规划,让你专注于需要做的事情,并更容易记录你的工作。即使是开放式的任务,也应该有一个明确的目标:例如,决定使用技术 A 还是 B。

2. 定义范围

确保任务范围明确。不要把时间浪费在你或你的团队能力范围之外的事情上。

3. 时间估算很难

当我需要的时候,我常常会忽略:

  • 设计并选择解决方案

  • 更改或添加新测试

  • 让我的同事批准我的拉取请求

4.心态

看看亚马逊的领导力原则。它们为你向高层过渡提供了良好的心态,尤其是:

  • 所有权

  • 行动偏见

  • 深入研究

  • 赢得信任

  • 不同意但承诺

有时原则可能会相互矛盾,所以请根据你的情况做出决定。高级开发人员不仅仅是编写代码,还是做出有影响力决策的领导者。

如何优化你的工作

5.自动化

尽可能地自动化。显然,从中长期来看,自动化可以节省大量时间,但这与迭代次数有关,而非时间。你需要制定规则来决定何时自动化任务。就我个人而言,如果我发现自己重复做了两遍可以自动化的任务,那么就该编写脚本了。

6.循序渐进

不要在开始测试之前就写上千行代码。逐步地工作并 验证你的修改 。检查代码是否可以编译,或者你忘记导入库了(好的IDE会这样做)。从一开始就把事情做好比重复做那些草率的工作更容易。从一开始,就编写可读的代码,进行单元测试,进行小规模的重构等等。

7.过早优化是万恶之源

避免过早优化。这不同于一开始就不使用最合适的数据结构和算法。你的重点应该是编写有效的代码,然后再提高其效率。编写代码后,使用性能分析器找出真正的瓶颈,并专注于优化它们。

8. 买一只小黄鸭

在寻求帮助之前,先准备一只小黄鸭。可以是虚拟的。在寻求帮助之前,先向你的小黄鸭解释一下问题以及你正在尝试如何解决它。逐行检查你的代码。你很可能会找到解决方案。如果没有,你也能更好地向同事表达你的问题。

9. 修改你的假设

当事情出错时,检查你的假设。我浪费了大量时间来调试以下问题:

  • 读取错误的配置文件

  • 使用内部 wiki 页面中的过时信息

  • 其他人的代码存在问题

  • 复制粘贴相关错误

记录和快速聊天可以加快速度。

10.阅读文档

我也曾因为懒惰而避免阅读文档。如果你们团队的文档不够清晰或信息不足,请改进它

11. 注意评论

“代码从不说谎,但注释有时会说谎。”——罗恩·杰弗里斯

最好的注释是你不必写的。注释就像代码一样,可能会腐烂 并产生误导。如果你要写注释,请确保它是你能写出的最佳注释。

  • 不要说显而易见的事情

  • 简洁而准确

  • 检查你的语法和标点符号

  • 删除产生噪音的评论

12.学会沟通

编程比人们想象的更需要人际互动。你需要与人互动来定义任务、提出问题。此外,阅读和编​​写文档和注释时也需要人际互动。

将清晰、有效的沟通视为工作要求的一部分

如何处理复杂、开放式的任务

13. 提出问题

在开始解决问题之前,理清问题至关重要。以下一些问题可以帮助您更好地收集需求:

  • 您的系统需要什么输入?

  • 什么是无效输入?收到无效输入时该怎么办?

  • 您需要产生什么输出?

  • 我们的服务水平协议 (SLA) 是什么?

  • 我们预计有多少用户?

  • 每秒有多少个请求?

  • 我们需要处理国际化吗?

  • 我们的数据库是否需要强一致性,或者最终一致性就足够了?

有时,你可能无法掌握解决问题所需的全部信息。很可能没有人会掌握这些信息,而你有责任把一切都弄清楚。从你开始承担这类任务的那一刻起,你就会知道自己正在以更高的水平开展工作。

14.先在纸上设计

在开始编码之前,用纸笔白板勾勒出解决方案。除非你正在解决一个微不足道的问题,否则尽量提出不同的替代方案。然后,尝试打破你自己的设计。问自己以下问题:

  • 系统可能在哪里崩溃

  • 有哪些瓶颈

  • 我们依赖第三方吗?如果他们那边出了问题怎么办?

  • 我们可以使用缓存来提高性能吗?

    • 什么是合适的 TTL?
    • 如果我们暂时提供过时的内容,可能发生的最糟糕的事情是什么?
  • 我们如何记录和监控系统?

记录您的选择、背后的理由以及潜在风险。

额外提示

我想我在某个内部 wiki 页面中读过这个,但它帮助我看到了我的不足之处。

15. 不要只做一招

如果你只知道如何做一件事,那么你很可能在其他领域存在差距。学习其他编程语言。创建一些机器学习原型,即使你是一名 Android 开发者。如果你是一名前端开发者,学习后端或深入研究 Linux 的内部机制。

你无需成为专家,但你会理解各个部分是如何组合在一起的。你或许能从其他领域学到一两样东西,并将其运用到你的职业生涯中。你可能会发现自己喜欢上了一些从未尝试过的新事物,并因此转行!

附言:希望本文对你有所帮助。如果觉得有用,请点赞并分享,访问我的博客www.yourdevopsguy.com,或者在Twitter上与我们交流。

文章来源:https://dev.to/codinglanguages/what-is-the-difference- Between-a-junior-and-a-senior-software-developer-15-things-i-wish-i-had-known-sooner-4hpl
PREV
28 个付费撰写技术文章的网站
NEXT
如何学习数据结构和算法。你必须知道的 20 种解决问题的技巧基于指针的技术基于递归的技术排序和搜索扩展基本数据结构杂项结论