坚持编程:如何找到一份工程师工作

说实话,你是一位优秀的工程师候选人吗?你怎么评价自己?你面试过多少家公司?你拿到offer的比率是多少?试一下用以下的公式来计算。


  1. x = number of companies interviewed with onsite  
  2. y = number of offers received  
  3.  
  4. value = 100 * log(x) * y / x 

如果你的计算结果小于90,请仔细阅读这篇文章;如果大于120,那你并不需要这篇文章。

我是谁?

我没有高中学历。我19岁从芝加哥前往南加州开始编程。我把所有东西装进了我的轿车里,身上只有400美金和一个offer,4万美金年薪的高级程序员。那是在12年前,当然又是另外一个故事了。

从那以后,我曾在  Double HelixNamco BandaiGoogle,Obvious and Square等公司工作过。也收到过来自Naughty
Dog
ActivisionRiot GamesBlizzardPinterestGoldman
Sachs
等公司的offer。正由于此,用前面提到的公司算出我的得分是132。

我至少面试过500位工程师求职者,他们之中大概10%会收到offer,3%我认为是”rockstar”求职者,他们留给我的印象尤为深刻。

我想告诉你,绝对没有万无一失的方法保证你被录用。因为这里面存在太多的不确定因素,特别是像Google这样的公司,你将会面对5-7个随机挑选出来的工程师,他们会选择一套他们认为合适的问题来进行面试,通常会包括“白板编码”。但是有一些工程师是很差劲的面试官,他们会问一些不公平的问题并作出武断的判断。但是没关系,这对我们来说正好,因为求职者通常会允许搞砸多轮面试中的其中一轮。

我可以做的就是告诉你怎样做好充分的准备,下面是我提供的一些建议:

技术建议:

1 坚持编程:

很简单,程序写得越多,你的收获越多。通过编程,你不断的练习。不过,最好的练习是有目标的练习。在脑海里有一个目标,开拓新的领域,和挑战自我。经过一段时间后,你需要给你完成的和未完成的项目建立一个主页。Github是一个非常好的用来建立项目主页的地方。

2 掌握至少一门编程语言

掌握一门编程语言会让你拥有敏锐的洞察力。为此,你必须编写大量的代码,阅读大量的代码,同时要学习代码里的最佳实践。理论上,一门语言会有一个很活跃的社区,和大量的产品代码提供学习。可选的编程语言包括C#、C++、java、PHP、Python和Ruby。

在C++面试里,有一个经常被问到的问题:“你给自己的C++知识打多少分,从1分到10分?”。我非常厌恶这样的问题。愿上帝帮助那些给自己打了 9-10分的人,因为他们很快会露出马脚。Bjourne Stroustrap给自己打了8分或者更少。这门语言真的太复杂,太丰富,而且随着时间的过去,演进了太多次。离题了:)。

3 理解复杂度

阅读这篇文章( Read this cheat sheet)。明确自己清楚复杂度的含义。然后实现一些常用的算法,比如Dijkstra’s, Floyd-Warshall, Traveling Salesman, A*, bloom filter, breadth-first iterative search,
binary search, k-way merge, bubble/selection/insertion sort, in-place quick sort, bucket/radix sort, closest pair 等。再次重复,坚持编程!

4 重复发明轮子

你应该使用你常用的语言来实现一些常用的数据结构。不要依赖于库。实现以下的数据结构并为其编写测试用例:vector (dynamic array), linked list, stack, queue, circular queue, hash map, set, priority queue, binary search tree等。你应该能够很快的编写完成。

5 解决问题

不要在google上这样搜索 like this。这都是一些基础的编程概念。你要做的是,至少花费40小时编写解决各种问题的代码。其中最好的资源是TopCoder(Read
this
),然后尝试去解决更多的问题。挑一些问题来测试你实现recursive, pattern-matching, greedy, dynamic programming, and graph problems的能力。浏览一下这些归档的问题(archived
problems
)。

这或许是我被Google聘请的首要原因,我有2个星期的时间沉迷在Topcode里。在那以后,我可以在闭上眼睛绑起一条手臂的情况下,编好 Dijkstra算法。我可以解决几乎所有的和图相关的问题。这都是在重复解答问题的步骤而已。Eric Schmidt说过“重复并不会使得祈祷没有意义”。

6 使编程简单

至少,使其看起来更加简单。随着时间的过去,我了解到,编程是工程师工作中最直接和最简单的部分。我常常用一个词组“a simple matter of programming”,因为我相信更复杂的部分是在编程之前和之后。例如,设计好你所要编写的代码和确保你编写的代码能够发布。让你的面试官了解你清楚的知道,编程只是到达目的的一种手段。

注意,在别人面前编码可能会让你感到害怕。自己找方法去练习白板编程和结对编程。Google基本上都是白板编程,而Square都是结对编程。我的朋友和同时Dan写了一篇关于这个的文章( Read this)。

其他建议:

在这里,我不能自称专家。事实上,有些人会说我甚至不善于和别人相处。但是我还是应该说一些非技术的建议,其中有一些还是非常明显的。

1 知道为什么你在那里

如果你在面试一家公司的时候,完全不明白为什么他们在这,他们是谁,他们在做什么,那么请不要去面试。

2 激情

如果你不在意,那么其他人也不会。对某些事情充满激情。可能是编程,或者别的。你会热衷于利用业余时间编写一个编译器吗?你会自己动手制造一个遥控直升机吗?只要你有激情,都没关系,你会使其变得有趣。

3 不要做任何假设

如果不确定,就询问。如果他们问了你一个问题,你不是100%的肯定问题是什么,那么请他们再问一次。我见过许许多多的求职者从不询问任何问题,结果浪费大量时间解答了错的问题。

4 微笑

兴奋,开心和积极。但不要过度。正如我前面提到的,人们会作出快速的判断。确保你留给别人的第一印象是好的。微笑是能够传染的,我常常带着糟糕的心情走进面试的房间,但是求职者一个合适的微笑会让我快速的恢复过来。

正如我之前所说,没有银弹能够让你被雇佣。但是,作为一个工程师,你能尽你最大努力做的是 ABC: Always Be Coding. – 坚持编程。

时间: 2024-10-03 18:25:06

坚持编程:如何找到一份工程师工作的相关文章

怎样找到一份深度学习的工作 | 附学习材料,资源与建议

如果你是一个软件工程师(或者你现在正在学习这一方面),你肯定有机会听说过深度学习(有时候深度学习缩写为"DL").它现在是一个热门.且快速发展的研究领域,解决工业界的一系列问题,从图像识别.手写识别到机器翻译,更甚于AlphaGo4比1击败了世界围棋冠军.  大部分人认为找与深度学习相关的工作应该具有博士学位或者大量的相关经验,但是如果你已经是一名很好的工程师,那你就可以很快.很好的学习这些必要的技能和技巧.至少,这是我们的观点.(即使你是深度学习的初学者,非常欢迎您加入我们的职位申请

大型IT外包公司招聘webMethods开发工程师,工作地区深圳,要求3年java 企业MIS系统开发经验

问题描述 招聘webMethods开发工程师,工作地区深圳,要求3年java企业MIS系统开发经验.有兴趣请发简历到kylixw@163.com

抬头族总是拥有一份好工作

职场人遭遇十面"霾"伏婚姻就像一座被围困的城堡,城外的人想冲进去,城里的人想逃出来.职场亦复如是.有多少人对自己的工作是满意的?在2012 年智联招聘的一项调查中,职场中人对自己的工作"很满意"的只有2.48%,"比较满意"的只有18.48%.为什么他们总是抱怨?智联招聘<2013 年职场"PM2.5指数"调研>给我们的答案是,薪酬.加班.背房.健康和职场安全感已成为压在职场人身上的"五座大山"

目前ASP.NET工程师工作流程及常用技能?

问题描述 本人毕业一年,因为不想没有一技之长,于是辞职自学http://ASP.NET,学习3个月后有些疑惑.想了解目前http://ASP.NET的工作流程,因为之前没有从事过软件编程,不了解常用到那些编程知识,网上众说纷纭,无法辨别.3个月中间学习了很多知识,但是却苦于没有一个全局观,不知道如何运用,以及学的东西到底有没有用.请教专业.NET工程师大大,不胜感激. 解决方案 解决方案二:工作流程很简单,客户或你的经理提出什么样的要求,你就在规定的时间内完成对方的要求就行了.至于说是要你写js

换了份新工作,可是与预期的并不相符

问题描述 最近换工作了,从原来的40%运维加60%的开发,变成了70%运维加可能的30%开发,本人的意向是主开发的,不过对于net来说一份不错的工作或多或少的都可能带点运维在内,本人并不反对运维,可是不能占太多的比例,他们招人的时候写的是招收软件开发工程师,我这算受骗了,刚进公司就又要开始找工作了.哎~ 解决方案 解决方案二:这也是正常现象我对象找工作的时候,他们答应年薪10万,结果进去了才发现是算上加班费的解决方案三:趁早赶紧闪人解决方案四:引用1楼Z65443344的回复: 这也是正常现象我

亿万富翁们的第一份卑微工作

放眼浙江民营企业,排名前几位的浙商几乎都是"草根"出身,没有值得炫耀的第一份工作,也没有让人羡慕的后台靠山:鲁冠球第一份职业是打铁,徐文荣.李如成躬耕田亩,邱继宝.南存辉摆摊修鞋,胡成中是一介裁缝,郑元豹是工人,郑坚江是修理工,汪力成是丝厂临时工-- 李嘉诚蝉联全球华商富豪500强榜首,个人财富达2278亿元- 这些白手起家的浙商杰出代表,在 中国市场经济刚萌动时,靠自己的勤劳.精明抓住了好时机.他们大都从事着传统行业,一步一个脚印累积起自己的财富,事业根基比较扎实.他们文化程度不高,

JS编程建议——38:正确认识正则表达式工作机制

建议38:正确认识正则表达式工作机制有很多因素影响正则表达式的效率.首先,正则表达式适配的文本千差万别,部分匹配时比完全不匹配所用的时间要长.其次,每种浏览器的正则表达式引擎也有不同的内部优化.要有效使用正则表达式,重要的是理解它们的工作机制.一个正则表达式处理的基本步骤如下:第1步,编译.在创建了一个正则表达式对象后,浏览器先要检查模板有没有错误,然后将它转换成一个本机代码例程,用于执行匹配工作.如果将正则表达式赋给一个变量,就可以避免重复执行此步骤.第2步,设置起始位置.当一个正则表达式投入

《Linux高性能服务器编程》——1.6 DNS工作原理

1.6 DNS工作原理 我们通常使用机器的域名来访问这台机器,而不直接使用其IP地址,比如访问因特网上的各种网站.那么如何将机器的域名转换成IP地址呢?这就需要使用域名查询服务.域名查询服务有很多种实现方式,比如NIS(Network Information Service,网络信息服务).DNS和本地静态文件等.本节主要讨论DNS. 1.6.1 DNS查询和应答报文详解 DNS是一套分布式的域名服务系统.每个DNS服务器上都存放着大量的机器名和IP地址的映射,并且是动态更新的.众多网络客户端程

高校学生热衷于找份兼职工作,积累社会经验

疑问一: 想兼职为何得先"入会"? 近日,南宁市民覃先生在招聘暑假工时,听闻不少学生称在58同城网上,有一条招聘信息,交100元入会费就可以取得兼职职业,主要工作是帮淘宝卖家刷信誉.覃先生觉得"淘宝卖家通过这种方式作假来欺骗消费者,很不合理",决定要曝光这种现象. 7月15日,覃先生花了100元"入会费",加入"上海惠馨网络有限公司",负责招聘的是一名女子,叫"赖金欢".在确认覃先生交钱后,她带覃先生进入了