译者:万佳,公众号:技术最 TOP
受 TechLead 高效程序员的七项技能启发,咱们团队想就这个话题发表本人的认识。
上面是咱们总结的高效程序员的七项技能。
1. 学会如何浏览别人的代码
除了你,所有人写的代码都很蹩脚。
这就是为什么可能追踪别人的代码是一项具备多重益处的平凡技能。
不论之前工程师的代码有如许凌乱或欠考虑,你依然须要仔细阅读它。毕竟,这是你的工作。甚至一年前的那个工程师也是你。
这项技能对你有两个益处。第一,能浏览他人的代码让你有一个很好的机会去理解什么是蹩脚的设计。当你在浏览他人的代码时,你会理解到什么有用什么没用。更重要的是,你还会理解到,对其余工程师来说,哪种类型的代码比拟容易了解哪种代码比拟难了解。
在浏览其他人的代码时,你能够纵情地地埋怨。这样,其余工程师就会明确你有如许优良。
务必要提一下可保护代码和良好正文的重要性。这能够进一步显示出你在编程畛域的劣势。
你的代码应该设计得十分好,以至于不须要任何文档。事实上,如果你是一名优良的程序员,就不应该编写任何代码的文档。这只是浪费时间,你须要把工夫花在编程和会议上。
能浏览别人编写的凌乱代码也使得在须要时更新变得更容易。这有时意味着更新你不理解的代码。例如,咱们已经追踪一个脚本,从 Powershell 到 Python 再到 Perl。尽管咱们在 Perl 方面的教训无限,但咱们依然有足够的上下文来理解产生了什么,并做出所需的更改。
这源于咱们很好地了解了所有代码并且可能浏览 Perl 脚本。
浏览他人的代码会晋升你的价值,因为你能够追踪那些因为过于简单而让别人感到困惑的零碎。
2. 可能感知蹩脚的我的项目
有很多技能须要花工夫去学习。咱们置信有一项技能是有必要理解的,那就是晓得哪些项目不值得做,哪些项目必然失败。
大公司总是有很多正在进行中的我的项目,而有些我的项目可能永远无奈实现或产生影响。有一些我的项目可能没有任何商业意义(至多对你来说没有),还有一些项目管理不善。这并不是说,当你不赞成某个我的项目的时候,你就应该打断他人的想法。不过,如果涉众不能适当地解释他们将利用最终后果做什么,那么这个我的项目可能不值得做。
此外,有些我的项目可能过于关注技术而不是解决方案,因而从一开始就很分明它不会带来太大的影响。对于这项技能,你须要在做过很多蹩脚的我的项目之后,能力懂得什么样的我的项目是蹩脚我的项目。所以,不要过早地花太多工夫去分别每个我的项目。
在你职业生涯的某个时候,你就会有一个很好的直觉了。
3. 少散会
无论你是软件工程师还是数据科学家,会议都是必要的,因为你须要可能与项目经理、最终用户和客户保持一致。然而,会议有时会忽然占满你的日程表。这就是为什么懂得如何防止不必要的会议很重要。兴许用“治理”这个词比“防止”更好。这里的指标是确保你花在会议上的工夫是为了推动决策并帮忙你的团队后退。
最常见的办法就是在常常散会的日子里留出两个小时的工夫。通常,大多数人会在他们认为无益的时候安顿定期会议。他们将利用这段时间来赶上他们的开发工作。
另一种少散会的办法是比其他人早到,这样你就能实现工作。就我集体而言,我喜爱早到,因为总的来说,办公室比拟宁静。大多数早到的人都和你一样,只是想把工作做完,这样就不会有人打搅你了。
这对集体贡献者来说很重要,因为咱们的工作须要咱们有工夫能够放弃专一,不和其他人交谈。是的,有时候你可能想和他人一起解决问题。然而一旦你解决了妨碍你后退的问题,你就只须要编码了。就是说,你须要进入一种状态,你的头脑中一直地放弃着许多对于你正在做的工作的简单想法。如果你一直地停下来,你就很难从进行的中央持续。
4. Github
一些计算机专业的学生从出世那天起就开始应用 GitHub。他们可能了解每一个命令和参数,并且远远超过了专业人士。
有些人则是在第一份工作中首次接触到 GitHub。对他们来说,Github 令人困惑的命令和流程犹如梦魇。他们素来都无奈 100% 确定本人在做什么(这就是速查表受欢迎的起因)。
无论你的公司应用哪种存储库零碎,如果应用切当,那么该零碎就有帮忙;如果使用不当,那么它就会成为阻碍。一个不费多少工夫的简略推送或提交就能够让你破费几个小时去理清多个分支和复刻(fork)。此外,如果你常常遗记拉取存储库的最新版本,那么你还将解决并不好玩的合并抵触。
如果你须要保留一份 Github 命令速查表,那么这样做就好。只有能让你的生存变得更简略。
5. 编写简洁可保护的代码
年老工程师可能会偏向于将他们晓得的所有货色都在一个解决方案中实现。这种欲望让你把本人对面向对象编程、数据结构、设计模式和新技术的了解全副都用在了每一段代码的编写中。这减少了不必要的复杂性,因为很容易适度依赖于你过来应用过的解决方案或设计模式。
简单的设计概念和简略的代码之间存在一种均衡。设计模式和面向对象的设计应该从整体上简化代码。不过,一个过程如果形象、封装和黑盒化水平越高,调试就越艰难。
6. 学会说“不”,分清轻重缓急
这实用于任何角色,无论是金融分析师还是软件工程师。但尤其值得一提的是,仿佛每个人都须要技术角色提供一些货色。如果你是一名数据工程师,那么你须要做的可能不仅仅是开发管道。一些团队须要数据提取,一些团队则须要仪表板,还有一些团队须要你为他们的数据科学家提供新的管道。
分清轻重缓急和说“不”可能真的是两种不同的技能,但它们严密地交错在一起。分清轻重缓急意味着你只把工夫花在对公司有重大影响的事件上。而说“不”有时候只是意味着避开应该由另一个团队来解决的工作。不论对于什么角色,它们都经常是同时产生的。
这是一项很难把握的技能,因为你很容易接受他人提出的每一个要求,尤其是如果你刚大学毕业。你想要防止让任何人悲观,你总是会取得大量的工作。
在大公司里,总是有无穷无尽的工作要做。关键在于只承当能实现的工作。
有很多技巧没有通过面试测验,甚至在大学里也没有传授过。通常,这更多的是环境限度,而不是不想让学生接触实在开发环境中存在的问题。
7. 面向操作的设计思维
有一项技能在面试中很难测验,在大学里上课时也很难学到,那就是思考最终用户在应用你的软件时可能会犯什么错。咱们通常把这个叫做通过操作场景进行思考。
不过,这只是一种礼貌的说法,意思是“你正在设法实现蠢人也不会搞砸的代码”。
例如,因为大多数编程都是保护,所以这通常意味着批改与其余代码混在一起的代码。即便是简略的批改也须要跟踪对象、办法和 / 或 API 的所有可能援用。否则,很容易意外毁坏相干的模块。即便只是批改数据库中的数据类型。
这还包含在开发之前思考边缘状况和整个高层设计。
对于开发新模块或微服务这种更简单的状况,花工夫思考正在构建的软件的操作场景很重要。思考将来的用户可能须要如何应用你的新模块,他们在应用它时可能会犯什么错,可能须要哪些参数,以及将来的程序员可能要以不同的形式应用你的代码。
简略的编码和编程只是问题的一部分。创立能够在你的电脑上失常运行的软件很容易。但部署代码出错的形式很多。一旦投入生产,就很难说代码将被如何应用,以及其余哪些代码将附加到原来的代码中。五年后,将来的程序员可能会对代码的限度感到丧气。
英文原文:https://medium.com/better-programming/7-habits-of-highly-effective-programmers-563ee3b63f33