汝当分离软件与信仰

简介: 摘自《代码大全2》,有删减,希望和大家共勉。     “宗教信仰”在软件开发中有着多种表现形式——非要坚持某种设计方法,笃信特定的布局或注释风格,激励避免全局数据。不管是那种情况,都是不合适的。 软件先知   糟糕的是,一些专业优秀人员往往更容易偏执。革新方法需要公开,才能让别人尝试。尝试这些方法后才能充分证实或反驳之。研究结果向实践者的传播称为“技术转移”,对于推动软件开发的时间水平有重

摘自《代码大全2》,有删减,希望和大家共勉。

 

  “宗教信仰”在软件开发中有着多种表现形式——非要坚持某种设计方法,笃信特定的布局或注释风格,激励避免全局数据。不管是那种情况,都是不合适的。

软件先知

  糟糕的是,一些专业优秀人员往往更容易偏执。革新方法需要公开,才能让别人尝试。尝试这些方法后才能充分证实或反驳之。研究结果向实践者的传播称为“技术转移”,对于推动软件开发的时间水平有重要作用。然而,传播新方法和兜售狗皮膏药是不同的概念。对于后者,兜售者只是不懈地让你确信他们的方法如何灵验、如何放至四海而皆准。他们要你忘掉所学的一切,因为新方法如此伟大,能在任何方面将你的效率提高100%。

  不要盲目跟风,而应使用一种混合的方法。可用激动人心的最新方法做做试验,但仍扎根于传统的可靠的方法。

折中主义

  要对编程问题找出最有效的解决方案时,盲目迷信某种方法只会缩小你的选择余地。要是软件开发是确定的精确过程,就能按固定的套路解决问题;但软件开发并非确定过程,是需要逐步细化的,因而生硬的过程是不合适的,很难指望会成功。例如,设计中有时自顶向下分解法行得通,有时面向对象的方法、自底向上综合法或数据结构法会更好些。你应有意识地尝试几种途径,明知这些方法中有的可能成功、有的可能失败,但只有通过实践才能知道哪些好使。你必须采取折中的态度。

  一味矜持某种方法,还会将问题强行塞进其解决方案中。如果没有充分了解问题就定下解决方法,说明你还不够成熟。受限于所坚持的思路,你很可能与最有效的方法失之交臂。

  刚开始接触人呢和新方法时,人们会感到不自在。而建议你不要编程“信仰”,并不是说用新方法解决问题遇到麻烦时就马上停用新方法。对新方法有个合适的定位,但同样也要对老方法有合适定位。

  对于书本暂时的技术,和其他途径所给出的技术一样,折中主义都是一种有益的态度。这里对若干问题的讨论提供了许多可以相互替代的高级方法,但毕竟不能同时用。对于每个特定问题,你需要选择这种或者那种方法。你应该将这些方法视为工具箱中的工具,工作时自己判断挑选最好的工具。多数时候工具的选择关系不大,你可以选择老虎钳或者尖嘴钳。但有些场合,工具选择至关重要,故而要仔细做出取舍。工程学的规则之一就是权衡各种技术。如果早早将自己的选择限制在单一工具上,就无法做出权衡。

  由于“工具箱”形象地比喻出抽象的折中思想,所以这个比喻很有用。设想你是机械师,你的伙伴 Simple Simon 老爱用老虎钳,加入他不愿使用其他种类的钳子,你可能会觉得这家伙真稀奇,因为他不会用给他配的那么多工具。软件开发中的道理也是一样。在高层会有几种可用的设计方法;在细化,可对布局方案、代码注释、变量命名、定义类接口和传递子程序参数方面有多种选择。

  顽固的态度与软件创建中的可选择工具箱方法背道而驰,也不是创建高质量软件所应持的态度。

试验

  折中主义和试验之间有着密切联系。试验应贯穿于整个开发过程,但固执会妨碍你这么做。要想有效地试验,应能基于试验结果改变思路;否则试验只会白白浪费时间。

  软件开发中许多顽固的方法源于对错误的畏惧心理。“试图没有错误”是最大的错误。设计正好是仔细地规划小错误以避免大错误的过程。软件开发中的试验是为了验证某种方法是否可行——只要它解决了问题,就算成功了。

  试验可以用在许多层次上,和折中主义一样。每一层上,当你要做出选择时,就要搞个相应的试验,看看哪个方法最佳。在架构设计层,试验可以是对软件结构的勾勒(使用三种不同方法);在详细设计层,试验也许是对上层结构指示遵循(对应使用三种不同的低层设计方法);在编程语言层,试验室能够编个简短的测试程序,以验证自己不太熟悉的语法特性。试验还包括调整代码,并测量其效率,看程序是否真变短变快了。在软件开发过程的整体层上,可能通过试验收集质量和效率数据,以了解正式检查是不是比走查找出的错误更多。

  关键是对软件开发的各方面,你都应保持开放的心态。这样才能从开发过程和产品中有所收获。开放性的试验和顽固坚持某种方法可完全是两码事。

目录
相关文章
|
分布式数据库 Hbase
HBase StochasticLoadBalancer组件介绍
HBase StochasticLoadBalancer组件介绍。
3029 0
|
存储 弹性计算 安全
阿里云服务器磁盘不够用怎么办?云盘扩容了解一下
随着业务员增长数据增多,阿里云服务器磁盘可能出现不够用的情况,怎么办?阿里云磁盘扩容了解一下
1524 0
阿里云服务器磁盘不够用怎么办?云盘扩容了解一下
|
机器学习/深度学习 传感器 算法
【信号去噪】基于Sage-Husa自适应卡尔曼滤波器实现海浪磁场噪声抑制及海浪磁场噪声的产生附matlab代码
【信号去噪】基于Sage-Husa自适应卡尔曼滤波器实现海浪磁场噪声抑制及海浪磁场噪声的产生附matlab代码
【信号去噪】基于Sage-Husa自适应卡尔曼滤波器实现海浪磁场噪声抑制及海浪磁场噪声的产生附matlab代码
|
7月前
|
NoSQL Java Redis
StringRedisTemplete使用
`StringRedisTemplate`是Spring Data Redis中非常实用的工具类,简化了与Redis交互的操作。通过本文的介绍,读者可以了解如何配置和使用 `StringRedisTemplate`进行基本的Redis操作,并应用于实际的开发场景中。掌握这些技巧,可以显著提高开发效率和代码质量。
216 16
|
7月前
|
安全 测试技术 API
从开发者视角找寻Postman的替代工具
作为一名软件开发者,我在API开发与测试中长期使用Postman。然而,其全英文界面、网络不稳定时的卡顿以及强制登录带来的数据隐私担忧,促使我寻找替代方案。最终,我发现Apipost这款专为中国用户设计的工具。它提供中文界面,简化理解;无需强制登录,保障隐私;支持Postman数据导入,兼容性强。此外,Apipost还拥有API性能测试、自动化测试及高效文档生成等独特功能,极大优化了我的工作流程。对于追求效率和安全性的开发者,Apipost是理想选择。
|
7月前
|
网络协议 开发者 Python
Socket如何实现客户端和服务器间的通信
通过上述示例,展示了如何使用Python的Socket模块实现基本的客户端和服务器间的通信。Socket提供了一种简单且强大的方式来建立和管理网络连接,适用于各种网络编程应用。理解和掌握Socket编程,可以帮助开发者构建高效、稳定的网络应用程序。
327 10
|
7月前
|
Ubuntu TensorFlow 算法框架/工具
如何在Ubuntu上安装TensorFlow 24.04
如何在Ubuntu上安装TensorFlow 24.04
|
9月前
|
传感器 人工智能
X-Dyna:一张图片就能实现动画化!字节联合斯坦福推出动画生成框架
X-Dyna 是由字节跳动联合斯坦福等高校推出的动画生成框架,基于扩散模型实现单张图像动画化,支持面部表情和身体动作控制,生成高质量动态细节。
218 6
X-Dyna:一张图片就能实现动画化!字节联合斯坦福推出动画生成框架
|
10月前
|
人工智能 内存技术
Gemini 2.0 Flash Thinking:谷歌推出实验性多模态推理模型,在快速生成的同时展示详细的思考过程
谷歌推出的实验性推理模型Gemini 2.0 Flash Thinking,展示了详细的思考过程,能够在多个领域快速解决问题,并提供推理路径。本文将详细介绍该模型的功能、技术原理及使用限制。
459 26
Gemini 2.0 Flash Thinking:谷歌推出实验性多模态推理模型,在快速生成的同时展示详细的思考过程
|
C语言
【C语言基础篇】字符串处理函数(四)strcmp的介绍及模拟实现
【C语言基础篇】字符串处理函数(四)strcmp的介绍及模拟实现