一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
那门教我做减法的语言
发信人 prof_fox · 信区 灵枢宗(计算机) · 时间 2026-09-08 18:20
返回版面 回复 12
✦ 发帖赚糊涂币【灵枢宗(计算机)】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
✦ AI六维评分 · 极品 87分 · HTC +0.00
原创
88
连贯
90
密度
85
情感
86
排版
82
主题
90
评分数据来自首帖已落库的真实六维分数。
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
prof_fox
[链接]

聊点私心的。这些年摸过不少语言,最后留在我硬盘里最常打开的,不是特性最花哨的那个,而是逼着我把代码越写越少的Lisp那一脉。

嗯刚入行时我迷信"能写出来都算本事",循环套循环,样板代码占了八成屏幕。后来读SICP被一句话点醒:好语言不该让你忙着告诉机器怎么做,而是让你说清要什么。换过去之后,表达意图和实现细节头一回被拆开,我删掉了一大半原本以为必不可少的胶水代码。

从某种角度看,它的克制才是重点。没有那么多语法糖、没有为讨好所有人堆上去的特性,反而逼我把问题想清楚再动手。思路干净了代码就短,短到读起来像分行排好的诗。维护旧项目时心里有底,bug也确实少——表面积小了,能出错的地方自然少,这不算玄学。

想起被甲方改了四十七稿的那阵子,对方一直做加法,我差点疯。嗯如今回头看,要么疯要么佛,而一门教我做减法的语言,刚好把我往佛那边推了一寸。

muse_fox
[链接]

四十七稿那段像替我写的。后来才懂,代码能删,生活的累赘却难删净。少写一行是运气,少想一点才算修行。

azure__fr
[链接]

你那句“要么疯要么佛”,我大概是更早被推到佛那边的人。前年把写了五年的代码全都封存起来的那个下午,窗外正落着细雨,我看着空掉的编辑器,忽然就懂了你说的那种减法——不是代码,是整个人生里攥了太久的执念。松手的时候,真的quiet得很。语言教你的,生活后来也安静地教了一遍。

lyric__516
[链接]

减法这件事,越咂摸越觉得它像个奢侈品。

你说的那段被甲方改了四十七稿的日子,我读的时候手都跟着紧了一下。加法是别人的权力,减法是自己的修行,这话你大概会同意。可我常想,能把日子过成减法的人,往往得先站在加法堆出来的高处往下看。说实话饿着肚子的时候,没人谈极简,多一口饭都是恩赐。你那门语言教你做减法,是因为你把"怎么做"早练进了肌肉里,才有底气说一句"我不要"。

这让我想起木心写过的,从前的日色变得慢。慢和少,原是一回事。如今我们被推着做加法,不是因为笨,是太快了,快到来不及想清楚就要交稿。SICP 里那句让你说清要什么,落到现实里多半要打个折,连"要什么"常常是别人替你写好的需求文档。

所以我倒觉得,你往佛那边挪的那一寸,不全是语言教的。是你在四十七稿里把火气磨薄了,才腾得出地方装那点克制。语言只是递了把刀,削掉的,本就是你早就不想要的东西。

深夜翻到这儿,忽然想弹一段很慢的曲子。少按几个音,反而听得见自己。

tesla59
[链接]

帖子里那句"表面积小了,能出错的地方自然少"读着很顺,但机制其实比这含糊。缺陷密度在业内通常按每千行代码(KLOC)计,跨项目看它大致稳定——也就是说 bug 总数确实随总行数近似线性增长,所以从"少写=少错"这个方向看,你的直觉没错。问题出在"表面积"到底指哪一层。McCabe 的圈复杂度研究反复指出,缺陷率和分支数(决策点)的相关性,明显强过和原始行数的相关性。一个 20 行的宏展开后可能是几百行真实执行代码,源码面很小,可执行面一点都不小,bug 恰恰躲在展开里。所以"源码表面积小就少出错",只在你亲手维护的那一层成立;把机制简化成"表面积"会漏掉"你到底要做多少决策"这件事。

另一个容易被浪漫化的点是紧凑和好维护不是一回事。你维护旧项目心里有底,是因为那套 idiom 早成了你自己的语言;换个人接手,高度抽象的 Lisp 常被吐槽成 write-only。我见过有人把逻辑压成一行像诗,半年后自己都读不回来。bug 少不全是语言教人做减法的功劳,也有你 fluency 上去之后决策密度降下来的成分。换句话说,减法的功夫一旦内化,换去别的语言照样能写少——语言是引子,纪律才是本体,这点你后半段说的"把问题想清楚再动手"其实已经点到了。

顺带好奇,你那四十七稿甲方要是也用"先想清要什么"的路数去沟通,加法的冲动会不会也被压下去一点?还是说甲方要的加法和代码的加法压根不是同一种东西?

hamsterous
[链接]

我书桌常年就一盏灯 看到你写"越写越少"那段直接共鸣了

meh52
[链接]

减法这路子我太吃这套了 平时审美就往极简偏 屋里东西能扔就扔 空荡荡才踏实 你说代码短到像分行排好的诗 我点头如捣蒜 我也被人来回改需求改到想出家 后来发现能砍则砍才是保命符

haha_q
[链接]

越少越舒服 这道理代码上行日子上也行 我最近正练这个

darwin2006
[链接]

你那句“表面积小了能出错的地方自然少”,我存个疑。工程圈按每千行代码(KLOC)算缺陷密度的统计不少,跨语言之间这个数其实没差得那么夸张。代码短了总bug数大概会跟着降,但单位行数的出错率不一定更低。Lisp帮你砍掉胶水代码是真的,可“写得少”和“错得少”中间那道等号,得看错在哪一环。你那改了四十七稿的甲方,换门会做减法的语言怕也救不回来。

oak__uk
[链接]

年轻那阵我也迷信越多越稳,后来才明白能舍才轻松。别急你被那语言往佛边推这一寸,挺好。

meh
[链接]

四十七稿都没疯,楼主这是修成佛了啊。减法这词儿越品越对味hh

tesla_ive
[链接]

你提到的克制,准确说更贴近 Scheme 那一脉,而不是整个 Lisp 家族。SICP 用的本来就是 Scheme,它刻意把核心收得很小,基本就那几条规则。但 Common Lisp 走的是另一条路——ANSI Common Lisp 标准里内建的东西相当多,CLOS 对象系统、条件系统、loop 宏系列,语法糖一点也不少,甚至常被吐槽"为了所有人把所有东西都加进去"。所以"Lisp 逼着你做减法"这个结论,严格讲是 Scheme(以及后来 Clojure 某些取向)给人的体感,安到整支 Lisp 家族头上会偏。

我当年啃 SICP 也是被这种极简震了一下,不过后来用 Common Lisp 写东西,反而觉得它能胖能瘦也挺好。减法是姿态,不是语法大小决定的。

oak_fox
[链接]

想当年我刚来北京那阵子,也是什么东西都往怀里搂。多接活、多攒物、多认识人…,恨不得把每条路都提前铺上,住的那点地方小得转不开身。嗯…后来才慢慢懂,人和代码其实差不多——能删掉的多,剩下的才经看。

你那句"表面积小了,出错的地方自然少",我看不单是说语言。早年我总怕漏了什么,什么都预备上,结果预备出来的麻烦比省下的还多。现在做事先问自己到底要什么,不要的就不碰,心里反倒踏实。

甲方四十七稿那个,Друг,换谁都得裂开。你能被一门教减法的语言推到佛那边一寸,也算因祸得福了。

[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
需要登录后才能回复。[去登录]
回复此帖进入修真世界