阅读更多
引用
软件设计有两种方法:一种是尽可能地简单,这种设计明显没有什么缺陷;另一种是尽可能地复杂,这种设计没有明显的缺陷。
——C.A.R. Hoare,1980年图灵奖讲座

在开发过程中,我的口头禅是: Your code may be elegant, by mine works。我为此而常常受到质疑,也有人反驳我“你不会使用最优方法!”“你在逃避测试!” 为了避免一次又一次地重复解释,我决定阐述下我的观点,仁者见仁,智者见智。

首先,我认为“项目可能会延期,但是代码会更好或更容易维护或更简洁”这句话是有问题的。项目延期,就是未完成,不应该用代码质量会更高作为借口。如果客户要在圣诞节进行推广活动,但你在12月29号才完成项目,即使提供了史上最好的产品,也是毫无价值的。

其次,我们来谈谈“最优方法”这个问题,“最优”是否意味着要写出更易于维护的代码需要更长的时间呢?其实除了大家都知道的《101个最优方法》以外,“最优”的标准是各种各样的。无论你对其进行怎样的定义,“最优方法”对所有程序员来说,应该是一种自然的编程标准。举个最简单的例子,经验丰富的程序员会自然地将变量命名为:$a、$b、 $c等,也能正确地缩进代码行。说得再深入一点,有经验的开发者知道在什么时候、如何提高效率以使得项目能如期完成。虽然 “最优方法”的标准有很多,但这些标准不会令你因此而延长项目时间。这引出我将谈到的下一点——Over-engineering(过度设计,指设计出来的系统比恰到好处要复杂臃肿的多,过度的封装、一堆继承、接口和无用的方法,以及超复杂的xml配置文件)。

像任何经验丰富的程序员一样,我了解那种想为每个项目搭建最好、最灵活、最耐用的系统的心态。但我也了解每个项目都有的商业限制:时间和资金。大多数项目都有明确的截止日期和项目预算,开发者要有意识地去控制项目规模以按时达到目标。你没有任何理由花一周时间,来为一个20行的table表上的数据库查询设置“恰当的”缓存层。多了解实用案例,如果只是为了实现一个页面访客计数器的功能而构建支持多种同时响应请求的XHR框架,是不现实的。要有眼界,这是我最强调的一点,最好的程序员不是精通如何构建最棒的系统的人,而是了解系统不需要的是哪些功能的人。

另外,在软件开发领域,上市时间是商业驱动力,在web应用开发领域,由于其动态性,这点更为明显。当时间成为关键,“最优方法”就是最简单的解决方案。

最后,我们来讨论一下技术债务(指为了匆忙实现一个功能,破坏了现有的程序库,在实现的过程中污染了代码库的设计)。如果在开发过程中,你在某个地方偷工减料了,那么就会产生无法解决的长期存在的技术债务,而且在之后的开发中,任何一个决定,都会受该债务的影响。事实上,在接手商业项目时,明白何时、如何对代码进行简化的能力是很关键的,这也是区分老手和菜鸟的标准。解决技术债务的办法有很多,但应尽量做到不产生技术债务。同样地,过度设计也不可避免地会产生技术债务。

通常人们在谈到技术债务的危险时,并没有包含商业影响。但其实技术债务与实际投资回报率是相对的,因为在许多情况下,早日上市更具成本效益。也有种情况是技术债务与收益同时存在,那么你可以慢慢偿还债务,但这会延长你的项目时间,很可能当你解决完技术债务时,你也失去了市场机会。

作为软件开发者,我们常常认为自己的工作就是开发软件,但其实这只是一种手段,我们的目的是令开发商达到他们的商业目标,你的代码也许很优雅很简洁,但如果不能达到目的,就丝毫没有意义。

英文原文:Your Code May Be Elegant
4
14
评论 共 31 条 请登录后发表评论
11 楼 nkhanxh 2012-03-19 17:57
其实就和没完没了要求完美化代码的人商量一下,能否他的工资等他完美化代码之后再发就行了。

真正对代码痴迷的人会答应的,不答应的人就是有点问题的。

大家面临的问题一样的,没钱就没法过了,公司也一样。
10 楼 lwp2000 2012-03-19 17:38
 
9 楼 lwp2000 2012-03-19 17:37
8 楼 MrLee23 2012-03-19 17:31
过渡设计...
一般初学设计的会犯这种毛病吧...
7 楼 mainlove 2012-03-19 17:00
done is better than perfect
6 楼 漫步邃思 2012-03-19 16:50
赞同,时间和利益优先,在满足前两个目标的前提写出最优的代码,项目和工程都是各方面因素的平衡,过度的追求莫方面的最优,反而会给项目带来伤害
5 楼 tlde_ti 2012-03-19 16:31
原文是 :
Your code may be elegant, by mine f***ing works

不明白为什么引用英文却去掉了一个词.;;
4 楼 kanme818 2012-03-19 16:31
应该是 Your code may be elegant, but mine works吧
3 楼 winminy2011 2012-03-19 15:53
hardPass 写道
英语太差,没看懂  :Your code may be elegant, by mine works
哪个帮我解释下,最好能分析下句子结构

你的代码是很优雅,但是我的可以工作(你的好看,我的有用。。。。。)。
2 楼 nighty 2012-03-19 15:23
这翻译的什么呀!
1 楼 hardPass 2012-03-19 15:12
英语太差,没看懂  :Your code may be elegant, by mine works
哪个帮我解释下,最好能分析下句子结构

发表评论

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

相关推荐

  • MySQL安装配置教程(超级详细、保姆级)

    一、 下载MySQL Mysql官网下载地址https://downloads.mysql.com/archives/installer/ 1. 选择想要安装的版本,本篇文章选择的是5.7.31版本,下面的那个文件,点击Download下载 二、 安装MySQL 1. 选择设置类型 ...

  • 2024 年 MySQL 8.0 安装 配置 教程 最简易(保姆级)

    首先去官网下一个MySQL MySQL :: Download MySQL Installer 这里没有看到64位的安装包, 不要着急, 这只是一个安装器, 安装包里有64位的MySQL Server8.0 这时候如果直接安装你会发现: 默认装到 C:\Program ...

  • 2021MySql-8.0.26安装详细教程(保姆级)

    MySql-8.0.26安装详细教程保姆级下载安装包安装配置配置环境变量 下载安装包 下载安装包: 下载网址: https://dev.mysql.com/downloads/ 选择这个 进入后选择 直接下载第一个 点击这里,开始下载 安装配置 解压...

  • mysql8.0.25安装配置教程(windows 64位)最详细

    官网下载MySQL2.配置初始化文件my.ini3.初始化MySQL4.安装mysql服务并启动+修改密码5.配置环境变量6.部分疑难杂病7.使用连接工具连接mysql 1.官网下载MySQL 下载Mysql点击下载mysql. 下载完成后解压到某一个文件夹...

  • mysql安装教程【安装版】

    mysql安装教程【安装版】

  • mysql数据库安装(详细)

    安装MySQL MySQL是目前最为流行的开放源码的数据库,是完全网络化的跨平台的关系型数据库系统,它是由瑞典MySQLAB公司开发,目前属于Oracle公司。任何人都能从Internet下载MySQL软件,而无需支付任费用,并且“开放...

  • MySQL 5.7详细下载安装配置教程

    MySQL5.7下载安装过程(详细步骤),包含设置密码、修改密码过程介绍。

  • MySQL数据库下载及安装教程(最最新版)

    MYSQL数据库下载和安装教程

  • Docker安装MySQL

    默认的鉴权方式,我们修改为mysql_native_password,不然的话连接会报错。虽然 docker 安装 mysql 不是一个很好的方案,但是为了个人使用方便,使用 docker 安装 mysql 还是没什么问题的。所以,我们在安装之前需要...

  • MySQL 5.7 安装教程(全步骤图解教程)

    在项目中使用到了MySQL数据库,在安装时踩了很多坑。本文用于记录MySQL安装的全过程。 在项目中使用MySQL数据库+Navicat数据库管理工具。 0、系统环境 系统版本:Windows 10 教育版 版本号:21H2 MySQL版本:...

  • MySQL 5.7.27详细下载安装配置教程

    本文详细介绍了Win 10下MySQL 5.7.27的安装及配置步骤,也列举出了一些常见的问题及解决方案

  • Linux 安装Mysql 详细教程(图文教程)

    Linux 阿里云 安装Mysql 详细教程,XShell免费版(解决官网打不开的问题)

  • MySQL详细学习教程(建议收藏)

    目录1、初识数据库1.1、什么是数据库1.2、数据库分类1.3、相关概念1.4、MySQL及其安装1.5、基本命令2、操作数据库2.1、操作数据库2.2、数据库的列类型2.3、数据库的字段属性2.4、创建数据库表2.5、数据库存储引擎2.6...

  • MySQL 8.0.19安装教程(windows 64位)

    话不多说直接开干 ...4-安装MySQL服务 + 启动MySQL 服务 5-连接MySQL + 修改密码 先去官网下载点击的MySQL的下载 下载完成后解压 解压完是这个样子 配置初始化的my.ini文件的文件 ...

  • MySQL修改root用户密码

    知道密码 在清楚的知道密码的情况之下可以使用以下几种方式修改MySQL的密码。 方式一 登录mysql

  • Mysql超详细安装配置教程(保姆级)

    有mysql官方的mysql workbench,有DataGrip,还有navicat等等。这个工具官方下载是会收费的,免费版本可以关注下面的公众号,输入navicat进行领取。安装好之后,在桌面右键点击我的电脑(有些是此电脑),然后点击属性...

  • Linux安装MySQL5.7

    下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 解压 tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar ...mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql ...

  • MySQL下载与安装

    MySQL下载与安装 一、下载 地址:https://dev.mysql.com/downloads/mysql/ 当前最新是8.0版本,我选择上一个最新的mysql-5.7.24-winx64.zip 二、安装 MySQL安装文件分两种 .msi和.zip ,.msi需要安装 zip格式...

  • Windows安装mysql详细步骤(通俗易懂,简单上手)

    前期在windows电脑尝试安装mysql,经历诸多不顺,特把安装详细步骤以及遇见的问题记录下来,提供给有需者使用。配置过程主要分为五个步骤,如下所示: (1)确认本地是否安装mysql (2)下载mysql安装包 (3)添加...

  • Ubuntu22.04 在线安装 MySQL8

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'lihaozhe'; ALTER USER 'root'@'localhost' IDENTIFIED ...update mysql.user set host = '%',plugin='mysql_native_password' where user='root'; flush privileges;

Global site tag (gtag.js) - Google Analytics