硅谷之谜工程师等级(硅谷工程师爸爸)
硅谷之谜工程师等级考试是美国硅谷最权威的技术人才认证考试,被誉为“硅谷之谜”。该考试分为初级、中级和高级三个等级,通过率仅为10%左右。而且,每年只有不到10%的人能拿到证书。这也意味着,如果你想进入硅谷工作,必须通过这个考试。如果你没有通过考试,你将无法获得工作许可证。,许多人认为这是一个非常严格的考试。,在美国,有一个人可以免考,他就是特斯拉公司的创始人马斯克。
互联网公司讲“基因”,就如同革命队伍讲“传统”,许多创业公司在成长期取得一定成就之时,都传承了创业伊始的热情与敏捷思维,但与此,也或多或少开始暴露出管理体系、沟通机制上的问题。
为了提高创业公司团队工作效率,乾元资本所孵化企业“天天智电”CTO、前IBM高级工程师程超从多个维度为读者分享了如何开发优秀的产品,以及如何成为合格的工程师。
程超,曾任国际商业机器公司(IBM)高级研发工程师,现任乾元资本所孵化企业“天天智电”CTO,拥有北京航空航天大学计算机科学学士学位、软件开发管理计算机科学硕士学位。其具有架构和设计大型计算机软件工程系统、领导和管理软件研发团队的经验及大型商业数据库相关经验。曾合伙创立尚良科技集团并在不同阶段担任技术总监、首席技术官、CEO多个重要职位,并先后创立并领导开发了核桃实验室、琢么网、灯鹭网、风信子内控审计系统、伞融网金融资产交易分仓系统、环保及道路工程领域的智能运维巡检系统等多个互联网产品及软件系统。程超专注研究计算机工程中的软件开发过程管理,对敏捷开发的互联网思维具有深刻的认识和实践经验,对于互联网思维在创业公司的管理中的应用更拥有丰富的实践经验。
以下内容为程超发言精选
今天讲的两个重要的标题,分别是如何开发优秀的产品,以及如何成为合格的工程师。
我们讲一下计算机科学与计算机工程的分别什么是计算机科学,计算机科学是学校里、象牙塔里的东西。计算机工程是工业界,是你从一个学校到一个公司,应该掌握和学习的东西。计算机工程包含什么呢?从产品设计开始到架构设计,到质量保证和发布,包含了一个软件开发整个周期里所有的东西。编码这个事儿本身和编码的相关知识在工作里也就占到成为合格工程师的20-30%精力,只有把计算机工程的知识都了解了才能成为一个合格工程师。大家都明白这些概念吗?比如说,配置管理是软件开发成果的仓库。针对不同的环节和工种是不一样的,比如代码库、测试用例、文档管理等都是不同开发环节的配置管理。配置管理其实是计算机工程的基础,一会儿要讲的很多的东西都是以配置管理为核心的。
所以存在一个从计算机科学到计算机工程的转变。大家从学校里出来到一家公司,你可能觉得写代码就是一切,其实并不是这样。今天我要给大家讲的,就是开始这样的一个转变—需要建立一个很好的工程意识、开始工程实践,帮助你们成为更好的工程师、开发更好的产品。这个过程是需要1-2年的实践,你需要使用和实践才能理解很多其中含义。计算机科学需要积累,计算机工程可以从实践中学习。计算机科学中的很多课程,可能有些程序员没有学过或者没有好好学,你可能以为学习了类似“操作系统”这样的基础课程,但你一辈子都不会去写一个操作系统,操作系统课程包含了进程、线程、进程间通讯这些知识基础,如果你没有受到过系统训练,之后写多线程应用时就可能会采坑。
如何成为一个更好的工程师?大家可以想一下自己认为的什么叫作一个好的工程师。吴军博士之前在谷歌工作,回国后担任腾讯副总裁,近年应该在做投资,他写了一本书叫《硅谷之谜》,他在书里把硅谷的工程师分成了五个层次。每个层次的工程师都有不同的特点,上升要付出不同的努力。我们的团队里,不管是产品、研发、测试,无论是你是否写代码,你都可以被分类到这些工程师的类别里。第五级工程师,入门门槛,要求你能够独立设计和实现一项功能。例如你是研发人员,一个产品人员把需求给到你,你可以不需要别人告诉你步骤,你就能够去实现写个功能。在这个工程中你需要做一些模块设计、单元测试等。(如果你无法做到这个基本,那么你还不算是一名工程师) 。第四级工程师的要求是能够领导和负责产品。如果想达到第四级,你需要有产品思维和头脑,你要知道你将要做出来的结果是一个什么样的。这里讲的是一个“onership”,就是责任心。
如果你想成为一个产品的负责人,你至少需要是一个第四级工程师。根据吴军博士所写,这需要再工业界的优秀的团队里锻炼3-4年。第三级工程师是能够做出行业里最好产品的工程师。这个非常感性的标准,有点模糊,是相对的。能否成为一个合格的第三级的工程师是需要一些运气的。在硅谷或许需要5-6级积累,在国内甚至需要10年以上坚持工程师身份。在国内,第二级和第一级工程师几乎很少,这和硅谷是很不一样的。第二级的工程师的概念叫做“给世界带来惊喜”,苹果的创始人Steve Jobs和Wozniak就是这样的第二级的伟大工程师。他改变了电脑、动画、音乐、手机等产业。他从创立苹果到去世,是不写代码的。他是一个懂工程的、有热情的产品,所以世上没有人会否认,Steve Jobs是一个伟大的工程师。第一级的工程师呢,我们这辈子可能都不一定能够见到一个。他们能够开创一个全新的行业,就像爱迪生开创电器行业、福特开创汽车行业,诺伊斯开创半导体行业这样的。通过这个分类其实是为了给大家传递一个概念,什么叫作一名好的工程师?我们这辈子如果能够达到一个第三级的工程师就是很好的成就和目标了,我们需要自己给自己设立这样的一个目标,让自己在工程实践中不断提升自己,达到目标。作为一个互联网基因的公司,我们每位小伙伴、工程师,才是公司最重要的资产。每人的能力提升了,公司的价值才能够得到提升。
中国的很多互联网、软件公司,都是缺乏工程师文化的。中国不少团队自己搞得的很多都是一些边边角角的东西,很多都是拿Facebook, Google等的开源的东西去搭出来的。缺少高等级工程师和以高等级工程师为核心的自主创新,也导致了我们在芯片等行业受制于人。中国目前的经济发展带来了资本和互联网的虚假繁荣,很多快餐式的创业和to VC的模式层出不穷。随着中国经济增速放缓,我们知道有些东西必将不会长久,烧钱的模式必将不会长久。未来对高级别的工程师的需求会越来越大。
软件项目有一个项目三角,互相制约,此消彼长。比如,成果固定的情况下,需要进度快,那么成本就需要增加,需要增加工程师。这是一个相互制约的过程。我们现在还是一个初创团队,那么成本是我们的最大的制约项。我们和BAT是不一样的,对于BAT来说,功能和质量(即成果)是最重要的,因为他们面临的挑战和竞争是我们无法想象的,而进度可以相对容易的通过增加成本解决。而对于初创团队,最重要的就是“降低成本”,我们说的降低成本不是给大家克扣工资,而是说减少不必要的成本。我们今天要讲的就是各种如何帮助大家降低各种不必要成本的方式方法和工具、理论。这个三角非常重要的一个功能就是,大家达成共识这个三角是真实、客观存在的,讨论才能进行,这是避免团队内部产生矛盾互相大家的基础共识。非常重要。这一点上,我们的团队,还是决策层,都要牢记于心。
软件开发过程,为什么要制定这个流程呢?规模以上的软件开发不是个人单兵作战就可以做了。软件开发过程的作用是标准化,就是任何一个人来加入,都可以达成共识。减少沟通成本、减少沟通中的误解。希望大家能够理解开发流程、环节、理解每个环节每个人要做什么事,这样才能最大程度的降低沟通成本,提高执行力。不知道大家是否都在大公司工作过,我想说的是,很多大的公司的开发流程未必是好的。很多大的公司真的是不缺钱,所以他们没有动力和必要去降低在软件开发过程中的成本,而是去优化其他东西。所以很多大公司出来的人未必会对软件开发过程中的优化和精细化很懂。
在硅谷的很多互联网公司都会有这么一个关键角色叫做Director/VP of Engineering. 国内我很少见到有公司设立这个角色。所以大家可以多注意一些国外的过程改进分享案例。国内很多企业分享的更多是一些技术,什么人工智能啊大数据之类的技术。
在软件开发过程中每个人要知道自己的角色和定义。工程界和科学界有不同的一点,是工程界更讲究最佳实践,通过实践反馈去持续改进过程,并不一定能够研究清楚为什么和原理,这是很正常的。
刚才的瀑布模型是一个很传统的老掉牙的流程了,很少有人在用。所以并不是我想要讲的。现在更多推崇的是一个叫做“敏捷开发-迭代”的开发过程,这个是我要讲的。敏捷开发是以功能为中心的,每一个功能开发完成之后就马上有成果、可验证。互联网开发要求需要敏捷。
今天要讲的最最最重要的两个概念,叫做“持续集成”和“自动化”。如果一个互联网公司号称自己做敏捷开发,他的开发流程中并不包括这两个关键,那么你可以从这家公司离开,因为他们搞的是“假敏捷”。敏捷开发更多强调的是单兵作战的能力。这几年硅谷非常火的一个概念叫做“全栈工程师”,就是说一个工程师他了解整个生命周期的环节,不一定都要这个人去负责,要了解。这是有效降低沟通效率的方式。
这个图是非常重要的,基本就是我们现在在使用的流程。持续集成和自动化都在这里标识了,在什么环节中需要。持续集成是什么?持续集成的概念就是把所有的成果给放在一起。这是一个集成的过程。比如我们把不同的代码整合到了一起这样的动作是其中一个例子。持续集成就是我们要不断的集成,让产品持续可以看到是什么样的。一会儿我会给大家看一下我们使用的工具。(此处省略了具体的工具讲解,会在更详细的技术培训文档中讲解)
我们的互联网产品不断地迭代不断的变,一旦变就会牵一发而动全身。所以写单元测试的用例是非常重要的。代码的覆盖度,有一些工具会帮我们去看。
这是我们用到的一些工具,给大家简单过一下,列的并不全,这是两三年前做的一个图。Jira是我们的一个沟通管理的平台我们已经在用了,大家用的并不是很好很完善,是需要贯穿我们整个生命周期的。从最开始立项到的用户的讨论都应该在Jira上实现。所有的代码细节应该由代码注释+Jira的任务细节中去回溯出来。比如说,一个员工离职了,新的一个员工加入,应该从代码注释和Jira的任务细节中就了解全部的代码,而不需要自己去读代码或者很高成本的培训。
从产品设计出来到研发过程中,中间有一个非常重要的步骤是叫做“产品评审”,因为设计的东西不一定在架构上就是最优的,产品自己或者某一个工程师可能都是无法独立判断的。这就需要有评审会,否则之后就会有很多问题。(这一点在整个公司的管理思维中也是一样的,一个前端的需求传导过来,有些是需要整个公司的各个环节进行统一评审的,这样要从各个不同的视角、不同的出发点去考究下一步的计划和如何实施和实现这个需求。很重要的是要界定责任。这对于后续的公司的管理和提高效率是至关重要的) 我们在2008年开始创业的时候其实也是什么都不懂,走了很多弯路。后来在创业过程中的整个公司管理,也是不懂,也走了弯路。后来我们把这些经验这些坑都了起来,建立了开发过程的管理,建立的公司管理的体系,目的都是为了让团队在不断扩张、增加新成员的过程中能够保持整个公司始终在信息同步中,每个环节的信息沟通都是同步和及时的,不同环节、不同团队之间的责任和目标是相互理解、又明确的。这样做的主要目的就是两个第一提高团队工作效率,第二降低团队之间的误解。