zoukankan      html  css  js  c++  java
  • 《会说话的代码——书写自表达代码之道》书评

    是程序员的第一本书吗?

            自表达代码自然具有好的可读性。代码可读的重要性已经得到几乎所有程序员的认可,特别是具有丰富经验的程序员。或许有一些新手认识得还不够。但是如何书写自表达代码?不一定所有的程序员都知道,尤其是程序员新手,包括一些像我这样具有三四年项目经验的程序员,面对命名,类的组织,烦人的嵌套等等,仍然不知所措。

           《会说话的代码——书写自表达代码之道》是一本关于如何书写可读性好的代码的书。正如本书封面上所写“这可能是最通俗易懂的一本提高代码可读性的书籍”。连续三天,花了大约15个小时,一气呵成的读完全书,给我的第一感觉就是,这是一本投入/产出比非常高的书。只需要大约十几个小时的时间,就能让自己对什么是自表达代码?如何书写自表达代码?有一个较清晰的认识。

            本书重点关注代码的自表达,也涉及了面向对象,设计原则的基本知识,并在很多的例子代码中展示了设计模式的应用如何使代码自表达。更难能可贵的是,作者以Eclipse为例讲述了IDE开发环境特别是重构菜单和快捷键的使用,这对新手来说,真是雪中送炭。——对这一部分,也许不同的人会有不同的看法。Java程序员自然欢喜,而习惯使用别的IDE的程序员也许会觉得多花了一个章节的MoneyO(_)O哈哈哈~

            作为一个非英语母语的程序员来说,经常会受困于如何选择恰当合适的英文词汇用于变量、函数和类的命名。细心的作者敏锐的发现了这一现象,并别出心裁的撰写了“英文能力的提升”这样一章,以帮助我们克服因母语背景而带来的障碍。当然,英文能力的提升,并非一朝一夕之事,需要我们持续的操练、提高。这一章纯属抛砖引玉。

            如果有人问我,哪些人适合读这本书?我会回答:初中级程序员,尤其是即将加入程序员行业的在校学生。这本书将是你的一个好起点。不但你自己,也包括你未来的同事,都会因你读了这本书而受益。

            诚然,不要指望读完这本书,就能让自己的程序设计水平突飞猛进,或者迅速提高自己的项目管理能力,就像软件系统开发没有银弹一样,提高程序设计水平也没有捷径可循,只有持续不断的刻意操练。这让我想起了在BJDP伍斌老师那里知道的一个道理:“要想精通一门技艺,需要一万个小时的刻意操练”。如果想成为一个优秀的程序员,必须坚持不懈的刻意操练。但这本书的确能让你成为一个具有良好编码习惯的“码农”。而这很重要!这也让我突然想起前些天学车考驾照的事情,学车本身不是一件有多难的事情,但是很多学员(包括我)仍然由于一些不良习惯(当然也有一些运气成分——就像代码中的未定义行为一样)而被迫重考。编程写代码也一样,如果你养成了一些不良习惯,就算你的代码现在能跑起来,并完成相应的功能。但是其内在质量依然让人担忧,将来你或者你的同事不得不付出代价去寻找那些琢磨不透的Bug,而那时你会惊愕自己两个月前写的代码为啥连自己都看不懂了?

            书中甚至有一些作者原创的观点:例如P11-无用的方法或者变量,P21-层层深入的private方法,这些问题我都遇到过。

            不过,也发现书中有一些不足甚至错误的地方。不知道自己理解是否正确?摘录一二与大家商讨:

    1)  P42页关于继承,作者说到“…. 而在代码中构建继承关系是为了提高代码的可重用性”。这一说法不够严谨。

    以下观点我认为更为恰当:继承不是为了重用,而是为了被重用。也就是说继承是为了被已经多态地使用了基类对象的已有代码重用的(面向接口编程)。当然,我们都知道继承能够带来重用的效益,但这不是它的本意,只是它的一个意外收获。我们也都知道一个原则:优先使用委托而不是继承。因此,如果只是为了想重用的话,应该使用委托。

    2P44页:重载(overload)和重写(override)的讨论。这里可能是受到翻译的原因,亦或是平常程序员交流的口误,总喜欢把“重写”说成“重载”,不知道是因为“重载”更顺口还是更通用。

    3P148页:9.4.3减少参数个数

    作者举了计算器Calculator这个例子,说实话不够有说服力。

    这个例子里引入 Parameter是一大败笔。

    public class Parameter {

    public int a;

    public int b;

    }

    int add(int a, int b);调用端一看就知道怎么传值。而 int add(Parameter param);调用端还得构造一个Parameter对象,关键是Parameter并不能说明它含有几个参数,可能一个,两个,三个,……都有可能。

    4)除了关于书写单元测试代码一节之外,整本书没发现有关于断言的论述。

    对于自表达代码而言,断言是很重要的设施,怎能不讲?

    5)可能是受作者语言背景和项目经验的原因,本书更多的是针对Java语言的论述。这一点其实无伤大雅,但是书中好几处却又莫名奇妙的提及C++的某些特性,例如P42页菱形继承问题。——其实完全没有必要!

          如果你很关注代码的可读性,还在为如何编写可读性好的代码而纠结,或许可以读一读这本书。

         最后,感谢作者王洪亮给我的读书笔记答疑: http://download.csdn.net/detail/e5max/5975223

  • 相关阅读:
    C#多线程参数传递
    Delphi单元测试工具Dunit介绍
    使用javascript生成文件
    Windows自动登录源码
    [Win32]一个调试器的实现
    用MASM写一个简单的实现递归操作的汇编程序,所谓递归,上课已经跟大家说清楚了,如果我们只考虑简单的只分一次的递
    C#多线程编程(4)多线程与UI操作
    在Delphi中实现类型安全的容器,Delphi泛型库DGL引介(提供源码下载) .
    delphi 中几种多线程操作方式
    C#实现WEB服务器
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3268482.html
Copyright © 2011-2022 走看看