IT技术博客大学习 共学习 共进步

纯属偶然——我和正则表达式的缘份

乱象,印迹 2014-11-23 21:08:37 浏览 1,701 次

   上周在深圳见朋友,聊天时仍然把“正则表达式”和我联系在一起,这真让人惭愧,因为我已经很久不写正则表达式了,甚至有些生疏。估计是Jeffrey Fridel的《精通正则表达式》写得太好,身为译者的我也沾了不少光,收获不少虚名。为避免误解,撇去虚名,有必要专门写写我和正则表达式的故事。

   我和正则表达式的缘份,始于我的第一份工作。那时我刚刚离开学校,除了在学校里认真写过些程序实现书上的理论和练习,根本没做过实际的项目。找工作当然也不顺利,尤其不是北京的高校毕业,在北京找工作更加困难。好不容易找到一家公司愿意收留我,周四上午面试、下午复试、周五就通知“下周一来上班”了。

   我清楚地记得,上班的第一天,为了不让其他人看穿自己其实没有项目经验,我特意带了那本厚厚的影印版《the Java Programming Language》,一来充门面,二来也认真看看,自己在学校写的都是C++程序,Java确实不熟悉。而且,上午确实没太多事情干,这本书救了我的命。

   好日子在下午就到了头,项目经理给我们做培训。当我满心欢喜地参加培训,希望通过培训来“软着陆”时,面对的却是高强度的信息轰炸:一小时内讲完了JBuilder、JUnit、Ant三样东西,并且通知“明天就开始使用”。在学校时,我虽然不排斥学习新的知识,但长期以来都习惯“循序渐进”,这样高强度的培训是闻所未闻的,结束之后只觉得脑子一片空白,束手无策。回到座位上,通过QQ向同学吐槽说“公司怎么这么不讲道理,纯粹血汗工厂”,得到的答复却是“赚翻了,赶紧学,我们想用还不许用呢”。老实说,被一口堵回来的感觉特别糟糕,但转念一想,说得也有道理,所以我逼着自己忍住反感,硬着头皮学习。

   到了第三天,我终于可以稍微熟练地掌握周一培训的三样东西时,项目经理又扔来实际任务了:写程序从页面上抓取需要的信息。刚刚喘了口气的我又紧绷起来,因为之前虽然学过HTML,也做过网页,却从没想过“反过来”要怎么办,对于“从HTML代码里拿到需要的信息”这回事,我全无概念。可是既然安排了任务,当然不敢说不会做,所以还是一口应承下来,虽然要怎么做完全没有头绪。

   这样干熬了两天,到周四快下班的时候,项目经理问我“快做好了吗?”,我说“快了,还差一点”,他说“好,你多用Google吧,查查正则表达式的资料”。于是,“Google”和“正则表达式”成了我当天听到的最有信息含量的词。在“终见天日”的情绪激励下,我从6点开始学习正则表达式,弄懂基本的例子已经是9点多了,因为我已经确认,这就是我要找的路,沿着它走下去一定可以实现我的目标,所以我决定在公司熬夜把程序调出来。结果,我深深记得,自己刚刚工作那个周五下午的阳光,是我见到的周五下午最明亮的阳光。

   从这以后,因为工作中经常要用到正则表达式,而我又对这个玩意比较感兴趣,所以决定花点时间专门学一学。当时网络上的资料还没有今天这么多,所以很多学习还是靠找专门的书本,找好书的有效办法就是上亚马逊搜索(当时亚马逊还没有中文站),评价最高的书一般都不错,所以我就选择了那本Mastering Regular Expression。开头几章还能和自己的工作结合起来,后来就越来越深入了,半途而废又舍不得,所以索性把atomic grouping, lookaround, anchor等等功能都囫囵吞枣地看了个遍。或许是当时年轻的缘故,所以即便用不上,看过之后仍然有比较深刻的印象,觉得正则表达式的功能着实强大。

   过了一年多,我很偶然的机会知道武汉博文视点的周筠老师正在找人翻译Mastering Regular Expresson这本书(后来才知道,是当时《程序员》杂志的主编孟岩推荐引进的这本书)。既然已经通读过这本书,我便报名参加了试译。认真而惶诚地递交自己的试译稿之后,焦急地等了两个礼拜,博文视点的编辑问我“你能不能独自翻译这本书?”,我开心地一口应承下来(又是后来才知道,本来是计划找多名译者合力翻译的),这才有后来《精通正则表达式》简体中文版的翻译出版。

   现在想起来,自己但是能获得这个机会,有相当大的偶然成分:通读《精通正则表达式》是偶然,掌握了点翻译知识也是偶然。翻译是我在大学时考完GRE之后“无所事事”时找到的兴趣,曾经想通过翻译赚点外快,翻译稿是被人家认可了,可因为不好意思一手交钱一手交货,并没有拿到报酬。不过以此为契机,我觉得自己的翻译可以被人认可了,所以更有兴趣学习和练习。加之当时网友大多古道热肠,秋风(如今仍然是活跃的知识分子)和林猛(现在在北京师范大学任教)两位前辈给了我很多翻译的建议和指引。所以在正式接手翻译《正则表达式》之前,我已经积累了十多万字的翻译经验,其中很多还是被批评后反复修改、讨论的结果。这些付出,当时并没有任何报酬,却是日后争取到翻译《精通正则表达式》机会的宝贵积累。

   如今,每次听到大家把“正则表达式”和我联系到一起,我都感到非常惭愧,也感叹于命运的偶然。复习GRE了提高英语,热心前辈的建议和指引帮我提高了翻译水平,公司安排的任务让我有机会使用正则表达式,项目经理的培养了我通过Google自学的能力,亚马逊的书评让我选择《精通正则表达式》作为学习资料……只要其中任何一个条件发生变化,我与正则表达式的联系都不会这么“紧密”。但其实我所做的,只是掌握自己认为有价值的工具,练习自己认为有价值的技能,学习自己认为有价值的知识。

   如果要问什么“有价值”,我仍然会举自己的例子——上大学的时候,我读到马尔萨斯的《人口论》,绞尽脑汁也不知道该如何破解自然资源增长速度与人口增长速度不匹配的难题,直到后来才恍然大悟,原来马尔萨斯忽略了科技和智慧的作用。对这个问题,计算机科学的例子不胜枚举:同样复杂的问题,开动脑筋,换套解法,消耗的能量没有变化,时间却大大缩短了。在一切问题上施展智慧的行为,都是我认定的“价值”。

建议继续学习

  1. grep 正则表达式选项要记得转义 (阅读 6,442)
  2. 统计最近用过的linux命令 (阅读 6,402)
  3. 正则表达式基础 (阅读 6,160)
  4. 正则表达式的与或非 (阅读 5,741)
  5. 学习Grep,Sed中的正则 (阅读 5,263)
  6. URL正则表达式 (阅读 4,660)
  7. 正则表达式简要入门 (阅读 4,362)
  8. 正则转义符汇总 (阅读 4,320)
  9. 使用Oracle正则表达式监控应用到数据库的连接情况 (阅读 4,262)
  10. PHP 正则里面的两个重要技巧 (阅读 4,260)