`
pangwu86
  • 浏览: 115879 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

读《代码整洁之道》有感——如何写出好代码

阅读更多

怀念小时候写作文了,布置作业,回去读《OOXX》这本书,然后写篇读后感,就叫“读《OOXX》有感”。

 


作为一个程序员,一直以来以写出好代码为目标。

 

但也迷茫过,究竟写出来的怎样才能算是好代码呢。

 

读了不少技术书,大多数都是以如何使用某个框架,某个技术,某个语言为主,也有像《程序员修炼之道》或《高效程序员的45个习惯》这样的,会告诉一个好的程序员必备的素质方面的书籍,当然像《重构》这类书籍来说,已经算是比较接近教你写出好代码的教科书了。

 

 

但读下来终究还是有那么一点点疑惑,到底写代码时,要注意什么呢,注意到什么地步,这个力度如何把握。

 

比如说,有人告诉你,“代码记得要写注释呀”,但这个注释怎么写,写在哪里,写多少字,有没有什么格式要求,没有人告诉过,他们一般也就跟你说,“写出来的能让别人看明白就行”。

 

记得很早的时候,有个老师说过,可以通过模仿书中的例子或模仿开源项目中的写法来提高。这招确实很受用,但也有其局限性,因为你往往只是看到了最终成型的那段代码,它是完美的高效的,但那个从不完美到完美的过程是被忽略掉的,也是最重要的,所以一段好代码产生的过程才是更值得我们去关注与学习的(这很像玩dota时,大家非常喜欢看高手的第一视角视频一样)。

 

比如真的等自己开始敲代码的时候(特别是一个全新的项目,没有什么可以参考,你自己来创作),可能会像过去上学写作文一样,不知道如何下笔了,这个开头咋写来,怎么分段来,这个词用的合适不合适来,好多问题都来了。

 

可能有人说了,代码么,能运行就好啦,实现功能为先,尽量结构写的清晰点,多用点设计模式,注释写详细点,后续修改时,余地留的大一点,基本上这份代码就算不错的了。

 

确实在现实中,各种工期短,人员少,大家能力不均衡的情况下,你想搞出一份既能达到项目要求,代码质量又非常高的一份代码,实属不易。而且很多的项目属于那种基于某个框架下的针对某个业务需求来做,大部分码农兄弟也就干点写写CRUD操作,写写DAO,写写Service等体力活。

 

但本人觉得,如果你能有机会参与一个产品的架构工作(类似写出一个你常用的框架),或者你有时间去搞一个开源软件啥的(没有老板来催你要产品),养成一个写出好代码的习惯(或者叫做“代码感”,“代码洁癖”),还是非常有必要的。

 

这里重点推荐下《代码整洁之道》这本书,虽然目前只看到一半,但已感觉受益匪浅。

 

书中有个观点:优雅与高效

 

代码逻辑应当直截了当,叫缺陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略完善错误处理代码;性能调至最优,省得引诱别人做没规矩的优化,搞出一堆混乱来。整洁的代码只做好一件事。

 

高效不必说了,相信这是大家已经在追求的目标了。

 

而优雅,往往是被大家忽略的,也是最难做到的。

 

优雅,优美雅致,外表或举止上令人愉悦的优美和雅观;令人愉悦的精致和简单。

 

一般来说优雅是用来形容文学作品,艺术品等,那一份代码要做到什么程度才会被称为优雅呢。

 

书中给的答案是,代码总是看起来像是某位特别在意它的人写的。几乎没有改进的余地。代码作者什么都想到了,如果你企图改进它,总会回到原点,赞叹某人留给你的代码—全心投入的某人留下的代码。

 

简单来说,就是你能明显的看出来作者是用心在写这段代码。一份优雅的代码就如一篇优雅的文章一样,你能明白那一段对话,一个遣词是如此的精妙,要表达的意思是如此的简单明了而富于深意。

 

如果你在看完一段代码后,不由自主的由内心发出一句,“操,这段写的太棒了!”,那它一定是段好代码。

 

当然想写出好代码也不是看了一本书后就能学会了,因为这些经验理论准则等等教条一样的东西虽然很有用,但只有在实际项目中去不断实践它,才能体会出其真正的意义所在,你才能深刻的明白它是为什么这样做的,你也才能做到真正的使用它,而不是被它所束缚住,才达到更高的一层境界(记得电影《太极张三丰》中,张三丰对张无忌说,你是不是把刚才学的招式都忘掉了,好,这才是真正的学会了)。

 

遵循某些常用的准则,但又不拘泥于其中,能够根据实际情况需要,灵活的做出取舍,来达到最终目标的,才是一份真正优雅高效的好代码。

 

还要记住,好代码也不是一蹴而就的,跟写文章一样,需要不断的修改修改再修改,提炼提炼再提炼。

 

至于怎么写好代码,要注意啥,ME也不想copy书中的话了,大家自己去学习理解吧。

 

至于你觉得到底需不需要看这本书,举几个例子就行了。

 

例子1

 

private Date date;
 

 

例子2

 

/*  the day of month */
private Date dayOfMonth;
 

 

例子3

//如果你在一个项目中定义过并同时使用过类似下面的类名:
UserInfo UserData UserManager UserController UserDriver
 

 

 

例子4

//定义过类似的方法:
Circle makeCircle(double x, double y, double radius); 
render(Boolean isSuite);
 

 

 

例子5

 

public List<int[]> getThem() {
   List<int[]> list1 = new ArrayList<int[]>();
   for (int[] x : theList)  
      if (x[0] == 4)  
        list1.add(x);
   return list1;
}
 

 

如果你曾经写过上面的代码,或现在仍然在写,或者看不出来这样写有什么问题的,推荐你读一下这本书,相信会有所收获的。

 

 

PS:书就不用大家找了,直接附件送上,当然真的喜欢的话,还是推荐去买实体书吧。

PS2:看到两个包下载数量不一致,就知道有的朋友下载后出现了解压出错的问题。

切记两个压缩包需要一起下载,放在同一个目录中,然后进行解压。

iteye只能上传10M大小的问题,没办法,只能分包了。

7
4
分享到:
评论
16 楼 yangwen13 2012-05-04  
pangwu86 写道
yangwen13 写道
你必须要有以下才能解压:
_代码整洁之道_._美_马丁.扫描版.haozip02.z01

试了一下,没有问题呀,如果你还是解压不了,留个邮箱,发给你

麻烦发一下吧。
183591360@qq.com
15 楼 jackie.zhang 2012-03-28  
压缩包没办法解压缩。麻烦您发一下邮件.
jackie.zhang1230@gmail.com
14 楼 zqx888191 2011-08-10  
的确是 压缩包 坏了 。。。 能传我邮箱一份吗 zqx888191@sina.com
13 楼 juda 2011-08-09  
确实解压不了
12 楼 小白的天空 2011-08-05  
lz,麻烦发到完整的倒我邮箱吧,1045111612@qq.com。我下了两个文件不能解压,说缺少"代码整洁之道\代码整洁之道_._美_马丁.扫描版.haozip02.z01" 文件。谢谢了。
11 楼 hyj1254 2011-08-05  
不知道跟重构有什么区别。
10 楼 jackytang520 2011-08-05  
确实解压不好,jackytang520@126.com麻烦发 一份,谢谢
9 楼 java_xiaoyi 2011-08-05  
前几天java板块有个兄弟也上传了这本书,不知道跟你这本是不是重合了?
8 楼 PV_love 2011-08-05  
楼主给我传一下吧,压缩包坏掉了。真的,要不你试试,我的邮箱zhangzhpeng@gmail.com
7 楼 bbbbb1202 2011-08-05  
我也解压不了
6 楼 pangwu86 2011-08-05  
yangwen13 写道
你必须要有以下才能解压:
_代码整洁之道_._美_马丁.扫描版.haozip02.z01

试了一下,没有问题呀,如果你还是解压不了,留个邮箱,发给你
5 楼 yangwen13 2011-08-04  
你必须要有以下才能解压:
_代码整洁之道_._美_马丁.扫描版.haozip02.z01
4 楼 yangwen13 2011-08-04  
不管怎么样都不能解压哦,看来是上传时有问题了哦~
3 楼 pangwu86 2011-08-04  
KimHo 写道
压缩包数据已损坏,不能解压

两个压缩包需要一起下载,放在一个目录中,然后解压
2 楼 KimHo 2011-08-04  
压缩包数据已损坏,不能解压
1 楼 flytosea 2011-08-04  
这书我看过真的是本好书 我还特地买了实体书

相关推荐

Global site tag (gtag.js) - Google Analytics