【译】如何成为一名优秀的初级工程师

很多人都在想着如何成为一名高级工程师,而我想要的是先成为优秀的初级工程师。

明年将是我正式受雇佣写代码的第15年了。(译者:老外的写代码职业生涯真的挺长的)

回首往昔,我第一天工作的日子仍然历历在目。那时的我每天都在格子间中写着SAP、算法、数据结构、SQL和C++,还涉及了更广泛的主题,包括知识管理和项目管理。我了解所有的这些知识,但我缺乏的是在需要的地方使用这些知识的信心。

我花了很多年才获得这种信心,在那时,我也意识到实际上我只需要做到两件事就可以成功:

  • 学习某些新东西的态度
  • 无论学到什么都有能力付诸行动

这两者都是养成的技能,不仅需要努力,而且还要谦虚的承认自己的无知,并与适合的人交流以消除这种无知。这就像三个正在建立隔离围墙的工人的故事。

你问第一个人他在干什么。他说他在搭砖头,他并不担心自己做的对或错。第二个工人说他正在建造一堵墙,但并不知道为什么要建这堵墙。第三个眨着眼睛充满热情的工人说他正在建造一座大教堂。他为自己在建造大教堂时能发挥作用而自豪。

优秀的初级开发者应该像第三个工人一样。他们与大方向保持一致,并且按照自己的方法不断进步。他们知道自己正在解决什么问题,并且为自己在建造大教堂(软件开发)中发挥的作用感到自豪。最后你需要保持谦卑,埋头工作,你会得到你想要的。

还有一些我作为初级开发者时学到的比较好的东西想要分享给你。

每天暴漏自己的无知

Elbert Hubbard说过:

永远无知的秘诀是:对你自己的意见和知识感到满意。

The recipe for perpetual ignorance is: Be satisfied with your opinions and content with your knowledge.

你是一名初级开发者,你并没有了解所有事情,这没关系。即使在行业内打拼多年的资深工程师,也不是能了解所有的事情。无知并不是错误,不暴漏出这种无知才是更严重的问题。

在开会、讨论、进行代码演练时,你会听到几件事,这些事会在你脑中转瞬即逝。不要假装自己理解并点头,不懂就问。如果你不说出来,就错失了学习的机会,这最终会危及你的职业生涯。

在多年后的今天,我每天仍然会问许多问题。记住,没什么是愚蠢的问题,问一个愚蠢的问题并弄明白比整天坐在屏幕前要好得多。

加快获得缺失知识的速度最好的方法是在每一个机会中暴露自己的无知。

写代码之前先读代码

Rasheed Ogunlaru说

读到的代码有多好,写出来的就能有多好。

How you look at the code is pretty much how you’ll see it.

我还记得我的第一个研发任务,需要我为现有功能编写出口,而我在这个任务上花了50个小时。周一我向领导汇报时,她说:“我们有现成的实现这个功能的代码,你应该直接用,这样能更快做出来。“

我错在哪了?我没有去读已有代码。现实生活中,开发人员往往在读代码上花费的时间要比写代码多。即使是添加新功能或纠正缺陷,也需要了解已有代码。这没有捷径,读代码,读代码还是读代码。

读代码可以让你了解别人是怎么写代码的,以及有哪些你可以复用的库。需要注意的是:

  • 编码标准
  • 命名约定
  • 设计模式
  • 注释
  • 用到的测试脚本和测试用例等

记住,聪明的开发者不会重复造轮子。他们会尽可能尝试服用并构建已有功能。这不仅节省了时间,而且在共享代码的开发人员之间建立 了友情。

现在已经有了解决问题的办法了。所以当你尝试完成一个功能时,先看一下其他人是否已经解决了这个问题。这不是偷工减料,而是在努力完成。

寻求建设性批评

Elbert Hubbard提到了一个避免批评的最佳技术:

想要避免批评就要什么也不说,什么也不做,什么也不成为。

To avoid criticism say nothing, do nothing, be nothing.

我们所有人都喜欢接收赞美,在别人称赞我们的工作时会感到很开心,这没问题。然而作为一名初级开发者,相比赞美,我认为你更应该接受建设性的批评。良药苦口利于病。

我记得我第一次接受一名资深工程师的代码审查。在40分钟时间内,他细致的审查了我的代码,结束时,他的评论比我的代码还要多。经过这么多努力,我真的很难过。但这次代码审查确实帮助我发现了我的短板,并向我详细展示了我可以改善的地方。这是我前进道路上的启明灯。

也就是说,想要得到建设性批评,就要主动寻求。我合作过很多资深工程师,他们从没拒绝过我的请求,即使他们很忙。当然,你需要根据他们的时间制定可行的日程,以进行有意义的会话。

如果资深工程师花时间帮你审查代码并提出一些改进意见,表示他们对你的工作很有兴趣。不要浪费机会,主动上去寻求建设性批评。

正如Andy Marks所说:

如果你对你的代码感到自豪,就把它展示出来。如果你没有展示出来,意识到你的自豪感的人都是想与你合作的人。

If you take pride in your code, it will show up in the code. If you don’t it also shows. The people who recognize your sense of pride are people you want to work with.

寻求大局观

Murat Ildan说过:

想要看到更多风景,就走出黑暗的山谷,爬上光明的山顶!

To see the big picture, get out of the dark valleys, climb to the sunny summits!

还记得我们讲的三个工人的故事中那个知道自己在盖教堂的工人吗?关注大局往往就是这样。作为一名初级开发者,在大多数时间中,你只会接触一小段代码或者解决已有代码中的bug。你在完成分配给你的工作,这没有错。但如果你想成为整个交易的一部分;你需要花点时间找出交易的全部内容。

你调整视角,并询问有关代码如何适应整个系统的问题。

为什么使用特定的设计模式?

为什么使用特定的语言?

缺点是什么?它可以与你的代码一起使用吗?

这些代码是否易于维护?

等等……

最好也是最简单的方法是获得导师的指导。技术导师可以帮助你提高技能水平并通过大的项目帮你巩固。但是没有明确的方法去寻找技术导师。也许是一杯咖啡就可以打破僵局。

大多数初级开发者因为不理解功能或者对项目目标做出假设而犯错。花时间了解系统运作的实际情况将会对你成为优秀的开发者有很大帮助。

最后,一名优秀的高级开发者不仅仅了解编程

很长一段时间中,我都认为一名优秀的高级开发者就是拥有多年的开发经验(5年Java,7年Python等等……)。经验越丰富就越优秀。

但是我错了。一名优秀的高级开发者不仅仅是只了解编程。他们充满好奇。他们是优秀的导师。最重要的是他们具有不可思议的代码意识,知道什么时候不做某事。例如,他们知道从头开始重写一个库只是为了使其更具有可读性,或者在团队选择旧框架时切换到新的框架并不总是明智的选择。他们不是在规则风险。他们是更加谨慎的做正确的事情。

不是每个人在他(她)的职业生涯中都能成为“高级”开发者。一个好的高级开发者不仅需要好的经验,还应该有正确的态度和能力,以便将来应用这些经验。资历与能力有关,与年龄无关。

就像Kevin de Leon说的:

如果你什么都不做,资历就没有任何意义。

Seniority means nothing if you do not do anything with it.

原文链接

https://medium.com/swlh/how-to-be-a-good-junior-developer-cd86b77086fc

Jackey Wang wechat
欢迎关注我的公众号,一起讨论如何写bug
-------------本文结束感谢您的阅读-------------
原创不易,感谢支持