代码风格的变革

呵呵,当次标题党。题目起得大些,但还是从近期遇到的小事讲起。

其一,到本部考自然辩证法的时候顺便到图书馆借了两本书,一本是《软件架构艺术》,另一本是《代码整洁之道》。前者从大处着眼,后者于细节入手,倒也钩心斗角,相应成趣。近日静心看了《代码整洁之道》的前几章,感觉大部分概念以前虽然都有接触,但贯彻得不是很彻底,现在看到这样系统地描述代码风格的书籍,收获不小。

其二,前阵子参加了Google Code Jam 2010竞赛,无奈技不如人,Round 1没闯过去。以前参加ACM时代码都是单纯过程式的一路写下来,就算用Java等面向对象的语言亦是如此,还窃以为这是搞算法的ACMer的通病。后来参考了竞赛Top 10的牛人的solution代码,大多都清晰明了漂亮简洁,着实让人望尘莫及。

算法基础不扎实需要好好补一补了,而如果代码再写得不好(看),实在没有道理。虽然写代码这件将思维这抽象的东西变成具体的过程很容易出现因人而异的情况而造成结果不一,但好的代码的确有着让人看得赏心悦目的美感,尤其是寒假看Struts 2的源代码时,真切感受到代码的优雅的气质。接触编程几年来,断断续续写下的代码似乎也不少,但对比查看以往的代码时,发现有些地方写得真是要用“惨不忍睹”来形容。而这些写得不好的地方,其实都可以根据代码整洁之道中的原则进行改造的。Eclipse中对Java重构已经支持得相当好了,而且好的代码是不需要注释一看就懂的艺术品,今后发现写得又长双臭杂乱无章的代码,一定要狠下心来把它修正好!

起这个标题是因为前几天看到Top Language的讨论帖十多年来,对什么是好代码定义的变化。里面有个对比如下:

1993年的Writing Solid Code                  2008年的Clean Code
————————————————————————— ———————————–
侧重点:             代码的细节                                             好的设计

命名                   匈牙利命名法                                           描述性,可以读出声
静态检查          一定要用                                                    没强调
调试                   强调调试与跟踪的技术                         避免调试代码
IF/ELSE          避免无关紧要的if语句                           使用多态
错误处理          要面面俱到                                               使用exception
函数                   不要写多种功能于一身的函数           只做一件事,只在一个层次进行抽象
易读性               为一般水平的程序员写代码               小的就是美的,用代码代替注释
重复                   没提及                                                      是一切代码问题的根源
单元测试           一定要写                                                 TDD、 控制反转
整理代码           除非关系成败,否则不要整理         “离开时,让露营地比我们来之前更干净。”
过份设计           不要没有意义的特性                           TDD
数据抽象           关注数据流                                            迪米特法则
系统设计           不是讨论重点                                        关注点分离

总的说来,OO使得代码设计与系统设计更好的结合,所以2008年的书中对good code加入了更多对系统设计的要求。随着Aspect Oriented Programming以及系统TDD的出现,代码设计的将会越来越靠近实际的业务逻辑,远离琐碎的底层细节。优秀代码的原则: 正确优于性能,简单优于复杂,清晰优于技巧。

从这个意义上来说,再考“int j=0; j = ++j + j++ + j++ + j++;”中j最后等于多少的题真没什么实际作用了,虽然我知道它的答案是7 :P

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: