如何成为优秀开发人员[7]:正确地做事(善用自动化)

2009-02-24职场点滴

  上一个帖子聊了“善用工具”的话题,讲的都是如何有效利用工具来提高效率,今天说一下如何利用“自动化”来提高效率。


★“自动化”的重要性


  隐约记得 Perl 语言的创始人Larry Wall 曾经评价过程序员的三大美德,分别是:【懒惰、急躁、傲慢】。(刚才找到原文在这里)在这三大美德中,“懒惰”赫然排在第一,可见其重要(另外,马云似乎也说过类似的名言)。
  俺对他所说的“懒惰”是这样理解的——就是干尽量少的活,但是依然保质保量地完成工作。那么,如何才能偷懒捏?一个有效的办法就是【自动化】。
  俺这里说的“自动化”,当然不是大学里自动化专业的那个“自动化”,而是指:利用各种方式(主要是计算机)来帮你【自动完成】某些(枯燥、费时、无价值)的重复劳动;然后你就可以利用节省出来的时间,干一些更有意义的事情了(比如学习点有用的东西)。
  具体该如何做呢?要实现自动化,首先就要观察你平时做的事情中,有哪些属于【重复】劳动;然后评估一下这些重复劳动是否可以用某些工具来替代;如果有可能替代,你就可以动手把这个工具实现出来,然后就可以让工具来帮你做事情了。
  说了这么多,感觉有些抽象,下面我举几个方面的例子来给大伙儿加深一下印象。


★实现“自动化”的例子


◇Blog 订阅


  如果你经常看俺的 Blog,但是没有使用 Feed(RSS) 订阅工具,那你就要当心了。你属于不善于利用自动化的人。
  使用了 Feed 订阅工具,你就不需要经常访问某个 URL 的页面去看有没有新帖子。因为这个枯燥的重复劳动已经由订阅工具帮你【自动完成】了。你所要做的,仅仅是在订阅工具中初始化某个 URL(只要做一次),然后订阅工具会在有新帖子的时候通知你。所以,除非你要发评论,否则不需要访问俺博客的页面 :-)

◇调试程序


  估计看俺 Blog 的同学,大部分都有过调试程序的经验。当程序行为不正常时,经常需要设置断点,然后单步跟踪代码,以便找出程序出错的源头。其实这个过程也有大量的重复劳动。
  俺一般喜欢通过程序断言(以下简称 assert)来简化上述过程。看到这里,有些同学心里犯嘀咕了:程序断言和自动化有毛关系啊?其实每一个 assert 就好比一个【自动的】代码检查点,【每次】程序运行到 assert 处的时候,如果你设置的逻辑条件不成立,它会立即终止程序并打印出相关信息(比如函数调用栈、文件行号等)。
  如果你在写代码的时候,经常在一些【关键点】设置一些【条件恰当】的 assert,可以大量节约调试时间。俺自己写的程序,在自测的时候,有70%-80%的逻辑错误会被 assert 暴露出来,所以改起来非常快;测试人员提交给俺的 Bug,大概也有一半以上可以通过 assert 快速定位出错误的源头。

◇自动化测试


  说完了程序员的例子,再来说一下测试人员(其实我在“每日构建:流程”已经稍微提到了测试的自动化)。俺发现很多公司的测试人员,重复劳动特别严重。他们不断地重复做一些软件功能的验证操作;发现bug后通知程序员改;程序员改完,再次进行验证操作......如此循环往复。N年之后,这些测试人员的个人能力没啥提高,年龄倒大了不少。
  在此,俺强烈建议测试人员:尽量多使用一些自动化测试工具(比如 QTP)和一些测试脚本来完成上述的软件功能验证操作。不光能节约很多时间,提高了效率;而且在自己编写测试脚本的过程中,或许还能学些新东西,提高一下个人能力。比如俺见过一个测试人员,由于经常用Python写一些脚本进行网络和数据库方面的测试,久而久之,写 Python 脚本的水平很熟练,然后就被转去做 Python 开发。


★人肉自动化

  上面说的自动化都是技术层面的(都是靠软件实现)。为了给大伙儿扩展一下思路(免得思维定势),最后来说一下非技术的例子。
  比如部门中经常有人出差,每次出差都要都要订机票。订机票就属于重复劳动,而且挺繁琐。得去网上查航班、还得看哪个航班折扣优惠、选好航班还得付钱,然后去机场还得打印行程单,出差回来还得填写报销单(报销单还得找N个人签字),然后拿着报销单与行程单找秘书报销。这些琐事累加起来,少说也得一个小时才能搞好。
  为了提高效率,把上述这些琐事统统都交由秘书搞定。出差的家伙需要做的就是发一个邮件告诉秘书,要订某天某时的飞机到某地,就一切 OK 了。经过这样改革,部门里的人(除了秘书)都皆大欢喜。