热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

#为99%的开发者构建

Web3 的火爆,已经让越来越多用户意识到在未来建成的元宇宙里拥有独立自主的身份数据和资产是多么的重要。而眼下 Web3 产品的匮乏,确实招致推特创始人 Jack Dorsey 关于 Web3 被 A

Web3 的火爆,已经让越来越多用户意识到在未来建成的元宇宙里拥有独立自主的身份数据和资产是多么的重要。而眼下 Web3 产品的匮乏,确实招致推特创始人 Jack Dorsey 关于 Web3 被 A16Z 等风投公司所垄断的讥讽 ,但为广大传统互联网开发者摆脱 Web 2.0 的内卷指出了明路。

不过,开发者在拥抱新世界的时候,必须意识到,无论是传统互联网还是 Web3 的技术产品开发,一样会面临本文指出的关于软件开发的神话和现实。

且看本文作者、Akita 软件的创始人和 CEO、前卡内基梅隆大学计算机科学教授 Jean Yang 提供什么样的洞察和建议。


你应该转向无服务器吗?GraphQL 是解决你的 API 困境的答案吗?你是否应该遵循最新的开发运维手册来提高你的系统可靠性?在技术工具的世界里,有很多的噪音。但它并不总是反映程序员的日常现实。

作为一个开发者工具创业公司的创始人,在过去几年里,在例行的用户研究过程中,我与成百上千、甚至成千上万的软件开发者交谈过。这些谈话的共同主题,甚至比我们正在构建的产品的需求还要大,是一个目前没有得到充分满足的总体需求:为真正的开发者,或者我喜欢称之为 99% 的开发者构建。

这些是在时髦的公司和框架之外完成工作的开发者,他们在关于「开发者想要什么」的对话中经常被忽视。在「网红开发者」所谈论的内容和大多数开发者的日常现实之间存在着巨大的差距。当你看到科技媒体报道的内容,或者顶级科技会议的演讲者,往往是来自 Airbnb 或 Stripe 这样高增长的宠儿,或者像 FAANG(Facebook、苹果、亚马逊、Netflix 和谷歌等科技巨头的缩写合称)这样成熟的高利润公司的人。

事实上,有一个长期的假设,即除了少数硅谷的独角兽公司之外,其他公司应该渴望拥有「小小 FAANG」的流程。但这越来越不真实。我们的用户会告诉我们,他们的做法与他们「应该」的样子完全不同。但对于这些如微软的 Scott Hanselman 所称呼[1]的「暗物质开发者」,Facebook 或 Pinterest 的做法是没有意义的。他们的用户需求不同,他们的团队需求也不同。

谈论 99% 的开发者很重要,因为这些开发者正在开发为我们的生活提供动力的软件 —— 保险、医疗保健、零售和银行,仅举几例。不仅仅是小公司不能轻易采用现代的、技术领先的公司的流程;大多数公司都不是围绕着技术建立的,它们有几十年的传统软件实践。许多这些公司都有相当多的资金流动。许多公司处理相当多的个人数据。如果技术创新不能让这些软件团队受益,我们就会失去对每个人生活质量的许多有意义的改善。

在这篇文章中,我将介绍一些企业软件购买者和开发者都可以接受的真理,以消除不利的误解,并提升所有人的开发体验。

「涓涓细流」的工具化是一种理想状态

神话

由于大量的编程和工具来自 Facebook、Netflix、LinkedIn、谷歌和亚马逊等公司,许多人认为有一种涓滴效应。那些有钱的公司的优秀工程师会想出很好的办法来解决其他人总有一天会遇到的问题。这只是一个时间问题,直到你的典型中小企业或财富 500 强公司遇到与亚马逊或 Facebook 一样的问题。

现实

类似 FAANG 的公司与中小企业或典型的财富 500 强公司在很多方面都不同,包括规模需求、对自建或购买的立场以及工程团队的构成。少数资本雄厚的大公司拥有整个团队,由世界上的专家专门负责可观察、测试、开发者生产力等等。除此之外,值得注意的是,FAANG 正在围绕一小部分产品进行优化,这些产品从一开始就是数字化的,这一点对于大多数软件开发商来说是不真实的。

许多非 FAANG 团队有一个小小的非专家团队,甚至是一小部分工程师并非专家,来做类似 FAANG 的公司有多个专家团队来做的事情。这些组织主要依靠外部工具和服务,而他们没有什么资源来进行定制。

该如何应对

首先,科技行业需要承认,在不同规模和不同工程预算下运营的组织有不同的需求。一个每天提供低至数百万用户请求的公司不需要像 Netflix 或谷歌那样优化其系统。大多数公司都没有延迟、数据存储和其他方面的问题,这导致他们编写自己的定制基础设施组件和工具,例如,Facebook 在其 Tao 数据存储[2]蜂巢数据仓库工具[3]方面所做的工作 —— 而且他们很可能没有必要使用这种工具。

承认不同的需求将为讨论更为广泛的组织的不同需求提供空间。例如,拥有遗留系统的公司没有能力迁移到最新的架构上,他们采用新工具的方式与新成立的公司不同,或者是那些能够拿出一个专门的团队进行大规模迁移的公司。

认识到没有一个理想的公司形象,可以帮助开发者在了解用户时跳出通常的假想。这对于以一种可实现的方式弥合软件需求和软件工具之间的差距至关重要。

没有黄金标准的开发环境

神话

如果你看了足够多的会议讲座或读了足够多的博客文章,就会发现有许多软件团队拥有纯洁的编码标准、无漏洞的单元测试、反映生产环境的暂存环境和/或应对事件的顺利的人员流程。要达到这一点,只需要一个强有力的指示和工程团队的纪律。

现实

就像任何其他领域的网红一样,网红开发者经常描述一种现实,甚至对他们自己的公司来说也是一种渴望。也许真的是这样,编写理想过程的人生活在一个理想化的环境中,这是有可能的,在这种情况下,他们是提供规则的例外。但大多数时候 —— 即使在一个组织的某个部分或某个时刻是真实的 —— 这种现实也不会在他们整个公司中永远存在。

例如,Spotify 承认,一旦他们的团队达到一定的规模,他们对开发运维的雄心勃勃的方法就无法扩展[4]。我们也看到一些例子,公司采用了新的热门技术,然后在事情没有按计划顺利进行的时候,又恢复了原状 —— 例如,Segment 从微服务转回到单体架构[5]

该如何应对

作为推动这一切的受众,开发者应该更加挑剔地要求获得真相。我们应该欢迎关于「真实的软件开发过程」的文章,就像我们对理想化内容的渴望一样。如果有人在一个理想化的过程中工作,有一个世界级的运营团队和整个团队,他们的存在是为了支持提高软件质量,那么应该让听众了解这一点!我们应该欢迎更多关于「真实的软件环境」的讲座、博文和书籍来提供指导:在人手不足的团队、没有专门的开发运维专家的团队、以及最初构建系统的人都已经离开的团队中,编码、测试和交付是什么样子的。

目标是进步,而不是完美

神话

太多的人认为,追求良好的软件质量意味着你需要完全采用那种新技术,无论是微服务、GraphQL,还是分布式跟踪。直到完全转换到理想的技术,你才算完成工作。

现实

今天,「真正的开发者」团队所处的位置和所给出的主流建议之间的不匹配,意味着许多团队在提高代码质量或系统可靠性时不知道从哪里开始。对于 99% 的开发者来说,他们的大部分代码永远不需要扩展到成千上万的组织,或者是数十亿的用户。这些开发者中的许多人所工作的代码库比他们整个职业生涯时间还要年长。这些组织大多数在内部没有专门的开发者工具或开发者生产力团队。

纯净的代码不是目标 —— 相反,目标是在其他限制条件下,代码的可靠性和安全性更有意义。例如,如果你的公司不在多个云上运行,每天部署数百个变化,那么像 Netflix 的 Spinnaker 这样的持续交付系统可能是不必要的。同样,在一个拥有开发运维专家的公司,如果他们知道如何设置和维护可观察性的「强力工具」,其开发者可能会比没有专家团队的公司在使用这些工具时要好得多。

该如何应对

认识到要取得进展 —— 从那些将整个团队投入到完善其流程的公司中可以学到一些经验,但在大多数情况下,完美是不现实的。与其全盘提升流程,不如看看哪些流程能很好地转化为资源较少的团队和具有不同目标的团队。

例如,谷歌的这篇博客文章[6]提供了这样的准则:60% 的测试覆盖率为「可接受」,75% 为「值得赞扬」,90% 为「模范」。当你是一个像谷歌这样成熟的公司,拥有谷歌工程团队的规模和水平,这可能是有意义的。但是对于大多数较小的、处于早期阶段的公司来说,尽管公司的目标是什么,但实际的测试覆盖率会少很多。随着面向服务的架构和外部 API 的兴起 —— 这些做法在谷歌之外更为普遍 —— 在生产环境中的测试[7]正在成为传统的单元和集成测试技术的一个可行替代方案,此时「代码覆盖」作为一个概念是有意义的。

在许多这样的现代系统中,正如 Honeycomb 联合创始人 Charity Majors 写道[8]:「一旦你部署,你就不再是在测试代码,而是在测试系统 —— 由用户、代码、环境、基础设施和一个时间点组成的复杂系统。」

一个好的产品演示不会显示出第 2 天的卡顿现象

神话

我们很容易陷入这样一个陷阱,即认为产品演示和上手培训能够反映出每天使用产品的体验。人们必须相对快速地对新产品做出购买决定,所以我们默认通过演示来判断一个产品。

现实

开发者的工具帝国是通过华丽的 GIF 动图和视频片段建立的。团队在看了几分钟的演示后,就对工具做出承诺 —— 有时甚至是几年。投资者根据演示进行投资。开发者被告知要专注于演示 —— 以及之后使用的前 60 秒 —— 作为产品的决定性部分。但是,虽然能够很好地进行演示可能表明团队能够在日常使用中执行开发者的经验,但这两者并不一定相关。

对于大多数值得他们标价的工具来说,开发者所经历的大部分事情 —— 以及围绕着这些事情的痛苦 —— 都发生在使用的第一分钟之外,这不应该是个意外。首先,与开发者的日常工作流程(例如,现有的代码审查、CI/CD 工作流程和协作模式)的整合是衡量一个产品是否具有粘性的更好指标,而不是最初的喜悦。例如,在开发者工具的创造者中,众所周知,与 GitHub 和 GitLab 的整合将有助于让你的工具更加有用和吸引人。

第二,有整类的工具,对其有效性的真正测试并不发生在第一天。一个例子是调试器。比起你的开发环境,比起你的 CI/CD 环境,你的调试工具箱是保证你作为一个开发者的生活质量的最关键因素。当你在部署前修复一个问题时,你是否有信心这个问题不会出现在生产环境中?当你因为生产事故而不得不加班或休息日工作时,你是否能够迅速找出根本原因并提出潜在的修复方法?由于这些工具的复杂性 —— 而且它们往往在你遇到重大问题时才显示出它们的真面目 —— 调试工具往往在良好的开发者体验方面得到最少的宣传和回报。

该如何应对

工具建造者经常极其关注第一天的体验,是因为用户如何评价工具。所以我在这里要特别呼吁一下用户。用户需要:

不要仅仅根据演示或第一天的体验来夸大工具;在你或你的开发团队花了一段时间日复一日地使用该工具之前,先不要承诺大金额合同来购买那些的工具;根据对你的团队生产力至关重要的不太「性感」的维度向其他人推荐工具,例如它们如何与工作流程整合,或者它们如何减少团队内部和跨团队的协作摩擦。

做好这些事情将为更好的开发者体验创造更大的空间。

异质性将继续存在

神话

经常有这样的假设:热门的新语言或框架就是某人系统中的全部。开发者和网红开发者都会对新的工具进行宣传,好像这些工具是唯一被使用的工具:例如,微服务架构、GraphQL 和基于 OpenTelemetry 的可观察性追踪。「一个真正的框架」的宣扬隐含着这样的假设:企业有可能完全转而使用这种新的语言、工具或框架。

现实

我遇到过很多团队,他们说迁移将在「下一季度」发生。现实情况是,即使他们设法最终开始,迁移还是成为连续的,而不是离散的过程。一个拥有原有代码的 99% 的开发者团队和一个精干的团队可能永远不会将他们的整个代码库转换为微服务或 GraphQL。对于大多数组织来说,技术栈和工具链是异质的,是多年来获得的各层语言、框架和工具的组合[9]

我们遇到的许多团队会告诉我们,他们正在开始采用微服务或 GraphQL 或 OpenTelemetry。当我问他们有多少服务已经在新的框架内时,答案往往是相当小的比例,特别是对于超过几年的组织。其中一些组织会告诉我,他们实际上并不期望转换他们的整个代码库(例如,组织将期望保持其传统的单体与微服务架构在一起,或 REST 和 gRPC 端点与 GraphQL 端点一起)。对于其他许多组织来说,当我在几个季度后检查时,他们往往在计划的迁移中没有达到预期的程度 —— 并且在现实中维持着跨框架和工具的软件。

该如何应对

软件买家,从个人开发者到主管和 CIO,都知道异质性的存在。但完全接受这一点意味着:

接受缓慢的迁移。 我遇到过很多团队,他们认为一旦完成了从过时的工具 X 到热门的新工具 Y 的迁移,他们的问题就会得到解决,每一个工具都生活在自己的解决方案生态系统中。不幸的是,对工具 X 的迁移可能直到热门的新工具 Z 才完成 —— 而现在你又有了两个生态系统的问题。接受遗留的子系统。 我遇到过很多团队,他们专注于围绕系统的较新部分进行工具箱的创新。不幸的是,遗留的子系统并没有消失 —— 它们的工具较少的情况意味着当出错时,你需要更长的分流和调试时间。

接受你的 API 不太可能汇聚到 GraphQL 上的事实,将让你投资于更可持续的、多 API 协议的工具。认识到你的组织可能不会将其所有的传统单体架构转换为微服务,将使你能够投资于那些不忽视对单体或微服务中的代码监控和调试的工具。

在开发者方面,传统的智慧是,你为「土地」努力追求同质性,为「扩展」拥抱异质性。你是否对异质性进行规划将极大地影响你的扩张速度。某些类型的开发者工具需要为每种新的语言或框架定制。例如,一个只为 GraphQL API 提供洞察的工具可能不容易扩展到其他类型的 API,特别是因为 GraphQL 包含比 REST 或 gRPC 更丰富的信息。

其他类型的开发者工具可以轻松地跨语言和框架进行扩展。一个只需要能够从不同的编程语言中调用的 SaaS 工具支持语言的异质性,因为主要的核心组件不需要被翻译来支持每一种新的语言。

References

[1] 如微软的 Scott Hanselman 所称呼: https://www.hanselman.com/blog/dark-matter-developers-the-unseen-99
[2] Tao 数据存储: https://engineering.fb.com/2013/06/25/core-data/tao-the-power-of-the-graph/
[3] 蜂巢数据仓库工具: https://engineering.fb.com/2014/04/10/core-data/scaling-the-facebook-data-warehouse-to-300-pb/
[4] 他们对开发运维的雄心勃勃的方法就无法扩展: https://www.jeremiahlee.com/posts/failed-squad-goals/
[5] Segment 从微服务转回到单体架构: https://www.infoq.com/news/2020/04/microservices-back-again/
[6] 谷歌的这篇博客文章: https://testing.googleblog.com/2020/08/code-coverage-best-practices.html
[7] 在生产环境中的测试: https://increment.com/testing/i-test-in-production/
[8] 正如 Honeycomb 联合创始人 Charity Majors 写道: https://increment.com/testing/i-test-in-production/
[9] 多年来获得的各层语言、框架和工具的组合: https://future.a16z.com/the-case-for-developer-experience/




推荐阅读
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
  • zuul 路由不生效_Zuul网关到底有何牛逼之处?竟然这么多人在用~
    作者:kosamino来源:cnblogs.comjing99p11696192.html哈喽,各位新来的小伙伴们,大家好& ... [详细]
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
author-avatar
月芽2502915393
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有