
经常有朋友看我电脑上装了 Racket、Prolog、Haskell 这些“古董”忍不住问我学这些有什么用又找不到工作纯属浪费时间。我说你先别急我当年的确是因为好奇才碰它们但后来发现恰恰是这些看似“没用”的编程语言让我的简历在一堆“Java/Python 工程师”里多了一行“会写 COBOL 接口”也让我在几次关键面试里跟面试官聊到技术方案时直接跳出了对方预设的套路。这篇内容我想认真聊聊那些被主流视角打进冷宫、却实实在在成为职场底气的编程语言包括它们背后的价值、我踩过的坑以及一套可复现的入门实操方法。1. 先别急着下结论那些遭白眼的编程语言怎么就成了“没用”1.1 一张语言排行榜引出的偏见很多人判断一门语言有没有用习惯打开 TIOBE 或者 Stack Overflow 上的排行榜看一眼火箭式上升的 Python、稳坐头把交椅的 Java 和 C再看看榜单尾巴上的几门语言于是心里产生一个念头——这都 2025 年了谁还用 COBOL、Prolog 这些东西大概率是过时产物学了就是浪费青春。我不否认排行榜有参考价值它能反映市场热度、招聘岗位数量、社区活跃度但把它当成“语言有用性”的全部就太冤枉那些偏冷门的选手了。典型的例子是 COBOL在多数排行榜上排到二十名开外但全球高达几百亿行 COBOL 代码仍支撑着银行转账、保险理赔、政府税务系统。美国一些州的失业救济系统至今还在用 COBOL 处理疫情期间访问量一爆居然出现“系统崩溃急招会 COBOL 的老程序员”的新闻。这说明什么榜单上的热度不等于领域的不可替代性。我一直觉得所谓“没用”的语言只是它的价值没有被大众职场看见。就像巷子深处的老字号门脸不起眼但懂行的人知道它有多香。而在软件行业里能被所有公司无差别需要的语言只有那几门流行货真正能让你在某个特定行业成为“自己人”的往往就是这些看似没用、但在关键系统里扎根极深的老伙计。1.2 “没用”的真相不是语言没用是你没用上我们得把“没用”拆开看。如果一门语言在你当前的工作内容中完全没有用武之地比如你天天写 Spring Boot 接口那 Haskell 确实没法直接帮你“多写几个接口”它的 Monad、函子概念甚至会让你的代码风格被团队同事吐槽。于是你得出“它没用”的结论这很正常。但问题的关键不是语言没用而是你没有找到跟它产生交集的方式。举个例子我有个做数据处理的朋友日常用 Python为了性能偶尔写 C但他花了半年时间学了 Erlang当时所有人都说他闲得慌。结果后来公司要做一个千万级长连接的消息推送网关用 Java 总出现线程毛刺问题业界方案不是 Netty 就是 Go他直接拎出 Erlang 的进程模型跟架构师聊了一轮又用 Erlang/OTP 快速搭了一个 demo把理论上可以支撑百万并发连接的原型跑通了。虽然最终项目没有全部用 Erlang但他在团队里的位置一下子不一样了——从“写脚本的”变成“能解决极端场景的人”。这就是无用语言的价值当主流方案遇到瓶颈那些额外维度上的知识和视角会让你成为那个能救火的人。所以别再用“能不能在简历上换到更多面试机会”来判断一门语言的价值。编程语言不只是工具更是一套思考问题的方式。主流语言往往把手把手的写法教给你而冷门语言更像是在逼着你换一个角度审视“程序到底是什么”。2. 这些“没用”的语言凭什么能成为职场底气2.1 思维重构从 Haskell 到函数式编程让你在代码评审中降维打击如果你问哪门语言最容易让新手一脸懵Haskell 绝对排得上号。不少人在第一次接触 Monad 时感觉像在读天书。但从功利的角度看Haskell 带来的“纯函数”“无副作用”“类型即文档”这些概念放在日常用 Java、Go、TypeScript 的项目里每一条都能落地。我在做过的一次架构评审里遇到一个状态同步的老大难问题多个服务并发写同一个数据到处加锁性能越来越差。很多同事提议继续上分布式锁或者搞个事件队列。我因为在 Haskell 里习惯了用不可变数据和纯函数描述流程直接提出“把状态修改改成事件溯源用不可变事件序列替代可变状态”整套设计在脑内已经跑过无数遍。当时面试官听完眼睛一亮对我说“你是不是学过函数式语言”你看这就是底气——不是说你要用 Haskell 写生产代码而是它让你在主流语言里也能看到别人看不到的解空间。另外函数式思想已经成为现代语言的基础特性。Java 8 引进了 Stream 和 LambdaJavaScript 的 map、reduce、filter 横行Python 的生成器、装饰器也都带着函数式色彩。你以为学 Haskell 只在 Haskell 里用得上错了它会让你理解这些特性为什么存在从而在写普通业务代码时下意识地写出更简洁、更不易出 Bug 的表达方式。2.2 稀缺性溢价当 COBOL 还在运行银行核心时谁在闷声发大财冷门语言有一个反常识的规律——越老越难招人。我以前认识一位做银行核心系统维护的资深顾问他进入这一行纯属偶然大学学了点 COBOL毕业后去了一家外包公司被派到银行项目一待就是十年。十年间他看着身边做 Java 的同学换了几波公司薪资涨得飞快自己却老是守着那套老系统一度觉得自己是不是选错了路。转折点出现在数字化转型那几年。银行的系统要跟移动端、大数据平台对接但核心账务系统还是 COBOL 写的。新团队里没人敢碰底层而他既懂 COBOL 逻辑又能学着写 Java 接口成了系统两边唯一的桥梁。现在他做咨询按天收费很多银行机构根本挖不到人。这就是稀缺性的溢价市场不是只看语言流行度更看你能帮他们解决什么“没人敢碰”的问题。你去招聘网站上搜“COBOL 工程师”岗位数量当然少但每一个岗位都极其难招薪资自然不会低。同样的道理也适用于 Fortran——很多科研机构、气象模拟、石油勘探的老代码还是 Fortran 77 甚至更早能读能改的人越来越少了。听到这你可能想那我现在学 COBOL 还来得及吗值得吗我的看法是别冲着“赚钱”去学但可以冲着“了解一个领域”去学。当你理解了核心账务系统的逻辑你再去面试金融科技岗位时聊起业务和模型的匹配程度面试官会非常愿意多聊五分钟。这五分钟就是很多 Java 工程师得不到的差异化时间。2.3 领域深水区Erlang、Prolog、Ada 的不可替代场景还有一些语言虽然热度不高但在自己的细分领域里一直活得很滋润。比如 Erlang它从诞生就是给电信交换机用的核心能力是超高并发、容错、热升级。如今很多即时通讯后端、物联网接入服务还在用 Erlang 或 Elixir。Elixir 虽然有些热度但 Erlang 的 VM 才是灵魂。用过 Node.js 处理大量长连接的人多少会对内存和控制反转头疼而学几天 Erlang看到它的 Actor 模型、ETS 表就像打开了一扇新的窗户。Prolog 更冷几乎只在人工智能早期研究和专家系统里出现过现在的机器学习浪潮里也见不到它身影。但它依然是逻辑编程的代表适合做约束求解、规划算法、自然语言语法分析。你可能会觉得这跟职场太远了但如果你是做算法工程师的了解 Prolog 的“回溯搜索”会加深你对递归和搜索空间的理解对设计某些优化算法很有启发。再说说 Ada。听说过的人可能历史和军工背景的较多。Ada 在航空、铁路、航天等领域有严格的可靠性要求很多安全关键系统不敢用 C 语言就选 Ada。这类语言的岗位少但认证门槛极高从业者的不可替代性极强。学习一门这样的语言你没准儿进不了相关行业但你在写嵌入式代码时会更在意类型安全、任务同步这些几乎被忽略的细节立马提升代码质量。2.4 新兴语言筹码仓颉、Rust 等正在变成“新冷门”“冷门”不光是老语言还有一些正处于孵化期的新语言。最近很多人问“OpenHarmonyOS 的编程语言是仓颉吗”我没法替官方回答但可以聊一个现象一门新语言生态还不成熟的时候它往往是被主流者忽略的“没用”语言。可是一旦它被定为核心语言早期掌握它的人就能吃到一波稀缺红利。比如 Rust刚出来那几年也被视为“硬核玩家的玩具”学习曲线陡公司很少用它写业务。但如今Rust 在操作系统、嵌入式、区块链、高性能组件领域已经不可忽视。甚至不少公司专门招“Rust 工程师”因为会的人相对少。再比如 Go当年在很多人眼里也只是“一群大佬玩的新玩具”谁能想到现在成了云原生的事实标准所以说别排斥新语言的“不成熟”有时候越不成熟越意味着你比别人更早踩进蓝海。当然新兴语言也有大量炮灰。所以我们需要一种判断方法而不仅仅是面对五花八门的推荐感到焦虑。关于这一点我在后面专门整理了一个决策清单。3. 亲自下场我靠一门“没人用”的语言拿到了什么3.1 从零开始选一门“没用”的语言的决策清单我经常在星球和评论区里被问“想学一门冷门语言该选哪个”每次我都会反问一句“你的目标是什么”不是为了炫技也不是因为热门而是你希望这门语言帮你解决什么层面的问题。根据我的经验可以列一个粗线条的决策清单如果你想提升通用编码思维优先考虑 Haskell、LispScheme/Racket、Erlang。它们分别对应函数式、符号计算、并发模型能给你完全不同于命令式的世界观。如果你以后想进金融、银行、保险这类行业COBOL 或 Fortran 的“阅读能力”比“编写能力”更重要。你不需要成为一个熟练的 COBOL 程序员但你要看得懂老代码理解业务逻辑。如果你做嵌入式、安全关键系统Ada、Rust 是很强的方向。Rust 未来二十年都会是系统级编程的重要角色Ada 则在特定领域继续维持存在感。如果你想接触人工智能的底层逻辑Prolog 可以作为理解符号推理的钥匙但别把它当成找工作的主力技能。这个清单看起来很笼统但核心是把“职业诉求”和“语言价值”连线。我当初选 Lisp单纯是因为想搞清楚为什么那么多人工智能先驱对 Lisp 情有独钟。而后来我确实因为这段经历在面试一个算法平台组时被问到“如何设计一个可扩展的规则引擎”我提到了利用 S 表达式来描述规则面试官明显比其他候选人有共鸣。3.2 我的实操路径每周一个练习从语法到项目落地光有决策清单还不够还需要有执行力。很多人买一本《Haskell 趣学指南》或者《Erlang 程序设计》前两周还在坚持然后就搁在书架上吃灰。原因很简单没有把目标和反馈周期缩短。我自己当年学 Racket 的时候给自己定了“每周实现一个纯函数改写”的安排。第一周不写任何 UI只在控制台里定义函数阶乘、斐波那契、列表反转。别小看这些基础练习它逼你使用递归而不是循环慢慢地你脑子里就会开始把迭代问题拆解成“基线条件 递归步骤”。第二周开始接触高阶函数用 map、filter、fold 重写之前的练习题体会“把函数当参数传来传去”到底有什么好处。第三周尝试自己实现一个迷你解释器只支持四则运算和变量绑定。这一步难度陡增但一旦做出来你对“程序就是数据数据就是程序”这句话的感受就完全不一样了。等五到六周下来我已经能在 Racket 里写一个简单的宏并尝试生成一些 Go 代码。后来我把这段经验写进了个人博客没想到有猎头顺着博客找到我问愿不愿意做一些基于规则引擎的医疗决策系统。我心想这也行但事实就是如此。在职场里你多出来的背景知识往往是识别问题、拆解问题的底层能力这比多背几道八股文有价值得多。3.3 把冷门语言写进简历的正确姿势避开的3个坑很多人学了冷门语言简历上就写一行“熟悉 Haskell”然后指望面试官看到后惊叹。结果通常是面试官扫了一眼觉得你在凑数甚至可能追问一两个问题把你问尴尬。那怎么把它写进简历才会加分首先把冷门语言跟具体产出放在一起。不要写“熟悉 Erlang”要写“使用 Erlang/OTP 构建实时消息推送原型支撑十万级并发连接压测数据 9.8 万”。如果没做过实际项目可以写学习作品例如“用 Racket 实现一个简易规则引擎可用于编码业务规则配置”。这样面试官能直观看到你的能力边界而不是一个空洞的名词。第二个坑是夸大其词。冷门语言领域小社区里的高手其实不少你一旦在简历里写了“精通”对方随便抛一个运行时细节你答不上来就会连带质疑你所有内容的可信度。正确的措辞是“项目中使用过”或者“能阅读并维护熟悉核心概念”既坦诚又能引导对话到你能发挥的方向。第三不要只在简历里堆语言名词要留出“为什么学”的叙事空间。面试的时候人家问“你学 Prolog 有什么用”你如果只答“觉得好玩”效果一般。更好的回答是“我想了解声明式编程如何在复杂约束问题里减少状态管理成本并把其中的启发式搜索思路迁移到平时写的路径规划算法中”。你看这样一个回答就把“没用”的语言变成了你思考深度的证明。4. 真的想学手把手带你在三个月内入门一门冷门语言4.1 选择目标与资料甄别避免陷入学习黑洞如果你已经决定要学一门“没用”的语言恭喜你已经跨过了最难的决策阶段。接下来要解决的是“学什么版本、看什么资料、练什么项目”的问题。冷门语言的资料往往没有主流语言那么体系化尤其在国内很多书都绝版了网上的资料也零零散散。这就是一个天然的筛选门槛也是机会。以 Haskell 为例入门首选《Learn You a Haskell for Great Good》网上有在线版本中文翻译叫《Haskell 趣学指南》通俗易读。看完这本再配合《Real World Haskell》里面偏工程化的章节基本上就具备了动手能力。如果你更偏爱视频教程那就去 B 站或 YouTube 搜索“Haskell 入门”“六十天学会 Haskell”这类系列课程但要注意甄别年份尽量选最近的避免被旧库带偏。对于 Erlang经典教材是《Programming Erlang》第 2 版作者就是 Erlang 之父 Joe Armstrong里面有很多关于并发和容错的实际例子。Prolog 的话《Learn Prolog Now!》是特别好的免费在线资源配合 SWI-Prolog 环境几乎可以零成本上手。COBOL 和 Fortran 就更偏“读老代码”了可以找找公开的 COBOL 项目例子比如 GitHub 上的 legacy 项目或者看 IBM 官方文档里的示例。还有一个搜资料的技巧不要直接用中文搜中文社区对冷门语言的讨论太少。直接搜“语言名 learn”“课程”“awesome”等关键词往往会打开新世界。举个例子GitHub 上有大量 awesome-haskell、awesome-erlang、awesome-prolog 清单把这些仓库里的资源顺藤摸瓜比自己瞎找高效得多。4.2 六个阶梯式练习从环境搭建到构建一个小项目我习惯把冷门语言的学习分成六个递进阶梯每一个阶梯都对应一个可以看得见摸得着的练习。这套打法不仅适合 Haskell、Erlang也同样适用于 Rust、Prolog 和 COBOL 阅读练习。第一阶环境安装与“Hello, World”。别小看这一步冷门语言的工具链经常让人意外。比如 Haskell 要用 GHC 和 Cabal 或 StackErlang 要配置 erlang-shellProlog 要装 SWI-Prolog。我在 Windows 上装 Haskell 时踩过不少坑建议直接用 WSL省去很多环境变量问题。这不光是为了能跑通更是为了让你了解这门语言的编译/解释流程、包管理方式。第二阶实现一个简单的 CLI 工具。比如用 Haskell 写一个命令行版本的“词频统计”读入一个文本文件输出每个单词出现的次数。这个练习覆盖了 IO、列表处理、排序、Map 数据结构足以让你熟悉基本语法。如果用 Erlang就写一个并发的“单词统计”开启多个进程分段处理再汇总结果体会一下 Actor 模型。第三阶尝试解析一种文件格式。可以是 CSV 或者 JSON 的简化版。解析过程中你会碰到很多类型错误和空值问题正是锻炼类型思路的好机会。在 Haskell 里你会理解 Maybe 如何替代空指针在 Prolog 里你会用谓词构建一套句法规则体验到什么叫声明式编程。第四阶实现一个完整的算法或数据结构。比如红黑树、布隆过滤器或者 A* 搜索。冷门语言一般没有主流程里现成的答案你必须真正理解算法本身再去翻译成对应的语言风格。这一步做完你对语言的掌控力会有明显提升。第五阶选择一个小项目模拟真实场景。我建议从“待办事项管理”“简易聊天服务器”“Markdown 转 HTML 工具”里选一个。Erlang 自然选聊天服务器Haskell 可以做 Markdown 解析Prolog 则可以尝试做一个简单的关系型问答系统。项目不需要大但一定要跑通并测试。把项目放上 GitHub写清楚 README这可就是你的实战证明。第六阶参与开源或者翻译文档。哪怕只是修正一个错别字、整理一份笔记都会让你迅速进入这门语言的圈子。同时你也能看到真实世界里的冷门语言是怎么用的。开源社区对这类“边缘人”往往非常友好因为你愿意为一个不流行的语言做贡献这份热情本身就打动了不少维护者。4.3 如何混进社区让冷门语言成为你的社交名片学得再好如果没人知道你学了价值也会大打折扣。混社区不是让你天天水群而是利用社区的反馈机制来加速理解和建立个人品牌。主流语言群里大牛太多你提问一句“Java 里的 Optional 怎么用”三分钟就有人甩给你博客链接根本轮不到你思考。而冷门语言社区人数少愿意回答的人更珍惜每次交流反而愿意好好解释。我在 Reddit 的 r/haskell 和 r/erlang 区看过不少帖子很多问题下面都有高质量的回复。另一个好去处是 Telegram 上的一些语言群组里面聚集了大量的从业者和研究者。更重要的是你可以把自己的学习过程写成系列博客每篇文章贴上微博话题“编程语言”“程序员”长期下来这些内容会成为你技术社交的独特标签。别忘了提到一个关键点你可以把冷门语言的学习与你当前的业务结合。比如你工作用的是 Java你就可以写“从 Haskell 视角看 Java Stream 的并行陷阱”“用 Erlang 进程模型来理解 Java 虚拟线程”这样的交叉话题容易得到更多共鸣也更容易让主流程序员读者理解你学“没用”语言的取舍。这样你就可以在技术社区里形成一股独特的声音同时把冷门语言变成你的一张名片。5. 常见问题与避坑速查学“没用”语言前先看这5个问题5.1 学了找不到工作怎么办——策略调整这是所有人最关心的。老实说如果只学一门冷门语言去海投简历大概率会吃亏。但你可以采取组合策略明确主编程语言负责“温饱”冷门语言负责“溢价”。我的个人建议是在熟练掌握一门主流语言Java、Python、Go、C 任选其一的前提下用业余时间深耕一门冷门语言。这样你简历上不仅有可选干的岗位还能通过差异化技能在关键时刻加分。遇到纯冷门语言岗位时你也不会因为完全没准备而错过机会。如果你学的是 COBOL、Fortran请记住“阅读能力”远比“编写能力”更常用。你需要能把老代码看懂、梳理出业务逻辑并且能参与接口迁移、数据比对等工作这比要求“熟悉 COBOL 语法”实际得多。招聘方最怕的是那种一上来就说“我会写 COBOL”结果连文件处理三段式都讲不清楚的人。5.2 怎么判断一门语言未来会不会死这是一个经典问题。我的判断框架有四个维度一看历史投资二看当前存量代码三看新项目采用率四看生态背后的组织力量。比如 COBOL 虽然古老但金融系统的存量代码是天文数字想迁移也不可能一口吃成胖子所以它不会消失Prolog 同样古老但它在逻辑编程、约束求解、教育领域持续存在也有一些人拿它做知识图谱的相关工作。Rust 和 Go 则是既有新项目采用又有大厂推动生命力很强。另一个可以参考的信号是“编程语言排行榜”的变化趋势。我特意把“编程语言排行榜”列在一个重要位置因为它虽然不能完全代表语言的真实应用但它能反映出招聘需求和学习热度的趋势。你可以每个月翻一眼排行榜重点看长期趋势而不是短期振荡。比如 Rust 过去几年一直在振荡上升说明它的地位越来越稳而某些语言从五十升到二十则可能是短期炒作需要再观察一年。5.3 如何结合“编程语言排行榜”做动态判断具体怎么操作我建议做一张简单的表格记录每季度的排名和市场份额变化。不用太复杂一个 Excel 就行。比如列几个候选语言Rust、Go、Swift、Kotlin、Haskell、Lisp、COBOL、Fortran、Racket、Elixir。然后标记自己关心的指标排名百分比、岗位数量可在求职网站搜索、活跃仓库数。连续跟踪三个季度你会手动过滤掉很多噪音看清楚趋势。而在人才供给端招聘网站的数据更直接。你去搜“Rust 工程师”对比“Java 工程师”和“Go 工程师”你会发现 Rust 岗位少但要求普遍偏高薪资中位数往往不低。对于冷门语言岗位数增长率比绝对值更重要如果它从一年前的几十个涨到现在的几百个哪怕总量还是少也说明蓝海在扩大。这个逻辑同样适用于仓颉这类新兴语言如果它确实在官方生态里占据一个重要位置关注它的学习成本和落地可能也许就是一次提前埋伏的机会。5.4 避坑技巧不要为了“没用”而“没用”聊到最后必须泼一盆冷水如果你学冷门语言只是为了“证明自己独特”那你很可能会陷入“自我感动”的泥潭。我见过一些人学习一个月 Haskell 后开始疯狂贬低 Java 和 Python说它们“类型不安全”“不够优雅”结果在团队里变成不受欢迎的角色。记住掌握“没用”的语言是给你的武器库增加弹药不是让你拿它当标尺去羞辱别人。真正的底气是把不同语言的思路融合到实际问题里而不是背几个名词去social上装。另外不要同时开好几个冷门语言。一次只学一门学到能完成第六阶梯的迷你项目再换下一门。否则就会像看编程书一样每本看第一章一年下来语言名词知道不少实际一个项目都没立起来这种“伪学习”反而会消耗你的时间让你在未来更不愿意碰冷门知识。宁可少而精也不可多而杂。最后提醒一点把学习笔记公开。不一定非要写成博客哪怕发朋友圈、发动态都有助于加深记忆。公开学习还有一个隐性好处——你会因为“承诺一致性”心理更不容易半途而废。当你告诉自己“课程在更了”哪怕遇到难啃的 Monad也会硬着头皮多坚持几天而往往就在这几天里你忽然开窍了。我个人在实际操作中的体会是所谓“没用”的编程语言本质上是一张长期主义者的邀请函。它不会像热门框架那样让你简历白纸黑字地多几个筹码但会在某个具体场景里突然为你打开一扇门。就像我常说的——技术在短期看性价比在长期看构建的知识网络。今天你花时间学了一门真本事未来的某一个项目、某一个岗位就会需要一个同时能写主流代码、又能理解旧系统逻辑、还能用抽象思维重构问题的人那个人很可能就是现在的你。