November 9th, 2007 by 张磊
在枫之羽的推荐下看了这本《Lucene In Action》,感觉很不错。首先是翻译得比较好(从这个角度看,原版一定很好看);另一方面,虽然原版作者是老外,书中还是讲到了不少中文切词方面的东西。再者,还写到了Lucene在其他语言平台上的移植,比如CLucene,dotLucene,PLucene,Lupy等等。其中一些知识已经陈旧了——在一个迅速发展的领域,写到书上的知识往往在出版时已经变得陈旧了。针对这个问题,一些作者也在书里给出一个互联网上可访问的地址,分享最新的资源——比如我一直在看的《电子商务》。 其实我已经看了很多Lucene方面的东西,对于Lucene的通常使用也有了概念,只是没有时间来实践。所以看这本书只花了两节课,看完印象最深的是其中一个判断内容相似的算法。其实就是Google黑板报说的那个“余弦定理”——文本包含的各个词及其出现的频率可以构成一个表示该段文本的特征向量,而通过余弦定理可以计算任何两个向量的夹角,夹角越小就说明二者越接近。 貌似没有比这个更好更体现数学之美的算法了,可是,判断两断内容的相似程度是简单的,如果是20万段内容,判断其两两之间的相似程度,又该怎么做呢?进行简单的两两选择,一共会有将近400万条数据,而可以确定的是,其中大部分都是没用的。 很想知道Google当年还有“补充材料”时是怎么判两个网页有重复的,人家服务器里搁的网页可不是十万计的。隐隐觉得这个时候该结合贝叶斯算法——当然肯定不止这些。数学还是不够好,不能马上想到一个可行的解法。 记得今年在北京,某人说,豆瓣里那些相关图书都是用select从数据库里拿出来的 。可爱的回忆。
August 26th, 2007 by 张磊
注:这篇文章是应计算机学院吴书记的号召,以思想报告的形式写一下我对现阶段培养同学们学习氛围的一些思考。完全原创。 盗用这个大大的标题,自己有点汗颜,但是实在想不到别的可以贴合这篇文章的主题了。坦白地说,杭电计算机学院的学习氛围真的需要提高,我自己作为一个计算机学院的学生,目睹了周围人太多的堕落和迷茫。今天写的东西希望能对大家起到些作用。 1、实践是提高水平的唯一途径 在我们这样的专业,所学的东西只有亲自实践过了,成功了,才能算是吃到了肚子里。大一时学C++,看着不少人都拿着小本子拼了命抄老师在PPT上展示的程序。抄是抄来了,自己敲进电脑里面貌似也能跑起来,可是原理没弄懂。 很多时候,要做个东西,之前踌躇满志,可真正到了设计的时候,却发现涩涩的。某些关键地方的技术是自己所不知道的──相信很多人都有过这样的感觉。这其实 是缺少实践导致的。可能你去借了一本”Teach Yourself Java 2 in 21 Days”勤奋地从头读到尾,但真正到了做东西的时候,还是发现好多东西写不出来。没关系,勇于面对自己的无知就好了,在这个互联网及其发达的时代, Google就是最好的老师。我前段时间突发奇想,自己开始写一个聊天机器人,基于Jabber协议的,但是我对Jabber一点都不了解。全靠 Google,只要有了问题,马上搜一下。最终我的机器人只花了几天时间就做出来了,我还在自己的技术blog上写了一个系列的文章来分享心得(请看这 里:http://www.googlecto.com/2007/08/16/all-the-about-xmpppy-in-action-4/ )。 雅虎的工程师车东在 自己的blog上说,建议计算机专业的大学生在sorceforge上找一些小的项目自己练习一下。实践,是我们每个人都比不可少,而且要坚持做下去的事 情。而且,实践获得的乐趣也远远比往笔记本上抄程序大得多。同时,做ACM真的是一个可以锻炼人动手能力的东西,我虽然现在难得写C的程序,可还是从以前 做ACM中获得了不少宝贵的经验。我觉得我们学院把ACM做得太功利了,诚然,在领导们所关注的浙江高校之间的PK中,HDU不能落了后。但是看见那么多 人把身心都投在了ACM上,背负着很大的压力。不如把ACM当做一个锻炼自己的地方,来得轻松。 2、我们不仅应当有专业的知识,也应当有行业的眼光 IT是一个高速发展的行业。也正因为这一点,这个行业才产生了这么多年轻的富豪。如果一个计算机专业的只是投身于写程序、做东西,可能会成为一个顶级的 Coder,但永远也不配被称为IT人。前些日子接触了一个学院的同学,在QQ群里说要接活做网站。和他聊了一下,他说做网站也很苦,我就建议他给自己 做。可是他不知道该给自己做什么,说没有需求。一个只会做东西不去想东西的人,难成大气。 我们应该关心一下我们将来要投身的行业,技术只是这个行业里一个部分。IT涉及了太多东西,潜力之大也超乎我们想像。而我们现在需要做的,也只是在学好专 业知识的同时,培养一下行业的眼光。比如多关注一些IT新闻,多看一些IT人的blog,把花在游戏上的时间腾出来一点点,相信会有很大的收获。我在05 年加入了一个创业的团队担任CTO,之后就参加了大大小小很多类型的IT聚会,从中获益匪浅。 我曾经建议过学院里可以做一个长期的规划,在将来开一门选修的IT文化方面的课程。如果有对这个比较了解的老师,那是最好。 3、锻炼表述的能力 相信每个人都有这样的经历:在别人的要求下到某个公众场合,面对着下面很多只眼睛,讲话。不管普通话有多好,不管对要讲的内容有多熟悉,大部分人的第一次,总是会很紧张,哪怕下面都是自己的熟人,也会觉得不自然。这其实是能力的问题。 表述的能力是所有学生都需要的。把一样东西学到脑子里和把它清晰地讲给别人听是两个水平,而在那么多人面前,还能说得清楚、讲得明白,其实不是一件容易的 事。而学计算机的同学们在这点上分外欠缺。可能是我们长年都和电脑这种“冷兵器”打交道,我们用啥指令它给啥反馈,习惯了这样无声的交流。特别是那些传说 中的“牛人”,更是被“神化”为,深藏不露、沉默寡言的人。不仅是我们学校,我接触的一些浙江大学学计算机的同学也有一样的问题,虽然他们都是在这个领域 出色的学生,但在众人面前讲点东西的时候总会忍不住抓抓头发或是把眼望向别处。 我自己也比较注重这方面的锻炼。在上个学期,我和一些朋友们一起做了一个分享性质的沙龙。每次会有一个专题小演讲,加上讨论,沙龙一般会持续两个小时── 这样的事情对我真的很是考验,但是慢慢习惯之后,开始可以把自己的东西条理出来,讲清楚,大家也可以进行很好的交流。所以,我建议同学们应该多找说话的机 会,多锻炼表达的能力。这样的能力在将来对我们也是很有臂助的。 4、别让语言成了障碍 曾经和朋友开玩笑,说我们学校的“牛人”普遍特点就是英文很差。而我在浙大接触到的“牛人”一个个都能讲一口流利的英文。英文的重要性我也不用多强调了, 而在我们专业上来看,实际上英文有特别的用处。首先很多网上的技术文档都是英文,譬如一些现成的库和框架。面对大段大段的英文文档,如果没有好的英文功 底,实在难以对付。当然,总会有好心的人把英文翻译过来,但未必你要的翻译真就能找到,就算找到了,翻译的质量也实在不知道好不好。 我建议计算机专业的同学们可以尝试着大胆地买一些原版或是影印版的专业书籍来看,在学其中技术的同时也可以熟悉一下那些惯用的术语。我自己大学两年就读了 不少英文的专业和非专业书籍,明显感觉到英文的水平有了提高。现在,我自己开通了一个专门写技术备忘的英文blog:http://www.googlecto.com ,坚持写英文的技术文章,对自己也算鞭策吧。 5、和周围人一起 做小事可以自己搞定,而做大事是需要一个团队的。这里“和周围的人一起”,不是说一起下网吧一起打游戏,而是一起学习,一起做共同爱好的事,一起进步。我 住在一个学习氛围很浓的寝室,大二第一学期的期末成绩出来,软件工程05级年级前10名有3个人在我们寝室。第二学期最终结果还没出来,但是我们的成绩也 很不错。我们寝室里现在还有两个预备党员。我们共同的名字叫Yellow。而这一切,都是我们一起做的。让周围的寝室,都很羡慕。 我们从来不自习,也许这不是个好习惯。但因为我自己曾从事IT,所以可以有一些不错的资源。外校有活动,我们也是一起参加,这样也给我积累了在校内做活动 的经验。后来也我们一起做刚才提到的沙龙。上个学期,在繁忙学习之余,我们出资在加利福尼亚租用了一台服务器,然后每个人开始做自己的小项目。同时,每个 人都有一个独立域名的blog。下面这些就是我们自己的项目: blogkid: http://www.blogkid.net http://www.googlecto.com [...]