
【开发者说】LLPkgStore 实训小结|“写代码”不是第一步!
在第三期1024实训营结营成果展示会上,来自七牛云 Go+ 团队的技术专家、Goproxy.cn 开源项目作者、大学生创业者、连续创业者盛傲飞,作为 LLPkgStore 小组的带教导师,为同学们带来了一场极具启发性的项目总结分享——以过去三个月实训项目为蓝本,阐述了软件开发实践中"写代码不是第一步"的核心命题,并针对本次实训项目开展了一段小结性质的内容分享。
盛傲飞 GitHub 个人主页:https://github.com/aofei
“写代码”不是第一步
实训过程中,让我印象挺深的是,同学们接到任务后,比起先进行设计或讨论,普遍都更偏好直接开始写代码。这看起来非常“积极主动”,但后面发现这会带来重复返工、接口没对上、理解不统一等各类问题。
并不是说写得快就是不好的,我自己以前也经常这么干。但慢慢地,我会意识到,写代码不应该是第一步。
尤其是现在我们身处 AI 时代,GitHub Copliot、Cursor 等各类 AI 编程工具,已大幅降低了写代码的门槛。于是,“怎么写”已经不是最大的问题了,反倒是“写什么”、“怎么设计”这些问题变得更难、也更重要。
很多时候,真正要花时间动脑子的,是写代码之前的那部分工作——我们到底要解决什么问题、输入输出是什么、和其他模块该怎么协作、以及什么才是更简单或更合适的解决方案等。
同学们可以尝试养成一个小习惯,哪怕只是写一页草稿,也要提前把目标、输入/输出接口这些问题想清楚,这能帮你省下很多后续的沟通成本、返工时间。这不仅是为了更好的交付,也是一种更顺畅的团队合作方式。没画图纸就盖楼,盖得快,也塌得快。有时候一开始慢一点点,其实能让你走得更稳,也走得更远。
项目小结:依赖管理,不必重头来过
另外,我想针对本次课题做一个小结性质的内容分享。
在 LLPkgStore 这个项目中,我们面对的第一个挑战是 C/C++ 库的依赖到底该怎么管理?这类库不像 Go 生态那样有统一的版本规范、标准的模块机制,甚至有时候连个固定格式的版本号都没有。一开始我们想过是不是该从0开始去设计一套全新的依赖管理系统,彻底推翻重来。但最后,我们还是选择了不另起炉灶,而是在 Go Modules 的机制之上做延展。
这个决策的出发点其实挺简单的:
(一)Go Modules 已经解决了依赖管理中最核心的一些问题,比如它有清晰的版本语义模型(SemVer + MVS),为我们提供了基础保障的约束版本演进的逻辑。
(二)它的工具链非常完善,像是 Go Get、Go List、Go Module Proxy 等都是现成能用的,开发者也都对它们非常熟悉,这意味着迁移成本非常低,学习门槛也非常低。
(三)还有比较重要的一点,它具备天然的对可复现构建的支持。我们特别想强调一下,没有可复现构建保证的系统,其实本质上不能算是一个真正的依赖管理系统。如果一个系统今天构建得出来,明天因为网络、下游变动等变量因素就构建不出来了,或者说构出来的内容不一样了,那它就完全不具备可被信任的基础。Go Modules 的版本号、代码快照、构建路径都固定下来了,本质上是为了让每次构建都是可验证的,可复现的。这是我们在做跨语言依赖管理时,必须要继承下来的一个底线!
我们希望把 Go Modules 当做一个稳定的地基,在上面做一些针对性的增强。我们做了三件事:
(一)引入了 LLPkg 这个概念,把 C/C++ 库封装成 Go Modules 的风格的单元,统一了消费方式。
(二)为官方 LLPkg 设计了 llpkgstore.json 映射机制,在一定程度上弥补了 C/C++ 库原始版本号混乱的问题。
(三)构建了一套自动验证、构建与分发的工作流,补上了 Go Modules 无法覆盖的那部分,比如,二进制管理。
所以,我们并没有从0开始写一套全新的东西,而是搞清楚什么是已有系统里真正有价值的部分,然后在它之上构建新的能力——我们不是在重新造轮子,而是让轮子跑得更远。
附:LLPkgStore 项目简介
本期实训营的同学们围绕「LLGo 依赖管理」展开探索,重点讨论如何让 LLGo 能像管理普通 Go 包一样来管理 C/C++ 库。
在本次实训中,同学们提出了 LLPkgStore 方案,通过维护版本映射表、引入多层验证与可复现性构建,并结合 C/C++ 专用的二进制管理器(Conan),尝试为 LLGo 构建更完善的依赖管理机制。最终目标是让 LLGo 开发者能更加便捷地使用和分发 C/C++ 库,为跨语言开发带来更多可能。
从依赖版本的语义化转换,到官方/第三方包的分发与安全审计,再到自动化的构建测试流程,本期实训营通过一系列实战与迭代,搭建起了 LLGo 的全新生态雏形。未来,随着更多工具链和社区力量的加入,LLGo 有望进一步打破语言边界,成为跨语言开发的一站式解决方案。
LLGo 官方仓库:https://github.com/goplus/llgo
LLPkgStore 工具链仓库:https://github.com/goplus/llpkgstore
LLPkg 产物仓库:https://github.com/goplus/llpkg