软件开发中的经验主义和理性主义

别再死记硬背注意力机制了!用Python+PyTorch从零实现一个HAN(Hierarchical Attention Network) 本文详细介绍了如何使用Python和PyTorch从零实现Hierarchical Attention Network(HAN),通过代码级解析帮助读者深入理解层次注意力机制。文章涵盖词级和句子级注意力层的构建、完整HAN架构的实现、训练技巧及注意力可视化方法,特别适合希望掌握高级NLP技术的开发者。 阅读详情

软件开发中的经验主义和理性主义

读《设计原本》笔记

 

理性主义和经验主义是典型的认识论理论。这两种类型的思想,从古到今,从中到外,互相对立,互相斗争,又互相影响,互相渗透。经验主义者认为人类知识起源于感觉,并以感觉的领会为基础。经验主义诞生于古希腊。距今已有2400余年的历史。理性主义者认为,感觉经验只能产生关于表象世界的意见,由于表象可能使人受到蒙蔽,所以这种得之于观察的经验是不可靠的,无法被确认为知识。经验主义的代表人物有弗.培根、洛克、巴克莱、休谟、霍布斯,他们都是英国哲学家,故常常称作“英国经验主义”;理性主义则以法国的笛卡尔、荷兰的斯宾诺莎、德国的莱布尼兹为主要代表,他们都是西欧大陆各国的哲学家,因此也常常称为“大陆理性主义”。两派哲学家并非在所有问题上都壁垒分明,但在当时的某些认知论的重大问题上,特别是关于知识的起源的问题上,确实存在着基本观点或主要倾向上的分歧。比如在有普遍必然性的科学知识上,它是否来源于感觉经验的问题。这两派哲学家还是观点鲜明,分歧最大。

经验主义者认为,物质世界虽然和精神世界不同质,但物质世界可以通过人的感觉而为人所知。感觉是沟通存在与思维的桥梁。“严肃地直接从感觉出发,通过循序渐进和很好的建立起来的实验过程,努力为人的理智开辟和建筑一条道路”,这就是经验派的创始人培根的信念。感觉的可靠为理性的可靠奠定基础。没有感觉,自然和人就无法沟通。第二步就是把感觉与理性思维统一起来,将感觉的个别推广,进而上升到理性的一般。只有这两种能力更紧密跟纯粹的结合,就能使思维把握住自然界中的“形势”,而“熟悉形式的人也就能够在不相同的实体中抓住自然的统一性”。

软件开发遵循什么呢?仅仅依靠深思熟虑就能正确的设计好软件吗?

理性主义者认为可行。理性主义者把人看成一个完美的生物,天生就是健全的,也是优秀的。人们会犯错误,但可以通过教育不断完善自己。在经过正确的教育,不断成熟的经验以及大量的足够的思考后,设计者可以设计出完美无瑕的软件。因此,在理性主义者看来,软件设计方法学的任务就是学习如何达到完美无瑕的程度。

经验主义者认为人类天生是不健全的,有瑕疵的,会不断遭到诱惑,不断犯错。大多数人认为自己的想法完美的,从而“大多数人都是在热情与兴趣的引诱下走向错误之渊。”因此,经验主义者认为,软件设计方法学的任务就是学习如何根据实验来找出瑕疵,对设计进行不断的迭代,从而逐步靠近完美无瑕。

通过深思熟虑设计出正确的软件。原则上来说,这是可能的。因为软件像数学,是逻辑的组合。但是对于真正的人和软件来说,又是不可能的。首先,写出软件的人必须一丝不苟的检查代码,以发现任何差错。一点点小小的差错都会导致运行的结果不正确。其次,即使你保证你的代码在逻辑上百分之百正确,但是你能保证你的编译器、你的操作系统也百分之百正确吗?

现在的计算机程序是逻辑的组合,是纯粹的数学意义上的对象,而不单纯是抽象的数学意义上的对象。它和数学不一样,不能通过证明来保证其正确性。我们不可能通过深思熟虑就能设计出完全正确的软件,然后证明设计是正确的。困难并不在设计方法,而在设计者本身。人类必然会犯错误,在软件开发中尤其如此。即使你设计的相当完美,在实现过程中也会出错。定义对象、软件架构、算法、数据结构以及代码实现本身都可能产生错误。在软件业,“不存在没有bug的软件,只是你没有发现而已。”这句话的本质就揭示了人类必然会犯错误的。无论在已知的环境下还是在未知的环境下。

在软件工程领域,人们不断尝试通过严格的形式化方法来验证正确性。或许这是因为软件像数学一样都是纯粹的思想,因此严格的证明是可行的。这一点还不同于其他领域。大多数设计领域最重的结果都是物理的实现,人们无法证明与原料及其缺陷和空间及其适用性相关的原理。

什么经验可以保证设计的程序是正确的呢?我们已经使用过正式的证明方法来证明安全操作系统内核设计与实现的正确性。技术很适合用在这种情况下,正式的证明保证我们的设计正确。当然,这种保证也无法达到100%。在数学史上,很多为人所接受的证明后来都被发现时存在谬误的。正式证明并不是一个无错的技术。它的优势在于正式证明中的推理形势不同于程序设计。正式证明不需要冗余的代码实现,它只是证明设计思想和设计方法。然而,若通过程序来实现,其间发生的错误又显而易见会显著增加。且设计方法都是在理想情况下,即使证明通过,也不能保证运行时就一定正确。

一个有名的例子是德国汉莎航空公司2904航班的事故。由于计算机控制的停止系统出现了故障,导致飞机在华沙机场脱离跑道。停止系统的代码是根据规范编写的。而规范是经过严格证明的。但规范还是没有正确应对意外情况。该规范是这样的:

为了保证反向推力系统与阻力板只在着陆的情况下激活,部署到这些系统上的软件需要满足如下所有情况:

1.      每个主要的着陆齿轮支柱必须有12吨以上的承重;

2.      飞机轮子的旋转速度必须达到72节;

3.      推力杠杆必须处于反推力位置。

对于华沙事故来说,前两个条件都不满足,因此大部分有效的制动系统都没有激活。第一点没有满足,因为飞机是倾斜着陆的,为了抵消可能的风向。这样,两个着陆齿轮达不到12吨的眼里,自然就无法激活传感器。第二点也没有满足,因为潮湿的跑道上产生了划水现象。

    这个例子很好的说明了理性主义者无法使用演绎的完美的方法来解决这种“意外”。

在实际的软件开发中,我们产生出一系列的设计方法学,包括设计、原型、测试、迭代式增量实现、使用大量的测试用例进行测试以及在改变之后进行回归测试等。这些方法无一不建立在经验主义基础上。

软件工程之外的设计领域可能不会进行正确性证明,但他们却通过无数的分析与模拟技术广泛应用了设计验证。现在科学家们对机械零件进行压力、振动与声学分析。凭借实地考察与录像分析,建筑师与客户可以在设计好的建筑上模拟使用场景。对大雪和大风进行负载压力分析测试。而计算机硬件则在电路层次、逻辑设计与程序执行层次上经受了大量的模拟测试。

大量的经验性分析的必然结果就是设计过程中出现过多的迭代。分析得越精细,就越能精确地度量出必要条件的满足程度以及约束的遵从程度。

我是坚定的经验主义者。因为基于我的行业背景,我认为没有哪个软件是完美的,是没有瑕疵的。我们必然要依靠各种工具来矫正,来不断弥补设计或实现中的错误。我们需要好的调试手段、好的调试工具来进行不断的调试。调试的过程是调整的过程,是基于感官的认知,是承认人类是充满瑕疵的。

现在流行的敏捷开发也是如此。敏捷开发的精髓在于通过持续的开发,不断反馈,不断迭代,不断矫正的过程,来达到软件错误的收敛。若完全相信理性主义,则可能会在错误的道路上越走越远,最终完全失败。

测试与迭代是必不可少的。仅仅依靠深思熟虑是不能正确的设计出复杂的对象的。经验主义学说在软件开发过程中的作用是无与伦比的。

 

从零构建:ESP32S3无线DAP-Link调试器的硬件与软件协同设计 本文详细介绍了基于ESP32S3的无线DAP-Link调试器的硬件与软件协同设计,涵盖关键元器件选型、无线通信协议优化、双核任务处理及低功耗调试方案。通过ESP-NOW协议实现低延迟无线调试,结合USB协议栈与双核协同,为嵌入式开发提供高效灵活的调试解决方案。 阅读详情

相关推荐

QGIS:安装Deepness插件+应用

简单的描述了deepness的安装应用历程,重点是记录博主本次遇到的坑

fengyi157的博客 2336

研发团队管理经验总结(持续更新... ...)

前言 在此,总结下本人在数年研发管理过程中的一些经验,供参考,先列一些关键点,后面会不断完善。 目标 保证高效率、高质量地完成项目的研发和上线工作,并保证软件在线上运行过程中的高性能和安全性。 保证项目进度可控,风险可控。 保证研发团队良好、合理、稳定的梯队。每个角色及其不同职级,都有良好的成长、晋升路径和机会。 团队内有良好的技术氛围、创新氛围,并且保持激情,有很强的战斗力和进攻力。...

软件猿扫地僧 3万+

Anthropic发布10款金融AI智能体模板深度解析:重构华尔街工作范式

摘要:2026年5月,Anthropic发布10款金融AI智能体模板,标志着AI从辅助工具升级为"虚拟同事"。这些智能体深度集成到Word、Excel等办公软件中,覆盖投行、商行、资管三大场景的核心工作流,预计可提升效率35-85%。技术架构基于Claude3.5Sonnet模型,具备200K上下文窗口和95%+的财务图表解析准确率,并与彭博等金融数据源直连。发布引发传统金融数据服务商股价下跌,摩根大通等机构则视其为成本优化工具。落地需分四阶段推进,关键在于数据治理和复合型人才培养。未来

yyq916的博客 635

作为经验主义探究的计算机科学:符号和查询

作为经验主义探究的计算机科学:符号和查询(omputer Science as Empirical Inquiry: Symbols and Search) Allen Newell 和 Herbert A. Simon   关键字和短语:符号(symbols), 查询(search),科学(science),计算机科学(computer science), 经验

1538

S905L3B机顶盒刷Armbian:从安卓Root到eMMC全攻略

在嵌入式开发与轻量级服务器搭建中,ARM架构设备因其低功耗和高性价比备受关注。晶晨S905L3B作为运营商机顶盒的主流芯片,通过刷写Armbian系统可将其改造为ARM小服务器。其原理是利用Amlogic芯片的uboot引导机制,将Linux系统写入eMMC存储,从而脱离原厂安卓限制。这一方案的技术价值在于以极低成本实现Docker容器、下载机、轻量数据库等服务的部署,应用场景涵盖家庭网络广告过滤、智能家居控制、复古游戏机等。本文以CM311-1S为例,详细拆解从安卓9 Root到Armbian写入eMMC

weixin_31476015的博客 340

详解各类以太网标准10BASE-T/100BASE-T4/100BASE-FX/1000BASE-X等

以太网是现实世界中最普遍的一种计算机网络。以太网有两类:第一类是经典以太网,第二类是交换式以太网,使用了一种称为交换机的设备连接不同的计算机。经典以太网是以太网的原始形式,运行速度从3-10 Mbps不等;而交换式以太网正是广泛应用的以太网,可运行在100Mbps、1000Mbps和10000Mbps高速率,分别以快速以太网、千兆以太网和万兆以太网的形式呈现

不积跬步,无以至千里! 5万+

(转)深度学习是经验主义新高峰,不是理性主义终结

丘吉的这篇2011年的长文《钟摆摆得太远》(A Pendulum Swung Too Far) 是一篇从 AI 高度回顾NLP 全部历史的反思力作,主要回顾了三位大师明斯基、乔姆斯基、皮尔斯......

代码过客 1934

具身智能的建模和方法(具身智能入门一)

本文以机械臂将小红方块移动到目标位置为例对具身智能的建模和方法进行介绍,如下图所示,该例子来自https://ai-workshops.github.io/building-and-working-in-environments-for-embodied-ai-cvpr-2022/。

weixin_39699362的博客 1462

软件工程实践者的思想

前言... 3 停下来,思考才是进步的本质... 3 你在做什么... 3 编程的精义... 3 编程的精义... 3 程序=算法+结构... 4 语言... 4 是懒人造就了方法... 5 是懒人造就了方法... 5 一百万行代码是可以写在一个文件里的... 5 你桌上的书是乱的吗... 6 我的第一次思考:程序=算法+结构+方法... 6 团队缺

xwlyun的专栏 9047

【ESP32实战】SPI驱动ILI9341屏幕:从基础绘图到汉字显示

本文详细介绍了如何使用ESP32通过SPI驱动ILI9341屏幕,从基础连接、SPI初始化到实现基础绘图、数字显示及汉字显示的全过程。文章包含实用的代码示例和优化技巧,帮助开发者快速掌握屏幕驱动技术,提升显示性能。特别针对常见问题如花屏、刷新率等提供了解决方案。

weixin_29164091的博客 621

YOLOv8改进,YOLOv8添加DCNv4可变性卷积(windows系统成功编译),全网最详细教程

DCNv4通过两项关键增强解决了其前身DCNv3的局限性:1. 移除空间聚合中的softmax归一化,以增强其动态特性和表达能力;2. 优化内存访问以最小化冗余操作,从而加速计算。这些改进使得DCNv4相比DCNv3显著加快了收敛速度,并且处理速度大幅提升,前向传播速度超过三倍。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 6469

经验主义

定律 墨菲定律 一件事情,越担心会发生,最后一定会发生,这就是爱德华·墨菲所说的“墨菲定律”。 根据“墨菲定律”:一、任何事都没有表面看起来那么简单;二、所有的事都会比你预计的时间长;三、会出错的事总会出错;四、如果你担心某种情况发生,那么它就更有可能发生。墨菲定律让我们一直心神不宁,最后事情往坏的方向发展去了,真的是怕什么就来什么。 如何避免墨菲定理?1、推行积极墨菲定律,凡事往好的方面想,当有...

ThePromonkeyOf_HeLuo的博客 763

静态时序分析—门控时钟检查(clock gating check)

clock gating check的条件与类型

m0_61544122的博客 9606

软件框架设计的艺术----读书总结

总结 软件开发的艺术 理想主义,经验主义和无绪 文艺复兴时期,现代科学产生了两个重量级理论: 理性主义和经验主义。 理性主义认为理智是信息的首要来源。给出一个假设,只要通过思考就能理解和描述这个世界,如著名的伽利略自由落体实验。 经验主义则认为人类对世界认识的主要来源是经验。 我们开一辆车,不必知道其内部实现细节。 如果孤立地基于两种极端的方式来观察世界都是片面的。对大多数人来说,懵懂无知是一种...

weixin_34179762的博客 249

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

项目当中的理性主义和实证主义

在开始先解释这两个名词: 理性主义:理性通过论点与具有说服力的论据发现真理,通过符合逻辑的推理而非依靠表象而获得结论,意见和行动的理由。这个像是纯数学理论家,有点理论推理万岁的倾向。 实证主义:事实必须是透过观察或感觉经验,去认识每个人身处的客观环境和外在事物。虽然每个人接受的教育不同,但他们用来验证感觉经验的原则,并无太大差异。实证主义的目的,在建立知识的客观性。这个非常像现在的西方科学发展

seacean2000的专栏 873

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

软件工程与计算总结(八)软件设计基础

对于软件设计来说,工程设计和艺术设计都很重要:一方面软件设计要从工程师的视角出发,使用系统化方法构建软件的内部结构,进行这种的设计决策,生产队用户有用的产品;软件设计是关于对象的设计,是一种设计活动,自然具有设计的普遍特性,软件设计既指软件对象实现的规格说明,也指产生这个规格说明的过程~软件设计是问题求解和决策的过程,问题空间是用户需求和项目约束,解空间是软件设计方案,从问题空间到解空间的转换是一个跳跃性的过程,需要发挥设计师的创造性,设计师跳跃性地建立解决方案的过程被称为决策~

软工科班,擅长Matlab、C++、微信小程序开发 520

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

软件框架设计艺术

第一部分 理论与理由艺术与科学艺术,自我、主观科学,客观、原则,理论,术语、方法  第一章 软件开发的艺术理性主义,经验主义,无绪,大多数人做到浅层理解就足够了   第二章 设计api动力2.1分布式开发 类库和框架越来越多,但要重用成功,就要api提现库的功能。2.2 模块化应用程序组件整合,怎样整合给自己组件起

sixianfeng的专栏 668

《软件框架设计的艺术》试读:1.2 软件的演变过程

很有意思的文章,真的是写得非常不错,摘抄过来,大家分享! 在20世纪40年代和50年代初时,编写代码是一件非常困难的事。人们不得不学习机器语言,同时还要知道寄存器的大小和数量,有时候,事情不妙,还要拿起螺丝刀亲自上场①,去连接计算单元的信号线。人们的主要精力不在于思考一个算法,而放在将算法编写成可执行程序上,这是一种枯燥又机械的工作。 FORTRAN语言的出现,就像天使为人间送来了福音...

weixin_34372728的博客 99

现代软件工程:在软件工程的肩膀上重新定义软件工程

我们大多数人在学校学到的科学方法归纳如下:1、描绘:观察当前的状态。2、假设:给出一个假设,解释你的观察。3、预测:根据你的假设做出预测。4、实验:验证你的预测。解决软件问题的实用、务实的方法,其基础是对基本科学原理的非正式运用,换句话说,就是工程。软件工程的定义是:软件工程是对经验主义的、科学方法的运用,目的是为软件中的实际问题找到高效的、经济的解决方案。对软件开发采用工程方法的原因是:1、软件...

weixin_40768973的博客 100

AI Agent框架的哲学思考:从技术工具到认知伙伴的进化之路

本文探讨了AI Agent框架从技术工具到认知伙伴的哲学演进,分析了LangGraph、Agno和Parlant等主流框架的设计理念及其在医疗、金融等领域的应用。文章揭示了不同框架背后的认知模式冲突,并提出了人机协作的新范式,为技术选型提供了认知维度的评估矩阵。

weixin_29230649的博客 374

《设计原本》摘记:

坚持经验主义 而非 理性主义.  坚持 保存并且记录“草图本”,将想法、设计和局部设计记录下来。  在开始设计师,记录下对用户和使用方式的假定(即用户模型的建立),错误的假定好过 没有假定导致的模糊  专心研究 之前的好的范本。  好的设计强调 并且极力维护 概念性的统一  理性模型(软件开发中的瀑布模型) 是不符合实际的 情况的,一种螺旋式的、反复迭代式的模型    更加符合实际的情

whlgjack的专栏 602

现代软件工程是设计而非生产工程

软件开发是设计工程,而非生产工程。生产是由构建触发的,这种触发构建生产是自动的、按键式的、可伸缩性极强的,而且价格便宜到可以认为是免费的。与所有实体生产过程不同,软件开发完全是一项发现、学习和设计的活动。我们的问题是探索,而不是生产工程技术。软件开发是一门设计工程的学科。工程学是对经验主义的、科学方法的应用,目的是为实际问题找到高效的、经济的解决方案。工程学是应用科学,它是实用的。经验主义意味着学...

weixin_40768973的博客 117

[课业] 17 | 软工 | 设计基础

文章目录什么是软件设计概述软件设计思想的发展软件设计的核心思想为什么要设计为什么软件设计很复杂如何控制软件设计复杂度理解软件设计什么是设计工程设计与艺术设计理性主义与经验主义软件设计的演化性决策设计的决策决策的约束性设计的决策依据决策的多样性决策的演化性决策的概念完整性设计的演化性软件设计分层概述低层设计低层设计的发展低层设计的工作低层设计的本质低层设计:代码设计中层设计中层设计的发展中层设计的工作中层设计的本质模块化模块化的目标模块化的问题和困难中层设计总结高层设计软件设计过程、方法和模型、描述软件设计过

RussellHan的博客 351

设计原本——计算机科学巨匠Frederick P.Brooks的反思(精装版)

 《设计原本》——计算机科学巨匠Frederick P.Brooks的反思(精装版) 基本信息 原书名:The Design of Design: Essays from A Computer Scientist 作者: Frederick P. Brooks,Jr. 译者: 高博 朱磊 王海鹏 出版社:机械工业出版社 ISBN:9787111416265 上架时间:2013-4-...

china-pub网上书店 156

《人月神话》作者Frederick P. Brooks, Jr.大师论设计原本

  很少有人像Frederick P. Brooks, Jr. 一样对软件开发的实践(而不是学术理论)产生那么大的影响。他在《人月神话》中记录了他作为IBM System/360计算机以及Operating System/360项目领导者的经验,这些经验不断地促使我们形成项目管理的观念。很难找到比他的“没有银弹:软件工程中的根本问题和次要问题” (《Information Processing...

weixin_34233618的博客 124

软件框架设计的艺术

<br /><br /> <br /> <br />评论:<br />  十年难得一遇的佳作,通过阅读本书, Java程序员必将取得长足的进步。<br />                                                                         ——亚马逊读者评论<br />   这绝对是一本不容错过的好书,据我所知,市场上还不曾有哪本书在框架设计领域有如此深刻的阐述。                                       

图灵教育 1471
上一篇: 传真通信基础
下一篇: 网络传真技术的现状和发展
张志龙
博客等级 码龄24年 412粉丝 131原创
评论 32
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值