编者按:软件工程师是令人羡慕的职业。但是如何才能拿到这份工作?又如何才能做好这份工作呢?拥有相关经验的 Valeri Alexiev 提供了相关建议和工具。其中包括了如何准备面试、如何以软件工程师的身份工作以及如何持续改进方面的经验之谈。
我刚开始工作的头几年是紧张学习的时间。
我得面对现实,成为软件工程师需要有很多技能,这些我之前都不知道。回顾过去,显然学会那些东西是很好的。
所以我就根据自己及其他人的经验写了这篇指南来帮助入行的新人。
本文将覆盖以下内容:
当你开始软件工程职业生涯时,你得面对一个无可争议的事实。面试很恶心。
参与其中的每个人都觉得很恶心。既被人面试过又面试过别人的我可以证明,面试是一项极其耗时、极其有压力的工作,并且面试其实并不是将来工作表现一个的好的指示器。但不管怎样,这都是一个必要之恶,你和你的简历最好还是做好准备为妥。
如果你考虑做软件过程,确保了解一些最常见的编程面试问题,比如“FizzBuzz”:
写一个程序打印从 1 到 100 的数字。但是如果数字是 3 的倍数的话则打印“Fizz”,如果数字是 5 的倍数则打印“Buzz”。如果同时是 3 和 5 的倍数则打印“FizzBuzz”。
来自 Coding Horror
听起来很简单,是吧?
好吧,但其实绝大部分面试者都没能通过这一简单的测试,且不说更复杂的变种了。
我个人曾经见过很多角逐资深岗位的候选人在拥有完全互联网访问的情况下没能通过这一测试。所以如果你的简历上面列有编程语言的话,确保你知道如何用它来编写实现 FizzBuzz 程序。否则的话,你只不过是在浪费所有人的时间,包括你自己的。
当然,为了在面试过后生存,你需要知道的不仅仅只有 FizzBuzz。你还需要确保你知道:
在职业生涯开始时,你需要就这些问题做好准备,因为你并没有经历去证明自己能做好这份工作。在准备面试的时候有两个资源我会经常推荐:
为了让自己取得那点额外优势,有几件事情你可以去做。
首先,学会如何沟通你的经验。你应该进行一次电梯演讲来将你的简历总结成连贯的、打动人的个人介绍。
此外,要了解自己的简历!听起来很蠢是吧,但我就见过很多面试者连解释清楚自己简历上的特定事项都很困难。你应该能够回答任何有关你列上简历的经历方面的问题,并且解释清楚这一经历如何让你成为本工作更好的候选人。
接着,要在 GitHub(或者其他的公共代码库)上面有一些编码的例子。
眼见为实,面试官能够看到你的代码将创造奇迹。此外,这还证明了你对版本控制系统有了解。
你的代码例子不需要太复杂,但是一定要整洁,能够显示出好的编码实践。这是你展示自己在没有编码面试所带来的时间压力情况下代码写得如何的机会。
一旦你做完了上面的事情后,就得考虑参与一个开源项目了。参加开源项目能表明你能够在已有代码库基础上工作并且可以与其他程序员一些协作。
这是你在无需实际进入一个行业环境的情况下最接近在行业环境下编程的方式了。这也是目前为止最难最耗时的一项任务,所以等到你把前面我提到的比较容易取得的果实都摘完之后再干这件事。
在找工作的匆忙与压力之下,很多候选人都忘了面试是一个双向的过程。在公司努力寻找这份工作的合适人选时,你也应该设法弄清楚这家公司适不适合你。
确保你也要提出以下一些问题,哪怕对方是以电子邮件的形式回复你。要意识到公司经常把不遵循最佳实践说成是一项技能,所以要体会其言外之意。
以下是一些你可以去提问的例子:
“对我来说典型的工作日会是什么样的?”
知道特定岗位预期的样子很重要,因为软件工程工作差别相当大。比方说你的工作既可能是维护服务器,也可能是直接跟客户沟通。
危险信号:“我不大肯定。” → 意味着面试你的那个人不在你的团队,或者他们对为什么要招你并没有明确的想法。
“你们是如何测试软件的?”
理想情况下,验证代码质量应该是单元测试、人工测试以及自动化测试的结合。
危险信号:“我们都写不出 bug,哈哈。” → 那些人正是会写出 bug 的人。
“你们使用什么样的版本控制系统?”
版本控制系统对于协作极其有用,在职业环境下没有理由不使用。
危险信号 #1:“额,版本控制系统?” → 快跑,跑得越远越好。
永远记得使用版本控制。
危险信号 #2:“<插入不知名的或者定制的 VCS>” → 这表明他们很有可能没有跟上时代并且很久没有升级自己的基础设施了。
“你们进行同行评审吗?”
同行评审,或者让别人看看你的代码再把它放进代码库,这是识别愚蠢错误的极好办法,同时也是开始你的职业生涯时一个关键的培训机会。
危险信号:“我们相互信任!”→很有可能那些资深开发者对自己的代码非常警惕不想给人看也不擅长接受反馈。
“你们的继续教育计划是什么样的?”
作为一名软件工程师意味着当新技术出现、成熟并以令人眼花缭乱的速度走向过时的时候要不断学习。因此,很多公司都有培训预算用来买大学和在线课程、会议或者内部交流。
危险信号:“你是说在闲暇时间读读网上的东西?” →这家公司要么资金紧张,要么把开发者视为可替代的,而不是长期投资。
“你们采用的软件开发流程是什么?”
无论实际的细节是什么,流程对于软件工程都至关重要。至于哪些东西对于优化流程做出了贡献可能大家会有不同的看法,但仅就项目的工作方式达成一致就能将混乱最小化并且确保每个人都能达成共识。
危险信号:“我们的流程受到了自由风格的爵士的影响。” → 很有可能整个部门都处在救火模式,总是不断地从紧急跳到另一个紧急状态而缺乏任何明确的目标。
“你们是如何处理技术债务的?”
技术债务是过时技术以及代码库中临时应急的解决方案的累积。处理好技术债务对于代码的长期健康很重要,这件事情应该持续地做。
危险信号:“我们只关注新功能。” → 他们的代码库一团糟或者很快就会一团糟。
“你们的公司文化是什么样的?”
公司文化也许是个非常含糊的概念,但即便像开放办公室还是小隔间这样的小事情都会显著改变你与同事的日常互动。这方面没有普遍性的危险信号,但是要确保他们的答案是你可以按照每周 40+ 小时的节奏持续相处数年的东西。
在这个阶段,如果你面试过程中表现不错并且喜欢面试官回答你问题的方式,你被录用的可能性就很高了。
祝贺,你正式成为一名工程师了!
那现在又该如何呢?好吧,现在是时候重新学习大量编码和工作方面的东西了。既然我们是程序员,我们就从讨论代码开始。
好的行业代码有以下属性,依序是:
现在你了解了如何去编写良好的行业代码了。
说出来也许有点令人吃惊,但是大多数时候你都不用写新代码,而是相反,要做:
因此编码以外的技能对你的职业一样关键。
调试和阅读代码
既然你的大量时间都是用在沟通、研究和多任务上,你需要一些工具来帮助一切井然有序。
简短回答:随时都要。
详细回答:99% 的时间内你都不应该重新发明轮子。在大多数的软件工程岗位,实现特定类型的东西都属于纯粹浪费时间。这并不意味着你不应该知道所使用的算法和数据结构是怎么工作的,因为这可以帮助你决定用什么以及什么时候用。
为了成为一名高效的软件工程师,你需要理解自己可以任意支配使用的那些库。大多数流行语言的标准库都是极其有用的,其规模比你想象的要大。此外,代码库也许也会利用了额外的特殊库。阅读其文档,知道什么使用去使用它们。
你还应该不要害怕去建议额外的库,如果它们将节省时间的话。然而,你需要确保自己选择了一个好的库供行业使用。好的库的标准是:
为了替自己创建新的职业机会,除了学习会让你更擅长日常工作的技能以外,你还需要持续改进自身技能并且学习新技能。
其实学习的机会有很多,而且其中很多都是你可以负担得起的:
希望这篇文章能够用相关知识把你武装起来,让你了解到作为软件工程师的职业生涯伊始应该期待什么,并且提供合适的工具给你在开启这段令人兴奋的旅程中助你一臂之力!
Web前端工程师必备的PS技能之切图:PS中我的标尺的参考线为什么不能自动吸附图层或画布中间了?有个选项没有选择“菜单栏-视图-对齐”,按照设计师提供的设计稿,实现HTML页面,需要将设计稿切分成为最终在页面中呈现的一个个图片为“切图”
作为一名技术人员,我们应该如何践行呢?本文总结了十条精进原则,希望能够给大家带来一些启发,更好地指导我们行动。Owner意识、时间观念、以终为始、闭环思维、保持敬畏
Web前端开发技术主要包括三个要素:HTML、CSS和JavaScript!如果单纯只是学习前端编程语言、而不懂后端编程语言(PHP、http://ASP.NET,JSP、Python),也不能算作是优秀的前端工程师。在成为一个优秀的前端工程师的道路上,充满了汗水和辛劳。
随着软件技术的发展以及市场需求的变化,全栈工程师似乎已成为未来发展趋势。很多Flag公司都已经声称只招Full Stack的员工,那么面对这样的市场形势,对于正在求职路上或者是想要跳槽的程序员来说,我们需要如何准备,如何应战?现在,小编带你了解为什么这次我选全栈工程师!
初次接触PHP,就为他的美所折服,于是一发不可收拾。很多面试,很多人员能力要求都有PHP高级工程师的字眼,如果您真心喜欢PHP,并且您刚起步
对于JavaScript,掌握其语法和特性是最基本的,但是这些只是应用能力,最终仍旧考量仍然是计算机体系的理论知识,所以数据结构,算法,软件工程
现在,前端工程师终于前所未有的在Web中占有了一席之地。随着多设备、浏览器和Web标准的演变革命,前端正在成为兼顾逻辑、性能、交互、体验的综合性岗位。
前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。
职场危机感似乎是每个人在职业生涯都会遇到的话题,我对这种危机处境和自己曾遇到的问题进行了一番思考,参考了其他人的一些结论并结合自身的经历,设计了应对的初步方案。
一提起“全栈开发工程师”,大家的印象肯定是:这号人啊,堪称大神!会很多技术,前端后端都精通,不掌握七八种语言都不好意思出来打招呼,热点技术名词全都知道,也都会点儿;
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!