Java开发人员需知的十大戒律

本文讲述了Java开发人员需知的十大戒律。分享给大家供大家参考,具体如下:

作为一个Java开发人员提高自己代码的质量,可维护性,是个恒久不变的话题,网上看到这篇文章,拿来自勉。

对Java开发者来说,有许多的标准和最佳实践。本文列举了每一个开发人员必须遵从的十大基本法则;如果有了可以遵从的规则而不遵从,那么将导致的是十分悲惨的结局。

1. 在你的代码里加入注释

每个人都知道这点,但不知何故忘记了遵守。算一算有多少次你“忘记”了添加注释?这是事实:注释对程序在功能上没有实质的贡献。但是,你需要一次又一次的回到你两个礼拜之前写的代码上来,可能一辈子都是这样,你一定记不住这些代码为什么会这样。如果这些代码是你的,你还比较的幸运。因为它有可能让你回忆起。但是不幸的是,很多时间,这些代码是别人的,而且很有可能他已经离开了公司。

2. 不要让事情复杂化

我以前就这么干过,而且我相信所有的人都这么干过。开发人员常常为一个简单的问题而提出一个解决方案。我们为仅仅只有5个用户的应用而引入EJBs。我们为一个应用使用框架而它根本不需要。我们加入属性文件,面向对象的解决方案,和线程到应用中,但是它根本不需要这些。为什么我们这样做?我们中的一些人是因为不知道怎么做更好,但是还有一些人这样做的目的是为了学习新的知识,从而使得这个应用对于我们自己来说做得比较有趣。

3. 牢牢记住——“少即是多(less is more)”并不永远是好的

代码的效率是一伟大的事情,但是在很多情况下,写更少的代码行并不能提高该代码的效率。请让我向你展示一个简单的例子。

if(newStatusCode.equals("SD") && (sellOffDate == null ||
todayDate.compareTo(sellOffDate)<0 || (lastUsedDate != null &&
todayDate.compareTo(lastUsedDate)>0)) ||
(newStatusCode.equals("OBS") && (OBSDate == null ||
todayDate.compareTo(OBSDate)<0))){
   newStatusCode = "NYP";
}

我想问一句:说出上面的那段代码的if条件想干什么容易吗?现在,我们再来假设无论是谁写出这段代码,而没有遵从第一条规则——在你的代码里加入注释。
如果我们把这个条件分到两个独立的if陈述句中,难道不是更简单一些吗?现在,考虑下面的修正代码:

if(newStatusCode.equals("SD") && (sellOffDate == null ||
todayDate.compareTo(sellOffDate)<0 || (lastUsedDate != null &&
todayDate.compareTo(lastUsedDate)>0))){
   newStatusCode = "NYP";
}else
if(newStatusCode.equals("OBS") && (OBSDate == null ||
todayDate.compareTo(OBSDate)<0))
{
   newStatusCode = "NYP";
}

难道它不是有了更好的可读性?是的,我们重复了陈述条件。是的,我们多出了一个多余的“IF”和两对多余的括弧。但是代码有了更好的可读性和可理解性。

4. 请不要有硬代码

开发人员常常有意识的忘记或者忽视这条规则,原因是我们,和一般时候一样,在赶时间。如果我们遵从这条规则,我们可能会赶不上进度。我们可能不能结束我们的当前状态。但是写一条额外的定义静态常量的代码行又能花费我们多少时间呢?
这里有一个例子。

public class A {
  public static final String S_CONSTANT_ABC = "ABC";
  public boolean methodA(String sParam1){
   if(A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){
 return true;
   }
   return false;
  }
}

现在,每一次我们需要和某一些变量比较字符串“ABC”的时候,我们只需要引用S_CONSTANT_ABC,而不是记住实际的代码是什么。它还有一个好处是:更加容易在一个地方修改常量,而不是在所有的代码中寻找这个代码。

5. 不要发明你自己的frameworks

已经推出了几千种frameworks,而且它们中的大多数是开源的。这些frameworks中间有很多是极好的解决方案,被应用到成千上万的应用中。你们需要跟上这些新frameworks的步伐,最起码是肤浅的。在这些极好的、应用广泛的frameworks中间,一个最好的、最直接的例子是Struts。在你所能想象到的frameworks中,这个开源的web frameworks对于基于web的应用是一个完美的候选者。但是你必须记住第二条规则——不要让事情复杂化。如果你开发的应用只有三个页面—请,不要使用Struts,对于这样一个应用,没有什么“控制”请求的。

6. 不要打印行和字符串相加

我知道,为了调试的目的,开发人员喜欢在每一个我们认为适合的地方添加System.out.println,而且我们会对我们自己说,会在以后删掉这些代码的。但是我们常常忘掉删去这些代码行,或者我们根本就不想删掉它们。我们使用System.out.println来测试,当我们测试完成以后,为什么我们还能接触到它们呢?我们可能删掉一行我们实际需要的代码,仅仅是因为你低估了System.out.println所带来的伤害,考虑下面的代码:

public class BadCode {
  public static void calculationWithPrint(){
   double someValue = 0D;
   for (int i = 0; i < 10000; i++) {
 System.out.println(someValue = someValue + i);
   }
  }
  public static void calculationWithOutPrint(){
   double someValue = 0D;
   for (int i = 0; i < 10000; i++) {
 someValue = someValue + i;
   }
  }
  public static void main(String [] n) {
   BadCode.calculationWithPrint();
   BadCode.calculationWithOutPrint();
  }
}

在下面的表格中,你能够看到calculationWithOutPrint()方法的运行花了0.001204秒。相比较而言,运行calculationWithPrint()方法花了令人惊讶的10.52秒。

(如果你不知道怎么得到一个像这样的表格,请参阅我的文章“Java Profiling with WSAD” Java Profiling with WSAD)
避免这样一个CPU浪费的最好方法是引入一个包装器方法,就象下面这样

public class BadCode {
 public static final int DEBUG_MODE = 1;
 public static final int PRODUCTION_MODE = 2;
 public static void calculationWithPrint(int logMode){
  double someValue = 0D;
  for(int i = 0; i < 10000; i++) {
   someValue = someValue + i;
   myPrintMethod(logMode, someValue);
  }
 }
 public static void myPrintMethod(int logMode, double value) {
  if (logMode > BadCode.DEBUG_MODE) { return; }
  System.out.println(value);
 }
 public static void main(String [] n) {
   BadCode.calculationWithPrint(BadCode.PRODUCTION_MODE);
 }
}

在下面的图中,你将看到,使用了StringBuffer的那个方法只花了0.01秒来执行,而那个使用了字符串相加的方法却花了0.08秒来运行。选择是显而易见的。

7. 关注GUI

不管这听起来有多么可笑,我都要再三地说明:GUI对于商业客户来说和功能和性能一样重要。GUI是一个成功的系统的必要的一部分。(但是),IT杂志常常倾向于忽视GUI的重要性。很多机构为了省钱而不雇用那些在设计“用户友好”GUI方面有丰富经验的设计人员。Java开发人员不得不依赖他们自己的HTML知识,但是他们在这方面的知识十分有限。我看到过很多这样的应用:它们是“计算机友好”,而不是“用户友好”我很少很少能看到有开发人员既精通软件开发,又精通GUI开发。如果你是那个不幸的开发人员,被分配去开发用户接口,你应该遵从以下的三条原则:

一、不要重复发明轮子。寻找有相似用户接口需求的已经存在的系统。
二、首先创建一个原型。这是非常重要的步骤。客户喜欢看看他们将要得到什么。这对你来说也是很好的,因为在你全力以赴而做出一个将要使用户生气的用户接口之前,你就得到了它们的反馈。
三、戴用户的帽子。换一句话说,站在用户的视角检查应用的需求。例如,一个总结页面到底要不要分页。作为一个软件开发者,你倾向于在一个系统中忽视分页,因为这样使得你有比较少的开发复杂性。但是,这对于从一个用户的视角来说却不是最好的解决方案,因为小结的数据将会有成百上千个数据行。

8. 永远准备文档化的需求

每一个业务需求都必须文档化。这可能在一些童话故事里才能成真,但是在现实世界却不可能。不管时间对于你的开发来说是多么紧迫,也不管交付日期马上就要到来,你永远都必须清楚,每一个业务需求是文档化的。

9. 单元测试、单元测试、单元测试

我将不会深入地讨论哪些什么是把你的代码进行单元测试的最佳方法的细节问题。我将要说的是单元测试必须要做。这是编程的最基本的法则。这是上面所有法则中最不能被忽略的一个。如果你的同事能为你的代码创建和测试单元测试,这是最好不过的事。但是如果没有人为你做这些事,那么你就必须自己做。在创建你的单元测试计划的时候,遵从下面的这些规则:

一、在写代码之前就写单元测试用例。
二、在单元测试里写注释。
三、测试一切执行“interesting”功能的公有方法(“interesting”的意思是非setters或getters方法,除非它们通过一种特殊的方式执行set和get方法)。

10. 记住—质量,而不是数量。

不要在办公室里呆得太晚(当你不必呆的太晚的时候)。我理解有时,产品的问题、紧迫的最终期限、意想不到的事件都会阻止我们按时下班。但是,在正常情况下,经理是不会赏识和奖赏那些下班太晚的员工的,他赏识他们是因为他们所做产品的质量。如果你遵从了我上面给出的那些规则,你将会发现你的代码更加少的bug,更加多的可维护性。而这才是你的工作的最重要的部分。

总结

在这篇文章里,我给出了针对Java开发人员的十个重要的规则。重要的不仅仅是知道这些规则,在编码的过程中遵从这些规则更为重要。希望这些规则能够帮助我们成为更好的编程人员和专业人员。

希望本文所述对大家Java程序设计有所帮助。

(0)

相关推荐

  • java使用OGEngine开发2048

    最近有一款2048的游戏非常火,本文将来介绍一下使用OGEngine游戏引擎开发游戏2048. OGEngine引擎是开源的,我们很容易找到,搭建起来也很方便,我们只需在Android工程下添加OGEngine的jar包或者直接引用源码就可以了. 源码下载:http://www.ogengine.com/download/resources.jsp private void initView() { // 游戏背景 AnimatedSprite game_bg = new AnimatedSpr

  • java开发微信公众号支付

    最近做了微信公众号支付的开发,由于是第一次做也摸索了几天的时间,也只是达到了实现功能的水平,并没有太多考虑到性能问题,所以这篇文章比较适合初学者. 微信公众号支付的总体其实很简单,大致就分为三步.第一步需要获取用户授权:第二步调用统一下单接口获取预支付id:第三步H5调起微信支付的内置的js.下面介绍具体每一步的开发流程. 一    首先要明确微信公众号支付属于网页版支付,所以相较于app的直接调取微信支付要多一步微信授权.也就是需要获取用户的openid.微信公众号使用的交易类型是JSAPI,

  • 10种Java开发者编写SQL语句时常见错误

    Java开发者对于面向对象编程思维与命令行编程思维的协调程度,取决于他们如下几种能力的水平: 技巧(任何人都可以编写命令行形式的代码) 教条(有的人使用"模式 - 模式"的方式,即模式无处不在,并以名字作为标识) 情绪状况(在初期,真正面向对象形式的代码比起命令式代码会更加难懂.) 但是,当Java开发人员编写SQL语句时,一切都变得不同了.SQL是一种说明式语言,与面向对象思想和命令式思想无关.在SQL语言中,查询非常容易表达.但它也不是那么容易以最佳或最正确地方式编写出来.开发人员

  • 完整java开发中JDBC连接数据库代码和步骤

    JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String className)实现. 例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(ClassNotFoundException e){ Sys

  • Java开发环境配置方法

    下面通过图文并茂的方式给大家讲解下Java开发环境配置,具体内容如下: 对于JAVA新手来说,刚开始要学JAVA,而自己的电脑上毫无与JAVA开发有关的环境,应该如何进行配置呢? (安卓新手也需要JAVA开发环境) 第一步,下载.安装java JRE JRE (Java Runtime Environment),即Java运行环境,是运行JAVA程序所必须的环境的集合,包含各种类库. 1.Jre官方下载; http://www.oracle.com/technetwork/java/javase

  • 分享15款Java程序员必备的开发工具

    如果你是一名Web开发人员,那么用膝盖想也知道你的职业生涯大部分将使用Java而度过.这是一款商业级的编程语言,我们没有办法不接触它. 对于Java,有两种截然不同的观点:一种认为Java是最简单功能最强大的编程语言之一,另一种则表示这种编程语言既难用又复杂. 下面这些工具或许功能和作用不同,但是有着一个共同的主旨,那就是--它们都是为了给Java编码和开发提供卓越的支持. 1. JDK(Java开发工具包)如果你打算用Java开发一些小程序和应用程序,那么首先得给自己准备一个类似于JDK的工具

  • Java开发之Spring连接数据库方法实例分析

    本文实例讲述了Java开发之Spring连接数据库方法.分享给大家供大家参考,具体如下: 接口: package cn.com.service; import java.util.List; import cn.com.bean.PersonBean; public interface PersonService { //保存 public void save(PersonBean person); //更新 public void update(PersonBean person); //获取

  • Ubuntu搭建Java开发环境笔记

    没有用Java写过程序,做为一个Java新手,在写第一个Hello,world程序之前,先在Ubuntu中搭建Java开发环境. 一.JDK安装 好吧,我选择JDK1.6,是不是有点out了? 1.下载JDK1.6,你可以到官网去下载,下载时请看清自己的系统版本,记得一定要下载相应的版本. http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.ht

  • Java开发人员需知的十大戒律

    本文讲述了Java开发人员需知的十大戒律.分享给大家供大家参考,具体如下: 作为一个Java开发人员提高自己代码的质量,可维护性,是个恒久不变的话题,网上看到这篇文章,拿来自勉. 对Java开发者来说,有许多的标准和最佳实践.本文列举了每一个开发人员必须遵从的十大基本法则:如果有了可以遵从的规则而不遵从,那么将导致的是十分悲惨的结局. 1. 在你的代码里加入注释 每个人都知道这点,但不知何故忘记了遵守.算一算有多少次你"忘记"了添加注释?这是事实:注释对程序在功能上没有实质的贡献.但是

  • 分享下网站开发人员应该知道的61件事

    不出意料地,他得到了一大堆回答. 通常情况下,你需要把所有人的发言从头到尾读一遍.但是,Stack Overflow有一个很贴心的设计,它允许在问题下方开设一个wiki区,让所有人共同编辑一个最佳答案.于是,就有了下面这篇文章,一共总结出六个方面共计61条"网站开发须知". 我发现,这种概述性的问题,最适合这种集合群智.头脑风暴式的回答方式了.这也是我第一次觉得,Stack Overflow做到了Wikipedia做不到的事.(难怪它最近挤进了全美前400大网站.) 在我的印象中,关于

  • Java开发人员最常犯的10个错误

    这个列表总结了10个Java开发人员最常犯的错误. Array转ArrayList 当需要把Array转成ArrayList的时候,开发人员经常这样做: List<String> list = Arrays.asList(arr); Arrays.asList()会返回一个ArrayList,但是要特别注意,这个ArrayList是Arrays类的静态内部类,并不是java.util.ArrayList类.java.util.Arrays.ArrayList类实现了set(), get(),c

  • web开发人员学习jQuery的6大理由及jQuery的优势介绍

    jQuery是一个用来简化HTML客户端开发的JS(JavaScrip)库,它支持HTML DOM处理,同时还融合了部分HTML和CSS.许多网站建设公司已经加入了jQuery的阵营,你的公司也该加入了. 下面就来看看jQuery为何对公司有如此大的影响吧. 1.jQuery简化了工作 学习jQuery非常容易--毕竟这个函数库由更简短.更简洁的代码创建.jQuery具有语句简洁.编码标准开放的特点,这些特点帮助开发者缩短了配置网站和应用所需的时间. 另外,使用jQuery创建web页面时,不要

  • 开发人员必知的8个常用linux命令

    我们以一些文本举例.假设我们有2个文件,里面有订单关于第三方的放置地点和发送回应.cat order.out.log8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.998:23:45 112, 1, Joy of Clojure, Hardcover, 29.998:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition,

  • [JAVA]十四种Java开发工具点评

    在计算机开发语言的历史中,从来没有哪种语言象Java那样受到如此众多厂商的支持,有如此多的开发工具,Java菜鸟们如初入大观园的刘姥姥,看花了眼,不知该何种选择.的确,这些工具各有所长,都没有绝对完美的,就算是老鸟也很难做出选择.在本文中我简要介绍了常见的十四种Java开发工具的特点,管中窥"器",希望能对大家有所帮助. 1.JDK (Java Development Kit) 2.Java Workshop 3.NetBeans 与Sun Java Studio 5 4.Borlan

  • 一个开发人员眼中的JSP技术(下)

    使用定制化的标签 尽管你可以在JSP页面中植入Java代码并在服务器方执行,但是,JSP也支持使用定制标签来插入动态内容,它有一种机制可以让你在JSP页面中插入你自己的.与HTML类似的标签.换句话说,你的JSP网页能够使用插入Java代码的简单标签语法产生动态的内容.但定制标签的用处不是很大. 创建一个定制标签比在JSP网页中使用简单的scriptlet要复杂得多,因为定制标签需要用几个步骤来把你的Java组件和JSP代码连接起来.不过,定制标签在分发和重复使用的时候就非常简单了.对定制标签的

  • 十大求职陷阱公布 骗子敢用真信息欺诈求职者

    请擦亮你的双眼,在求职跳槽高峰期的这段日子里,看清这世界形形色色职场"陷阱".昨天,根据连日来700多网友的积极投票,市劳动和社会保障局所属的上海公共招聘网发布了"我最需防范的十大求职陷阱". 1.试用陷阱 以新招人员替代试用期满人员  [经典案例]吴先生应聘某汽车销售服务公司的汽车驾驶员岗位.单位承诺3个月试用,录用后发现,该单位仍在进行汽车驾驶员招聘工作.吴先生按约定做满3个月,却接到了单位的辞退通知. 2.培训陷阱 以招聘为名为培训学校拉生源 [经典案例]张小

  • 必须详细与全面的Java开发环境搭建图文教程

    在项目产品开发中,开发环境搭建是软件开发的首要阶段,也是必须阶段,只有开发环境搭建好了,方可进行开发,良好的开发环境搭建,为后续的开发工作带来极大便利. 对于大公司来说,软件开发环境搭建工作一般是由运维来做,然而,对于小公司来说,这个工作就交给开发人员来做了,如开发经理.不管这个工作是交给运维人员做,还是 交给开发人员做,能确定的是:做这件事的人,一定是个资深的人,如此,方可让开发环境稳定运行,从而为后续的开发提供便利. 现实中,只有极少部分开发人员接触服务器(能接触的人,基本都是开发组长及其以

  • Java程序员容易犯的10大低级错误

    本文根据java开发人员在编码过程中容易忽视或经常出错的地方进行了整理,总结了十个比较常见的低级错误点,方便大家学习. 1.不能用"=="比较两个字符串内容相等. 2. 对list做foreach循环时,循环代码中不能修改list的结构. 3. 日志和实际情况不一致;捕获异常后没有在日志中记录异常栈. 4. 魔鬼数字. 5. 空指针异常. 6. 数组下标越界. 7. 将字符串转换为数字时没有捕获NumberFormatException异常. 8. 对文件.IO.数据库等资源进行操作后

随机推荐