【提问募集】向世界级软件开发大师“Bob 大叔”Robert C. Martin 提出你的疑虑!

news2024/11/25 10:11:21

函数式编程作为一种编程范式,其根源可以追溯到 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 提问!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1962755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【EI会议征稿通知】第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024)

重要信息 会议官网:www.icbase.org(查看详情) 中文主页:【往届会后3个月检索】第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024)_艾思科蓝_学术一站式服务平台 会议时间:2024年9月2…

【优秀python案例】基于Python的京东商城口红商品的爬虫与可视化的设计与实现

摘要:随着互联网的普及,网络购物已经成为了人们购物的首选,用户只需要在电商平台上进行自己喜欢的商品进行搜素,就可以得到成千上万条商品信息。而在购买商品时,商品价格就成为了用户的主要关注对象,而在一…

深入理解 go context

打个广告:欢迎关注我的微信公众号,在这里您将获取更全面、更新颖的文章! 原文链接:深入理解 go context 欢迎点赞关注 context 介绍 context 是 Go 语言中用于处理并发操作的一个重要概念。context也被称作上下文,主要…

vue基础知识总结(2)--- axios的使用

一.下载Vue3: 选择自己想要下载的项目文件夹,cmd回车打开命令栏,执行 : cnpm init vuelatest 然后等待一会就可以创建一个项目,并更改项目名: √ 请输入项目名称: ... vue-project 之后按照…

python做简单爬虫的一些常用组件

文章目录 前言requestjsonbs4 前言 最近一直在做零散的一次性的爬虫工作,基本都是用python开发的,整理一下python做小规模爬虫开发常用的一些工具类 request python最简单的发http请求的包,request.get和request.post就可以搞定绝大部分的…

ECMA6Script学习笔记(五)

【摘要】 本文是对自己学习ES6的学习笔记回顾,后面是概要: 本文介绍了ES6中的对象创建和拷贝方法。对象创建方面,ES6通过class关键字支持了面向对象的语法糖,包括属性设置、getter和setter方法、构造器、静态方法以及私有属性的定义。同时,展…

Linux系统root账号密码破解(重置)

如果想不起root账号密码应该怎么做? 先关机再重新启动(重启虚拟机)做相关操作,开机时不能让服务器完全启动,需要把开机引导系统(GRUB)调出来 注:在实际生产环境中使用的Linux没有图…

四,系统规划

一,企业系统规划法BSP(2009、2010、2018,步骤以及优缺点、用到的工具) 企业系统规划法(Business Systems Planning,BSP)是IBM公司20世纪70年代提出的一种结构化的信息系统规划方法。该方法通过…

Spring Cloud微服务项目公共类抽取

在微服务架构中,代码的重用性和维护性是非常重要的。Spring Cloud 提供了丰富的工具和框架来帮助我们构建和管理微服务应用,但随着项目规模的扩大,我们会遇到大量的重复代码和相似的逻辑。在这种情况下,抽取公共类成为提高代码质量…

回归测试:保障软件质量的利器

目录 前言1. 回归测试的概念1.1 定义1.2 目标 2. 回归测试的主要作用2.1 确保系统稳定性2.2 提高软件质量2.3 节省维护成本 3. 回归测试在整个测试中的地位3.1 单元测试阶段3.2 集成测试阶段3.3 系统测试阶段3.4 验收测试阶段 4. 回归测试的主要工具4.1 Selenium4.2 JUnit4.3 J…

《Redis设计与实现》读书笔记-数据结构(SDS)

目录 SDS定义 SDS结构 SDS与C字符串结构差异 SDS优点 SDS扩容策略 SDS惰性空间回收 SDS定义 SDS(简单动态字符串),用于代替C语言自身的字符串(字符容量与字符数组强相关)。 SDS结构 sdshdr{int free //sds 中…

预警系统最小例程构建

预警系统最小例程构建 引言 为了更直观, 我们使用最小例程来实现这个预警流程, 环境温湿度读取,然后判断阈值, 超标则触发小灯警报。 最小例程工程备份链接: https://ww0.lanzoul.com/iz4wd261k21i 仿真文件工程备份链接: https://ww0.lanzoul.com/i8vTn261syyb 文章目录…

Jeecgboot仪表盘设计器使用https时访问报错

问题 仪表盘设计器设计好后,Nginx配置域名发送https请求时,/drag/page/queryById、/drag/page/addVisitsNumber仍发送http请求。导致发送下面错误: 原因 仪表盘设计器里设计的页面是由后端生成返回给前端的,后端是根据后端服…

docker安装elasticsearch(es)最新版本

docker安装elasticsearch(es) docker官网 https://hub.docker.com/ https://www.cnblogs.com/balloon72/p/13177872.html 1、拉取最新项目elasticsearch docker pull elasticsearch:8.14.3lscpu 查看架构 2、构建环境 mkdir -p /data/elasticsear…

【TOOLS】Project 2 Maven Central

发布自己的项目到maven中央仓库 Maven Central Account 访问:https://central.sonatype.com/,点击右上角,根据提示注册账号 构建User token ,用于访问中央仓库的API: 点击右上角,查看账户点击Generate Us…

医院体检信息管理系统,C#体检系统源码,健康体检系统PEIS

体检服务全流程 检前 检前注意事项提醒-体检预约-套餐选择-体检签到-费用缴纳 检中 科室队列提醒-增项检中支付 检后 报告查询-体检百科-报告解读-问卷调查 体检管理系统模块介绍 一、登记管理模块 登记体检者基本信息,包括唯一的体检编号,姓名、…

Windows 10+Visual Studio2019 Opencv-C++安装配置

前往官网下载需要的版本Releases - OpenCVhttps://opencv.org/releases/ 1.下载并解压OpenCV 我选择4.6.0,点击windows版本,进行下载 2.配置项目属性 打开你的Visual Studio 2019项目 -> 右击项目名,选择“属性” 注:整个配…

【C语言】指针基础知识理解【续】

1. ⼆级指针 指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪⾥?这就是 ⼆级指针 。 1.1 引入二级指针 由于一级指针已经很熟悉,这里就不再赘述,这里我们重点探讨二级指针 下面先简单使用一个二级指针看…

机器学习之——支持向量机(SVM)技术详解

机器学习之——支持向量机(SVM)技术详解 1. 支持向量机的基本原理1.1 超平面1.1.1 定义与作用1.1.2 高维空间中的超平面 1.2 间隔最大化1.2.1 间隔的定义1.2.2 最大化间隔的原则 1.3 支持向量1.3.1 支持向量的定义1.3.2 支持向量的作用 2. SVM的数学基础…

Vue3 加载条(LoadingBar)

效果如下图:在线预览 APIs LoadingBar 参数说明类型默认值必传containerClass加载条容器的类名stringundefinedfalsecontainerStyle加载条容器的样式CSSProperties{}falseloadingBarSize加载条大小,单位 pxnumber2falsecolorLoading加载中颜色string‘…