如何成为一名优秀的工程师_成为一名优秀软件工程师的七件事

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

Multiple times many of you might have wondered what makes someone a good software engineer. In most cases, there’s a tendency to think that having an intelligence way above the average is the only way to be a good software engineer. I’ll tell you one thing, that’s totally wrong!

你们中的许多人可能多次想知道是什么使某人成为优秀的软件工程师。 在大多数情况下,人们倾向于认为拥有高于平均水平的智力是成为一名优秀软件工程师的唯一途径。 我告诉你一件事,那是完全错误的!

I’ve been in this sector for almost 15 years and I can strongly affirm that intelligence doesn’t guarantee being a good software engineer or developer.

我从事该行业已经有15年了,我可以肯定地说,智能并不能保证成为一名优秀的软件工程师或开发人员。

Intelligence gives you the ability to solve problems quicker than others, seeing things that others won’t see or maybe be able to foresee some problems earlier than others, but that won’t make you good at writing code. Let’s say that all the benefits that someone could get by being intelligent could be largely overshadowed by all the disadvantages brought by not being a good developer: writing ugly and unmaintainable code, poor design choices, poorly tested code, etc.

智能使您能够比其他人更快地解决问题,看到别人看不到的东西,或者比其他人更早地预见到某些问题,但这并不能使您擅长编写代码。 假设某人通过变得有智慧而获得的所有好处,在很大程度上可能会被一个不好的开发人员所带来的所有劣势所掩盖:编写丑陋且难以维护的代码,糟糕的设计选择,不良的测试代码等。

I’ve seen some incredibly intelligent people writing the most horrible code I’ve ever seen, and at the same time, I’ve seen not so clever or experienced people writing such clean code that it could impress anyone. So there must be something else that makes the difference.

我见过一些非常聪明的人在编写我所见过的最可怕的代码,与此同时,我还没有见过那么聪明或经验丰富的人写过如此干净的代码,它可以给任何人留下深刻的印象。 因此,必须有其他与众不同的地方。

If intelligence is not the key to being successful in this sector, what are the factors that could make you a good software engineer? Well, it’s hard to come up with a magic “works-every-time” solution, but I’ll give you some hints that I guarantee will get you closer to your objectives.

如果智能不是该领域成功的关键,那么哪些因素可以使您成为一名优秀的软件工程师? 好吧,很难提出一个神奇的“每次都能工作”的解决方案,但是我会给您一些提示,我保证可以使您更接近您的目标。

Let’s go through each of them.

让我们逐一介绍一下。

1.不惜一切代价避免复制和粘贴 (1. Avoid Copy and Pasting at Any Cost)

When I was starting my career, I used to do Copy and Paste a lot; when I say a lot, I really mean a lot. This was definitely one of the biggest mistakes I made when I started.

当我开始我的职业生涯时,我曾经做过很多复制和粘贴工作。 当我说很多的时候,我真的很重要。 这绝对是我刚开始犯的最大错误之一。

The problem with Copy and Paste is that you’re actually not learning much, you just grab some code here and duplicate it there and you miss all the important details within those chunks of code that you copy everywhere. One more thing to keep in mind is that it also leads to code duplication, but hopefully, I don’t need to remind you of that.

复制和粘贴的问题是,您实际上没有学到很多东西,只是在这里获取一些代码并在那里进行复制,却错过了在各处复制的那些代码块中的所有重要细节。 需要记住的另一件事是,它还会导致代码重复,但是希望,我不需要提醒您这一点。

如何成为一名优秀的工程师_成为一名优秀软件工程师的七件事_第1张图片
Photo by freestocks on Unsplash Freestock在 Unsplash上 拍摄的照片

If you don’t start writing code yourself every time, then you will never get fluent with the languages, libraries, or frameworks that you use in your day-to-day work as a developer.

如果您不是每次都开始编写代码,那么您将永远不会流利于开发人员在日常工作中使用的语言,库或框架。

For instance, if every time that you need a builder pattern you Google it, then Copy and Paste the solution and tweak it to your needs, something that I’ve seen very frequently, then you’re not learning anything at all; you won’t be able to write a builder pattern from scratch by yourself! Please stop doing this, you will never get better if you continue doing this.

例如,如果您每次需要构建器模式时都使用Google进行构建 ,然后复制并粘贴解决方案并根据您的需要进行调整(这是我经常看到的事情),那么您根本不会学到任何东西。 您将无法自己从头开始编写构建器模式! 请停止执行此操作,如果继续执行此操作将永远不会变得更好。

Of course, once you get very experienced, you could relax this rule and avoid unnecessary work when it doesn’t add any value. I hope you understand the point and that you’ll be able to apply it in a sensible manner.

当然,一旦您有丰富的经验,就可以放宽此规则,并避免在没有任何价值的情况下进行不必要的工作。 希望您理解这一点,并且能够以明智的方式应用它。

2.每天至少阅读30分钟 (2. Read at Least 30 Minutes Every Day)

This is one of the most important pieces of advice you could ever take in this sector. The IT sector is a fast-paced environment where things are in constant change and evolution, so you have to keep moving as well. If you stop for just a few months and disconnect completely, or if you move slower than the market, I guarantee you will notice the difference and will need to catch up when you’re back in the market.

这是您在该行业中可以采取的最重要的建议之一。 IT部门是一个快节奏的环境,其中的事物处于不断变化和发展的状态,因此您也必须不断前进。 如果您停了几个月并完全断开连接,或者您的移动速度低于市场速度,那么我保证您会注意到其中的区别,并且在返回市场时需要赶上。

In the same way that going slower makes a difference, if you make an effort to go faster than the average, it will also make a difference. This is where daily reading comes into play; if you make an effort to grab a book every day and dedicate at least 30 minutes of your time to read, learn new things and assimilate new concepts, you can be 100% sure that the effort will pay off in the future. Dedicating just 30 minutes of your day to educate yourself, to improve your skills and abilities, will be more than enough to create a competitive advantage with respect to others in the market! It doesn’t sound like a lot of time, does it?

就像变慢一样,您也要努力做到比平均更快,这也会有所作为。 这是每天阅读的地方; 如果您每天努力阅读一本书,并花费至少30分钟的时间阅读,学习新事物并吸收新概念,那么您可以100%确信将来的努力会有所回报。 每天只花30分钟来进行自我教育,提高自己的技能和能力,就足以与市场上其他人建立竞争优势! 听起来好像没有很多时间,对吗?

如何成为一名优秀的工程师_成为一名优秀软件工程师的七件事_第2张图片
Photo by Olia Gozha on Unsplash Olia Gozha在 Unsplash上 拍摄的照片

Just imagine that every time that you’re reading and learning something new, someone else is checking new posts on Instagram, watching Netflix, playing video games, etc. If you dedicate that extra time to reading, you will have a competitive advantage next time that you apply for the job of your dreams over those that spent their time on other stuff. Makes sense, right?

试想一下,每次阅读和学习新知识时,其他人都会在Instagram上查看新帖子,观看Netflix,玩视频游戏等。如果您将额外的时间用于阅读,那么下一次您将获得竞争优势与那些将时间花在其他工作上的人相比,您可以申请自己的梦想工作。 有道理吧?

If you’re not sure about what kind of books you could read, I have a few recommendations for you; these are all books I read in the last decade and I found them very useful:

如果您不确定可以阅读哪种书,我为您提供一些建议。 这些都是我过去十年阅读的所有书籍,我发现它们非常有用:

  • Clean Code: A Handbook of Agile Software Craftmanship by Robert C. Martin

    干净代码: Robert C. Martin 的敏捷软件Craft.io手册

  • Effective Java: 3rd Edition by Joshua Bloch

    有效的Java: Joshua Bloch撰写的第三版

  • Working Effectively With Legacy Code by Michael Feathers

    通过迈克尔·费瑟斯有效地使用旧版代码

You might be saying, “I don’t have time for that,” or “I’m too tired in the evening for that,” stop making up excuses, there’s always time, I’ve been there before as well. You have to get to know yourself if you concentrate better in the morning or maybe in the evening; if you’re able to focus and read productively in the tube, etc. Get to know yourself!

您可能会说:“我没有时间做这件事”,或者“我晚上没时间做那件事”,别再找借口了,总有时间,我也曾去过那里。 如果您早上或晚上集中精力更好,就必须了解自己。 如果您能够集中精力并在试管中高效地阅读等等,那就了解一下自己吧!

Once you get to know yourself, pick the best time in the day that works for you. For me the time it works best is early in the morning, so I normally wake up early around 6 a.m. and I read while I have my first coffee in the morning or right before I start working; that works for me, but that’s completely personal and different in every one of us.

一旦您了解了自己,就选择适合自己的最佳时间。 对我来说,最好的时间是在清晨,所以我通常在早上6点左右起床,在早上或刚开始工作时喝第一杯咖啡时就读书。 这对我有用,但这在我们每个人中都是完全个人化和不同的。

3.使用TDD作为设计工具 (3. Use TDD as a Design Tool)

Many people see TDD only as a way to force you to write tests first, but they miss the key point of TDD: it is a very powerful design tool.

许多人仅将TDD视为强迫您首先编写测试的一种方式,但他们却错过了TDD的要点:这是一个非常强大的设计工具。

The main reason why TDD is a good design tool is that, when followed strictly, it makes you adopt some good practices that will make your design simple, testable, and maintainable. Not only that, remember we were talking about clever people coming up with a solution faster than others? Well, with TDD, that doesn’t really matter in many cases. TDD will lead you to the simplest solution without having to make a big intellectual effort to come up with the solution, so I’d say that TDD helps to close the gap between those who are more intelligent and the average.

TDD之所以成为优秀的设计工具,主要原因是,如果严格遵循它,它将使您采用一些良好的实践,这些实践将使您的设计变得简单,可测试和可维护。 不仅如此,还记得我们在谈论聪明的人想出比其他人更快的解决方案吗? 好吧,使用TDD,在许多情况下这并不重要。 TDD将为您提供最简单的解决方案,而无需花大力气提出解决方案,因此我想说TDD有助于弥合那些更聪明的人和普通人之间的鸿沟。

If you’re interested in having a better understanding of TDD, I’d recommend that you read “Test Driven Development: By Example” by Kent Beck, you can buy it on Amazon here.

如果你有兴趣在具有更好的TDD的理解,我建议您阅读“ 测试驱动开发:通过实例 ”由Kent Beck,你可以买它在亚马逊这里 。

4.与经验丰富的开发人员结对编程 (4. Do Pair Programming With More Experienced Developers)

Pair Programming is a very good exercise for knowledge sharing. However, I don’t think that it should be enforced in a team. Pair Programming should be encouraged but not enforced, it should happen in a spontaneous manner among those members of the team with the right mindset.

结对编程是一种非常好的知识共享练习。 但是,我不认为应该在团队中实施它。 应该鼓励而不是强制执行结对编程,在具有正确心态的团队成员中,结对编程应自发进行。

Not all the stories are suitable for Pair Programming either, the team should decide when to work on pairs in some stories when they consider it’d be very beneficial. The benefit could be for a Junior Developer absorbing coding skills knowledge from a more Senior Developer or maybe just sharing business domain knowledge among different team members. Sometimes it also helps two members of the team to know each other much better and it helps to build up a sense of a team.

并非所有的故事都适合结对编程,当他们认为某些故事对结对非常有益时,团队应决定何时进行结对。 好处可能是初级开发人员吸收了更多高级开发人员的编码技能知识,或者只是在不同团队成员之间共享业务领域知识。 有时,它还可以帮助团队的两个成员更好地了解彼此,并有助于建立团队意识。

如何成为一名优秀的工程师_成为一名优秀软件工程师的七件事_第3张图片
Photo by Alvaro Reyes on Unsplash Alvaro Reyes在 Unsplash上的 照片

The bad news is that some people are too individualist or they just avoid human interactions in general, so they don’t like Pair Programming at all. Don’t try to enforce Pair Programming on those individuals and focus on those that could enjoy it and bring results to the team; why those reluctant members are part of a team is a question that each team should answer themselves.

坏消息是有些人过于个人主义,或者他们只是避免一般的人际交往,所以他们根本不喜欢结对编程。 不要试图对那些人实施结对编程,而要专注于那些喜欢它并为团队带来成果的人。 为什么这些勉强的成员是团队的一部分,这是每个团队都应该回答自己的问题。

One more thing that could also be beneficial for some teams is to organize mob programming sessions every certain period of time. In these sessions, the whole team works together on the implementation of a feature or on writing a solution for a coding kata. This is very helpful to see other points of view and every now and then someone in your team might surprise you with something new!

对于某些团队来说,另一件事可能也是有益的,那就是每隔一定时间组织一次暴民编程会议 。 在这些会议中,整个团队将共同致力于功能的实现或编写解决方案。 这对于查看其他观点非常有帮助,有时您团队中的某人可能会给您一些新的惊喜!

5.敞开心Min (5. Open Your Mind)

I’m well aware that we all have our own egos; no one likes being wrong, but you have to do everything you can to change this. Being open-minded and open to new ideas, and even to criticism in some cases, will allow you to make improvements and take new skills on board more easily.

我很清楚我们每个人都有自己的自我。 没有人喜欢犯错,但是您必须尽一切努力改变这一点。 胸襟开阔,对新想法,甚至在某些情况下也持批评态度,将使您能够改进并更轻松地掌握新技能。

It’s also beneficial to take a more active approach, always try to look at things that could prove you wrong and not the other way around. Most of the time, we’re looking for a reinforcement of our ideas and opinions, because that makes us feel good. What we should do instead is to look at any evidence that could lead us to being proved wrong. For example, Google for exactly the opposite of what you think, until you find no clear evidence of being wrong or until you do. Actively look for any evidence that could prove you wrong

采取更积极的方法也是有益的,始终尝试着眼于能证明您错了的事情,而不是反过来。 在大多数情况下,我们一直在寻求想法和意见的加强,因为这会使我们感觉良好。 相反,我们应该做的是查看所有可能导致我们被证明是错误的证据。 例如,在您找不到明确的错误证据或您这样做之前,Google与您的想法完全相反。 积极寻找任何可能证明您错误的证据

This is a very healthy and smooth way of exercising an open-mindedness in ourselves. If you practice it consistently and in an active manner, you’ll notice how slowly you stop feeling uncomfortable with those that disagree with you.

这是一种锻炼自己开放思想的非常健康和顺畅的方式。 如果您始终如一地积极地进行练习,您会发现自己逐渐对那些不同意您的人感到不适。

6.观看技术讲座 (6. Watch Tech Talks)

Watching tech talks is a good way of knowing different perspectives and new trends in our sector. Some of them will be useful for you and others won’t, but it’s always good to know different perspectives. There are plenty of good conferences nowadays that you could attend, but if you don’t have the time or the money, many of them can be found on Youtube for free.

观看技术讲座是了解我们行业的不同观点和新趋势的好方法。 其中一些对您有用,而其他则无用,但是了解不同的观点总是一件好事。 如今,您可以参加许多好的会议,但是如果您没有时间或金钱,可以在Youtube上免费找到许多会议。

如何成为一名优秀的工程师_成为一名优秀软件工程师的七件事_第4张图片
Photo by Samuel Pereira on Unsplash Samuel Pereira在 Unsplash上 拍摄的照片

Another thing that I find useful is to look at some resources that could point you out to some of the new technologies that are worth reading about or even trying. I sometimes use this Technology Radar link by ThoughtWorks to take a look at what kind of things have become trendy recently and see which of them may be useful.

我发现有用的另一件事是查看一些资源,这些资源可以为您指出一些值得阅读甚至尝试的新技术。 有时,我会使用ThoughtWorks的Technology Radar链接来查看最近发生了哪些事情,并查看其中哪些有用。

There are also many e-learning platforms nowadays that have a whole bunch of awesome videos about different topics that you could be interested in. These videos are normally prepared by professionals with an extended experience in the topic, so most of the times you will learn very useful things with them.

如今,还有许多电子学习平台,其中包含许多您可能会感兴趣的关于不同主题的精彩视频。这些视频通常是由对该主题具有丰富经验的专业人员准备的,因此大多数时候您将学习与他们非常有用的东西。

7.实践,实践,实践 (7. Practice, Practice, Practice)

Lastly, but not least, we do have to practice our coding. Practice at work but also practice at home when you have time, this is very important.

最后但并非最不重要的一点是,我们必须练习编码。 有工作时要练习,有空时也要在家中练习,这一点很重要。

Doing coding katas is a very good way to practice your coding skills and your TDD skills. There are plenty of resources with examples of coding katas, you’ll be able to find them on Google very easily but if it helps, one of the links I normally refer to is this one.

做编码katas是练习编码技能和TDD技能的一种很好的方法。 有很多关于如何编码kata的示例的资源,您可以在Google上很容易地找到它们,但是如果有帮助,我通常指的链接之一就是this 。

Another great way to practice is to set your own side project, by yourself or with some colleagues or friends. This will allow you to look at different things to what you normally work on at the office.

练习的另一种好方法是由您自己或与一些同事或朋友一起设置自己的辅助项目。 这将使您可以查看与通常在办公室工作不同的事物。

The main objective is that you become fluent with the language and gain speed and agility when writing code; and the only way to do this is by practicing frequently.

主要目的是使您能够熟练使用该语言,并在编写代码时获得速度和敏捷性。 唯一的方法就是经常练习。

“Everybody’s gotta learn, nobody’s born knowing.” — Harper Lee

“每个人都必须学习,没人天生知道。” —哈珀·李

结论 (Conclusion)

The path to become a good Software Developer might be different to every one of us, but I think the key is always consistency. Set your own goals and stop comparing yourself to others, the only thing you should care about is if you’re better today than what you were yesterday. Take that mindset and apply it to every single day in your life; in the long-term you will notice the improvements.

成为一名优秀的软件开发人员的道路可能与我们每个人都不相同,但我认为关键始终是一致性。 设定自己的目标并停止与其他人进行比较,您唯一需要关心的就是今天是否比昨天更好。 采取这种思维方式并将其应用于生活中的每一天; 从长远来看,您会注意到这些改进。

Follow these good habits for a long period of time and it’s almost guaranteed that you will become a much better developer than what you are right now.

长期遵循这些良好习惯,几乎可以保证您将成为比现在更好的开发人员。

Steady progress and consistency is the key here, don’t try to study long hours the first weeks and then quit. Start slowly but steadily, the chances of being able to keep up with that pace in the long-term are much higher than if you try to take on too much at the beginning.

保持进度和持续性是这里的关键,不要在开始的几周里花很长时间研究然后退出。 缓慢而稳定地开始,长期保持跟上这一步伐的机会比起初尝试承担过多的机会要高得多。

翻译自: https://medium.com/better-programming/7-things-to-do-to-become-a-good-software-engineer-f0ef4b10e1fc

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

你可能感兴趣的:(python,linux,java,人工智能,算法)