`
pangwu86
  • 浏览: 117749 次
  • 性别: 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  
这书我看过真的是本好书 我还特地买了实体书

相关推荐

    程序界面美化——仿金山词霸界面

    8. **代码组织**:为了维护代码的整洁和可扩展性,我们需要遵循良好的编程实践,如模块化设计,将界面元素的定义和逻辑分离。 9. **测试与优化**:最后,别忘了进行多轮的用户测试,收集反馈,不断调整和优化界面,...

    漂亮的flash+xml相册程序源代码

    整齐排列让图片以规则的方式展示,给用户整洁的视觉感受;随机排列则增添了几分意外和惊喜,为每次打开相册带来不同的体验。 分类选择功能的设计尤为巧妙。当用户选择不同的分类时,对应的图片会以动态效果——飞进...

    IndentGuide.zip

    对于那些使用VS2010且注重代码整洁性的程序员来说,IndentGuide无疑是值得尝试的工具。只需下载并安装"IndentGuide.zip"中的"IndentGuide.vsix"文件,你就能立刻感受到它带来的改变。让我们的代码更加有序,让编程...

    论在中职C语言课堂教学中如何激发学生的学习兴趣.pdf

    教师应强调代码整洁性和注释的重要性,引导学生养成良好的编程习惯。定期组织代码审查活动,让学生互相学习,共同提高。 参考文献方面,推荐以下几本经典书籍:《C语言程序设计——现代方法》(K.N. King)、《C ...

    EditPlus v4.1.945 简汉(双语)

    《EditPlus v4.1.945 简汉(双语)——高效文本编辑器的探索》 EditPlus是一款备受程序员和文字工作者青睐的高级文本编辑器,以其强大的功能和用户友好的界面赢得了广泛的认可。在这款v4.1.945版本中,特别加入了简体...

    jQuery CSS3节点接触形式注册表单.zip

    通过使用jQuery,开发者可以编写更简洁、更易读的代码来实现复杂的功能。 CSS3是层叠样式表的最新版本,提供了许多新的选择器、布局模式、动画和过渡效果。在这个注册表单中,CSS3被用来美化表单元素,如设置圆角、...

    滑稽

    【滑稽】——深入探索Kotlin编程语言 在IT行业中,Kotlin是一种现代、静态类型的编程语言,由JetBrains公司开发并主要应用于Android应用开发。Kotlin的设计目标是提高开发效率,减少代码量,同时保持可读性和安全性...

    浅谈PPT排版六艺.rar

    本文将深入探讨“浅谈PPT排版六艺”这一主题,包括六艺的具体内容——整齐、统一、均衡、层次、场景、焦点,以及如何应用这些原则来创建专业且引人入胜的PPT。 首先,我们来理解“整齐”。在PPT设计中,整齐意味着...

    [图解]ACCESS数据库也能这么做--“登陆界面”四步成.doc

    文档标题《[图解]ACCESS数据库也能这么做--“登陆界面”四步成.doc》本身已经概括了本文的重点内容和教学目标:通过四个步骤,即使是数据库新手也能快速上手,设计出一个简洁美观的登录界面。 文档的作者是一个新...

    计算机辅助平面设计第五章用户界面设计.ppt

    第五章《用户界面设计》为平面设计的学习者提供了一个深入探索用户界面设计的关键组成要素——用户研究、交互设计与界面设计的机会。这些要素共同构成了一个易用、美观且能带来积极用户体验的用户界面设计的坚实基础...

    jquery菜单插件jGlideMenu.zip

    对于开发者而言,jGlideMenu的源代码提供了一个很好的学习案例,展示了如何利用jQuery实现复杂的交互效果。通过研究其内部机制,开发者可以提升自己的JavaScript技能,理解如何将抽象的功能需求转化为具体的代码实现...

    彻底去除FLASH虚线边框插件 for Discuz!7.0.rar

    为了提升用户在浏览内容时的视觉感受,开发者们不断寻求各种方法来优化论坛界面,其中去除不必要的视觉元素是提高视觉效果的关键措施之一。今天,我们要探讨的插件——"彻底去除FLASH虚线边框插件 for Discuz!7.0...

    Smail Standalone Client-开源

    【Smail独立客户端——开源邮件应用的探索】 Smail Standalone Client是一款开源的邮件应用程序,专为用户提供便捷、高效的电子邮件管理服务。它源自Smail applet客户端,但作为一个独立版本,它不仅保留了原有的...

    Synergy1.8.2_64位

    无论是专业开发人员进行代码编写,设计师在不同设备间查看设计稿,还是普通用户在家庭娱乐系统和办公电脑间切换,都能感受到Synergy带来的便捷和高效。通过深入理解和熟练运用这款工具,用户可以大幅提升自己的生产...

    arhrina.github.io:개인관심사,일기,정리블로그https:arhrina.github.io

    在本项目中,我们关注的是一个个人博客站点——"arhrina.github.io",它是一个用GitHub Pages托管的网站,用于记录个人兴趣、学习心得和日常感受。从描述来看,这个博客很可能包含了作者的学习笔记、情感表达以及...

    OCD_nodes:改变节点视觉风格以更好地适应强迫症风格的 Minetest mod

    这个MOD的核心目标是通过调整游戏中的节点材质和视觉效果,使玩家在探索和建造时获得更舒适的感受。 首先,OCD_nodes依赖于一个特定的材质包——OCD材质包,该包可能包含了优化过的纹理和图像,以实现更一致和精致...

    My Bide et Musique-开源

    《My Bide et Musique——探索开源MediaPortal的媒体封面搜索插件》 MediaPortal,一个强大且功能丰富的开源媒体中心软件,深受广大用户喜爱。它不仅提供了丰富的媒体播放功能,还允许用户通过安装插件进一步扩展其...

    fortuna-intro:受Warframe的Fortuna启发的小型网页

    【标题】"Fortuna-Intro:受Warframe的Fortuna启发的小型网页"是一个基于JavaScript技术的项目,它旨在创建一个网页,展示与流行在线游戏《Warframe》中的地点——Fortuna相关的元素和设计风格。这个项目可能由游戏...

    温暖的个人像素主页模板

    像素设计通常注重细节,提供精确的布局和图形,使得整体视觉效果整洁而细腻。 描述中的同样文字再次强调了这个模板的定位——为个人用户提供的,具有温馨氛围的主页模板。这可能意味着模板的颜色搭配、元素布局以及...

    onpaper_calendar_client:纸面日历的客户端

    1. 函数封装:为了保持代码的整洁和模块化,项目中的功能通常会被封装成函数。例如,一个函数负责生成新的日历月视图,另一个函数则处理日期的点击事件。 2. 数据存储:JavaScript对象常用于存储和管理日历数据,如...

Global site tag (gtag.js) - Google Analytics