2019年一些令人愉快的开发人员体验。
API(1), 产品(5)我曾经在一家公司上工作,在顶部建立了大部分功能Facebook的广告API。GraphQL.在这一点上没有公开的事情,但API设计或多或少等同于GraphQL。属性会出现并消失,而不会出现警告,并对更改进行反应需要频繁的消防训练。
One conclusion might be that they didn’t care much about the experience of integrating with their APIs, but I’m pretty sure another guess is closer to the truth: it’s extremely difficult to support integrations into complex and evolving systems, and Facebook Ads very much met those criteria.
过去的一年有许多方式是GraphQQL的首次亮相派对。虽然其许多思想代表了来自的世代改善HATEOAS,他们不是特别的new。
所以呢是新的?
I wanted to know what developer experiences had been the most rewarding or for folks over the past year, and为人们推文更有趣的开发人员经历。从那些回答,加上一些浏览产品狩猎和我自己的记忆,这里有一些关于2019年令人愉快的开发人员体验的思考。
代码
越来越常见的范例允许人们编写直接在平台上运行的代码。这提供了强大,动态的界面,令人惊讶reduces在许多情况下复杂性。
平台可以摘要部署的复杂性,管理操作系统等,让他们的用户专注于控制逻辑。所有人,没有胶水。这对于决策相对无国籍的情景尤其突出,但是状态的例子变得越来越少。
代码的一些很好的代码示例是:
“无服务器计算”仍然是一个主导主题,在主要云提供商中出现了一个特色的竞争阿里巴巴云函数计算那AWS Lambda那Microsoft功能那和谷歌云功能。语言支持继续扩展,java,python,nodejs是常见的地方,并且在长尾的差异化。例如,阿里巴巴支持PHP和AWS支持。
可能更有趣的是,看到更多的利基产品进入无服务器生态系统,可以尝试填补可用性差距或专门支持较窄的verecases:
Zeit现在promises selective build and deployment of only modified code paths (similar to what you might self-roll withBazel.)。
Firebase.专门用于支持移动开发,为移动应用程序提供完整的平台(主要是通过专业或推广现有的Google云功能)。
思索has traditionally relied on他们的http api,但2017年介绍Twilio功能,这允许用户对Twilio的事件反应在Twilio的服务器上运行代码而不是自己的。
Webassembly在CloudFlare Workers上allows folks to writeWebAssembly那sometimes abbreviated as Wasm, and execute it on Cloudflare’s edge compute infrastructure.
Wasm is a mediocre product but an exceptional platform layer: I think long-term folks won’t want to write Wasm directly, and will instead write more familiar languages and compile down to Wasm. That approach is being explored in速度的玻璃玻璃, 哪一个I write about a bit more later on.
AWS Lambda @ Edge是in similar vein to Cloudflare Workers or Fastly’s Terrarium, but they’ve reached it from a different direction. For Fastly, the move into Wasm is increased flexibility compared to their existingVCLbased configuration. However, Lambda@Edge only supports Node.js, which is much less featureful than AWS Lambda which [supportsJava,node.js,c#和python。
In some ways it’s unfair to compare AWS Lambda with Lambda@Edge, as it’s pretty clear the implementations are distinct and the similarity is mostly a marketing concern, but either way it’s interesting to see how physical and efficiency constraints create product limitations and specialization in “code as configuration” offerings.
Chrome extensions.通过代码的集成是一个有趣的,不同的倾斜,以及“边缘计算”可能意味着在未来的另一个方面。在这里,您可以编写Chrome浏览器的用户可以从Chrome Web Store安装的JavaScript应用程序,在互联网浏览云上运行。
编写代码是如此强大的平台界面,因为它是极端富有效率的相当独特的组合,同时在平台层保持极端控制。然而,值得指出这些产品主要是基础设施 - AS-Service,它可以代表用户承担显着的技术专业知识。我们将看到“代码作为集成”机制进一步扩展IAAS?
Containers
容器如Docker.是一个有趣的界面选择。它们允许非凡的自定义和配置,同时通常选择限制或消除运行完整虚拟机所提供的状态。然而,集装箱安全仍然是在多租户环境中迫切关注,并且容器通常在平台和用户之间提供较差的接口,强迫用户解决操作系统升级和平台以缓解多千兆字节图像。
也就是说,我发现使用容器作为我认为正在挖掘的集成点的一个特别有趣的例子,这是Azure IoT边缘。
Azure IoT边缘允许您创建和指定码头容器,该过程对您的物理互联网设备的数据,从而卸载一些处理这cloud to你的物理设备云。容器代表比代码更高的抽象,因为您可以控制下面的整个虚拟机。容器在共享计算环境中代表一些潜在的安全风险,但在IOT设备上运行的情况下不适用,因此此Usecase在没有许多缺点的情况下灵活增加。
我通常认为这是一个有趣的产品,因为它介绍了“边缘”是一种广泛的概念,具有物理设备和CDNS.representing different facets of edge computation.
所有这些都说,我相信容器代表有效internal公司内的界面,因为它们在复杂性和灵活性权衡方面提供了一个有趣的可组合式界面,但也许无法在外部工作。
域特定语言
使用域特定语言来指定集成行为是配置驱动集成和代码驱动集成之间的一系列交叉。其中一些示例使用DSL作为其初始实现的伪像(类似于使用Postgres协议的AWS红移,因为早期版本是使用Postgres实现的),而其他版本则使用它们来提高正确性。
github动作允许您在简单的DSL中编写命令,以配置构建,测试和部署工作流程:
操作“部署到生产”{需要=“provision数据库”使用=“操作/ gcloud”运行=“gcloud部署”}
This is a nice approach, because it describes how the actions涉及in their DSL, but they don’t try to describe the actions themselves. Instead the actions are described as scripts or shell commands. I could see Github Actions replacing large swathes of continuous integration tooling, and it’s done so in a very flexible way that will allow for users to innovate on top of their platform, not trying to define all the ways that someone might want to integrate.
速度使用清漆配置语言那sometimes abbreviated as VCL, is another interesting example of a domain specific language. It’s a pretty fascinating choice, becauseVCL是一种非常强大的语言,有意地限制在高性能Web服务器中可能做的事情,而且是一种相当密集的语法。
子管道_if_local {if(client.ip〜local){return(管道);}}
在这个具体的情况下,我认为VCL可能太复杂了一个广泛的采用的DSL,我怀疑恰如其一致地同意他们用玻璃杆菌的实验, 哪一个是compiling Rust, C and TypeScript toWebAsembly并在边缘运行它。
Terraform.作为Hashicorp编写的DSL非常令人迷人,以表示与阿里巴巴,AWS,Azure或GCP等第三方云提供商的集成。
资源“aws_elb”“前端”{name =“frontend-load-balancer”侦听器{instance_port = 8000 instance_protocol =“http”lb_port = 80 lb_protocol =“http”}实例= ['$ {aws_instance.app。*。id}“]}
您的产品的整个想法是其他产品顶部的DSL是非常令人着迷的,并且有效的证明有效的有效接口。In this case, I think Terraform’s biggest value propositions are in abstraction (sort of theoretically decoupling from vendor specific configuration and making it easy to support multi-cloud, although in practice this is a bit tenuous) and verifiabiility (much better tools to validate correctness than in e.g. YaML or JSON).
IDES和开发环境
有几个例子是强大的IDE和开发环境。其中一些是非常集中的特定工具,其他人是开发平台,其他人在某个地方陷入困境。
毛刺这将运行整个前端和后端JavaScript应用程序,提供整个在线IDE,开发和部署环境。他们现有的一些例子使用AirTable的API那Slack的API和谷歌表的API。This is a powerful showcase of just how good Javascript sandboxing has gotten from security and performance isolation perspectives.
vscode.是A.free, open source IDE from Microsoft that has been getting widespread adoption as a light, configurable and powerful IDE. Beyond being free, it does a lot of interesting things well: debuggers, smart completion, Git integration, extensions, etc.
虽然可能是最好的事情,是语言服务器协议, 哪一个IDE详情的摘要语言支持,允许一个LSP集成来支持广泛的IDE。这是鼓励采用vsode的一种非常强大的方法,但也将降低未来ides的入境障碍。这些平台允许工具竞争质量,并使支持特定工作流的超专业工具可行。非常兴奋地看到更多产品,这些产品是可供我们其他人使用的平台的病毒载体。
谷歌云壳是A.pretty powerful idea, allowing folks to interact with and control their Google Cloud environment with a dedicated VM for each individual. This is pretty crafty, as it allows Google to upgrade the clients automatically on their images (reducing backwards compatability overhead), and also provides better security and auditability primitives.
From a user perspective, I also love that it prevents the proliferation of the much-dreaded “shared management server” anti-pattern, where folks do a bunch of critical work off a single, shared server that is forever running out of disk space, getting its CPU pegged on a bad script, or causing an outage when it goes down.
超是一种基于HTML / CSS的终端应用程序,可以在使用Famill Web-Technologies时重大自定义。这将在嵌入终端的一些整洁的想法中打开大门,进入强大的IDE的工具,而无需(直接)依赖本机技术即可。
Merlin是A.n editor service for theOCAML.支持自动完成的编程语言等。默认情况下,它支持Emacs和Vim,但也与其他编辑器相结合,例如... vscode。我认为这个例子是以三种不同的方式有趣。首先,提醒我们如何从许多地方吸引灵感。其次,这证明了设计的Emacs和Vim如何在第一次发展之后仍然受到大量使用和积极地延伸。一种灵感!最后,它证明了语言服务器协议的一个好主意,因为它的启用将允许这样的工具与任何编辑器完全整合。
Pharo.是A.Smalltalk implementation将操作系统和IDE结合到单个捆绑中。Pharo预计大多数工具都远远超过大多数工具 - 放弃整个操作系统 - 我认为这是什么让它如此有趣。我们为工具创建的许多障碍是社交构造,我们有技术要做得多,而不是我们在我们的工具中做的更多。
Progressive configuration
在实践中,很少有开发人为中心的工具只提供单一的集成载体,而是提供从简单到相当复杂的一系列集成功能。
When we talk about progression configuration,Kubernetes.是A.n interesting discussion point. Kuberenetes is immensely powerful and complex system, and is configured through堆的yaml。It has extremely powerfulHTTP APIs那but using them can be a bit obtuse.
周围的复杂性,大量的创新潜伏!有创新API客户端库那in安全生成配置那和in hosted platforms that abstract some of that complexity likeopenshift.那谷歌Kubernetes引擎和Amazon Elastic Container Service for Kubernetes(这有点说话)。
它非常令人印象深刻的是Kubernetes已经存在多少层配置,我想我们可能只是入门。
谷歌云构建是渐进配置的一个很好的例子,其中一个简单的UI支持大量配置,更复杂的集成依靠一个休息的api。
- Clubhouse是A.nother standard, modern example. Default configuration done through their UI, and more powerful customization done with a休息API.和webhooks。
没有代码编程
我不会掩盖太多,但产品就像Airtable和如果这然后still hold a very special place in my heart. They are these spiritual successors to超Card,提供相当简单的工具,即“非程序员”可以撰写融入强大的计划。
这些产品在标准的GUI驱动的集成和程序集成之间的空隙中。这些和GUI驱动的集成之间的差异是它们并不特别自以为是。它们不设计用于解决特定的东西,而是一种可以通过提供一些可协调的开放构建块来解决许多东西的工具。
图书馆和工具
这是一种抢成袋类的工具,即人们呼吁提供特别好的开发者的运动员,这可能不完美地融入其他群体。
- 扑是从单个代码库中构建IOS和Android上的本机应用程序的工具。类似于某些方面原生但似乎是更好的结果。
- Pytest.是A.Python test runner that simplifies test running and in particular testwriting,相对于标准库的单元测试。
- 小旅行者和小花鱼是用于开发Web应用程序的强大PHP框架。
- Gatsbyjs将完整的现代前端堆叠在一起,以所有的力量和更毕业的学习曲线。
- 榆树是一种写入可靠的WebApps的语言,具有强大的偏航静脉类型的推论。
- 反应钩子是一种更简单的方式来处理州反应的变化。
- Sourcegraph是一个强大的代码搜索工具,可以易于在大型代码存储库中搜索。
- OASGraph是一个要转换的工具Openapi规格进入GraphQL API,从而降低了开始运行GraphQL API的屏障。
Things that weren’t mentioned
考虑到无休止的炒作,我认为这是interesting to just briefly mention a few things that that no one brought up:
block一般或者Ethereumin particular as examples of great developer experiences.
Depending on usecase, it seems like either the wallets are still difficult to use securely, or the transaction costs remain prohibitively high or volatile. Together, it seems like the developer experience for blockchain is still lacking.
Chat bots didn’t come up either. despite getting a lot of excitement. I think this might be in large part due to US and Europe focus of the folks I know on Twitter, as it seems like chat bots are getting a great deal of use in other markets.
反应wasn’t brought up as much as I expected, although React Hooks were mentioned. Perhaps React is so commonplace at this point that folks don’t even think to mention it, much as no one mentioned Python, Ruby or Node.js.
总的来说,这是一个很有趣的方式来花一些时间!在今天之前,我不熟悉许多这些工具,这是一个很好的调查,帮助刷新我的思考,了解开发人员工具和伟大的开发人员经历。
非常希望听到他们最近令人印象深刻和鼓舞人心的开发人员经历的建议!