作为一个写了十年Go代码的程序员,我第一次接触《战锤40k》的时候,脑子里冒出的第一个问题是:这帮人类,仗都打成这样了,怎么科技还这么拉胯? 你看看,星际战士还在用链锯剑怼人,钛族那边都用上轨道轰炸了,灵族更是玩起了次元科技,人类帝国呢?还在靠几万年前的图纸造东西。
这不是我瞎说,你要是在Go里写个接口,接口定义了但实现被锁死了,那就跟帝国科技被锁一个道理。
科技锁死了,但不是“没人写代码”
很多人觉得“科技被锁”是因为战争、野蛮、宗教迫害,这些都对,但你往深了想——锁死科技的不是外部敌人,是人类帝国自己造的“架构”,就跟我们写Go程序一样,最坑爹的bug往往不是第三方库的问题,是你在设计初期就埋下的坑。
人类帝国在30k时期,也就是大远征时期,科技水平其实还行,那时候帝国还有科技修会,还在做研发,还在造新东西,但到了40k时期,帝国变成什么了?变成了一个只维护不迭代的系统,你现在查任何一个Go项目的历史,要是三年前就停止合并新特性,光修bug,修到后来那代码根本动不了——帝国就这么个状态。
而且帝国还有个更狠的操作:禁止AI,铁人叛乱之后,帝国对所有人工智能深恶痛绝,任何形式的AI都被视为异端,这在Go里相当于什么?相当于你禁止使用goroutine,就问你代码跑不跑得动?
为什么没人敢动代码?因为测试用例全挂了
你要说帝国里没有聪明人?有,机械神教里全是技术宅,但问题是——机械神教的神甫们不敢拆东西,他们处理科技的方法是:拿到一件古代科技,念祷文,上香,然后照着原样复制,要是复制不出来,那就复制个弱化版,这不像程序员,这像运维。
我打个比方,你在Go里有个接口:
type STC interface {
Build(module string) (Technology, error)
Repair(tech Technology) error
}
STC,也就是标准模板构造器,是帝国科技的根基,原本这东西应该能根据需求自动造东西,就像Go的go generate,输入参数输出代码,但现在帝国里的STC要么坏了,要么没人敢改,谁敢乱改?改出意外,整个星球可能就炸了,而且没有回滚机制。
帝国科技发展变成了一行死循环:
发现古代科技 -> 2. 拜一拜 -> 3. 复制 -> 4. 复制品性能下降 -> 5. 更不敢改了 -> 回到1
这不就是你们公司那个没人敢动的老项目吗?
表格对比:帝国科技 vs 现代软件工程
我做个对比,你用Go的视角看帝国科技,特别清晰:

| 帝国科技 | Go项目对应 |
|---|---|
| STC(标准模板构造器) | 一个长期无人维护的go generate模板 |
| 技术异端审判庭 | 代码审查委员会,谁的PR有创新就毙掉 |
| 机械神教 | 一群只会git clone不会git commit的运维 |
| 禁止AI | import "ai"直接被linter报错 |
| 古代科技遗迹 | 遗留系统,注释全是拉丁文 |
| 科技退化 | 功能越来越弱,兼容性越来越差 |
你别笑,帝国就是这么玩的。创新 = 异端 = 死,这换哪个程序也不敢提PR啊。
还有一点:帝国的世界观里没有“向后兼容”
你写Go的时候,哪怕重构再狠,也得想着别人怎么用你的包,但帝国不一样,帝国最大的问题不是科技退化,是科技已经脱离人的理解范围。
举个真实例子——帝皇生前留下的黄金王座,这东西是干啥的?一开始可能是通讯装置,后来变成维生系统,再后来成了导航灯塔。没人知道它原本是做什么的,只能照着手册操作,手册还是拉丁文,残缺不全,这不就跟你接手一个没有文档、没有测试、没有README的Go项目一样吗?
而且帝国还一个骚操作:技术官僚把知识当成特权,机械神教的神甫们,宁愿科技烂在手里也不愿意外传,为啥?因为知识就是权力,你要是知道怎么造雷火炮,你就可能威胁到他们的地位,所以他们更倾向于把科技包装成“宗教仪式”,你来修引擎?先背三天的经文。
这就好比你组里有个老员工,写了核心代码但不写注释,不写文档,所有配置都硬编码在他自己的环境变量里,他一走,项目直接瘫痪。
科技锁死的三个根本原因
我用Go的三个关键字来总结:
-
init()不可控,帝国的创新被系统自带的“反创新init()”给覆盖了,任何新想法都会在“异端审判”这一步被杀死。 -
defer延迟太多,修复科技的计划永远被“等打完这场仗”、“等镇压完叛乱”、“等大裂隙消停”给延迟了,最后defer根本没执行。 -
package main变成了package god,科技发展不再由“科学方法”驱动,而是由“教条”驱动,传了工艺本,不能问“为什么”,只能问“怎么做”。
其实还有个深层原因:人类帝国的宇宙观是“倒退”的,黄金时代是最牛逼的,现在只能捡破烂,这跟Go的哲学完全相反——Go的哲学是“新的就是好的”,但帝国不是,帝国觉得“旧的才是好的”,这种文化一锁,科技就死透了。
作为一个写Go的人,我其实挺理解帝国的,你想想,要是你今天写的代码,将来一万一千年后还有人用,你怕不怕?你大概也会选择写死一个接口,别让人乱改。
但这也不是办法。锁死在某个版本的系统,终有一天会崩溃,帝国现在就是靠着帝皇的灵魂和亿万个牺牲在撑着,而撑着的时候,连个fmt.Println("Hello World")都没人敢写。
科技被锁的原因说到底就一句话:人比bug可怕。
本文来自作者[kyadmin]投稿,不代表ac米兰官网立场,如若转载,请注明出处:http://www.milanomuse.com/keji/1148.html
评论列表(4条)
我是ac米兰官网的签约作者“kyadmin”!
希望本篇文章《战锤40k的人类科技为什么被锁?一个Go语言程序员的视角》能对你有所帮助!
本站[ac米兰官网]内容主要涵盖:AC米兰,ac米兰中文,AC米兰官网
本文概览:作为一个写了十年Go代码的程序员,我第一次接触《战锤40k》的时候,脑子里冒出的第一个问题是:这帮人类,仗都打成这样了,怎么科技还这么拉...