分享

一些经典的计算机书籍

 guitarhua 2013-11-03
一些经典的计算机书籍
以下列表中的计算机书籍(中文版)来自微博:@程序员的那些事 粉丝的推荐。按推荐次数,从高到低往下排。如果大家还有其他计算机相关的经典书籍推荐,请在评论中留言,或者在这条微博的评论中留言,我们将继续扩充这个列表。
1. 算法导论(第2版)
2. 代码大全(第2版)
3. C++ Primer中文版(第4版)
4. 设计模式:可复用面向对象软件的基础
5. 浪潮之巅
6. Java编程思想(第4版)
7. Java核心技术 卷1:基础知识
8. Java核心技术 卷2:高级特性
9. 人月神话
10. Linux内核编程
11. C程序设计语言(第2版新版)
12. 黑客与画家:硅谷创业之父Paul Graham文集
13. 编程之美:微软技术面试心得
14. 代码之美
15. 软件随想录:程序员部落酋长Joel谈软件
16. 架构之美
17. 国外计算机科学经典教材:Unix & Linux大学教程
18. 深入理解计算机系统(原书第2版)
19. UNIX网络编程 卷1:套接字联网API
20. UNIX网络编程 卷2:进程间通信
21. 自动机理论、语言和计算导论
22. 软件架构的艺术
23. Effective C++中文版
24. Effective Java中文版(第2版)
25. PHP & MySQL Web数据库应用开发指南(第2版)
26. PHP经典实例(第2版)
27. C++ 编程思想 第1卷
28. C++ 编程思想 第2卷 两卷合订本
29. Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理
30. 数据库系统导论(原书第8版)
31. Python参考手册(第4版)
32. Python灰帽子
33. 提高C++性能的编程技术
34. 从网管员到CTO:网络设备配置与管理实战详解
35. 深入理解计算机系统(修订版)
36. UNIX编程艺术
37. 深入理解Java虚拟机:JVM高级特性与最佳实践
38. Microsoft.NET框架程序设计
39. 代码整洁之道
40. 编程珠玑(第2版)、编程珠玑(续)
41. 大话设计模式
42. C#开发宝典
43. 深入理解Linux内核(第3版)
44. UNIX环境高级编程 (第2版)
45. WCF服务编程:.NET开发者决战SOA的制胜利剑(第3版)
46. 现代编译原理:C语言描述 (虎书)
47. 高级编译器设计与实现 (鲸书)
48. 编译原理(第2版)(龙书)
49. Windows核心编程 (第5版)
50. C++标准程序库:自修教程与参考手册
51. 设计原本:计算机科学巨匠Frederick P.Brooks的思考
52. 软件框架设计的艺术
 
如何在技术面试中脱颖而出
在过去5年中,我面试了数百名IT工程师,我认为很值得把我的面试IT工程师的经验同大家分享。这能够:
●帮助人们为他们的下一个面试准备
●帮助IT工程师找到合适的工作。
●帮助IT工程师创造更好的环境。
我们通过两个方面面试IT工程师:
●技术技能:包括理论和实践技能以及经验等。
●非技术技能:性格,沟通技巧,是否能够融入我们的文化环境。
 
第1部分中,我将主要从技能部分讲述。
1、一个IT工程师应该具有的技能
我认为实用技能包含3个方面,如图1所示:
 
图1
这些都是很重要的:
●编码:你必须能够在限定时间内编写出高质量的代码。
●经验:具有相关经验表明你对该行业的热情,并能够在一开始就进入工作状态。
●理论:理论知识是IT工程师的基础,好的理论知识能够让你快速解决新出现的问题。
 
而准备工作面试的过程是一个提升自己各种能力的绝佳机会。
1、提高你的理论知识
(1)学习C语言
C语言是编程的基础。因此,学习C语言能为我们了解高层概念打下坚实的基础学习C语言的基础知识并不会花太长时间,只需要几个星期的时间一般就能够掌握。C没有太多的抽象封装,这就使得C语言相对简单,和其他人一样我学习C语言是看《C程序设计语言》这本书。
一旦你能够真正理解C语言中的指针和内存管理,C就会变成一门有趣的语言,因为它将帮助我们从处理器层面(底层硬件)来理解语言,而这正是其他大多数的高级语言所不具备的。同时了解这些概念,也将有助于你了解更高层次的语言工作。
(2)了解数据结构和算法
虽然在网站/应用程序开发中编写复杂的算法和数据结构比较少见,但是数据结构和算法在我们编写复杂系统的时候将会影响我们的思维。即使你不需要编写自己的数据结构,你也可能会在编程中使用到他,因此,了解基本的选择是至关重要的。
我推荐这本书,《算法导论》。由于这本书是很长,如果你没有时间把他读完,那也要学习其中的排序,哈希表,二叉树,字符串匹配部分。
一旦你很好的掌握了数据结构和算法,你会发现这些概念将只是将你做的每件事都总结成问题而已。
 
2、比较编程语言
一开始,你会经常接触多中编程语言。你可能还需要快速学习新的语言和概念。
为了加快学习,学习不同语言有助于我们了解他们的概念以及他们的相似及不同之处。
最好的办法是在下面每种风格的语言中学一门语言:
●底层:C语言。
●面向对象:JAVA,C++等。
●动态语言,高层次的语言:python, ruby 等
●函数式语言: Lisp, Erlang, Haskell等
 
3、至少精通某一种语言和一种框架
这能够说明:
●你既然能在一个领域成为专家,就表明你同样能在其他领域做得一样好。
●你理解这些语言/框架的细节可以让你根据不同技术的优缺点来做出决定。
●你有激情去深究一个项目并且深入语言的最底层。
想要成为专家需要花一定的时间和经历。这里有一些建议:
●尝试做不同的项目,这样能够帮助你理解编程语言。
●阅读其他人的技术博客。 Hacker News是一个很好的技术博客。
●为开源社区做出自己的贡献,例如在GitHub上能够查到你的代码。
 
4、提高实际编码能力
在这里我们在面试时主要通过3中方法来测试工程师的编码能力:
●你贡献到开源社区的代码(例如,在GitHub上)
●现场编写一段代码
●连续2小时编写代码的挑战
一个工程师的编码能力的质量和速度是重要的,而这只能来自于实践经验。
另外,使用合适的语言和框架对于一个项目也是很有帮助的。例如用Python和Ruby等脚本语言可以比使用像Java、C++这类静态语言的许多情况下更快。因为我们知道一个求职者可能在动态脚本语言方面没有太多经验,所以我们面试的时候并没有将其作为重点。
做一些有挑战的编程测试可以磨练你的技能。网上可以找到了大量的资源,这也可以测试你的编程速度,从而让你可以进一步提升你编写代码的速度。Google Code Jam上面有一些不错的题目。
 
5、提高您的相关技术经验
有一些相关工作经验是很重要的:
●这表明你对编程有一定的激情
●你的开发经验可以引导公司里的其他人
●你将会在工作中一鸣惊人。
●你有能力可以探究更多的现代技术,并有一个更加全面的视角
你可以从你以前的公司里或者其他项目中学到这些经验。
6、结论
当然,在技术方面仅仅是一个硬币的一面。第2部分中,我将探讨非技术方面。
 
(翻译并不一定完全准确,但是满足基本的阅读应该没问题)

我们到底要怎样招程序员?
我曾经写过一篇《我面试别人的常见方式》(转注:或直接参见下面绿色部分),也是我在上一家公司面试程序员采 用的办法,现在想来,我的许多观念已经发生了变化。面试的过程,是一个双向选择的过程,更是一个学习思考的过程,在这个过程中,沟通交流的时间特别多,这 和一般工作时间的氛围和体验是有所不同的。对人的选择,IT领域有太多的观点。这些想法几个月前就有,不过其实我更想等经历更多的面试,想法成熟一点再 说,不过最近一段时间也没有什么机会参加面试,所以我想先把这些思考记录下来。毕竟,错过的东西总是显得可惜。
1、热场,聊聊地点、家常,看看最基础的沟通能力,也帮助被面试者放松,正常反映自己的情况。
2、询问经历,包括学习经历和工作经历,尤其是实际项目经历,并就项目情况展开询问,可以了解擅长领域和工作经验。
3、简要介绍一下相应职位的工作情况,做什么业务,是用什么技术。
4、基础三项:数据库、数据结构、算法。不管面试什么开发工作,从我这边过的,我都要问这三项,每项可以一个小问题,可以只问问思路,了解一下情况,总之这是我个人的习惯。
5、目标工作需要的技能。最好是能从之前的项目经历中了解到,这里也可以补充一些问题,比如我们做J2EE开发我会问一些特定的技术,都不深,但是可以命中一部分知识面。
6、开放性问题。这些问题可能都没有所谓的正确答案,能自圆其说就可以,另外也很容易通过这种方式观察一个人在项目团队中的风格。
7、询问被面试者还有什么特别精通擅长的我没有了解到,或者有没有想问的问题。
整个过程大部分问题都是临时想到的,或者根据被面试者的介绍发散开去的,但是不能没有准备,尤其是开放性问题,准备一些题目,尽量不要采用热门的或者容易被预料到的,失去一部分问题的成色。
 
 
 
选择“知识”还是“能力”?
从拿来即用的要求出发,知识开阔、有丰富经验的程序员总是更受青睐;当然,也有面试官喜欢寻找那些潜力股,或者是低调务实、但是很善于学习、分析和 解决问题的人。从企业和项目组的角度来说,我们需要这两种人,轻视这二者任一项都是欠妥的,但是你肯定希望结合实际情况作出判断。
为一支团队寻找人,考虑的是他能为团队带来什么,或者可预期的未来他能为团队带来什 么,而不是去考虑总要让团队去帮助他才能完成什么。这也是为什么某些企业宁可多花钱,也要把人才选择标准定得很高,选择“能干”的人的原因。毕竟像东软这 样甘心做人才培养基地,同时一做就是好多年的企业并不多。但是东软在大多数情况下还是让我尊敬的,真正让我痛恨的是那些以人口贩子自居的外包(也包括所谓的“内包”)公司,纯买卖廉价劳动力。我许多次都说,如果你有志气和能力,就不要去这些所谓的“技术合作”公司,这类公司只是在压榨劳动力,赚取劳动力买卖的差价;如果你是这样的人,但迫于生计才走上这条路,我建议你多为自己着想,更努力地去学习那些优秀的技术和业务,然后随时准备打包离开,未来也不要再选择外包公司了。
 
打造一支优秀的杂牌军
我觉得一支理想的队伍,首先要和项目契合,其次项目组成员要足够优秀,再次要具备各异的技术、业务背景。
和项目契合说的是,当我在做一个C++开发的游戏的时候,我肯定希望团队中的大部分人在这方面是有经验的,C++经验或者游戏开发经验。
项目组成员足够优秀,就像Google要寻找最棒的程序员一样,就像世界上那些足球豪门俱乐部一样,一个人的价值,很大程度上是由团队的成功体现的,而优秀的团队,是吸引优秀程序员重要砝码。
各异的技术、业务背景,指的是团队中的成员最好是多元化的,有做过DBA的、有擅长做UI的、有业务经验丰富的等等。杂牌军的好处很多,尤其在做决策的时候,不容易偏激。
同时,需要强调的一点是,面试官有义务让通过的面试者在未来的工作中觉得够爽,所以我们需要传达出准确的信息,这份工作是做什么的,涉及哪些领域,是不是和你喜欢做的事情契合?有想法的人当然会有所要求。
 
识别出那些大忽悠
有一些人很能说,但是同样很能干;但是更多的情况是,口若悬河的人只是口若悬河而已。如何把那些纯理论派识别出来,并不是一件容易的事情。我以前公司的一位架构师告诉过我一个办法,这些人并不能坚持一个具体和明确的观点,他们更会察言观色,你只要对他们的思路或者办法提出的质疑,很可能看见他们掉头,以及不断地尝试自圆其说。现在,我则学会了另外一招:让他们写一些实际的代码吧。
 
态度和激情,有多重要?
有人说,毕业生的激情是最不值钱的,原因很简单,太多的毕业生简历或者自我介绍上都说道“对技术充满激情”。可是,持续对技术充满热爱和激情的人, 并不多。大多数人只是停留在口头上。判断这一点的办法是,不妨询问一些相关的、热门的技术,对于技术有热情的人,往往会去了解这些东西;还有一个办法是, 试着说一些和前述观点违背的话,对技术有热情的人很可能会给出不同意的回应,或者尝试反驳你的观点。要不然,他更多的时候是一个“无所谓”的人。
观察工作和学习的态度,这也是很难拿捏的,毕竟应聘者基本上都是带着一张面具来的。有能力并不代表可以足够努力地工作,你雇佣我,付我钱,我为你创 造价值,愿买愿卖,互利合作的关系没错,但是如果能寻找到热爱工作和热爱产品的程序员,岂不美哉?国内的许多公司还在用“待遇”、“薪酬”、“年假”这些 名词吸引程序员,我当然不是说这些不重要,只是这种情况下你得到的,当然是一些为了这些物质条件而来的人;但是你也可以看看那些伟大公司的愿景,许多都是 为了世界、为了全人类的某个目标而工作,他们招到的程序员,追求自然有所不同。当然,你也许会反驳我,大部分公司是不适合唱这些高调的,就像曾经说过的, 物质文明还远不足够的时候,还是不要扯精神文明的蛋。
我的同事告诉我,他的一位朋友创业,在创业公司中起初也采用程序员宽松约束、自我管理的方式,结果死得很惨。毕竟现实和理想大多数情况下并不在一条水平线上,如果你要玩这些听起来牛逼哄哄的游戏,你当然得找对玩家。怎么找,我的想法有一些,但并不多,我很想知道大家的看法。
 
招合适的人,码农也好、程序员也好,刺儿头也好、老好人也好
这又是理想和现实之间的平衡,我以前单位的一位朋友招人的时候,就明确了希望寻找听话的人、寻找毕业不久的孩子,“可以不很优秀,但是可以让我不花太多精力在监督他们的工作上”。这就像一些朋友给我的留言所说的一样,中国太需要程序员了,但是中国的很多企业目前也非常需要码农,很容易洗脑、很容易管理,努力干活,又不闹事儿,你不能指望他们能干出什么伟大的事儿来,但是他们不给你添乱,老老实实的干活……这是多么残酷、多么讽刺的话,但是无比现实,尽管我希望这样的场景越少越好。
对于刺儿头,我还真遇到过一个相当典型的,那是在我刚参加工作的时候,只要有争论,就见其找茬,到后来我们开会都不敢带着她,一个刺儿头的破坏力, 远远大过几名优秀程序员给团队带来的正面影响。但是团队中,又不能都是老好人,这样的团队会缺少活跃的气氛、缺少想法,甚至缺少做决策的人。
 
摆出低姿态去招人
都在说非985和211的不要,或者说重点院校毕业是一条重要考量依据,我能够理解在人才竞争如此激烈的今天,会有这样的标准。但是从我工作中实际 接触的人来看,就是有很多优秀的程序员,他们的学校没那么有名,甚至专业完全不对口。当然从内心上讲,我希望这样的学校背景约束还是尽量少一些。
低姿态的另一方面是对于应聘者的态度上,我曾经在这篇文章中扯到过这一点。不过今天我要说的是,在询问应聘者问题的时候,是应该以专家的姿态,还是以初学者的姿态?我更倾向于后者,虽然你可能对某个问题、某个领域了如指掌,但是在面试过程中,适当地“装不知道”可以发现对方更真实的一面,比如爱吹嘘的人在遇到别人“不知道”的时候,下嘴可就更猛了;不够自信的人在遇到别人“不知道”的时候,可能更敢说了……

给明年依然年轻的我们
今天是22岁的最后一天。几个月前,我从沃顿商学院毕业,用文凭上“最高荣誉毕业”的标签安抚了已经年过半百的老妈,然后转头辞去了毕业后的第一份 工作,跟一家很受尊敬的公司、还有150万的年薪道了别,回到了上海,加入了“刚毕业就失业”俱乐部,开始了一天三顿盒饭的新生活,中间许多精彩剧情暂时 略过。
我肯定不是第一个做过这样事的人,也肯定不会是最后一个。所以在说自己的一些有趣故事前,我想借用大家(包括30岁甚至40岁以上的朋友)的一点时 间和一点平和的心态,和大家分享过去一年以来一直没说的一些话。所以前两部说的是对于一些一直困扰着我们的关键词的理解和体会。他们是:欲望、外界、标 签、天才、时间、经历、人生目标、后悔、和现实。
这可能会是一篇科普文,也可能会是一篇长篇小说,但我不想这篇文章变成一篇励志文,大家都审美疲劳了。所以我想忽略阳春白雪,尽管信息量很大,但是 至少说一些实实在在的经验和故事,说一些效果立竿见影的观点,再说说活捉林志玲什么的,总之让大家多看一点就多获得一点实际的价值。
 
第一部:那些最容易被理解错误的事
 
关于欲望
这些是我们内心里和人生理想一样真实的东西:学历、工作、房、车、财富、以及爱。我们每个人都愿意为了这些欲望去付出,无论付出的是汗水、鲜血、还 是身体健康、又或是其它你懂的。尽管我们付出的方式可能不被社会主流认同、可能没那么具有有戏剧性,但你和我、北大图书馆里的学生和网吧中奋斗的少年、职 场杜拉拉和夜场里跳舞的小姐、韩寒和芙蓉凤姐(韩少躺着也中枪-_-),我们谁没有为了一个目标连续熬夜奋斗过呢?我们谁没有为了得到一样东西而撕心裂肺 地付出过呢?谁没有过那种拼命得快受不了的感觉呢?所以我们最不缺励志的故事,因为我们每个人都是付出领域的专家。
真正的问题是,当我们跑得越快,越是无法考虑我们是否在朝着正确的方向奔跑。
北野武讲过一个很有趣的故事。他说他没出名之前想有一天有了钱,一定要开跑车,吃高档餐厅,跟女人们睡觉。而真正功成名就的时候,他发现开保时捷的 感觉并没有那么好,因为“看不到自己开保时捷的样子”。结果他就让朋友开,自己打个出租车,在后面跟着,还对出租司机说:看,那是我的车。
我想说,过去几年里我认识的、深交的、共事过的所有人,包括身边一批又一批二十出头收入一百多万的金融朋友、三十岁左右收入几百万的前辈朋友、以及简历金碧辉煌得已经不在乎收入的大BOSS、以及我自己的经历告诉我两件事:
一,顶级学校的文凭、顶级公司的工作、顶级的收入、顶级的房、顶级的车、顶级的声望,这些都无法满足人类。
二,无论是通过爸妈,通过运气,还是通过奋斗得到这些顶级的东西,人类都不会得到更多的幸福感。
接着北野武的故事说下去。想象一下:你今天骑在一辆助动车上,一个小山村来的年轻人经过,说你的车好帅,你不会有任何的满足感。十几年的奋斗后,你 坐在一辆你今天都叫不出型号的保时捷的驾驶位上,一个路人经过,说你的车好帅,相信我,你也不会有任何的满足感。你不在乎他,就像你今天不在说你助动车帅 的人。你的视角在变。每当我们考虑许多年后能够取得的成就,我们总是习惯站在今天的角度去衡量幸福感和满足感。你今天的视角只是错觉,却让你相信自己的目 标是正确的。这是我们最容易跑错方向的时候。
人类的需求是很奇特的。我们吃第一个面包的时候的幸福感,和我们吃第一千个面包的时候的幸福感,是差不多的,前者甚至比后者还多一些。同样的感觉适 用于我们赚到的第一笔一万元和第一笔一千万元,第一辆十万的车和第一辆一千万的车,第一个女孩和第十个女人,第一个男生和第十个男人。“生理需求、安全需 求、归属与爱的需求、尊重的需求和自我实现的需求”-在著名的马斯洛五大需求中,你从任意一个细分需求里获得的幸福感只能有那么多。
我们清楚地知道快感和幸福感的不同,我们也知道欲望和需求是两个东西(你从来没有听说过“马斯洛五大欲望”对不对?),但是我们的不幸福却是因为不 小心把快感当成了幸福感,把欲望当成了需求,而这就是因为我们常站在现在的视角去想象未来的感受。事实是,就好像我们不需要很多的面包一样,我们不需要很 多的财富,不需要很多的爱。因为他们很难给你带来更多快乐。当然,我们也不需要去拔高理想和自由的重要性。你可以尝试着停下来思考一下,这五种需求是否真 的有高低之分,思考一下,是否连最贫穷最饥饿的人们,都一直在生活中同时追求着这五个高低层次的需求。你会发现其实这五种需求一样真实,离你一样近,也一 样远。然后你需要找到一个可以同时实现这五种需求的平衡点。这个平衡点就是只属于你的奔跑方向。这篇文章会实实在在地帮你找到这个方向。但在这之前,我们 先谈一些别的。
关于外界
外界带给我们生活最大的影响是嫉妒和比较。
我们一直高估了嫉妒。举个例子,没有人嫉妒雷帝Gaga。雷帝Gaga应该要比我们都更有名、更有钱、坐更好的车、住更大的房子,比我们更随心所 欲,而且也比我们更有才华。但你不嫉妒她,对么?我们没有人嫉妒雷帝Gaga-因为她实在是太雷了。她奇怪得让我们完全不能把我们自己跟她联系在一起,所 以我们在名利和才华面前没有自卑,也没有嫉妒,更没有仇恨。反而,我们会去思考,觉得她挺有趣的,挺发人深省的,不是么?
所以当你见到好事情发生在了那个他或者那个她身上,嫉妒的小火苗在你心中扑哧扑哧的时候,不如把TA当成那个很奇怪的雷帝Gaga吧。因为这样的时候,我们就会懂得抛开个人的杂念,去真正思考别人的亮点。
至于比较(Social Comparison),我们可以选择努力向那个绩点4.0的同学看齐,努力向那个年薪几十万的旧识看齐,努力向那个不断得到提拔的同事看齐。或者,我们 也可以选择看看外面更大的世界,那些和我们一样年轻的人们。看上去像是有30岁阅历的阿呆Adele,19岁时出了张白金专辑《19》,21岁时出了全销 量1200万张的专辑《21》,拿了两座格莱美。她出生于1988年。眼神和心态似乎已经像中年人那样淡定的杜兰特和德里克罗斯,两个毫无疑问的超级球 星,他们也出生于1988年。如果你喜欢实用一点的,那么iPhone上用户量最大的个人开发第三方浏览器猛犸浏览器的开发者,是一个1992年出生的北京少年。如果你的视线中有一个世界舞台,那么你会看到上面的人物已经越来越接近你的年龄。
我们不需要去看齐,我们只需要去“看”。去看到这个世界除了你现在正处在的那个若干平米的封闭空间以外,还有许多许多精彩的事正在发生。当你发现这 个世界的深度和广度,你就会发现你跟你身边的那些“同类人”根本没什么好比的。这个世界太大了。你不是你自己的标杆,别人也不是。谁都不是你的标杆,这是 一个没有标杆的时代。
我们要做的是试着不去嫉妒,不去比较,更不要批判,但要试着去观察、去倾听,然后去思考、去沉淀、去让所有外界的信息在你大脑里经历一个长时间的处 理过程。在你的大脑还没有沉淀出你自己对一件事的观点前,不要发表观点,不要给出你的定论。我们可以不断在大脑中质疑我们所看到的、听到的,我们可以不断 挑战自己的想法、挑战任何理所当然的存在,只要我们保证我们的大脑一直在思考,独立地思考。要记得,你和世界上所有人都不一样。
关于标签
“牛逼”是过去几年里笔者听到的比较多的一个形容词。当我们喜欢的人称赞我们的时候,我们总是P颠P颠的。在这里为自己开脱一下,觉得这挺好,说明活得挺真实。
但笔者想用一个很好的朋友(自己来认领)去年当着我面描述我听的原话,来翻译一下这个已经被用得和“帅哥”“美女”一样烂俗的词。她说,“你想太多 了(这是她一贯的开场白)。你只是有很多很牛的标签-上海中学、沃顿商学院、最高荣誉、黑石的全职Offer、百万年薪。至于你本身么,牛不牛就说不清楚 了。”
这个故事告诉我们:一、“牛”和“帅哥”“美女”一样,是一种打招呼的方式,二、“牛”的从来都是那些标签,那些改变了金融产业的企业,那些通过培 养人才改变了世界的学校,那些定义了时尚的品牌。虽然我无意改变大家打招呼的方式,但对于还没奔到三的人类来说,“高档”“精英”“牛逼”其实不如“做得 不错”或者“挺有意思的”来得更实在。当然,等奔到了三,我们就更不想用这些词了。
如果你曾经或者将来获得了任何标签,不管是高盛中金麦肯锡,还是北大清华常春藤,又或是Gucci Prada Armani,有两件事值得思考一下。
第一件事用来提醒自己:撕去这些标签,我们或许还未能为500强的客户们创造等同于我们年薪的价值,我们或许还未能用知识改变世界,我们或许还未能把那件衣服穿出五位数价格的范儿。
第二件事用来看清自己:这的确是一个人人都用标签来识别对方的社会,但是我们要记住我们的价值和我们身上的标签没有半毛钱关系。成功不是你有什么标 签,而是你用这些标签做了什么。(是的,文章开头的“沃顿商学院”“150万”“最高荣誉毕业”这些个标签让一部分人把这篇文章看到了现在,但无论如何, 对于心理上被冒犯到了的人,在此致以诚恳的歉意)。
总之,把标签用在正确的地方,创造一些价值,虽然不是大到改变世界,也至少带来一些存在的意义。就不展开来说了。
关于天才
不要去考虑什么天赋异禀,一切都来自经历和渴望。特别是这些年,当我认识了一些全中国、甚至全美国最“天才”的年轻人以后,才发现哪有什么天才,如 果把他们的经历一个个说出来,大家肯定觉得完全就是一群苦逼啊。但这些苦逼有一个共同点,他们很清楚的知道自己究竟需要什么,并且很嗨地追求着。
 
第二部:那些最重要的事
 
 
关于时间
时间是唯一的货币。你所拥有的财富很重要,因为你可以用它用来换很多东西。你所拥有的时间远远更重要,因为你可以用时间来换这世界上的任何东西,包 括财富,包括成就感,包括幸福感,包括其他那些我们都清楚的、比财富更让我们的生命有价值的东西。是的,每个人拿时间换每样东西的汇率都不同,有些人可以 用很少的时间换到很多的财富,有些人需要用很多的时间换到很少的幸福。但是事实是,只要你愿意花时间,你可以换到任何东西。所以你要想清楚,你到底要用时 间来换取这世上无限可能中的哪些。打开你的视野,你会发现有太多经历和体验可以让你去换取。但你的时间银行里每天只存了24个小时。你可能以为你还有一辈 子的时间去做一些你想做的事,但事实是,没有人可以保证明天上帝是否会往你的银行里存另一个24小时。所以,你要想清楚。
关于经历
如果你今天能从这篇文章中带走任何一样东西,我希望会是接下来关于经历的这一段。
经历的英文叫什么?如果你曾经玩过角色扮演类游戏(RPG),你会知道有一个概念叫EXP,全称叫Experience,这就是经历的英文。人生就是一场巨大的RPG,你扮演你自己。你唯一升级的方法,就是不断地积累EXP。
我们都了解那些故事,我们都懂那些道理,看了那么多励志贴,我们甚至都快知道为什么乔布斯会成为乔布斯。但只有经历才能让我们真正把那些道理变成意识。那些改变我们一生的道理,都是不是别人教会的。
所以即使你有最完美的理论,你都没有把握说服那些还没有开上保时捷的人们,让他们懂得保时捷不是他们想要的,也没有把握去说服那些还没有在投行工作 过的孩子,让他们懂得去放弃投行(更何况,对于那些热爱金融的孩子来说,你的劝诫极有可能是错的)。所以哪怕这篇文章非常努力地想要往实用的方向靠拢,可 能你看完以后还是没有任何领悟。这一切就像你无法说服还没有吃过很多很多面包的人们,让他们懂得吃一千个面包是要反胃的。
在人生的每个阶段,只有我们已经拥有的那些经历,决定了我们下一步会做什么。所以很多时候,你只要记得一件事,那就是: 去体验不同的经历。去爱,去恨,去在热恋中没心没肺地笑,去在失恋后声嘶力竭地哭,去翘课,去打架,去拼了命的读书,去让自己真的领悟那些道理。你所尝试 的事,你所认识的人,都是你经历的一部分。他们帮助你去理解你一只知道但是不曾真正理解的事,他们帮助你去看到一直存在着但是你不曾看到的世界。
但是,你的人生很短,你的时间货币只有那么多。所以除了乔布斯已经告诉你的“不要生活在别人的世界里”你还要记得,永远不要重复一样的经历,因为你 不会从第二次一样的经历中收获到更多,更因为这个庞大的世界有太多有趣的人等待着我们去认识、太多截然不同的经历等待着我们去体验。
这篇文章也会实实在在地帮助你探索不同的经历。你只要记住,如果你每个星期都在做着差不多的事情,那么一年以后你还是一年前的你,只是老了一岁。如 果你愿意每个星期、或者每个月都去尝试一种新的体验,或者认识一个来自完全不同背景的朋友,那么一年后你和一年前一样年轻,只是比别人多活了一年,多了一 年的阅历和对世界的认知。
关于是否会为了去经历、去追随感情和理想而后悔
我们一定会后悔。但我们不会为了作出追随感情、或者追随理想的决定而后悔。事实是,如果我们有努力追寻、不愿放弃的梦想、如果我们有深爱的、不想伤 害的人,那么在这条道路上,我们必然会为我们曾经做过的某些事而后悔。当我们离理想和真爱越是近,我们越是容易后悔。就好像晚了一分钟错过飞机的人会比晚 了一个小时错过飞机的人更后悔懊恼-因为我们会清楚地看到如果自己不曾犯下某些错误,如果我们再多那么一点点的坚持,就或许已经实现了理想。所以后悔其实 是一个信号,它告诉我们,离目标已经很近了。更重要的是,我们活着不是为了追求什么瞎扯的“无悔的生活”,我们不用为那些后悔而伤心痛苦。因为在我们选择 的这条道路上,后悔不是告诉我们曾经做错了,而是告诉我们怎样可以做得更好。
关于如何找到人生目标
兑现承诺的时候到了。我想用一种最简单、直接、有成效方法来解决那些励志文章和成功故事的一个通病:就是他们一直鼓励我们“做我们想做的事”,但从 来不告诉年轻迷茫的我们怎么去找到“我们想做的事”(以至于误导了很多朋友以为那就是“我想一觉睡到国庆节”或者“我想做个吃货”之类的意思)。
我要说的这个方法在我认识的许多人身上成功过,但它不是我想出来的。知名博客写手Steve Pavlina在它的博客中对这个方法有很详细的描述,但似乎也不是Steve Pavlina自己想出来的。网上也有不少中文翻译版本,有可能你曾经看到过,但那些翻译都有失偏颇,以至于让读者很难理解精髓。所以在这里把原文重新编 辑,结合以上的经验分享,再用比较适合中国人的陈述方式分享给大家。如果你愿意尝试,愿意按照要求去做,或许我们可以用接下来的不到500个字,帮助你在 20分钟到1个小时内找到你的人生目标。
我们开始吧。
(1) 先在你忙碌的生活中找出一个小时的完全空闲的时间。关掉手机,关掉电脑,关上房门,保证这一个小时没有任何打扰。这一小时只属于你,和你要找到人生理想这 件事。你要记住,这可能是你人生最重要的一个小时。你的生命可能在这一个小时候变得不同。如果一个小时的时间货币只能用来换一样东西,那么就是找到你的人 生目标绝对是最值得的。
(2) 准备几张大的白纸,和一支笔。
(3) 在第一张白纸上的最上方中央,写下一句话:“你这辈子活着是为了什么?”
(4) 是的,接下来你要做的,就是回答这个问题。把你脑中闪过的第一个想法马上写在第一行。任何想法都可以,而且可以只是几个字。比如说:“赚很多钱。”
(5) 不断地重复第4步。直到你哭出来为止。
是的,就是这么简单。尽管这个方法看上去很傻,但是它很有效。如果你想要找到人生目标,你就必须先剔除脑中所有那些“伪装的答案”。你通常需要 15-20分钟的时间和过程去剔除那些覆盖在表面上的那些受到外界观念、主流思维影响而得出的答案。所有的这些伪装的答案都来自于你的大脑、你的思维、和 你的回忆,但真正的答案出现时,你会感觉到它来自你的内心最深处。
对于从来没有考虑过这类问题的人来说,可能会需要比较长的时间(一个小时或者更多)才能把脑子里面的那些杂物剔除掉。在你写到50-100条的时 候,你可能会想放弃,或者找个借口去做别的事。因为你可能觉得这个方法没有任何效果,你的答案很杂乱,你也完全没有想哭的感觉。这很正常。不要放弃,坚持 想和写下去,这个抵触的感觉会慢慢地过去的。记住,你坚持下去的决定会将这一个小时变成你人生最重要的一个小时。
当你写到第100个或者第200个答案的时候,你可能突然会有一阵内心情感上的涌动,但还不至于让你哭出来。这 说明那还不是最终的答案。但是把这些答案圈起来,在你接下来的写的过程中你可以回顾这些答案,帮助你找到最终的答案,因为那可能会是几个答案的排列组合。 但无论如何,最终的答案一定会让你流泪,让你情感上崩溃。
此外,如果你一开始不相信人这辈子活着有什么目的,你也可以写下“1. 活着不为了什么。” 没关系,只要你愿意坚持想和坚持写下去,你也会找到让你哭出来的答案。
作为你的参考,Steve Pavlina在做这个练习的时候,花了25分钟在第106步找到了他的最终答案。而那些让他有一阵情感涌动的答案分别出现在在第17,39,53步。他 将这些抽出这些答案重新排列,最后在第100步到第106步答案得到了升华。想要放弃的感觉出现在第55到60步(想站起来做点其他事情,感觉极度没有耐 心等等)。写到第80步的时候,他休息了2分钟,闭上眼,放松大脑,然后重新整理自己的思绪。这么做很有效果,在那2分钟的休息后,他的思路和答案变得更 加清楚。
如果你一定要拿笔者来做参考,那么答案是我当时比较无知,还不知道这个系统的方法,所以我用了四个月的摸索和迷茫,撞了很多墙,才找到了最终的答案(在第二章个人故事里会提到)。但经过笔者核实,这个方法科学有效,只因为它提炼出了关键的原理。
无论你愿意用什么方法,你最终的答案一定会是一句比较长的句子,或者几句句子的组合。这个答案在外人看来一定非常的空洞,就像是我前面所说的那种 “谁都知道,但是只有少数人真正理解的大道理”。但是这几句空洞的句子会对你有非常丰富而且有意义的含义-因为这是你自己用了至少一个小时的时间和精力去 整理你过去所有的经历,去思考,去判断,去剔除,去整合,去沉淀,最终领悟出来的。如果你认真看完了从文章开始到这里为止所有的分析,你就会理解为什么这 个方法是非常有效的。
关于为什么要有个人生目标(以及它和活捉林志玲的关系)
这是个好问题。所有人的终极目标其实都一样,就是用有限的人生货币去换最多的幸福感(这个幸福感可以来自内在的、外在的、和世界上任何人和物)。但 大部分人都觉得这是件很困难、而且不知道如何下手的事。最大的问题其实就是,如何最大化人生幸福感是一个几万行的方程式,当中你要做出数亿个选择,而我们 却指望用逻辑去解决它。你也知道,逻辑是多么不靠铺的一个东西。很多时候,你往往觉得你已经把脑子想炸了,但还是做不出一个选择,这是大脑逻辑功能达到处 理极限的问题,它只能解决绕五个弯的问题,面对绕一百个弯的问题它弱得和奔2一样;又有的时候,你的逻辑很容易被你的欲望给废掉了,这个情况最常出现在早 上起床的时候-“我该起床么?”“Hmmm…睡着挺舒服的,不起了。”-你以为你用逻辑完美地解决了问题,其实你只是让欲望解决了问题,然后用逻辑完美地 说服了自己。所以我们经常在过了一段时间后,突然发现,我们的欲望挂着“逻辑”的羊头“解决”了所有问题,但是自己却空虚得没有任何幸福感。我们不想这 样,所以我们需要把你的大脑处理每一个选择的过程变得非常简单正确。
确立一个人生目标为什么可以解决这个问题?很简单,人生目标把你那个不知道是什么火星进制的大脑逻辑简化成了二进制。假设你的人生目标是“活捉林志 玲”(当然,这只是一个不可能发生的例子,千万不要有人因为写到这个目标哭了出来),那么你每天早上的起床的时候的过程就是:“我该起床 么?”“Hmmm…继续睡下去能帮助我活捉林志玲么?”“很明显不能。起床!”
这就是你听过很多励志演讲者会说:“究竟是什么让那些幸福快乐的人每天一大早醒来想也不想得就冲下床去做他们要做的事情?”-是林志玲。噢不,是他 们的人生目标。其他事情也一样:“我要吃饭么?”“不吃饭我能活捉林志玲么?””不能,所以我要吃饭。”“我要去夜店么?”“去夜店能帮我活捉林志玲 么?”“不能,锻炼好身体一定可以。所以我还是用去夜店的时间货币去换强健的体格和咏春拳吧。”你会发现你不用再去依赖不靠谱的复杂逻辑,做任何决定都很 简单而且正确。当然,你的人生目标会“活捉林志玲”看上去高尚、空洞很多,它也一定会涵括你对自己、对身边亲人好友、对世界的考量。但记住无论如何,你那 外人看似空洞的目标曾让你哭出来,所以它对你来说一定有极为丰富的含义。
最后,你可能会问:“我怎么能确定一直按照人生目标做出选择,我一定能最大化幸福感呢?” (其实这个问题看上去不怎么需要解释的)那是因为你的人生目标是你自己剔除了你欲望带来的杂七杂八的“伪装的需求”,经过沉淀以后得出的你内心最深处最想 要的东西,它是你真正的需求。跟随着它你会在短期获得应该获得的快感,更会在长期得到你需要的幸福感。
关于现实和人生目标
我想给所有已经、即将、或者希望找到人生理想的人,和大家分享两个很平凡的故事,作为结束。
我想讲的第一个故事来自我大学最重要的两个导师之一。他是沃顿的一个明星教授,麻省理工本科,哈佛法学院毕业,五十多岁,教了十七年谈判学的课程。尽管他的课作业量很大,但每一年他的课都已几乎满分的学生评分位列沃顿所有课程的前三甲。
在我大学毕业前,我约他在费城附近的一个小镇吃了顿午饭。他跟我讲他年轻时候的故事的时候,我问他,他这辈子做出过得最让他后悔的决定是什么?
他说,他从小一直很想当老师,特别是小学老师。当他二十多岁从麻省理工毕业的时候,他有一个很好的机会,去家里附近的一家他很喜欢的小学做老师。但 即使在美国,小学老师也几乎是待遇很低、不受尊重的一个职业。而同时,他拿到了哈佛法学院的Offer。最后他去了哈佛法学院,而这就是他这辈子做出过最 让他后悔的决定。他后悔,不仅仅因为他后来发现哈佛法学院是那么的无聊而且勾心斗角,更因为他当时为了一个被社会所尊重、所仰慕的选择,放弃了一个被社会 遗弃、看不起的选择。
他说他很幸运,一直那么喜欢当老师,在从法学院毕业许多年的颠沛流离以后,终于如愿以偿成为了一个老师。当我和一些人说起这个故事的时候,他们的第 一反应就是,这不是乱说么?如果不是去了哈佛,他可能现在还只是个小学老师,根本不可能成为沃顿教授啊。我想,现实和理想的意义对于每一个人都是不同的, 我们只需要理解并不是所有人都觉得成为成为名校的教授是比普通学校的小学老师更伟大、更幸福的成就。
第二个故事开头,我想问一个问题:你有没有考虑过我们每天上校内上微薄,看到很多人分享各种励志、免俗、追求梦想的文章,但他们最后究竟做什么去 了?你可能以为他们马上回归现实去了。但其实他们很多时候,是怀揣着那些道理,继续去做他们知道怎么做的事情。这就有了第二个故事。
每一个二十岁左右的年轻人都像一台高速运行的电脑。一代比一代运转地更快。我们从懂事开始就有别人告诉我们要运行各种程序,上幼儿园,上小学,上初 中,上高中,上大学,工作,等等等。我们停不下来。关键是,我们很难运行自己想要运行的程序,因为过去二十年里面我们运行的所有程序都是别人编好以给我们 的-我们自己不会编程序。
如果有一天,有一台电脑突然下了决心,要运行自己的程序,他就必须先停下来。这时,他会看着周围所有的电脑依然在高速运行着,甚至嘲笑他怎么不动 了,然后把他远远地甩在后面。而他,需要慢慢地开始学习自己编程,这个过程很漫长,很痛苦,因为从来没有人教过他。这就是为什么世界上只有少数人在运行自 己的程序。
说这两个故事不是为了励志,而只是为了告诉大家如果今天或者明天你找到了人生目标,将会发生一些什么:一、即使你内心已经明确地知道你想要什么,依 然会有一些更为社会认同的东西来诱惑你,要永远记得坚持。二、如果你坚持了,你一定会经历一个学习自己写程序的过程,这个过程会是痛苦并漫长的。总有一天 我们会愿意去面对这个过程。好消息是,我们都还年轻。所以不如趁着现在还有那些热情和勇气,去撞一撞那些墙,用最少的代价。
 
第三部:过去一年里的个人故事,给所有十年来认识的、和喜欢听故事的朋友们
 
辞职前的故事
我从去年暑假结束,拿到回黑石的offer后,就开始了寻找自己人生目标的旅程。2010年的九月到12月,我过得挺糟糕的。因为我每天起来都在想 我接下来这辈子要干什么。我可以很清楚地看到如果我接受了那个offer,我未来两年的前景。我们办公室里有一个韩国人Jay,我实习的时候是他做分析师 的第三年。每年的反馈中,他都是黑石他那一届全球所有分析师里最强的那一个。我没有怀疑自己能够成为这届最好的分析师,但同时,我也可以很清楚地看到,J 是我能成为的极限。但仔细想想,J也不过只是那样,像永动机一样地在办公室努力工作,像尊贵的孩子一样在夜店潇洒地玩耍。J是最出色的,但也是黑石所能创 造的最出色的。
后来我想到了环境的局限性,想到了密集网络。我在上中的时候,我这届最好的学生去了北大和清华。而在沃顿时,最好的学生去了高盛直投、贝恩资本、凯 雷、KKR、Jane Street等买方。我想到我们是不是已经成为模式化思维的牺牲品(victims of stereotypes)。 我们的社交圈里都是与我们同类的人,我们互相交流、竞争、鼓励、启发,处于所谓的密集网络。我们自以为我们充分见识了整个世界,但其实我们只是在重复肯定 同一类信息。所以如果你是“最出色的”那一个,那么你极有可能就是所有和你同类的人当中最出色那一个。但这也就是你的极限。而有另外一群人,他们只是想和 别人有点不一样,他们想去外面看看,去见识见识这个世界究竟有多大,他们想要找到自己独特的生活。对于这些人来说,天空才是极限。说实在的,所有当年选择 DIY出国的朋友们,如果今天你有幸拿到了让那些当年去北大、清华的那些同学羡慕的Offer(再次向躺着也中枪的北大、清华同学致以崇高的歉意),如果 你有了比同龄人更多的见识,那绝对不一定是 因为你比他们更出色,很大程度上是因为在那个出国还没有像今天一样流行的年代,你没有被那个上北大、上清华的模式化思维所套住。所以老天很弄人,因为所有 一直在追求“出色”和“卓越”的人最后都在他们最坚信的标准上“输”给了那些只是想过自己独特生活的人。
当然,2010年末的时候,我只是确定了自己是被老天玩弄的人哪。但幸好我还有一年时间,我决定一定要要找到一个属于自己的生活目标,然后坚定地走 下去。一开始,我和很多人一样,觉得人生的终极目标就是要多走走,去见识这个世界,活出自我。但后来我发现这个目标其实只是说着好听,但是其实不能给人带 来持续的动力,然后我就很伤心。再然后,我好不容易想出了一个有点与众不同的目标,就是“做个有意思的人”(Be an interesting person)。因为对我来说,这是我当时能给另一个人的最高评价。但后来我又想了想,这个目标用管理学的标准来说,就是太不具体太不精确所以很难提供持 续动力。然后我就更伤心了。所以从九月到十二月的四个月里,每天起来就因为找不到人生目标而痛苦。因为自己跟自己的内心对话太多,经常一不小心就错乱了。 当时也没有人告诉我什么20分钟就可以找到人生目标的这种好事。于是我就上了很多奇奇怪怪的课,和各种奇奇怪怪的人交流,希望从他们的经历中获得一些启 发。那段时间我过得真的很彷徨也很烦躁,好在我坚持了下来。我谈判课上的教授成为了我很重要的一个导师-尽管他从来没有一对一给予我任何指导。但就像我前 面提到的,那些改变我们人生的道理,都不会是别人教会的。进入到十二月以后,我的目标慢慢找到了我。
四个月里经过无数内心挣扎之后沉淀下来的思想最终被我总结成了两句很简单、看似和“做个有意思的人”一样不具体、但对我而言包含了丰富含义的话:
”To grow and to help others grow. To live and to help others live.”
”成长,并帮助别人成长。体验和经历生活,并帮助别人体验和经历生活。”
这两句话就成了我的人生目标。它能让我感动得哭,也能让我感动得笑。最重要的是,尽管这两句话在外人看来可能莫名其妙,但我发现这两句话解释了过去 二十多年里自己做的许多事情背后的原因,其中包括了我为什么从小一直都不好好读书,为什么选择出国,为什么一直逃课,为什么在2009年和一群朋友一起创 建了BIMP这样一个神奇的项目,等等等等。
关于辞职的决定
在确定了人生目标以后,我的思路和视野都变得清晰了很多。我很快找到了我想要做的事。和身边许多的朋友一样,创业也曾经是我大脑中的考虑过的一个想 法。但我一直想不到任何我愿意用我几乎所有的时间货币去换的一个创业项目。但在确定了人生目标的今年一月份,我几乎没有花什么时间就确定了一个项目的大方 向,这个商业项目的创意像是奔着我而来的。然后再通过不断的完善从一个不成熟的产品渐渐变成一个成熟的产品,一个真正可以持久给所有人带来价值的产品。
所以,可能和许多我很尊敬的朋友不同,我的出发点并不是“慈善”和“义务服务”,“创业”也从来都不是我的目标(一个学了四年金融的人怎么可能一直 心存“创业”这个目标呢),我的目标就是实现“成长,并帮助别人成长。体验和经历生活,并帮助别人体验和经历生活。” 简单的说,我的内心并没有一个声音告诉我“你一定要创业、你一定要创业”,只是碰巧创造一个商业化的项目是实现这个目标最好的方式,而创立一个商业项目这 件事碰巧叫做创业。
而另一方面,在黑石工作可以帮助我“成长”和“经历”,但是我觉得在黑石的一个暑假实习里,我用20%的时间经历了接下来的两年里可能会经历的 80%的体验,对我来说已经很值得了。我也一定会“成长”,但是未必会比创业成长得更快、更深刻、更理想、更多样化(比如说我就没有办法做我一直很想做的 美工设计工作了!)。最重要的是,我意识到在黑石我基本上不能实现我人生目标的另外50%-“帮助别人成长。帮助别人体验和经历生活”。所以结果就是, “是否辞去毕业后的第一份工作,直接成为无业游民”这么重大的一个选择,被我用人生目标给瞬间解决了。有多瞬间呢?我后来发现了个有趣的巧合。
四年前,我曾经尝试着去写一篇回忆录,来回忆出国两年多的旅程,然后这篇回忆录不幸地才写到出国的第一年就没有后来了。尽管写回忆录是一件有点折磨 人的事情,但读回忆录绝对是件超开心的事。当中我写到过六年前我决定放弃轻松进北大清华的机会,毅然决定出国念高中,因为上海中学不支持孩子们申请国外大 学。原文如下:
“北大清华这种学校我肯定不去!”我当时的有两个很简单也很清晰的想法:一,I deserve the best in the world,二,也是更重要的想法,我想,就算最终在美国毁了,我至少做了一个帅到五体投地的决定,我鄙视了北大清华。更离奇的是,从那以后的两年至今, 我几乎从来没有为这个决定后悔过,也不觉得这有什么好想的。仿佛这道选择题是在侮辱我的智商而不是测试我的智商一样。无论如何,两年后的现在,我相信,这 个帅到五体投地的决定,是我一生至今最正确的决定。”
这个故事告诉我们:人是不会变的。把上文中的北大清华换成黑石,就是我的大脑在半秒中以内做出辞职这个决定的思考流程。可见大脑在考虑一些人生大事上是不怎么需要运作的,让心去运作就足够了,而你的人生目标就是你的心。
如果说这六年里,相比上面这段话我又多了什么领悟,那就是(1)一个人生目标(2)人生没有任何决定是错误的,因为你永远无法知道另外一个选择是否是正确的。
撞上的许多堵墙
Randy Pausch在他著名的“最后的演讲”中提到过一个很实在的观点。他说,在我们追寻理想的道路上,我们一定会撞上很多墙,但是这些墙不是为了阻挡我们,它 们只是为了阻挡那些没有那么渴望理想的人们。这些墙是为了给我们一个机会,去证明我们究竟有多想要得到那些东西。
我撞上的第一堵墙,就是我没有如我所愿地一毕业就辞职。考虑到团队开发的进度,个人诚信问题方面带来的压力,家庭的压力,以及很多直接辞职可能带来 的负面因素,我最终还是回去工作了四个月才得以正式辞职,其中包括一个月的培训。很长一段时间里,大老板都不允许我告诉任何人我辞职的事情,但大老板自己 却没有做好保密工作,以至于同事们最终都知道了我一个小小的分析师要辞职。但我又被规定不能公开,所以在我座位附近的办公室气氛很糟糕,上班感觉度日如 年。当中还穿插了许多压力山大的故事,比如我遇上了公司最高管理层一年一度的3v1谈话,在一个阳光明媚的下午被三个在华尔街响当当的名字各种拷问,因为 我光荣成为了公司历史上第一个干都没怎么干就宣布不干了的分析师(从小到大,坏孩子光荣榜上真是永远有我的名字)。又比如曾经跟我关系很好的一个VP整整 四个星期把坐在整个办公室出入口的我当空气。但是无论当时多煎熬,现在想来都是非常独特的人生经历。
其实我很感谢和尊敬黑石,不仅因为我仍然是个热爱金融的家伙,更因为每一个我接触过的同事的做事风格都对我的个人风格产生了一定程度的影响。从情感 的层面上,我最感激的是负责团队人事的韩国VP,在我辞职的过程中帮我做了许多疏通的工作。在我离开的前两天的晚上,他说了一句我印象很深的话。他 说,“Denny,你知道,作为你的上司,这次我面对着一个选择,是照顾公司的利益还是你一个年轻人的利益。我选择了后者。我希望你以后不用面临这样的选 择。但如果你有一天遇上了,我希望你可以跟我做一样的决定。”
我离开的那一天,我的同事和几个以前一起共事过的朋友给我发来了道别邮件。让我很高兴的是,他们在祝福中都用了同一句话“You are very brave”(“你很勇敢”)。之所以高兴,是因为无论今后的道路如何艰难,至少在旅程的起点我实现了奥巴马用来形容乔布斯一生的第一个形容词。对于一个 活在当下的傻子来说,这已经足够了。
现在我在上海的家中,和我非常喜欢而且非常有创造力的人们一起工作。虽说生活条件很普通(以银行家的标准来说的话简直是糟糕透了),虽说工作强度和 时间依然和在黑石的时候差不多(以银行家的标准来看的话处于中上水平),但回到上海后的这段日子确确实实是我人生中自我学习曲线上升最快的一段日子。所以 顺便说一个建议,当那些备受尊敬的金融机构告诉你为什么要选择他们的时候,特别是关于学习曲线的那些理由,不要那么快就为之屈服。他们不仅有可能(虽然也 仅仅是可能)在推销给你一些你并不需要的东西,并且他们永远不会带你看清楚这个世界上全部的可能性。你要跳出“密集网络”,自己去看清楚。这个建议出自依 然热爱金融的笔者。
我一年的故事就这么讲完了。如果回顾总结过去一年的人生,那么最好的形容就是从一年前我确定了人生目标的那天起,一切就开始失控。但我想在这个回顾 的最后,和所有已经确定了自己人生前进方向的朋友,分享这一年最大的感想:你的理想就像一辆车,如果你觉得这辆车的一切都在你的控制之中,那么可能说明你 开得还不够快 (Your dream is like your car. If you are in full control of it, you are not driving it fast enough)。
 
关于感谢
感谢所有支持你、欣赏你、否定你、看低你的人。
我一直说,永远不要忘记你从哪里来,要到哪里去。我不是一出生就上了好到可以改变我的学校,一直到六年前,我都不算是个好学生,学生生涯当过的最高 的职位是小队长,期中期末考试好像从来没有进过班级前三,有一年甚至还是全校倒数10%,更不知道自己要什么。感谢自己不知为什么突然一根筋地开始愿意好 好努力,自从那以后就知道实现梦想就靠坚持付出,没有别的秘诀。后来我出国,看到了一个很大很大的世界,在一路的坚持中,遇上了许许多多带给我灵感的人, 他们用他们的经历影响和改变了我。这就是为什么我一直告诉自己不要忘记你从哪里来,这也是为什么我想继续传播我受到的影响,可能是作为一种感谢。
今年上半年还在上创业课的时候,我一边要照顾自己的项目的开发,另一边又创业课项目团队中的其他四个成员眼看即将毕业,完全不作任何事情。我的教授 Gelburd,一个前创业家,也是我在沃顿的第二个导师,他并没有因为我一个人担纲整个项目的开发和准备而减轻对我们团队的项目的要求,但是他给了我很 多鼓励。期末演示日的那天,我在一天有三个期末演讲的情况下,被迫一个人完成了80%的项目演示。没有什么奇迹,我们的质量肯定不是最好的。但在我毕业的 前几天,我收到了这门课的成绩。Gelburd给了我A+。他写了一封感谢信给他,他回复我说,每一年上这个课的学生中,真正去创业的不出三个,I think you will be come very successful。
收到他的邮件,我告诉我自己,绝对不能辜负曾经看好你的人。哪怕只有一个看好你的人,为了那一个人,你都必须要坚持下去。
同样地,过去的许多年里,我被许许多多人否定过,甚至包括身边很好的朋友。从五年前的:“就你也想进沃顿?”一直到几年的:“你还是别创业了吧”,“你肯定不会辞职的”等等。这些否定和质疑一路上给我很大的鼓舞,让我很清楚的知道什么是我真正想要的。
在美国的这六年,我最大的幸运就是遇到了许许多多强大的人,他们强大的地方可能是一些人生经验,可能是一个很偏门的技巧,有或者是一个很奇怪的逻辑,一个坚持了几十载的生活细节。今后我会一一道来。
在这里,我想特别感谢Stacy,你是我出国最早认识的朋友之一。是你对音乐的坚持让我看到这个世界是如此的精彩。还想特别感谢袁帅、甄欢、柳潼、 质含、瑞之、盛杰、和筱纯,感谢2009年的时候你们愿意和我一起把BIMP这个项目做起来。这是理论上我的第一个创业项目,按照BIMP现在的强大程 度,它必然只会越来越强大,我真心希望它会给更多的对金融真正感兴趣的孩子带去帮助。
最后,特别匿名感谢所有从今年一月开始到今天,给目前还处于隐形状态的小网站提供过帮助的人们。无论你现在是否在和我们一起并肩作战,我们始终是一个团队。
最后,两个改变你生活的礼物
其实我一直准备了两个礼物。这篇这么长的文章,所有因为一些共鸣或者因为一丝共同的信念而坚持看到了这里的人们,这两个礼物会改变你们的生活的。
拆开第一个礼物,是一首旋律很简单的歌,来自Cat Steven,叫做”If You Want To Sing Out, Sing Out.”
歌词简单的甚至不需要任何中文翻译:
Well, if you want to sing out, sing out; And if you want to be free, be free;
Cause there’s a million things to be, you know that there are.
And if you want to live high, live high; And if you want to live low, live low;
Cause there’s a million ways to go, you know that there are.
You can do what you want, the opportunity’s on;
And if you can find a new way, you can do it today.
You can make it all true, and you can make it undo.
如果你还很难看到”there’s a million things to be, and there’s a million things to do”,那么请拆开第二个礼物。
第二个礼物将帮助你看到生命中的无限可能。这是一个明年一月才会开始邀请测试的网站,这个网站是我为我自己创造的,但如果你看到了这里,那么它也是为你创造的。怎么来形容这个网站呢?
对于互联网行业研究者来说,它和移动互联网、移动应用、云服务等当下潮流一点关系都没有,也没有任何国外的成功案例或者相同模式可以C2C(Copy to China)。所以,它可能很无聊。
但对于普通用户来说,我的目标是让这个网站做到以下三点:
1. 它要很好看、很酷、很好玩
2. 它要很真实,几乎和现实一样真实
3. 它要实实在在地帮助用户获得让生命更有价值的经历
它叫做“连客”,来源于英语单词“Link”。它会帮助用户将过去和未来的经历连接在一起,让用户看到生命中的无限可能。就像乔布斯说得那样,“连接人生中的那些点”。
我知道,以上的一切听上去很不靠谱。但没关系,它若存在一天,就会给用户带来一天价值,给这个社会带来一天的活力。
过去一年里大家都有各种各样精彩的故事,而我所有的故事都是围绕着这个网站。
lianlianke.com
我想把它分享给所有相信人生就是不断经历的朋友们。明年,我们依然年轻。
Denny(微博) 2011年12月18日

后记:想说一声感谢,看到一篇1.7万字文章在24小时内被浏览了将近15万次,让我们相信连客正在做的事或许有希望创造一种具有正能量的文化。感 谢每一个转发的朋友,这是最好的生日礼物。明天开始闭关做事,期待一月的邀请测试。很高兴认识了很多经历丰富的朋友,保持邮件联系:denny艾特 lianlianke.com(请将”艾特”替换成@)。对我们正在做的事情感兴趣的朋友,如果你在中国,如果你有和我们一样的信念,如果你喜欢我们在做 的事情,欢迎你申请加入我们,主要需要宣传、摄影、法务、和程序人才(也请理解我们会有比较严格的筛选过程)。我们在同时招实习生和全职人员。请理解前者 无薪,全职人员是底薪,因为所有现有团队人员基本上都是在无薪或底薪工作。除了学习曲线以外,这份工作会保证你见识到世界上很多有意思的事。
对于所有从这篇文章中读出站着说话不腰疼、异想天开、理想化的朋友:请试着重读第一段“关于欲望”。每个人都需要、也只需要同时满足五大需求到一定 程度。我至今没有找到理由证明人为什么要追求你明知道你不需要那么多的东西。另外,这篇文章和成功学无关。标签有价值,但是他们从来都不应该是目标。他们 只是往正确方向前进的人们必然会创造的副产品,而只把光环当目标的人往往很难有任何光环。所以,最重要的还是希望大家都可以找到同时满足五大需求的那个方 向。我只是将我所经历的和所感悟的分享给了大家,我们每一个人可以选择从别人的经历中领悟那些道理,还是通过自己的经历去领悟,后者比前者更容易头破血 流,但是前者比后者更需要个人的冷静思考和沉淀。总之,在看完这篇文章以后,让每个人自己决定怎么去使用自己的时间货币去处理这篇文章。

杨杰:来硅谷工作
硅谷可能是我们每一个CS学生和IT从业者心目中的圣地。我曾以为那是一个遥远的目标,通常需要经历考Toefl GRE、申请美国研究生、读完硕士或博士,最后才有希望找到那里的工作。事实上,这的确是一条经典途径,大部分中国学生都是通过这样方法进入硅谷的。还有 一部分是先在国内进入跨国公司,比如Google,几年之后攒够经验和人脉,再调到美国总部。我有几个朋友就是这样来的。但我走的却是另外一条途径,直接 申请到美国硅谷的工作。
我硕士毕业之后参加了一个P2P的项目,也是从那时开始接触推荐系统。大概08年春节期间,就在我开始考虑是续工作合同还是读博的时候,一个硅谷的 猎头给我发了封email,说BitTorrent公司在招人,问我有没有兴趣申请。我当时很意外,因为我并没在任何网站求职,在硅谷那边也不认识任何朋 友,唯一的解释就是他从我们学校的项目主页上找到了我,因为我们做的项目跟BT很相关,我的背景很符合他们的需求。既然机会敲门了,那就试试吧,因为我一 直也有去美国的想法。于是接下来经历了几轮电话面试,介绍了一下目前的工作,回答了一些技术问题,写了几个小程序,然后3月底就顺利拿到offer了。可能小公司的面试相对而言要简单一点吧,另外也许有学术背景对工业界比较有吸引力,但最关键的是,你正是他们所需要的人。
接下来就是漫长的申请H1B工作签证的过程。来美国工作最常见的签证类型是L1和H1B。L1只能是跨国公司内部调动才能申请,一次给5年,不能换 工作。H1B是可以换工作的,一次给3年,可以续一次,总共6年。如果你打算长住这,那么可以在这几年期间申请绿卡,在绿卡申请期间是可以合法待在美国 的。H1B签证一般由公司出钱委托律师帮你申请,申请者至少要求本科学位,只能从每年4月1日开始申请,大概一到三个月之内出结果(加急的话可以在一两周 内出结果,要多交1000美元),申请成功了的话,最早当年10月1日开始上班。
一次H1B签证的费用大概是5000美元,并不是每个公司都愿意花这个钱。但是,外国员工,尤其是中国和印度员工,通常更勤奋也更忠诚,所以几乎每 个公司都少不了中国人和印度人。如果H1B持有者丢掉了工作,他必须在几个月内找到工作,否则就得离境。此外,如果绿卡申请批复下来(通常要几年时间)之 前换了工作的话,前面的申请就作废了。这种压力逼得我们不得不努力工作,而且不会轻易跳槽,这可能也是许多公司愿意招外国员工的原因之一。
另外,H1B持有者的工资待遇法律上规定是不得低于地区同等水平的,因为政府要保护当地人的就业市场,同时也避免外国员工沦为廉价劳动力。如果公司给你的工资达不到这个标准,可能就无法成功申请H1B签证。比如有几年经验的软件工程师在硅谷地区大概是年薪10万美元左右,当然实际数字应人而异,差别可能很大。这些信息是公开的,可以在后面给的链接里查到。
H1B签证关键一点是,每年都有名额限制,最近这些年都是65000个普通名额,另外还有20000个优先名额,是留给美国本土硕士或以上学位毕业 的外国人。非赢利机构(如大学)不受这个限制。如果这个名额在你开始申请之前用完了,即使拿到offer了,你这一年也来不了美国。运气好的话也许公司愿 意为你保留这个offer,等到明年再申请一次。如果美国政府在4月第一周收到的H1B申请超过名额限制,就要进行抽签,从中选出名额数量个申请材料,进 入下一步程序。比如我是08年申请的,那时金融危机还没有全面爆发,结果当年第一周就有高达20万人申请(当然其中大部分是印度人),所以不得不通过抽签 来决定命运,很幸运我被抽中了。而09年的工作机会大幅减少,据说名额到12 月才用完,也就不用抽签了。2010年似乎情况还没有明显改变,H1B名额可能也会用到下半年。不管怎样,越早拿到工作offer,对后面申请签证就更有 利。
不过,就在我马上要去拿签证的时候,金融风暴爆发了,大量公司疯狂裁员,也包括我的offer,不幸被取消掉了,所以我不得不在很短的时间内找到一 份另外工作,才不至于浪费掉这个来之不易的签证。我那几年主要做的是基于P2P的推荐系统,所以有这两方面的背景,而这时有一家专做推荐的公司正在招人, 于是我开始申请这家公司。仍然都是电话面试,一切都很顺利,很快又拿到offer,终于在9月底来到了硅谷。
 
(图:圣何塞商业区。圣何塞自称“硅谷的首都”。图来自维基百科)
 
传统意义上的硅谷,是指旧金山以南到圣何塞以北的这一块狭长的湾区地带,但现在这个范围已经扩展到周围地区,也就是所谓的旧金山湾区(San Francisco Bay Area)。这里气候温和,阳光普照,风景优美;这里毗邻顶级大学,文化交流频繁,社会自由包容;这里科技公司林立,资金和人才涌动,冒险精神和务实态度 并存。从旧金山一路往南,抬头低眼,到处都是声名远扬的公司。一栋栋气派的楼宇,安然笑纳各方敬仰的眼神;一个个传奇的故事,流传在每个怀有梦想的人之 间。这里就是硅谷,IT科技和工业的心脏。我似乎以一种朝圣者的心态来到这里,开始人生新的篇章。
硅谷虽然有很多名头响亮的大公司,但更多的还是锐意进取的小公司,并且每天都在诞生新的idea,新的小公司。当技术、理念和创新有大量机会摩擦碰 撞,当有这么一种机制帮助你不断实践你的梦想而不必承担失败的后果,当大量人才聚集在一个地区,创业就变的自然而然。在创业公司(startup)工作的 好处就是,可以更全面的接触系统各个方面的技术,更直接的观察公司的运作,与同事的关系也简单融洽。小公司更缺人才,他们会更不惜代价引进一个人。另外, 小公司的面试难度相对较小,毕竟申请的人也较少。最后,如果小公司成功被收购甚至上市,那你通过股票的收入很可能会远大于工资所得,而且你更容易进入公司 高层。所以,如果你考虑直接找美国工作,不妨也试试小公司,至少可以作为一个跳板。一旦你进入了这个圈子,工作机会也就慢慢铺开了,用不了多久猎头们就会 盯上你,成天鼓动你跳槽。
大家都知道,通过网络申请工作是很便捷的方式。对于大公司,你的简历通常是储存在数据库里,他们需要招人的时候就从数据库里搜索关键字,比如 Python,recommendation systems,只有当你的简历里包含了关键字,才会被调出来仔细看。从这个角度来说,知识和能力的广度是很有帮助的。
但更多时候,深度可能更为重要,因为这里通常不缺泛泛的程序员, 缺的是在某个特定领域的人才,比如搜索、推荐、机器学习、网络安全等等,这个时候你的竞争力才能充分体现出来。这里牵涉到一个职业发展规划的问题,是走全 面路线还是走专业路线。前者的目标是一个优秀的程序员、构架师,可以胜任任何编程工作,可以构建任何系统。这种人的就业面宽广,但面临的竞争对手也多。后 者是一个专业型或研究型人才,可以解决某个领域的问题,而这些问题需要编程以外的知识和能力,比如知道怎样优化搜索效果,理解 personalization的一些关键技术,懂得如何分析数据和各种model,了解常见的攻击方法和安全协议,等等。这种人才工作机会相对较少,但 竞争也较少,而且位置可能更重要。无论选择哪一条路线,你都应该清楚你的职业规划,平时努力提高专业技能,换工作时力图延续你的发展路线,而不是盲目的到 处撒网,或仅为薪酬而跳槽。
选择了工作方向,下一步就是投简历。单纯只投简历,有时效果不好,容易石沉大海。其实在硅谷有很多猎头和HR,他们在不停的寻找人才,再输送到各个公司。如果他们能对你有兴趣,那机会就大多了。而你要迈出的第一步是让猎头或招聘主管能找到你。
最简单的办法是在linkedin和几个知名求职网站上发布你的英文简历,当然你也可以主动联系猎头。我经常收到一些猎头的email,大部分都是通过linkedin上找到我的,少数通过facebook或其他途径,但几乎都是通过Internet找到我的。
另一个通往面试的捷径是通过内部推荐。在美国找工作非常看重推荐的。通常如果你为公司推荐了一个人并被录用了,你也能拿到一笔不菲的奖金,比如几千 美金。而且公司内部的人说话比猎头更有份量,所以如果你认识一些朋友在国外公司或跨国公司,不妨请他们帮你推荐一下,你的简历被看中的可能性会大大提高。
还有一个被人找到办法是参加开源的项目,多写技术博客,参加一些专业竞赛,比如编程竞赛、某些学术会议的竞赛,一些公司组织的竞赛等等。这些不仅是对你能力的锻炼,也能提高你的知名度,写在简历里也很光彩,是让别人找到你和了解你的最佳途径。
至于硅谷公司的面试,也并非高不可攀,绝大部分还是考那些基本功,比如数据结构和算法,对面向对象编程的理解,某些语言的特性,领域内的专业知识, 等等,跟国内的面试差不太多。偶尔可能需要一点小聪明,但传说中的“下水道盖子为什么是圆的”这类面试题,也不过是传说而已。面试的资料很容易找到,下面 也给了链接,充分准备就好了。不管面试有多难,其实都是可以准备的,就看你功夫下够了没。要在美国工作,当然英语听说读写也要足够顺畅流利,但并非要很好 才行。一般对于技术人员的语言要求不算太高,但如果你的英语还有障碍,那最好还是要努力提高,否则你的职业发展会出现瓶颈,因为没人愿意跟交流困难的人共 事。
顺便说说欧洲的工作。欧洲(还有加拿大)与美国最大的不同在于,那边一般是福利社会,工作压力通常没有美国这边大,社会福利要比美国好,治安更稳 定,但平均而言工作机会没美国多,收入要低于美国,物质上也没有美国便宜丰富。总的来说,欧洲是一个更适合安居的地方,而美国则是一个更适合乐业的地方, 当然具体而言也是应人而异,并不绝对。欧洲许多国家,尤其是西欧和北欧,英语非常普遍,很多技术工作只要求英语,很多当地留学生也是只会英语。所以你也可 以考虑欧洲的工作,而那边的签证相对美国而言也要容易许多。
最后,希望有志于出国工作的同学朋友,多一份勇气,多一点自信,多一分准备。人有点梦想总是好事。

魏小亮:如何选择硅谷的IT公司
导读:关于北美IT公司求职面试,伯乐在线之前转载分享过一些文章,不过这些文章是偏重面试过程经验的分享(比如王远轩在《北美求职记》 中分了Microsoft、Google、Facebook、Twitter 和 Hulu 这五家公司的面试经验),至于如何选择公司(“如何选择硅谷的IT公司)这个话题,Facebook 移动技术总监、Facebook“新兵营”的领队之一、负责新员工培训的魏小亮(作者简介请见文章末尾)从四个方面写了四篇博文,给出了他的详细建议。在获得作者许可后,伯乐在线把四篇博文合成一篇发布,以下是全文。
经过激烈的面试,恭喜你拿到一个硅谷IT公司的Offer了,更可喜的是,有几个公司同时给你Offer。下一个头疼的事情:如何选择一个最适合自己的公司。
这两年跟不少拿到多个硅谷公司Offer的国内朋友打过电话聊天,觉得不少朋友的决定因素比较随机——往往几个公司都没有具体了解,觉得差不多也都 挺好的,大多数朋友去工资最高的地方;也有一些去了HR比较主动的公司。最后到了那个公司发现并不是最适合自己的…… 所以,我想在这里谈谈怎样选择公司。
 
最关键的一点: 获得每个公司尽量多的信息,根据各个公司的情况和自己的目标,做理性的决策。HR给你Offer或者还价的时候,千万不要立即接受或者拒绝,可以礼貌地说 “非常感谢。我非常珍惜这个机会。请让我认真思考一下,再给您答复。” 然后马上开始你的决策过程:
(一):如何收集公司的信息
(二):决策过程的考虑因素
(三):薪酬和待遇
(四):关于HR
 
一、如何收集公司的信息
这里介绍一下收集信息的渠道。一个关键点是在收集信息的时候要尽量做到理性而没有偏见:如果你带有很重的偏见去收集,这个过程本身就变成了收集证据去证明自己的观点,而不是收集所有的信息去帮助自己决策了。
我想大家可以考虑以下几个信息源:
1、公司的产品和网页 :如果对方是一个产品型的公司(最终客户是普罗大众而不是Fortune 500公司),一定去看看他们的产品和网页,看看自己对这些东西是不是感兴趣。每天做自己感兴趣的产品,幸福感会很高,工作的压力会变成动力,绩效奖金也 高,升职也快 —— 硅谷的游戏类公司基本工资往往比其他IT公司相对低一些,原因是有不少工程师喜欢玩游戏,他们愿意少拿一点薪水去做自己喜欢的游戏产品。其实长远来看,自 己开开心心的工作生活的确很重要,“有钱难买爷高兴”嘛;
2、公司的开源项目和技术会议讨论:不少的科技公司是有自己的开源项目代码库的,也有不少公司参加一些技术会 议。可以看看他们的项目和会议的录像或者幻灯片。从中可以了解到这个公司的技术水平大概是怎样的,自己能从未来的同事学到什么东西。这里要注意的是最好找 工程师的幻灯片(而不是销售或者HR的幻灯片,那些信息量低而且更多是广告成分);
3、找公司里跟自己背景相似的员工:如果有朋友在那个公司工作,一定要找他问问情况。如果没有,可以跟HR回信 说 “在我决定之前,我能不能跟公司里的一个中国工程师聊一下?我想了解他们来美国的过程和工作生活的情况。” 一般HR是很乐意为你找这样的工程师的。跟背景相似的员工聊天会让你看到更真实的一面——因为在加入公司之前,HR往往是主要的沟通渠道;但一个公司的工 程师队伍的文化有可能跟HR的文化类似,更可能截然不同(我自己面试过的几家IT公司,工程师文化最差的公司HR最好,工程师文化最好的公司HR最差)。 加入公司之后,你主要跟工程师合作,所以关键是要看自己跟工程师是不是合得来;
4、如果有两个公司选择,最好能找到一个在这两个公司都工作过的未来同事,让他们谈谈两个公司的区别和感想;一般这样的同事能给你一些比较。但要注意的是这样的同事往往偏向现在的公司(否则HR也不太可能让他跟你谈:),所以有机会的话最好两家公司都找一个类似情况的同事;
5、找你的未来经理或者部门主管:有些公司是预先已经给你安排了团队和经理的,如果是在考虑这些公司,最好能跟未来的经理聊一下,看看是不是合得来。HR一般也会支持这样的安排;
6、找一个你希望成为的人或者你信任的人给建议:如果你身边有一个你希望成为的人(比如比较成功的师兄师姐,或者公司里面你特别尊重和信任的同事,或者你认为有远见的长辈),可以请他跟你聊一下,把你收集到信息和你自己的情况和目标做一个分析,让他给一些建议。”三人行必有我师”,有一个参谋往往能让自己避免低级错误。
(3、4、5 一般需要HR引荐,可能只能选其中的一到两个。我建议至少找一个中国工程师聊一聊。)
最后我想要强调的是:这个信息收集过程也是你建立新的社交圈的过程。 在其中交到的朋友,无论你如何决定, 都要给他们说一声,感谢他们在这个过程给你的帮助;到了硅谷安顿下来了可以找他们吃个饭,保持联系……硅谷本身就是一个很小的圈子(或者说整个硅谷是一个 很大的公司),在这个过程里面建立的联系,好好珍惜,以后再换工作或者有其他机会,你还能继续得到帮助。对于你决定去的公司,帮过忙的同事更要主动感谢, 参加工作之后主动联系,他们往往会是你在新的公司里面的第一批良师益友。
 
二、决策过程的考虑因素
薪酬待遇是大部分朋友最关心的一点,我在下一篇将详细讲。在考虑薪酬的同时,我认为最好能全面考虑各方面的因素:
1、个人的目标
你5年以后想做什么?想开一个自己的公司?还是想加入一个创业公司?还是想在某一个领域做世界一流的技术专家?还是想在一个大公司里面做管理?还是想做一个普通的工程师,有比较多的个人时间?
如果5年太远还没想,那在下面一两年你想学到什么东西?学到比较全面的Web2.0的技术运作(但不一定精通), 还是想在一个方向学得很精通,还是想学产品的开发管理?
回答这个问题很重要,因为无论薪水多少加薪多快,我们都会觉得太少;最终的成就感和幸福感往往来自于自己个人的成长和个人目标的实现。
不同的公司有不同的长处,最好能找到一个公司能给自己的成长提供相应的机会,有可能达到自己的个人目标。
2、公司的规模、目标和文化
一般来说,公司越小,资源越有限,学到的东西越广泛,但不容易精,容易培养通才;公司规模大,任何一个子领域的一点点改进就可以带来比较大的回报,更愿意投入资源让人钻研一个子领域, 容易培养专才。
快速增长的公司会有更多的学习和晋升机会,但淘汰率可能也高;已经成型的大公司不容易因为业绩问题淘汰,但更有可能整个部门解散。
在专注产品的公司工作,更容易学到产品开发概念,更重视能把握整个开发流程的人才,只希望在一个领域钻研的人才则不一定很开心;专注技术的公司则相反。
工程师文化很强的公司把工程师看成创造机会的原动力,聚集了很多顶尖人才,工资高,同时对个人创造力和主动性要求也高;销售文化很强的公司则往往把工程师看作成本,工资能压则压,但工程师往往只需要跟进销售团队的反馈意见,不要求很强的主动性。
3、等级、业绩评估和晋升过程
如果公司有分工程师等级,可以问Recruiter你的等级是多少,整个公司的工程师等级是怎样定义和划分的?不同公司的等级在数字上不一样,如果你有多个offers,可以问HR不同公司的等级是怎样换算的。
如果你有朋友在对应的公司,或者Recruiter为你找到公司的工程师或者经理来讨论,可以问一下他们公司的文化,工程团队如何做业绩评估,晋升的过程是怎么样的,谁(peer还是manager)决定业绩和晋升? 他们对公平性的看法如何。
4、职业道路
跟工程师或者经理讨论的时候可以问一下公司为员工提供的职业路线:如果做得好, 两年之后或者五年之后在公司里面会有什么样的职业道路可选择? 公司会为你的职业规划提供什么样的培训和支持?是否支持员工到大学里面在职学习? 是否可以在公司内改变职业路线?跨部门调动是否有很高的门槛?
5、 文化环境
如果能跟一个中国工程师或者经理讨论,可以讨论一下中国文化背景的员工在公司的状态如何(比如在工程师里的比例是多少,在经理的比例又是多少);普遍遇到的问题和瓶颈是什么?公司有没有一个氛围能帮助刚从中国来到的新员工适应语言、工作、生活和文化的改变?
如果希望以后在美国长久生活,可以问公司对绿卡的申请是不是很支持?一般要多长时间才能开始(有些公司需要工作一两年才开始申请绿卡,有些工作开始 之后几周就可以申请);一般从开始申请到140的批准需要多长时间——有些大公司可能经常有部门解散的情况(美国移民法律是一旦有部门解散,绿卡申请就会 暂停,整个过程会拖得很长)。
不同的公司对这些问题的回答都不一样。很难绝对地说哪个公司更好,关键是哪个公司更适合你的目标。
 
三、薪酬和待遇
美国公司的薪酬和福利五花八门,每个公司都别出心裁地想一些与众不同的福利。 HR会强调自己公司的特别福利,让你觉得比其他公司好,轻易接受了。我的建议是在跟HR谈offer的时候着重收集信息,不要当场做决定。回家把所有的薪酬和福利都列出来,然后综合其他更重要的因素(见上一篇),跟自己信任的人讨论一下,最后做一个理性的决定,再回复HR。
下面把一些常见的薪酬和福利介绍一下:
1、基本工资
基本工资是给雇员的稳定可预测收入。
工程师的基本工资一般按每年收入多少来算。如果公司到了一定规模(一般一百人以上),内部都有工程师等级——能力越强(或者有的公司是资历越深)的工程师等级越高。基本工资往往与工程师等级挂钩。
大部分的新型公司工资只与等级挂钩,同一个级别的工资相差不会太大(比如+/- 15%的浮动)。在这样的公司里面,如果你觉得你是一个非常上进的人,起薪多一点少一点并不是很重要——因为如果很快能被升级,那你的工资就会跟新的一级 挂钩,跟起薪没有关系;另一方面,有些公司为了提高竞争力,可能开出一个比较高的起薪(高于相应级别的最高工资),但当你升了一级的时候,你的工资还是会 按照公司平均水平跟新的一级挂钩, 升级所得到的实际加薪很少。总之,起薪的差异只影响第一次升级之前的收入。
另外一些公司(我听到的都是非硅谷的传统大公司) ,工资是按照每年比去年涨一定的百分比来算的,这样的公司起薪很重要——因为起薪低了每年按去年的百分比涨,都要吃亏。
最好能跟HR讨论一下公司对薪酬的政策是哪一种。
2、奖金
奖金是短期激励手段——一般每年或者每半年做一次业绩评估,决定奖金数目,业绩越好的雇员奖金越多。
具体的奖金计算方式可以跟HR讨论一下奖金的计算方式。一种比较常见的方式是由三个系数决定:
A、基本目标系数 (Target Bonus Rate):往往根据工程师级别来定。级别越高,这个系数可能越高,与当年业绩无关;
B、公司业绩系数 (Company multiplier):每半年或者每年由公司领导层或者董事会决定整个公司的业绩,如果业绩正常,就是100%;如果业绩高于预期,系数就高于100%;反之亦然;
C、个人业绩系数(Individual multiplier):每半年或者每年由经理、或者同事互评和自评对自己的业绩进行评估,如果你的业绩跟你的级别预期一致,就是100%,高了或者低了系数对应变化。
最后的奖金由三个系数和基本工资相乘,比如如果基本目标系数是10%,公司业绩和个人业绩系数均为100%,那奖金就是基本工资的10%。
从这里可以看出,在考虑Offer的时候,奖金的基本目标系数影响最大。一个10%的目标系数和一个5%的目标系数意味着实际上很可能有5%的基本工资差异。
3、 期权或者股票
期权或者股票是长期激励手段——一般是四到五年的授予时间 (Vest Period),每年有20~25%的股票或者期权能到员工手上。有几个常见参数:
A、 Initial Vesting Period:拿到第一笔期权或者股票的时间,一般是加入公司之后一年,也有加入公司之后半年的(不过很少);
B、Vesting Period:拿到所有期权、股票的总时间,一般是四年或者五年,每年平均拿到1/4或者1/5;
C、Vesting Cliff:第一笔期权拿到之后,以后平均多长时间得到一笔,往往是三个月,也有半年或者一个月的。
假设你拿到128股股票,Initial Vesting Period是1年,Vesting Period是四年,而Vesting Cliff是3个月,那你实际拿到的股票是:加入公司一年后一次拿到32股;之后每三个月会拿到8股,直到第四年底为止。
对于还没上市的公司,建议不要对股票、期权有多大期望(无论HR如何跟你说“这个公司马上就要准备上市了”)。把它们当成一个彩票就好——这并不意味着你绝对不能去这个公司,只是说你去这个公司的目的不是为了股票上可能挣到的钱,可能是学习过程,可能是工作兴趣……
对于上市了的公司,或者你对这个公司极其有信心,可以算一下你预期的股票或者期权价值,然后除以Vesting Period(比如说四年),算出每年的预期收益——因为不同公司的Vesting Period可能不一样,所以每年的预期收益才是真正可比的。
4、股票或者期权增发
不少公司(尤其已经成立了几年的公司),会有股票或者期权的增发措施,让员工每年都能拿到更多的股票,不至于员工在四年之后原始股票全部到手,发现之后的每年收入骤降而直接离开。
股票或者期权增发的过程往往跟业绩挂钩(公司当然希望越好的员工留下来的机会越大)。但不同的公司股票或者期权增发的力度很不一样。有的公司非常慷 慨,有的公司就只是形式上的给一些。可以跟HR讨论一下公司对股票增发的政策:比如说“每年给老员工增发的股票和给新员工的原始股票大概比例是多少? ”
有的上市公司还提供员工股票购买计划(ESPP)。让员工有机会在一定时间以一定优惠价格(比如九折)购买一定限额的公司股票,然后在一定时间之后(比如三个月)卖出。如果公司股票在这三个月不掉10%,那你就能够获得一些收入。
这些股票或者期权政策五花八门,在考虑的时候也最好转换成每年的期望收益,以方便比较。
5、入职奖金(Sign-On Bonus)
入职奖金是对新员工加入公司的一次性激励。
如果你在公司工作不到一年就离开,往往需要把入职奖金退还。一般可以大概估算一下你打算在这个公司呆的时间(比如4年),然后把入职奖金平均分配到每年去,算出 平均每年的收入。
==== 我觉得1~5是可以在Offer上跟HR讨价还价的重点;以下的一些基本不会太影响具体的收入,公司往往是为了给员工提供方便而设立 ====
6、搬迁帮助(Moving Bonus)
很多公司提供搬迁的帮助,但形式很不一样:有的公司直接给一定金额的Bonus,这种Bonus跟Sign on Bonus性质一样;有的公司则提供报销上限,实报实销;还有的公司给你提供搬家公司服务。
同时,还有不少公司愿意为新员工提供短期(几个星期)的临时住宿。
这些问题都可以跟HR讨论,找到让你比较方便的形式。
7、法定假日和带薪假期
几乎所有公司都有法定假日和带薪假期。但每个公司的法定假日列表不一样,有些每年只有四五天的法定假日(新年、国庆、感恩、圣诞),有的可能会有十天甚至以上。
带薪假期是员工自行决定的休假日,每个公司也有很大差异。我见过的最少是5天,最多有21天,甚至不设上限——对于不设上限的公司,要搞清楚实际的情况,有的公司号称不设上限,但实际上没有人敢休假。
一年大概有260天工作日(365 / 7 * 5),如果一个公司的假日和带薪假期是31天而另一个公司是18天,里面也有5%的实际工资差别。
8、退休金计划(401K)
很多公司提供401K退休金计划;有些公司提供match——你给自己存一定的退休金,公司会给你相应比例的存更多。这样的match往往有个上限;有的甚至有Vest Period(比如你在公司工作了两年,才能拿到match的部分)
如果HR向你推销一个公司有401K计划的match的话,要搞清楚他们的上限是多少;算出每年的实际收益。另外要考虑的是放到401K的钱是要到六七十多岁退休的时候才能拿出来的,所以实际效用不如同样数目的Bonus或者工资。
9、医疗保险
绝大部分公司为员工个人提供医疗保险;而如果员工的家人也需要医疗保险的话,大部分公司需要员工分担一部分的费用。如果你需要为家人买保险的话,可以把每个月的额外保险费转换成每年的费用。
10、早中午饭
很多公司也提供早中晚饭。这对单身的员工来说就省了5天的伙食费,一年大概是5000左右吧。
11、学费补贴
有些公司为上夜校的员工提供学费补贴,往往每年几千美金。但要注意可能会有不少约束条件,比如业绩要达到一定的要求,或者多少年才能去一次,或者上学之后多少年需要留在公司,否则要求退还学费,等等。
12、其他
公司还可能有不少其他的补贴、福利。比起基本工资、奖金、股票来说,其他大部分的福利都是很少的比例,更多的是公司为了方便员工,而不是作为吸引员 工的条件——但有时候HR会把它们作为公司竞争力来强调。如果有某些福利听起来真的很诱人,最好搞清楚具体的约束条件,换算成每年的收入,再做比较。
 
四、关于HR
最后这一篇博文解释一下我对HR的一些理解。希望大家跟HR交流的时候更自信更有效。
大部分的朋友把跟他们在面试中联系的非工程师统称HR (Human Resource),实际上在整个招聘的流程中,HR的职能有几种不同的专业分工(有些小公司比较简洁,也很可能由同一个人做这些分工的几项甚至全部):
1、Sourcer:Sourcer的工作是为找到合适的面试候选人。Sourcer每天看很多的简历、去各大论坛发帖子、去LinkedIn等网站搜索候选人……一旦找到ta觉得合适的人选,就会通过Email或者电话联系。一般情况下Sourcer是第一个跟候选人联系的HR,她会问一些基本的问题看看候选人是不是有可能通过面试,然后推荐给Recruiter。
2、Recruiter:一个应聘者进入了面试流程,就会有一个Recruiter跟ta联系。 Recruiter负责这位应聘者的面试、Offer、讨价还价、签约,直到应聘者加入公司。对应聘者来说,Recruiter 是与其接触最多的人。 (当然,最终Offer的等级、是否招聘的决定还是由技术团队和管理团队做出的)
3、Coordinator:Coordinator主要是帮助应聘者安排面试过程,比如说安排机票、酒店、面试当天的接待等等。
4、Compensation Team:这个团队应聘者基本上不会接触到, 它的主要任务是考察业界其他公司的待遇,总结待遇变化的趋势和本公司的薪酬竞争力,决定本公司每一个级别员工的待遇标准:同一个级别的员工薪酬有一定的范围,除非极其个别情况,薪酬不会超出这个范围。
从应聘者的角度上看,整个流程是:Sourcer跟你联系,coordinator为你安排面试,Recruiter跟你联系,讨论你的具体情况 (目前的薪酬、期望值等等),coordinator为你安排下一步面试……工程师把面试结果提交,Recruiter把面试结果汇总,管理团队讨论并且 确定应聘者的是否合适,对应的级别是多少,Recruiter根据结果和Compensation Team的薪酬范围跟应聘者讨论具体的薪酬;如果有非常特殊的情况,需要跟技术总监或者副总裁进一步讨论(比如特殊人才的薪酬,或者由总监或者副总裁直接 联系应聘者)。最后Recruiter跟你一起在Offer上签字。
绝大部分的Recruiter都是谈判高手——他们每周要跟好几个应聘者讨价还价, 一个应聘的工程师就算每年换工作,也很难有Recruiter的谈判经验丰富。另一方面,硅谷科技公司里面Recruiter的工作流动性比较大,不少公 司Recruiter是第一年合同,只有业绩很好的第二年才会变成正式员工,所以Recruiter会想尽各种办法让拿到Offer的应聘者加入。
大方向上,这样的Recruiter激励机制是好的,鼓励了Recruiter努力工作;但在具体操作上,有些Recruiter会为了自己的短期 目标而做出一些对应聘者不负责任的行为,比如在电话里面给出一些有意无意的误导信息甚至恐吓。我听说的一个典型例子是某跨国大公司在国内的 Recruiter跟一个应聘者说 “你口头已经跟我说过你想来我们公司了,如果你再去跟别的公司面试,你到了美国之后的信用记录就会很差!” 真是哭笑不得——美国的信用记录只跟你的借贷还贷历史有关,而且在硅谷的科技公司全部是At-will employment,法律上公司和员工互相可以随时终止雇佣关系,不要说口头答应了,就算签字了你也可以自由地去别的公司面试或者换公司。但这样的误导 信息对一个从来没在美国工作过的朋友来说,还是很有影响的。另一方面,被误导而进入公司的员工也很可能不会很开心,这样的事情也不符合公司的长远利益。
我写这一系列博文的起初动机就是希望能把整个招聘的过程解释清楚,让更多的朋友不会吃亏。我 想强调的是“不吃亏”就好 —— 大体来说,正如我在第一篇(如何收集公司信息)和第二篇(决策过程的考虑因素)强调的,薪酬并不是最重要的,在哪个公司工作更开心、更能学到自己想学的东 西,才是最重要的。如果有朋友希望进一步把跟Recruiter斗智斗勇作为一个爱好的话,有两本书建议看一下:“影响力”[1] 主要讲的是黑武术——别人怎样利用人性的弱点去说服你;“寸土必争”[2] 主要讲的是白武术——如何跟对方进行公平的讨价还价。
下面讨论一下几个关于Offer的常见问题:
1、Offer的时效限制:
一般公司在给出Offer的时候,都会给一个时效(比如说希望应聘者一个月之内答复,否则Offer就不再有效)。这个时效限制可以保证公司避免一 些风险,比如说:公司很小的时候,只招一两个人,所以不能让多个Offer长期有效,否则几个人同时答应了,公司就需要取消一些Offer,对应聘者影响 很大;另外Offer里面薪酬的具体数字是跟据市场变化而变化的,如果就业市场在几个月之后变差,新招员工的薪酬会降低,Offer时效性太长会引起不公 平(同一时间决定加入的员工,因为Offer发出的时间不一样而差异很大);类似的因素也包括公司股价、期权价值的浮动。
另一个方面,一个公司给出一个Offer是需要很大代价的:以上所说的所有HR的时间、 工程师面试的时间、管理团队做决定的时间……可以说,对每个发出的Offer,无论接受与否,如果考虑其背后需要筛选和面试其他不合适的应聘者的时间,公 司可能已经耗费了很大的成本。所以,如果一个应聘的工程师拿到了Offer,就算ta一时不能决定或者不能接受,大部分公司还是很愿意保持Offer的 ——如果时间超过了几个月,Offer的具体薪酬很可能有改变,Offer的决定和工作级别往往还是有效的(除非这个公司的经济情况或者整个大环境变得特 别差,公司突然决定不再扩张了)。
所以,Offer的决定(是否招收这位应聘者和招聘级别)往往是可以在比较长的时间内有效的,而Offer的具体数字(工资、奖金、股权等等)是很可能变动很快的。我们最好把这两个部分分开。
理解这一点很重要:我跟一些准备来硅谷工作的朋友交流的过程中,感觉他们觉得找工作是一次性的买卖,成了就好,不成就再也不用打交道。有些Recruiter有时候也会给出这样的误导:“如果你现在不来,以后就很难来了” [3] 或者“我这么辛苦找到VP才给你争取了这个Offer,你不来的话就是不珍惜我的劳动,以后就别跟我们的团队合作了……”[4] 其实这些说法都是说服你的手段。如果你现在不接受,而几周之后,或者半年甚至一年之后再跟他们说想要去,绝大部分情况下,公司还是会非常积极的给你安排新的Offer的,只是具体的数字可能不一样而已。
理解这一点的另一个意义是:尽量跟所有跟你交流过 Recruiter保持良好关系,就算你不去他们的公司,也给每个人感谢;就算 Recruiter在具体数字的讨价还价过程中跟你说了一些不好听的话,别放在心上,有机会继续保持联系。这样的心态有助于你长期的职业成长,因为 Recruiter本身流动性也很大,他们到了另一个公司,如果还能想起你是一个很优秀的应聘者,会给你带来新的机会。
2、Offer的讨价还价
我认为最好把所有可能拿到的Offer的公司都面试好了,知道自己究竟能去哪些公司,每个公司提出的薪酬待遇是多少都搞清楚了,然后再跟Recruiter做协商。
如果你拿到了一个Offer,还有其他公司没有答复,可以跟其他公司说你有一个Pending Offer,让他们加快速度;而跟给你Offer的公司说你需要一些时间决定,同时考虑到对方的担心 ,你可以提出过几周再看Offer的具体数字(这样别人不会觉得你是希望拿着他们的Offer来回讨价还价)。 在这个过程中,Recruiter很可能会催你决定,但正如上一段说的,除非经济情况突然变化,绝大部分情况下Offer在几周之内是有效性的。
拿到所有能拿的Offer后,可以跟每个公司说你的所有可能选择,跟他们确认Offer里薪酬待遇的具体数字,然后把不同的待遇转换成可比的每年收 入(见上一部分“薪酬和待遇”的分析)。这样你就大概知道你在当前就业市场的位置,有了基本的数据跟Recruiter讨论薪酬待遇了。
在讨价还价之前,我个人的建议是想清楚自己对每个公司(而不是每个Offer的数字)的态度和自己的自身情况:这是不是所有我能选择的公司里面我最 希望去的公司(根据第二篇讨论讨论的内容,个人目标和公司文化等等)?如果不是,就不必去讨价还价了:一方面浪费了你的时间,另一方面容易引起误会。比如 说你说了一个想要的待遇,对方答应了,你不去,就不太好跟这个Recruiter拒绝了——拒绝别人总是需要有一些理由的。
如果这个公司是你非常想去的,那就跟对应的Recruiter讨论Offer的细节。这里面很重要的一点是讨价还价的目的是什么?为什么这个公司应 该多给你工资和股票?我觉得可以强调两点:1、你很喜欢这个公司,希望加入;2、其他公司的待遇更好,你希望的到一个公平市场的待遇,让你可以很高兴的工 作。
你希望加入这个公司这一点很重要:这表现了你的讨价还价是真诚的,同时把你和Recruiter放在了同一战线上[5]:Recruiter也很希望你能在这个公司工作,讨价还价的工程是你们俩共同努力来实现共同的目标;
公平性是大家都愿意接受的一个讨论基础。[6] 从 公司角度来说,如果你的待遇低于市场待遇,那你会觉得没有被公平对待,可能很快离开公司,对公司也不是一个好事情。从个人角度来说,希望“不吃亏”就好, 不要想着从中得到比别的类似的工程师更好的待遇:待遇总是跟期望值挂钩的,如果你真的要到了更好的待遇,公司对你的期望值也会更大。
如果这个公司的待遇正好也是最好的,那就很难讨价还价了——但你也没有吃亏;如果这个公司的待遇比其他公司要差,你可以把其他Offer里面最好的 拿出来跟Recruiter一起讨论你的分析,强调你希望到这个公司和你希望公平这两点。如果你的分析有道理,也就等于给Recruiter提供了跟管理 团队协商依据。Recruiter会比较容易给你争取更好的待遇。
最后讨价还价的结果可能是令人满意的(比如说公司的确把待遇水平涨到了你希望的水平),也可能不完全满意:比如说公司的管理团队认为你的分析不完全 合理,比如说对股票未来价格的预测跟管理团队的预测不一样;或者另一个公司给出的待遇是非理性的…… 一个前Yahoo的Recruiter曾经在Caltech的就业中心做过讨论,她的建议一般不要超过两个回合的讨价还价——如果一开始的Offer是 x,你回复说希望要a,对方说不行,最高是y,你回复说要b,对方再给你z。到了这步基本上就很难再有大的变化了。这是一个特定的Recruiter说的 经验,可能不是放之四海皆准的道理,但我觉得也有一定道理:第一回合是Recruiter自己的上限,第二回合是Recruiter跟管理团队讨论之后的 上限。在这个时候,如果对方给你的待遇还不能满足你的期望,我会建议静下心来想想这个Offer是不是合适:长远来看,找一个自己喜欢的工作更重要;但你 如果有一些短期的期望(比如说需要一笔钱还房贷),那可能就要为了短期的目标而去一家自己不喜欢(但薪酬更高)的公司了。如果短期没有迫切的期望,而两个 公司Offer的差距也不是很远,我还是建议去自己喜欢的地方。无论哪种决定,关键是要在讨价还价之后冷静下来综合考虑,讨价还价的过程本身很容易让人专注于薪酬数字而忽视了其他的考虑因素。
3、Offer的接受和谢绝
一旦决定,一般建议先接受一个公司的Offer,等到对方确认了,再谢绝其他的Offer。 这样的操作顺序有两个好处:第一是以防万一,如果你希 望去的公司出了什么临时事故不能聘用你了,你还没有拒绝其他公司,还可以轻松的接受另一个公司的Offer;第二是而且减少自己犹豫的可能性——一旦你谢 绝了其他的公司的Offer,对方可能还会给你一个更高的Offer(往往比你拿到的高一点),这个时候如果你已经答应了最喜欢的公司了,就不会为多一点 点的待遇而再反复犹豫了。
无论接受Offer也好,谢绝Offer也好,一定要给所有公司所有跟你联系过的人发信感谢。他们都在这个过程中花时间为你提供了有用的信息,感谢他们并且交个朋友;以后的路很长,总有碰到的时候的。
4、Offer的绑定性:
最后讨论一下Offer的绑定性。硅谷绝大部分的IT公司的绝大部分Offer都是At-will employment:雇佣双方的任何一方都可以随时随地无条件的解除雇佣协议 。而一般礼貌的做法是雇员决定离开公司的话,一般在离开前的两周通知公 司;公司如果需要解除雇佣协议,一般提供两周左右的补偿。
同样道理,就算你接受了一个Offer,随时可以谢绝——当然最好是礼貌的谢绝:跟对方公司的HR沟通,解释为什么你要谢绝这个Offer,然后跟所有帮助过你的人联系,向他们解释并且道歉。
我见到过的一些例子是有个朋友接受了一个公司的Offer,然后又打算去另一个公司上班,但并没有通知第一个公司,直到报到的那天不出现,对方才知道。这就非常不好。
所以, 如果你有更喜欢更想去的公司,你是可以谢绝一个接受了的Offer的。只要你礼貌地处理好这个过程,跟所有人充分沟通,以后也还是可以保持很好的关系的。这跟你在美国的信用记录无关。关键是你是否真心想去一个公司。
 
——–【作者简介】——–
魏小亮(@魏小亮9),1997 年国际信息学奥林匹克银牌。2001年,本科就读于清华大学计算机系,在读期间担任系科协副主席,毕业时获得本科优秀毕业生称号;2004年,毕业于加州 理工学院计算机专业,获得硕士学位;2007年,于加州理工学院计算机专业,获得博士学位。学习期间,在网络领域的顶级期刊 IEEE/ACM Transaction of Networking、会议IEEE Infocom上发表多篇文章,其中发表在IEEE /ACM Transaction of Networking上的文章引用次数超过400次。目前,在美国Facebook公司担任总监,领导 Facebook移动产品线性能、可靠性和用户体验分析等方面的研发团队,同时也是Facebook软件部署团队的一员,负责软件的快速部署;另外,他也 是Facebook“新兵营”的领队之一,负责新员工的培训。(摘自清华博学网)

CatChen:面试体验 Facebook 篇
Google、Microsoft 和 Yahoo 都 是去年的事情了,接下来说说今年的吧。其实我在豌豆荚非常爽,跟身边的设计师和工程师合作都很愉快,所以唯一能够诱惑我去面试的就只有 Facebook 了。最初接受 Facebook 面试邀请的原因并不是追求它的 offer,而是我就想了解一下 Facebook 是怎么面试的,有什么是值得豌豆荚招聘借鉴的。
过去在百度做面试官,只是面试而已,公司招不招得到人我没什么感觉。我觉得公司招不到人就招不到人咯,我们没必要扩张得那么快啊,先专 注于做好手头上的项目再说嘛。豌豆荚其实不是着急要招前端工程师,我们还是坚持只招一流人才,只不过长期发不出 offer 还是让人感觉招聘有问题——我们浪费了大量的资源在面试上,发不出 offer 意味着回报率低,因此我们总要想办法研究如何提高回报率。
回到正题上来,我选择参加 Facebook 的面试,就是想看看他们是如何选拔人才的,他们所使用的题目是如何设计考点的,是不是设计得比我们的要好。因此,在收到 Facebook HR 的邮件后,我回信说愿意聊一下,然后跟他约了一个时间进行电话沟通。因为 Facebook 总部在美国西岸,所以之后的电话沟通和电话面试都约在了早上 8:00。尽管这导致他们要晚一个小时下班(按朝九晚五算的话),不过 HR 也很通情达理地接受了。(我猜大多数工程师都不会采用朝九晚五的正常作息时间吧。)
HR 在电话里先简单介绍了一下 Facebook 现在的情况,然后说明这是 Menlo Park 总部的职位,让我确认如果顺利应聘的话我会愿意到美国去。接着 HR 问了我两个很基础的 CSS 问题:display block 和 inline 有什么区别?position 有哪些取值?我觉得 HR 能够问这样的问题对于工程师来说是很爽的事情,因为纯粹的小白就被过滤掉了,也不需要浪费工程师的时间来面试。(我在之前的文章中 说到过,在中国大多数面试前端工程师职位的候选人无法回答这两个如此基础的问题,不知道在美国是否也如此。)随后 HR 问我还有没有什么不明白的,或者关于 Facebook 想要了解的,我说没有了。HR 的最后一个问题是「你为什么选择 Facebook?」我当时心里想的是,「是你主动联系我的,我没想过这个问题哦」。于是我跟他说,「我暂时没有答案。我现在在豌豆荚工作很开心,不过我 也乐意多地了解 Facebook。」
 
电话沟通后,HR 给我发了两道 puzzle,选做其中一道就可以了。两道题目都是前端相关的,其中一道需要设计一个简单的算法,另一道则需要支持移动设备触击交互。这种解 puzzle 的面试方法我不是第一次遇到了,4 年前申请 Google 的 Web Developer 职位时也遇到过类似的 exercise,只不过题目只有一道,没有选择的余地而已。相比起 4 年前 Google 的 exercise 而言,这两道 puzzle 的考点更加 update。(4 年前的 exercise 还需要考你如何做圆角和背景渐变,现在都是用 CSS 3 搞掂的了。)
我花了一周的时间完成了一个 puzzle,搞掂了算法设计和界面实现,连 unit test 也都写了,然后提交给 HR。HR 在 review 的结果出来后,把我介绍给另一位 HR,说她会帮我安排接下来的面试。第一轮面试感觉有点像 Google 的,主要由 3 道题目构成。题目的考点设计得很好,基础知识能被覆盖到,常用技法也需要用到,但又绝对不需要某一方面很高深的知识。(设计得不好的题目往往是依赖于面试 官很熟悉的一个难点,如果你不知道这个难点,或者你的理解跟面试官不一样,你就完蛋了。)
第一轮面试的最终通话时间为 90 分钟,我猜这意味着我做得不够好,因为如果以 Google 的标准来衡量的话,45 分钟解 3 道题才算及格。经过后面几轮面试我才发现,原来 Facebook 面试一般是要求 60 分钟解 2 道题。第一轮的面试官之所以给我加了 1 道题,估计是因为第 2 道题我做得不好,所以他相当于换了一道题给我做。面试结束,面试官又问了之前 HR 问过的问题,「你为什么选择 Facebook?」我还是那样子回答。
面试一个星期后,HR 邮件跟我说,我通过了上一轮面试,接着要安排下一轮面试。第二轮面试感觉跟第一轮差不多,包括长度和难度。只不过这次就是 60 分钟 2 道题,估计是因为我 2 道题都解出来了吧。面试结束时面试官又问那个问题了,我决定反过来问他是否喜欢 Facebook 的工作。他说 Facebook 的工作很好,周围的人都很聪明,能够从他们身上学到东西,同时公司提供一天三餐,福利好到觉得自己被宠坏了。我其实不是很在乎福利的部分(豌豆荚又不是没 有一日三餐),我更在乎的是人是否聪明,合作的过程中他们是否总能教会你一些你过去不知道的事情(这是我现在在豌豆荚拥有但离开就可能失去的部分)。随后 我跟他说,我在乎的是能否跟聪明人一起工作,听他这样说感觉 Facebook 不错。
又过了一个星期,HR 邮件跟我说,需要安排我到美国面试。我一开始对这件事也不特别在意,觉得那你就慢慢安排吧,有人报销机票让我到湾区旅行就是好事情。在随后的电话沟通里面 HR 跟我说,因为今年的 H–1B 签证配额已经花出去一半了,如果按照这个速度估算的话可能到 5 月底签证配额就会花完,所以希望我尽快到美国面试。(如果签证配额花完了,有没有 offer 都没意义了。明年 4 月才能申请明年的配额,申请成功也要等明年 10 月签证才生效,就算公司很想要你,也只能先安排你在海外办公室工作一年。)于是我就连忙办签证 5 月下旬飞往美国参加面试,因此也就有了我之前那篇《三藩市湾区一周游》。
4 轮面试安排在一天内完成,Facebook 委托旅行社安排好往返机票和两晚住宿,随后我就出发了。因为害怕迟到,又因为美国郊区的公交又是一小时一班的,所以面试当天我早早就起床了,结果发现酒店 门口是长期有出租车的,打车到 Facebook 后等了一个多小时才到原本约定的面试时间。HR 在见到我后先把我带到 micro-kitchen 让我拿吃的喝的,并且问我那么早来是不是没有吃早餐。我说确实没有,然后她就让我拿一些食品做早餐。(其实我应该在酒店叫早餐的,因为 Facebook 允许每天报销最多 $75 的餐饮开支。)随后她把我带到用作面试的会议室,给时间我解决早餐,并且跟我简单说明了当天的安排:早上 2 轮面试,结束后她会来带我去 Facebook 餐厅吃饭,然后下午还有 2 轮面试。
总体上来说,4 轮面试的形式还是一样的,每轮都是 60 分钟解 2 道题目。所有题目都是前端相关的,HTML + CSS + JS 都会考到,不过不涉及 HTTP。最后一轮的面试官有点特别,他先问了一个很古怪的 CSS 问题,然后又跟我讨论了一个跟前端不相关的编程问题。之所以说他那个 CSS 问题古怪,是因为在现实中大家都不会那样写 CSS,但他写出来了问你会显示成怎样,不是非常熟悉 CSS 标准细节的人又很难完全答对(我也有答错了的地方)。至于第二道题,他说他是突发性想出来的,他自己也不知道最优解是什么,就是想跟我讨论一下能够如何优 化,我就跟他讨论了几种可能的优化方式。所有他又说如果把常数 k 改为可以变成任意大的 n 怎么办?我就说 n 的问题能够分解为 n/2 的问题,因此能够通过二分法来优化。
通常情况下,如果由于面试而进入一家公司的话,HR 所做的只是把你从 A 地带到 B 地,保证你顺利完成面试。如果是朋友带你参观公司则会很不一样,他会带你去看有特色的东西,并且告诉你这个好玩那个有意思。Facebook 的 HR 给人的感觉更像是后者,她向我介绍 Facebook 墙上的涂鸦,带我去天桥上看 Hacker Square 全貌,并且告诉我每次 hackathon 开始时大家就会聚集到 Hacker Square 上来。除了 HR 以外,也有一些面试官会提及他们喜欢的 Facebook 特色。这让我觉得 Facebook 里面还是有不少员工挺喜欢这家公司的。
面试结束后,HR 跟我聊了一下,告诉我如果有 offer 的话接下来会需要什么。根据之前 Google 面试的经验,我猜 Facebook 会不会也要我提交一大堆的材料,HR 说只要提交申请签证所需的学位证就可以了。之后 HR 让前台帮我叫出租车,在等待的过程中前台还很好人地问我是否需要拿喝的,需要的话可以在大堂冰柜里面拿。
随后的周末是美国的亡兵纪念日,周六到周一连续放假三天,我则利用这个长周末去参加湾区的各种好友聚会。周一中午 HR 打电话来说要发 offer 了,待细节确定后下午再打电话给我告诉我具体的数字有多少。我当时就在想,难道 Facebook 的面试官和 HR 周末都工作?这个效率很高呀。只要面试官稍微拖一下,周五的面试就必须等到下周才能有结果。而且确定 offer 细节估计也要经过几个人审批吧,节假日发 offer 就意味着大家都要在节假日处理工作了。
总体上来说,Facebook 面试过程中对候选人的关怀做得很好,效率也不错。让我「大开眼界」的是面试题,原来真正好的面试题并不在于它有多难,而在于它有多简单,简单到熟悉这个领 域的人一下子就明白到你在说什么以及想问什么。能够进入 Facebook 的人应该都觉得面试不难,至少跟中国的面试对比起来如此,那是因为 Facebook 把觉得面试有点难的人都过滤掉了,而中国那些很难的面试反而没什么区分度。
《面试体验》系列文章到此就结束了。接下来有 时间的话或许我会写写跟应聘美国职位有关的事情,例如 H–1B 的周期和配额是怎么样的,选择什么时间面试对你比较有利,拿到 offer 之后该如何为新的生活做准备等等。我知道对于很多在中国读书或工作的人来说,直接应聘美国职位看起来门槛很高,那是因为你身边很少人这样做所以你不了解而 已。只要你愿意花时间去了解清楚,你会发现这件事其实没有你想象中那么难。如果你对这个话题感兴趣的话,可以订阅我的博客,或者留言提问。

如何判断自己是否到了该辞职的时候
大约6个月前,我辞去了投资公司的工作,去和我的朋友Adrian一起做一个网站。我发现有必要把我的这点经验写一写,希望能给那些有跟我一样想法的人一点忠告和见解。
我想辞职。但不知道是否应该辞职?
这绝对是一个最私人的、最耗时间、最困难的你应该问自己的问题。也正因为这样,大多数人放弃回答这样的问题。
作为一个拿着工作签证的移民,我知道绝不会有一个辞职的“最佳时间”等着我,但一些已经出现的信号使得我知道给别人打工的日子将不会持续太久。不知道这些迹象是否在你身上也有?
1) 一直在做业余项目。如果你在白天工作了一整天,仍然在业余找一些项目做,很可能是:你从白天的工作中学不到足够的知识,或你对它不感兴趣。我总是在业余时间做一些小项目或经营一些小生意。最终,我认识到,我应该用全部时间来做它们。
2) 我对晋升不感兴趣,也不想去别的公司工作。在企业职场里,职位头衔和官级是让一个人走向事业成功最好的动 力。大多数的公司不会为你某个人创造一个新职位。如果你在想5-7年后你的职位,那你的老板的职位是离你最近的目标。而7-15年后,你很可能达到现在老 板的老板的地位。但那时你估计有40岁了。如果你对这些不感兴趣,你也许应该在另外一个“更好”的地方工作(比如大多数认为去雅虎或谷歌工作能更快的事业 有成)。但如果你已经做到了很高的位置可还是跟CEO或自己成立公司的距离很远,你应该认真的考虑一下在某些方面应该做巨大的调整。
3) 每月的固定工资不能激起我的激情。工资是个很奇怪的东西,它不会根据你的工作成绩而随时的上下变化,它们 只会一年变化一两次。当你刚从学校出来步入职场,你能在短时间内进步的很快,但工薪却几乎不会有多大变化。如果你拥有一个公司,或者是有一部分股份,你的 成功与否会紧密的跟你的表现和你的合伙人的表现直接相关(再加上一点运气)。
4) 你感觉自己在失去闯劲,虽然是缓慢的,但的确在发生。在大学生活和社会职场生活完全不同。如果你聪明且爱 学,你能迅速的完成学业,但工作却需要资历。如果你的工作不是你热心的,那它会慢慢磨损你的意志,虽然很慢,但却是真的。这是我的真切感受。作为一个创业 者,你有多聪明或多努力工作并不代表你能成就多少——重要的是你的斗志/锋芒/动力,这才是让你和周围其他人与众不同的地方。永远不允许自己往下沉。
5) 公司工作的机会成本 [opportunity cost,指为选择一项东西而放弃的其他机会]让你夜不能寝。这种情况,如果你还没辞职,但估计也快了。从这一点上看,你大概已经认识到了人生不是一场看看自己能往上流社会爬的多高的竞赛。你是想从无到有创造一些东西,你想试试能否做出这世界上最好的东西。
 
我决定辞职。可在我离职前应该做些什么?
1) 找个你能信任的合作伙伴。这几乎是可遇不可求的事。你也许有很多值得信赖的老朋友,但大多数在你想做的事情上没有相同的动力、热情、和信心。我很幸运,遇到了Adrian(我和他的故事都在这里,你可以看一下)。
2) 选一个简单的创意开始做。我认为找一些你感兴趣的想法创意或问题,着手去做,这很重要。很难说你应该做什么,但我可以告诉你,我的Backspaces网站最初起源于分享一下我在纽约的所见所闻,最终发展成了更大的东西。
3) 尽可能多的还清助学贷款。如果你有一个报酬很高的工作,你可以很快的还清助学贷款。并不是因为你可以挣更多的钱,你就可以花更多的钱。不要把大把大把的票子都花在酒吧舞厅里,不要买房或买车。我在一年内偿还了所有的贷款。无债一身轻,没有经济负担,我感觉到生活的一种解脱。
4) 善待自己和家人。他们在你的整个生命中都在支持你。如果你取得了一些成就,向他们表示你对他们提供的支持的感激,因为这种机会很少,更多的时候是你对他们欠下责任和义务。
我辞职了。现在该怎么办?
很好!你已经迈出了第一步。你面前的是一条开放的,没有阻碍的道路——但这次是你坐在驾驶座上。我毫不夸张的说,在开发我的Backspaces的头两个月里,我干的活儿比在其它公司里干两年的都要多。你正在启程开启一段非常特别的经历,但同时也是脆弱易折的。

Cate:我是如何准备Google面试的
导读:Cate 是一位加拿大的软件工程师,目前就职于 Google 。本文是他在 2010 年在 Google 面试后分享的文章。
也许你可能没有参加过谷歌面试(或者没能答出面试中的一些问题),这里我会分享一下上周我的面试经历。我个人感觉良好——至少已经全力以赴了,无论结果如何都会对我有很大的帮助。
由于已经签了保密协议,因此我不会写出面试的问题。然而,我会写一下我是如何得到这个面试机会以及准备面试的过程。
首先,面试的是谷歌。如果没有在Google工作的朋友和我谈起并推荐我,我是不会应聘的。因为我“离得比较近”,因而没有参加电话面试,直接进行了在线面试。我并不认为渥太华和滑铁卢(加拿大)离得很近(也许这是因为我没有加拿大人的距离感!),但是我确实认为与人面对面的交流会比电话面试好的多。那天我的运气特别的好,因为那天晚上的经历就像是“Ignite! Waterloo”活动,非常酷。
译注:Ignite! Waterloo:加拿大的一个社区活动,在广泛的议题上进行五分钟快速演示,展示了滑铁卢地区的极客文化。
 
 
首先,我和招聘专员简单聊了聊,他/她告诉我可以使用白板,并且介绍了整个面试流程。接下来我和两个软件工程师分别进行了45分钟一对一交流。我惊 奇地发现原来面试也可以这么有趣!通常我在面试的时候都会非常紧张,然而这次没有与很弱的人一起扎堆面试,这真的很酷!第一长面试的问题非常简单,第二场 虽然难一点但也面得不算太差。最困难的恐怕就是在白板上编程(不能用电脑!)——在白板上很难用TDD(测试驱动开发)!他们会告诉你不要穿正装,实际上最好也不要这么做——我费了不少时间坐在地板上写白板,身边到处都是各种记号笔。可以想象如果穿裙子会是怎样的情景!
他们提前会发一份面试需要准备的事项列表,这对我非常有帮助。虽然我大学的课程学得很好,但最好还是有针对性地复习一些专题。除了通常的准备,这里 还有一些额外可以关注的内容——保持与最新的业界资讯更新,大量使用Google的产品,思考如何使用技术改变生活,撰写博客(是的,最后两项也很有帮 助)。与此同时,我已经很好地掌握并运用Java 5扩展,像是范型、枚举、for-each等等。
 
下面是我用来准备的相关资料:
读《Effective Java (第二版)》 –——作为一名合格的Java程序员没有任何理由不推荐这本书。
读《程序员面试攻略》 并运行所有书中的例子——对于回顾类似树、列表这样的数据结构基础概念非常有帮助。我不是很喜欢递归那一章(从我自己使用的角度),我更推荐使用迭代。尽管如此,它真的是一本非常有用的好书。
读《编程人生》 –——这本书中有很多人在谷歌工作,这从另一方面说明了谷歌的文化。书中同样还充满了很多我以前从未注意到的有趣编程故事,还有这些牛人是如何解决问题,讨论API以及增强程序扩展性等内容。
复习《Combinatorial Algorithms: Generation, Enumeration, and Search》 中的背包问题(Knapsack),旅行商问题(Traveling salesman)以及NP完全问题(在秋季学期里我学了组合数学并且从头到尾读完了这本书)——坦率的说,我不很喜欢这本书。我感觉这更像是一本数学 书。如果你是一名程序员而不是数学家,用实际的代码来解决这一类问题可能会更有帮助,而且Wikipedia读起来肯定更容易理解。
做一些《Java解惑》中的问题,这会帮助锻炼你阅读代码找错的能力。虽然我没有被问到这类问题,但是我确实需要仔细检查自己的代码。IBM在我的手机屏幕上给我出过电子商务的问题,我知道谷歌也会使用这类题目。
复习并发问题——死锁、 活锁、互斥量、 锁和信号量等等。在Java中什么时候使用synchronized关键字?你怎么样避免死锁和活锁?
复习树的遍历 ——前序遍历、中序遍历和后续遍历,深度优先搜索 vs 广度优先搜索、A*算法,Dijkstra算法等等。
复习平衡二叉树——红黑树、AVL树和 伸展树(Splay-tree)。
复习图——图的表示, 最小生成树,图的搜索等等。
算法复杂度分析。
编程实现 6 种排序算法——包括算法复杂度为O(n log n)的那些算法,使用TDD风格编程(我使用的测试用例可以参考这篇博客)。
编程实现哈西表,要求只能使用数组。支持包括:范型,动态数组,延迟初始化,要求测试优先。
练习所有手头上能够找到的问题——搜索“Google interview questions”,不用有什么顾虑,可以看看这些问题。有时候我用Eclipse写代码,但也会用Google docs。我会找一个朋友审查我的代码并向我提问。
经常找在谷歌工作的朋友聊天,问很多问题。他非常棒,并且全力帮助我准备面试。不仅如此,通过理解他为什么认为我适合在谷歌工作,我也更深入地理解了自己想去谷歌工作的理由(是的,这的确有点迂腐。但是正如我的导师告诉我的,即使是谷歌,挑选你喜欢的公司和公司挑选你也是同样重要)。
 
虽然我自己认为只是准备充分,但在谷歌工作的朋友戏称我准备得“几近完美”。除了这些准备之外,我还能做些什么呢?
更多的代码分析实战 —— 尽可能多地找代码去分析。
计算数列的和。例如,你如何计算数字1-n的和?请给出证明。回顾我在第二场面试中的分析,我给出的答案是: (n-1)(n-2) + (n-2)(n-3) + … + (3)(2) + (2)(1)。当然,我没有及时地给出答案,所以我的时间复杂度上限是O(n3)。
复习Java函数库,数据结构。这个时候,我会认真地回答:“我知道有这样的数据结构不会接收重复的值,只是现在记不起来叫什么名字了”。实际上只要实现Set接口就可以做到,这个我也是下午才刚学会。
复习函数库中的某些关键点——Arrays和Strings非常有用。
练习在白板或者纸上编程。你可能想当然地想在白板上插入一行或者进行重构,这可是非常困难。同样地,在白板上写代码很容易忘记写return语句。Eclipse从来不会让我自己写这些声明和reurn语句,并且会把我的代码放在函数的中间,而白板可做不到!
 
接下来该做什么?
等待。
等待。
等待!
无论结果如何,我都希望能得到一些反馈。
把面试的问题写成代码(同时写好测试用例!)
完成《Java解惑》中的问题。
整理面试经历——我花了很多时间准备这次面试,相信你可能已经收藏了这些面试题目。
寻找其它的机会。我对IBM特别感兴趣,找一些在那里工作的朋友看看有没有什么合适的机会。
和导师们谈谈这次面试经历。

年轻人:请选第一个老板,不要选第一份工作
一旦一个人尝过了自由,他就永远不会想要当奴隶。因此我相信,我们现在看到的恐怖景象只是一时的。明天一定会更好,只要美国继续坚持她的理想 — 自由与更美好的生活。
毕业季到了,很多学生开始问我找工作相关的问题,其中最常出现的,大概就是「A 工作与 B 工作之间,我到底该选择哪一个?」接着,如果你请他们列出比较条件,往往都是薪水、工作地点、奖金、工时、内容、出差等等这些「客观规格」,然后就开始排 列组合,试图找出到底是 A 工作的高底薪比较好赚,还是 B 工作的早下班比较健康。
就好像在选要买哪一台车一样。
可惜找工作并不是找一台车,事实上,尤其是对社会新人来说,你在找的,其实是那位「司机」。
对大部分的学生来说,刚入社会的前三年,你基本上都还在「培训」。没错,你在学校学的那些东西,在业界的标准看来根本只是儿戏。况且除了「硬性」的 知识,你还得学会更多、更重要的「软性」的技能 — 沟通技巧、说服的艺术、向上管理、同事关系、项目合作、应对进退、临场反应、做决定、负责,这些,都是你从来没经历过的,也都是需要好多年的学习才能真正 上手的。
 
你会跟谁学这些东西?没错,你的第一个老板,还有你的第一组同事。简单的说,如果社会是一间学校,那你的第一个老板就是你的国中(国民中学,简称国 中,属于台湾国民义务教育的一部份)老师,而其他人就是你的国中同学。国中大概是每个人人格养成最重要阶段,而进入社会的前三年,就是这样的阶段。所以大 家常说第一个老板最重要,就是这个原因,因为他对你一辈子的价值观,影响常常远大过你的父母、师长。
讲得更简单一些,我的同事多已入社会超过十年了,而每个人现在累积的成就与财富,之间的差距可能已经到达十倍数。观察「胜利组」的人,绝对不是当年 选择「A 工作奖金比较高」的那一群,相反的,是选择「哪个老板可以让我从他身上学到最多」、「哪个老板最值得我追随」的那一群。
道理很简单,入社会十年后,你能够站在什么位置,绝对不是看你什么学校毕业的,也不是看你待过哪家公司。入社会十年后,你的价值就是这十年来,你到 底累积了什么实力。真正累积了能量的人,会成为稀缺的将才,大家争夺的至宝。而只是「工作」了十年的人,Well,他就只是一个比较资深的员工而已。
所以当然,你在选的不是一份工作,而是一间让能够你学到最多东西的社会学园,尤其是那些最有价值的软性技能。所以你要慎选第一个老板,因为他就是亲身示范给你看沟通技巧、管理方法、价值观、人生哲理的那盏明灯,让你十年后能够练成一把名剑的那位师傅。
至于要怎么选第一个老板?其实也非常简单,就是选那个让你欣赏、佩服,希望你自己有昭一日也能够变成他的那位 Leader。所以当你去面试时,记得,不只是老板在考验你,你也要多了解他。记得问他很多人生观、价值观的问题,相信我,真正的好领袖会很欣赏问这些问题的人。
而如果你还想更确定,没问题,先去那家公司实习不就得了。结婚之前先同居,永远是最好策略。这也就是为什么有人说,实习其实是入社会前最棒的偷吃步。
注:“偷吃步”,属于方言,台湾话,大陆的闽南语。解释如下:即偷偷“吃”掉了某一步,意思是在做某件事,或者完成某个任务的时候,以蒙混,耍赖等等手段(不一定要暗中,偷在这里并不是暗中行事的意思),跳过某些步骤进而达到加快速度完成任务的目的。

系统架构领域的一些学习材料
系统架构是一个工程和研究相结合的领域,既注重实践又依赖理论指导,入门容易但精通很难,有时候还要讲点悟性,很具有“伪科学”的特征。要在此领域进阶,除了要不断设计并搭建实际系统,也要注意方法论和设计理念的学习和提炼。
经常有同学询问如何学习,特贴一篇学习材料,供大家参考。09年时写的,在系统领域浩如烟海的文献中提取了一些我认为值得研究和学习的项目,没包括 近几年出现的一些工作,也不够全面。不过,其实也足够了,看paper是一个从少到多再到少的过程。对问题本质、背景和发展历史有大致了解,再辅以 hands-on的实践(长期的真正的实践),足以摸到本领域的门径。
此文在网上转载不少,但多数没有说明出处。今天在这里重发,也顺便向315致敬。

对于工程师来说,到一定阶段后往往会遇到成长瓶颈。要突破此瓶颈,需要在所属技术领域更深入学习,了解本领域的问题本质、方法论与设计理念、发展历 史等。以下提供一些架构相关领域的学习材料,附上简单点评,供有兴趣的工程师参考。希望大家能通过对这些领域的了解和学习,掌握更多system design principles,在自己的工作中得心应手,步入自由王国。
1. Operating Systems
Mach [Intro: http://www-2.cs./afs/cs/project/mach/public/www/doc/publications.html]
传统的kernel实现中,对中断的响应是在一个“大函数”里实现的。称为大函数的原因是从中断的入口到出口都是同一个控制流,当有中断重入发生的 时候,实现逻辑将变得非常复杂。大多数的OS,如UNIX,都采用这种monolithic kernel architecture。
1985年开始的Mach项目,提出了一种全新的microkernel结构,使得由于70年代UNIX的发展到了极致而觉得后续无枝可依的学术界顿时找到了兴奋点,也开始了沸沸扬扬的monokernel与microkernel的争论。
插播一个花絮:Mach的主导者Richard Rashid,彼时是CMU的教授,受BillGates之托去游说JimGray加盟MS。结果把自己也被绕了进来,组建了Microsoft Research。他到中国来做过几次21Century Computing的keynotes。
Exokernel [Intro:http://pdos.csail./PDOS-papers.html#Exokernels]
虽然microkernel的结构很好,但实际中并没有广泛应用,因为performance太差,而且大家逐渐发现OS的问题并不在于实现的复杂 性,而更多在于如何提高application使用资源的灵活性。这也就是在kernel extension(例如loadable module in Linux)出现后,有关OS kernel architecture的争论就慢慢淡出人们视线的原因。
Exokernel正是在这样的背景中出现的,它并不提供传统OS的abstraction(process,virtual memory等),而是专注于资源隔离与复用(resource isolation and multiplexing),由MIT提出。在exokernel之上,提供了一套库,著名的libOS,用于实现各种OS的interface。这样的 结构为application提供了最大的灵活度,使不同的application可以或专注于调度公平性或响应实时性,或专注于提高资源使用效率以优化 性能。以今天的眼光来看,exokernel更像是一个virtual machine monitor。
Singularity [Intro:http://www.
research.microsoft.com/os/singularity/publications/HotOS2005_BroadNewResearch.pdf]
Singularity出现在virus,spyware取之不尽、杀之不绝的21世纪初期,由Microsoft Research提出。学术界和工业界都在讨论如何提供一个trust-worthy computing环境,如何使计算机系统更具有manage-ability。Singularity认为要解决这些问题,底层系统必须提供 hardisolation,而以前人们都依赖的硬件virtual memory机制并无法提供高灵活性和良好性能。在.Net和Java等runtime出现之后,一个软件级的解决方案成为可能。
Singularity在microkernel的基础上,通过.Net构建了一套type-safed assembly作为ABI,同时规定了数据交换的message passing机制,从根本上防止了修改隔离数据的可能。再加上对application的安全性检查,从而提供一个可控、可管理的操作系统。由 于.NetCLR的持续优化以及硬件的发展,加了这些检查后的Singularity在性能上的损失相对于它提供的这些良好特性,仍是可以接受的。
这种设计目前还处于实验室阶段,是否能最终胜出,还需要有当年UNIX的机遇。
2. Virtual Machines
VMWare [" onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://www.research.microsoft.com']);” MemoryResource Management in VMware ESX Server“,OSDI’02,Best paper award]
耳熟能详的vmware,无需多说。
XEN [“AFeather-weight Virtual Machine for Windows Applications”。
3. Design Revisited
“Are Virtual Machine Monitors Microkernels Done Right?”,HotOS’05
这个题目乍听起来,十分费解,其意思是VMMs其实就是Microkernel的正确实现方法。里面详细讨论了VMM和Microkernel,是了解这两个概念的极好参考。
“Thirty Years Is Long Enough: Getting Beyond C”, HotOS’05
C可能是这个世界上最成功的编程语言,但其缺点也十分明显。比如不支持thread,在今天高度并行的硬件结构中显得有点力不从心,而这方面则是functional programming language的长处,如何结合二者的优点,是一个很promising的领域。
4. Programming Model
“Why Threads Are a Bad Idea”
单使用thread结构的server是很难真正做到高性能的,原因在于内存使用、切换开销、同步开销和保证锁正确性带来的编程复杂度等。
“SEDA: An Architecture for Well-Conditioned, Scalable Internet Services”,OSDI’01
Thread不好,但event也没法解决所有问题,于是我们寻找一个结合的方法。SEDA将应用拆分为多个stage,不同stage通过 queue相连接,同一个stage内可以启动多个thread来执行queue中的event,并且可通过反馈来自动调整thread数量。
Software Transactional Memory
如果内存可以提供transaction语义,那么我们面对的世界将完全两样,language, compiler, OS, runtime都将发生根本变化。虽然intel现在正在做hardware transactional memory,但估计可预见的将来不会商用,所以人们转而寻求软件解决方案。可想而知,这个方案无法base在native assembly上,目前有C#,haskell等语言的实现版本。资料比较多,参见Wikipedia。
5. Distributed Algorithms
Logical clock, [“Paxos Made Simple” ,不过还是很难懂。另外,也可参看Butler Lampson写的“The ABCD’s of Paxos”(PODC’01),其中关于replicated state machine的描述会严重启发你对并行世界本质的认识,图灵奖的实力可不是盖的。
这上面反复出现了一个名字:Leslie Lamport, 他在distributed computing这个领域挖坑不辍,终成一代宗师。关于他,也有几则轶事。记得以前他在MSR的主页是这么写的,“当我在研究logicalclock 的时候,BillGates还穿着开裆裤(in diaper)…”(大意如此,原文现在找不到了)。另外,他在写paper的时候,很喜欢把其他牛人的名字变换一下编排进去。这可能也是他还没拿到图灵 奖的原因。
关于Lamport的其他成就,还可以参见这篇向他60岁生日献礼的paper:“Lamport on mutual exclusion: 27 years of planting seeds”, PODC’01。
6. Overlay Networking, and P2P DHT
RON [“End System Multicast”, SigMetrics’00
“Scalable Application Layer Multicast”, SigComm’02
关于ALM的paper很多,基本上都是描述如何搭建一个mesh network用以鲁棒的传输控制信息,另外再搭建一个multicast tree用以高效传输数据,然后再根据多媒体数据的特点做一些layered delivery。前几年出现的coolstream, pplive等系统都是这类系统的商业化产品。
P2P
P2P的出现改变了网络。按照各种P2P网络的结构,可以分为三种。
1. Napster式,集中式目录服务,数据传输Peer to peer。
2. Gnutella式,通过在邻居间gossip来查询,也被称为unstructured P2P。
3. DHT,与unstructured P2P不同的是,DHT进行的查询有保证,如果数据存在,可在一定的hop数内返回。这个hop数通常为logN,N为系统节点数。
典型的DHT有CAN, Chord,Pastry, Tapestry等四种。这些研究主要在算法层面,系统方面的工作主要是在其上建立广域网存储系统。还有一些人在机制层面进行研究,例如如何激励用户共享、防止作弊等。
7. Distributed Systems
GFS/MapReduce/BigTable/Chubby/Sawzall
Google的系列paper,大家比较熟悉,不再多说。在此可查。
Storage
Distributed storage system的paper太多了。下面列出几篇最相关的。
“Chain Replication for Supporting High Throughput and Availability”, OSDI’04。
“Dynamo: Amazon’s Highly Available Key-value Store”,SOSP’07。
“BitVault: a Highly Reliable Distributed Data Retention Platform”, SIGOPS OSR’07。
“PacificA: Replication inLog-Based Distributed Storage Systems”, MSR-TR。
Distributed Simulation
“Simulating Large-Scale P2P Systems with the WiDS Toolkit”, MASCOTS’05。Distributed simulation有意思的地方是simulated protocol是distributed的,而这个simulation engine本身也是distributed的。Logical和physical的time和event交杂在系统中,需要仔细处理。
8. Controversial Computing Models
现在的软件系统已经复杂到了人已经无法掌握的程度,很多系统在发布时都仍然带着许多确定性(deterministic)或非确定性(non- deterministic)的bugs,只能不断的patch。既然作为人类,不够精细的特性决定了我们无法把系统的bug fix干净,我们只能从其他角度入手研究一种让系统在这令人沮丧的环境中仍能工作的方法。这就像一个分布式系统,故障无法避免,我们选择让系统作为整体来 提供高可靠性。
以下3个便是典型代表。基本上,主要研究内容都集中于1) 如何正确保存状态;2)如何捕捉错误并恢复状态;3)在进行单元级恢复时,如何做到不影响整体。
Recovery Oriented Computing
Failure oblivious computing, OSDI’04
Treating Bugs as Allergies, SOSP’05
9. Debugging
系统很复杂,人类无法从逻辑上直接分析,只能通过data mining的方法在宏观上进行观察。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多