Skip to content

如何成为一名优秀的软件工程师?

前言

注:这是一篇英文翻译,How To Become A Great Software Engineer? By Milan Milanovic

众所周知,成为一名软件工程师是一件很有挑战性的事情。你需要看很多的书,学习很多的内容来不断提升自己。

在我的职业生涯中,我发现了很多优秀软件工程师的不同之处,而这有一份关于如何成为优秀软件工程师的建议:

1). 深入的精通一门编程语言

选择一门编程语言,然后深入地专研,了解它的方方面面,直到变成做到精通。现如今有很多编程语言可以选择,比如Python、Java、C#、Rust等。

2). 学习软件工程概念

当你已经掌握了一门编程语言,包括语法、语义、结构等,下一步就是学习不同的软件工程概念,比如:

  • 软件架构
  • 软件设计
  • 设计模式(Design Patterns)
  • 整洁代码(Clean Code)
  • SOLID、DRY、KISS和YAGNI原则

注:

  • DRY(Dont Repeat Yourself): 每个功能只定义一次,复用代码。

  • KISS(Keep It Simple, Stupid): 每个功能简单清晰,直接明了。

  • YAGNI(You Ain’t Gonna Need It): 不要过度设计,够用就好。

  • SOLID:

    • SRP(单一功能): 一个类或对象只负责单一功能,减少耦合
    • OCP(开闭原则): 打开扩展功能,关闭修改功能
    • LSP(里氏替换): 可以用子类实例替换父类实例
    • ISP(接口隔离): 多个接口比单个臃肿接口更好
    • DIP(依赖反转): 使用抽象思维,而不是基于细节编程

3). 学习完整的软件开发生命周期

尝试去了解完整的软件开发生命周期(SDLC),从需求分析到产品部署;学习敏捷方法论(Agile methodologies)、开发运维一体化(DevOps)和质量保证(QA Test)。

并且去尝试做不同的项目,你做的项目越多,你就能学到越多,从而成长越快。

4). 做一个有产品思维的工程师

当在做项目的时候,不要止步于初步的想法或构想,而要去实现它;想一想,你的项目管理领导会有什么别的主意或方法?

尝试去理解整个完整的系统如何运转,并且想一想它在商业上是如何运作的;成为一个拥有端到端的产品能力的人。

5). 提高你的沟通能力和软技巧

对他人保持尊重,进行有效的沟通,保持谦卑心态。与人为善并不会让你损失什么,但却很有用。

尝试结对编程。

和别人谈论工程领域之外的事情,可以是喝咖啡或吃午饭时,也可以是仅仅在走廊闲聊几句。

6). 有意识的学习

我们需要不断学习,但关键是怎么学和什么时候学。

不要仅仅学那些直接拿过来就可以快速提高工作效率的东西,还要有意识的去知道它的工作原理;这个理解底层原理的过程很多时候会觉得多此一举,但潜移默化中就会产生巨大的效果。

7). 和导师一起工作

加速职业发展的最快捷方法就是找一个导师,和优秀的人一起工作,他可以帮助你找到短板,还可以带给你新的机会。

导师既可以来自于组织内部,也可以来自外部。

8). 采用好的工程实践

学习并遵循下列好的实践方法,比如:

  • 使用版本控制(Version Control)
  • 编写正确的测试用例(Unit Test)
  • 学习重构(Refactor)
  • 学习测试驱动开发(TDD)
  • 代码审查(Code Review)
  • 开发运维一体化思维(DevOps)

同时,学习使用IDE和它常用的快捷键,包括调试器(Debugger)的。

英文原文

  • How To Become A Great Software Engineer?
  • Author: Dr Milan Milanovic

As we all know, being a software engineer is a challenging thing. You need to see a lot and constantly1 improve yourself. But, during my career, I found what differ excellent software engineers, and here are recommendations on how to become one:

1). Master one programming language in depth

Take one programming language and go in-depth with it. Learn everything you can and be a master of it. Some good languages you can select today are Python, Java, C#, and Rust, ...

2). Learn Software Engineering concepts

When you master a programming language, its syntax, semantics, and constructs, the next thing is to learn different software engineering concepts, such as:

  • 🔹 Software architecture
  • 🔹 Software design
  • 🔹 Design patterns
  • 🔹 Clean code
  • 🔹 SOLID, DRY, KISS, and YAGNI principles

3). Learn the complete SDLC process

Try to understand the complete software development process, from requirements to deployment. Learn about Agile methodologies2, DevOps, and Quality assurance3.

And try to work on different projects; the more projects you work on, the more you will learn new stuff and grow.

4). Be a product-minded engineer

When working on your project, don't settle4 just with specs5; jump to implement it. Think about other ideas and approach6 your product manager with them. Try to understand the complete system, but also how business works. Be an end-to-end product feature owner.

5). Improve your communication and soft-skills

Be respectful of others, communicate clearly, and be humble7. Being kind has no financial cost, but its effects are immeasurable8.

Try pair/mob programming. Talk with people outside engineering, grab a coffee or lunch, or do a hallway9 chat.

6). Learn intentionally

We need to learn, but the trick is when and how. Don't just learn things because this could be more efficient10. We need to know intentionally11, just before we need it, and this will make the biggest impact12.

7). Work with mentors

The fastest way to progress in your career is to find a mentor13. He can help you find your gaps14 and show you some new opportunities. A mentor can be found inside an organization or outside (check specialized services).

8). Use good engineering practices

Learn and follow good practices, such as:

  • 🔹 Using version control
  • 🔹 Write your tests correctly (check the test pyramid)
  • 🔹 Learn how to refactor15
  • 🔹 Learn TDD
  • 🔹 Code reviews
  • 🔹 DevOps mindset

Also, learn your IDE and all the essential16 shortcuts you need. Debugger too.

词汇


  1. constantly, continuously over a period of time; always: the world is constantly changing | he was constantly on her mind. 

  2. methodology, a system of methods used in a particular area of study or activity: courses in research methodology and practice. 

  3. assurance, a positive declaration intended to give confidence; a promise: [with clause] : he gave an assurance that work would not recommence until Wednesday. 

  4. settle, sit or come to rest in a comfortable position: he settled into an armchair. 

  5. spec, short for specification (sense 2 of the noun): our spec chart indicates a transmission speed of 9 seconds. 

  6. approach, a way of dealing with something: we need a whole new approach to the job. 

  7. humble, having or showing a modest estimate of one's value or importance; not arrogant or self-important: I felt very humble when meeting her 

  8. immeasurable, /i(m)ˈmeZH(ə)r(ə)bəl/, too large, extensive, or extreme to measure: immeasurable suffering. 

  9. hallway, another term for hall 

  10. efficient, (especially of a system or machine) achieving maximum productivity with minimum wasted effort or expense: fluorescent lamps are efficient at converting electricity into light. 

  11. intentionally, deliberately; on purpose: I didn't do it intentionally | I wasn't sure if it was intentionally funny or not. 

  12. impact, the action of one object coming forcibly into contact with another: there was the sound of a third impact | bullets that expand and cause devastating injury on impact. 

  13. mentor, an experienced and trusted adviser: he was her friend and mentor until his death in 1915. 

  14. gap, a break or space in an object or between two objects: he came through the gap in the hedge. 

  15. refactor, restructure (the source code of an application or piece of software) so as to improve operation without altering functionality: developers might be asked to review the architecture and, where possible, refactor code to create smaller and more manageable components. 

  16. essential, absolutely necessary; extremely important: [with infinitive] : it is essential to keep up-to-date records | fiber is an essential ingredient.