古法手工编程:从入门到放弃
我无法想象,该如何跟下一代解释,曾经的代码,是人,用手指,一个字符一个字符敲进去的;曾经的“码农”,是有编码自由的,而不只是给AI点LGTM的。
所以记录下这组《古法手工编程:从入门到放弃》,藏在这个无人问津的小站。
什么是“古法手工编程”?
所谓古法,是不依赖聊天窗口,无关乎提示词,而是直面内存布局、字符编码、ABI、IEEE 754 浮点数与未定义行为(UB)。这些不是陈旧的遗老古董,而是支撑整座现代软件大厦的地基与物理法则。每一处看似匪夷所思的语言特性背后,要么是冷酷的硬件指令映射,要么是四十年前祖师爷们艰难权衡留下的历史包袱。
所谓手工,是代码每一行都曾由人脑一字一句推敲,Debug 靠的是肉眼翻看核心转储(Core Dump)与逐行汇编追踪,纯人工与编译器的脾气较劲。没有现代脚手架替你无感抹平差异,也没有上层黑盒替你遮丑。
既然如今 AI 已经能帮我们写代码,为什么还要死磕这些“古法手工”?
在AI掀翻这个行业之前,再感受一下那种纯粹的乐趣。
什么形式?
既然是程序员写给程序员的,那必须有个spec。
科技公司常有个严肃又有趣的环节,叫“验尸”(Post Mortem),对翻车现场做一份详细的记录与检讨。不妨我们也把这些令人哭笑不得的翻车名场面,总结为一套标准的三段论:
- 白鹤亮翅:宗师起手,教科书上读到的一点点基础知识与理所当然的直觉预期。
- 当场打脸:没帅过三秒,实际运行中匪夷所思的输出、报错与翻车现场。
- 见招拆招:如果你还没放弃,那就扒开底层规范与机器本质给你个交代。
什么语言?
我们不局限于某一个特定的语言。横向比较不同语言在处理同一逻辑时的设计取舍与历史羁绊,最能帮我们看清程序设计的本质。语言和环境页面列举了一些我们用到的语言以及如何简单的安装和配置。我们会将重点放在 C/C++, Java, Python, JavaScript, Go, Rust, Bash...好吧,我们没有重点。
是原创的么?
文中的例子来自公开分享、实际工作中的血泪经历,以及面试中犯过的二。
我唯一能保证的是,这些语言和系统层面的bug(嗯,你说是feature就是feature)不是我原创的,没那个水平;解法更不是我原创的,我们那个年代有个网站叫Google,还有个网站叫StackOverflow。
