全文共 3037字,预计学习时长 6分钟
软件工程师们老是花费许多时间磨练面试技巧,如练习力扣题(leet code)和完善各自的简历。而一旦他们在一家新创企业、谷歌、亚马逊、或其余公司获得了工做,也许就会发现,其实平常工做中用不到当初为了获得这份工做所得到的技能。程序员
谷歌的TechLead提出了高效程序员该有的七项技能。本文受到启发,提出高效程序员该有的七项技能。面试
可以阅读其余人的代码是一个很厉害的技能,且能带来许多好处。算法
无论上一个工程师的代码有多乱有多糟,你仍是得读懂它。这毕竟是你的工做。就算那些烂代码是你一年前写的。数据库
这个技能有两个好处。第一,学会如何阅读其余人的代码可帮助你更了解什么是糟糕的设计。在看过其余人的代码时,能够学会看出代码可不可用。更重要的是,也可从中得知哪些代码更易被其余工程师理解或否。编程
在阅读其余人的代码时,尽量地对其评价。这样,其余工程师才会知道眼前的工程师多么的不简单。设计模式
做出评价时,记得提起可维护代码和清楚注释的重要性。这将给编程领域里的优点加分。微信
你自己的代码应该设计得好,好到无需注释。事实上,一个优秀的程序员本就不该该给本身代码进行注释。那只是在浪费时间,而宝贵的时间应该用在编码和开会上。数据结构
学会阅读其余人杂乱的代码也有助于必要时对其进行更新。这有时意味着更新你可能不那么熟悉的代码。举个例子,咱们曾沿着一个脚本语言,编程语言从PowerShell换到Python,再改为Perl。虽然咱们对Perl的经验有限,可是任然有足够的上下文来搞懂其中的代码,并作出所需的更改。编程语言
这都归功于咱们对全部代码有必定的认识,以及阅读Perl脚本的能力。微服务
阅读别人代码这个技能可提高我的价值,由于就算是别人望而却步的过分工程化的系统也难不倒你。
许多技能都需花费时间来学习。其中一项技能是值得去获取的,那就是知道哪些项目不值得去作,哪些项目显然注定死路一条。
大企业是有不少进行中的项目,而其中可完成或有做用的却很少。有些项目也许没有任何商业意义(至少对你来讲),也有一些项目就是没管理好。这并不意味着当你对某个项目有异议时就直接拒绝。可是,若是股东们没法清楚解释项目用途时,那这个项目极可能不值得去作。
此外,一些项目也许过于专一在技术方面而忽略了寻找解决方案。所以,从一开始就可显然看出不会有太大的做用。只有在接触过不少烂项目后,方能获得感知它们的技能。因此刚开始时不须要花太多时间去识别每一个项目。
在你职业生涯的某个阶段,天然就会练就一种直觉。
不管软件工程师仍是数据科学家,都必须参与会议,以确保能与项目经理、终端用户和客户达成共识。然而,参与太多会议反而会占据一成天的工做时间。因此学会避免没必要要参与的会议是很重要的。或者,“管理”一词比“避免”会更好听一些。这里的目标是确保时间能用于参与推进决策的会议上,而且能帮助团队前进。
最多见的方法就是天天留出两个小时的时间,用来进行按期开会。一般多数人会在他们最方便的时候安排例常会议。这段时间即可用来了解所负责开发项目的最新状况。
另外一种为了完成工做而避开会议的方法就是比其余人早报到。笔者们认为,咱们喜欢早到的缘由是由于,总的来讲,办公室会比较清静。多数早到的人也同样,都想把工做作完,这样就不会有人打扰了。
这对独自工做者来讲很重要,由于咱们的工做有一段时间须要极度专一,而不和其余人交谈。固然,有些时候也许得和别人合做来解决问题。可是一旦越过了障碍,剩下的只需编程。这时候就得进入状态,在脑中不断地思考有关手上项目的种种复杂想法。若是不停地被打断,那就很难恢复状态。
有些计算机科学专业的学生从出生那天起就开始使用GitHub。他们可以理解每个指令和参数,能力甚至超越了教授们。
其余人则是在第一份工做后第一次接触到GitHub。对他们来讲,GitHub是个充满使人困惑的指令和程序的地狱。他们从不100%肯定本身在作什么(这也就是为何cheat sheet如此的受欢迎)。
无论公司用的是哪一种存储库系统,该系统只有在正确使用时才有用;反之,则会成为阻碍。一个简单的push或者commit,和花数小时尝试梳理乱成一团的分支,其实只有一线之差。除此以外,若是常常忘记提取存储库的最新版本,那也将面临处理合并冲突的难题。
若是有须要保存GitHub的指令cheat sheet,那就保存起来。只要有帮助便可。
一般出现于资历较浅工程师的一个问题就是,他们总试图将全部所知的东西放到一个解决方案中。他们有一种渴望,想把所学到的面向对象编程、数据结构、设计模式和新技术通通用于所编写的每一段代码中。这反而造成了没必要要的复杂性,由于你很容易过分依赖过去使用的解决方案或设计模式。
复杂的设计概念和简单的代码之间存在着一种平衡。总体上来讲,设计模式和面向对象的设计应该将代码简化。然而,当一个程序越被抽象化、归纳化、和黑箱化,则越难侦错。
这个技巧其实适用于任何职位,不管金融分析师仍是软件工程师。但尤为值得一提的是,每一个人彷佛都会由于某种缘由找技术性人员。若是你是数据工程师,处理开发管道外还可能会被要求作其余东西。一些团队也许须要数据提取,其余则须要控制面板,更有一些须要新管道给他们的数据科学家。
其实,分轻重缓急和拒绝多是两种不一样的技能,但他们是紧密交织在一块儿的。前者意味着只把时间花在对公司有重大影响的事情上。后者则意味着避免处理本应属于其余团队的工做。这两个技能的需求在全部职位中都是相互存在的。
这是一项很难掌握的技能,由于有时候面对别人请求的时候,会很难拒绝他们。尤为是刚毕业的大学生,都会想尽可能知足全部人,手上也都是可完成的工做量。
在大企业里,老是会有穷无止尽的工做要完成。关键在于扛下可完成的任务。
事实上不少技能都没有在面试测试到,甚至在大学里也没有教过。一般,这更可能是环境的限制,而不是没意愿让学生接触真实开发环境下存在的问题。
有一项技能,面试中难以测试,大学课程里又难以复制的,就是想透终端用户使用软件时会出错的地方。咱们一般将此称为操做性场景思考。
然而,这其实只是一个较好听的说法。事实上你只是在确保你的代码连白痴也可使用。
例如,既然编码大多都是在进行维护,这一般表明改编互相极度缠结的代码。就连一个简单的调整,都须要追踪对象、方法、和/或API的全部可能关联。不然,很容易意外地破坏以前没注意到附加着的模块。就算只是更改数据库中的数据类型也是。
这也包括在进入开发阶段前想透边角案例和总体的高层设计。
而对于开发新模块或微服务的更复杂案例,重要的是花点时间思考一下你手中任务的操做性场景。想想将来用户将如何须要用到你的新模块,他们将如何错误使用,什么参数将被须要,以及是否有其余时候将来程序员将会用到你的代码。
纯粹的代码和编程只是问题的一部分。创造一个能够在你电脑无缺运行的软件并不难。但利用代码时能够出错的地方却不少。一旦投入生产,就很难说代码将如何被使用,以及其余代码中哪些将会附加到原始代码中。五年后,一个将来的程序员也许会由于你代码的限制而感到烦躁也说不定呢。
留言 点赞 关注
咱们一块儿分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”
(添加小编微信:dxsxbb,加入读者圈,一块儿讨论最新鲜的人工智能科技哦~)