程序员必须养成良好的代码习惯

开发 开发工具
本文作者在经历很长时间的开发后,感叹程序员必须养成良好的代码习惯,希望本文能对大家有所帮助。

养成良好的代码习惯,就是将代码写的漂亮,执行效率也自然就得到了提升。软件开发中包含太多东西了,需求的、设计的、测试的、管理的、文化的、心里的、沟通的,需要大家自己去琢磨。

前天在AgileChina2009上听了Fred George的演讲,他说他以前拿自己的代码给Kent Beck看,结果Kent说这代码很垃圾,你去看看我写的Smalltalk best practice patterns吧。然后Fred George就看了这本书并且完全按照书上的要求去做,5年后当他再给Kent看自己的代码时,Kent说很漂亮的代码。

考虑到Fred比Kent要老,可以看出Fred是非常虚心的,听了Kent的评价不仅没有生气,而且还完全听从了建议。当然这也可能是Kent太出名的缘故,若是我说他的代码不好,或许他就不会这样做了。

这让我联想到有一次和8x一起面试,8x的手工重构让我很是惊讶。虽然我也看过《重构》,虽然我平时也重构,但是不论从步伐还是安全性上,都相差深远。我读《重构》的时候对如此小步伐的改变是不太赞同的,因为效率比较低。我认为书中之所以把条目分的很详细,每个条目的步骤很小很谨慎,完全是为了可以让支持重构的工具得以实现,对于人来说,保持这样小的步骤太难了,不管是从记忆还是从操作的角度来看。然而8x的表现让我改变了看法,不仅速度并不慢,而且安全性非常的高。回想起我的重构经常出现改错以后没法返回的问题,不禁感叹--差距啊。

经常在国内的论坛上看到各种讨论设计、架构的帖子,然而每每show代码的时候却发现一塌糊涂。当然他们自己不觉得,可是我觉得很不好。最近 Kent Beck和Robert C.Martin出的两本书《Implementation Patterns》和《Clean Code》都是讨论一些很细节的东西的,如何命名、方法应该要多长、注释怎么写、格式怎么排等等,这些东西早在《The Element of Programming Style》中其实都有对应的东西,只不过语言不同了,细节方面也不同。然而为何这么多年来,一直有人不停的写本质上相同的东西呢?我觉得还是大家不重视,没有养成良好的习惯,自然就需要有人去写这些东西,反反复复的提醒大家。

这里再一次很惭愧的说,我没有好好去读,也没有按照书中的东西认真去做,总是以为大概了解个概念,知道怎么回事,然后差不多做到了就行了。然而现在想来,却完全不是那么回事。记得XP中有很多非常“极限”的要求,都是“一定”要如何如何,可实际上很多人都不以为然,认为太过激进,实际操作不现实或者不必要,因此在实施的时候,做了一些妥协和变通,***失败了还说XP不好。当然XP不可能是包治百病的灵丹,在某些情况下确实也不应该用它,但是很多人明明可以从中获益,却因为没有领悟到其中的精髓而早早放弃。

比如说TDD,看起来与一般的单元测试的不同只是把写测试的工作放在了写代码之前,而Pair Programming也不过就是两个人坐在一起写程序罢了。然而在实际应用中,却会发现TDD并不是那么简单,它带来的好处是你在使用之前完全想不到的,甚至很多都和Test是无关的。而Pair也不简单的就是两个人干一份工,如何根据技能的不同组合Pair,两人如何分工都有很大的讲究,甚至一般的对于Pair目的的理解可能也是错误的。因此要想证明一件东西能不能起作用,首先要完全按照他要求的方式去做,等到你真的把该遇到的问题都遇到了,你才能真正知道它是什么,能做什么,不能做什么,***才知道它到底能解决什么问题,不能解决什么问题。

在说回到代码习惯的问题,软件开发中包含太多东西了,需求的、设计的、测试的、管理的、文化的、心里的、沟通的……要想掌握这么多东西是很大的挑战。如何将一件事记住而不忘掉,***的办法就是将之变成习惯,就像呼吸一样自然,不需要刻意去想就能做到。良好的代码习惯是一个开发人员最基本的技能,使之成为习惯,会获益很多。

决定在看一遍《重构》和《实现模式》并完全按照其中的要求去做,争取也能在5年之内将之养成习惯。

原文标题:代码习惯

链接:http://www.cnblogs.com/wangyh/archive/2009/09/15/clean-code.html

【编辑推荐】

  1. 深入浅出.NET接口:阿猫阿狗和程序员
  2. 程序员如何选择入门编程语言?
  3. 程序员最常犯的五大非技术性错误
  4. Java程序员的知识架构浅析
  5. 专家级程序员的“饲养”心得
责任编辑:彭凡 来源: 博客园
相关推荐

2022-04-08 14:38:43

程序员习惯终端

2009-02-23 13:00:17

程序员职业习惯

2009-04-23 14:21:29

UML序列图绘制

2012-12-04 10:08:25

程序员

2009-07-03 16:07:58

2020-03-29 08:19:56

程序员代码

2011-05-30 14:50:56

程序员

2011-04-13 10:16:41

编程习惯

2012-05-22 00:16:47

2021-05-29 07:32:14

优秀程序员代码

2021-11-01 22:39:14

程序员专业技术

2011-04-19 10:20:09

数据库

2010-06-11 14:35:18

UML序列图

2019-11-28 18:51:07

PythonPHP编程语言

2009-06-29 08:48:39

Linux编码

2010-06-17 18:31:12

绘制UML序列图

2019-04-16 14:03:47

编程程序员代码

2011-07-15 15:10:37

PHP

2016-02-01 15:43:37

成功程序员习惯

2017-09-14 10:02:36

程序员体验验证
点赞
收藏

51CTO技术栈公众号