阅读更多

3顶
4踩

研发管理

翻译新闻 写更好的代码,还是写更少的代码?

2012-11-22 15:35 by 副主编 wangguo 评论(15) 有8343人浏览
先来看一个有趣的讨论:
引用
我宁愿让我的学生尽他们最大的努力去写更好的代码,而不是写更好的注释。——Uncle Bob Martin(设计模式和敏捷开发先驱,《代码整洁之道》作者)

比起“更好”的代码,我更宁愿学生们写更少的代码。——Bob Marshall

没有任何事情比“非常有效率地做了一件本不应该做的事”更没用的了。——Peter Drucker

这引发了一场关于“写更好的代码”还是“写更少的代码”的讨论。

一个好的折中方案就是,用更少的代码写出更好的代码。代码的优劣或多少不是看代码行数,也不是其他一些愚蠢的东西,而主要看的是有意义的代码。在这场讨论中,支持“更少代码”的一方,关心的不是使代码尽可能紧凑、避免重复,等等,而是他们认为只要合理,尽可能少些或不写代码。

我们是否应该将重点放在决定什么应该做,什么不应该做,还是应该竭力去改进我们的软件开发技能?

无论如何,在没有一个上下文环境的情况下,谁也无法合理地回答这个问题。下面我们来分开讨论。


更好的代码

这是站在开发者的角度来说的。在大部分中、大型软件开发公司中,开发者与产品管理者或产品所有者之间几乎没有任何直接联系,这意味着,管理者对于产品的构建知识知道得很少,甚至一点都不知道。

当然,作为一个开发人员,我可以,也应该分享我关于构建特定功能的一些看法,但是我也不太可能有足够的信息在很多情况下做出正确的判断。比如,我认为不应该添加某一个该死的功能,就算我是对的,但如果客户让加,我的意见被采纳的几率会很小。当然,也不完全是这样,你可以说服客户改变想法,但这种情况很少。

如果你曾经参与过一个大的合同项目,每个细节在前期都已经确定好了,并且由于内部政治原因,客户方面也没人想去更改任何东西,你知道我在说什么。如果你没有在类似公司工作过,你很幸运。

在这种情况下,最好专注于构建更好的代码,而不是更少的代码,因为很难说什么是有意义的更少的代码。

更少的代码

这是站在产品管理者的角度。对于他们来说,他们首要的重点应放在构建更少的代码上。是的,我知道他们不写代码,但这仍然应该是他们首要的目标。

产品经理应该知道哪些功能能够提升产品的价值,哪些不能。他们通常更适合与客户进行这样的讨论,比如客户想要哪些功能、费用、不必要的功能、无用的代码等。

作为开发者,你的领导希望你创造更多的价值,或更少的浪费,把重点放在构建更少的代码上。当然,你可以自由地选择编写更好的代码,或者更少的代码,但是似乎选择后者要更加明智。同时,你的工作效率很大程度上取决于你完成的工作,因此,你应该用更少量的代码完成更多的功能,并注重这些代码的质量,而不是使用大量的代码来解决问题。

很显然,这场争论不会有一个确定的答案。站在产品经理的立场,我会建议Peter Drucker的观点,而对于开发者,我会建议Bob Martin的观点。

英文原文:Code Better or Code Less?

相关阅读:写更少的代码
  • 大小: 7 KB
3
4
评论 共 15 条 请登录后发表评论
15 楼 qrg 2012-11-26 20:46
简单易懂,性能高的代码即可。
14 楼 dbhljyun 2012-11-26 12:04
层次分明、简单易懂就好,尽量不要在一个方法里实现太多功能
13 楼 yuanzhij 2012-11-26 09:08
magic_seek 写道
你的论题符合:没有任何事情比“非常有效率地做了一件本不应该做的事”更没用的了。——Peter Drucker。

因为通常最好的代码也是相对最少的那个。




越简单的代码越难理解,也就是要写更多更好的注释。

就像又要马儿跑,又要马儿不吃草。

很明显就是一个矛盾体。
12 楼 magic_seek 2012-11-23 16:54
你的论题符合:没有任何事情比“非常有效率地做了一件本不应该做的事”更没用的了。——Peter Drucker。

因为通常最好的代码也是相对最少的那个。
11 楼 freezingsky 2012-11-23 14:01
都是为同一个目标前进!
10 楼 allenny 2012-11-23 12:20
代码越简单,它离好就越近,当然,它首先必须是有用的代码
9 楼 雪飘寒 2012-11-23 09:45
确实总碰到这种情况
少代码,代码就一个方法,同一个功能五六百行,杂糅一起,看不懂
好代码,分层清晰,结构,名称都很明了,抽象出很多东西,同一个造成七八个方法,加起来比放一起多个50%吧

个人还是喜欢好代码,易于维护才是王道,写代码的目的还是给人看的,不是给计算机运行的。
8 楼 weng 2012-11-23 09:34
操,这两个有矛盾吗?
7 楼 gandilong 2012-11-23 09:00
机器对代码无谓多少!
代码的好坏只对人有意义。
最少的代码不一定是最好的,同样,最多的代码也不一定是最好的。
只有逻辑性一目了然,易于理解和维护的代码才是最好的。
6 楼 leavesforeye 2012-11-23 08:52
我一直想写更好的代码,每次我拿出更好的代码跟之前的代码比较,我都发现更好的代码写的更少。

代码的多少和好与不好存在某种微妙的联系,可是谁也说不准,但是我确实确定,在我的经验里更好的代码就是更少的代码。

如果退回过去,还要考虑编译器编译后的机器码。还要考虑代码移植性,我相信那时候更好的代码和更少的代码没什么好讨论的。都是在做更高质量的产品。

所以这个问题没啥意义。产品质量决定一切。
5 楼 java门徒CZP 2012-11-22 20:50
简单的代码最好
4 楼 kidneyball 2012-11-22 19:29
作者能举出一个在功能,可扩展性,可读性上都一致的前提下,长代码写得比短代码好的例子吗?
3 楼 gundumw100 2012-11-22 18:25
希望是好的,但失望总大于希望。
2 楼 wangcgen 2012-11-22 16:57
white_crucifix 写道
没什么好讨论的,只要双方不走极端,其实本质上说的是同一回事

,凡事要有个度! 极度的追求是愚蠢的,况且是这种 仁者见仁智者见智的观点
1 楼 white_crucifix 2012-11-22 16:19
没什么好讨论的,只要双方不走极端,其实本质上说的是同一回事

发表评论

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

相关推荐

  • Eclipse使用总结

    Eclipse使用总结 1、Eclipse中出现无法找到Maven包 症状:出现org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER, 且出现无法找到Maven的依赖的问题 解决方案:Build Path -》 Java Build Path -》Libraries -》Add Library -》Maven M...

  • eclipse光标/输入焦点变成中间断开的竖线

    今天碰到个情况,在写代码的时候突然发现输入焦点突然变成中间断开的竖线,如下图 这个问题之前碰到过,但是处理完后没有记录,这次百度google了半天都没找到什么原因,后来自己找了半天终于发现是Eclipse中的“smart insert mode”这个功能导致的,这个功能的作用这里就不解释了,网上有很多。功能在下图所示位置 ...

  • eclipse中Smart Insert Mode作用

    最近在使用eclipse时,发现了Smart Insert Mode 具体这个有什么作用?谢谢各位大侠了。

  • 在Eclipse中做SVN代码回退操作

    在实践中,常见的操作如下3种,其中前两种在eclipse中都可以很容易做到,而第3种我还没发现eclipse可以做到(尽管看了很多别人的文章,但从未亲测成功过),以下分别介绍下: 1、取消本地的全部修改,回退到最近一次更新后状态 使用Team Revert 命令即可 2、将本地代码回退到之前的版本(只是在本地查看过去的代码,update后又到当前最新代码状态) 通过

  • eclipse里英文输入状态下的字体不对,如何更改?

    eclipse里英文输入状态下的字体不对,如何更改? public class ExampleFrame_05 extends JFrame {  //Frame应该携程JFramesdfdsfdsfasdfsdf-》英文状态下字体不一样  private static final long serialVersionUID=1L; 解决方法:你把输入法设置成全角输入了,切换

  • 关于Smart

    Ivar Jacobson提出了下一代软件过程的概念,指出:Agile更侧重于隐性,UP更侧重于显性;下一代软件过程的特点是Smart;关于过程的变迁,从隐性到显性,直到Smart。下一个大的技术趋势是主动软件,软件不再是被动的模式,而是主动的模式;Smart真正的含义有三个重要的环节,主动指导、主动观察、主动协助...等诸多观点。 熟悉敏捷开发的朋友,可以看到敏捷开发的四条宣言。个体和协作 胜...

  • Eclipse必备常识

    Eclipse介绍 1.windows--->perspective------>general-------->keys设置快捷键。 2.在Debug模式下如果想要查看一个变量的值,则光标选中变量名,右击,watch选项即可。 3.perspective与view perspective是一个个透视图,是由多个view组成。 view就是一个个小框框。 4.在Ecl...

  • java eclise 界面 按钮_java图形界面之图形化按钮

    标签:要将按钮图形化,只需创建一个ImageIcon对象,将图形路径赋予ImageIcon对象,然后将该对象传递给按钮即可。此处涉及eclipse中图形的路径设置,包括(项目路径下、非项目路径下、相对路径、绝对路径),相对路径前不加/,此处相对路径是相对于eclipse中项目文件夹而言的,绝对路径为图形所在未知的具体路径。以picture1.jpg(在H:/java/workspace/study...

  • Eclipse中的界面按钮布局设置——RadioGroup

    Eclipse中的界面按钮布局设置——RadioGroup 1.设置水平按钮 在RadioGroup中加入 android:orientation="horizontal" 效果 2.设置垂直按钮 在RadioGroup中加入 android:orientation = "vertical" 效果

  • Eclipse 3.0 RC2 功能说明(1)

    CVS - Concurrent Versions System (版本控制系统)Checkout from CVS (由CVS检查)Edit - 编辑Add Bookmark (新增书签)Add Task (新增作业)Collapse (程序代码折迭) : Ctrl+键盘右方数字区的- Content Assist (内容辅助 - Code Templetes启动): Alt+/ 或 C

  • eclipse的常用快捷键

    常规的快捷键有如下,反正是很多常用的就那么几个我把常用的几个放在上面,一般的放在后面大家可以看下 快捷键 目的 描述 缩写 F2 重新命名所选项目 Function 2 F3 打开当前...

  • Eclipse的Debug调试技巧大全

    一、Debug视图 调试中最常用的窗口是: 窗口 说明 Debug窗口 主要显示当前线程方法调用栈, 以及代码行数(有调试信息的代码) 断点Breakpoints窗口 => 断点列表窗口,可以方便增加断点,设置断点条件,删除断点等 变量Variables窗口 => 显示当前方法的本

  • eclipse 代码恢复到历史版本

    Eclipse每次一个可编辑的文件保存在工作台,工作台更新本地的历史文件和日志的更改。文件的本地历史可以访问和先前保存的副本文件可以恢复,只要足够所需的状态是最近在保存历史。下面我来介绍怎么进行本地代码恢复。在我们使用eclipse进行编码的时候,我们有可能进行了误操作导致代码丢失。所以把代码恢复到一个我们编码的历史时间点这个功能就显得很重要了。

  • svn冲突问题详解 SVN版本冲突解决详解

    解决版本冲突的命令。在冲突解决之后,需要使用svnresolved来告诉subversion冲突解决,这样才能提交更新。冲突发生时,subversion会在WorkCopy中保存所有的目标文件版本(上次更新版本、当前获取的版本,即别人提交的版本、自己更新的版本、目标文件。 开发人员都知道代码管理工具是开发中一个必不可少的工具,这里也不废话详细介绍了。不管你个人喜欢git还是svn还是其他,但

  • Myeclipse快捷键详述

    Compare - 比较Copy All from Left to Right (由左向右复制全部) Copy All from Right to Left (由右向左复制全部) Copy from Left to Right (由左向右复制) Copy from Right to Left (由右向左复制) Select Next Change (选取下一个变更) Select Pre...

  • Eclipse - Open Call Hierarchy (打开调用层级)

    Eclipse - Open Call Hierarchy (打开调用层级)

  • 【Eclipse】一些常见问题汇总

    一、Eclipse 异常关闭,导致重启失败,停止在Loading workbench 【解决】 删除“.metadata/.plugins ”下面的 org.eclipse.ui.workbench 和org.eclipse.ui.workbench.texteditor。

  • eclipse几个热键

    1)Alt + /修改處:視窗->喜好設定->工作台->按鍵->編輯->內容輔助。個人習慣:Shift+SPACE(空白)。簡易說明:編輯程式碼時,打sysout +Template啟動鍵,就會自動出現:System.out.println(); 。設定Template的格式:視窗->喜好設定->Java->編輯器->範本。2)程式碼自動排版:Ctrl+Shift+F修改處:視窗->喜好設定->工

  • JAVA项目更新打包部署之Eclipse外部工具升级版(Eclipse External Tools)

    这篇文章主要参考:http://www.iteye.com/topic/1120520       在这里我表示作者的思路非常好,赞一个~,可以很好的控制更新的文件省去了查找、粘贴、拷贝、打包的步骤,因为实现的功能都是一样,所以这篇文章的标题、部分内容同原著一致,这种更新打包方法非常适合中小型项目,尤其是项目上线阶段更新非常频繁的增量更新,虽然可以用hudson+maven+svn实现持续...

  • 从IDEA代码调试器的threads选项卡的一个细节谈如何学习编程

    一、背景 今天技术群里@段段同学提了一个很有意思的问题, IDEA的调试时, threads选项卡里,方法后面的 数字是啥意思?? 有些同学说是代码行数。但是我们发现有些代码并不是代码行数,而且还有 -1, 这是什么鬼?? 我们从这个很不起眼的问题,来讲述如何分析问题,如何学习。 二、研究 2.1 猜测 猜测要有上下文,首先这是调试界面,显然是给你提供调试的一些参考。 而数...

Global site tag (gtag.js) - Google Analytics