软件工程师生存指南:面试准备、工作经验和实用工具

编者按:软件工程师是令人羡慕的职业。但是如何才能拿到这份工作?又如何才能做好这份工作呢?拥有相关经验的 Valeri Alexiev 提供了相关建议和工具。其中包括了如何准备面试、如何以软件工程师的身份工作以及如何持续改进方面的经验之谈。

我刚开始工作的头几年是紧张学习的时间。

我得面对现实,成为软件工程师需要有很多技能,这些我之前都不知道。回顾过去,显然学会那些东西是很好的。

所以我就根据自己及其他人的经验写了这篇指南来帮助入行的新人。

本文将覆盖以下内容:

  1. 如何尽力做好面试
  2. 如何在软件工程师的角色中生存(及发展)
  3. 考虑持续改进时可以参考的资源

  面试

当你开始软件工程职业生涯时,你得面对一个无可争议的事实。面试很恶心。

参与其中的每个人都觉得很恶心。既被人面试过又面试过别人的我可以证明,面试是一项极其耗时、极其有压力的工作,并且面试其实并不是将来工作表现一个的好的指示器。但不管怎样,这都是一个必要之恶,你和你的简历最好还是做好准备为妥。

  做好战斗准备

如果你考虑做软件过程,确保了解一些最常见的编程面试问题,比如“FizzBuzz”:

写一个程序打印从 1 到 100 的数字。但是如果数字是 3 的倍数的话则打印“Fizz”,如果数字是 5 的倍数则打印“Buzz”。如果同时是 3 和 5 的倍数则打印“FizzBuzz”。

来自 Coding Horror

听起来很简单,是吧?

好吧,但其实绝大部分面试者都没能通过这一简单的测试,且不说更复杂的变种了。

我个人曾经见过很多角逐资深岗位的候选人在拥有完全互联网访问的情况下没能通过这一测试。所以如果你的简历上面列有编程语言的话,确保你知道如何用它来编写实现 FizzBuzz 程序。否则的话,你只不过是在浪费所有人的时间,包括你自己的。

当然,为了在面试过后生存,你需要知道的不仅仅只有 FizzBuzz。你还需要确保你知道:

  • 基础的数据结构和算法:比如链表、数组、树以及排序。
  • 要知道所选择语言的常见解决办法,比如字符串是否恒定,内存是如何管理的。
  • 类似类与对象,以及继承等面向对象编程的概念。

在职业生涯开始时,你需要就这些问题做好准备,因为你并没有经历去证明自己能做好这份工作。在准备面试的时候有两个资源我会经常推荐:

  • Cracking the Coding Interview(破解面试代码)》,这是一本非常好的书,里面介绍了很多的编码问题和解决方案,同时还总结了解决这些问题需要了解的东西。
  • CodeWars ,这个网站收集了大量的编程问题,你可以运用各种语言在浏览器里面去解决这些问题。最有用的部分是看看别的用户是如何解决同样问题的。这样你就可以看到解决相同问题的不同办法,并且学到你所选语言的新工具。

  赋予自身额外优势

为了让自己取得那点额外优势,有几件事情你可以去做。

首先,学会如何沟通你的经验。你应该进行一次电梯演讲来将你的简历总结成连贯的、打动人的个人介绍。

此外,要了解自己的简历!听起来很蠢是吧,但我就见过很多面试者连解释清楚自己简历上的特定事项都很困难。你应该能够回答任何有关你列上简历的经历方面的问题,并且解释清楚这一经历如何让你成为本工作更好的候选人。

接着,要在 GitHub(或者其他的公共代码库)上面有一些编码的例子。

眼见为实,面试官能够看到你的代码将创造奇迹。此外,这还证明了你对版本控制系统有了解。

你的代码例子不需要太复杂,但是一定要整洁,能够显示出好的编码实践。这是你展示自己在没有编码面试所带来的时间压力情况下代码写得如何的机会。