`
歆渊
  • 浏览: 308438 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

规范何用论

    博客分类:
  • IT
阅读更多
英文原文 http://diveintomark.org/archives/2004/08/16/specs

大多数开发者是本蛋(morons),剩下的全是昆蛋(assholes)。我(Mark Pilgrim)不时的发现自己本人流于两个集团之一,所以不惭认定以下事实。


昆蛋

昆蛋精心阅读各种规范,寻找纰漏,疏忽,甚至仅仅是错别字。他们会写出严格符合规范,但是根本没用的代码。如果有人碰巧指出他写了没用的软件,他就可以自鸣得意了,然后在博客上作无辜状哭诉,指出规范中清楚证明他的极端破败软件如何如何技术性正确的条文。

有些昆蛋会写测试用例。碰到这样的人,在规范编写过程中是有好处的,因为有时搞好了可以把这些人无穷无尽的时间和精力利用起来,在规范定稿之前找出更多纰漏。不幸的是,要利用昆蛋,需要的时间和技巧有过之而无不及。这就是为什么写出好规范要如此耗时:大多数的时间浪费在了昆蛋管理上面。


本蛋

另一方面,除非被人吼了,本蛋从不主动读规范。他们做事就是淘荒几个示例程序,基于自己设想出来有限的几种情况写出看起来好用的代码。一旦交付,他们必然要被人吼,因为他们的产品很难找出哪怕一点能够符合别人用的规范。有人给他们指出规范里清楚说明他们软件破败如何严重的条文,他们于是加以修正。

本蛋一般没什么特别,但是其中有两种本蛋值得特别提及。第一种像所有本蛋一样改示例程序,交付,然后被吼,在被迫去读规范之后,他们会神奇般转变为昆蛋,辩驳说规范有歧义,或者某种程度上有误导,或者无从轻重,因为也没别人能实现,或者干脆就是错误的。这些人被称为“反社会者(sociopaths)”。不管规范定得多好,他们也不会去写与之相符的代码,所以对这些人不理也无妨。

第二种本蛋也是改示例程序,交付,然后被吼。但当他们开始习惯读规范之后,会神奇般的转变为拥护者,并且总结他们的失误写成教材。这些人被称为“专家(experts)”。几乎世上有用的教程都是由出身本蛋的专家写出来的。


天使

有人会辩驳说并非所有开发者都一定是本蛋或者昆蛋,但他们想错了。例如,有人认为存在一类我(Mark Pilgrim)称之为“天使”的开发者。“天使”仔细阅读规范后写代码,并且交付他们的产品之前针对成套测试进行全面测试。不会有真正的天使存在,不过对规范撰写者来说,有这个念像能让他们自我感觉好一些。


规范何用

如果你的规范不够好,本蛋就永远没有机会做出正确的东西。每有一个人抱怨他们的软件太破,就有两个昆蛋站出来说没有这回事。以仲裁本蛋与昆蛋之纷争为主要目的的规范,解决不了任何事情,争论还是会历年郁积。

如果你的规范够好,本蛋还有一线战机突破昆蛋的重围,知错能改而取得最终胜利。与此同时,除了挑规范毛病而无所事事的昆蛋们也就无的放矢,最后无趣而终,收手转去寻找其他人侵扰了。
3
1
分享到:
评论
2 楼 whaosoft 2009-09-13  
  形容很贴切
1 楼 liu78778 2009-09-12  
好吧..人们总是对天使充满幻想, 在昆蛋与本蛋中做着死循环

相关推荐

    由“何用”引发的思考.rar

    "由“何用”引发的思考"这一主题,可能涉及到如何利用信息技术来提升教育质量和效率的问题。从这个标题我们可以推测,讨论的核心可能是教育技术(EdTech)的应用及其对教育实践的影响。 首先,我们需要理解“何用”...

    工程招标专用何用说明书.doc

    "工程招标专用何用说明书" 本资源摘要信息是对《工程招标专用何用说明书.doc》的详细解释和分析,旨在为读者提供一个完整的信息概况。 标题:工程招标专用何用说明书 描述:工程招标专用何用说明书是对招标工程的...

    制造工艺提升有何用 浅析半导体产品制造工艺.pdf

    制造工艺提升有何用 浅析半导体产品制造工艺.pdf

    java 集成 QT Jambi4 demo 很多何用的组件,性能绝佳

    java 集成 QT Jambi4 demo 很多何用的组件,性能绝佳

    由“何用”引发的思考

    从标题《由“何用”引发的思考》和描述中,我们可以归纳出几个核心知识点: 1. 初中美术教学的现实困境 文章开头明确指出了初中美术教育面临的一些问题,比如教学内容准备的复杂性、技法性追求与学生对所学内容意义...

    Python-何用Python代替Bash脚本指南

    在IT行业中,Bash脚本由于其简单易学和广泛适用性,长期以来一直是Linux系统管理和自动化任务的首选工具。然而,随着Python的普及和功能增强,越来越多的开发者开始考虑使用Python来替代Bash脚本。...

    云计算Docker从零基础到专家实战教程06-Docker有何用? 共5页.pptx

    06-Docker有何用? 07-虚拟化与Docker 08-容器与虚拟机 09-Docker组件 10-什么是镜像? 11-如何获取镜像 12-如何搜寻镜像 13-如何创建镜像 14-如何删除镜像 15-镜像信息的查看 16-镜像的存出与载入 17-写时复制机制 ...

    照明设计中的空间向导:光的“围隔”有何用?.docx

    在“照明设计中的空间向导:光的‘围隔’有何用?”这一主题中,我们将深入探讨光如何在空间中构建围合感和隔离感,从而影响人们对环境的认知和行为。 首先,被照射面的亮度是决定围合感强度的关键因素。亮度高的...

    图论 可达矩阵 课件

    系统分析是一种旨在理解和解决问题的方法论,它通过一系列有序步骤来分析系统,并在此基础上进行决策。系统分析的核心在于对系统目标的理解、替代方案的选择、指标设定以及模型构建等方面。 #### 二、系统分析概念...

    单片机原理及应用课后习题答案

    单片机原理是电子工程和计算机科学领域的重要组成部分,它主要研究如何利用微处理器进行控制和数据处理。在“单片机原理及应用”这门课程中,学生通常会接触到单片机的基本结构、工作原理、指令系统、编程语言、接口...

    收获不知Oracle

    2.3.1.1 同学们不知所学何用 66 2.3.1.2 实际上大有用武之地 67 2.3.2 单车到飞船的经典之旅 70 2.3.2.1 未优化前,单车速度 70 2.3.2.2 绑定变量,摩托速度 72 2.3.2.3 静态改写,汽车速度 74 2.3.2.4 批量提交,...

    VB上位机程序编写_百度文库

    VB上位机程序编写_百度文库 VB上位机程序编写 - VB Mscomm 控件基本介绍 VB Mscomm 控件 一、MSComm 控件的主要属性、事件 1、MSComm 的属性 Commport:设置或返回串口号。 ... 7页 浏览:1920次 ...

    软构件的可复用模型研究

    论的发展始终以软件复用为切入点,只有被最大可 能地复用,构件才有其存在的意义和经济价值。如 何用一种较为精确的、基于实践应用的方法来评价 构件的复用性,关系到构件质量的提高和构件库的 有效性。

    基于Hbuilder的视频播放AppVideoPlay.rar

    【标题】"基于Hbuilder的视频播放AppVideoPlay.rar"是一个使用Hbuilder开发的移动应用项目,主要功能是实现视频的播放。... 【描述】中的"基于Hbuilder的视频播放AppVideoPlay"表明这个应用专门设计用于播放视频,用户...

    htmltojsx-loader:将html作为jsx加载到webpack

    HTMLtoJSX-Loader是为Webpack设计的一款加载器,它允许开发者将HTML文件转换成JSX格式,以便在React应用中直接使用。... ...但是通过这个加载器,这个过程可以自动化,提高开发效率并减少错误。安装HTMLtoJSX-Loader非常...

    matlab专用_matlab_圆内随机数_随机圆matlab_

    在MATLAB中生成圆内随机数是一项常见的任务,特别是在模拟、统计分析或图形绘制等场景。这个主题主要涉及两个核心概念:随机数生成和二维坐标系统中的几何约束。以下是对这些知识点的详细解释: ...

    原根(扩展欧几里得的应用)

    在一个模 的既约剩余系中,如果一个元素的指数恰好等于 m ) (m φ ,则这个元素即为模 的一个原根.在存在原根的既约剩余系中,每个元素均可以表示成原根的幂,反过来原根的幂 所表示的所有不同的元素恰好构成既约...

    最新小程序个人健康数据管理系统的设计与实现+ssm.zip

    微信小程序“个人健康数据管理系统的设计与实现Ssm.zip”是一款基于Spring、Spring MVC和MyBatis(SSM)框架开发的微信小程序,专为健康管理和健身爱好者设计。该项目利用了微信小程序的广泛覆盖和便利性以及SSM框架...

    单片机课后习题答案

    单片机课后习题答案

    GVIM插件OmniCppComplete0.41+ctags5.8

    GVIM插件OmniCppComplete 0.41与ctags 5.8是两个在编程领域中增强GVIM编辑器功能的重要工具。GVIM,全称Gnome下的Vi模拟器,是流行的文本编辑器Vim的一个图形界面版本,而OmniCppComplete和ctags则是GVIM中的两个...

Global site tag (gtag.js) - Google Analytics