代码改变世界

英语阅读推荐:创建Silverlight用户控件 & A*路径搜索中使用二叉堆

2008-04-07 04:07  Cat Chen  阅读(5204)  评论(12编辑  收藏

本期Random Clippings推荐两篇文章,一篇关于时下热门的Silverlight,而另一篇则是相对学术风格的二叉堆使用方法介绍。

创建Silverlight用户控件 (Creating and Using Silverlight and WPF User Controls)

Scott Guthrie的文章总是那么简单易懂,有时候还有丰富的插图,简直就如看连环画一般容易,因此作为入门级别的英语阅读练习文章就最适合不过了。这次Scott讲的是如何创建Silverlight(或WPF)的用户控件,不过用的不是VS2008,而是Expression Blend。

文章开头应该只有一个词是需要查字典的,也就是“encapsulate”,而这正是重点。为什么我们需要用户控件?因为我们需要对重复的逻辑进行“封装”,这样才能复用描述这些逻辑的代码,“encapsulate”正是“封装”的意思。在看懂了这个词之后,就是看图说话了,文章一步一步地教你如何将一组已有的控件圈选出来,然后生成一个用户控件。我想你看完图片,就一定能读懂图片下方对应的文字,甚至你可以为这张图配上更好的英文描述。

在完成了用户控件的创建后,Scott以数据绑定为例介绍了其使用方式。首先,你要定义待绑定的类型,实例化并填充数据,最后在XAML中加上绑定语句,之后就是继续看图说话了。在此问大家一个问题,知道阅读英语文章时你的障碍除了来自于你个人的英语能力,还来自于什么吗?答案是文化背景的差异,甚至是文章结构风格的差异,中国人喜欢把重点(或者是真正要表述的意思)放到文章的最后,并称之为“压轴”,然而美国人的思维习惯恰好是相反的,打个比喻就是——“重点请先说,后面的可能我没时间听下去”。

文化背景差异造成的障碍就更大了,一些约定俗成的东西可能你无法理解,从而某些幽默可能你当成了事实,这就导致更大范围的误解了。举一个简单的例子,知道Scott这篇文章中的这张图片有什么好笑吗?

如果你理解使用信用卡时“ship to”和“bill to”的用途,并且你知道上述两个地址分别是哪里,那么你看到这样图就会哈哈大笑——“货物送往Microsoft,并请Apple买单”,这太恶搞了!(如果你还是不明白的话,请点击Microsoft与Apple上面的链接。)

在这里,你就看到了文化背景的影响。然而英语是一个不能逃避的问题,要说因为背景不同从而避免阅读英文文章,还不如多读从而逐步了解这些背景。在新东方,我碰到过一个教TOEFL的老师,他说他从来没到过美国读大学,但却对美国大学里面的生活情景了如指掌,例如如何申请宿舍,停车场是区分教工车位和学生车位,代号101的课程通常是入门课程,等等。为什么呢?他说因为他做了大量的TOEFL听力题,而一般听力题都是这类情景下的对话,因此即使你不是生活在那种文化中你也可以对它有所掌握。

A*路径搜索中使用二叉堆 (Using Binary Heaps in A* Pathfinding)

如果你要深入研究某些技术,不可不勉地你必须阅读一些很学术的英文文章,这篇文章就是一个例子。

在这篇文章中,首先说的是一维列表的解决方案,并且说明为什么效率是问题。然后解决方案自然是binary heap,这就要说说binary heap的二叉树结构如何能够保存在一维数组中。接下来是对binary heap添加删除元素操作的简单说明,并且解释了为什么binary heap的效率比简单的一维列表要高。请注意,到此为止文章都没有深入binary heap的实线细节,这就是美国人比较习惯的写法,先briefing一次,再深入,因此后面的部分你看不懂也至少懂了一般。如果在前面就直接引入细节,你看不懂,就算后面还是有显浅的内容你可能也会错过。

在文章的后半部分中,作者深入地解释了binary heap的数据结构、操作算法,读完这一部分你就知道如何在自己的程序中实现binary heap了。并且在文章的最后,还有若干个延伸阅读的链接。通过读这篇文章,你就能了解到美国人一般是如何组织科学类文章的主干是如何安排的。

最后,如果你觉得Random Clipping的推荐不错,可以考虑长期订阅Cat in dotNET,这样你将不会错过将来的任何一篇推荐。