IT面试最难的科技公司分享 | 实例化DevOps原则

IT面试哪家难?非死不可把头点!

谷歌瘪嘴笑开颜,思特沃克耸耸肩~

科技博客Business Insider撰稿人朱莉·波特(Julie Bort)上周五依据美国雇主评价网站Glassdoor.com提供的数据,评选出十大入职面试最难的科技公司。令人颇感意外的是,科技公司入职面试最难的并不是传说中的谷歌面试,而是软件开发顾问公司ThoughtWorks。

排行榜如下:

第一:ThoughtWorks

第二:谷歌(将会有多轮面试,内容涉及智商测试、随即数学问题等)

第三:Unisys(将会有多轮面试,设计多位面试官,整个面试过程长达数周)

第四:Rackspace(可能会问道一个非常复杂的技术问题)

第五:Cypress Semiconductor(应聘者需要通过四轮面试来证明其技能)

第六:bazaarvoice(将会有一场非常困难的面试)

第七:Juniper Networks(将会与面试官进行多轮面试)

第八:Sapient(多轮技术面试,涉及一场笔测)

第九:Facebook(在技术测试中可能包括现场设计产品等)

第十:亚马逊(多轮面试,有些可能会持续一整天)

(资料来源于腾讯科技http://tech.qq.com/a/20120901/000043.htm)

扫我关注

骚窝


ThoughtWorks官方认证公众号

伍斌

伍斌_Ben,ThoughtWorks软件开发咨询师。潜心进行软件开发技术的操练与悟道。因经常办技术操练道场,人称“道长”。著有《驯服烂代码》。自1993年大学毕业以来,先后做过程序员、测试工程师、项目经理和软件开发咨询师。2013年4月创办全栈开发者的编程操练社区“bjdp.org北京设计模式学习组”。微信公众号bjdp_org。

【摘要】

  • DevOps原则所追求的愿景,就是“让业务所要求的那些变化能随时上线可用”;
  • DevOps的起源表明,其原则是从Agile与Lean的实践当中提炼而来,因此与Agile和Lean的原则并无二致;
  • 本文所讨论的DevOps原则可以用“人、产品、流程和工具”这4个维度来进行组织。


【正文】

“你在做用户故事拆分?这不是在做DevOps。”这是笔者在2016年以咨询师的身份,参与一家大型跨国金融企业的Agile和DevOps转型时所听到的话。在这家企业,Agile和DevOps明显指的是不同的东西:前者专指每日站会、计划会、回顾会等Scrum的实践和用户故事实践;后者专指自动化、工具链和基础设施等实践。过了一段时间,笔者把本文所列举的一些DevOps原则发到一个相关微信群里面,得到了这样的反馈:“怎么满眼都是敏捷和精益?”“感觉DevOps被一群不操作Op的人给玩儿坏了。”

这些经历让笔者开始关心这些问题:既然Dev指的是“开发”,Ops指的是“运维”,那么到底什么是DevOps?它的原则是什么?它和敏捷、精益的关系是什么?让我们先观察一下DevOps的起源[1][2]。

DevOps的起源可以分为两条线

第一条线是:比利时独立咨询师Patrick Debois

2007年他在比利以咨询师的身份,参与了一个政府数据中心迁移中的测试工作。他在做测试时,需要频繁往返于Dev团队和Ops团队之间。Dev团队已经实践了敏捷,而Ops团队还是传统运维的工作方式。看到Ops团队每天忙于救火和疲于奔命的状态,他在想:能否把敏捷的实践引入Ops团队呢?

第二条线是:当时雅虎旗下的图片分享网站Flickr

这家公司的运维部门经理John Allspaw和工程师Paul Hammond,于2009年6月23日在美国圣荷西举办的Velocity 2009大会上,发表了一个引燃DevOps的演讲。这个演讲的题目在当时很抢眼--《每天部署10次以上:Flickr公司的Dev与Ops的合作》[3]。

这个演讲有一个核心议题:Dev和Ops的目标到底是不是冲突?传统观念认为Dev和Ops的目标是有冲突的——Dev的工作是添加新特性,而Ops的工作是保持系统运行的稳定和快速;而Dev在添加新特性时所带来的代码变化,会导致系统运行不稳定和变慢,从而引发Dev与Ops的冲突。然而从全局来看,Dev和Ops的目标是一致的,即都是“让业务所要求的那些变化能随时上线可用”。

这样抢眼的题目和鲜明的观点,自然抓住了当时还在比利时的Debois。他在“推特”上发帖:“可惜没法去现场参加。”朋友Paul Nasrat回帖说:“为什么不在比利时搞一个你自己的Velocity大会?”这两条线使得Debois撸起袖子,于2009年10月30至31日,在比利时的第二大城市根特,以社区自发的形式举办了一个名为DevOpsDays的大会。这次大会吸引了不少开发者、系统管理员和软件工具程序员。这两天大家聊得太开心了,会议结束还不过瘾,回去继续在“推特”上聊。限于推特140个字符的制约,Debois把DevOpsDays中的Days去掉,而创建了#DevOps#这个“推特”聊天主题标签,DevOps诞生了。

Flickr公司的两位演讲者所表达的“Dev和Ops的共同目标是让业务所要求的那些变化能随时上线可用”这一观点,其实就是DevOps的愿景。而要达到这一点,可以使用一个现成的工具:精益。源自丰田生产方式的“精益”的愿景就是“Shortest lead time”,即用最短的时间来完成从客户下订单到收到货物的全过程。这恰好能帮助实现DevOps的上述愿景。《持续交付》的作者之一Jez Humble也体会出精益在DevOps中的重要性,以至于他把DevOps的CAMS框架修订为CALMS[4],其中增加的L指的就是Lean(精益),这一点下文还会提及。

从上面DevOps的起源中能够看出三点:

  1. DevOps源自草根社区,最初并没有什么自上而下设计出来的理论框架;
  2. DevOps背后的原则,就是上面两条线中所涉及的敏捷和精益的原则;
  3. DevOps的愿景是让业务所要求的那些变化能随时上线可用。

一旦了解了上面第2点,就不会有前文中所说的“Agile和DevOps是不同的东西”和“感觉DevOps被一群不操作Op的人给玩儿坏了”这样的说法。

因为DevOps源自草根,没有什么框架,所以如何定义DevOps成了DevOps社区里面的一个大难题[5]。一些DevOps从业者,纷纷设定自己的DevOps框架。其中比较有名的框架有上文提到的Damon Edwards所定义并被Jez Humble所修订的CALMS,和Gene Kim所定义的The Three Ways[6]

CALMS:

  • Culture – 文化:公司各个角色一起担当业务变化,实现有效协作和沟通;
  • Automation – 自动化:在价值链中尽量除去手工步骤;
  • Lean – 精益:运用精益原则更频繁地交付价值;
  • Metrics – 度量:度量并使用数据来优化交付周期;
  • Sharing – 分享:分享成功和失败的经验来相互学习。

The Three Ways:

  • The First Way: System Thinking (系统思考:强调全局优化,避免局部优化);
  • The Second Way: Amplify Feedback Loops (经过放大的反馈回路:创建从开发过程下游至上游的反馈环);
  • The Third Way: Culture of Continual Experimentation And Learning(持续做试验和学习的文化:持续做试验,承担风险、从失败中学习;通过反复实践来达到精通)。

(图片来自:http://t.cn/RijRjYS)

本文试着从“人、产品、流程和工具”4个维度,来梳理DevOps的一些原则。为什么会有这4个维度?

先看前三个维度:“人”、“产品”和“流程”。在一百多年前的工业经济时代,由于物质匮乏,所以当时占主导地位的泰勒科学管理理论将“流程”这个维度放到了第一位,让企业首先通过标准化的“流程”达到规模化的制造能力,来满足供不应求的市场。市场上可购买的商品少,人们对“产品”的质量、设计也就不介意了,所以“产品”排在了第二位。而标准化的流程把工人的素质标准降到了最低,只要带着一双手来,在流水线上重复一个动作就好了,不需要动脑子,因此“人”排在了最后的位置。

一百年后,工业经济霸主的地位已被知识经济所取代。在具有知识密集特点的敏捷软件开发的上下文中,这三个维度的顺序颠倒了:“人”的优先级最高,因为只有依靠“人”的创造力才能应对多变的业务需求;给用户提供价值的“产品”依旧排第二位,因为这是企业赖以生存的根基;而“流程”可以为了“人”来高效地实现“产品”而进行定制,所以优先级最低。而强调自动化的DevOps离不开好用的“工具”,“工具”又可以依据流程来定制,因而可以补在“流程”的后面。

(图片来自:http://t.cn/RijRMrp)

下面所描述的DevOps原则,来源于敏捷、精益和DevOps的一些具体实践。虽然没有涵盖DevOps的所有实践,但已经包括笔者最近一年在DevOps的实践中所感悟的主要内容,而且今后会继续完善。

一般的文章对于“原则”的阐述都比较抽象,有点像上面提到的CALMS和The Three Ways这两个框架的定义方式那样——仅仅把几个名词或短语放到那里。对于不熟悉Agile、Lean和DevOps的人来说,看了上述框架还是不知道DevOps到底是做啥的。

为了让DevOps原则的描述更加具体生动,笔者参考敏捷宣言的写法和实例化需求的做法(即用具体的实际例子来编写验收条件),使用了“高于”和“而非”的句式来对比两个具体实践的实例,且尽量用一些具体的实践来代表相应的原则,如“部署流水线”等。其中,“高于”表示右边的实践虽然不如左边的好,但还是有价值的。“而非”表示右边的实践并不值得推荐。这就是本文标题中“实例化”的由来。

1. 人

领导者身体力行持续改进 高于 关注工具和基础设施

很多企业(包括笔者所辅导的企业)都在实践DevOps。要想让DevOps这颗树苗茁壮成长,企业要为其提供一个良好的土壤——即企业文化。而企业文化,是企业领导者引导塑造的。DevOps对于国内大部分企业来说,都是一个前所未有的新事物。必须通过不断做试验,才能找到培育它生长的土壤方,做试验就是为持续改进做准备。笔者所辅导的企业,工程师被项目进度压得喘不过气来,根本没有时间学习新工具和新方法,更别提做试验了。

(图片来自:http://www.yes123.com.tw/)

所以只有领导者身体力行,不仅自己亲自做试验和进行持续改进,并给工程师足够的时间来做试验和持续改进,这样所创造出良好的环境,才能让那些自动化工具和基础设施在企业内部得到有效利用。

试验并改进流程 而非 指责人的过失

丰田公司有一句口号:“对流程苛,对人员柔”,意思是说:每位员工都会尽力做好工作的,那些在工作中所出现的问题都是流程的问题。因为根据这种有问题的流程来工作,无论是谁都会出同样的问题。前面说过,DevOps对于国内大部分企业都是新事物,需要做试验来“摸着石头过河”,做试验就有失败的时候,此时就要调整流程,而不是怪罪于人,否则企业没有人会去继续尝试DevOps。

产品思维 高于 项目思维

根据这一个原则可以定义“人”的组织结构——团队结构,即可以按照产品而不是项目来组建团队。这样的产品团队包括了Dev、Ops、BA、Tester、PO和Architect等各种角色,他们相互配合且不依靠团队以外的其他角色就能独立自主地交付软件产品,这个产品团队负责该产品从生到死的全生命周期,并且只要产品还在,这个团队就不会解散。这种设置会让团队的不同角色目标一致,比起从目标不一致的各种职能团队(比如Dev团队、Tester团队和BA团队)抽调人员拼凑成临时的项目团队,磨合期更短,更加有战斗力。

2. 产品

质量和安全内建 而非 晚期度量和检查

产品需要质量和安全来保证价值。人们长期认为“高质量”意味着“高成本”,因为要维护高质量,需要在产品出厂前做大批量检测,并销毁那些次品,这就花费了高昂的成本。但丰田公司却说“高质量是免费的”[7]。这是怎么做到的呢?这其实就是前文提到的丰田公司“对流程苛”的结果。丰田公司通过持续改进流程,“一次就根据最佳流程或实践把事情做对,并持续改进这些流程和实践,使其一直保持最佳”,这样就能在脱离后期大规模检查的情况下保证高质量,同时其成本也趋近于零。

客户反馈 高于 按期交付

产品是否实现了价值,只有通过客户的反馈才能知道。很多团队往往过分关注交付期限,而忽视客户反馈。这样做的后果,就是虽然按期交付,但是产品却不是客户所期望的,造成返工或项目失败。

基于不可变容器的微服务 高于 单块应用

产品需要能快速地开发、测试和部署才能有效地交付价值。对于复杂度高的大型产品,如果可以由多个微服务组合而成,每个微服务都能独立地开发、测试、部署和上线。这比起必须集成各个模块才能进行手工测试的单块应用来说,更能实现各个微服务之间的并行研发,加快每个微服务的开发下游至上游的反馈环的反馈速度,进而缩短项目进度,让价值交付得更快。不可变容器指的是软件产品被封装到一个类似docker这样的容器内上线,且上线后不可手工修改其配置。如果一定要修改,也只能通过部署流水线把要修改的内容重新打包成另一个新的不可变容器来上线。这样做的好处是能够实现部署和发布自动化以及进行更好的版本控制,消除线上手工配置所带来的无法审计的风险。这一实践是本文写作时期的推荐实践,该实践今后还会继续演进。

3. 流程

管理层实践Improvement Kata和Coaching Kata进行流程持续改进 高于 用结果导向进行管理

佛家说:“菩萨畏因,众生畏果”。传统按结果导向进行管理的一个弊病,就是团队成员会把注意力放到结果上,而不是产生这样结果的原因——即过程改进之上。这样的后果就是,大家会把精力放到如何让报表好看,而不是真正地提高团队成员的持续改进能力来真正达到所期望的结果。企业管理层可以参考《丰田套路》[8]一书来带头实践Improvement Kata和Coaching Kata,让企业产生持续改进的文化。其中,Improvement Kata是通过一系列“确定目标—>考察现状—>识别困难—>制定方案—>观察成效”的PDCA反馈环来做持续改进;Coaching Kata是通过导师“一对一带学徒”的方式来让企业全员掌握持续改进的方法。

全局优化 而非 局部优化

由于大部分按职能组织团队的企业内部都存在部门割据的问题,导致大家都在做本职能部门内的局部优化,而没人做部门间的整体优化。有些部门间的扯皮时间甚至长达数月,严重影响了产品的交付。这提醒我们,全局优化来提高企业整体竞争力,才是各个部门赖以生存的保障。

单件流 高于 库存

单件流指的是,正在制作的产品的各个模块,能从最初的对其增加价值的加工步骤,直接传递到下一个增值加工步骤进行加工,并最终被传递到客户手中,在这个过程中,各个步骤之间没有发生等待或者排队的现象。而如果在各个步骤的传递过程中发生了等待或排队,那就等同于建立了库存。

软件开发中常见的库存包括排队等候开发的需求、排队等候测试的代码、排队等待修复的缺陷和排队等待上线的产品特性;隐藏很深的库存可能由诸如那些有固定期限(比如每月一次)的“用户验收测试”的流程造成——月初几天就开发测试完毕的产品特性必须要被存放近一个月,等到月底“用户验收测试”后才能继续往下游走。软件开发中的上述库存就是让项目延期的最大原因。而企业如果能做到单件流,那么就相当于消灭了库存,让价值在不同环节之间流动得最快,进而实现了前文所提到的全局优化。

4. 工具

自动化 高于 手工

按照固定流程所进行的手工工作,比如手工回归测试和手工部署工作,无趣、缓慢且无法审计。如果能将其代码化,且用版本控制系统管理起来,并加以自动化,这既能节省以后手工运行的大量时间,又能体验到开发测试和部署脚本工作的乐趣。

基础设施及代码 高于 手工配置

传统Ops的部署工作有些需要用鼠标在界面上点来点去,效率很低;效率高一些的Ops用了自动化脚本,但很多脚本都没有进行版本控制,更别提针对脚本的自动化测试了。 如果能够将基础设施的维护工作都通过编写代码并加以版本控制来完成,那么会带来很多好处,比如Ops可以不用通过访问生产环境,就能知道生产环境上的配置情况;非运维人员如Dev,就有机会去学习这些运维配置代码并且加以修改,提升整个团队的DevOps能力;另外工具能方便地读取这些代码,来自动化地维护基层设施,大幅度提升Ops的工作效率。

部署流水线 而非 每日构建

程序员每天都会用代码提交来为软件系统增加价值。而如何有效地保证每次提交的代码质量过关而不会有损现有系统的价值呢?这就需要一个代码构建系统自动地验证代码在编译、测试和打包等工作的过程中,是否符合质量要求。有些团队还在每晚做一次代码构建,这个昔日的“最佳”实践如今已经不再被推荐。一个团队程序员们每天代码的提交会有很多,如果晚上构建发现了错误,第二天从这些众多提交中发现谁导致的错误,将是一个很困难的事情。推荐的做法是每一次代码提交,都能自动触发部署流水线来检查该提交是否通过了自动化单元、验收和性能等测试。一旦发现问题,就能轻松定位是谁在哪个环节出现了什么问题。

总结

DevOps的原则来自从业者们在日常工作中运用敏捷、精益原则的具体实践。这些原则可以按照“人、产品、流程和工具”4个维度来组织。这些原则和实践的目的,都是要实现DevOps的愿景——让业务所要求的那些变化能随时上线可用。

下图是本文实例化DevOps原则的一个可视化总结。

感谢笔者在ThoughtWorks的同事Patrick B. Sarnacke、顾宇、马博文、黄博文、蔡同、万金、张凯峰、周文晔和亢江妹。他们在阅读了初稿后,给笔者提出了精彩的反馈,使得本文得以改进。

后记:

在本文所讨论的上下文中,原则(Principle)指的是主观的“影响行为的坚定信念”(a moral rule or a strong belief that influences your actions),而不是客观的”自然法则“(a general or scientific law that explains how sth works or why sth happens)。括号中的英文来自《牛津高阶英语词典》第8版对Principle一词的解释。所以本文所讨论的“原则(Principles)”和“价值观(Values, beliefs about what is right and wrong and what is important in life)”这两个概念在内涵上是一致的,都是主观的。

在本文发布前的ThoughtWorks内部审阅期间,笔者的同事顾宇就已经提出了同样的问题,“我看到‘高于’就想到敏捷宣言,敏捷宣言是个价值观,就是对价值的取舍。能否把本文改叫DevOps价值观?” 我当时查到了一篇文章《What is the difference between a value and a principle?》,得到的结论是“Principles是客观的,比如重力这样的自然法则;而Values是主观的”。于是就着手开始把文中的“原则(Principle)”改为“价值观(Value)”。但是改到一半时,发现人们也会说“精益的原则”(PRINCIPLES OF LEAN),而一般不说“精益的价值观”(The values of Lean)。于是再查《牛津高阶英语词典》,发现Principle这个词有上述主观和客观的两个含义。于是就决定使用Principle的主观的含义。

来源:中生代技术

原文链接

时间: 2024-07-31 01:30:31

IT面试最难的科技公司分享 | 实例化DevOps原则的相关文章

十大入职面试最难的科技公司:谷歌位居第二

十大入职面试最难的科技公司上周,科技博客Business Insider撰稿人朱莉·波特(Julie Bort)依据美国雇主评价网站Glassdoor.com提供的数据,评选出十大入职面试最难的科技公司.令人颇感意外的是,科技公司入职面试最难的并不是传说中的谷歌(微博)面试,而是软件开发顾问公司Thoughtworks.Thoughtworks总部位于美国芝加哥,拥有1800名员工.根据面试者称,这家公司的面试程序包括了测试.代码练习.技术面谈以及伦理面谈.所有的面试程序需要一周时间才能够完成.

十大入职面试最难公司:谷歌第二

   上周,科技博客Business Insider撰稿人朱莉.波特(Julie Bort)依据美国雇主评价网站Glassdoor.com提供的数据,评选出十大入职面试最难的科技公司.令人颇感意外的是,科技公司入职面试最难的并不是传说中的谷歌面试,而是软件开发顾问公司Thoughtworks.Thoughtworks总部位于美国芝加哥,拥有1800名员工.根据面试者称,这家公司的面试程序包括了测试.代码练习.技术面谈以及伦理面谈.所有的面试程序需要一周时间才能够完成.举例来说,面试考官会提出"如

麻烦不断的国外科技公司排行榜:苹果惨上榜

最近一段时间,都有哪些科技公司麻烦不断?在下面这个榜单中,看看有没有你想到的那个? 第一名:雅虎干啥啥不成 雅虎也是一家蛮神奇的公司,它算是互联网公司中的元老级公司了,在门户时代,雅虎很威风,然而在互联网的世界里,风口说变就变,门户的风口吹过去了,而雅虎却一直没能转型成功,它做过搜索引擎.做过电商.收购过社交平台,这些都是当下的大热门呐,可是没有一项能够做起来的,可能因为这家公司本质上就不具备某些业务的基因,不够专业和创新,而那些领域的巨头们正当壮年发展红火,和它们抢饭吃太难了. 入选原因:亏损

值得员工加盟的25家科技公司

美国科技博客SAI近日列出了2011年能够值得员工为其工作的前25家科技公司,其中Google位列第5,而苹果则位列第16.相关情况如下: 第1位:Guidewire 公司评级:4.4: 员工对CEO的认可率:100% 公司概况:Guidewire公司首席执行官(CEO)是马库斯·鲁(Marcus Ryu).该公司具有大量的天才员工和非常聪明的工程师,这些员工与上级管理层并肩作战,因此优秀的员工也很快能够得到提升.Guidewire公司拥有稳定的现金流,而且还向新员工提供限制性股票(RSU),如

奇点大学最年轻教职工、三家科技公司创始人,他如何用AI探索放射学里的人与机器

总部位于美国旧金山的新兴企业 Enlitic 创立于2014年,种子轮获得了200万美元融资.2015年10月,澳大利亚的医疗图像诊断服务公司 Capitol Health 宣布采用 Enlitic 的恶性肿瘤检出系统系统.这是 Enlitic 公司的系统首次被采用.同时, Capitol Health 对 Enlitic 出资1000万美元. 雷锋网(公众号:雷锋网)了解到, Enlitic 公司是一家深度学习的公司,致力于革新诊断性医疗. Enlitic 的人工智能算法由多学科.国际知名数据

维基解密爆料CIA监控技术 科技公司如何接招

据美国媒体报道,维基解密(WikiLeaks)8日公布了大量据称来自美国中央情报局(CIA)的文件,文件描述了CIA入侵计算机和iPhone等其他设备的能力.科技公司纷纷开始对维基解密公布的8,761份文件所造成的损失展开评估. 维基解密称这些文件显示,CIA利用手机.路由器甚至可联网电视机中的漏洞来支持其间谍活动.维基解密表示,这些文件揭示了CIA隐秘黑客计划的范围. CIA的一位发言人不愿证实所泄漏文件的真实性,对有关此次泄漏事件的调查情况也不予置评,但他对维基解密的做法进行了批评. 据知情

那些年,被 3.15 点名的科技公司,你们还好吗?

今天又是一年一度的 3.15 消费者权益日,谁会中枪成为人们最关注的话题.先来回顾下 2010-2015年 间都有哪些科技公司上榜,最后我们再顺便预测下今晚的情况. 2015年 中国联通利用消费者身份信息卡开,移动和铁通被指诈骗电话推手 三大运营商之一的中国联通被点名,其被指偷偷利用消费者身份信息开卡,并将卡卖给卡贩子.节目中讲到,中国联通常德市分公司为完成开卡任务,偷偷利用消费者留下的身份信息,再次重复激活开卡(一身份证可开五张卡),并将手机卡卖给卡贩子,之后又流向诈骗犯. 央视还在节目中称,

那些科技公司员工人均价值是多少

政治家曾说过:"观点斗争是假的,线路斗争是假的,只有利益斗争才是真的."那些企业不管是进行专利角逐,还是扣压垄断的帽子,都是"利益"二字的驱使.对此,针对这个情况我,我们来盘点下这一年挣钱最多的是哪家企业?哪家公司的人均创造价值又是最高的? 先从国外的分类开始:五强 第一名:苹果 相信这个答案并不会让很多人感到意外.尽管在库克的"英明"领导下,苹果经历了股价持续下跌.高层大换血.iOS地图被吐槽.产品被指没有创新等一系列动荡,声望达到了历史最低点

薪水最高的美国实习生科技公司

最近一段时间,国外科技网站BusinessInsider对实习生薪水最高的20家美国科技公司进行了盘点,其中VMWare.Facebook.微软分列前三甲,接下来让我们一起来看看这些令人艳羡的公司. 以下为文章主要内容: 假如在知名科技公司里实习,你赚到的比美国公民平均工资可能还还要多.比如Facebook为实习生提供的月均工资达6056美元,一年就是7.2万美元左右.但是还有一家科技公司的实习生工资比Facebook还要高. 美国在线职业互动网站Glassdoor帮助BusinessInsid