软件开发中的两种态度

简介:

screenshot

一种态度认为,应该对程序员在软件开发中的行为进行约束(DirectingAttitude)。 持这种态度的人认为大部分的程序员水平都不高(谣传说有50%的人低于平均水平),所以应该对他们所做的事情进行管教约束。要防止他们做一些可能会给他们 正在开发的系统带来危害的事情。通常,这种态度体现在一些系统设计和工具中时,你会发现它们会试图阻止程序员去做某些事情,限制程序员的一些做法,以此避 免他们陷入过于复杂的境况。

另一种态度认为程序员都是可以信赖的专业人员,应该给他们做自己任何想做的事情的自由。秉持这种态度的软件设计 以好用易用为目标,但前提假设是程序员必须知道自己在做什么。所以,遵循这种态度的软件设计里并不会特意阻止程序员错误的使用它们。而你可以不正确的使用 它们,但因为这种态度认为你是知道如何正确的使用它,所以,如果你没有按正确的方式使用,后果自负。

软件开发中的很多争论的挑起都是因为观点方要么持约束态度,要么持纵容态度。这种态度上的差异影响到了对编程语言、设计方案、开发工具、开发过程等很多方面的选择。

下面是这两种对立态度的一些例子:

前不久有一场讨论,是由Joel Spolsky的一篇关于异常(Exceptions)的博客引起的。Joel Spolsky不喜欢异常,因为它很容易引起误用,导致代码混乱不堪(约束态度)。而Bill Caputo指出,异常,如果用的好,可以让你的编程更简单方便(纵容态度)。

一些关于静态/动态类型的争论也体现了这两种态度的差异。喜欢静态类型的人会说静态类型能防止你犯某些错误(约束态度)。而动态类型支持者提出静态类型限制了很多有用的语言功能(纵容态度)。

敏捷开发实践指导是面向人的(纵容态度),而计划驱动的开发方法是在确保即使一个很烂的开发团队也能完成工作(约束态度)。

这些态度未必是持久不变的。在某些情况下人们通常会持约束态度,而另外一些情况会持纵容态度。但我想是有一个底层的因素在起作用,通常是个人性格决定的,是个人性格在这些关于应该如何开发软件的讨论表象下发挥着作用。(我是完全属于纵容类的,也许你没看出来。)

也 许你会认为对一个程序员的行为的任何限制都反映了一种约束态度,可事情并不是这么简单。比如说对内存的管理。也许你会认为这是一种约束的表现:不能相信程 序员有能力正确的对内存进行管理,所以,剥夺他们分配内存的权利。但我却把内存上的这种管理视为一种纵容策略——它拿走了我一些不想为之操心的权利,反而 我可以专注于那些我很关心的事情。Steve通过将“问题”和“困难”进行比较,很好的支持了我的这种观点。

文章转载自 开源中国社区 [http://www.oschina.net]

相关文章
|
SQL 前端开发 Java
SpringMVC系列(四)之SpringMVC实现文件上传和下载
SpringMVC系列(四)之SpringMVC实现文件上传和下载
|
6月前
|
设计模式 存储 Java
【设计模式】【行为型模式】备忘录模式(Memento)
一、入门 什么是备忘录模式? 备忘录模式(Memento Pattern)是一种行为设计模式,用于在不破坏封装性的前提下,捕获并外部化一个对象的内部状态,以便在需要时恢复该状态。它通常用于实现撤销操作
220 8
|
存储 机器学习/深度学习 人工智能
二维码生成原理和解码原理
二维码(Quick Response Code,简称QR码)是一种广泛使用的二维条形码技术。二维码能有效地存储和传递信息,广泛应用于商品追溯、支付、广告等多个领域。二维码的主要特点是信息存储量大、读取速度快、容错能力强等。
2240 2
|
机器学习/深度学习 API 开发者
深入浅出:使用Python实现机器学习模型的部署
在本文中,我们将探讨如何使用Python语言将机器学习模型从开发环境迁移到生产环境的过程。与传统的技术文章摘要不同,我们不仅会概述关键步骤和常见挑战,还将引入一个简易的案例研究,通过这个案例,读者能够更直观地理解模型部署的全过程及其重要性。我们将重点讨论模型封装、API设计、容器化技术以及云服务部署等关键技术,旨在为广大开发者提供一个清晰、实用的模型部署指南。
|
缓存 容灾 架构师
极客时间架构实战营总结
极客时间架构实战营总结
774 0
|
存储 缓存 算法
zram:基于压缩的RAM块设备 【ChatGPT】
zram:基于压缩的RAM块设备 【ChatGPT】
|
架构师 NoSQL 中间件
挑战架构师极限:分布式锁的四种实现方式,优劣对比让你一目了然!
【8月更文挑战第29天】在2024年软考架构师考试中,掌握分布式锁的实现方法极其重要。本文详细介绍了基于数据库、Redis及ZooKeeper三种常见分布式锁方案。数据库锁简单易懂但性能低;Redis锁性能优越且支持自动续期,但需引入中间件;ZooKeeper锁可靠性高,适用于分布式环境,但实现复杂。通过对比各方案优缺点,帮助考生更好地应对考试,选择最适合业务场景的分布式锁策略。
1313 0
|
JSON 算法 C语言
【leecode刷题】各种哈希表最全面总结----以217. 存在重复元素为例
【leecode刷题】各种哈希表最全面总结----以217. 存在重复元素为例
311 0
【leecode刷题】各种哈希表最全面总结----以217. 存在重复元素为例