`
pangwu86
  • 浏览: 117518 次
  • 性别: 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设计中,整齐意味着...

    jquery菜单插件jGlideMenu.zip

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

    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对象常用于存储和管理日历数据,如...

    css-kuku-kube:仅使用CSS和HTML制作的Kuku Kube游戏

    - 使用CSS预处理器(如Sass、Less)可以编写更整洁、可维护的代码,并能方便地引入变量和混合功能。 - 压缩CSS和HTML文件,减少HTTP请求,提高页面加载速度。 - 优化图片资源,使用正确的格式(如SVG用于图标)并...

    morale-mobile:使用python kivy创建一个移动应用

    《使用Python Kivy创建移动应用——“士气流动”》 在当今的移动应用开发领域,Python Kivy框架提供了一种高效且灵活的方式,让开发者能够利用Python的强大力量来构建跨平台的触控应用。本文将深入探讨如何利用Kivy...

Global site tag (gtag.js) - Google Analytics