阅读更多

6顶
9踩

研发管理

转载新闻 低质量软件编程成本价格表

2013-09-05 10:00 by 副主编 WnouM 评论(7) 有7901人浏览
注意:下面这个清单里描述的事情并不是你绝对不能做的,它只是用量化的方法来让你知道编程上的这些做法将会产生的负面代价。

这些费用是在代码审查时你将要付出的。

不遵守编码风格

费用: $0.02

代码库中的程序编码风格一致虽然不是很重要,但值得你去遵守。

在提交代码的说明信息上偷懒

费用: $0.50

这主要是为了以后的查找。请细读这篇代码提交说明信息指导(英文)

使用局部变量

费用: $1.00

大多数的局部变量都最好使用方法代替。注意:代码块参数除外。

多于一行的方法

费用: $1.50

对多于一行代码的方法要保持高度警惕。

超过5行的方法

费用: $3.00

一个方法应该只做一个事情。一个事情应该用不了5行代码就能完成。

很长的类

费用: $5.00

根据童子军(Boy Scout)法则:尽量只留下你会用到的代码。当你遇到一个比较长的类时,花点功夫精简它们。

使用魔幻数字

费用: $7.00

在代码中你只可以使用两个数字:0和1。其它的都应该用具有名字的常量代替。

在条件判断中使用`||` 或 `&&`

费用: $7.00

当你发现有 `if foo && bar` 时,把它提取到一个方法里,用来说明`foo && bar` 究竟是什么意思。

使用 case 或 switch 语句

费用: $15

一个swith语句基本上不是只做一个事情。它通常还会牵涉到其它类。

传递布尔参数

费用: $15

依赖布尔参数的程序流转叫做控制耦合,这是一种完全不应该的高耦合

类名用Manager结尾

费用: $30

“Manager”是一个很含糊的词,传达不了任何意思。使用它,很有可能你的类承担了过多的责任。

过度使用附加支持

费用: $10/object created

尽量简化你测试时需要的附加支持工具。如果能用临时对象代替,就避免使用数据库。

测试中屏蔽某些功能

费用: $10/屏蔽的方法

如果你在测试Foo类,你就不应该屏蔽或短路Foo中的任何方法。你越想这样做,越说明你需要从Foo中把这些功能提炼出来放到其它地方。

在数据库中观察集成测试效果

费用: $20

集成测试应该通过UI来验证。不要去窥探数据库。

注释

费用: $200/行

一千个注释中顶多只有一条有合理存在的理由。其它的你应该改进代码,直到不需要注释。

注释中包含 TODO 或 FIXME

费用: $500/行

我不在意代码分支中存在不多的TODO注释,但绝对不要把它们合并的代码库中。“FIXME”实际上是“fu ck you”你的同事。

无意义的命名

费用: $50/代码审查者的疑惑

一定要努力努力好好给代码命名。当系统有变化时及时修改、改进你的命名。当发现有更好的名称时,不要等待,立即换掉。

静态方法或类方法

费用: $50/个

Ruby里的类方法具有可变全局状态。想办法重构它们。

不必要的属性状态变化

费用: $100/变化

与其修改一个现有的记录,不如创建一个新的,或return一个。与其删除,不如做标记。Rich Hickey 对此有一些你值得一读的思考

一个类有多个职责

费用: $200/额外职责

一个类应该只有一个职责或目的。几乎没有人因为使得类太小而出错。鉴于此,你的类很可能太大。

重复的代码

费用: $500

编程中几乎没有任何原则你必须遵守的,但避免代码重复是个例外。代码复制给维护造成困难,严重影响代码质量。

重复的测试代码

费用: $500

测试代码并不是产品代码的次要附属物。它们的质量同等重要。更严重的:维护一个糟糕的测试套件代码可能会让你欲哭无泪。

未经测试的代码

费用: $1,000/行

未经测试的代码自诞生之时起就成了负担。这样做很不专业。

感谢Paul Graham先生的“On Lisp”,本文是受他的在某些函数上收税的想法而启发。

英文原文:How much should global variables cost?  / 译:外刊IT评论
来自: 外刊IT评论
6
9
评论 共 7 条 请登录后发表评论
7 楼 s929498110 2013-09-11 12:13
好多不赞同
6 楼 gavin 2013-09-09 15:47
追求这种东西成本同样昂贵,所用的规则、方法要和开发者、公司阶段相适应;让朝鲜人按老美的思维办事会死的很惨
5 楼 higuang 2013-09-06 22:48
不遵守编码风格
的费用要比$0.02大的$500还差不多,至少有一半说法的有问题
4 楼 raymao 2013-09-06 10:47
Azlar12345 写道

多于一行的方法
超过5行的方法

这的有人这样做么?是否考虑过给代码维护人员会带来什么样的问题?

多于一行应该是指方法签名部分(方法签名也不确切,有函数头没有方法头这个说法吧),多于五行有点不理解。难道是这样?  
... f(...){
    if(...){
        g();
    }else{
        h();
    }
}
还是这样,
... f(...){
    ...;
    ...;
    ...;
    ...;
    ...;
    g();//干不完了交给你了
}
要不就是这样
... f(...){
    ...;...;...;...;...;...;//就当是一行吧
}

一般是参数不超过三个,方法体不超过二十行
3 楼 lection.yu 2013-09-06 10:29
好几个地方不理解。超过一行的方法?
2 楼 Azlar12345 2013-09-06 10:07

多于一行的方法
超过5行的方法

这的有人这样做么?是否考虑过给代码维护人员会带来什么样的问题?
1 楼 flex_莫冲 2013-09-06 10:06
做完项目亏的一塌糊涂。

发表评论

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

相关推荐

  • 国画欣赏--李苦禅

    李苦禅(1898-1984)现代画家。 原名李英,号励公。山东高唐县人。早得曾从徐悲鸿学素描。1920年入北大攻读中文,两年后转到国立艺专学西画。1923年拜齐白石为师。1925年后长期从事美术教育和国画创作,先后在杭州...

  • 南开大学计算机学院李越,李越 简历 - 名人简历

    艺术简介 李越 ,曾用名李喆、之龙,男,汉族,1961年5月出生,山东省 德州市人,山东省美术家协会会员,中国当代实力派 国画家。幼承家学,喜好书画,国画油画兼修,尤善牡丹与马,自号香骏堂主人。1986年毕业于...

  • “大写意花鸟画宗师李苦禅先生”重磅数字藏品全网首发

    中华优秀传统文化是中华民族的“根”和...李苦禅先生和夫人李惠文女士6月11日,正值世界文化遗产日,也是李苦禅先生逝世39周年纪念日,李苦禅先生孙女李欣磬特别企划“禅心传百世·古法留人间”李苦禅、李燕父子大...

  • shiro:整合springboot快速上手(附带代码示例)

    鸟欲高飞先振翅,人求上进先读书——李苦禅 shiro 阿帕奇的安全框架 Apache Shiro是一个Java的安全管理框架,可以用在JavaEE环境下,也可以用在JavaSE环境下。 此前我们学习了很多有关阿帕奇的东西:maven,tomcat,...

  • 国画技法视频教学网址指南

    跟徐湛学国画http://v.youku.com/v_playlist/f3763337o1p0.html2.跟詹老师学国画---1http://v.youku.com/v_playlist/f2269535o1p4.html3.李苦禅作画http://v.youku.com/v_playlist/f3484772o1p17.html

  • python 经典图书排行榜_书榜 | 计算机书籍(8.12-8.18)销售排行榜

    ——李苦禅"书榜"栏目是脚本之家每周推出计算机书籍销量排行榜!数据来源于京东网、当当网、有赞微小店的计算机类书籍销量排行1京东销量排行排名书名豆瓣封面1Python编程 从入门到实践( 埃里克·马瑟斯 )9.12Python...

  • 疯狂python讲义豆瓣评分_书榜 | 计算机书籍(9.16-9.22)销售排行榜

    —— 李苦禅"书榜"栏目是脚本之家每周推出计算机书籍销量排行榜!数据来源于京东网、当当网、有赞微小店的计算机类书籍销量排行1京东销量排行排名书名豆瓣封面1Python编程 从入门到实践( 埃里克·马瑟斯 )9.12机器...

  • [转载]国画技法视频教学网址指南

    跟徐湛学国画 http://v.youku.com/v_playlist/f3763337o1p0.html 2.跟詹老师学国画---1 http://v.youku.com/v_playlist/f2269535o1p4.html 3.李苦禅作画 http://v.youku.com/v_playlist/f348477

  • 并发编程系列(十)AQS同步器独占锁加锁与解锁-源码解读

    线程池的线程特殊是AQS的子类,通过类图可以看到无论是公平锁还是非公平锁都是依赖AbstractQueuedSynchronizer实现的; AbstractOwnableSynchronizer是AbstractQueuedSynchronizer的父类为创建可能需要所有权概念的...

  • 计算机基础数据库实验报告,北航计算机软件技术基础实验报告实验报告4-2——数据库应用系统的开发...

    熟读精思子自知苏轼书痴者文必工,艺痴者技必良蒲松龄声明访问者可将本资料提供的内容用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本文档及相关...

  • 当代最值得收藏的画家作品_当代最具收藏价值的画家:许敬如作品欣赏

    原标题:当代最具收藏价值的画家:许敬如作品欣赏 许敬如简介许敬如,中国美术家协会会员,安徽省中国画学会创会理事。毕业于中央美术学院中国画系。北京艺轩画院院长,台北故宫书画院名誉院长,曲阜孔子文化艺术...

  • 练习题︱基于今日头条开源数据的词共现、新热词发现、短语发现

    ['叶浅予', '田世光', '李苦禅', '花鸟画', '中央美术学院'] tw.CoOccurrence就是对上面的内容进行解析,得到了: 发现,快乐大本营-谢娜的组合比较多,詹姆斯-猛龙嘛,看客们懂的,詹皇血克猛龙,哈哈~ 热...

  • IBM寇卫东教授纵论SOA

    李苦禅的山水画厚而且沉,凝重有力。齐白石的画风格鲜活、诙谐幽默,简括大气。这些特征就是画家的神。“神”也是SOA的最高境 界。SOA的“神 ”就是对于SOA的优化,即流程优化、灵活应变。IBM推出了智能SOA,它从...

  • 李苦蝉&李清照

    李苦蝉是个大画家,他跟李清照家挨着,看来画画跟文学是相通的,苦禅纪念馆的门柱刻满了夸奖的话,但令我印象深刻的是门廊上的石刻,有一幅喂鸭图,采用浮雕技法,细致逼真,门口一对小狮子,玲珑可人,尤其旁边刻的...

  • BootStrap实现一个简单的界面

    趵突泉周边的名胜古迹有泺源堂、观澜亭、尚志堂、李清照纪念堂、李苦禅纪念馆等景点。 div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭button> div> ...

  • 使用Labelme和PaddleSeg实现动漫人物实例分割

    文章目录 前言 一、使用Labelme进行数据标注 二、使用PaddleSeg训练 1.数据集划分 2.PaddleSeg/train.py训练 3.结果可视化 4.对动漫视频进行分割 总结 前言 众所周知,深度学习被应用于各个方面,作为一个...——李苦禅

  • 第三十 访问财富进退自如 —Spring交易管理

    .update("INSERT INTO userinfo(username,password) VALUES('李苦禅','88888888')"); super.getJdbcTemplate().update("DELETE FROM userinfo where id =2"); } catch (Exception e) { logger.error(...

  • 第三十天 出入有道进退自如 —Spring的事务管理

    .update("INSERT INTO userinfo(username,password) VALUES('李苦禅','88888888')"); super.getJdbcTemplate().update("DELETE FROM userinfo where id =2"); } catch (Exception e) { logger.error(...

  • thinkpad触控笔怎么用_联想yoga720触控笔怎么用

    8.热锅,放适量食用油,加 2020-03-14阅读(93) 高唐县的旅游景点有:义和广场、书画一条街、涸河墓群、齐盼子墓、华歆墓、清平文庙、大觉寺、李苦禅艺术馆、岳堂水月庵石塔。高唐城区内的鱼丘湖是华北地区最大的县级...

  • 果壳处理器研究小组(Topic基于RISCV64果核处理器的卷积神经网络加速器研究)详细文档+全部资料+优秀项目+源码.zip

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

Global site tag (gtag.js) - Google Analytics