1. We need visual programming. No, not like that (blog.sbensu.com)
我们需要视觉编程,但不是那种
视觉编程环境大多未被使用,因为它们试图替代代码语法和业务逻辑,而开发者实际上并不需要可视化这些。相反,开发者更关注可视化软件的隐式方面,如状态转换、内存布局或网络请求。如果视觉编程从这些开发者已习惯可视化的方面入手,将更可能成功。
视觉编程为何失败?
开发者声称需要“视觉编程”,但实际从未使用流程图来可视化简单代码逻辑。他们偏好文本表示来处理业务逻辑。观察发现,开发者会花费时间可视化代码的其他重要但难以理解的方面,例如:
- 代码库整体结构图
- 计算机网络连接图
- 内存中数据布局图
- 状态机转换图
- 请求/响应协议的泳道图
这些可视化帮助开发者应对复杂问题,如理解内存布局对性能的影响,或跟踪外部依赖。但现有工具中,只有少数如DOM检查器、火焰图和SQL表图被集成到开发环境中。
开发者实际需要的可视化类型
1. 代码库可视化
用于快速理解大型代码库的结构和复杂度。
- Treemap:以文件大小和颜色指标(如代码复杂度)展示代码库概览,帮助识别关键模块。
- Sourcetrail:开源工具,可视化类层次和依赖关系,支持代码与图表交互,但未集成到主流编辑器中。
- 代码保留图:通过颜色追踪代码演变,识别稳定和过时的代码部分。
2. 网络和服务拓扑图
展示服务间的连接和依赖,常见于云服务文档(如AWS)。这类图对团队新人尤为重要,能快速传达系统架构,但通常手动创建且易遗漏细节。
3. 内存布局图
帮助开发者理解数据在内存中的排列方式,对性能优化至关重要。
- 例如,Rust中
Rc<T>指针的内存布局图,比代码描述更直观。 - Rust的所有权模型可通过树状图清晰展示,增强理解。
4. 状态机图
可视化状态转换,常用于复杂业务流程(如支付处理)。例如,Stripe的支付意图状态机图,将状态与UI关联,简化理解。Idris文档中的状态机图则辅助解释类型系统概念。
5. 泳道图
用于客户端/服务器请求架构,展示交互顺序和依赖。
- 例如,Stripe结账流程的泳道图,显示各方请求和响应。
- 分布式系统中,泳道图可诊断时序问题,如Jepsen分析中的数据一致性检查。
现状与改进
大多数可视化是临时制作(如手绘草图),未集成到开发工作流。作者建议从现有代码或测试自动生成图表,例如:
- 从Rust类型注释生成内存布局图或所有权树。
- 从gRPC服务定义生成网络拓扑图。
- 从端到端测试生成请求/响应泳道图。
总之,视觉编程应聚焦于开发者已自然可视化的软件方面,而非替代代码语法,从而真正提升开发效率和理解深度。