当前位置: 首页 > news >正文

Doc as Code (3):业内人士的观点

06f30fa33c174ee5bc05bffd3d5253ae.png 

作者 | Anne-Sophie Lardet

在技术传播国际会议十周年之际,Fluid Topics 的认证技术传播者和功能顾问 Gaspard上台探讨了“docOps 作为实现Doc as Code的中间结构”的概念。在他的演讲中,观众提出了几个问题,我们想分享Gaspard的见解!

首先,让我们从Doc as Code的介绍开始。

- 1 -

什么是Doc as Code

Doc as Code是应用软件开发流程和工具来交付技术文档。它使用与开发团队相同的工作流程和工具,包括版本控制系统、自动化测试、问题跟踪器等。它还依赖于轻量级文件的生产和管理。

Doc as Code相当容易获得且易于使用。 需要的工具是极简的,通常是免费的,并且像文本编辑器一样简单。Markdown 或 AsciiDoc 等轻量级格式是开始使用Doc as Code的最快方法,因为它们都可以处理纯文本文件。

与任何技术范例一样,Doc as Code有其优点和缺点。

优点

  • 它促进TW和开发人员之间的合作

  • 您可以使用与开发人员相同的工具

  • 它让开发人员一起参与文档生产制作

  • 它降低了软件许可和支持服务的总体成本

缺点

  • 需要更深的技术知识

  • 最适合软件产品的文档

许多机构和公司已转向Doc as Code作为他们的文档流程。英国政府的技术文档团队使用Doc as Code来提供服务和平台。Spotify、Cloudfare、Kubernetes、Twitch、Arundo、Netflix设备,甚至Bitcoin等公司都使用静态站点生成器(SSG)Jekyll,这是Doc as Code场景最常见的发布工具之一。

- 2 -

与DITA可能存在哪些交互?

Doc as Code和DITA的基本原理是不同的,但两者可以共存。

2019年6月,Heretto联合创始人兼首席执行官Patrick Bosek发表了《和睦相处:DITA和Markdown》。他做了如下类比:

Markdown就像一把铲子,DITA就像一台挖土机。有些人从未使用过挖土机,认为它太复杂了。然后,建造大型建筑的建筑工人说:你不能用铲子建造大型建筑。

如果你一个人开始一个项目,却不知道如何操作挖土机,那么铲子似乎是显而易见的选择。他们俩在世界上都有一席之地,任何建筑工地都会有铲子和挖土机。

Bosek强调了这样一个事实,即每个文档标准都有其优势,我们应该利用每一个标准的长处。

DITA和Doc as Code常用的格式之间存在潜在的联系。

  • 轻量级DITA

您可以使用轻量级DITA来弥合结构化内容和连续文档之间的差距,轻量级DITA是DITA的简化版本,使用DITA元素类型、属性、内容模型的子集和简化的功能子集。轻量级DITA旨在结合HTML5(HDITA)和Markdown(MDITA),它不是为了取代DITA。它主要针对那些将不懂DITA的员工融入文档组织。它允许作者跨不同的部门来进行编辑、协作或发布。

  • DITA辅助编辑模式

当有良好用户体验的界面提供支持时(即:有好用的编辑器),利用 XML 的好处可能是有意义的。随着文档化自动化技术向最终用户友好界面发展,开发人员可能需要访问专门的编辑和管理环境。有一些解决方案可以帮助生成一致的DITA,如Oxygen XML、IXIASOFT、Heretto、DitaToo、Composize等。

- 3 -

可以添加元数据吗?

有些内容需要比其他内容有更多的语义。在DITA系统中,有不同的方法可以在Topic或Map级别声明和添加元数据。不幸的是,使用Markdown,虽然可以调整现有内容并添加元数据,但没有像DITA那样提供语义化。以下是一些如何做到这一点的提示:

  • 使用YAML文件将元数据与模板语言相结合

  • 利用Markdown文件的header或为每个相关目录创建一个README文件

  • 使用Markdown特定风格,如Kramdown,它向内联元素添加类和ID

  • 将带有class属性的HTML标签与Markdown内容结合起来

  • 利用类似AsciiDocsy的SSG,它使用内联语义。

    例如:.term, .cite, .cmd, .code, .gui, .path, .case和.tip

- 4 -

是否仅限于软件行业?

Doc as Code确实适合很多公司,但通常仍与软件开发有关。

重工业在编制技术文件时使用有约束力的规范,如航空、航天、海军、核能和铁路的S1000D标准。有一些特定的要求和时间表与软件行业不同,因此Doc as Code很难应用。

另一方面,Doc as Code作为一个全球的环境可能适用于不同的内容来源、知识库、教育内容,甚至依赖聊天机器人的技术。

- 5 -

给初次尝试团队的建议

  • 循序渐进,从试点开始,熟悉版本控制系统和协作工作流

  • 提升TW的GIT技能

  • 促进技术文档团队和开发人员之间的沟通,让他们参与到文档流程中,并帮助他们确定工作的优先级

  • 花点时间选择和评估用于发布的现有解决方案(如静态站点生成器)是否符合您的需求

  • 为每个存储库创建一个README文件,以了解项目范围、所需资源、原则和指南

  • 开发模板,实施样式指南,代码检查,并考虑将其集成到CI/CD管道中

  • 比较Markdown的不同风格,并考虑使用AsciiDoc甚至轻量级DITA进行创作

  • 随时了解专业社区共享的文章、研讨会和资源:

    • Write the docs:

      https://www.writethedocs.org/

    • Tom Johnson:

      https://idratherbewriting.com/

    • Anne Gentle:

      https://justwriteclick.com/

    • Brian Dominick:

      https://github.com/briandominick

 

英文原文地址: https://www.fluidtopics.com/blog/tech-talk/an-insiders-look-at-docs-as-code/

 

相关文章:

Doc as Code (3):业内人士的观点

作者 | Anne-Sophie Lardet 在技术传播国际会议十周年之际,Fluid Topics 的认证技术传播者和功能顾问 Gaspard上台探讨了“docOps 作为实现Doc as Code的中间结构”的概念。在他的演讲中,观众提出了几个问题,我们想分享Gaspard的见解&#x…...

【Kafka】消息队列Kafka基础

目录 消息队列简介消息队列的应用场景异步处理系统解耦流量削峰日志处理 消息队列的两种模式点对点模式发布订阅模式 Kafka简介及应用场景Kafka比较其他MQ的优势Kafka目录结构搭建Kafka集群编写Kafka一键启动/关闭脚本 Kafka基础操作创建topic生产消息到Kafka从Kafka消费消息使…...

Java的第十五篇文章——网络编程(后期再学一遍)

目录 学习目的 1. 对象的序列化 1.1 ObjectOutputStream 对象的序列化 1.2 ObjectInputStream 对象的反序列化 2. 软件结构 2.1 网络通信协议 2.1.1 TCP/IP协议参考模型 2.1.2 TCP与UDP协议 2.2 网络编程三要素 2.3 端口号 3. InetAddress类 4. Socket 5. TCP网络…...

【深度学习】High-Resolution Image Synthesis with Latent Diffusion Models,论文

13 Apr 2022 论文:https://arxiv.org/abs/2112.10752 代码:https://github.com/CompVis/latent-diffusion 文章目录 PS基本概念运作原理 AbstractIntroductionRelated WorkMethodPerceptual Image CompressionLatent Diffusion Models Conditioning Mec…...

前端学习——Vue (Day6)

路由进阶 路由的封装抽离 //main.jsimport Vue from vue import App from ./App.vue import router from ./router/index// 路由的使用步骤 5 2 // 5个基础步骤 // 1. 下载 v3.6.5 // 2. 引入 // 3. 安装注册 Vue.use(Vue插件) // 4. 创建路由对象 // 5. 注入到new Vue中&…...

STM32MP157驱动开发——按键驱动(tasklet)

文章目录 “tasklet”机制:内核函数定义 tasklet使能/ 禁止 tasklet调度 tasklet删除 tasklet tasklet软中断方式的按键驱动程序(stm32mp157)tasklet使用方法:button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “tasklet”机制: …...

PostgreSQL构建时间

– PostgreSQL构建时间 select make_timestamp(2023,7,27,7,34,16);...

2023-将jar包上传至阿里云maven私有仓库(云效制品仓库)

一、背景介绍 如果要将平时积累的代码工具jar包,上传至云端,方便团队大家一起使用,一般的方式就是上传到Maven中心仓库(但是这种方式步骤多,麻烦,而且上传之后审核时间比较长,还不太容易通过&a…...

嵌入式linux之OLED显示屏SPI驱动实现(SH1106,ssd1306)

周日业余时间太无聊,又不喜欢玩游戏,大家的兴趣爱好都是啥?我觉得敲代码也是一种兴趣爱好。正巧手边有一块儿0.96寸的OLED显示屏,一直在吃灰,何不把玩一把?于是说干就干,最后在我的imax6ul的lin…...

关于element ui 安装失败的问题解决方法、查看是否安装成功及如何引入

Vue2引入 执行npm i element-ui -S报错 原因:npm版本太高 报错信息: 解决办法: 使用命令: npm install --legacy-peer-deps element-ui --save 引入: 在main.js文件中引入 //引入Vue import Vue from vue; //引入…...

Selenium多浏览器处理

Python 版本 #导入依赖 import os from selenium import webdriverdef test_browser():#使用os模块的getenv方法来获取声明环境变量browserbrowser os.getenv("browser").lower()#判断browser的值if browser "headless":driver webdriver.PhantomJS()e…...

浅谈 AI 大模型的崛起与未来展望:马斯克的 xAI 与中国产业发展

文章目录 💬话题📋前言🎯AI 大模型的崛起🎯中国 AI 产业的进展与挑战🎯AI 大模型的未来展望🧩补充 📝最后 💬话题 北京时间 7 月 13 日凌晨,马斯克在 Twiiter 上宣布&am…...

【CesiumJS材质】(1)圆扩散

效果示例 最佳实践: 其他效果: 要素说明: 代码 /** Date: 2023-07-21 15:15:32* LastEditors: ReBeX 420659880qq.com* LastEditTime: 2023-07-27 11:13:17* FilePath: \cesium-tyro-blog\src\utils\Material\EllipsoidFadeMaterialP…...

实战-单例模式和创建生产者相结合

实际中遇到了这样一个问题: The producer group[xxxx] has been created before, specify another instanceName (like producer.setInstanceName) please. 发生的原因是:一个进程内,创建了多个相同topic的producer。 所以问题就转换成了如何…...

[SQL挖掘机] - 窗口函数介绍

介绍: 窗口函数也称为 OLAP 函数。OLAP 是 OnLine AnalyticalProcessing 的简称,意思是对数据库数据进行实时分析处理。窗口函数是一种用于执行聚合计算和排序操作的功能强大的sql函数。它们可以在查询结果集中创建一个窗口(window)&#xf…...

原生js实现锚点滚动顶部

简介 使用原生js API实现滚动到指定容器的顶部,API是scrollIntoView 使用 let eldocment.querySelector() 获取dom元素el.scrollIntoView()该元素滚动到其父元素的顶部 高级用法 scrollIntoView(Options)//option可以配置如下 options{behavior:smoot…...

使用mysql接口遇到点问题

game_server加入了dbstorage的代码。dbstorage实现了与mysql的交互:driver_mysql。其中调用了mysql相关的接口。所以game_server需要链接libmysql.lib。 从官网下载了mysql的源码:在用cmake构建mysql工程的时候,遇到了一些问题。 msyql8.0需…...

excel绘制折线图或者散点图

一、背景 假如现在通过代码处理了一批数据,想看数据的波动情况,是不是还需要写个pyhon代码,读取文件,绘制曲线,看起来也简单,但是还有更简单的方法,就是直接生成csv文件,csv文件就是…...

ChatGPT长文本对话输入方法

ChatGPT PROMPTs Splitter 是一个开源工具,旨在帮助你将大量上下文数据分成更小的块发送到 ChatGPT 的提示,并根据如何处理所有块接收到 ChatGPT(或其他具有字符限制的语言模型)的方法。 推荐:用 NSDT设计器 快速搭建可…...

FFmpeg-swresample的更新

auto convert的创建 在FFmpeg/libavfilter/formats.c中定义了negotiate_video和negotiate_audio,在格式协商,对于video如果需要scale,那么就会自动创建scale作为convert,对于audio,如果需要重采样,则会创建…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

c# 局部函数 定义、功能与示例

C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...