写点什么

构建开发工具正当时

  • 2021-03-07
  • 本文字数:5689 字

    阅读完需:约 19 分钟

构建开发工具正当时

开发人员开发了很多有价值的软件,但涉及到自己的工作时却成了 “鞋匠的孩子没鞋穿”。

 

我们生活在开发工具的黄金时代。 软件正在吞噬着世界。现在,每个公司都是软件公司。每个软件公司都需要开发人员和开发工具。由构建开发工具的公司组成的生态圈正在蓬勃发展。

 

每一个编写代码的公司都已发现(或正在发现)软件开发真的很棘手。世界需要更多的软件,但这并不是雇佣更多的开发人员就能解决的问题。开发软件并不能轻易地实现规模化或并行化。顺序依赖和不可预见的复杂性使我们严重低估时间节点和预算,进而导致糟糕的商业产出甚至是严重的生存危机。

 

为了解决大规模软件开发中的效率问题,越来越多的公司正在自建和购买开发工具。不只是 Google、Facebook、Microsoft 和 Amazon,其他公司也在为此投入大量资金。

 

为了满足这种日益增长的需求,由构建开发工具的企业组成的新型行业正在飞速发展。像 GitHub、GitLab 和 HashiCorp 这样的平台已被大众所知,其所在的领域正逐步进入大众视野。

 

历史趋势,重大机遇

 

过去这十年,开发工具市场发展速度之快令人难以想象。当我和奎因(Quinn)在 2013 年创办 Sourcegraph 时,我们很快发现“开发工具”这个词根本就入不了投资者的法眼。投资者承认开发工具很有价值,但是认为其中的大多数只是单打选手的工具(例如,JetBrains、Sublime Text),而这并不能获得足够的收益,另外一些是为满足大型科技公司特定需求的内部工具(例如 Google Code Search),还有一些是开源项目,这些项目没有人买单,只能通过出售服务和提供支持来赚钱。投资者告诉我们,只有一家十亿美元的公司卖给了开发者——Red Hat,但这只是个特例。

 

开发人员开发了很多有价值的软件,卖给了其他伙伴——销售人员、市场营销人员、设计师等。但涉及到自己的工作时,却成了 “鞋匠的孩子没鞋穿。TechCrunch 中的一篇文章感叹道:“研发开发工具的创业公司能找到投资者吗?

 

但是,在过去七年中,情况发生了一些变化。这种变化体现在估值上:GitHub被微软以75亿美元收购GitLab估值60亿美元HashiCorp估值50亿美元JetBrains估值70亿美元,这份清单还在继续。

 

但是,尽管这带有一串零的数字吸引了人们的眼球并成为新闻的头条,但他们也只是推动软件构建方式巨大变革潜在因素的副产品。 以下是一些潜在因素:

 

· 大型科技公司:大型科技公司和技术驱动的创业公司之间的竞争已经蔓延到各个行业,这导致每个公司都优先发展软件,并将其作为核心竞争力。

· 海量代码(Big Code):全世界的代码量正在飞速增长,越来越多的公司已经达到了一个临界点,以前这个临界点只有最大的科技公司才会遇到。

· 企业级 OSS: “云”作为一个建立在开源软件(Linux 和 Kubernetes)之上的软件平台,与旧的软件平台相比,后者是垂直集成的专有生态系统(例如,Windows+.NET+Visual Studio)。

 

未来发展充满不确定性,但有一点确定的是:几乎每一个有价值或者快速成长的公司都在开发软件,而且大多数都意识到他们需要优秀的开发工具来在竞争中保持优势。

 

这是一个激动人心的消息。 传统意义上来说,“科技”是经济中一个独特的分支,只有有限的几家大型科技公司具有高效开发大规模软件的能力。现在,各个行业的公司都明白,代码已经成为公司 DNA 的核心组成部分。这意味着代码和软件的影响力扩大了。 不再只有“技术公司”才能提供软件产品或技术服务——参与经济运行的各个公司都在学习如何凭借自己的力量研发优秀的软件。

 

随着越来越多的经济组织尝试开发软件,这个进程仍在加速。很大程度上,因为代码的原因,对未来的幻想——治疗癌症、救命药、大规模个性化交通工具、火箭飞船等等将更快地成为现实。长期以来,软件一直被认为是技术进步的助推器。 而开发工具是技术进步的二阶助推器(助推器的助推器)。这是一个巨大的机会。

 

如何更好地抓住这个机会?

 

大型公司,开源软件公司,创业公司

 

你可以在以下三个地方进行开发工具的研发。(可能还有更多,但为了简洁起见,我们将重点介绍这些。)

 

首先是大型非开发工具公司。许多从事软件开发的大公司都在内部工具的研发上投入重金。 大型公司内部有很多优秀的开发工具,很多这些工具促进了外部类似工具的诞生。 Blaze 是 Google 的构建系统,它促使了其他构建系统的诞生,比如 Pants 和 Facebook 的 Buck,后来它自己被开源为 Bazel。大公司也提供了丰厚的、稳定的工资福利。缺点是你工作的直接影响力很可能会被局限于一个组织内部。你的作品有一天可能会变成开源项目,但没有人能保证这一点,而且这需要花费几年的时间去获得法律允许和官方机构的批准。 当然,就算这个工具得到广泛使用,你也不会直接获得经济上的回报。

 

其次是开源项目。 开源项目的工作经历可以使你获得更多的认可,并且项目不存在和甲方讨价还价的烦恼。 如果你的主要目标是用户使用量,开源项目具有很强的吸引力。许多广泛使用的开发工具(Git、Linux、Emacs、Vim 等)都是开源项目。当然,缺点就是缺少收入。许多开源项目的作者和维护者都有其他收入来源(通常是大型科技公司)。Patreon 和 GitHub 的赞助者很多,但可能只有很小一部分开源项目的作者能够仅靠赞助就过上舒适的生活。 你能够获得的收入来源限制了你可以投入到开源项目上的时间。

 

再次是研发开发工具的公司。得益于过去几年开发工具市场的迅猛增长,大多数此类公司都是创业公司。 开发工具公司能提供的好处是:使用者、客户、以及团队成员通常都是同一群人。 如果你开发了一个很棒的工具,你的用户会很快乐,你得到报酬,你也会很快乐,你和你的同事都能使用这个工具,于是你获得了双倍的快乐! 开发工具的创业公司还能给你金钱上的额外回报(如果你的部分薪酬是公司股权)。这种回报可能会很惊人。我个人认为,开发工具市场目前还处于发展初期。我相信将来有一天,高质量、广泛使用的开发工具造成的影响将远远超过广告驱动的网络搜索、PC 操作系统和社交媒体。也就是说,总有一天,开发工具公司的市值会超过当今最有价值科技公司的总和。

 

当然,初创公司也有风险。 公司极有可能无法实现其崇高目标,裁员甚至倒闭。 没有一种适合所有人的工作。 就我个人而言,我遵循的原则是“收益最大化,风险最小化”,其中“收益”和“风险”的定义取决于你自己。

 

不管选择大型公司,开源公司还是开发工具创业公司,你仍然面临着一个问题:如何评估这个机会和工具是否值得你的付出。 为此,需要综合运用你的直觉和价值观进行评判,接下来我们将进行讨论。


满足自己的需求,也要了解整个市场

 

杰米·扎温斯基(Jamie Zawinski)曾经说过:“世界上最有效的激励手段就是满足自己的需求。”(the best motivator in the world is scratching your own itch) 他谈的不就是开发工具吗,他说得对。很多开发工具起源于程序员碰到一个难题,然后想出通过软件自动化解决问题的方法,并通过代码实现它。为自己开发软件意味着你需要同时在产品经理、工程师和客户这些不同角色间进行切换。如果想为自己和其他处于相同困境的人创建真正有用的东西,这真是一个绝妙的主意。当你评估企业开发工具的前景时,很大程度上依赖于你的直觉:痛点在哪,哪个产品能提供有效的解决方案。

 

但是,你也会希望将直觉与软件开发方式结合起来——不同公司和部门间的共同点是什么,你要服务的细分市场有哪些不同点和特殊之处。 重要的是你需要明白你的需求在整个软件开发拼图中的位置,以及其他人的需求在他们开发拼图中的位置。

 

软件的开发方式因组织而异,甚至因人而异,但是有一个通用的“软件开发生命周期”模板:


1. 制定计划并描述软件目标(例如,实现某个功能或修复某个错误)

2. 阅读并理解要修改的代码

3. 编写、运行和调试新代码

4. 测试代码

5. 评审代码

6. 部署代码

7. 监控生产环境并对事件做出反应

 

这个生命周期也会有很多的变体:

 

  • 个人开发者在开发个人软件时会使用自己的编辑器来读写代码,使用简单的单元测试框架来测试代码,以二进制文件的方式来发布应用程序,并通过小型的问题跟踪软件来接受反馈和管理 bug。

  • 开发小组会使用更复杂的问题跟踪软件来制定项目计划,使用代码搜索工具理解代码,使用各种不同的编辑器来编写代码, 利用 AWS 或 Google 云上的 CI(持续集成)服务如 Buildkite 或 CircleCI、Docker 实现软件部署,采用一个简单的日志聚合器来监控软件运行和错误监测。

  • 大型组织中,可能会有整个团队或部门来负责开发环境、CI / CD 服务维护,计算资源配置,发布应用程序到生产环境、监测和定位关键生产问题以实现第一时间响应。

 

理解通用流程和客户的具体实现非常重要。 了解你要加速的生命周期——个人的、团队的、组织的,或者上述的某种组合——也很重要。只卖给个人开发者本身并没有什么问题,但很多最成功的开发工具创业公司都把产品卖给团队和组织。向团队推销意味着要说服代表团队利益的人——可能是开发经理、总监或者开发人员效率部门的主管 。而这个人可能不会每天编程。

 

在评估哪些开发工具和公司值得你花时间时,你可以考虑他们的客户是团队还是个人,他们怎样向不同的客户表达自己的价值理念,以及你构建的工具将如何适应客户的软件开发生命周期。

 

开发工具创业公司的一些简单示例

 

让我们了解下以下开发工具创业公司位于软件开发生命周期的什么阶段。

 

  • Sentry 可对生产环境中的错误发出告警,并帮助你快速定位需要修改的代码位置。对于将大部分时间花在软件开发生命周期第 1 - 5 阶段的应用程序开发人员来说,它旨在使得第 7 阶段(“监控和反应”)更易于操作 。 它也能做到在问题到达第 7 阶段之前在模拟环境中捕获问题。

  • Honeycomb可以检测生产环境的错误和异常, 让你钻取到“无限宽的数据表”,从而获取到足够的上下文信息来找到问题的根源。  与其他第 7 阶段工具使用“monitoring”或“APM”标签不同,Honeycomb 定位于可观察性(Observability)——一种有效管理第 7 阶段的思想理念。

  • Pulumi 允许你用最擅长的编程语言以编写代码的方式来描述架构。 通过实例化对象(如 TypeScript 语言)来定义你的发布方式,Pulumi 负责将它映射到生产环境。 对于那些擅长第 1 - 5 阶段的开发人员来说,它使得第 6 阶段操作更简单。

  • YourBase是一个测试运行服务,可以并行运行和优化你的构建服务。 它检查系统调用并执行语句分析,以推断程序构建的依赖结构,可降低大型代码库的构建时间。 它加快了阶段 4 的运行速度,该阶段对很多团队都是致命的瓶颈。

  • Tilt用来为多服务应用程序构建最佳的开发环境。 像 Kubernetes 这样的技术使得多服务应用程序的部署更加容易,但是多服务应用程序的开发环境还需要自行搭建。 它解决了阶段 3 中的痛点,这些痛点是由于阶段 6 的创新引入的。

  • Caddy是一个 web 服务器和反向代理服务器,它强调好的开发体验、可扩展性和自动使用 https 等好的默认设置。 它在阶段 6 中使用,对于花费大部分时间在阶段 1 - 5 中的开发人员来说非常有必要。

  • Wasmer构建一个运行在服务器上的 WebAssembly 虚拟机(在 web 浏览器之外)。 它有可能影响阶段 2 和 3 (Wapm 可实现不同语言源代码间的相互依赖),但是它最大的价值是在阶段 6,为大量的服务端应用程序提供高性能、易于使用和安全的部署环境。

  • Codestream是一个代码讨论工具,可以在代码编写环境下进行沟通和信息交换。它的目标是将代码评审(第 5 阶段)中发生的大量交流“左移(shift left)”到第 2 和第 3 阶段。

  • Sourcegraph(我作为联合创始人的公司)是一个代码搜索工具,可以在你的代码库中发现模式、反模式、符号、引用和错误消息。 它可以让你更容易深入到不熟悉的代码中,并对代码的工作原理以及与其他代码的依赖关系有一个快速的理解。 我们的核心产品定位是阶段 2,但是因为查找和阅读代码贯穿软件开发生命周期的整个阶段,所以集成了编辑器(阶段 3)、代码评审工具(阶段 5)、代码覆盖工具(阶段 4)和监控工具(阶段 7)。

 

软件工程中的许多术语也可以从它们对软件开发生命周期的意义方面来考虑。通过这种方式可以帮助我透过炒作,看清它们的真正含义:

 

  • DevOps 包含两件事:一是让 Ops 对开发者更友好(即让将大部分时间花在阶段 1 - 5 的开发者更简单地操作阶段 6 - 7)。二是通过软件自动化减少系统管理员的手工工作,让系统管理员角色变得更像开发人员(让阶段 6 - 7 变得自动化)。代码即是架构是 DevOps 的一个方面,它使用开发人员熟悉的语言来定义部署阶段,从而实现部署过程的自动化。

  • Shift left(左移)意味着在软件生命周期的早期阶段捕捉 bug 和问题。 普遍接受的规则是,软件生命周期中,下一个阶段修复 bug 的代价是上一个阶段修复代价的 10 倍,如果是在阶段 4 而不是阶段 7 中捕获问题,那就意味着在时间、精力和金钱方面的付出要减少 100 - 1000 倍。

  • Microservices 通过调整软件在阶段 6 的部署方式,来解决阶段 1 - 5 的瓶颈问题。 编写代码时简单,部署时就会复杂(但希望早期的好处大于后期的坏处)。微服务和单体应用(monoliths)之间的争论主要在于如何处理复杂性。有一些通用的规则可以帮助你选择,但是更多取决于软件团队成员自身的能力,有多少经验在 ops 阶段(6 - 7),有多少是在 dev 阶段(1 - 5),以及对有利于减轻各阶段复杂度工具的熟悉程度。

 

需要说明的是,这个分析只是我个人的观点。上面讨论的公司可能对它们的价值理念以及如何影响软件开发生命周期有不同的说法。 如果你想了解更多他们的信息,尝试下他们的产品,并将他们融入你自己的开发版图中。

 

谁知道呢? 也许对这类公司进行足够的调查,并对个人经历进行反思,你就会发现新的工具或公司可以满足你的需求并给予你机会。 你也可能会得出结论,最适合你的不是加入任何现有的开发工具创业公司,而是创建自己的开发工具——但这是另一个主题了。

 

过去几年间,开发工具市场的发展经历了一个分水岭。 软件开发渗透到了经济的各个领域,甚至“非技术”公司现在也雇佣了数百万的程序员,在持续增长的开源代码库中工作。现在开发工具的研发是个潜力无限的市场。好的开发工具能提高我们的技术水平,成为技术进步的二阶加速器。全球经济向前发展的节奏和鼓点将是“开发人员,开发人员,开发人员”,因此,构建开发工具正是时候了

 

原文链接:

https://beyang.org/time-to-build-dev-tools.html

2021-03-07 16:142927

评论

发布
暂无评论
发现更多内容

读书笔记:查理芒格的思维模型

panda

第九节:SpringBoot在线文档Swagger2入门

入门小站

springboot

可持续·向未来:碳中和背景下绿色冬奥发展新趋势

易观分析

碳中和 冬奥会 产业经济

如何低成本测试云原生(K8s)应用?

Draven Gorden

微服务 云原生 联调测试 并行测试

iofsstat:帮你轻松定位 IO 突高,前因后果一目了然 | 龙蜥技术

OpenAnolis小助手

开源 技术分享 工具集 进程管理

前端培训:Vue 面试题分享

@零度

Vue 前端开发

再见丑陋的 SwaggerUI,这款开源的API文档生成神器界面更炫酷,逼格更高!

沉默王二

Java

这样才是代码管理和 Commit 的正确姿势! | 研发效能提升36计

阿里云云效

阿里云 云原生 代码管理 研发 Commit

新版DevOps Handbook (Part 1) 五个新增实践

Franklin 许峰

DevOps DevOps认证 Handbook DevOps实践指南 EXIN

netty系列之:Bootstrap,ServerBootstrap和netty中的实现

程序那些事

Java Netty 程序那些事 2月月更

小程序开发中使用网络请求

Speedoooo

在线字节转换工具

入门小站

工具

Flink SQL 在快手的扩展和实践

Apache Flink

大数据 flink 实时计算 编程开发

大数据培训:Hadoop生态系统圈

@零度

大数据 hadoop

基于babel的埋点工具简单实现及思考

CRMEB

代码评审|阿里巴巴DevOps实践指南

阿里云云效

阿里云 DevOps 云原生 代码管理 代码评审

PingCode Wiki ——国内最顶级的产研团队知识库产品介绍

爱吃小舅的鱼

团队管理 知识库

【安全漏洞】浅谈Bypass Waf (基础-实战)

H

网络安全 渗透测试 漏洞

【堡垒机】堡垒机的起源以及发展历史简单了解

行云管家

运维 网络安全 堡垒机 运维安全

mark:Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

webrtc developer

微信朋友圈的高性能复杂度分析

阿卷

架构实战营

在Rainbond中实现数据库结构自动化升级

北京好雨科技有限公司

有哪些创建线程的方法?推荐使用哪种?

王磊

java面试

向工程腐化开炮 | proguard治理

阿里巴巴终端技术

Java App 客户端开发 proguard 腐化治理

Flutter 重构 QTalk

Qunar技术沙龙

架构实战营毕业总结

红莲疾风

「架构实战营」

人人都是 Serverless 架构师之“盲盒抽奖”创意营销活动实践

Serverless Devs

Serverless 架构 2月月更

云运维必备知识-云运维定义以及工作内容讲解

行云管家

云计算 IT运维 云运维

java培训:SpringBoot技术的理解

@零度

JAVA开发 spring-boot

Camtasia音画同步剪辑教程

淋雨

Camtasia 录屏软件

2 月亚马逊云科技培训与认证课程,精彩不容错过!

亚马逊云科技 (Amazon Web Services)

架构师 培训 认证

构建开发工具正当时_文化 & 方法_Beyang Liu_InfoQ精选文章