购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

前言

我们在学习一门全新的编程语言时,最先看到的往往是一份“Hello, World”教程,教你如何把文本“Hello, World”显示到屏幕上,由此了解怎样让一个基本程序运转起来。而本书就像一本给创业者的“Hello, World”教程,将告诉你如何打造产品、开发技术和组建团队的。

我真希望自己在上大学时就能读到这样一本书,因为我虽然获得了学士和硕士学位,也有过不少实习机会,但对自己所做的事还完全没有概念。

我自己早期做过一些大项目,比如在汤姆森金融公司(Thomson Financial)开发过一个用于性能测试的桌面应用程序。那时我根本不知道怎么做用户界面,所以就随便把一些文本框、菜单和按钮放到界面上;对如何处理性能问题更是一头雾水,也就是在代码中随意加上一些缓存和线程池;同样,我也不懂得要考虑代码的可维护性,根本就没去操心测试和文档的事情,反倒是把几千行代码都塞入一个巨大的文件中。

我在TripAdvisor 的第一个项目则是为一个网页添加一些新的选项,该网页可以列出一个城市的所有酒店。这只是一个简单的任务,就是公司为了让我熟悉一下代码库而已。我在第一个星期就完成了任务,把网页推送到生产环境中。过了没多久,我就被叫到经理办公室,和经理来了个一对一的面谈。我看着他在网页上点开巴黎的酒店列表,选中我加进去的那个新选项,然后就开始等啊等啊,那个页面差不多花了“两个小时”才加载完。好吧,实际可能就是两分钟不到,但我真真切切地感受到,在狭义相对论的作用下,当一个人大汗淋漓恨不得找个地洞钻下去时,时间肯定发生了膨胀。那天晚上,我一直到深夜才发现那段花哨的新代码在进行排序时,每次比对酒店都要调用两次数据库,所以如果要对 n 项进行排序,大概需要进行 O ( n log n )次比较。巴黎有将近2000家酒店,页面加载一次可能会引发将近40 000次数据库调用。那天我虽然没有钻到地底下,但我们的数据库服务器可能差不多要累趴下了。

我不会忘记那段时间出现了多少烦人的问题、丑陋的代码和难看的用户界面,也不会忘记,我经历了多少次网站宕机和多少个不眠的夜晚。但是,最让我耿耿于怀的却是问题这样多,我还找不到答案。比如,我该学习、使用什么技术?为什么我还要费心去考虑自动化测试?怎样才能做出一个不惹人厌的产品?怎样才能让别人使用我的产品?面对工作机会时,我该怎么进行谈判?是要争取更多的薪水还是更多的股权?股权究竟又是什么?我是应该在大公司工作,还是该加入创业公司?

对于上述问题以及其他种种问题,我费了很大的力气才找到了答案。所以,我也尝试着把自己学习到的东西(大部分都是经历了痛苦的磨难和犯了错误之后才得到的)用博客记录下来,或者通过演讲和他人分享。但在意识到有成千上万的开发者也会有同样反复试错的经历之后,我觉得是时候做一些更实质性的事情了。于是,也就有了这本书。当然,有些事情是自己犯过错才能学到的,但除此以外,我希望本书可以让读者从他人的错误中吸取经验,避免重蹈覆辙。

我觉得自己犯过最大的错,就是在职业生涯的早期对创业缺少关注。我的前几份工作都是在知名的大机构(思科、汤姆森金融、康奈尔大学),后来才偶然跳到创业公司(LinkedIn、TripAdvisor)。结果,在这些公司的所见所闻让我惊讶不已。我在创业公司前几个月学到的东西,比之前工作、实习和在学校的那些年加起来还要多。

创业公司并不仅仅是大公司的简化版,就像量子力学并不只是经典力学的简化版那样简单。经典力学描述了宏观物体(比如棒球或星球)以可预见和确定的规则在相对低速的运动中表现出的行为。与之类似,大公司通常都生存在具有确定规则的环境中,它们行动缓慢,因为它们面对的客户和产品都是可知的。量子力学则描述了微观粒子(比如光子和电子)基于某些不可预知、非确定的规则在极高速的状态下运动时所表现出来的行为。同样,创业公司经常在一无所知而又变化莫测的环境中高速运转。虽然很多人都了解经典力学和大公司,但只有对量子力学和创业公司也同样了解,才能看清世界的全貌。由此可见,我们必须从全新的角度去考虑问题,必须用全新的方法去工作。

我们工作的方式很大程度上其实也就是生活的方式,因为我们有一半的清醒时间是用来工作的。难道你不希望用这些时间去做一些可以让自己快乐的事情吗?我曾经认为,从事软件相关工作的人们面对的都是一望无际的小隔间、无能的老板、一份份TPS(测试过程说明书)报告和各种企业代码。幸好,世界还有另外一面,这就是本书要向你展示的。我会介绍当今世上最出色的创业公司是如何工作的,让你了解这另外的一面。我相信,即便你从来没想过要加入创业公司,这些公司的理念对你也是有所裨益的。随着创业越来越普遍 ,这些理念也同样会越来越有用。

本书源于我自身的经历和大量的研究,其中就包括对一些程序员的访谈,他们均来自过去十年最成功的创业公司,比如Google、Facebook、Twitter、GitHub、Stripe、Instagram、Coursera、Foursquare、Pinterest和Typesafe(受访者的完整名单见“访谈”)。纵览本书,到处都闪烁着这些人的故事和思想。他们向我们描绘了创业生活的原始景象,不掺杂任何自我营销和公关——单纯就是程序员们在分享自己获得的成功和犯下的错误,并给出他们的建议。

本书的内容

我为这本书定下的目标是为创业公司打造一份既实用又具有可操作性的入门指南。这本书包含三部分内容:产品、技术和团队。接下来,我会列出每一部分都包含哪些章,并概括介绍每章具体讲解的技术、工具和技巧。

第一部分:产品

第1章 为何创业

为何打造面向大众的产品,如今(超越了历史上的任何时候)唯有创业才能为我们创造最佳的机会;什么是创业公司;是什么原因让你选择在创业公司工作,又是什么原因使你放弃在创业公司工作。

第2章 创业点子

如何想出创业点子;介绍点子日记、约束条件和痛点的概念;想法和执行的对比;博伊德迭代法则;如何利用客户开发过程快速、低成本地验证自己的想法。

第3章 产品设计

介绍大家都应当掌握的设计技能;用户界面应当如何设计才不会让用户觉得自己愚蠢;以用户为中心的设计原则(人物角色、情感设计、简单、可用性测试);视觉设计的原则(文案、设计重用、布局、排版、对比与重复、颜色);介绍如何设计最简可行产品(MVP)。

第4章 数据与营销

介绍每个创业公司都应当采用的度量指标;数据驱动的产品开发方法;A/B测试;为什么最出色的产品未必能够胜出;推广、病毒式增长以及创业公司的销售策略。

第二部分:技术

第5章 技术栈的选择

应该利用内部资源开发软件,还是购买商业产品或使用开源产品;最初的技术栈应该如何选择;如何进化技术栈和重写代码;如何评估编程语言、框架和数据库。

第6章 整洁的代码

为什么说程序员的工作并不是写代码,而是理解代码;为什么代码的编排布局、命名、错误处理、不写重复代码原则(DRY)、单一职责原则(SRP)、松耦合、高内聚等可以让代码更容易理解;函数式编程为什么可以让代码易于重用;为什么重构对于编写良好的代码必不可少。

第7章 可扩展性

创业公司应当如何调整,才能适应更多的用户和开发人员;怎样修改代码才无须担惊受怕;如何应用测试驱动开发(TDD)获得更好的代码;如何在创业公司中引入设计评审、结对编程和代码评审;为什么说明文档是代码库中最重要的文档;如果你无法测量,就无法解决;如何利用估算推断性能状况。

第8章 软件交付

编写完代码之后要做的事情;为什么要使用源代码控制、开源构建系统和持续集成;如何进行配置管理、自动化部署和持续交付;如何为代码增加日志、监控和警告功能。

第三部分:团队

第9章 创业文化

为何要明确公司的使命和价值;管理层级架构和组织扁平化之间的衡量取舍;公司文化在人员招聘、晋升和激励中的作用;如何为程序员设计理想的办公室;远程办公的衡量取舍;创业公司的沟通策略和方法。

第10章 求职之路

如何利用人脉找到在创业公司工作的机会;如何让简历受到关注;如何才能在面试中有出色的表现;如何才能做好白板编程;如何才能提出好问题;在薪水和股权的问题上应该如何考虑;面对工作机会,应该如何谈判。

第11章 招兵买马

为什么说人才是创业公司最为重要的因素;创业公司要招什么样的人(合伙人、早期员工、通才和专才);如何找到出色的候选人(以及如何打造公司品牌去吸引人才);白板编程为什么是一种糟糕的面试方法(应当采取什么替代方法);如何给出让人无法拒绝的录用条件。

第12章 学习

世界上最引人关注的软件开发者;为什么要撰写博客、文章、论文和图书;为什么要在小组会议、技术演讲和学术会议上发言;为什么几乎所有的代码都应该开源;为什么应该分享自己所知的几乎所有东西。

重要观点

除了上面所说的技术、工具和技巧之外,有三个重要的观点会在整本书中不断地出现,它们都是成功创业所不可或缺的,这三个观点分别是:创业与人密不可分、伟大的公司是进化而来的、速度制胜。

创业与人密不可分

工作面临的主要问题与其说与技术有关,不如说本质上属于社会学的范畴。

—— Tom Demarco、Timothy Lister,《人件》

我们在课堂和书本上学到的有关创业的大部分内容,比如营销计划、产品设计、系统设计、测试策略、招聘计划和组织结构等,其实只是创业过程中的必然产物。仅仅研究这些产物,无法对创业有充分的理解。这就好比被铁链锁在柏拉图洞穴中的囚犯 ,仅仅研究面前墙上的影子,根本没有办法完全理解外面的世界是何种景象。

希望本书能让你走出洞穴,不仅了解创业的产物,也能了解创造这些产物的人;不仅学到如何设计出伟大的产品,也学到如何设计出以人为本的产品;不仅学到如何编写有效的自动化测试,也知道为什么有了自动化测试,就可以无须在修改代码时担惊受怕;不仅可以学到伟大的公司是如何组织的,更能学到为什么打造一家伟大公司最重要的是要懂得如何去发现和激励正确的人。

伟大的公司是进化而来的

有效的复杂系统一定是从有效的简单系统进化而来的。

—— John Gall

看到长颈鹿的脖子时,你要知道这么长的脖子并不是老天爷一开始就故意设计的。随机突变导致一些长颈鹿的脖子变长,这又恰好提高了它们在某种特定环境下的生存概率,所以成千上万代之后,长颈鹿的脖子就变得越来越长。同样的道理,当我们见到一家成功的公司,必须认识到它的成功并不是创始人在建立公司的时候就计划好的,大多数创业公司都要历经数千次尝试才能有所改变并成长起来,归根结底不过是其中的一些尝试恰好提高了公司在特定市场中的生存概率,只是结果让人感觉是创始人在最早的时候就有所设计一般。

本书将会关注如何以一种增量、迭代式的发展方式去打造一家创业公司(好比敏捷和精益开发),而不是费心去找出完美的计划(好比“瀑布式开发”)。不管你是在打造产品、开发技术抑或建立团队,都会发现最好的起步方式其实就是先做出一个大概可以工作的最小的东西(最简可行产品,简称MVP),然后再根据客户的反馈(对产品而言)、代码的评审和测试情况(对技术而言)或员工情况(对团队而言)逐渐进化,扩大规模。

速度制胜

世界正在快速变化,不再是以大胜小,而是以快胜慢。

——默多克

如果伟大的公司是不断进化且迭代发展的结果,那么迭代得最快的公司终将胜出。所以,本书的很多观点都和如何实现更快的迭代密不可分,也就是如何缩短反馈回路,加快学习步伐,进而提高进化的速度。客户开发有助于更快地发现合适的产品或市场;整洁的代码和自动化测试有助于更快地实现技术;强有力的文化则有助于更快地建立团队。另外,还有一个观点稍稍有悖于直觉,在后面你会了解到,做得更快,完成的质量会更好。所以说,速度致胜。

这是一本涉及广泛的书

本书所涉及的每个主题都已经有人写过书,甚至有多本书,所以我们只会关注最基本的概念,让你开启一段“Hello, World”式的学习体验。我们会推荐一些参考资料供你进一步学习。需要说明的是,本书并未涉及创业公司的法律和财务方面的内容。如果你对编写商业计划、融资和上市等细节感兴趣,可以上网查阅相关书单。

毋庸置疑的是,仅靠阅读一本创业类图书是无法让你成为一名出色的开发者或公司创始人的,就好比阅读健身的书并不能让你成为出色的举重运动员。健身的书可以教会你一些特定的动作和练习,但在你第一次走到杠铃面前时,你仍然只是一只软脚蟹。只有花上无数的时间到健身房里锻炼、出汗,再应用从书中学到的知识,你才有可能举得起沉重的杠铃。同样的道理,本书的目的就是要教给你一些在创业中真正用得上的工具和技术,但也只有投入大量的时间去实践这些技术,你才有可能做到得心应手。

即便如此,书中所讲的东西也是没有对错之分的。有人说过,所有的模型都是错误的,但其中有一部分是有用的。书中所介绍的工具和技术在过去已经被证明对创业是行之有效的,我也希望它们以后对你也同样有用。但我们不要把这些东西当作现成的解决方案,而是要在自己的脑海中形成一系列的知识点,在思考问题的时候可以借此得到自己的解决方案。

本书面向的读者

如果你在创业公司中工作或者正打算投入创业大潮 抑或就职于大公司 却希望像创业 公司一样去运作它 ,你应该读读这本书。本书将向你介绍如何在瞬息万变、科技创投变化无常的环境下,打造一家成功的公司(或一份成功的事业)所要掌握的所有基本概念。尽管这追根溯底是一本程序员写给程序员的书,但其实只有第二部分“技术”是明显偏技术的,第一部分“产品”和第三部分“团队”能被所有受众很好地理解。

如果你是一名刚入行的程序员 ,这就是一本适合你的书。本书可以说汇集了我在读大学时所有想知道的东西,也是我在刚开始工作时希望有人告诉我的建议、提示或诀窍。作为一名年轻的程序员,你应该已经掌握了两三门编程语言,也可能精通了几种库和框架,或者在学校里已经做过几个小应用。虽然你还没有做好什么准备,就已经有人会为你的这些技能买单,但你也很快就会知道自己在学校里学到的东西到底能不能很好地用在现实世界中。还是让我先告诉你答案吧:尚不够!那是一条艰难的道路,你也会重复之前的程序员所犯下的无数错误。当然,你也可以好好读读这本书,从第一天起就让自己的职业朝着正确的方向发展。

如果你是一名经验丰富的开发者 ,本书会让你对每天都在从事的工作有系统性的认识。你还在要求面试者在白板上遍历二叉树吗?在为自己最近的项目挑选技术时,依靠的还是自己的直觉或网上的最新热门趋势?你的待办清单上是不是有一项是“编写文档”?你是不是觉得自己的公司已经变得过于臃肿、行动太慢、缺乏创新?我相信书中的故事可以让你频频点头微笑,你也能够把部分建议应用到现有的工作中,也可能让你决定是时候做些改变了。

如果你是科技公司的经理 执行官或投资人 ,这本书将帮助你弄明白为什么有时候对时间的估算会和实际情况相差一个数量级,为什么手底下最好的开发者非要跳槽到另一家公司,又为什么最新的“敏捷极限结对XXX”方法并没有让你的团队变得更加高效。你的成功在很大程度上取决于能否理解程序员的思维方式、弄清楚他们一天到晚到底在做什么,以及如何去激励他们。书中的故事可以说都是大白话,哪怕你和下属进行一对一的交谈,也是听不到这些话的。

如果你尚未投身创业 但已经开始对创业感兴趣 ,这本书其实就是一位知情者在告诉你事实的真相。如果只通过研究最终的产品(例如网站、移动应用、炫酷的小玩意儿)就想理解一家成功的创业公司,无异于只看一下某个人的毕业证书就想弄清楚他的大学经历——虽然那张纸的确令人印象深刻,但却无法透过它看到一个人为了得到它而去上课、参加研究会议、考试、做作业、经历成功与失败的那些岁月——而这一切都是必不可少的。LinkedIn和Facebook这样的公司看似简单,但实际并非如此。本书会向你揭示,究竟这些公司内部有什么样的创新;它们如何去解决问题;又经历了多少不眠的夜晚,才使得这一切成为了现实。简而言之,只要你对创业感兴趣,这本书就适合你。

排版约定

本书使用了下列排版约定。

· 黑体

表示新术语或重点强调的内容。

· 等宽字体(constant width)

表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。

· 加粗等宽字体( constant width bold

表示应该由用户输入的命令或其他文本。

· 等宽斜体( constant width italic

表示应该由用户输入的值或根据上下文确定的值替换的文本。

Safari® Books Online

Safari Books Online(http://www.safaribooksonline.com)是应运而生的数字图书馆。它同时以图书和视频的形式出版世界顶级技术和商务作家的专业作品。技术专家、软件开发人员、Web设计师、商务人士和创意专家等,在开展调研、解决问题、学习和认证培训时,都将Safari Books Online视作获取资料的首选渠道。

对于组织团体、政府机构和个人,Safari Books Online提供各种产品组合和灵活的定价策略。用户可通过一个功能完备的数据库检索系统访问O’Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、PeachpitPress、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw Hill、Jones & Bartlett、Course Technology以及其他几十家出版社的上千种图书、培训视频和正式出版之前的书稿。要了解Safari Books Online的更多信息,我们网上见。

联系我们

请把对本书的评价和问题发给出版社。

美国:

O’Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

O’Reilly的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表、示例代码以及其他信息。本书的网站地址是:http://bit.ly/Hello_Startup。

对于本书的评论和技术性问题,请发送电子邮件到:

bookquestions@oreilly.com

要了解更多O’Reilly图书、培训课程、会议和新闻的信息,请访问以下网站:

http://www.oreilly.com

我们在Facebook的地址如下:

http://facebook.com/oreilly

请关注我们的Twitter动态:

http://twitter.com/oreillymedia

我们的YouTube视频地址如下:

http://www.youtube.com/oreillymedia

致谢

本书的诞生得益于许多人的帮助。我最初之所以起了写书的念头,要归功于以下诸位的建议和帮助,他们是Joe Adler、Adam Trachtenberg、Joshua Suereth和Nilanjan Raychaudhuri。感谢我的黑客朋友Florina Xhabija Grosskurth、Matthew Shoup、PrachiGupta和Bowei Gai,他们一路以来给我提供了很多想法和反馈。

O’Reilly(以及O’Reilly之外)的朋友们,特别是Angela Rufino、Mary Treseler、Nicole Shelby、Gillian McGarvey和Mike Loukides,正是有了他们的帮助,我这样一个写作新手才能创作出值得出版的作品。另外,我还要感谢Peter Skomoroch、Sid Viswanathan和Jiong Wang为我引荐以及James Yeagle在法律问题上给予我的帮助。

有不少勇敢的志愿者看过此书的提前发布版,耐着性子去阅读未经雕琢、尚未准备就绪的内容,他们是:Alistair Sloley、Joseph Born、Clarke Ching、Jay Kreps、Ara Matevossian、Prachi Gupta、Matthew Shoup、Martin Kleppmann、Dmitriy Yefremov、David J. Groom、Molly Pucci、Steve Pucci、Alla Brikman和Mikhail Brikman。非常感谢你们能花时间来审阅我的作品,谢谢你们给予的反馈和帮助。

对于接受我访谈的了不起的程序员们,我更是要致以万分的谢意,他们是Brian、Daniel、Dean、Flo、Gayle、Jonas、Jorge、Julia、Kevin、Martin、Mat、Matthew、Nick、Philip、Steve、Tracy、Vikram和Zach(参见“访谈”)。没有你们的故事、建议和反馈,本书将处处碰壁,变得无趣而残缺不全。

最后我想说,我生命中的多数美好都是家人给予的。妈妈、爸爸、Lyalya和Molly,这本书是献给你们的。

访谈

作为本书研究工作的一项内容,我对过去十年一些最成功的创业公司的程序员进行了访谈。在和他们的讨论中,我了解到什么样的问题会在几乎所有的创业公司身上一次又一次地出现。这些谈话也让我有了一个更广阔的视角,得以了解不同的公司是如何考虑这些问题的,它们在解决此类问题时最常见的模式和实践方法是什么。由此我也深受启发,知道成为一名伟大的开发者需要具备什么样的条件。我把这些想法全部融于书中,并在书中的各个部分直接引用了以下访谈者的采访内容。

Brian Larson

Google资深软件工程师,Twitter主任软件工程师。

Daniel Kim

Facebook软件工程师,Instagram技术主管。

Dean Thompson

Transarc公司联合创始人,Premier Health Exchange联合创始人、CTO,Peak Strategy联合创始人、CTO,mSpoke联合创始人、CTO,LinkedIn技术总监,NoWait公司CTO。

Florina Xhabija Grosskurth

LinkedIn 公司Web开发者、产品专家、经理,Wealthfront人力运营主管。

Gayle Laakmann McDowell

GareerCup创始人、CEO,Seattle AntiFreeze创始人、联席总裁,KeenScreen有限公司技术副总裁,Google软件工程师,《程序员面试金典》作者。

Jonas Bonér

Triental AB联合创始人、CTO,Scalable Solutions AB创始人、CEO,Typesafe联合创始人、CTO。

Jorge Ortiz

Joberator创始人,LinkedIn软件工程师,Foursquare服务器端工程师,Stripe计算机专家。

Julia Grace

WeddingLovely联合创始人、CTO,Tindie公司CTO。

Kevin Scott

LinkedIn技术与运营高级副总裁,AdMob技术、运营副总裁,Google高级技术总监。

Martin Kleppmann

Go Test It和Rapportive联合创始人,LinkedIn高级软件工程师。

Mat Clayton

Mixcloud联合创始人、CTO。

Matthew Shoup

Indiaplaza.com Web开发者,VNUS医疗技术公司电商主管,LinkedIn资深常驻计算机专家,NerdWallet高级技术官(Principle Nerd)。

Nick Dellamaggiore

LinkedIn首席高级工程师,Coursera基础架构设计领头人。

Philip Jacob

StyleFeeder创始人、CTO,Stackdriver工程师,Google资深软件工程师、技术经理。

Steven Conine

Spinners联合创始人、CTO,Wayfair创始人。

Tracy Chou

Quora软件工程师,Pinterest软件工程师。

Vikram Rangnekar

Voiceroute联合创始人,Socialwok联合创始人,LinkedIn资深软件工程师。

Zach Holman

GitHub早期招聘的一位工程师。 rIBJ4XkohsW+OAYpvclmzclLmxFzGXkUs/pq6UbgdQtZmtAuDLnCld61K+p0JIt4

点击中间区域
呼出菜单
上一章
目录
下一章
×