程序猿如何练习用英语讲好一个笑话?

版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://blog.csdn.net/i042416/article/details/89451950

最近Jerry参加了一次Toast Master,我担任的角色是Joke master,需要在5分钟内讲一个英文笑话。正好几天前我在“程序猿”微信公众号上看到这个搞笑的gif图片。文章题目是“当你的正则表达式按照你的期望工作的时候”,正文没有文字,只有这张gif图片。我本人觉得很搞笑,于是我就想在Toast Master上用英文讲这个笑话。

但讲的结果非常糟糕,现场没有一位同事get到点,没有一位同事觉得这个笑话好笑。明天我会在诸葛亮和我的1:1 sync会上对我5分钟的presentation做一个retrospection,找出问题所在。

尽管参加Toast Master的同事里,除了开发岗位上的同事外,我熟悉的鲁尼,因扎吉,舍普琴科这些同事也有深厚的开发背景,但还有很多同事是非开发背景,没有接触过正则表达式。所以我需要花点时间简单介绍下到底什么是正则表达式。

我先把要讲的这个Joke的script用中文写下来:

"正则表达式是计算机科学的一个概念,通常被用来检索、替换那些符合某个模式(规则)的文本。大多数现代编程语言都支持利用正则表达式进行字符串操作。我们用一个简单的例子来介绍为什么要使用正则表达式。假设我们被要求开发一个客户注册的网页,客户注册时需要输入自己的手机号。那么网页必须对客户输入的手机号进行检查确认其合法性。如果用常规编程方式,我们会写一系列IF语句来判断,例如:

如果输入字符包含非数字字符,不合法
如果输入字符总个数不为11,不合法
如果第一个字符不为1,不合法
如果前三位不为联通,移动和电信的任意一种组合,不合法

而如果使用正则表达式的话,我们可以省去这些繁琐的校验代码,只需要按照正则表达式的语法,用包含字母,数字和特殊符号的组合来定义一个规则,这个规则描述了一个合法手机号的特征。正则表达式的处理器接收到输入字符串,使用程序员定义好的规则进行匹配,如果匹配成功,说明该字符串代表一个合法的手机号。

尽管正则表达式功能强大,然后其定义规则的语法同自然语言有很大差别,晦涩难懂。我相信大部分程序员都记不住所有的语法,至少我不行。每次我进行正则表达式开发时,都会打开包含语法的在线网站作为字典来用。另外,在开发复杂的正则表达式时,即使很有经验的程序员也很难保证一次成功。我自己的习惯是打开一些正则表达式测试工具,对规则做一些修改-测试-发现不工作-继续修改-测试,不断重复这个过程。有时要让一个复杂的正则表达式能够完美工作,也需要一点点运气。

图中这个警察巧妙地射击,通过一系列复杂的步骤抓住了罪犯,就像程序员在一个复杂的正则表达式里做了最后一处修改,完美地完成了字符串匹配的任务。"

写完后我发现script里花了太多篇幅介绍正则表达式本身,如果全部讲出来大家一定觉得太枯燥,没有趣味性。而且script里80%的篇幅再讲正则表达式,只有20%提到了图片。如果听众没有开发背景,是不可能把这两者联系起来的。于是我就把第一版里拿正则表达式进行手机号输入验证的细节删掉了,只用一个话带过,然后由我告诉听众:图中警察射击行为和正则表达式有四个共同点。然后我把修改版翻成了英语:

Title: When your regular expression works as you expect

Regular expression is a concept in computer scenience used to search or replace text which fulfills a given kind of pattern.

Let me use an example to explain the use case of it. Suppose we need to develop a web site for user registration, and our users are asked to input their mobile phone number in the page. So we use regular expression for validation purpose.

Regular expression has completely different grammar compared with natural language and difficult to learn and read. For the development of complex Regular expression, it’s almost impossible even for an experienced developer to achieve it at the first attempt. My own best practice is to open a test tool, change my regular expression rules and test there. If test fails, change and test again. Repeat this process till test succeeds. I do believe that sometimes a little luck is really needed to make it work.

If I was asked to give some keywords on the regular expression, my answer is: cool, amazing, tricky, and difficult.

The same keywords could be applied to this guy. The policeman in this picture made a very smart shoot, and captured the criminal with a series of complex steps, just as a programmer finishes a very complex regular expression and make it work perfectly at one shot, it’s unbelieveable!

但讲完我发觉,因为我把正则表达式来验证用户手机号输入的具体细节删除了,很多同事对正则表达式这个概念就更模糊了,所以更难理解笑点。我觉得在Toast Master里打出来的一页slide里,左边写20行用传统方式校验的代码,右边用正则表达式一行代码。用20:1的悬殊对比,能够让非开发同事对正则表达式的强大有更感性的理解,然后就容易地和图里警察的酷炫操作结合起来了。可惜我误以为TM讲Joke时不能用slide,所以没这样做。

  • 星矢: 看了视频回放仍然没有听懂

  • 张飞: 题材不平易近人

  • 马超: 中国笑话和外国笑话的笑点不一样

  • 曹操: 前面听懂了,最后结尾的部分一不留神就过去了。没get到点。讲笑话太难了。我也不知道应该怎么讲。和一般的英语演讲比起来,慢一些更清楚一些,尤其将要抖包袱的地方(因为一般包袱在上下文意思上转折的比较厉害,也比较短)应该会更好一些。

  • 贾诩: 题材不够大众化,没听懂。gif有点帮助。

  • 宋江:

能看得出你尝试跟大家在做互动,讲的时候也显得比较的放松。只是,我真的没有get到那个笑点在什么地方,我知道regular expression,可是我没有听出来他跟你发的那个图片有什么样的一个关系,可能下次的时候,你需要事先再多想一想,怎么样把这两个东西的关系能够讲的更清楚一些,让大家更容易理解一些,尤其是没有这个背景的一些同事。

如果你想让大家看到这两个东西类似,那你就一定要有那么一两个点,让大家很准确的感受到这两点的相似程度,这一两点很清楚明白。你上面的四个关键字主要是通用啦,太普世啦,所以说不合适。

  • 高俅: 我之前在网上看到过一个公式,段子=铺垫+包袱。今天的这个joke,我个人感觉铺垫是够了,但是包袱不足。

包袱,可以理解为意外。举个栗子,大家都应该热爱小动物,因为他们非常好吃。

后面这句话就出人意料了。今天的joke里讲了正则很难,一次做对就跟图片里的动作一样难。感觉上像是用图片来形象化说明有多难。

但后面就没有出人意料的部分了

  • 李小双: Jerry作为Toastmaster八月1日这一期的Joke master,做了充足的准备。分享了一个在程序员中很能产生共鸣的笑话,配上动图让这个笑话更通俗易懂。同时这个笑话也被分享到twitter, 获得了相当的关注度。但是,为了在Toastmaster上更好的起到暖场的作用,下次笑话的笑点需要更明显。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

猜你喜欢

转载自blog.csdn.net/i042416/article/details/89451950
今日推荐