作为一个资深的软件工程师,我经常遇到其他/她开发人员大量的重复问题。过去只靠写博客,现在,我有了四种方式来解决:
- 博客。我的博客 phodal.com 上有 850+ 的博客
- 工具。创造开源工具解决重复性问题,如:ADR、Lemonj、Coca、Clij
- 开源电子书。系统性的归纳某一个领域相关实践和模式,如:《Serverless 应用架构》
- 知识平台。结合工具和电子书,如 DevOps 知识平台:Ledge
即使如此,依旧没有解决一个问题:我需要人力来分析项目、再抛出这些链接。于是,过去我一直就在想:能否做一个工具来取代自己? 当然了,我的真实意思不是:取代我自己,而是取代我做的那些重复性活动。(PS:等写完之后,再写一个自动化写 PPT 的工具,就完美了。)
所以,我开始编写一个新的工具,一个关于对代码进行自动化分析与建议的工具。
Coco:自动化分析与建议工具
在 Coco 的 README ( https://github.com/phodal/coco )里,可以看到现在规划的 1.0 的相关的 Todo 列表。从某种意义上来说,这是一个 AI 工具(专家系统),它依赖于资深工程师的大量的经验。它的难度主要在于:
- 工具的 MVP 版本。验证工具在技术上是可行的(PS:从我的角度来看,它并不存在问题)
- 持续性的经验输入。持续完善整个工具的建议体系和架构
- 上下游生态完善。获取上下游工具相关的资料和数据(PS:如 DevOps、云原生相关)
- 避免功能膨胀。必要的情况下,通过插件的方式来扩展功能
Coco 与 Coca 的关系
Coca 是笔者(@phodal)写的一个用于系统重构、系统迁移和系统分析的瑞士军刀。它可以分析代码中的测试坏味道、模块化分析、行数统计、分析调用与依赖、Git 分析以及自动化重构等。
Coco 这个名字的来源是椰子鸡,正如 Coca 项目(https://github.com/phodal/coca )的来源是 Coca Cola,只是维度上由喝的变成吃的而已。Coco 是 Coca 的姊妹工具,与 Coca 工具是相互补充。
Coco:自动化分析与建议工具
Coco 要实现的主要功能是:
- 分析。对项目进行全面化的分析,如 Git 历史、模块化分析、框架使用等
- 报告。以可视化和文档的形式输出项目的总览信息(结合 D3 可视化的形式)
- 建议。针对于项目中的问题,进行自动化的建议
- 成熟度。(TBC,待定)
从里程碑来说,我们所要做的功能特别多。而结合 Coca 和 DevOps 知识平台 Ledge 在开源社区经受了一年多的洗礼,它们受到了越来越多的开发者的喜爱。与此同时,在这一年多的时间里,我也将自己的经验不断也输入到了项目中。
与此同时,我们将先创建一个组织:Inherd,作为这一系列工具的核心团队。
Coco 技术栈
作为一个 CLI 工具,我本该选取 Golang 作为主要技术栈的。但是,经常与 Ledge 的开发者们讨论一番后,大家决定使用 Rust(虽然大部分人都没有经验)作为主要语言。与此同时,作为一个已经使用了一年的 Rust 语言的开发者,我觉得这并不是太大的难题。与此同时,这个工具未来也将在浏览器上运行,Rust 的 Web Assembly 支持比几大主流语言友好。
除了 Rust 之外,我们还需要可视化相关的报告等,为此我们还需要前端相关技术栈的开发,如 D3.js。当然了,能结合 Web Assembly + D3.js + 其它框架也是一个不错选项。
Coco 进度
对于写一个工具来说,最难的是开个头,随后就是补充功能和重构了,谁都能做。
当前主要进展:
- 使用 libgit2 实现对 Git 相关的分析中。
- 集成 Tokei 实现 CLOC 相关的行数统计。
- 集成 Scie 的框架检测功能,对技术栈进行可视化
以下主要模块还未开始:
- 模块化分析
- 可视化报告
- 标签生成(AI,分词)
- 改进建议
- 工具建议
本文转载自微信公众号「phodal」,可以通过以下二维码关注。转载本文请联系phodal公众号。