无尘阁日记

无尘阁日记

五个师傅:Lisp、PHP、Python、Node、Java 都是什么脾气
silcano

前几天有人问我,这几个语言到底啥区别。我本来想甩一张对比表过去,后来觉得没劲——表里只有速度、生态、岗位数量,没有人。语言是人做出来的东西,都带着作者的脾气。

所以这次不列表。我给你找五个师傅,都是干同一个活的:做一个小系统,能下单、能算钱、能把订单显示在页面上。

你看完大概就知道自己该找谁了。

· · ·

一、Lisp:那个退休的数学家

Lisp 出生在 1958 年,比在场所有人都老,比 Fortran 还早一年。设计它的人叫麦卡锡,本来是搞数学的。

别人盖房子,他造模具。他造出来的东西,你可以拿它现场再造一门语言出来。

他的世界观只有一句话:程序和数据的形状是一样的。所以你写的东西长这样:(+ 1 2)。一堆括号,一层套一层。

第一次看到的人都会说:这玩意儿人能读?

但你读久了会反应过来——那不是括号,那是一棵树。你不是在写文本,你是在直接摆一棵语法树。别人是先写代码、再让编译器帮你解析成树;他是上手就摸树。

所以 Lisp 的人有一种奇怪的自豪感:他们觉得别的语言都是二手货,只有自己是在直接跟本质打交道。这话有点狂,但不算全错。

他清高,不迎合,也不太管你项目明天要不要上线。可 Emacs 到今天还是很多人每天开着的编辑器,早期的 AI 研究基本都是它写的,Clojure 这门现代 Lisp 现在还养着一批死忠。

说白了:Lisp 不是拿来赶工期的,是拿来让人明白编程到底是怎么回事的。

· · ·

二、PHP:街口那家五金店老板

PHP 1995 年出生,出身很朴素——就是为了让网页上能插一段代码。

他是个五金店老板。店里有螺丝刀、有水管、有水泥、有胶带,柜台上还压着一张手写价目表,东西堆得乱七八糟,找个扳手要翻三个抽屉。

你嫌他乱。可凌晨两点你家马桶爆了,整条街只有他开门,而且他真的能给你修好。

这就是 PHP。它被骂了二十年,不一致、丑陋、函数命名像随手抓的,它从来不还嘴。它只是继续把你的订单处理掉。

它的设计哲学不是优雅,是随便你怎么来。一个 .php 文件传到服务器上,刷新浏览器,就跑起来了。不用编译,不用构建,不用 node_modules,不用先搭个什么框架。写错了它就报一行错,改一下再刷新。

这件事听起来很土,但它解释了一件事:全世界七成以上的网站,后端都有它。WordPress、维基百科、早年的 Facebook,都是。

他的脾气:务实到有点自暴自弃。不装,不端着,也不追求好看。你让他干脏活,他二话不说。

说白了:那种不好看、但从来不掉链子的人。

· · ·

三、Python:那个会讲人话的翻译官

Python 1991 年出生。作者 Guido 当初的目标很朴素:写的时候少打几个字,读的时候不用猜。

你去办一件特别复杂的政务手续,旁边一堆表格全是术语。Python 就是那个凑到你耳边小声说其实就三步的人。

它有个别的语言不太有的特点:缩进就是语法。你排得整齐,程序才对。听着像管得宽,但你写两周就会发现,它的代码读起来像伪代码,像英文。

有件事得说清楚:Python 不是最快的。它比 C 慢几十倍,比 Java 也慢不少。

但它把这件事外包了。那些真正吃性能的活,是 C 写的库在干,Python 在上面粘着当指挥。所以它的外号叫胶水语言——不自己下场搬砖,负责把搬砖的人串起来。

这也是为什么 AI 这波它是最大赢家。不是因为它算得快,是因为所有算得快的东西,都先给它留了个接口。

他的脾气:温和,不挑事,也不跟你争。代价是把重活都推给别人干,自己心里有数。

说白了:他不擅长赢短跑,他擅长让你忘掉自己在跑。

· · ·

四、Node:一个人扛全店的杂技演员

Node 是 2009 年的,五个里最年轻。作者 Ryan Dahl 干了一件很叛逆的事:把浏览器里那门脚本语言,搬到服务器上来。

想象一家只有一个服务员的餐厅。他点完单,不站在厨房门口等出菜,转身就去下一桌。厨房好了喊一嗓子,他再回来端。

这就是它的核心:事件循环。单线程,不阻塞,等 I/O 的时候绝不傻站着。

好处非常实在。一万个用户同时在线,那些连接大部分时间都在等——等数据库、等网络、等硬盘。Node 一个人就能招呼过来,因为它从来不为谁停留。

坏处也很实在:这个服务员只有一只手。他要是被拉住算一道特别难的数学题(专业说法叫 CPU 密集),全店都跟着干等。所以 Node 适合大部分时间都在等的活,比如聊天、推送、接口网关;不适合一直在算的活。

还有一点,它继承了 JS 的老包袱。早年那套回调套回调的代码,写出来像金字塔,人称回调地狱。这个坑后来用 Promise 和 async/await 填了大半,但历史债还在。

他的脾气:灵活、能扛、上手快。前端的语言直接在后台用,一个人从前写到后,这是他最大的诱惑。

说白了:Node 的卖点从来不是快,是不浪费等待的时间。

· · ·

五、Java:穿西装的项目经理

Java 1995 年出生,跟 PHP 同岁。但这两位从出生那天就走在两条路上。

Java 是个穿西装的项目经理。进门先填表,出门先签字,每一步都要留备案。你觉得他烦。

他背后其实站着一整个团队:JVM。Java 只是这个平台里最出名的那个员工,同一屋檐下还有 Kotlin、Scala、Groovy。所以严格说,你面对的不是一门语言,是一个班子。

它的做法是:先把代码编译成一种中间语言,叫字节码,再由虚拟机在你机器上翻译成真正的机器码。好处就是那句喊了二十多年的口号——一次编写,到处运行。换台机器、换个系统,程序照样跑。

代价就是啰嗦。一个只管存取的小类,能写出二十行 getter 和 setter。写的人骂,读的人也骂。

但啰嗦有啰嗦的用处。正因为什么都写明白了、类型都定死了、规矩都摆在那儿,一个三百人的团队接手一个跑了五年的项目,才不至于互相踩脚。银行、电商、安卓,这些地方到今天还是它的地盘。

他的脾气:不追求你写得爽,追求三年后接手的人不骂娘。

说白了:慢,但从来不塌。

· · ·

好,五个人都介绍完了。现在说点得罪人的话。

你去网上看语言之争,九成九的吵架,本质是我用得顺穿上了一件技术上更优的外套。

真要比,比的不是语言,是你手上这个活的形状。

所以我给你一个不那么严谨、但挺好用的对照:

想搞明白编程本身到底在干什么——去摸 Lisp。

今天下午就要上线一个小网站——PHP 抄起来就干。

搞数据、爬虫、AI、各种自动化的杂活——Python。

一个人要撑住上万人在线、还都是等来等去的活——Node。

在一个几百人的团队里、这套系统要活十年——Java。

再说个我觉得挺有意思的事:这五个的出生年份,Lisp 1958、Python 1991、PHP 1995、Java 1995、Node 2009,跨度五十一年。

五十一年里,硬件换了几十代,编程范式翻了好几轮,AI 都从符号主义烧到深度学习、再烧到大模型了。结果这五个,一个都没死,全都还有人在靠它吃饭。

所以哪个语言要完蛋这个问题,八成是问错了。

语言不像手机,不会因为出了新款就报废。它更像方言——只要还有一群人拿它干活、拿它交流、拿它养家,它就活着,而且活得比你想的顽固。

你真正该问的是:我这个活儿,找哪个方言的人来聊,最省事。