函数式编程作为一种编程范式,其根源可以追溯到 20 世纪 30 年代,当时数学家们正在探索计算理论的基础。1936 年,阿隆佐·丘奇提出了 λ 演算(Lambda Calculus),这是一种形式系统,用于表达函数抽象、函数应用以及变量绑定。丘奇的 λ 演算为函数式编程奠定了理论基础。

同年,艾伦·图灵提出了图灵机的概念,这是一种理论上的计算模型,能够模拟任何计算机算法的逻辑工作流程。图灵机与 λ 演算在理论上被证明是等价的,即它们具有相同的计算能力。这一发现不仅推动了计算理论的发展,也为后续的编程语言设计提供了理论支持。

如今,函数式编程因其易于理解和维护的特点,以及处理并发问题的能力,开始受到越来越多的关注。许多现代编程语言要么本身就是函数式语言,要么至少提供了一些函数式编程的支持。

针对希望在日常工作中利用函数式编程解决问题的程序员,知名软件匠人 Robert C. Martin(简称 Bob 大叔)撰写了一本新书——《函数式设计:原则、模式与实践》。这本书的标题也致敬了他的经典著作《敏捷软件开发:原则、模式与实践》,旨在帮助程序员理解如何使用函数式编程语言来完成实际任务,而不是深入探讨 Monads、Monoids、Functors 等理论概念。这些理论虽然非常重要,但在大多数情况下已经融入了常见的语言、代码库和框架之中。

CSDN《新程序员》即将采访 Robert C. Martin,向 Bob 大叔讨教最卓越成效的编程技巧,同时询问他对于当今 AI 编程革命的最新观点。在此,CSDN 面向所有开发者征集“你最想问 Robert C. Martin(Bob 大叔)的 1 个问题”,欢迎各位程序员们留言提出自己最为关心的问题!

在这里插入图片描述

所有的函数式编程实际上都是 λ 演算。

——《函数式设计》,Robert C. Martin

“Bob 大叔”是谁?

Robert C. Martin 被誉为世界著名编程大师,虽然他现在很欢迎大家叫他“Bob 大叔”(Uncle Bob),但这个绰号的由来却让人哭笑不得。

1988 年,Martin 在伊利诺伊州的一家初创公司上班,当时办公室里有个叫“Billy”的人,是个烦人精,很喜欢给别人取绰号,甚至给办公室里的每个人都取了个绰号。

Billy 给 Martin 取的绰号就叫做“Bob 大叔”,非常无厘头,没人知道他取这个绰号的缘由。随着一天天过去,这个绰号越叫越熟,这个人开始只用“Bob 大叔”称呼 Martin。

后来,Martin 离开了这家公司。所幸的是,他发现当时没有其他人叫他“Bob 大叔”,便自以为可以永远摆脱这个称号了。

结果,某天 Martin 发现,在新公司的会议上,有人看到他并大叫了一句“Bob 大叔!”,把他吓了一跳。一问才发现,原来他自己曾经把 Usenet(这是互联网早期的一款讨论组应用,四十多年前还没有浏览器,程序员们就在这上面交流想法)上的签名设置成了“Bob 大叔”,后面放了一整年没管,这也导致他一年以来的电子邮件签名全都沿用了“Bob 大叔”这个绰号。

随后,Martin 把“Bob 大叔”从电子邮件的签名中删掉,但新公司的人却都开始管他叫“Bob 大叔”。从那一刻开始,他发现自己永远摆脱不了这个绰号了 —— 而且他也发现这个绰号意外的还不错,可以占人便宜。毕竟,谁不想当世界上所有程序员的叔叔呢?

敏捷开发的“活化石”

Bob 大叔是敏捷开发和设计模式的先驱,他从 1970 年开始从事软件专业工作,从事相关工作超过 50 年。知名的“SOLID 五大原则”,即面向对象编程领域的五个设计原则,便出自他的手笔。他在 21 世纪早期提出了 SOLID 五个首字母缩写,便于记忆:

  • Single Responsibility Principle(单一功能原则)
  • Open/Closed Principle(开闭原则)
  • Liskov Substitution Principle(里氏替换原则)
  • Interface Segregation Principle(接口隔离原则)
  • Dependency Inversion Principle(依赖反转原则)

除此之外,他也是“敏捷宣言”的联合签署人、“敏捷联盟”的首任主席、C++ Report 杂志前主编。他发表了大量有影响力的文章,并经常受邀在许多国际软件大会上发表演讲。

后来,Bob 大叔还用自己的绰号创立了 Uncle Bob Consulting 有限责任公司,并与儿子 Micah Martin 共同创立了 Clean Coders 有限责任公司。他还是 Clean CodeClean ArchitectureThe Clean Coder 等多本畅销书籍的作者。

71 岁了,还在网上坚持和人对线?

Bob 大叔从来都不是理论派,他和我们熟悉的 Linux 之父林纳斯·托瓦兹一样,混迹各种互联网早期的开发者社区,还都特别擅长在网上和人“唇枪舌战”。

五年前,Bob 大叔现身开发者博客平台 Hashnode,并挑选了一个良辰吉日,发了个帖子,题为《我就是 Robert Martin(也就是你们熟知的 Bob 大叔),你可以问我任何问题》,并欢迎开发者在下面直接开始对他提问,可谓是非常豪迈。

本次 CSDN 采访将会募集广大开发者社区的提问,如果你不知道该问 Bob 大叔哪些问题,不妨来看看五年前的开发者们是怎么做的:

开发者:当前软件工程的哪些趋势被高估了?自 1970 年以来,软件工程的哪些实践发生了根本性的变化?

Bob 大叔:目前是微服务。自 1970 年以来有什么改变?那毫无疑问是敏捷。敏捷意味着承认在软件开发中纪律比仪式更重要。

开发者:你对 Node.js 有什么看法?

Bob 大叔:我不怎么写 JavaScript 代码。我从未使用过 node。我希望可以跳过整个 JavaScript 代码,改用 Clojurescript,嘿嘿。

开发者:怎么看待 Reddit 上那些针对你的网络黑子?

Bob 大叔:我不逛 Reddit,我知道有些人因为这样或那样的原因不喜欢我。但这没关系,因为我相信思想市场理论,如果他们的想法最终被证明更好,那他们就是对的。

还有一些人不喜欢我,是因为我是保守派和共和党人,因为我投票给川普。但这没关系,因为我相信思想市场理论,如果我的政治观点是错误的,那么它就会失败。

与此同时,我已经当了 48 年的程序员,很少有人能连续 48 年编程。这种经验水平让我处于某种权威地位。我还是个相当不错的作家,这很有帮助。不管怎样,互联网上足够的空间容纳我们所有人。

开发者:程序员要学多少语言?

Bob 大叔:每个程序员都应该了解多种语言。Dave Thomas 和 Andy Hunt 曾经说过(在《程序员修炼之道》中):“每年学习一种新语言。” 这是个很好的建议。

每个程序员都应该了解一种基于 C 的语言,如 C、Go、Java、C# 或 C++。

每个程序员都应该了解一种函数式语言,如 Clojure 或 F#。

每个程序员都应该了解一种基于堆栈的语言,如 Forth。

每个程序员都应该了解一种逻辑语言,如 prolog。

每个程序员都应该了解 LISP。

这仅仅是个开始。

开发者:我知道你离开了 C++ 标准委员会。有鉴于此,您如何看待 Rust 的生命周期和所有权?以及总体而言,Rust 及其在编程语言领域的未来?

Bob 大叔:我从未被邀请加入 C++ 标准委员会。如果有人邀请我,我一定会拒绝。我讨厌官僚主义。我不想为小小的语言特性斤斤计较。我只想写代码。

我对 Rust 一无所知。也许有一天我会去研究一下,但我还有很多其他事情要做。

开发者:您认为计算机科学教育对于软件工程师来说怎么样?它是完全无用的,还是您认为它有一定的价值?

Bob 大叔:这取决于学校。在一些学校,完全有可能不写一行代码就能获得计算机科学硕士学位。这简直是荒谬的。另一方面,有些学校在让你的手指敲击键盘方面做得相当不错。但总体而言,我认为计算机科学学位不是必需的,甚至不值得花钱。软件是一门可以通过良好的计划在工作中学习的行业。

开发者:在大部分 Clean Coders 的视频中,你邀请我们走进你的生活,仿佛是在自家客厅里,你总不忘先为我们上一堂生动的科学课,然后才转入正题。这是否意味着,作为一名软件工程师,你暗示我们可以拥有这样一种生活方式,既充实又自在?

Bob 大叔:没有什么刻意的安排,也没有任何暗示。你所看到的,就是我真实的生活状态。

我没有接受过正规教育,没有大学文凭。1970 年,当我 18 岁的时候,就开始了我的编程之旅。我接触过 COBOL、PL1、FORTRAN 和汇编语言,一路走来,我从未后悔。

如今,48 年后,这些年的积累让我拥有了安逸的生活条件。但在职业生涯的初期,我过着捉襟见肘的日子。

随着经验的增长,我的收入也相应提高,但与此同时,家庭的责任和开支也随之增加。确保财务状况稳定,成了我长达三十多年的挑战。
我尝试创办了自己的企业,一度雇用了许多人。但请不要相信那些说创业是快速致富捷径的人。事实往往并非如此,大多数时候,这条路充满艰辛。最终,我的企业没能幸免于失败的命运,留下的是一笔沉重的债务。

现在,到了人生的暮年,我本可以稍稍放松,享受生活。但我并不打算这样做。我热爱我的工作,而且我做得非常出色,从中获得了巨大的满足感。

我只希望你们每个人都能像我一样,找到属于自己的幸福,无论是在家庭生活,还是在职业生涯中,都能体验到作为丈夫、父亲和程序员的快乐。

向 Bob 大叔提出你的疑问!

2019 年的时候,大模型时代还未开始,ChatGPT 与 GitHub Copilot 没成为程序员的标配,我们也就无法得知 Martin 对此的最新看法。如今,编程范式出现了巨大变化,对话大师的机会就在眼前,请将你所关心的问题在评论中留下来,CSDN 将精选向 Robert C.Martin 提问!

提问方式:在评论中发出即可,最好详实、具体、有针对性。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐