各位舟友们,大家好!我是软海舟的舟主。
今天早上,舟主在巡视“软海”的时候,从外海打捞上来一个极度生草,却又让人无法反驳的漂流瓶。一位名叫 Dmitrii 的水手,在 X 上发了这么一段如同套娃般的“编程界历史周期律”:
Strong men create C++
C++ creates good times
Good times create weak men
Weak men create Python
Python creates hard times
Hard times create strong men
翻译成咱们水手能听懂的大白话就是:硬汉创造了 C++,C++ 缔造了好时代;好时代滋养了软弱者,软弱者造出了 Python;Python 带来了艰难岁月,艰难岁月又再次磨砺出硬汉。
这短短六句话,简直把软件工程的辛酸史写成了史诗。今天咱们就站在甲板上,迎着海风,好好拆解一下这条“软海宿命论”。
1. 为什么说“硬汉创造了 C++”?
想象一下,你要在波涛汹涌的软海中建造一艘航空母舰。
C++ 这门语言,就像是给你发了一堆最原始的铁矿石、熔炉和铁锤。你不仅要自己画图纸,连每一个铆钉(指针)、每一块钢板(内存分配和释放)都必须你亲手来敲。
稍微一分心,忘记释放内存,船底就会慢悠悠地漏水(内存泄漏);指针哪怕指错了一毫米,锅炉就会瞬间爆炸,连个全尸都留不下(段错误 Core Dump)。天天在这种生死边缘疯狂试探、被编译器花式折磨,能活下来的 C++ 程序员,哪一个不是被逼成了铁骨铮铮的“硬汉”?
2. C++ 缔造了好时代,滋养了“软弱者”
硬汉们用 C++ 砸出了操作系统、浏览器内核、数据库底座和顶级游戏引擎。这艘底层的钢铁巨轮太稳了,运行速度快如闪电。
于是,咱们迎来了“好时代”。在这个时代里,新上船的水手们看着前辈们徒手捏钢板,觉得太苦、太累了。“为什么我们要关心内存管理?为什么这语法比甲骨文还难懂?我想像搭乐高积木一样造船!”
于是,“软弱者”们(打双引号,这里指追求开发效率的开发者)发明了 Python。
3. Python 是如何带来“艰难岁月”的?
有了 Python,造船简直变成了一场狂欢。
不用管类型,不用管内存回收。需要什么功能?import 一下,造船的零件天上掉。Python 就像是用充气皮筏艇和强力胶带拼接起来的快艇,五分钟就能下水测试,速度爽到飞起。水手们纷纷变成了“调包侠”,沉浸在美好而慵懒的午后时光里。
但好景不长,当你的业务从小渔船变成了万吨巨轮时,灾难(艰难岁月)降临了:
- 运行时的地雷: Python 的动态类型,让你在风平浪静时写得飞起,结果船开到太平洋中心,代码突然报个错:“对不起,你传给我的不是桨,是个香蕉!”船当场抛锚。
- 性能的深渊: 臭名昭著的 GIL(全局解释器锁)让你的船明明有 8 个发动机(多核 CPU),却只能一次启动一个。船重了,速度慢得像老爷爷推车。
- 胶水融化: 庞大且缺乏类型约束的 Python 代码库,最后会变成一团缠在一起的海带,谁碰谁死,维护成本直冲云霄。
4. 艰难岁月,再次呼唤硬汉
当 Python 写成的系统因为性能瓶颈被流量彻底冲垮,当服务器账单高到连老板都想跳海的时候,怎么办?
大家只能再次满大洋地张贴悬赏令,把那些隐居的“硬汉”们请出山。硬汉们咬着牙,潜入底层的机舱,用 C++(或者现在的当红炸子鸡 Rust),把那些性能拉胯的 Python 核心模块,一行一行地用精钢重新重写一遍。
于是,命运的齿轮完成了一次闭环。硬汉们再次接管了船舵。
舟主曰:
这个段子虽然极尽戏谑,但却道出了软件工程一个永恒的真理:“万物皆是权衡(Trade-off)”。
C++ 拿“开发者的命”换“机器的性能”;Python 拿“机器的性能”换“开发者的命”。根本没有绝对的硬汉和软弱者,只有不同的海域和不同的任务。
在风向未定、需要快速抢占新航线的探索期,请毫不犹豫地开上 Python 这艘充气快艇去试错;但当你找到了新大陆,需要建立稳固的帝国时,别忘了请回那些懂 C++ 和 Rust 的硬汉,为你夯实钢铁的地基。
作为一名成熟的软海水手,左手能写优雅的 Python 快速交付,右手能拿 C++ / Rust 死磕底层性能,你,就是这片海上最无敌的存在。
以上就是舟主今天的分享。我是软海舟的舟主,愿各位舟友都能找到适合自己的“船”,扬帆起航,探索无限可能!我们下期再见!
另,Python 现在并不完全像上面调侃的那样, No-GIL 已经落实;type hint + 类型检查,也能在运行前发现很多错误。只不过, Python 并不强制你什么,甚至你拥有语法错误的代码,也能上生产环境,只要没有被运行到,就不会报错。。。一切,在于人为。