2016年3月29日星期二

阮一峰的网络日志

阮一峰的网络日志


谷歌的绩效管理

Posted: 28 Mar 2016 06:07 PM PDT

上个周末,我读完了拉斯洛·博克 (Laszlo Bock)的《重新定义团队:谷歌如何工作》一书(中信出版社,2015)。

拉斯洛·博克是谷歌的人力资源副总裁,该书主要介绍谷歌人力资源管理的各个方面:招聘、薪酬、团队建设、工作环境等等。

说实话,我觉得,这本书不是很好看。你可以想象一下,人事经理写一本书会是什么样?就像人力资源部的报告一样!完全是MBA毕业生的那种文体,it is not fun.

但是,这本书透露了谷歌内部的很多信息和做法,很值得了解。下面是我摘录的第七章《绩效管理》,从中可以看到谷歌怎么评定绩效。

另外,根据自序,拉斯洛·博克在干人力资源之前,还干过熟食店店员、餐馆服务员、图书馆馆员、英语老师、海滩救生员、群众演员等等,后来去读了MBA,转行当上了人力资源经理。所以,我觉得如果你不想当工程师了,改行当HR也是一条路啊。

=================================================

谷歌的绩效管理(书摘)

作者:拉斯洛·博克(谷歌人力资源副总裁)

1.

谷歌每年的内部调查,绩效管理的满意度一直是最低的。

2013年初,只有55%的谷歌员工,认为公司的绩效管理令人满意。虽然,这个比例比许多其他公司的30%要高,但依然很糟糕。员工抱怨最多的两个方面是,一是耗费太多时间,二是流程不够透明,令人怀疑它的公平性。

2.

2013年之前,绩效每个季度考核一次。每名谷歌员工在每个季度末都会收到绩效考评结果。

考评量表总共41级,绩效评分从1.0(表现糟糕)到5.0(表现惊人)。大致说来,低于3.0意味着偶尔或经常达不到期望值,3.0到3.4之间意味着能够达到期望值,3.5到3.9意味着你超过期望值,4.0到4.4意味着"大幅超过期望值",4.4到4.9意味着"接近于惊人表现",而5.0代表"表现惊人"。

谷歌员工的平均绩效在3.3到3.4之间。如果某人连续几个季度的平均分为3.7或更高,通常就能升职。

很难说,这个考评体系是否科学。并没有证据表明,41个考评等级比10个等级有本质不同。这样的设计源自我们的工程师基因,想要准确区分一个员工的表现,是3.3还是3.4。

3.

一年进行四次绩效考评让我们陷入窘境。

每个季度,所有团队主管要用数千小时投入绩效考评,考评过程的精确程度近乎滑稽,但是却不能作为确定薪酬的可靠依据。

我们还发现,一年中有多达24周的时间在分配考评任务、校准评级或就考评结果进行沟通。有些团队主管喜欢这个频率,认为这样可以迫使他们经常检查员工工作,以便发现绩效突然变差的员工。但是为了发现500名陷入困境的员工却要评估5000人,看起来似乎是一种浪费。

4.

2013年,我们大部分时间探索是否有更好的绩效管理方法。

我们尝试了各种替代方式,从没有工作分级到800个工作分级,研究了年度、季度、月度和实时绩效考评,考虑了3分和50分的考评分数体系。我们争论是用数字还是某种主题词作为标签,标注每一个绩效分类,甚至还反复考虑过无意义的主题词(比如芒果),以避免人们将注意力放在标签上。

根据我们的实验,2013年初我们停止了季度考评,改为6个月进行一次。这一改革立刻节省了50%的考评时间。

现在,我们采用5级考评量表:需要改进、持续达到期望值、超过期望值、大幅超过期望值和表现杰出。与以前的标签类似,但是实质的评分级别变少了。

员工不必再为0.1的评分差别而苦恼、浪费时间了。经理也被迫与员工进行更有意义的对话,而不是将一切都隐藏在"你这个季度的考评分数提高了0.1。干得不错,继续努力"之类的话中。

我们还发现,团队主管使用考评体系的两极评级翻了倍。获得最高评级的员工比例提高,同时,落在最低一档绩效分类的耻辱感也有所降低,经理也可以相对轻松地与陷入困境的员工进行直接而真诚的交谈,帮助他们改进。

5.

谷歌的绩效管理总是以目标设定为起点。

目标必须具体、可度量、可检验;如果你达成所有结果,就算完成目标。比如,如果目标是将搜索质量提升x%,你要达成的结果,就是更好的搜索相关性(搜索结果对用户而言的有用程度)和等待时间(用户多快找到搜索结果)。

目标既要有质量标准,也要有效率标准,即达成目标需要耗费多少资源。这一点非常重要,否则工程师完全可以解决一个问题,忽略另外一个问题。比如,你可以给用户提供完美的搜索结果,但是需要用户等待三分钟,这样就不行。

我们要求员工设定非常有野心的目标,明知每次不可能实现所有目标。如果你完成了所有的目标,就说明设定的目标不够激进。

6.

每个绩效周期开始的时候,CEO拉里会设定公司的目标,激励每个人设定的个人目标要基本与公司整体目标相适应。

一旦你看到公司的目标,很容易就可以将其与自己的目标做对比。如果你偏离得太多,要么给出一个合理的解释,要么重新设定。

此外,每个人的目标在内网都是对所有人公开的,就放在电话号码和办公室位置的旁边。能够看到其他人和其他团队在做些什么工作是一件非常重要的事情,而看到自己的目标与公司的目标相契合也能起到激励作用。

7.

团队主管给出员工的绩效评级以后,还要进行校准。

最终确定评价之前,分成小组的团队主管会坐在一起,开始所谓的校准环节,审阅所有员工的初评评级。

校准对于保证公平性至关重要。不同的团队主管会共同考评手下的员工。5到10位一组的主管会面,在墙上投影出50~1000位员工的考评情况,讨论每一位员工,达成一个公平的评级。

这避免了主管会因来自员工的压力而提高评级的情况,同时还确保考评结果能够反映所有人对绩效表现的平均标准。这就和在学校时一样,有些老师给分很松,而另一些老师则很严。校准过程迫使经理向彼此证明各自决定的合理性,以此消除偏见。同时此举还可以提升员工的公平感。

8.

每个谷歌员工不仅会得到上级主管的反馈意见,而且还会得到同事的反馈意见。

2013年,我们还尝试将同事的"反馈意见模板"做得更具体。以前,我们很多年使用同一种格式:列出三到五项这个人擅长的事情;列出三到五项他们可以做得更好的事情。现在,我们会问需要这个人把哪一件事做得更好,以及一件可以采用不同做法,产生更大影响的事情。我们认为,如果员工只需要关注一件事情,相比分散精力的情况,更可能实现切实的改变。

为了帮助同事的反馈,以前我们要求员工在一张空白纸上,列出过去一年所有的成就。现在我们请员工列出具体的项目、他们的角色以及他们取得的成就。因为我们认识到,同事很可能并不知道那个项目到底是什么,如果他们并不了解项目,那么同事评阅的仅仅是这个人的总结,而不是被评人的实际工作。同事还会被要求评定,他们对这个具体项目的了解程度,以及被评人个人对项目的影响有多大。

9.

完成绩效评级以后,主管必须与员工进行谈话。

你不仅要告诉员工他们的表现,还应告诉他们未来如何做得更好。问题在于:如何最有效地传递这两种信息?

答案是:通过两次独立的谈话完成。

正如普拉萨德·塞迪解释的:"传统的绩效管理体系犯了一个大错。他们将两件应该彻底分开的事情合到了一起:绩效评估和人员发展。评估有其必要性,可确定加薪或奖金等有限资源的分配。发展也同样很有必要性,可以促进员工的成长与提高。"如果你希望员工成长,不要同时进行这两项谈话。确保发展成为你与团队成员之间不断往返的一个过程,而不是年底的一次惊喜。

内在动机是成长的关键,几乎所有人都渴望进步。但是,传统的绩效管理体系毁掉了这种动机。它们往往通过一个简单的评级,替代了切实管理员工的关键行动。

10.

总结。

第一,正确地设定目标。要让目标众所周知。目标要有野心。

第二,收集同事反馈意见。有一系列线上工具,至少有谷歌表格,可以用于进行调查,整理结果。每一家公司都有某种评估体系,然后以此为依据分配奖励。极少公司有完善的员工发展机制。

第三,评估应引入某种校准流程。我们倾向于经理可以坐在一起探讨的会议,作为一个团队共同审评员工。这样需要更多的时间,但评估和决策的过程更可靠、更公正。采用这样的方式,人们可以坐在一起,加强交流,巩固公司珍视的价值,有利于公司文化的发展。

第四,把奖励分配谈话与员工发展谈话分开。两项谈话混为一谈会扼杀学习的动力。

(完)

文档信息

2016年3月24日星期四

阮一峰的网络日志

阮一峰的网络日志


技术会带来社会平等吗?

Posted: 23 Mar 2016 05:45 PM PDT

(说明:本文原载《财新周刊》2016年第11期)

谷歌的围棋软件AlphaGo,战胜了世界冠军李世石九段。所有讨论文章当中,有一篇的题目起得最好:《机器人赢了围棋,取代你的职业还会远吗》。

(图片说明:世界冠军李世石苦苦思考,依然不敌计算机)

围棋这样复杂的思维游戏,机器人都能超过人类,那么世界上还有多少工作,是机器人不能干的呢?如果工作都由机器人承担了,人不就失业了吗?

AlphaGo团队只有20个人,谷歌并没有投入太多资源。它真正大力投入的人工智能项目,是无人驾驶汽车。

(图片说明:谷歌改装了一辆丰田汽车)

据报道,该项目已基本完成,目前正处在路试阶段。每天,无人驾驶汽车就在加州的公路上开来开去,测试可靠性。另有消息说,这项技术已相当可靠,推向市场的时间非常近了。

我本来不相信,机器可以开车却不发生事故。但见识了AlphaGo的强大实力以后,我对无人驾驶汽车有信心了。

(图片说明:未来的无人驾驶汽车不设置驾驶位)

真的很可能,机器驾驶汽车比人类驾驶得好。如果这项技术成功,十年以后,就没人去学开车了,驾校也会关门。终有一天,因为人类不如机器可靠,法律规定,人类不得驾驶汽车,只能由机器驾驶。如果你还想开车过过瘾,必须去专门的游乐场,就好像现在骑马只能去马场一样。

这种前景看上去很美好,但是有一个问题:如果将来都是机器驾驶,那么现在的这些司机怎么办呢?进一步说,如果将来都是机器人为人类服务,那么现在的售货员、服务员、打字员、装配工、出纳、保安......(你可以列出一大串职业),他们干什么去呢?

(图片说明:技术已经消灭了很多蓝领职位,正开始消灭白领职位

当然,新技术会创造出新的工作岗位。但是这次似乎与上一次工业革命创造出大量工厂职位不一样,信息技术革命创造出的职位,远远小于它消灭掉的职位。尤其是人工智能和大数据,它们的技术目标就是不需要人的参与!

(图片说明:教师可以被机器替代)

我们一直相信,技术会让生活更美好,但是这一次,技术似乎正在动摇人类社会的结构,将整个社会一分为二:有技术的人与没技术的人。他们之间的贫富差距正在越拉越大,人类束手无策。

如果你有技术,那么处境就会非常有利,技术将你的优势成倍放大,为你带来大量收入。那些掌握了技术的资本家,尤其如此,他们是这个世界真正的控制者。如果你没有技术,那就很不幸了,你的工作会保不住,被机器取代,然后你就长期失业,或者找到一份非常辛苦的、只能糊口的体力活("吃饭可以,享受不行")。

《华盛顿邮报》做过一个统计,1978年到2011年,美国工人的平均工资只增长了6%,CEO的平均收入增长了727%。这就是说,计算机革命出现后,穷人的收入根本不增长,而富人正变得越来越有钱。

(图片说明:技术使得财富快速向资本家集中)

这种趋势将来只会增强,不会逆转。因为它是技术造成的,而技术变革的速度一点都没有放缓。技术正在不断替代劳动力,那些被替代的人们根本没有办法得到补偿。

更可怕的是,社会流动性正在减弱。以前,穷人通过不懈的努力,完全有可能晋升到更高的社会阶层,改变自己的命运。但是,现在不行了。因为以前跟你一起竞争的,是其他的人,只要你比他们努力,就能出头;现在跟你竞争的,是软件和机器人,无论你怎么努力,都不会超过它们。

越来越多的劳动者发现,他们能得到的职位,不是因为雇主需要他们的劳动技能,而是因为人工比机器便宜。比如,造出一个会送货、会烧菜的机器人,技术可以做到,但会很贵,使用真人更便宜。所以,快递员和厨师这样的工作,将会持续地吸纳大量劳动力。但是,他们的工资很难增长,一旦成本大幅上升,机器人就会取代劳动者。

由于通过奋斗爬到社会上层的可能性越来越小,所以教育的价值也正在变小。如果不能学会机器无法替代的技能,那么读不读大学,对你将来的收入不会有太大影响。很可能不读大学,你的处境还会好一些。

(图片说明:高等教育已经不是高收入的保证了,反而可能让你背负债务)

一个收入差距越来越大、流动性僵化的社会,意味着什么?我很难想象。在经济上,持续繁荣需要购买力支持,必须让大多数人具有购买力;在政治上,不让底层看到翻身的机会,就是政治自杀。这次美国大选,传统风格的候选人都得不到支持,反倒是极端的、大肆批评现行秩序的候选人大受欢迎,可能就是这个原因,是技术变革带来的经济政治动荡的体现。

(图片说明:社会向上的阶梯已经断了)

虽说人类历史一直是等级制社会,但是工业革命以后,多多少少变成了一个"彩票社会"。如果你碰巧是那个幸运儿,抽到了命运的彩票,就能出人头地、翻转人生。这种希望虽然渺茫,但是让底层人民有了期待,愿意遵守秩序。这种希望一旦消失了,向上爬的梯子断掉了,抽中彩票的机会等于零,社会秩序也就瓦解了吧。

说来好笑,技术虽然带来了收入不平等,但也带来了前所未有的平等,主要是在享受技术成果方面。比如,普通人完全可以使用跟美国总统或世界首富一样的手机。现在人与人之间的不平等,几乎都体现在非技术方面,比如收入、地位、住宅等等。

今年下半年即将登场的VR技术(虚拟现实),更是空前的突破,只要带上头盔,就能进入一个彻底平等的虚拟世界。

(图片说明:生活在VR世界里面是完全可能的)

一个网友在推特上这样说道

"如果VR真的能模拟大多数实际生活,而且成本降到每个人负担得起,那人类就离真正的平等不远了。"

"VR技术把材料的触觉和质感的传达,提高到建材的地步,人类也就根本不需要什么实体空间了,大家一起找个床躺着,全部生活都在VR里过是最省成本的了。以后名车美女豪宅飞机都变成便宜的数据,每个人戴上头盔就能拥有的时候,人生的奋斗还有什么意义呢,人类传统社会必然就崩溃了。"

人类社会究竟走向哪里:忍受现实的不平等,还是在虚拟中重构平等?未来从来没有像现在这般扑朔迷离,令人琢磨不透。

(完)

文档信息

2016年3月21日星期一

阮一峰的网络日志

阮一峰的网络日志


《最好的告别》读后感

Posted: 20 Mar 2016 08:19 AM PDT

今天,我想介绍一本书《最好的告别:关于衰老与死亡,你必须知道的常识》(浙江人民出版社,2015)。

作者是阿图•葛文德(Atul Gawande) 。他是麻省总医院外科医生、哈佛医学院教授、白宫健康政策顾问。作为一个顶尖医生,他将自己多年的思考写成了这本书。

一、医学的现状

序言中,他提出了一个问题:面对死亡和衰老,当今医学做对了吗?

跟前人相比,我们活得更长、生命质量更好。科学进步已经把衰老和死亡,变成了医学可以干预的项目。人们不再把它们看成一种自然的结局,而是将其看成一种病,千万百计希望"治愈"它。

每一次病人医治无效去世,都好像是一种意外。媒体经常报道,某个90岁的老人跑马拉松的故事,仿佛这不是生物学上的奇迹,而是对所有人的合理期待。长生不老的幻觉大行其道。

病人、家属、医生、社会都在追求延长生命、"战胜"死亡,这是否是正确的态度呢?

二、一个癌症末期病人的故事

约瑟夫·拉扎罗夫到了癌症晚期,已无法治愈了。

医生给了他两个选择:一是姑息治疗,二是实施手术。但是,手术治不好他的病,也不能纠正肿瘤引起的瘫痪,更谈不上恢复过去的生活,只能让他多活几个月。而且,手术本身也有危险,失血量会很大,术后可能发生各种并发症、恢复起来很困难。

我尽量用委婉的语气把情况说清楚,但是,病人还是一下坐了起来。"别放弃我,"他说,"只要我还有任何机会,你们一定要让我尝试。"

他签完字后,我出了病房。他儿子跟出来,把我拉到一边说,他的母亲死在监护室里,死的时候全身插满了管子,戴着呼吸机。当时,他父亲曾经说过,他绝不想这样的情形发生在他的身上。但是,时至今日,他却坚决要求采取"一切措施"。可见一个理智的人在死亡降临的时候,还是无法舍弃求生的欲望。

结果,手术本身很成功。但是,病人身体太弱,术后一直没有恢复。

他住在监护室,并发了呼吸衰竭、系统性感染,卧床不动又导致了血栓,然后,又因治疗血栓的血液稀释剂而引起了内出血。病情每天都在恶化,最后终于不得不承认他在向死亡的深渊坠落。第十四天,他的儿子告诉医疗组,我们应该停止"治疗" 了。

作者觉得,病人选择手术,真是糟糕透顶的决定。

他的选择之所以糟糕,不是因为手术有那么多风险,而是因为,手术根本不可能给予他真正想要的东西:排便节制能力、体力,以及过去的生活方式。他冒着经受漫长而可怕的死亡的风险(这正是他最后的结局),追求的不过是一种幻想。

接着,作者问了三个问题。

  1. 是不是大多数病人为了延长生命,都会选择冒险?
  2. 除了手术,医学还有没有其他帮助?
  3. 如果说病人在追求一种幻觉,医生是否也是如此?

癌症已经扩散到全身,连恢复到几个星期前的生活状态都不可能了。为什么我们不坦然承认这点,却要给病人提供手术这种选择,还告诉他也许会有某种好的效果,而实际上只是披着新技术外衣,对他进行折磨。

三、衰老的来临

写到此处,作者笔峰一转,开始探讨死亡的前奏----衰老。每个人都会老,而且我们的社会正在迅速老龄化。

1790年的美国,65岁以上的人不到2%,今天已经上升到14%。在德国、意大利和日本,这个数字已经超过了20%。现在,中国是地球上第一个老年人超过1亿的国家。

很多老人无法维持独立、自助的生活,身体太虚弱,必须有人照顾。

一多半的高龄老年人独居无伴,而且子女数量比任何时候都少,老年病医生的人数,实际上还下降了。

需要照顾的老人,将会越来越多,社会将无法负担。唯一的办法是采取正确的措施,使得老人更长久地保持至关重要的生活能力。

四、一个养老院的故事

1991年,31岁的比尔·托马斯(Bill Thomas)接任纽约州一个养老院的医疗主任。这所养老院有80位严重失能的老人。一半老人身体残障,80%的老人患阿尔茨海默病或者其他类型的认知障碍。

初来乍到,托马斯在每间屋子里都看到了绝望。养老院让他觉得压抑,这里的居民如此缺少精神和活力。

他决定为养老院注入一些活力,尝试把植物、动物和孩子们引入居民的生活,看看情况会怎样。

他说,目标是抗击他所谓的养老院的三大瘟疫:厌倦感、孤独感和无助感。为了攻克这三大瘟疫,疗养院需要一些生命。要在每个房间里摆放植物;要拔除草坪,开创一片菜园和花园;要引入动物。

他引进了两条狗和四只猫,以及100只鸟(为了让养老院听起来有积极的生命感)。他扔掉了所有的人工植物,在每个房间都摆上了鲜活的植物。他让员工子女放学以后过来玩,朋友和家人也可以在后院的花园玩,还有供孩子们游戏的操场。

有一天凌晨3点,托马斯接到一位护士的电话。"狗在地板上拉屎,"护士说,"你要过来打扫吗?"对护士而言,这项任务不是她的份内之事,她上护士学校可不是为了打扫狗屎。

托马斯于是决定,让老人来负责照顾动物。

这一切在老人们身上的效果很快就彰显出来,无法忽视:他们苏醒了,活过来了。

"我们认为不能说话的人开始说话了,"托马斯说,"之前完全孤僻、不走动的人开始造访护士站,说'我带狗出去散步'。"所有的鸟都被居民收养了,他们给每只鸟起了名字。人们的眼里有了光亮。

托马斯总结自己的做法:我们不是在运营一个机构,而是要提供一个家。

学者研究了该项目以后,发现比起其他养老院,这所养老院的处方药数量下降了一半,死亡率下降了15%。

五、如何告别?

医学进步让人们活得更长。但人们还希望活得更健康,更舒服。

如果这两个目标发生冲突,即医学让病人活得更长的代价是不健康不舒服,我们应该怎么办?

有些病人完全没有治愈希望。我们仍然选择干预。为了延长几个月生命,不惜让病人忍受巨大痛苦。对大多数人来说,因为不治之症而在监护室度过生命的最后日子,完全是一种错误。......你躺在那里,生活局限于一张床、一张桌子、一台小小的电视机和半个房间----中间会用帘子把你和别人隔开。

你戴着呼吸机,每一个器官都已停止运转,你的心智摇摆于谵妄之间, 永远意识不到自己可能生前都无法离开这个暂借的、灯火通明的地方。大限到来之时,你连一句话都已经说不出来了。

作为病人,应该接受死亡是人生的自然结果,不应为了延长生命,听任技术摆布自己的身体。

我们把生命的余日交给治疗,结果为了一点点微不足道的好处,让这些治疗搅乱了我们的头脑、削弱了我们的身体;我们在各种机构,比如养老院和监护室,度过最后的时光。

我们一直犹犹豫豫,不肯诚实地面对衰老和垂死的窘境,本应获得的安宁缓和医疗与许多人擦肩而过,过度的技术干预反而增加了对逝者和亲属的伤害,剥夺了他们最需要的临终关怀。人们无法回避一个问题:应该如何优雅地跨越生命的终点?对此,大多数人缺少清晰的观念,而只是把命运交由医学、技术和陌生人来掌控。

作为医生,要忍住干预、修复、控制的冲动,因为死亡已经超越了医学问题。面对衰老和死亡,医学技术只是一方面,心灵的滋养、理解和安慰是急需补上的另一方面。

半个多世纪以来,我们把生病、衰老和希望的考验作为医学问题对待,而不是作为一个社会问题对待。不应该把病人的命运只交给技术,更应该交给重视和理解人类需求的人。

结尾处,作者写道了父亲的死。

他从来就明白生命的短暂以及个人的渺小。他把自己视为历史链条中的一环。我父亲帮助我们理解,他是有着几千年历史渊源的故事的一部分----我们也是。

我幸而能够听到他讲述他的愿望,听到他跟我们说再见。通过有机会做这些事,他让我们知道,他的心境安宁。这也让我们心境安宁。

(完)

文档信息

2016年3月15日星期二

阮一峰的网络日志

阮一峰的网络日志


你的B计划在哪里?

Posted: 14 Mar 2016 06:05 PM PDT

(说明:本文原载我的《财新周刊》专栏,2016年第七期)

春节同学聚会,大家聊起近况。

甲在实体经济部门工作,企业效益不好,正酝酿减员增效,他忧心忡忡,跳槽都不知道怎么跳,因为全行业都不景气。

乙从事互联网工作,行业发展热火朝天,新事物层出不穷,但是他已人到中年,技术老化,跟不上行业新陈代谢的速度,公司又实行末位淘汰制,他自觉难以与年轻求职者竞争。

谈到未来,他们都很有压力,感到不乐观,甚至苦闷。一个现实的问题是,如果现在的工作干不下去了,未来怎么办?

我正好思考过这个问题,就问他们,是否听过"B计划"这个词?军事行动至少要准备两套计划:A计划在正常情况下执行,B计划是应急计划,在A计划落空时执行。这就好比电话打到一半,突然手机没电了,要是你随身携带第二块电池,就能应急。B计划就是那备用的第二块电池。

对于人生来说,你现在的职业就是A计划,应该努力追求职业成功。但是,也要做好两手准备,万一A计划失败,还需要一个B计划,对自己的退路有所安排。

甲和乙都表示同意,各自举了一个他们眼中B计划的例子。甲的朋友计划移民,一边正常上班,一边下班后申请技术移民。他甚至想到了,去了那边以后,万一找不到工作,就去当厨师,为此周末还报名烹饪学校,要考出厨师证。乙的同事计划退居山林,打算等到公司股票上市后,开一家茶道馆修身养性,为此专门去杭州附近的山里看房子,为未来的茶馆选址。

我说,这些不算B计划。它们只是成功后的退隐计划。不是现在的工作做不下去,而是自己选择更好的出路。真正的B计划是用来救命的,是一旦现在的生活崩溃,你用来逃生的计划。B计划有点像酒店的消防通道。酒店每个房间都有《消防通道示意图》,就贴在醒目之处,唯恐你看不见。你平时坐电梯,不会去用它,只有在紧急时才走这条路。

B计划就是你的消防通道,万一人生发生火灾,你知道该往哪里走,避免乱跑乱撞,被大火困住。

本质上,B计划是人生的一种风险控制。你也许见过各种商业计划书,其中必不可少的几个章节是《备用方案》、《应急预案》、《风险控制》......如果你尝试给自己写一份人生计划书,这些章节的内容就是B计划。你可能永远不会用到这些章节,但是它们的存在,会让你的人生少一些风险,生活得更加安心。

千万不要把B计划想得很浪漫,现实往往不是如此,B计划其实非常艰苦。《纽约时报》曾经报道过,几个纽约白领的B计划。

"罗娜曾是曼哈顿的一个律师,2009年金融风暴时被事务所辞退,后来开了一家烘培店。她现在一周工作六天,每天5点半就要起床,开始烘面包。以前她处理文件,现在处理的是20磅一包的面粉。晚上关门以后,她还要抽出时间记账。得了感冒,她也不敢休息,因为承担不起小店关门的损失。"

"玛丽也曾经是律师,每周工作60小时,年薪25万美元。她辞职后,开了一家婚礼公司。为了拿到第一笔生意,她只开价2000美元,但是足足准备了五个月。折算下来,每小时的报酬不足2美元,而她当律师的收费是每小时450美元。"

就是因为B计划实施起来非常艰苦,所以你最好去做那些你喜欢的事。

制定B计划的时候,你可以问问自己,如果人生重新开始,你会选择怎样的工作? 把这个当作B计划的起点。很多人也许会从实际出发,想着如果失去现在的工作,就先在家里休息几天,然后设法在另一家公司里面找到一份类似的工作,再在新的岗位上重整旗鼓。这不算B计划,而只是A计划的延伸。你最好把B计划当成逃离A计划的一个机会,借此追求一种梦想中期望的工作。只有这样,你才有最大的动力,忍受B计划的艰苦。

一旦有了B计划,我建议,最好立刻动手做一些准备。不一定为了真的实施,但至少让它从一个很模糊的设想,变得稍微具体一点。千万不要只是想想而已,人生缺少的就是行动,只有迈出第一步,才有后面的旅程。

最后,如果真的到了下决心的那一天,你可能还需要一点勇气。B计划并不容易,但是提心吊胆地维持一份毫无乐趣、前景灰暗的工作,也是不容易的。这就是为什么,B计划要选择那些能鼓舞自己、唤起热情的工作的一个原因,这样比较容易产生勇气。

正常情况下,B计划可能不会立即带来经济上的成功,但是你可以从中获得自由、自我认同和成就感,以及从此不用忍受大公司晋升阶梯上面挤破头的压力和窒息。即使初期没有成功,你也可以借此获得转型的其他机会。最理想的情况是,你通过B计划,实现了自己真正想要的生活。美国的"家政女王"玛莎·斯图尔特,正是因为在食品店当经理被解雇了,才不得不自己开店的。

(完)

文档信息

2016年3月13日星期日

阮一峰的网络日志

阮一峰的网络日志


Node 应用的 Systemd 启动

Posted: 12 Mar 2016 05:24 AM PST

前面的文章介绍了 Systemd 的操作命令基本用法,今天给出一个实例,如何使用 Systemd 启动一个 Node 应用。

本文是独立的,不需要前面的教程作为预备知识。

一、克隆代码

首先,下载示例库

  $ git clone https://github.com/ruanyf/node-systemd-demo.git  $ cd node-systemd-demo  

示例脚本server.js非常简单,就是一个 HTTP 服务器。

  var http = require('http');    var hostname = '0.0.0.0';  var port = 5000;    http.createServer(function(req, res) {    res.writeHead(200, {'Content-Type': 'text/plain'});    res.end('Hello World');  }).listen(port, hostname, function () {    console.log('Server running at http://%s:%s/', hostname, port);  });  

二、修改配置文件

Systemd 启动上面这个脚本,需要一个配置文件node-server.service。这个文件的文件名可以随便取,但是后缀名必须是.service

  [Unit]  Description=node simple server    [Service]  ExecStart=[/path/to/node/executable] [path/to/node-systemd-demo]/server.js  Restart=always  User=[yourUserName]  Group=[yourUserGroup]  Environment=PATH=/usr/bin:/usr/local/bin  Environment=NODE_ENV=production  WorkingDirectory=[/path/to/node-systemd-demo]    [Install]  WantedBy=multi-user.target  

上面脚本里面,有五个地方出现了四个占位符。

  • [/path/to/node/executable]:node可执行文件的绝对路径
  • [path/to/node-systemd-demo]:示例库的绝对路径
  • [yourUserName]:你的用户名
  • [yourUserGroup]:你的组名

你需要将上面这四个占位符,改成自己电脑的设置。下面是一个已经改好的例子。

  [Unit]  Description=node simple server    [Service]  ExecStart=/usr/bin/node /tmp/node-systemd-demo/server.js  Restart=always  User=nobody  Group=nobody  Environment=PATH=/usr/bin:/usr/local/bin  Environment=NODE_ENV=production  WorkingDirectory=/tmp/node-systemd-demo    [Install]  WantedBy=multi-user.target  

如果你不知道这几个占位符的值,下面的命令可以帮你找出来。

  # node executable path  $ which node    # your user name  $ id -un    # your group name  $ id -gn  

三、配置文件的解释

简单解释一下,上面的配置文件的几个参数。

Unit区块的Description字段,是服务的简单描述。

Service区块的字段含义如下。

  • ExecStart:启动命令
  • Restart:如何重启。always表示如果进程退出,总是重启
  • Environment:环境变量
  • WorkingDirectory:工作目录

Install区块的WantedBy字段指定,设为开机启动时,该服务所在的 Target 是multi-user.target

四、启动服务

现在将配置文件拷贝到 Systemd 之中。

  $ sudo cp node-server.service /etc/systemd/system  

接着,就启动服务。

  # 重载配置文件  $ sudo systemctl daemon-reload    # 启动服务  $ sudo systemctl start node-server  

访问 http://0.0.0.0:5000,应该看到网页显示"Hello World"。

五、查看状态

如果启动失败,或者想查看日志,就要执行下面的命令。

  # 查看状态  $ sudo systemctl status node-server    # 查看日志  $ sudo journalctl -u node-server    # 实时输出最新日志  $ sudo journalctl --follow -u node-server  

六、重启服务和停止服务

  # 重启服务  $ sudo systemctl restart node-server    # 停止服务  $ sudo systemctl stop node-server  

如果想设为开机启动,就要执行systemctl enable

  $ sudo systemctl enable node-server  

七、Socket 激活

一般情况下,学到这里,应该就够用了。如果你还想体验一下 Systemd 的强大功能,请接着往下读。

我们知道,HTTP服务器启动在那里,终究是耗费资源的。那么能不能做到,只有有人访问时,才启动服务,否则就关闭?

这在 Systemd 里面叫做"Socket 激活"。开发者可以指定 Socket 监听的端口,系统根据有没有收到请求,自动启动或关闭服务。不难想到,只要前面加一层负载均衡器,这就等同于实现了一个简单的云服务,即根据访问量,系统自动扩容或收缩。

下面就是"Socket 激活"的Demo。

八、安装依赖

首先,请确认前面启动的 Node 服务已经被关闭了,5000 端口已经释放出来了。

然后,打开启动脚本socket-server.js,你会发现多出了两个模块:systemdautoquit

  require('systemd');  require('autoquit');    var http = require('http');    var server = http.createServer(function(req, res) {    res.writeHead(200, {'Content-Type': 'text/plain'});    res.end('Hello World');  });    server.autoQuit({ timeOut: 60 });  server.listen('systemd');    console.log('Server running at http://0.0.0.0:5000/');  

上面代码中,systemd模块用于添加"Socket 激活",autoquit模块用于指定多少时间无人访问后,关闭 Node 服务,上面脚本是60秒。另外,还有一个journald模块,用于向 Systemd 日志添加内容,这个例子中没有使用。

现在,安装依赖。

  $ npm install  

九、改写配置文件

Socket 激活需要两个配置文件。

一个是node-socket-server.socket

  [Socket]  ListenStream=5000    [Install]  WantedBy=sockets.target  

另一个是node-socket-server.service

  [Unit]  Description=node simple server (socket activation)    [Service]  ExecStart=[/path/to/node/executable] [path/to/node-systemd-demo]/socket-server.js  User=[yourUserName]  Group=[yourGroupName]  Environment=PATH=/usr/bin:/usr/local/bin  Environment=NODE_ENV=production  WorkingDirectory=[/path/to/node-systemd-demo]  

上面这个文件需要改写占位符。可以看到,由于不是开机启动,配置文件里面没有Install区块;由于不需要重启,也没有Restart字段。

改写后,将它们拷贝到 Systemd。

  $ sudo cp node-socket-server.socket /etc/systemd/system  $ sudo cp node-socket-server.service /etc/systemd/system  

十、启动 Socket 激活

然后,执行下面两个命令,启动 Socket 激活。

  $ sudo systemctl daemon-reload  $ sudo systemctl start node-socket-server.socket  

这个时候,检查一下状态。

  $ sudo systemctl status node-socket-server.socket  ● node-socket-server.socket     Loaded: loaded (/etc/systemd/system/node-socket-server.socket; disabled)     Active: active (listening) since 2016-03-10 20:36:41 CST; 7s ago     Listen: [::]:5000 (Stream)    $ sudo systemctl status node-socket-server.service  ● node-socket-server.service - node simple server (socket activation)        Loaded: loaded (/etc/systemd/system/node-socket-server.service; disabled)        Active: inactive (dead)  

可以看到,node-socket-server.socket是激活的(active),而node-socket-server.service没有(inactive)。

这时访问 http://0.0.0.0:5000 ,会发现网页可以正常访问。

然后,再检查一下状态。

  $ sudo systemctl status node-socket-server.socket  ● node-socket-server.socket     Loaded: loaded (/etc/systemd/system/node-socket-server.socket; disabled)     Active: active (running) since 2016-03-10 20:36:41 CST; 1min 20s ago     Listen: [::]:5000 (Stream)    $ sudo systemctl status node-socket-server.service  ● node-socket-server.service - node simple server (socket activation)     Loaded: loaded (/etc/systemd/system/node-socket-server.service; disabled)     Active: active (running) since 2016-03-10 20:37:55 CST; 3min 11s ago   Main PID: 1084 (node)     CGroup: /system.slice/node-socket-server.service             └─1084 node /home/ruanyf/project/node-systemd-demo/socket-server.js  

这时,socketservice都激活了。

十一、停止服务

此时,如果手动停止 HTTP 服务器,Systemd 会发出一个警告。

  $ sudo systemctl stop node-socket-server.service  Warning: Stopping node-socket-server.service, but it can still be activated by:    node-socket-server.socket  

上面的警告表示,Socket 依然是激活的,因此服务随时可能被重启,所以还需要关闭 Socket 激活。

  $ sudo systemctl stop node-socket-server.socket  

十二、参考链接

(完)

文档信息