阅读更多

3顶
0踩

研发管理

转载新闻 软件开发中的两种态度

2014-03-24 10:35 by 副主编 WnouM 评论(2) 有7185人浏览
作者Martin Fowler在本文中阐述了在软件开发过程中管理层对于程序员的两种态度——约束和纵容,原文内容如下。



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

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

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

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

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

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

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

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

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

英文原文:SoftwareDevelopmentAttitude  /  译文:外刊IT评论
  • 大小: 48.6 KB
来自: 外刊IT评论
3
0
评论 共 2 条 请登录后发表评论
2 楼 sp42 2014-04-06 23:15
作为编码者,我喜欢纵容
1 楼 chaipenghui 2014-03-25 10:12
各有利弊吧

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • C++程序在Windows系统上启动失败与运行卡死问题排查实战

    C++程序在Windows系统上启动失败与运行卡死项目问题排查实战。

  • muduo网络库:09---多线程服务器之(单线程、多线程服务器的适用场合)

    “服务器开发”包罗万象,用一句话形容是:跑在多核机器上的Linux用户态的没有用户界面的长期运行(例如wget是不长期运行,httpd是长期运行的)的网络应用程序,通常是分布式系统的组成部件 并发处理 ...

  • 多线程服务器的典型适用场合

    “服务器开发”包罗万象,本文所指的“服务器开发”一句话形容是:跑在多核机器上的 Linux 用户态的没有用户界面的长期运行的网络应用程序。“长期运行”的意思不是指程序 7x24 不重启,而是程序不会因为无事可做而...

  • 服务端编程中多线程的应用

    本文是陈硕的《Linux多线程服务端编程 使用muduo C++网络库》一书中,第三章的读书笔记。其中暗红颜色的文字是自己的理解,鲜红颜色的文字表示原书中需要注意的地方。   一:进程和线程  每个进程有自己独立的...

  • Linux多线程

    文章目录Linux线程概念什么是线程线程的优点线程的缺点线程异常线程用途Linux进程VS线程进程和线程进程的多个线程共享关于进程线程的问题Linux线程控制POSIX线程库创建线程线程终止线程等待分离线程Linux线程互斥...

  • 多线程服务器的适用场合

    “服务器开发”包罗万象,本文所指的“服务器开发”的含义请见《常用模型》一文,一句话形容是:跑在多核机器上的 Linux 用户态的没有用户界面的长期运行的网络应用程序。“长期运行”的意思不是指程序 7x24 不重启...

  • 多线程服务器的常用编程模型

    这篇文章原本是前一篇博客《多线程服务器的常用编程模型》(以下简称《常用模型》)计划中的一节,今天终于写完了。 “服务器开发”包罗万象,本文所指的“服务器开发”的含义请见《常用模型》一文,一句话形容是:...

  • 使用Windbg分析从系统应用程序日志中找到的系统自动生成的dump文件去排查程序崩溃问题

    从系统应用程序日志中找到的系统自动生成的dump文件,然后使用Windbg打开dump文件进行静态分析去排查异常崩溃问题。

  • 多线程服务器

    数据量大的 connection 可以独占一个线程,并把数据处理任务分摊到另几个线程中;其他次要的辅助性 connections 可以共享一个线程。 对于 non-trivial 的服务端程序,一般会采用 non-blocking IO + IO ...

  • C++程序无法正常启动(报0xc000007b错误)问题的详细排查

    本文详细讲述C++程序启动时报“0xC000007B”错误的完整排查过程,并对相关的细节点进行了总结。

  • SQLite在多线程环境下的应用

    (7) 多个应用程序或者同一个应用程序的多个例程能同时存取同一个数据库文件吗? 多进程可以同时打开同一个数据库,也可以同时 SELECT 。但只有一个进程可以立即改数据库。 SQLite使用读/写锁定来控制数据库...

  • Nginx Web服务器搭建

    其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。Nginx专为性能优化而开发,性能是器最重要的考量,实现上非常注重效率,能经受高负载的考验,据报告能支持高达50,000个并发...

  • 【Linux】多线程01 --- 理解线程 线程控制及封装

    【Linux】多线程第一篇 --- 理解线程 线程控制及封装

  • 高级应用JAVA多线程详解(二)

    例如,浏览器的一个显示图片的线程displayThread想要执行显示图片的任务,必须等待下载线程 downloadThread将该图片下载完毕。如果图片还没有下载完,displayThread可以暂停,当downloadThread完成了任务后,再通知...

  • WebSphere 应用服务器环境搭建实践指南

    1. 引言与大多数商用应用服务器一样,如果您计划把WebSphere应用服务器(以下简称WAS)用于正式的生产环境或... WebSphere应用服务器各个版本之间安装步骤差别不大,WAS V6.x版本比以前版本的安装配置步骤中多了创建概

  • Java-美妆神域_3rm1m18i_221-wx.zip

    Java-美妆神域_3rm1m18i_221-wx.zip

  • 51单片机的温度监测与控制(温控风扇)

    51单片机的温度监测与控制(温控风扇)

  • 电赛案例,C++简单的智能家居系统,其中包含了温度监测、光照控制和报警系

    电赛案例,C++简单的智能家居系统,其中包含了温度监测、光照控制和报警系统。该系统可以: 监控室内温度:当温度超过设定阈值时,触发警报。 自动调节光照:根据光线传感器的值自动调节LED灯的亮度。 入侵检测:通过红外传感器检测入侵,并触发警报。

  • 圣诞树 html版 可修改祝福语

    圣诞树 html版 可修改祝福语。 记事本或vscode编辑html文件:ctrl+F寻找”myLabels“关键词,定位到该处即可修改祝福语

  • 基于python编写的selenium自动化测试框架,采用PO模式,页面元素采用yaml进行管理资料齐全+详细文档+高分项目+源码.zip

    【资源说明】 基于python编写的selenium自动化测试框架,采用PO模式,页面元素采用yaml进行管理资料齐全+详细文档+高分项目+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

Global site tag (gtag.js) - Google Analytics