编写可读代码的艺术

2013-08-08 by lizherui

我最早开始重视代码的可读性还是大三在搜狐做Python研发实习生的时候。那会儿我特别嫩,写代码还是学校大作业风格,天天被leader各种批评。现在回忆起来,虽然在搜狐呆的时间特别短,但那段经历能引起我对代码可读性的重视,也算是重量级的收获了。

今天一口气读完了《编写可读性代码的艺术》,感觉非常爽。我一直认为代码的可读性绝对是第一重要的,正如《黑客与画家》所言:"代码写出来是给人看的,附带着能在机器上运行"。

顺手记录了几个重要的原则:

  1. 可读性基本定理:代码的写法应当使别人理解它所需的时间最小化。

  2. 把信息装进名字里。

  3. 清晰和精确比装可爱好。

  4. 在小的作用域内可以使用短的名字。

  5. 不会误解的名字是最好的名字。

  6. 使用一致的布局;让相似的代码看上去相似;把相关的代码行分组,形成代码块。

  7. 一致的风格比正确的风格更重要。

  8. 注释的目的是尽量帮助读者了解得和作者一样多。

  9. 不要为那些从代码本身就能快速推断的事实写注释。

  10. 注释应该有很高的信息/空间率。

  11. 把条件、循环以及其他对控制流的改变做得越“自然”越好,使读者不用停下了重读你的代码。

  12. 默认情况下都用if/else,三目运算符?:只在最简单的情况下使用。

  13. 当你对代码改动时,从全新的角度审视它,把它作为一个整体来看待。

  14. 把超长表达式拆分出易于理解的小块。

  15. 小心“智能”的小代码段,它们往往在以后会让别人读起来很困惑 ...

read more

如何成为一名黑客(转)

2013-08-06 by lizherui

这是一份大名鼎鼎的黑客手册,来自Eric S. Raymond,我忍不住转存下来。

什么是黑客

Jargon File 包含了一大堆关于“hacker”这个词的定义,大部分与技术高超和热衷解决问题 及超越极限有关。但如果你只想知道如何 成为 一名黑客, 那么只有两件事情确实相关。

这可以追溯到几十年前第一台分时小型电脑诞生, ARPAnet 实验也刚展开的 年代,那时有一个由程序设计专家和网络名人所组成的, 具有分享特点的文化社群。 这种文化的成员创造了 “hacker” 这个名词。黑客们建立了 Internet。 黑客们发明出了现在使用的 UNIX 操作系统。黑客们使 Usenet 运作起来, 黑客们让 WWW 运转起来。如果你是这个文化的一部分,如果你对这种文化有所贡献,而且 这个社群的其它成员也认识你并称你为 hacker, 那么你就是一位黑客。

黑客精神并不仅仅局限在软件的黑客文化中。 有人用黑客态度对待其它事情,如电子学和音乐—— 事实上,你可以在任何最高级别的科学和艺术活动中发现它。 精于软件的黑客赞赏这些在其他领域的同类并把他们也称作黑客—— 有人宣称黑客天性是绝对独立于他们工作的特定领域的 ...

read more

Java设计模式在Common Lisp中的体现

2013-08-04 by lizherui

最近在进一步学习Java的过程中,我愈发感到Java把面向对象的编程思想玩到了登峰造极的地步。而Java中最能表现面向对象编程思想的,就是大名鼎鼎的设计模式了。

这是Wikipedia中对设计模式的定义:设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类型或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类型或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。

在学习了一些设计模式后,我们会发现这23种设计模式都围绕着以下三大基本原则:

  1. 中意于组合而不是继承。
  2. 依赖于接口而不是实现。
  3. 高内聚,低耦合。

不过,除了以上这些收获和感悟以外,我发现了一些更让人感兴趣的东西,这也是这篇文章马上要探讨的重点——Java设计模式在Common lisp中的体现。

Java和Common lisp, 前者作为OO的代表,喜欢玩类和对象;后者作为Functional Programming的代表,喜欢玩函数和闭包。乍一看它俩应该风马牛不相及,井水不犯河水,但实际上我们会惊讶地发现Java设计模式中有着太多Common Lisp的对照,这种现象让人越来越强烈地感觉:软件设计虽然有众多的门派、风格和表现形式,但总体思想上似乎是殊途同归的,比如构造抽象屏障和提高抽象层次。

Java至少有16种设计模式能对应到Common Lisp中,如下图:

aaa

Talk is cheap, let me ...

read more

今天我终于有了自己的独立域名

2013-08-01 by lizherui

今天折腾了半天,终于搞定了自己的独立域名:http://www.lizherui.com

整个过程颇为曲折:

  1. https://www.godaddy.com上用支付宝花80多块钱购买为期一年的顶级域名,并去修改Nameservers为这两个地址:f1g1ns1.dnspod.net、f1g1ns2.dnspod.net。
  2. https://www.dnspod.cn上添加新域名,并申请一条A记录指向Github Pages的ip:207.97.227.245;
  3. 在Pelican主目录新建CNAME文件,添上刚刚申请的域名:www.lizherui.com。

有了独立域名后,感觉非常爽,更加坚定了好好打理个人博客的决心。

read more

爬取校招信息

2013-07-31 by lizherui

抓取北邮人论坛和水木社区校招信息的爬虫程序, 直接运行main.py即可在本机(http://127.0.0.1:8888)访问,非常简洁,可以扩展。

此外,已经增加手机短信通知功能,移动、联通、电信都可以用。

Talk is cheap, show you the code:https://github.com/lizherui/spider_python.

Enjoy it.

read more
Fork me on GitHub