- 浏览: 5134002 次
- 性别:
- 来自: 天津
博客专栏
-
实战 Groovy
浏览量:29037
文章分类
- 全部博客 (639)
- 代码之谜 (6)
- JavaScript quirks (5)
- 程序员 (92)
- Java (93)
- BT编程 (7)
- html/css (64)
- Groovy&Grails (42)
- Android (20)
- C/C++ (5)
- PHP/Perl/Python (46)
- 经典文章 (51)
- CodeIgniter (14)
- JQuery (10)
- 笑话 (4)
- 其他 (32)
- javascript (69)
- 云计算 (0)
- html5 (7)
- 面试 (8)
- google (3)
- nosql (2)
- nodejs (11)
- go (5)
- erlang (1)
- 小常识 (3)
- 冷知识 (5)
- database (4)
- web (12)
- 架构 (12)
- Exception (0)
最新评论
-
jqw1992:
https://www.chromefor.com/libra ...
[福利] 开发者必备的 Chrome 插件——ChromeSnifferPlus -
litjerk:
初步算了一下,目前最最精简的Win98版是5M,他5个小时多敲 ...
让人目瞪口呆的三位世界级电脑大师 -
379855529:
。。似乎重点没说NIO啊,前面基础只是铺垫的很好的,可是我要的 ...
Java NIO与IO的详细区别(通俗篇) -
springmvc_springjpa:
spring mvc demo教程源代码下载,地址:http: ...
一步步开发 Spring MVC 应用 -
匡建武:
Good
四个程序员的一天
今天,Venkat Subramaniam 就关于清除代码异味的话题给我们做了一个非常有趣的演讲。下面就是我记录的一些他的话。
为什么我们需要有质量的代码?
- 敏捷开发方法是用来应付那些要求代码做大量改动的反馈信息的方法。
- 如果程序没有用一种好的表达方式来表现,那程序会很难读,难维护,难修改。
什么是代码异味?
- 代码异味是一种由写的很差的代码引起的一种有臭味的感觉,一种程序什么地方会有问题的感觉
- 异味更多的是来自一种直觉,而不是一种有据可查的标准,当你看到有味的代码时你就“感觉”到了
- 如果你不把异味清除,不久之后你就会习惯这种气味,不再对它有察觉
- 用任何语言都能写出有异味的代码:即使最简单安全的语言,你也能做出天才才能想出的蠢事:)
-
我们经常会意识不到自己在写很臭的代码,经常需要外人为我们指出这点
- 边注:如果你不想刻意去批评某人的程序,不要说“太愚蠢了”,要说“哦,这很有意思…。可有一种更好的方法你知道吗”
重复的代码
- 会引起程序里面多个地方相同的错误
- 印度小伙:每两个月我们都会把这相同的错误修改一次
- Venkat:你们去掉了重复的代码了吗?
- 印度小伙:你说的这个方法不错!
不必要的复杂
- 程序员本质上讲高兴去处理复杂的问题
- 复杂最恐怖
异常处理
-
问:有什么比一个空的异常捕捉代码更糟糕的?
-
try{... } catch (Exception e){}
-
-
答:一个带有注释的空异常捕捉代码!
-
try{... } catch (Exception e){// is this required? }
-
- Java的异常检查:好还是不好?
- 如果你不想处理一个异常,就把它传递下去
- 如果你想捕捉两个异常,使用两个catch代码,不要只写一个而用If条件处理
Switch语句& 按类型的条件判断
- Switch语句和按类型的条件判断通常可以用多形性来代替
长方法
- 你不能在一屏上看到整个方法
- 这通常意味着一个方法承担这多重任务
- 难于调试
- 不可测试
- 难于重用-> 导致程序员从方法的其它地方拷贝粘贴出重复的代码
- 复杂的条件语句-> 挑战大脑的逻辑分析能力
- 方法长度:组织归纳水平比控制代码行数更重要
方法组成模式
- 方法里的所有语句都必须处在同一个归纳层次上
无用的注释
- 让代码自我表白
- 标注为什么这样,而不是如何这样
- 对方法表现进行描述等于重复表现
-
这样的注释等于重复写一遍代码
-
i += 1 //递增
-
-
长方法里用来描述这个方法有不同的功用的注释
- 把里面的功能片段提取成小方法& 删除注释
- IDE排泄物:IDE自动产生的注释空白占位符
-
糟糕的注释通常产生于TDD*
- *(TDD:Threat driven development,恐吓驱动开发)——你应该为方法的表象写注释,你应该为长方法写注释,等
-
产品里的注释:
-
//上帝保佑,我实在不知道这是什么意思
-
变量名称
- 使用能表意的名称
- 不要用单个字母做名称
- 也不要使用太长的名称
继承
- 继承更多的是被滥用了
- 组合通常优于继承
- 在一对一关系中使用继承,满足Liskov替换原则
- 不要用继承来实现方法重用
- 重用方法时,委托是个更好的选择
粘手的语言
- 这种语言更容易导致犯错误
最臭的代码
- 冗长的类
- 重复的代码
- 淘汰的方法
- 不必要的塑型(cast)
- 过度使用设计模式
代码除味
-
代码复查!
- 写出之后尽快进行
- 要增量进行
- 要复查测试用例
-
可使用结对编程
- 但要保持结对伙伴的经常变动,否则你会习惯你的气味,不再会有察觉
- 结对伙伴一、两天调换一次
一些设计原则
一些参考书籍
- 代码整洁之道(Clean Code)
- 代码大全(Code Complete) 2
- 程序员修炼之道(The Pragmatic Programmer)
- 敏捷开发修炼之道(Practices of an Agile Developer)
- 实现模式(Implementation Patterns) (from @protoiyer)
问和答
- 关于使用代码检测工具,例如PMD:这样的工具非常的有用,它能让你捕捉到很直接的问题,使你的代码复查工作专注于高层面的设计原则问题
- 关于IDE上附加的工具:不要自己去运行它们。让这些工具在后台自动的运行(或智能化)
- 动态语言里需要重构吗:动态语言里没有太多的自动重构工具,但程序员仍然应该手动的重构
- 关于动态语言的设计模式:每种语言都有自己的模式和特色。例如:smalltalk的execute around method模式
-
关于掌握多种语言
- 你应该知道处理一个问题的多种范式,多种风格和多种方式
- 一种语言中学到的特色方法应用到其它语言里
- 知道各种不同方式的各自风险
- 关于编程语言趋势:对函数性编程,移动设备编程兴趣浓厚
- 关于著书:长时间的思考书中的各项主题,多做这方面话题的讨论,吸取精华。当开始动手去写时,已经胸有成竹,2周内把书写成
- 关于思考文献:思考文献很有用,但你也要多看看批评性的思考性文章,它们是关于你如何去思考的(double loop learning?)
- 关于学习:在用户组里跟其它人合作,交流,讨论。你并不能学到所有的东西,但要努力缩小自己的“你不知道你不知道的东西”,让它成为“你知道你不知道的”
评论
16 楼
gouerli
2011-12-21
感觉和《重构》是一个含义...
15 楼
Jasontome
2011-09-23
感谢分享,学习了
14 楼
尹鹏波
2011-09-13
顶下!还不粗
13 楼
sammor
2011-06-24
代码中的坏味道,《重构》说得很好。其实对重构大同小异,我们要做到的就是使代码更加的完善。
12 楼
yonghong915
2011-06-22
真的不错,自己很多都没做到.继续努力.
11 楼
brane_sh
2011-06-17
写得还可以~~~~~~~~~ 顶下 实践最重要
10 楼
yunchow
2011-06-15
空谈没意思,大家都懂的
9 楼
keynescao
2011-06-13
郁闷啊,本来想顶的,在页头小手一抖点错位置了,报谦!
8 楼
3806850
2011-06-11
w98[quote="lyw985 写道
5"]
7 楼
3806850
2011-06-11
lyw985 写道
6 楼
wuhongyan008
2011-06-10
这不就是Matrin Fowler的《重构》中的内容么?
5 楼
energykey
2011-06-10
洗洗更健康
4 楼
greatghoul
2011-06-10
不如用代炎洁的好。
3 楼
guozq518
2011-06-09
有理论没实例 不好
2 楼
liliugen
2011-06-09
写得还可以~~~~~~~~~ 顶下
1 楼
lyw985
2011-06-08
发表评论
-
干货分享:从零开始学编程 系列汇总
2015-01-08 10:50 3546程序员总爱重新发明轮 ... -
如何看待一些知名博客推广软文的行为?
2015-01-05 13:39 3088本文来自我在知乎上的 ... -
如何看待一些知名博客推广软文的行为?
2015-01-05 13:38 1本文来自我在知乎上的一个回答:http://www.zhi ... -
发福利,整理了一份关于“资源汇总”的汇总
2014-11-13 13:28 6201觉得有用的话,可以去github关注:https://git ... -
告别码农,成为真正的程序员
2013-12-25 10:38 755971本文是我借助 Google 从网上拼凑的文章,可能条理不是 ... -
苦B程序员们,你的法拉利呢?
2013-11-26 11:34 6952每当我说起「每月大概在亚马逊买100块钱的书」,别人都会问 ... -
整理了一些免费的编程中文书籍
2013-11-04 15:02 137890在 github 上整理了一些免费的编程中文书籍 http ... -
科普帖:线程与进程
2013-09-17 16:17 6927这么解释问题吧: 单进程单线程:一个人在一个桌子上吃菜 ... -
程序员在 5 月 20 日这天有什么特别的表白方式?
2013-05-21 08:52 6416昨天在知乎回答了一个问题,程序员在 5 月 20 日这天有 ... -
程序员选择字体的标准是?
2013-05-04 10:40 7908整理自我在 SF 上的回答: 本来在 大家都用什么 ... -
怎么成为技术大牛
2013-03-25 15:50 4612本文转载自淘宝 @玉伯也叫射雕。 微博和知乎上不时 ... -
GitHub无法访问,修改hosts文件解决
2013-01-22 12:30 30490前几天由于12306的抢票插件,导致了github无法访问 ... -
随想录(程序员和收入)
2013-01-21 15:39 11769距离上一次写博客已经很长时间了,大约过了三个星期。这三个星 ... -
程序员成熟的标志
2012-12-07 14:58 11113程序员在经历了若干年 ... -
精通one,学习another,关注next
2012-11-05 09:24 6584Tip 1 要方法而不是记忆 我的一个程序员朋友常 ... -
你为什么薪水那么低(二):生产力
2012-10-22 12:57 4255在上一篇文章中提到,升薪的关键在于『你可以做别人做不了 ... -
为什么中国的程序员总被称为码农?
2012-09-28 08:10 2277今天在知乎看到这个问题。涛吴给出了一个答案,看完收益颇丰。编程 ... -
你为什么薪水那么低
2012-09-21 15:20 2929在SCDN回复了我的博客 ... -
程序员之路——一个老程序员对刚上大学的学弟学妹的忠告
2012-09-20 09:48 14612始终认为,对一个 ... -
想成为最牛程序员吗?
2012-09-05 13:10 2339Tip 1 要方法而不是记忆 我的一个程序员朋友常跟我 ...
相关推荐
reek, ruby的代码异味 检测器 用于 ruby的 代码异味 检测器目录概述快速入门示例支持的红宝石固定气味警告源代码代码异味配置文件命令行接口配置文件配置加载程序配置选项生成一个'待办事项'列表注意:要注意多个...
用科学实验来衡量哪些代码异味最难维护。前辈曾经教导我们,作为开发人员,我们最主要的职责就是不要写烂代码。除非你是单兵作战并且只是写几行很快就会弃用的Perl脚本而已,否则最重要的一点,就是你写的代码必须...
基于排序损失的ECC多标签代码异味检测方法.docx
用于代码异味重构的 Android Studio 插件。 它能够修复特定于 Android 的代码异味和/或建议适当的重构来解决它们。 该插件支持以下代码异味: 自动重构: 初始化 OnDraw (IOD) 重启动服务 (HSS) 刚性警报管理器 (RAM...
SonarQube检测出的bug、漏洞以及异味的修复整理。包含是什么bug,漏洞以及异味。以及怎么修复案例,一目了然
自动代码气味检测器自动代码气味检测器是IntelliJ IDEA插件,致力于自动检测和纠正Java代码中的代码气味。下载及安装可以按照以下步骤直接在IntelliJ IDEA中下载该插件: 按Ctrl + Alt + S或选择文件| 设置(适用于...
电子政务-居家简易清除异味的放电装置.zip
软件设计是演进过程,而重构是设计演进的基本方法。重构是指不改变软件行为的前提下,修改程序内部结构。重构说简单,做不简单。首先,需要知道代码的好坏,即代码异味,设计原则等。其次,需要以自动测试作为保障。
基于单片机的室内粉尘与异味检测系统设计.pdf
电信设备-一种具有清除异味功能的移动式空气净化装置.zip
代码味道重构练习 此存储库中的每个分支都有给定语言的练习。 原始源材料(在java分支中)是来自(C) Jason Gorman。 有关 TDD 和重构代码异味,请查看。
Storrs气味手表 这个项目很臭。 请访问的实时站点。 设置 先决条件: – 1.9.3或2.x - gem install bundler --no-ri --no-rdoc 从站点根目录: bundle install rake db:migrate ... 该站点是在/_output/临时生成的...
针对SonarQube检测出的bug、漏洞以及异味的修复整理,根据该文档可以让系统代码更加规范、系统安全更高
老人身上异味可以去除
在过去的几年里,我曾看过很多项目的大量源代码,从精美的设计到像是用胶带绑定到一起的代码。我写过新的代码也维护过其他开发人员的源代码。我喜欢编写新的代码,但也喜欢采用一些现有的代码,以某种方法将其简化或...
电子政务-具有自杀菌、除异味的电冰箱及其杀菌、除异味的方法.zip
皮斯梅尔用于检测Python代码中的代码气味的工具。 使用前,请在“ parameter.py”中指定目录。
生命的异味(组诗)