作者gnimnek168 (Gnimnek168)
看板Soft_Job
标题Re: [请益] 关於clean code书籍选择
时间Wed Jun 20 13:01:34 2018
参考个人在约五年前所写过对「无瑕的程式码:敏捷软体开发技巧守则 (中译本)」一书的书评。
http://www.kenming.idv.tw/bk_clean-code_handbook_software_craftsmanship/
简而言之,Clean Code 主要必须把持实践的原则:
1. 对类别、方法、参数、变数赋予有意义的命名。
2. 对程式码结构持续抱着重构的态度 (重构前一定要撰写单元测试程式把关):
a). 每一个方法内的陈述控制在 30 行以内 (已是最大极致)。
b). 每一个方法传递的参数不得超过5个以内 (参数的资料结构设计议题)。
另,由於原 po 从事 ASP.NET 的开发,这是落在 展示层 (Presentation tier)内的 Web UI 端开发。要切记不要在如 Web Page (View)与 UI Controller 撰写应用程式逻辑。
关於此点,可以参考个人最近所撰写的一篇:实作 Enterprise MVC 巨观结构的 POC-观念篇
http://www.kenming.idv.tw/implement_enterprise-mvc_macro-view_poc_concept/
要能达成所谓 Clean Code 简洁的效果,所需要软体相关的技能,诸如所谓的物件导向观念、GoF 设计模式的理解与活用、巨观与微观结构的设计等,这些是需要在软体结构面设计的议题持续不断地学习与体会个中奥妙了。
======= 书评内容 =======
Clean Code 的原则就是:每一个函式 (function, or method),不超过10行,最好是5行
以内。天啊,这让我很难以想像,我知道函式不能肥大,也不要有一堆的 if-then-else
or switch 之类的判断式,但如何缩短为只有10行以内的写作,我也很难理解。不过细读
本书内容之後,总算能了解要如何作,当然,你更应该体会为何要这麽作。
简而言之,程式写作是一门「craftsmanship」,我还蛮喜欢中译本将之翻为「工艺典范
」。它既要精确,却也期望将程式写作昇华为具有美感的作品。我觉得,稍具有良心与审
美观的程式设计师,绝对不是只有满足於「可以执行程式」。写出来程式往往只是起点而
已,持续不断地精炼 (也就是重构),让程式整洁,软体才有可能具弹性与维护性。往往
程式设计师只满足於让程式「顺利运作」的状态,有经验丰富 (还有良心)的程式设计师
,知道那其实是一种专业上的自杀行为。
所以,事实上,写程式就如同写散文一般,程式写得艰涩冗长让人无法理解,就代表散文
写作能力不佳。程式设计大师不认为他们在写程式,而是在说故事。大师利用所选定的程
式语言机制,来帮助建造更丰富更具表达力的语言,让这个语言可以用来说故事。而简短
的函式,有意义的命名,以及漂亮的结构,则都有助於描述故事。
当然,要能写好整洁的程式不是一蹴可几的,那可是长期性的一种目标与方向。最重要的
应该是意愿与职志,然後再来才是学习与锻链应有的观念与技巧。所以这也是为什麽与其
说程式设计是门科学,不如说程式设计是一门技艺更为贴切。为了要写整洁的程式码,你
必须先写下糟糕的程式,然後去整理它! 对於程式码,就是要义无反顾的重构它,让品
质可以改善再提昇至另一个层次。程式如果看待只是一种制造,那麽当重做时就代表着额
外的花费;但当看待为设计,则重做代表的就是创造出价值。
喔,从本书我还学到了唯一最有效度量「程式品质」的单位-WTF (请自行查 Google)。
当 WTF 值越高,程式品质越差,没有任何例外!
专案管理人员应该要重视这个指标的,绝对没有其它指标比它更实用有效的。 >_<
所以,到底甚麽是 Clean Code? 为了这个词汇,作者 Martin 还特别访问了诸多软体大师,请他们写下对 Clean Code 的定义。我比较喜欢 Grady Booch (UML 三巨头之一) 的解释:
「Clean Code 是简单又直接明了的,读来就像一篇优美的散文。
Clean Code 绝不会掩盖设计者的意图,反而充满着俐落的抽象概念,以及直接了当的程式控制叙述。」
其实每一个人应该也会有对 Clean Code 自己的一番解释。对我而言,Clean Code 就是:
「简洁有序,层次分明的程式码。」
※ 引述《geroge0820 (可.....可恶)》之铭言:
: 小弟工作资历尚浅 前一阵子才转职
: 目前是用ASP.NET MVC进行网页开发
: 因为自己还蛮菜的 想加强能力
: 不知道大家都怎麽选clean code的书
: 目前在网路上看到 clean code又是C#实作的是这一本
: 无瑕的程式码 敏捷完整篇:物件导向原则、设计模式与C#实践
: 想请问版上的各位 有没有甚麽建议
--
FB社团:软体设计鲜思维
https://www.facebook.com/groups/softthinking/
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.34.122.227
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1529470903.A.F8F.html
1F:嘘 final01: 之前看觉得这本中译的真烂 06/20 13:37
2F:推 djdjdjek: 心目中翻译最烂的是C++的多执行绪.... 06/20 14:09
3F:推 dsilver: 这篇心得写的真好! 06/20 14:56
4F:→ johnny94: 心目中翻译最烂的是作业系统恐龙本 06/20 15:19
5F:推 cphe: 恐龙本英文写得非常简单,建议看英文版就好~浅显易懂 06/20 15:31
6F:→ cphe: 中译本大多品质都不好,偏偏原文书都很贵 06/20 15:32
7F:→ testPtt: 我的constructor就常超过30行了耶 Q.Q 06/20 18:58
8F:→ testPtt: 而且我又常常要用不定长参数方法 06/20 19:00
9F:→ csieflyman: 行数我都凭感觉没在算几行的 写完觉得太长不好懂 或是 06/20 19:09
10F:→ csieflyman: 觉得某区块可以重用 自然就会再拆出来 public 方法通 06/20 19:09
11F:→ csieflyman: 常会写很短 private 实作细节会比较长 反正写完之後也 06/20 19:09
12F:→ csieflyman: 很少会再去看它 06/20 19:09
13F:推 geroge0820: 糟了 我的wtf一定很高 06/20 23:44
14F:推 vn509942: 没在限制行数0.0 06/21 08:10
15F:推 pennymarkfox: 还好我是买kindle版本... 06/21 14:27
16F:推 senjor: 话说kindle原文好贵,翻译好便宜 Q_Q 06/21 16:10
17F:推 sharku: 推 06/21 22:51
18F:→ sunsamy: 是不是clean code跟行数、参数个数一点关系也没有 06/22 23:01
19F:→ sunsamy: 程式这领域越来越多过犹不及的方法了 06/22 23:02