从Google工程师到创业CTO,他的8项理念也许可以帮到你
Lan Langworth是前Google软件工程师、O'Reily作者,现在他是Artillery的co-founder/CTO,致力于把游戏机质量的游戏带进网页浏览器。下文是他从Google离职到创业的心
分享自我心得,希望给创业的人带来力量。
源码分享:http://www.jinhusns.com/Products/Download/?type=xcj
不 久以前,我还是一名筹划着自己第一家公司的软件工程师。显然,有许多需要考虑的地方,但是最让我兴奋的是那些「未知的未知」——我知道会出现、但不可预知 的挑战。虽然有一群可靠的商业伙伴和我这个技术宅一起工作,但是我深知从第一行命令开始,要建立一家成功的公司还要付出很多。正如你想象的,有许多我没有 预计的东西都发生了。所以,我写了下面这些「未知」,献给那些憧憬着去创业公司当co-founder的工程师们。
1、方向和信念
2006年当Google给我offer的时候,我开心地接受了。那个时候,Google几乎是一名软件工程师工作的最好选择,意味着你可以和世界上最聪明的一群人一起工作,还可以随意使用世界上最先进的工具。
然而,它好坏参半。一方面,我真心相信在Google这样的公司你距离参与创造奇迹近了一步,心安理得地享受Google提供的优厚待遇。Google提供的基础要求,如季度目标,使命,核心价值观,代码规范等能为你创立公司提供帮助。
另 一方面,在Google,很难保持冲劲和创造力。离开Google、加入Redbeacom是我做过的最好的决定之一。我是他们的第一位雇佣的全职工程 师,并帮助建立了整支队伍,还为产品开发制定了排期。这些都是在Google做不到的,因为在大公司,软件工程师很容易被隔离在业务线外,你唯一的责任就 是输出优质的代码。但是,如果你以第五个人的身份进入一家公司,你会看见整个公司正在运转的所有事情,你也在业务的前线,有机会参与重大决策。任何相当技 术Leader的人都应该加入一家早期的公司获得这种体验。
今 天,作为Artillery的CTO和co-founder,我的生活一半是巨大的自由,一半是巨大的责任。Artillery正在努力创造一项发明(让 浏览器编程高质量的游戏机)。这是我作为工程师的冲动,可以任意地按我们的路线创造。同时,我们都知道,如果我们的技术可行,很快就会面对更多的用户,同 时承受随之而来的更大的压力和期待。
在某些时候,你得相信自己做的是正确的事情。将「我想我们可以这样做」换成「这就是注定要发生的」这种心理暗示并不容易,但这就是让我进步的原因。有人认为这是信心,我不这样认为,我想它更关乎一种信念。
2、沟通的失败
在加入Artillery的头几个月,其他的founders和我都已经数次激怒了对方。我开始想在这样一支小的队伍,相对于在Google沟通应该不在话下。但是我错了。
三 位co-founders的沟通很混乱,一个人说给另一个人,第二个人又传话给第三个人。作为一名软件工程师,如果你在一支全是工程师的队伍,沟通是相对 容易的。当这支队伍混入了其他职位的人,且多于10个,沟通会变得有点棘手。相信我,沟通会比你想象的难,但是必须好好地掌握。
所以我们准备花更多的时间一起筹划,花一个小时的时间坐在房间,清楚地写出来当下在进行的事情。第一次这样做的时候,在不到60分钟的时候,我们就解决了能想出来的大部分问题,这些问题大部分都是由于沟通失误造成的误解(!)。从此每周,我们都会开一次这样的founder's meeting。同时,我们会把决定都记在一个常用的Google文档,方便随时查阅。从此我们再也没有出现过严重的分歧。
但 是,仅仅增加沟通的量是不够的,更重要的是要更好地沟通。当我们刚开始例会的时候,我们经常陷入无休止的浪费时间的争论中。过了30分钟后,我们才意识到 方才是在用各自不同的话语表达同一个观点。一个简单的短语,比如「需要一项政策」,可以意味着一本10页的手册,也可以是一句话的规则。所以现在,在我们 开始反驳的时候,我们会先花时间确保理解我们的出发点是什么。这样会提高沟通效率,节约时间。
我们制定了这类会议中的三个原则:首先,会议是私人性质的,所以我们会给与彼此最坦诚的反馈,这就让我们把自我关在了门外,可以开诚布公地讨论。这会导致我们中的某人说:「哦,我不认为它会这样。」建设性的批判对话让我们更好地完善自我。
其次,e-mail的问题。通过e-mail很难传递情绪,很容易成为误解的发源地。误解一封e-mail,变得心烦,甚至影响表现——实在太容易了。同样的话语,如果是面对面的对话就会有完全不一样的效果。
我有一个简单的小技巧可以在e-mail中传递情绪:当我怀疑我发出的某条信息可能会有歧义,我会加一个表情,比如[mood: agreeable],从而确保传达出我乐意的态度。如果你也这样做,你会发现它非常有效,可以让所有人保持冷静的情绪,避免争端。
3、建立「程序员乌托邦」并不容易
开始组建团队的时候,我们会说很多在Artillery工作的美好愿景,包括各种各样的福利待遇。我们希望用有趣又有意义的工作来吸引最优秀的人才。
于是我们在网站上挂了很多福利:免费午餐、完善的医疗保险、交通报销、无限的假期、workstation预算、从东京买来的游戏原型手办……然而,列出这些福利简单,将它们落实,建立一个「程序员乌托邦」却是困难的。
开 始,我以为无期限的假期是一个好主意。毕竟,它是Netflix(美国顾客满意度最高的公司)著名的文化甲板,在他那里很奏效。然而,在我这儿,似乎却给 员工带来了更多的压力,优秀的员工害怕他们休假太多而不敢提出请求。最后,我们决定还是采取固定期限的带薪休假模式——既能缓解员工焦虑,又能足量地满足 员工的度假需求。
在 有新员工提出各种奇怪需求前,自主选择编程装备是一个好主意。但是,谁知道20美元的Razer Goliathus鼠标垫值不值?有员工提出用他们自己的笔记本工作,把它们的预算花在昂贵的外设上。还有员工想要高昂维护费用的组装系统。至此,我终于 确定每个人都应该用Mac OS X——因为它足够干净、简单。
4、「福利」可能并没有什么用
要解决问题首先要理解福利的实质是什么。比如说买设备,它的目的不是无限制地满足员工的每一个细微的需求,而是为他们提供良好的工作环境,确保没有人还在使用老旧、迟缓的电脑。让每个人理解政策、福利背后的逻辑,可以帮助他们做出更好、更谨慎的决策。
福利一旦实施,就很难轻松收回。可能除了你自己,并没有别人理解福利的目的。那些员工看似在浪费你的好意,其实并没有恶意。你得提醒他们理解这个福利的机制。
5、离开舒适区
我知道CTO的职位意味着更多的责任,却不代表冗长的会议和官僚主义。除了技术,CTO还要承担更多的管理职能:雇佣合适的员工,解雇不合适的员工,持续地创造和输出idea,带着目标团结队伍。
当我们筹集资金的时候,我第一次遇到这些挑战。和投资者周旋对一位软件工程师来说真是一件苦差事,如果你也习惯了坐在自己的工位,仅通过GChat彼此交流。突然之间,我得穿上没有洞的衬衫参加各种大型会议,并试图说服在场的人我们能实现不可能的事。
对于工程师来说,承诺一周以后的deadline已经很难了。投资人却会challenge你承诺今后1~2年的事情,并会在每一个节点问你问题。「真的吗?」他们中的有人说,「你要做一个AAA游戏?你怎么把2G的内容放进浏览器?你怎么让它有趣?」
幸运的是,多年的软件工程师生涯赋予了我一项珍贵的技能:直觉。我毫不怀疑我们在做的事情是可行的。一旦我自己深信不疑,让其他人相信也就轻松多了。
就 像说服投资人,团结新的队伍也是一项挑战。多个月之前,我们决定做游戏,虽然不知道它会成为什么样子,但是开始做是第一步。一位合作的艺术家给我发来了一 张游戏的图片,是一片郁郁葱葱的草地。我把它做成了36"X24”的大海报,挂在墙上。从此,无论谁问我他们接下来要干嘛,我都会指着这张图说:「只要能 让我们离这里更进一步。」这是自我驱动型工程师需要听到的话。我们有一个清晰的目标,就踏踏实实地挂在墙上,我们要做的就是努力实现它。
6、选择正确的技术
Web开发是一个有创造力的快速发展的世界。各种各样的新idea和工具层出不穷,似乎换一个新框架或代码就能解决你所有的问题。但是作为CTO你要记住,挑选怎样的技术相当于你花了一笔真金白银,一旦你做了决定,很可能你就没有时间和资源再走回头路了。
在 Artillery,我们清楚我们会写很多JavaScript,即使大家都懂,JavaScript有各种让你不爽的地方 。我们之前有使用过CoffeeScript,它运作得不错,我们也喜欢它的作者做的大部分决定,所以我们最终选择了它。然而最关键的原因是,我们并不会 被困死在CoffeeScript上。如果哪天我们想丢弃它,我们可以将轻量级的CoffeeScript全部编译成JavaScript,并从那里继续 前进。这么做合情合理,而且成本也很低。
服务器端的决定就没有那么容易。Node.js显然是我们的首选,它可以轻松分享客户端和服务器端的代码。然而,那个时候Node.js还很年轻,而且它的生态圈也不成熟。当时很难评估Node.js的第三方库的质量和安全性,有很多相似功能、但又在开发的不同阶段的库。
这 让我们停下来思考了一下。但是经过更多的研究,一件事情提醒了我们:Node.js的更新速度很快。Node.js基于的V8,已经被证明在Google Chrome上跑得又快又干净。如果只有一家公司拥有最多值得信任的聪明人在致力于语言,那就是Google。依靠这个框架似乎是一个安全的选择。 Node.js的代码新版本是一致的,而且强大的Github社区又提供了频繁代码更新的便利。在仔细的审议后,我们决定用Node.js,现在很庆幸我们做了这个决定。
7、Harbor你的资源
我很喜欢side project,我总是要做点什么——一个游戏、一个webapp,或其他的什么工具。这是我保持学习,玩儿新东西的方法。但是当Artillery成为现实,我的兴趣突然成为我的全职,我该怎么度过我的空闲时间呢?
我曾经花了一个周末,和一个朋友做一个电商网站的原型。「花不了多长时间的」我记得我还这样说过,「我只需要用Django、PayPal和一个购物车。」它的确只花了两天,却耗尽了我一个礼拜的精力。
从此,我才意识到精神充电是必须的。在其他项目上分脑力让我在工作中降低了效率。作为CTO,跟上新技术是我的责任,为什么我还要做那些无益于我提高的事情呢?做外部的项目会给我的正职带来压力,对我的合伙人也不公平。
我停掉了side project,创造力和精力又回来了。虽然我有时还是会陷入卡壳,想修复一个bug却怎么也办不到,但是了解了生产力低谷周期后,我放轻松了。
如果此时状态不佳,不如接受它,和周围的伙伴交流一下,做一些简单的活儿。这样总比恐慌、错过deadline要好。
如果你真的什么都做不了,告诉你一个小技巧:想想那些你完全不想碰的事情。再做手边的事情就舒服多了。
8、相信你的直觉
如果你知道某件事是对的,即使你还不能马上知道原因,先开始做。推论是:如果某件事情感觉不对,无论是招聘、管理、谈判,还是其他决策,听从你的内心。CTO的工作很辛苦,会用掉你全部的脑力和直觉——但是除了它也没有别的什么我想做的了。
从Google工程师到创业CTO,他的8项理念也许可以帮到你的更多相关文章
- Google工程师打造Remix OS系统 桌面版安卓下载
三位前Google工程师打造的Remix OS系统终于来到了PC桌面上,现已可以下载尝鲜. Remix OS for PC基于Android-x86项目,由安卓5.1 Lollipop深度定制而来,不 ...
- 深度学习框架Tensorflow应用(Google工程师)
首先在这里给大家分享Google工程师亲授 Tensorflow2.0-入门到进阶教程 有需要的小伙伴可点击进入扣群下载,群内不定期的会分享资料教程,点击直达链接:https://jq.qq.com/ ...
- [No00004C]软件工程师的创业陷阱:接私活
我本身是 Java 工程师出身,写代码至今已超过 15 年,创业也超过 10 年,曾经外包过很多项目给别人,也接过很多外包的项目,现在不接了,只经营电子报发送平台,在二年内累积超过 5000 家企业用 ...
- Google 工程师:为什么 CDN 对移动客户端加速“没有”效果
王者荣耀是近两年来比较火的手游,不少小伙伴都有玩过.玩这个游戏最怕的不是遇到猪一般的队友,也不是怕遇到神一样的对手.最让我们感到害怕和绝望的是,团战爆发时,而你 460 了.460 是一个玩家常用的词 ...
- Android 7.0 PopupWindow 又引入新的问题,Google工程师也不够仔细么
Android7.0 PopupWindow的兼容问题 Android7.0 中对 PopupWindow 这个常用的控件又做了一些改动,修复了以前遗留的一些问题的同时貌似又引入了一些问题,本文通 ...
- Google工程师亲授 Tensorflow2.0-入门到进阶
第1章 Tensorfow简介与环境搭建 本门课程的入门章节,简要介绍了tensorflow是什么,详细介绍了Tensorflow历史版本变迁以及tensorflow的架构和强大特性.并在Tensor ...
- 【转】Linux从入门到精通——运维工程师成长路线图——CTO马哥Linux视频教学
加油! http://edu.51cto.com/roadmap/view/id-2.html#6853467-sqq-1-36881-57ccc7d95ea58df839decd91bd220170
- Google工程师巩朋的算法之路(1)
转载自 http://www.tiantianbianma.com/msra-gong-peng-algorithm-one.html/ 引子 严格来说,本文题目应该是 我的数据结构和算法学习之路,但 ...
- 【转】所需即所获:像 IDE 一样使用 vim
转自: https://github.com/yangyangwithgnu/use_vim_as_ide 所需即所获:像 IDE 一样使用 vim yangyangwithgnu@yeah.net ...
随机推荐
- [原]一个针对LVS的压力测试报告
LVS 测试报告 测试计划 基本功能测试 流量压力测试 响应时间测试 配置正确性测试 灾难恢复测试 测试点 基本功能测试 客户端IP地址正确性 RealServer 访问Internet测试(包括Ip ...
- [EasyUI美化换肤]更换EasyUi图标
前言 本篇文章主要是记录一些换EasyUI皮肤的过程,备忘.也欢迎美工大神各路UI给点好意见,EasyUI我就不介绍了,自行百度吧..(So..所以别问我是不是响应式..本身EasyUI就不是响应式. ...
- 一些关于Linux入侵应急响应的碎碎念
近半年做了很多应急响应项目,针对黑客入侵.但疲于没有时间来总结一些常用的东西,寄希望用这篇博文分享一些安全工程师在处理应急响应时常见的套路,因为方面众多可能有些杂碎. 个人认为入侵响应的核心无外乎四个 ...
- vim+vundle配置
Linux环境下写代码虽然没有IDE,但通过给vim配置几个插件也足够好用.一般常用的插件主要包括几类,查找文件,查找符号的定义或者声明(函数,变量等)以及自动补全功能.一般流程都是下载需要的工具,然 ...
- 虚拟机体验之 Xen 篇 —— 令人脑洞大开的奇异架构
这一篇我要体验的虚拟机系统是 Xen.在虚拟机领域,Xen 具有非常高的知名度,其名字经常在各类文章中出现.同时 Xen 也具有非常高的难度,别说玩转,就算仅仅只是理解它,都不是那么容易.之所以如此, ...
- 小丁带你走进git的世界四-重写历史记录
一.git对象文件创建 开篇先补充一个知识点,就是比如我建立一个文件之后,使用git add就会生成一个git对象,但是git对象生成后可以在.git/objects里面对应,首先我们来初始化一个仓库 ...
- Entity Framework 6 Recipes 2nd Edition(10-8)译 - >映射插入、修改、删除操作到存储过程
10-8. 映射插入.修改.删除操作到存储过程 问题 想要映射插入.修改.删除操作到存储过程 解决方案 假设已有运动员实体模型,如Figure 10-8所示. 对应的数据库表如Figure 10-9所 ...
- 解析大型.NET ERP系统 版本控制
数据库版本控制 1) 开发版本控制.控制多人同时修改数据库产生的冲突,使用SQL Source Control 工具做版本管理. SQL Server Management Studio支持VSS和T ...
- Bootstrap3系列:导航
1. 标签页 .nav添加.nav-tabs设计标签页,.nav-tabs 依赖 .nav 基类. 1.1 示例代码 <ul class="nav nav-tabs"> ...
- 【WCF】基址与默认终结点
五月份的时候,有位老友给老周提了个建议:希望老周写一写WCF的文章.其实老周以前是写过WCF的文章的,只是不是写在这个博客里,老周并不打算把X年前的博客导进来,要写的话,重新写吧.毕竟,那个时候写的文 ...