我的征尘是星辰大海。。。
The dirt and dust from my pilgrimage forms oceans of stars...
-------当记忆的篇章变得零碎,当追忆的图片变得模糊,我们只能求助于数字存储的永恒的回忆
作者:黄教授
手机视频列表
上古程序员回忆录
视频
音频
原始脚本
上古程序员回忆录修正增强版。 我们在坑与黑暗里,走出了整个移动互联网的地基。 这不是技术教程,也不是行业分析,只是一个从功能机时代一路走到服务器底层的老程序员最真实的岁月记忆。 那些苦,那些坑,那些没人理解的绝望与骄傲,如今说出来已经像上古传说。 早年做功能机用的是 Blue 那套平台,纯 C 开发,没有现在的各种框架与保护。 占小的可怜,函数里声明一个稍大的数组,就能直接占溢出,悄无声息崩溃。 递归根本不敢写,几层调用就能把栈撑爆。 内存按字节算,每一块都要抠着用。 现在的程序员很难想象,一个数组,一个指针偏移,就能让人卡上几天几夜。 最刻骨铭心的两个 bug,至今想起来都头皮发麻。 一个是 ARM 内存对齐,X86电脑,模拟器上怎么跑都完美,一烧到真机就 crash。 不是逻辑错,不是代码错,是硬件架构错。 32位 ARM 必须4字节对齐,不对齐直接硬件异常。 没有日志,没有提示,只有 JTAG 硬件调试才能抓到,那是底层给软件工程师最冰冷的警告。 另一个是 SyncML 通讯录同步,本地1000多条记录,前面七八百条永远正常,跑到后面必断。 不是程序错,不是协议错,是运营商 HTTPS 网关会话超时,电脑公网环境永远浮现不出来,只有手机走移动网关才会触发。 为了调试,把手机当 modem,电脑跑程序,手机转发流量,在 VS 里单步断点,抓着真实网关的包。 才把这个隐形杀手揪出来。 当年的开发环境是现在难以想象的地狱。 完整编译一次固件一两个小时,烧录到手机要三四十分钟,一天能有效调试两三次,时间就没了。 低 bug 版带符号信息,体积太大,烧不进去。 Release 版一开优化,代码行号对不上,断点乱跳,常常 Debug 完美运行,Release 直接崩溃。 编译器10%是编译,90%是优化。 早期 C 加加编译器优化极不稳定,Linux 抱怨的从不是语言,是优化器不可控。 代码明明逻辑正确,被优化一番后面目全非,错到你怀疑人生。 Makefile 依赖不准,改了代码没编译进去,对着旧版本查半天 bug 是家常便饭。 后来转做服务器后台,本地 Windows ,远程 Linux 无图形界面服务器,整套服务根本跑不起来。 只能用 GG Server 远程调试,服务器跑程序,本地连断点,一步步看内存、看堆栈。 而如今线上服务不敢停、不能断,只能打日志。 日志多了,时序变,Bug 消失。 日志少了,看不见问题,Hasing Bug 成了常态。 再往后接触服务器底层,IPMI、BMC、BIOS、带外管理,全是 OS 之下的黑盒世界。 当年真正的痛点并不是手动配100台机器这么简单,厂商只给人用的界面,不给机器用的接口。 通用的 IPMI 命令,各家都支持。 但运为真正刚需的高级功能,远程虚拟介质,Virtual Media。 远程挂载、 ISO、固件升级、电源控制。 配置修改,这些核心能力厂商不放进标准 IPMI,要么藏在私有 Web 管理口,要么用私或协议锁死。 管理口的 Web Server 性能极弱,界面卡顿,明明是给管理员手工点的,可数据中心要自动化,要批量部署,要批量升级,人根本点不过来。 于是我们只能干一件事,用 C 加加写 HTTP 客户端,模仿浏览器,把人点鼠标变成程序自动操作。 抓包用 Wireshark 对着 HTTPS 流量一点点拆,逆向登录。 Cookie、Session、额外健全、找接口、猜参数、拼请求。 解析返回,明明是正经运维,硬生生被逼的像在做安全渗透,这还不算最难的。 像 BIOS 固件、BMC 固件、电源固件升级这种要命操作,厂商更不会开放标准接口,只会在 IPMI 里塞私有命令加魔术 Magic number,把二进制固件包层层封装。 通过 IPMI 串行发给板载的 Apron,一步错整块板直接变砖。 没有文档、没有示例、没有报错说明,全靠抓包、试错、猜协议、赌时序。 这才是当年服务器底层最真实的日常,在黑河里用最野的办法干最稳的活。 这个底层行业,极窄、极深、极不通用。 精通一家厂商的硬件,换一家就要重学。 对人要求极端矛盾,要极致严谨,又要能猜黑盒里的玄学问题。 要耐心啃协议、抠细节,又要能应对突发的崩溃救火。 行业利润薄,工资溢价有限,却扛着整个 IT 基建的稳定性。 客户只认常年不宕机,不敢用新东西,创新空间极小,只能在保守与稳定里小心翼翼的走。 如今 AI 风起云涌,上层应用很容易被生成、被替代。 但底层固件、BIOS、编译器、硬件适配,极度依赖暗知识、坑经验,厂商恩爹机密 甄姬踩坑的直觉。 AI 可以写样板代码,却无法理解一个比特错误如何让硬件死机,无法体会时序差一纳秒带来的全线崩溃。 越底层越难被取代。 再看整个产业链,大陆拥有庞大的市场与产能,而台湾在 BIOS 固件 无器代工,底层适配。 靠着几十年与 Intel、AMD 的深度绑定,NDA 机密人才生态,拥有难以替代的优势。 这套东西不是图纸,不是工厂,是人、信任、生态、经验堆出来的,搬不走、挖不走、抄不走。 只有和平稳定才有整合与共赢的可能,否则人才流失生态打散,再难重建。 我们这代人没有站在风口,没有光鲜的故事。 我们在功能机的崩溃里,在嵌入式的战役处理,在固件的黑盒里,在编译与烧录的漫长等待里。 一点点把整个移动互联网数据中心服务器基建的地基踩出来。 那些曾经让人崩溃的坑,那些说出来年轻人听不懂的术语,那些通宵调试的夜晚,那些无人理解的坚持,最后都变成了一句话,我们不是写代码的,我们是在黑暗里给后来者铺路的人。 这段岁月,不酷、不炫、不赚钱,却足够硬核,足够一生骄傲。
修正脚本
上古程序员回忆录修正增强版。 我们在坑与黑暗里,走出了整个移动互联网的地基。 这不是技术教程,也不是行业分析,只是一个从功能机时代一路走到服务器底层的老程序员最真实的岁月记忆。 那些苦,那些坑,那些没人理解的绝望与骄傲,如今说出来已经像上古传说。 早年做功能机用的是 Blue 那套平台,纯 C 开发,没有现在的各种框架与保护。 栈小得可怜,函数里声明一个稍大的数组,就能直接栈溢出,悄无声息崩溃。 递归根本不敢写,几层调用就能把栈撑爆。 内存按字节算,每一块都要抠着用。 现在的程序员很难想象,一个数组,一个指针偏移,就能让人卡上几天几夜。 最刻骨铭心的两个 bug,至今想起来都头皮发麻。 一个是 ARM 内存对齐,X86电脑,模拟器上怎么跑都完美,一烧到真机就 crash。 不是逻辑错,不是代码错,是硬件架构错。 32位 ARM 必须4字节对齐,不对齐直接硬件异常。 没有日志,没有提示,只有 JTAG 硬件调试才能抓到,那是底层给软件工程师最冰冷的警告。 另一个是 SyncML 通讯录同步,本地1000多条记录,前面七八百条永远正常,跑到后面必断。 不是程序错,不是协议错,是运营商 HTTPS 网关会话超时,电脑公网环境永远复现不出来,只有手机走移动网关才会触发。 为了调试,把手机当 modem,电脑跑程序,手机转发流量,在 VS 里单步断点,抓着真实网关的包。 才把这个隐形杀手揪出来。 当年的开发环境是现在难以想象的地狱。 完整编译一次固件一两个小时,烧录到手机要三四十分钟,一天能有效调试两三次,时间就没了。 低 bug 版带符号信息,体积太大,烧不进去。 Release 版一开优化,代码行号对不上,断点乱跳,常常 Debug 完美运行,Release 直接崩溃。 编译器10%是编译,90%是优化。 早期 C++编译器优化极不稳定,Linux 下抱怨的从不是语言,是优化器不可控。 代码明明逻辑正确,被优化一番后面目全非,错到你怀疑人生。 Makefile 依赖不准,改了代码没编译进去,对着旧版本查半天 bug 是家常便饭。 后来转做服务器后台,本地 Windows ,远程 Linux 无图形界面服务器,整套服务根本跑不起来。 只能用 GG Server 远程调试,服务器跑程序,本地连断点,一步步看内存、看堆栈。 而如今线上服务不敢停、不能断,只能打日志。 日志多了,时序变,Bug 消失。 日志少了,看不见问题,Hasing Bug 成了常态。 再往后接触服务器底层,IPMI、BMC、BIOS、带外管理,全是 OS 之下的黑盒世界。 当年真正的痛点并不是手动配100台机器这么简单,厂商只给人用的界面,不给机器用的接口。 通用的 IPMI 命令,各家都支持。 但运维真正刚需的高级功能,远程虚拟介质,Virtual Media。 远程挂载、 ISO、固件升级、电源控制。 配置修改,这些核心能力厂商不放进标准 IPMI,要么藏在私有 Web 管理口,要么用私有协议锁死。 管理口的 Web Server 性能极弱,界面卡顿,明明是给管理员手工点的,可数据中心要自动化,要批量部署,要批量升级,人根本点不过来。 于是我们只能干一件事,用 C++写 HTTP 客户端,模仿浏览器,把人点鼠标变成程序自动操作。 抓包用 Wireshark 对着 HTTPS 流量一点点拆,逆向登录。 Cookie、Session、额外鉴权、找接口、猜参数、拼请求。 解析返回,明明是正经运维,硬生生逼得像在做安全渗透,这还不算最难的。 像 BIOS 固件、BMC 固件、电源固件升级这种要命操作,厂商更不会开放标准接口,只会在 IPMI 里塞私有命令加魔术 Magic number,把二进制固件包层层封装。 通过 IPMI 串行发给板载的 Apron,一步错整块板直接变砖。 没有文档、没有示例、没有报错说明,全靠抓包、试错、猜协议、赌时序。 这才是当年服务器底层最真实的日常,在黑河里用最野的办法干最稳的活。 这个底层行业,极窄、极深、极不通用。 精通一家厂商的硬件,换一家就要重学。 对人要求极端矛盾,要极致严谨,又要能猜黑盒里的玄学问题。 要耐心啃协议、抠细节,又要能应对突发的崩溃救火。 行业利润薄,工资溢价有限,却扛着整个 IT 基建的稳定性。 客户只认常年不宕机,不敢用新东西,创新空间极小,只能在保守与稳定里小心翼翼地走。 如今 AI 风起云涌,上层应用很容易被生成、被替代。 但底层固件、BIOS、编译器、硬件适配,极度依赖暗知识、坑经验,厂商NDA机密、真机踩坑的直觉。 AI 可以写样板代码,却无法理解一个比特错误如何让硬件死机,无法体会时序差一纳秒带来的全线崩溃。 越底层越难被取代。 再看整个产业链,大陆拥有庞大的市场与产能,而台湾在 BIOS 固件、晶圆代工,底层适配。 靠着几十年与 Intel、AMD 的深度绑定,NDA 机密人才生态,拥有难以替代的优势。 这套东西不是图纸,不是工厂,是人、信任、生态、经验堆出来的,搬不走、挖不走、抄不走。 只有和平稳定才有整合与共赢的可能,否则人才流失生态打散,再难重建。 我们这代人没有站在风口,没有光鲜的故事。 我们在功能机的崩溃里,在嵌入式的异常处理,在固件的黑盒里,在编译与烧录的漫长等待里。 一点点把整个移动互联网数据中心服务器基建的地基踩出来。 那些曾经让人崩溃的坑,那些说出来年轻人听不懂的术语,那些通宵调试的夜晚,那些无人理解的坚持,最后都变成了一句话,我们不是写代码的,我们是在黑暗里给后来者铺路的人。 这段岁月,不酷、不炫、不赚钱,却足够硬核,足够一生骄傲。
back to top