软件工程师花费大量时间通过练习解决代码问题和润色简历来获得面试技巧。一旦他们最终在创业公司、谷歌、亚马逊或其他公司找到了这份工作,他们可能会发现他们获得这份工作所需的技能与他们在日常工作中所需的技能不匹配。我们的团队受到一位前谷歌技术主管创建的七项有效程序员技能的启发。我们想就这个话题发表自己的看法。以下是高效程序员的七个技巧。学习如何阅读其他人的代码除了你之外,每个人的代码都很糟糕。这就是为什么能够遵循其他人的代码是一项具有多种好处的伟大技能。无论前任工程师的代码多么混乱或考虑不周,您仍然需要能够仔细阅读它。毕竟,这是你的工作。甚至一年前,那个工程师就是你。这个技能为你做两件事。首先,能够阅读其他人的代码是了解不良设计的绝好机会。当您浏览其他人的代码时,您会了解哪些有效,哪些无效。更重要的是,您将了解到哪些类型的代码更容易被其他工程师理解,哪些更难理解。您需要确保在阅读其他人的代码时尽可能多地抱怨。这样,其他工程师就会明白你是一个多么优秀的工程师。请务必提及可维护代码和良好评论的重要性。这进一步显示了你在编程领域的优势。您的代码应该设计得非常好,不需要任何文档。事实上,如果您是一名优秀的程序员,您不应该为任何代码编写文档。您需要花在编程和会议上,这只是浪费时间。能够阅读其他人的混乱代码也使得在需要时更新变得容易。这有时意味着更新您没有经验的代码。例如,我们曾经跟随一个脚本从Powershell到Python再到Perl。虽然我们使用Perl的经验有限,但我们仍然有足够的上下文来理解正在发生的事情,并进行必要的更改。这来自对所有代码的良好理解和能够阅读Perl脚本。阅读别人的代码会让你更有价值,因为即使是那些过于复杂的系统也会让别人感到困惑。对项目感觉不好有很多技巧需要时间来学习。我们认为值得了解的一项技能是知道哪些项目不值得做,哪些项目显然正在消亡。大公司总是有很多正在进行的项目可能永远不会完成或产生影响。有些项目可能没有任何商业意义(至少对您而言不是),还有一些项目管理不善。这并不是说当你不同意一个项目时,你应该中断它。然而,如果利益相关者不能正确解释他们将如何处理最终结果,那么这个项目可能就不值得去做。此外,有些项目可能过于关注技术而不是解决方案,因此从一开始就很明显不会有太大影响。这项技能需要做很多糟糕的项目,然后你才能真正了解什么是糟糕的项目。所以,不要花太多时间过早地识别每个项目。在你职业生涯的某个时刻,你会有很好的直觉。避免开会无论您是软件工程师还是数据科学家,开会都是必不可少的,因为您需要能够与项目经理、最终用户和客户保持一致。然而,会议也有突然占据你整个日程的趋势。这就是为什么学习如何避免不必要的会议很重要。也许“管理”比“避免”更好。这里的目标是确保您将时间花在推动决策和帮助团队前进的会议上。最常见的做法是每天抽出两个小时,也就是经常开会。通常,大多数人会在他们认为有益时安排定期会议。他们将利用这段时间来赶上他们的开发工作。避免开会的另一种方法是比其他人早到,这样你就可以完成工作。就个人而言,我们喜欢早点到达,因为办公室通常比较安静。大多数早起的人都像你一样,只想完成工作,这样就不会有人打扰你。这对个人贡献者很重要,因为我们的工作需要我们集中精力,不需要与其他人交谈。有时您可能想与其他人一起解决问题。但是一旦你解决了阻塞问题,你只需要写代码就可以了。这是关于进入一个区域,在这个区域中,您的思想不断地对您正在做的工作持有许多复杂的想法。如果你不停地停下来,就很难从你停下的地方继续。Git一些CS专业的学生从出生那天起就一直在使用Git。他们能够理解每一个命令和参数,并像专业人士一样四处奔波。其他人在他们的第一份工作中第一次接触到GitHub。对他们来说,Github是一堆命令和流程的地狱。他们永远不会100%确定自己在做什么(备忘单之所以受欢迎是有原因的)。无论您的公司使用哪种存储库系统,如果使用得当,它都会很有用,如果使用不当,就会成为障碍。一个简单的推送或提交不会花费您很多时间来理清多个分支和分叉的大杂烩。此外,如果您经常忘记拉取最新版本的存储库,那么您还将处理从不有趣的合并冲突。如果您需要保存Git命令的备忘单,那么就这样做吧。让您的生活更轻松。编写简单可维护的代码年轻的工程师可能倾向于尝试将他们所知道的一切都应用到解决方案中。人们希望了解面向对象编程、数据结构、设计模式和新技术,并在他们编写的每一段代码中使用所有这些知识。您创建了不必要的复杂性,因为很容易过度依赖您过去使用的解决方案或设计模式。复杂的设计概念和简单的代码之间存在平衡。设计模式和面向对象的设计应该从整体上简化代码。但是,流程越是抽象、封装和黑盒化,越难调试。学会说“不”并确定优先顺序。这适用于任何角色,无论是金融分析师还是软件工程师。但特别值得一提的是,技术角色似乎可以为每个人提供摆脱困境所需的东西。如果您是一名数据工程师,您可能会被要求做的不仅仅是开发管道。一些团队需要数据提取,其他团队需要仪表板,还有一些团队需要数据科学家的新管道。现在,确定优先次序和拒绝可能真的是两种不同的技能,但它们紧密地交织在一起。优先排序意味着你只花时间在对公司有重大影响的事情上。然而,有时说“不”只是意味着避免了应该由另一个团队处理的工作。对于所有角色,它们通常同时发生。这是一项很难掌握的技能,因为您很容易接受提出的每一个要求。特别是如果你刚从大学毕业。您想避免让任何人失望,并且总是会为您提供大量工作。在大公司里,总是有无穷无尽的工作要做。关键是承担你能做的事情。有很多技能没有在面试中测试过,甚至在大学里也没有教过。通常,这更多地与环境的限制有关,而不是缺乏让学生接触真实开发环境中存在的问题的愿望。操作设计思维一项很难在面试中测试,并且在大学教授时难以复制的技能是思考最终用户可能如何错误地使用您的软件。我们通常将此称为通过操作场景进行思考。不过,这只是一种礼貌的说法,表示您正在尝试伪验证代码。例如,由于大多数编程都是维护,这通常意味着更改与其他代码高度混淆的代码。即使是简单的更改也需要跟踪对对象、方法和/或API的所有可能引用。否则,很容易不小心破坏附加的模块。即使它只是更改数据库中的数据类型。它还包括在继续开发之前考虑边缘情况和整个高级设计。对于开发新模块或微服务的更复杂情况,花时间考虑您正在构建的操作场景很重要。考虑未来的用户可能需要如何使用您的新模块,他们可能如何错误地使用它,可能需要哪些参数,以及未来的程序员是否可能需要不同的代码。简单的编码和编程只是问题的一部分。创建在您的计算机上运行良好的软件很容易。但是部署代码出错的方式有很多。一旦投入生产,很难说代码将如何使用,以及将在原始代码上附加哪些其他代码。五年后,未来的程序员可能会对他们代码的局限性感到沮丧。
