2006年11月30日

Where's the Real Bottleneck in Scientific Computing?

Where's the Real Bottleneck in Scientific Computing?
Scientists would do well to pick up some tools widely used in the software industry
Gregory V. Wilson


When I first started doing computational science in 1986, a new generation of fast, cheap chips had just ushered in the current era of low-cost supercomputers, in which multiple processors work in parallel on a single problem. Suddenly, it seemed as though everyone who took number crunching seriously was rewriting his or her software to take advantage of these new machines. Sure, it hurt—the compilers that translated programs to run on parallel computers were flaky, debugging tools were nonexistent, and thinking about how to solve problems in parallel was often like trying to solve a thousand crossword puzzles at once—but the potential payoff seemed enormous. Many investigators were positive that within a few years, computer modeling would let scientists investigate a whole range of phenomena that were too big, too small, too fast, too slow, too dangerous or too complicated to examine in the lab or to analyze with pencil and paper.

But by the mid-1990s, I had a nagging feeling that something was wrong. For every successful simulation of global climate, there were a dozen or more groups struggling just to get their program to run. Their work was never quite ready to showcase at conferences or on the cover of their local supercomputing center's newsletter. Many struggled on for months or years, tweaking and tinkering until their code did something more interesting than grinding to a halt or dividing by zero. For some reason, getting to computational heaven was taking a lot longer than expected.

I therefore started asking scientists how they wrote their programs. The answers were sobering. Whereas a few knew more than most of the commercial software developers I'd worked with, the overwhelming majority were still using ancient text editors like Vi and Notepad, sharing files with colleagues by emailing them around and testing by, well, actually, not testing their programs systematically at all.

I finally asked a friend who was pursuing a doctorate in particle physics why he insisted on doing everything the hard way. Why not use an integrated development environment with a symbolic debugger? Why not write unit tests? Why not use a version-control system? His answer was, "What's a version-control system?"

A version-control system, I explained, is a piece of software that monitors changes to files—programs, Web pages, grant proposals and pretty much anything else. It works like the "undo" button on your favorite editor: At any point, you can go back to an older version of the file or see the differences between the way the file was then and the way it is now. You can also determine who else has edited the file or find conflicts between their changes and the ones you've just made. Version control is as fundamental to programming as accurate notes about lab procedures are to experimental science. It's what lets you say, "This is how I produced these results," rather than, "Um, I think we were using the new algorithm for that graph—I mean, the old new algorithm, not the new new algorithm."

My friend was intelligent and intimately familiar with the problems of writing large programs—he had inherited more than 100,000 lines of computer code and had already added 20,000 more. Discovering that he didn't even know what version control meant was like finding a chemist who didn't realize she needed to clean her test tubes between experiments. It wasn't a happy conversation for him either. Halfway through my explanation, he sighed and said, "Couldn't you have told me this three years ago?"

As the Twig Is Bent…

Once I knew to look, I saw this "computational illiteracy" everywhere. Most scientists had simply never been shown how to program efficiently. After a generic freshman programming course in C or Java, and possibly a course on statistics or numerical methods in their junior or senior year, they were expected to discover or reinvent everything else themselves, which is about as reasonable as showing someone how to differentiate polynomials and then telling them to go and do some tensor calculus.

Yes, the relevant information was all on the Web, but it was, and is, scattered across hundreds of different sites. More important, people would have to invest months or years acquiring background knowledge before they could make sense of it all. As another physicist (somewhat older and more cynical than my friend) said to me when I suggested that he take a couple of weeks and learn some Perl, "Sure, just as soon as you take a couple of weeks and learn some quantum chromodynamics so that you can do my job."

His comment points at another reason why many scientists haven't adopted better working practices. After being run over by one bandwagon after another, these investigators are justifiably skeptical when someone says, "I'm from computer science, and I'm here to help you." From object-oriented languages to today's craze for "agile" programming, scientists have suffered through one fad after another without their lives becoming noticeably better.

Scientists are also often frustrated by the "accidental complexity" of what computer science has to offer. For example, every modern programming language provides a library for regular expressions, which are patterns used to find data in text files. However, each language's rules for how those patterns actually work are slightly different. When something as fundamental as the Unix operating system itself has three or four slightly different notations for the same concept, it's no wonder that so many scientists throw up their hands in despair and stick to lowest common denominators.

Just how big an impact is the lack of programming savvy among scientists having? To get a handle on the answer, consider a variation on one of the fundamental rules of computer architecture, known as Amdahl's Law. Suppose that it takes six months to write and debug a program that then has to run for another six months on today's hardware to generate publishable results. Even an infinitely fast computer (perhaps one thrown backward in time by some future physics experiment gone wrong) would only cut the mean time between publications in half, because it would only eliminate one restriction in the pipeline. Increasingly, the real limit on what computational scientists can accomplish is how quickly and reliably they can translate their ideas into working code.


A Little Knowledge

In 1998, Brent Gorda (now at Lawrence Livermore National Laboratory) and I started trying to address this issue by teaching a short course on software-development skills to scientists at Los Alamos National Laboratory. Our aim wasn't to turn LANL's physicists and metallurgists into computer scientists. Instead, we wanted to show them the 10 percent of modern software engineering that would handle 90 percent of their needs.

The first few rounds had their ups and downs, but from what participants said, and from what they did after the course was over, it was clear that we were on the right track. A few techniques, and an introduction to the tools that supported them, could save scientists immense frustration. What's more, we found that most scientists were very open to these ideas, which probably shouldn't have surprised us as much as it did. After all, the importance of being methodical had been drilled into them from their first undergraduate lab.

Six years and one dot-com boom later, I received funding from the Python Software Foundation to bring that course up to date and to make it available on the Web under an open license so that anyone who wants to use it is free to do so. It covers tools and working practices that can improve both the quality of what scientific programmers produce, and the speed with which they produce it, so that they can spend less time wrestling with their programs and more doing their research. Topics include version control, automating repetitive tasks, systematic testing, coding style and reading code, some basic data crunching and Web programming, and a quick survey of how to manage development in a small, geographically distributed team. None of this is rocket science—it's just the programming equivalent of knowing how to titrate a solution or calibrate an oscilloscope.


On the Hard Drives of Giants

Science is much more than just a body of knowledge. It's a way of doing things that lets people separated by oceans, decades, languages and ideologies build on one another's discoveries. Computers are playing an ever-larger role in research with every passing year, but few scientific programs meet the methodological standards that pioneers like Lavoisier and Faraday set for experimental science more than 200 years ago.

Better education is obviously key to closing this gap, but it won't be enough on its own. Journals need to start insisting that scientists' computational work meet the same quality and reproducibility standards as their laboratory work. At the same time, we urgently need more journals willing to publish descriptions of how scientists develop software, and how that software functions. Faster chips and more sophisticated algorithms aren't enough—if we really want computational science to come into its own, we have to tackle the bottleneck between our ears.


links:
http://www.americanscientist.org/template/AssetDetail/assetid/48548
http://osl.iu.edu/~lums/swc/quiz.html
http://osl.iu.edu/~lums/swc/

2006年11月27日

中国中文信息学会25周年学术会议有感

有幸参加了中国中文信息学会二十五周年学术会议,见闻颇丰,主要分为以下几个方面,和大家分享如下。

大纲
1。精彩的成果展览
2。见到数位中文信息处理的前辈
3。聆听了几场精彩的邀请报告
4。了解到的关于指代消解方面的信息
5。对于LTP的推广
6。总体感受


1。精彩的成果展览

年会共有三天,第一天是各家公司和学术单位的成果展览以及中文信息处理学会的一些事务的讨论。由于我不是中文信息处理学会的成员,所以第一天只需要负责我们实验室的成果展览以及参观其他单位的展览。

这次展览,是我接触中文信息处理领域以来看到的最大规模的一次。数了一下,大概有5个大学,10多家公司。各家单位的展板都非常的精美。宣传册的制作方面,各家公司几乎都很漂亮,其中TRS公司的最为精美。展览中看到北京大正语言知识处理研究院的展台。他们的产品是基于HNC理论的,主要有HNC信息智能过滤器,HNC只能信息检索系统,HNC文本分类系统,“花季护航”上网管理软件。该公司以HNC理论为核心技术。另外一个吸引我注意的是“平方智能搜索引擎”。说是能够自动识别用户兴趣,并在用户的使用过程中不断校正、维护、完善用户兴趣,而且可以根据用户的兴趣自动实现智能代理和信息推送。感觉这个功能非常的有趣,我猜测后台是用贝叶斯网络来实现这种功能的。遗憾的是没有当场得到参展人员的解答。

输入法现在仍然有些公司在研发。这次展览上除了ITNLP实验室的句子级手机输入法展示外,还有一家数码技术有限公司的S9手机输入法,以及一家韩语兼容的汉语电脑键盘输入法。S9输入法的一个感觉最好的功能是可以实现各种输入法的自动切换,比如输入“我的电话号码是”后随即按键都被视为数字。还有一些类似的其他自动切换。感觉这种功能除了常规的语言模型的训练外,还需要引入Name Entity的训练。倒是一种不错的延伸。

我们实验室展台旁是香港城市大学语言资讯科学研究中心的展台。由于是邻居,和他们的交流多一些。他们的主要工作是LIVAC汉语共时语料库。这个语料库和台湾中央研究院黄居仁老师带领的超大规模语料库建设的一个不同点是,他们同时包含了北京。上海、广州、深圳、香港、澳门、台北以及新加坡的中文报纸,并且保持动态更新。这项工作已经开展了11年,是到目前为止收集时间最长的一个中文语料。感觉他们的工作非常的细致,手工进行了大量的处理。他们展示了“贝克汉姆”在各个地方的不同称谓,已经很多同义词的列表。这些手工工作为实现自动处理打下了坚实的基础。

有幸在展览中看到了科大讯飞的展示。我看到了很多语音方面的演示。感觉非常的不错。现在看来语音处理是信息处理中一块非常不错的领域。听说科大讯飞的研究人员中胡国平也到场了。胡国平在决策树方面造诣颇深,一直是我学习的目标。但遗憾的是没有见到他。

当然,在展台前,我们展示的LTP和三个预先准备的录像也受到了很多参观人员的关注。带到现场的实验室论文集也很快被取光了。总之,这次参展增加了很多见识。


2。见到数位中文信息处理的前辈
什么叫前辈?这个概念比较模糊。我的定义就是满头白发的那种吧。记得以前有位朋友说过,当你看到以为满头白发的老者在工作或者讲课的时候,心底会有一种默默的尊敬。

这次年会上,我有幸见到了素来敬仰的黄昌宁老师。黄老师的特邀报告中展示了一种分词的新思路,而且效果非常的好。回想去年教师节那天,我们几位小辈陪着黄老师在北京植物园闲逛的场景历历在目的。黄老师是我非常尊敬的学者。他的故事任何人听了都会肃然起敬的。

从山西大学的刘开瑛老师那里,我感受到了一种对研究的热情和执着。刘老师在做特邀报告的时候,讲到了他正在领导进行的CFN的一个知识库工程。略带口音的普通话加上慈祥的笑容,给人的是一种亲切和尊敬的感觉。听说美国和加拿大的教授都是终身制的,不用做任何工作都能保证薪金不变的。但是美国和加拿大的很多教授都在主动的从事着很多的研究工作。那种发自内心的研究是格外有意义的。看着刘老师在台上演讲时,我彷佛看到了他那种发自心里的研究热情。这一点黄老师身上也体现得非常明显的。

另一位满头白发的前辈是冯志伟老师。虽然没有直接听到冯老师的报告。但是在孙茂松报告汉字极限熵的时候,冯老师的发言中也让人感受到了一种对研究的执着、热爱和严谨。

还有一位老者就是92岁高龄的唐亚伟老师。他从事了一辈子的汉语速录研究。结合他75年的研究成果,亚伟速录技术获得了这次颁发的首届“钱伟长中文信息处理科学技术进步一等奖”。唐老师的获奖感言,展现了他的风采。

会场中还有一些前辈,恕不能一一列举。

3。聆听了几场精彩的邀请报告

这次大会共有12个特邀报告,我有幸聆听了全部内容。可以说,每个报告都是那么的精彩。每位主讲人在演讲台上都是热情洋溢的。报告列表和我的一些体会如下:

8:30-9:10 中文为核心的多语言信息处理——挑战与机遇 徐波

由于前两个报告在大会的论文集中没有文章,所以只能记录一些当时的零星感受。徐波老师的报告中提到的一种常见的企业模式基础是一招鲜,吃遍天,以汉王和科大讯飞为例。“一招鲜,吃遍天”已经不是什么新鲜的术语,曾经俺也听到过很多次。在科研方法中就有这种情况。也就是所谓的一把好锤子砸遍各个研究点的方法。这次被用来比喻开公司,感觉也是一个理儿。看来世间很多事情是相通的。作研究和开公司有很多类似之处的。

中文信息处理国际化,多语信息处理是核心。这个观点是徐老师他们单位的一个重点项目的背景概述。确实,现在看来很多中文信息处理的研究中都在涉及多语的处理,或者引入多语资源的分析。例如,借助多语信息的词义消歧、NE识别、指代消解、文摘、文本分类等。在国际化的处理中,徐老师提到三个研究点:语音识别前景巨大,应用多,市场前景巨大;机器翻译是多语处理中非常重要的一步,其中自动评测是机器翻译研究工作中的里程碑;新一代搜索引擎的主流是垂直搜索以及跨媒体搜索。

其中的关键点是海量资源的建设和共享,技术评测和重大应用的集成带动。这些关键点我感觉都是非常正确的。现在各种自然语言处理任务的主流方法都要依赖于大规模的语料资源。可以说现在的NLP的实用技术在某种意义上就是在比谁的资源多,谁的资源好。目前我个人感觉国内的现状是很多人都有资源,但是资源间的互通比较少。加入能够整合多家单位的人力物力一起加工统一语料的话,对于中文信息处理将会是一件意义深远的事情。但是这种情形出现的概率非常之小。

在徐老师报告的拓展部分,提到了他们正在完成一个Semantic Graph大规模语义网络。感觉这个工作非常的有意思,估计是Semantic Web下的一个重要推动。

最后,徐老师提到了现在NLP的主流已经从最早的规则演变到后续的统计以及现在的统计和规则的结合上了。如何演义统计与规则之道将是今后NLP研究的重点。

9:10-9:50 汉王文字识别技术研发与产业化 刘昌平

汉王是国内中文信息处理的一面旗帜,他们公司大量使用的是模式识别技术。从刘老师的报告中我了解到了两个主要的方面:汉字编码的国家推动情况以及各种机器学习技术在汉王公司中的应用情况。

躲在互联网的边缘很长时间之后,显然我已经脱离了汉字编码的国家标准计划。刘老师提到汉字编码从原先的以及汉字3千多个到GB2312的6千多个,以及随后的GBK1万多个,以及现在国家正在强制执行的GB18030 2万3千多字。

另外一个很大的方面,也是俺本次会议收获最大的是了解到了各种机器学习方法在公司产品中的使用情况。到目前为止,各种学习方法用到的地方最多还是手写体识别和语音识别。在汉王的手写体识别产品中,很多机器学习方法都得到了应用。如动态规划、LVQ4优化、SVM用于语言分类、遗传算法用于权值生成、决策树用于表格识别、曲线拟合归一化、MCE优化、3次动态规划、Bayes用于函数名分析等。汉王的各种应用,我个人感觉主要技术核心在于各种特征抽取工作和算法的集成方面。看到汉王使用了大量的机器学习算法在实际的产品应用中,我感受到了机器学习的力量。以后别人再问我机器学习有什么用,我就能举出丰富的例子了 :)

刘老师在介绍汉王识别的产业化是提到了汉王的策略,其中有两条我感觉非常值得学习:
1、以战养战,长期投入,持续攻关
2、以软件作为主导,软硬结合。

10:20-10:50 TRS中文信息检索技术的发展(摘要) 施水才

这是我第二次聆听施老师的报告。第一次是在2004年第二届学生计算语言学会议上施老师作为TRS代表的简短介绍。当时觉得施老师是牛人,把好多自然语言处理技术都产业化了。这次报告中我有幸近距离的聆听了施老师的报告。报告中我主要感受到如下三点:

1、施老师反对把搜索引擎划分为第一代、第二代、第三代。事实上,他认为关键词搜索永远不会在搜索引擎中过时。事实上,关键词搜索会长期在搜索中发挥巨大的作用。

2、搜索引擎发展到现在的这个阶段需要很多强有力的技术,其中可以借助的一项重要技术是社会搜索。结合互联网社会的集体智慧和集体劳动,会创造出意想不到的效果。

3、网格技术可以用于IR。施老师认为Google之所以成功的一个关键原因是Google同时管理数千台的服务器并行工作的能力。事实上,我个人也感觉,这种能力相当的惊人。因为,每天都会有服务器宕机,还会经常性的加入新的服务器。如何管理这些看起来比人笨拙但是能力超强的机器,确实是一件了不起的事情。

10:50-11:20 信息检索研究:过去三十年中我们走了多远 马少平

马少平老师在台上演讲的时候,我感觉到他是一位谦虚而且踏实的学者。在翻看这个报告的论文的时候,我开始被吓了一跳。他们居然仔细阅读了SIGIR1971年以来所有的论文,并且做出了非常不错的分析。这个工作不是一班人能作的。后面的工作一定是大量的,而且让人感觉烦闷的。事实上,我当前正在起步阅读大量的指代消解方面的论文。首当其冲,我遇到了这个问题,读完并整理这么多论文太麻烦了。
在马老师的论文和报告面前,我折服了。作研究就得下苦功夫,只要功夫深,铁棒磨成针。为了深入开展我的研究,我必须向马老师他们学习这种不厌其烦的阅读和整理论文精神。只有这样做了,我才能看得更清楚,才能看得更远。

11:20-11:50 互联网挖掘和检索的研究进展 刘悦,程学旗

程学旗老师的报告内容我记不清了,好像是中科院的一些相关工作的介绍。当时我被他们的论文深深吸引了。从论文内容看来,程老师他们跟踪了很多的前沿杂志,例如麻省理工的Technology Review。文章中总结到,一般的文本挖掘不仅指单独的文档中的信息提取,同时也包括分析文档集合的模式和趋势。文本挖掘包括文本的分类/归类,涉及到决策树等算法。

在基于语言模型的信息检索理论中,一些原本用于自然语言处理领域的方法,如最大熵、隐马尔可夫模型、马尔可夫随机场模型等纷纷用于信息检索。


卡内基梅隆大学的Tom Mitchell(经典著作Machine Learning)最近在Technology Review上撰文指出:第一代搜索引擎是基于关键词的搜索;第二代搜索引擎是基于文档主题的文档分类。Mitchell指出目前Web内容挖掘的主要算法有三种:
1)Naive Bayes模型。它是计算基于主题词频率来匹配目标文档概率的基本方法。
2)Maximum Entropy算法是对Bayesian算法的改进,它可以计算词和词的组合在文档中出现概率。这种方法需要正面和负面的训练样本。
3)Co-Training。协作训练法是最新的挖掘算法,它只需要较少的训练就可以抽取无标签数据,它利用了超链接信息和文本内容的组合。这实际上是Web内容挖掘和Web结构挖掘的组合。

中科院实现了PerSou人物追踪系统。其中实现了同名的判断,并且能生成各自的履历表和活动报道专辑。查看对应的博士论文后发现,他们的系统还能生成名人的热点指数曲线图。这个PerSou非常有趣,有空需要好好研究一下。

14:00-14:30 基于语篇的机器翻译前瞻 史晓东

史老师在机器翻译界史很有名的。2004年的学生计算语言学会后的讲习班上,史老师为我们介绍了如何快速搭建机器翻译系统。在今年沈阳的学生会议上从他的学生那里了解到,史老师的编程相当厉害,工作也非常的勤奋,是那种坐在那里工作一整天不知道累的学者。我非常的敬佩史老师。

这次史老师的报告感觉分量很重。因为其中提到了机器翻译研究中比较超前的话题:语篇翻译。在报告中我了解到如下有用的信息:

1、现在机器翻译已经从早先的基于单词的系统,以及随后的基于短语的系统,发展到现在最新的基于句法分析的系统。基于这种发展趋势,史老师才做了这样一个报告的。个人感觉非常具有前瞻性,是值得重点学习的文章。

2、由于汉语句法的灵活性以及在标点(主要是逗号)用法方面的不严格,如果以句号作为断句的单位,显然不很合适。这让我想到我们实验室的断句模块。其实一个汉语句子究竟应该从哪里分开是值得研究的。或许有时间的时候,我们可以尝试一下用机器学习的方法来完成这项工作。试想如果采用目前在序列标注上最好的方法CRF来完成这项工作,可能会得到很好的效果。

3、史老师的文章中提到:从语篇语言学的观点,汉语是主题型语言,大量采用省略,比英语是更加面向语篇的。要理解一个汉语句子,常常需要比单句更大的上下文。

4、在语篇理解方面,国内外有相当多的研究,如指代消解,中心理论,隐喻(metaphora)、借代(metonymy)等各种修辞格(figure of speech)的计算。从这个叙述,我联想到一个我的指代消解研究工作中存在的一个非常严重的问题:对需要研究问题的分类非常不清楚,没有清晰指出什么该做,什么不该做。看来等自己静下心来后需要非常认真的思考这个问题。首先要弄清楚,我要做什么,然后才能马不停蹄的开工。否则就是无头苍蝇瞎转一气的。

5、今年ACL会议在语篇标注方面有一个Tutorial称为Discourse Annotation: Discourse Connectives and DIscourse Relations,说明语篇标注已经相对成熟。

6、黄曾阳老师曾经指出在一个句群之内的句子存在这省略和照应等形式现象,并且不同语言的形式标志不同,“英语偏好照应,汉语偏好共享。”汉语是一种意合型语言,句群提供了更多的上下文,可望在词义消歧,指代生成,时态计算方面为机器翻译提供新的思路。

7、在语篇的语义理解方面,最多的工作是第一节中指出的诸如指代消解之类的孤立的语篇理解工作。

14:30-15:00 多策略的机器翻译 王海峰

由于王老师的报告我在哈尔滨听过一次,感觉这次报告很类似。于是没有仔细听,当时翻看了一些论文集中的其他论文。王老师的报告中有一点是非常新颖的。那就是采用树串映射的树匹配方法。在词对齐方面,他们也展开了非常深入的研究。

15:00-15:30 由字构词——中文分词新方法 黄昌宁

这个报告是我今天深受启发的精彩报告之一。黄老师的演讲内容清晰,让人一听就明白。他们采用了一种新的方法来进行分词。并且在Bakeoff2006 国际汉语分词评测上6项评测中取得了四项第一两项第三。

这个新方法采用的是一种新的策略:将汉语分词看成是序列标注问题。两个汉字之间的标签(词语开始,词语内部,单个词,词语结束)看成是一种标签的序列标注问题之后,就可以采用目前在序列标注上最为流行的CRF来完成。对于SVM和ME来说,需要设计独立的状态转移特征来表达词位的转换。但是对于一阶线性链CRF来说,这一转移过程将被自动集成到系统中来,而无需专门的指定。这样,对于基于CRF建模的分词系统而言,需要考虑的仅仅是字特征。

我觉得这种把问题换个视角来处理的思路非常的好。我们可以借鉴过来完成很多的工作。例如可以借助CRF来实现指代消解的序列标注问题。

一个好的想法是需要很好的实现的。在黄老师的论文中采用了很多的辅助技术和技巧来提高最终算法的效果。例如,他们统计了很多的语料库来确定分词应该采用的数学模型,以及需要的参数设置情况。个人感觉这种工作也是非常非常重要的。我们也可以尝试一下这种方法来进行实验室内分词模块的提升。

15:30-16:00 汉语框架语义知识库构建工程 刘开瑛

这是我第一次接触刘开瑛老师。在前文提到的中文信息处理前辈中,刘老师是其中一位。整个报告过程中,刘老师向我们展示了他正在进行的Chinese FrameNet的建设工作。个人感觉这个工作意义重大。刘老师的年纪估计在60岁以上,但是对于研究还保持着高度的热情,对于国外相关的科研动向掌握得也非常清楚。刘老师的这种对科研的热情,是我这样的小辈需要好好学习的。

在这个报告中我了解到两点关于XML的常识。
2000年,国际万维网联盟W3C总裁Tim Berners-Lee提出下一代万维网--“语义Web”的理念,成为人们讨论与研究的热点。XML,RDF和Ontology是语义Web的关键层,用于表示Web信息的定义。2006年5月,Tim Berners-Lee宣布,W3C已发布推荐标准80于份,语义Web已经具备了成功所需要的所有标准和技术,包括作为数据语言的RDF、本体语言,以及查询和规则语言。这些国际标准和技术方面的准备为我们的研究提供了可靠的基础。

16:20-16:50 文学语言与自然语言理解研究 俞士汶

俞老师在报告中的其中一个观点是自然语言处理就是一个歧义消除的过程。确实如此,自然语言处理的各种任务都可以看成是歧义消解的过程。其中省略与指代也算是歧义消解。

16;50-17:20 中文聊天语言的奇异性与动态性研究 黄锦辉

黄老师的报告中我得到的两条信息是:Opinion Mining和Social Network现在在国外的研究工作很火;Web2.0就是一个人民拥有,人民建设、人民享受的平台。呵呵,第二个观点有点像三民主义,这是carl说的 :)

17:20-17:50 藏语文本信息处理的历程与进展 江荻

江老师提到藏语中没有确定数目的词汇,而且自动藏语分词非常困难。现在藏语的研究中多数文章中作者都有江老师的名字。江老师开玩笑的说现在藏语的研究比较单一,多数论文都看到同一个名字,这种现象不好 :)


4。了解到的关于指代消解方面的信息

这次会议中一共有下面几个报告提到了指代消解:

《互联网挖掘和搜索的研究进展》:其中的PerSou部分提到了同名识别。有对应的博士论文《面向人物追踪的知识挖掘研究》可以查看。
《基于语篇的机器翻译前瞻》:指出指代消解是语篇方面经典的研究课题,可以在句群范围内更好的考虑指代生成的方法。
《文学语言与自然语言理解研究》:认为指代消解也是一种歧义消解
《一个用于汉语汽车评论的意见挖掘系统》:提到意见挖掘系统中包含了指代消解和省略恢复模块算法。指代消解主要依靠在依存句法分析的基础上完成各种权值的设定;省略回复部分也是在依存句法分析上进行的。看到这里,我感觉有点不好意思。因为依存句法分析是我们实验室的技术,专门研究指代消解的我没有能用上依存分析来实现指代消解系统,反倒是其他大学的研究人员实现了。呵呵,blush //

个人感觉指代消解在自然语言处理中的研究不是很多。通观这两年来国内外在指代消解方面的研究动向,我似乎觉得指代消解的研究热潮已经开始变冷了 :) 呵呵,这是一个危险的想法,因为我的指代消解研究到目前为止还没有实质性的进展(是指撰写论文方面)。看来自己需要不断的加油了!


5。对于LTP的推广

总体来说,这次推广效果不如沈阳学生会议上。在会议的第一天上午,有个IBM的笔记本可以演示LTP。当天有很多的人进行了现场的演示。随后的一天半里,没有了IBM笔记本,只能在三星笔记本上不断的播放预先录制好的三个录像。似乎有点影响宣传效果。

我的LTP的报告是在正式正常报告的第一天上午11:10分的,我在博苑厅分会场。当时的主席是周国栋老师。等到我前面校友方高林讲完后,本该是我做报告的,可是突然之间一位老师对主席说他的包丢了,本来是下午2:30的报告,但是为了更好的寻找包,需要在上午做报告。考虑到这种特殊情况,主席同意了他插到我的前面进行报告。这种情形下,我也只能同意了。由于这个插曲,一些在场的听众不知道出了什么问题,以为我的报告不做了,就有些人离开第4分会场了。

不过,万幸的是,他的报告只有10分钟。然后我就开始了我的演讲。由于旁边坐着黄老师,而且他是专门到这个会场来听我的报告的,开场白我有点紧张,不过一会儿就进入状态了。由于只有20分钟,主席也提醒了我一次已经超时,我的报告有些部分没有展开。但是总体来说还是各个部分都介绍到了。我的PPT中大量采用的网页嵌入技巧取得了很好的效果,避免了在沈阳会议上的演示困难的处境。

会有有两家单位向我询问了如何共享我们的LTP,以及如何使用LTP来进行表主号分词、词性信息的文件进行依存句法分析标注。还有以为清华大学的老师向我详细询问了如何用LTP来进行口语语料的标注。

总体来说,这次大会上,对LTP的推广还是比较成功的,起到了预想的效果。

6。总体感受

有幸在大会中见到了很多前辈和一些熟悉的面孔。经过交流,学习和领会到了很多新事物。在分词方面,黄老师的由字到词的方法在方高林的报告中也有所体现。感觉现在在分词领域这种方法已经出现了独霸一方的景象。机器学习方法在中文信息处理中得到了大量的应用,但是现在的趋势是统计加规则的结合之道。领悟这个结合之道,我等还需要下很多的功夫。对于研究,热情是非常重要的。只有发自心底的热爱才能做出真正有意义而且严谨的研究成果。总体来说,收获颇丰。简记如上,以备记录。

2006年11月26日

做研究和开公司很相似--观《对话三星电子CEO尹钟龙》

晚上看了两遍2005年1月2日的《对话三星电子CEO尹钟龙》。这是我最喜欢的节目之一。这也是我第一次把一期节目看两遍。从中领悟到了一些开公司的道法,感觉作研究和开公司很类似。下面是一些个人的草草的记录,还没有完全消化,请见谅!

-----------------------
坚持、毅力,想到就要做到。
制定路线图,然后确定其中需要的各种技术,然后在世界范围内聘请技术能手开始研发。动态调整路线图,不断增加、删除、修改。
谦虚、低调做人,高调做事。
摆脱企业低靡和亏损的方法:大规模结构调整(裁员30%)、费用缩减、对不良债权的处理、对没有利润事业的整理、持续不断的研发核心技术(未雨绸缪是非常重要的。今年很好,不知道明年会怎么样)。高端技术高端产品、创新的想法低端技术。
国内企业的做法:随风,没有差异化;老板拍脑子决定,没有挖掘企业内部的集体创新能力
加大高端技术的研发,技术决定一切。
企业白手起家到世界领先的三步曲:产品组装技术,产品设计技术,再有产品核心技术。国家的发展也是这样。其实我个人认为,个人的发展也是如此,作研究也是如此。
广告的作用是让大家知道你有很好的产品,很好的技术;没有这样的保证,广告就会起反作用。
有危机意识,现在的世界发展很快,五年内只能预测到40%,十年内只能预测到20%到30%。没有危机意识就不能保持不败之地。
三星的名言:除了老婆孩子不能变,什么都能变。
摆脱危机和处理危机都很重要,但是预防更重要。
国际化道路,哪里有市场,哪里有商机,哪里就有三星的商品。
-----------------------

2006年11月8日

[收藏]研究人员的圣经

研究人员的圣经
译者:柳泉波
摘要

获得硕士或者博士学位[1]是很难的工作,本文档对此给出了全方位的建议。第一节描述了问题——什么是论文?第二部分陈述了毕业论文获得通过的正式要求。三、四节描述了在此过程中学生可能遇到的种种障碍。五、六节对选题和项目实施给出了建议。七、八和九节关注的是阅读和写作。十节描述了学问的评审过程,并就如何应对给出了参考意见。最后,十一节给出了接收人工智能方面投稿的期刊列表。

1 什么是毕业论文?

要获得博士或者硕士学位,你必须完成一篇毕业论文并通过口头答辩(人工智能系的研究生无需笔试[2])。在口头答辩中,一般问及的都是要求对论文中的某些问题进行澄清,所以最主要的评价依据就是毕业论文。

合格毕业论文(至少是Edinburgh大学认为合格的)的定义,可参看校历中有关研究生学习的部分:

3.2.6和3.2.7。摘录如下:

博士论文 博士学位的基础要求是:

a 博士申请人必须通过论文的表达以及在答辩中的表现证明他可以从事所在领域的原始创新研究,能够将特定的研究项目与本领域的知识体系结合起来,能够一种严谨而学术的方式表达自己的研究结果。

B 毕业论文必须包括原始创新的工作,这些工作对本研究领域的知识以及理解作出了明显的贡献,毕业论文包含值得出版的材料;论文显示出作者对本领域知识以及相关文献充分地掌握;论文显示出作者能对自己的工作和本领域其他学者的工作进行严谨的判断;论文体现出来的工作能够在三年的研究生学习和研究期间完成;文字表达合格,参考文献充分而适当,具备可理解的内在结构,本领域的其他学者可以明白论文中提出的目的、背景、方法和结论。

C 毕业论文的篇幅原则上不能超过100,000单词。但如果由导师建议,委员会认定篇幅的扩展确实属于处理论文主题所必须的,篇幅可适当扩大。
硕士论文 硕士论文的基本要求是:
i. 申请人通过论文的表达和书面/口头的答辩,表明自己已经获得并理解了本领域的先进知识,能够将对特定论题的知识与更广范围的研究联系起来,能够用严谨而学术的方式表达知识。
ii. 论文必须是申请人所从事研究的合格记录组成的原始工作或者对本领域知识的合格而严谨的调查研究。论文显示出申请人有能力运用合适的研究方法,具备足够的领域知识。论文所采用的方法或者陈述是独立完成的。文献陈述是合格的,包括适当的引用。

iii. 论文的篇幅不能超过60,000单词,6.1部分说明的情况例外,或者由导师建议,委员会认定篇幅的扩展确实属于处理论文主题所必须的,篇幅可适当扩大。
博士研究的创新性和意义需要有多大?“所包含材料都是值得表达的”就是一种简单的判断规则。将论文的精华提取出来,就是一篇可在期刊上发表的论文。当然,并没有一定的标准,最后的决定取决于答辩委员会的成员。
硕士论文的定义所包含的有用信息更少。在人工智能系,我们并不需要笔试。很多硕士论文是研究的记录而不是严谨的调查,当然,后者也可以。同样,将硕士论文的精华提取出来,也应该是一篇短论文。但是不应该要求可发表在期刊上,系里的Working Paper就可以了。
如果你还不了解期刊论文或者Working paper的标准——赶快读一些!同时还要读一些毕业论文。不要被美国大学的毕业论文吓倒,他们的学生要花五到六年的时间学习,而我们英国一般是三到四年。
--

2 研究阶段学习的程序
在爱丁堡大学,全日制博士生至少要学习33个月,非全日制学生至少要45个月,对于硕士,全日制学生最少要21个月,非全日制学生至少要33个月。在此期间,学生一般要住在爱丁堡。一般要求三年完成博士学业,两年完成硕士学业。学生资格只在此期间有效。博士的最长学习期限是五年,硕士是四年。
过去,人工智能专业的研究生很少能在规定期限内提交自己的论文。为了减少所花费的时间,每个学生的研究工作将按照系里通知16号所描述的方式组织,通知里列出了每一阶段研究生应该达到的要求。这些要求不时地会有一些细微的调整,因此本文没有将之包含在内。

3 研究生的常见问题
对于第一次做研究的人来说,研究过程中充满了陷阱。了解这些,有助于避开这些陷阱。

3.1 解决大问题
很多学生的选题太大了,特别是人工智能专业的学生。要知道很多对人类来说是很容易的东西,对模型来说却是太难了。很显然,帮助你选择合适论文题目的责任落在你的导师肩上。此外,你还要阅读文献,跟同行们交流,弄明白最新进展是什么。论文的“进一步的工作”部分是产生思路的绝佳来源。阅读文献要严谨。重新完成原先不成功的工作,也是选题的一个来源。

3.2 天上掉馅饼
选好题后,下一步做什么?在屋子里正襟危坐,手持笔和纸,期待好的思路从天而降,这显然是不现实的。你应该做的是:
a) 阅读文献,而且要带着问题读,例如,里面是不是包含着错误,我应如何利用这篇文献,等等。
b) 多跟其他人交谈,别一个人闷头傻做。不要觉得自己的思路太丢人了,别人也聪明不到哪儿去。
c) 先尝试所选题目的简化问题。
d) 以工作论文的形式写下自己的思路。想象自己正在向别人解释自己的思想。你会惊奇地发现原先不甚清楚的思路成型了,缺陷也显露出来了。
e) 向一个小组报告你的思路,效果同上。

3.3 整日沉溺于计算机中
计算机是非常吸引人的。一个计算机痴能花数年的时间去调试程序,调整输入/输出例程。当BUG被清除或者输出很漂亮时,计算机痴人们会有一种成就感。这是虚幻的!作为一名研究者,你的程序必须在比代码更高的级别上具备解释性,这样才能为领域知识作出真正的贡献。在上机实现之前,先从理论上规划好程序。如果有些部分必须经过上机验证,验证完了后要迅速离开计算机,并继续从理论上进行设计。如果你觉得这样太难了,尝试向其他朋友,以论文的方式或者在研讨会上描述其工作原理。如果人们没办法明白,那
就是你的问题——要加油啊。

3.4 自创一门语言
另外一种“沉溺于计算机中”的表现是想自己写一门计算机程序设计语言。不错,现有的语言肯定不能完全满足你的要求,但这并不成为自创一门语言的理由。你总是能找到合适的替代品,恰好满足你的要求。要编写有用的新语言,不仅需要对AI具有百科全书式的了解,还要有系统程序设计的经验。没有人会使用你写的语言——甚至你也不会!你的全部精力将花在语言的设计上,自己的项目倒忘得一干二净了。如果你确实觉得现有的语言不能满足要求,就此写一篇论文,详细阐述该语言的缺陷。如果你的意见确实有道理,对现有语言的增强一夜之间就会出现。

3.5 空想主义
收集实验数据的过程充满乐趣,有可能出现各种现象。要确保自己知道想根据实验得到什么样的结果。
a) 向别人解释你认为试验将会表现出什么结果。
b) 假设试验已经做完,数据就绪了,你想用它来做什么?
c) 不仅要先在一两个人身上做试验,而且要分析。别梦想试验自动会呈现出什么东西。

3.6 象牙塔
独立思考是好事,但如果完全与他人封闭就是错误的。只有保持联系才能了解本领域的最新进展。跟别人聊聊他们的研究。有选择地参加讨论会和报告会。每周花些时间来读评论、摘要和选出的论文。

3.7 无人理解的天才
很容易以为别人不理解你的研究的原因是因为你是个天才,别人都是草包。实际上还有其它的可能:
l 偏爱行话。人工智能领域充斥着很多行话:尝试用普通英文将自己的思路表达出来;尝试用别人的行话重新表达你的思路。试试看,效果是不是不一样了?
l 如果我能做,那肯定是微不足道的。一旦找到了问题的解决方案,就会觉得微不足道。然后想:这太容易了,我再试试别的吧。这可是没完没了的!你的解决方法对别人而言可不是微不足道(可能是错误的或者过于复杂了),并可以作为进一步工作的基础。
座右铭:先做容易的,然后逐渐加大难度。
l 喜欢玩复杂。写个复杂的程序并不是什么美德,相反挺让人烦的。用最简单的方式做事情。Occam原则在这里是完全适用的。

3.8 迷失在抽象中
为了体现价值,你的研究工作必须是为了理解智能的某些属性,例如,搜索的控制,知识表示和学习。但是要想取得成功,就必须在具体的情境下抓住抽象的属性,也就是说你必须构建程序来尝试搜索的控制,知识的表示以及学习到的知识。想在抽象中把握问题,只会一事无成,最终失败。

3.9 目标过高,一事无成对最终结果有很高的标准是很正确的,但如果一开始就设置高目标就不大现实,很
有可能根本开始不了。先做简单的事情,然后再应用你的高标准,使之逐渐精炼为有价值的成果。

3.10 方法学并不成为一篇论文
由于人工智能是相对比较年轻的学科,因此从某种意义上讲,其本质上属于交叉学科。人工智能还没有一个普遍接受的研究框架,或者是定义良好的方法学。作为一名人工智能专业的学生,你所面临的的一个困难就是如何形成适合于所研究问题的研究方法。在形成合适的方法学之前,会遇到很多其他的方法学或者哲学观点,其中很多是令人难以容忍的或者容易引起误导的。然而,你会发现这些观点的支持者大有人在,或许就坐在你的邻桌。因此,方法学的形成往往都是在与同行的激烈交锋中形成的。在这种斗争中,你逐渐形成了对人工智能以及相关哲学问题的世界观,体现在你阅读文献,参加研讨会以及其他工作中。在以后的岁月中,这将成为你所信奉的准则,只是偶有些微的改变。但是,当你开始写毕业论文时,或许会感到需要对自己的生活哲学进行扩展。要克制自己——答辩委员会的委员们可不一定全跟你志同道合。对自己所持方法论的假设作简要的总结,对于适当的论点或者框架应给与引用,将自己方法论观点的表达限制在确实有助于理解论文的主旨的范围之内。如果你的观点过于激进,你就可能需要五十页的篇幅来进行阐述,而且总是不那么令人信服。

3.11 发现的过程并不成为理由
在项目实施的过程中,会逐渐对技术问题形成某些看法,有些是新奇的,大多数则是已有概念的复述(或者新的理解)。在论文的描述中,要牢记:支持某个观点、技术的理由,与你是如何相信该观点的过程是不同。读者或答辩委员会的成员很少对后者感兴趣——他们感兴趣的是支持观点的一般论证。如果你开始信服某个观点,很容易认为自己发现的过程就是最好的理由。此时需要你冷静下来,然后对论点给出合理的阐述,特别当你的观点与他人的信仰冲突的时候。

4 心理障碍
如同创作小说、编写戏剧或者绘画这样的创造性劳动一样,从事研究也会碰到心理问题。

4.1 心态
一名研究人员所需要的技能之一就是正确地对待自己的工作。保持心态的一个重要因素是对所做工作的信念。要有一点自豪感!相信自己探讨的问题是重要的,你对问题的解决作出了显著的贡献。否则的话,怎么会有动力伴随你度过漫漫研究之路?获得自信的第一步
是选择自己相信的研究题目(详见小节5)。当然,也不能因此目空一切,听不进去任何批评。要做好一旦发现自己的思路有错立马改正的准备。

4.2 研究中的萎靡不振[1]
缺乏研究上的成功,会让研究者觉得萎靡不振,其实这完全是自我暗示的结果。对自身能力的怀疑,会将自己置身于危险的境地:取得研究成果所需的投入和热情消失得无影无踪。摆脱这种境况的方法是认识到研究能力并非依靠某种神秘的存在,它是可以后天习得的技能。按照这本小册子所说的去做,你也可以做原始创新的研究。

4.3 应对批评
接受批评总是很难的,但这不等于就要对批评置之不理。如果想在研究上取得进步,就必须学会征求批评并认真思考,必须学会区分有用和无用的批评。如果自己实在区分不出来,请朋友帮忙出出主意。如果批评是不合理的,或许是由于误解了你的解释,你能对此作出改进吗?你必须学会承受某些打击:投给期刊的论文被拒绝;被怀疑时的痛苦。此时,要学会微笑面对,不要轻言放弃——君不见,多少著名科学家曾经忍受过难以承受的指责和批评。实际上,有些时候批评和指责的出现完全是因为个人之间的矛盾——每一位科学家都想胜过别人一头。你要把这当作对你的全面考验。

4.4 清晨——冷静地开始
几乎所有的人都发现,很难沉下心来开始每天的工作。但一旦开始了,一切就正常了。解决的方法有两个:
1. 坚持有规律的工作时间,不一定是朝九晚五,但每天必须有一个固定的开工时间。否则,你会发现自己被没完没了的家务琐事缠身。
2. 先做一些吸引人的工作。例如,别一上来就写比较难的部分,可先处理对你来说是小菜的事情或者画个图表什么的。

4.5 定理癖
如果所选择的领域尚无好的研究方法学,你肯定渴望自己创建一个。对于数学家来说,这种渴望就是要证明定理——定理癖。对于工程师来说,就是不停地试来试去。小心!只有那些确实与你的研究相关的定理才是需要证明的。例如,证明某个过程的结果,如果该过程对所做的研究有帮助就是相关的,否则就是不相关的——没什么必要去证明。

4.6 惧怕曝光
有了很好的想法后,需要通过定理证明,编写程序或者解释给朋友听等方法来检验它。但是,有时候不知为什么你停滞不前了,你发现很难开始着手相应的工作。想想看,是不是由于潜意识中对自己的想法可能毫无价值的恐惧所致。艰苦的经验告诉你,问题的解决方法总是在午夜不期而至,黎明时分又消失得无影无踪。拿出点勇气来!研究就是这个样子,向前了十步,又后退了九步。越早地用实验检验自己的想法,就能更早地发现其中的不足和问题。
--

5 选择研究项目
所选择研究项目必须满足如下的标准:
1) 渴望做。
2) 待解决的问题够博士研究水平。
3) 必须是最新的,也就是说三年内都可做。
4) 系里有人愿意指导你。
其中第一条的重要性无论怎么估计都不过分。你需要倾尽自己所有的热情,以便在艰难、孤独且不规范的研究过程中保持动力。选择那些你认为最重要的问题进行研究,选择那些可利用你所擅长的技能的领域,例如,对于数学家来说,具备数学推理的能力,对于语言学家来说,对自然语言的了解。选择那些全新的领域时要小心,很快你就发现自己亟需去学习最基础的东西。
选择好感兴趣的领域或问题后,接下来必须寻找有关的项目。这就是需要导师发挥作用的地方了。在系里从事本领域研究的老师中找一位做导师。他或许可以提供一些项目供你参考,还可以从价值和可行性两方面对你的设想给出意见。总的来说,刚从事研究的学生总是低估项目的价值,高估项目的可行性——即使看起来相当成熟的项目实施起来也是困难多多。所以要认真听取导师的意见,不要选题过大。
请导师建议一些阅读材料。你可以从论文和毕业论文的“进一步的工作”部分找到合适的项目。继续研究别人遗留下的问题是一种很好的研究方法,找一些你觉得做的差劲之极的工作,按照自己认为正确的思路重做一遍。或许你可以简化对方的程序,跟别人的工作联系起来,或者自己开发一个更强大的程序。
要有很多欲待蓬勃而出的想法,并构建研究目标的层次结构。这不仅形成了工作的框架结构,而且在发现(不可避免地)已经有人尝试过更深层次的问题时,可以充当保护网[1]。项目必须避免下列可能导致“坏的”研究的各种情况:研究解决的问题无关轻重,研究没有建立在前人工作的基础上。

6 研究方法论
你必须从众多的研究方法中选一个。很多人开始时会尝试不同的方法,但最终会集成为一种。例如,你或许会首先分析人类绩效的某些方面,然后用他人理论来说明;或许你会理智地重建他人的理论,并寻找出其中的优缺点。“理智的重建”方法总是富有成效的,这也是由于一种令人遗憾的情况经常存在:在发表的论文中,往往对工作是如何实现的以及性能怎么样涉及较多,而对假设和原则的描述则寥寥无几。但是,不管怎么样,首先要寻找一种理论。
下面是方法论的一个例子(由AB提供)。

6.1 阶段1
想象下面这种情形——用所设计程序的输出表明该程序具备建模能力,又如在数学推理中的证明,自然语言中的实例对话以及在视觉领域中的情景识别等。

6.2 阶段2
什么样的理论假设有助于处理上述情形,将该理论假设可能包括的过程和数据结构大体描述出来。要尽量一般性的考虑问题。将所遇到的问题视为一般问题的特例。若非确实与要解决的问题相关,不要使用特殊的处理方法,如果可能,要尽量使用已有的人工智能方法。证明某个问题可用已有的方法解决也是科研成就。

6.3 阶段3
考虑进一步的情况,看看自己规划的解决程序能否处理上述假设,根据假设对解决程序进行约束,泛化,扩展以及调试。

6.4 阶段4
如果觉得自己的解决程序已经足够可靠了,选择一门合适的程序设计语言实现该程序,并根据阶段1-3进行调试。

6.5 阶段5
在一些以前没有考虑到的实例上运行程序。修改自己的程序直到它已经足够健壮——也就是说程序可在很多实例上运行,并且每次有新的输入时并不会可耻的崩溃。

6.6 阶段6
通过运行于某些实例上,对你的程序进行评价。对成功/失败的次数进行统计,并分析每一次失败的原因,并将所有的发现在论文中描述出来。

6.7 阶段7
用与特定实现无关的语言描述你的程序。尝试是否能够引出什么新技术,并与本领域以前的技术进行比较。如果时间允许的话,还应该将你的新技术应用于其他领域。
注意:阶段4和5所花费时间远超出你的想象——以年计——所以要保留足够的时间。

7 写论文
研究论文是我们最主要的产品,是衡量我们个人/研究组进展和成就的准绳。正是由于论文的地位如此重要,你应该将研究生期间的大部分时间用来写论文。写论文是与其他人工智能研究者交流的最主要方式,也是理清和调试自己思路的好方法。书、毕业论文和期刊论文,不仅厚度不同,写作的方式也有差别。首先要分清楚本系对论文的区分,详情可参考系里的第8号通知。下面给出的是非正式的说明,不一定反映最新的情况。
首先应该将写作作为日程生活的一部分。将自己所作的每一件事情都记录下来:自己的思路,程序文档,讲座笔记,论文笔记。这有几个目的:辅助记忆(你会惊奇于自己忘得如此之快),理清思路(你会经常发现当自己试图把某件事情解释给自己或者他人听时,问题出现了或者被解决了)和作为写技术论文的起点。要确保自己记录的清楚以方便日后阅读,还要保证归档正确以便日后查找。我个人发现,将笔记输入计算机是很有效的(为此,你应该学学troff,LaTeX——或者不大常见的——TeX)。

7.1 研究论文
指提交给期刊、会议以及书籍发表的论文。其他类型的论文在提交之后也可以归于这一类。这种规定鼓励本系师生在外面发表系里的研究工作,并为其他研究者提供了论文的预先拷贝。

7.2 教学论文(以前叫做特殊场合的论文)是指那些教学材料,例如,讲课笔记,程序设计初步指南等等。

7.3 软件论文(以前叫做技术论文)
指与系里开发的软件有关的文档,如程序设计初步指南[1],手册和编辑工具等。还包括对本系创建的特别软/硬件的描述,例如,LOGO tutle以及机器人等。

7.4 研讨论文
指用于内部交流和讨论的论文,也包括学生项目和论文计划。

7.5 工作论文
这是对研究工作的描述,包括已经完成的以及正在实施的。此时,不要害怕展示尚未成熟的想法。应该养成将自己的思路写成一篇工作论文的习惯。如果你的思路不清楚,很快就会有人给你指出来并提供更好的想。

7.6 出版论文
论文在内部出版之前必须经过导师的同意。当你和导师都认为有值得在外部发表的地方时,应提交给期刊。从在第11小节所列出的列表中选择一家期刊。在准备发表论文时,要牢记所有对论文有贡献的人都得到了应有的承认,例如,你的导师,以及任何对思路的形成作出贡献的人,还有那些曾评论过论文草稿的人,等等如果某个人的贡献相当明显(例如你的导师的帮助),可考虑是否需要联合署名。记得对自己获得的支持表示感谢。
如果有些地方把握不准,去找导师讨论。
一般会把交论文的数份拷贝投给期刊,然后期刊编辑会将之转送给几位审稿人评审。如果被拒绝了,也不要过于闷闷不乐——高兴一点。仔细阅读审稿人的评论。他们说得对还是他们误解了你?选择的期刊适合发表你的论文吗?投稿被拒绝后,可以考虑转投其它的期刊,但首先要认真考虑自己认为正确的那些评审意见。

7.7 会议论文
会议论文,与期刊论文相比,地位要次要一些。会议经常考虑的是工作进展的描述。会议论文通常也会像期刊论文那样送交评审。会议论文和在会议上口头发言都有长度的限制(从5-15页,10-30分钟),因此一定要精心准备。在会议上报告自己的论文是很有价值的:可以从比平时更多的听众那里得到反馈;你更有机会与大人物碰面,更容易申请基金资助。[Booth75]是非常好的有关科学论文的风格和陈述的指南,可以从[Parsons73]中找到有关如何写毕业论文的有用信息。所有这些文档均可在Forrest Hill图书馆中找到。

8 写作指南
在研究项目实施的过程中,需要写很多文档:论文计划和论文大纲,研究笔记,论文的读后感,会议论文和期刊论文以及最后要完成的毕业论文。写期刊论文、会议论文和毕业论文的标准并不高,但却是三种论文被拒的主要原因。毕业论文写得糟糕虽不一定意味着完全失败,但是一遍又一遍的重写和送审会让你感到精疲力竭。写作能力欠佳还会使得他人很难理解你的工作。因此,良好写作能力的培养是非常重要的。本小节描述了提高写作能力的诀窍和规则,不会再有比这更全面的见解了。有关写作技术报告的详细信息,请参考[Cooper64];面对大批听众,如何用直白的英文表达自己的思想,可参考[Orwell68]。良好写作能力的培养并无什么快捷之道,下面要提到的这些规则也不难。但是请注意:如果在写作过程中,您老人家想打破下面提及的某条规则,一定要有合理的理由,还要三思而后行。例如,你想用术语将基金委员会给镇住,而不想让他们知道实际上你没取得什么成就。
l 论文必须是具有信息含量的,也就是说,得有自己的观点,且能被自己的研究所证明。
首先要自己明白论文想要传达的信息是什么。在纸上用几句话将之总结出来,或者讲给朋友听。所持观点在标题,摘要,简介,结论以及论文结构中要有所反映。
l 仅仅使自己的论文可被理解是不够的——还必须以一种不会被错误理解的方式进行表达。确保所有的关键点都被清楚地、显著地和经常地表达。不要在一个句子里包含几个关键点。不要假定某个关键点非常明显而无需说明。说出自己想说的,说出来,再把刚才说过的重复一遍。
l 不要试图在一篇论文中把所有的问题都说清楚。坚持主要的观点,只有与此本质上相关的内容才包含在内。将其他的问题留给下一篇论文。读者应可以从论文的第一页中就把握住论文的主旨。冗长而散漫的简介应该被无情地裁减。
l 科学论文的基本框架是:问题是什么,你是怎样解决的,得到了什么结果。
l 为了使论文的技术标准保持统一,写作时,脑海中应有一个假想的目标读者。
l 写论文并不一定要从头按部就班地顺序写下来。特别是简介部分,当你搞
清楚了要得到的结论后,这部分是很容易写的。因此,写论文时,首先描述中心思想,例如,主要的技术、过程和证明。然后再思考读者要理解该中心思想必须知道些什么,然后将这些信息放在简介部分或者章节中。
l 可用实际例子来阐明某个过程,但这不可以取代对过程的正式描述。
l 清楚地说明自己完成的工作中哪些是创新的,哪些是效果更好的。将之与相近的工作作清晰的比较。
l 如果发现自己屡次用很长的名词词组代表某个实体或者思想,这说明你需要定义一个新的术语了。除非真的需要,不要定义新的术语。
l 学会使用键盘(所有9个手指),屏幕编辑器,字处理器和拼写检查器。
将自己的论文(直接,或者根据笔记,或者根据手稿)输入到计算机中。这样,在修改校对的时候会节省时间。最终的论文必须经过拼写检查器的检查。
l 请几个人看看你的论文草稿。考虑花时间将他们的意见融合到正文中去。
如果他们读不懂,那是你的问题,而不是他们的问题。还没有考虑别人的意见就要求人家重新读你的论文是很失礼的行为。毕业论文的草稿必须经过导师的审阅,可能还有内部评审者的检查,一般不会给外部的评审者检查。
下面的内容与所有类型的写作都有关,但主要是关于毕业论文写作的。
l 毕业论文不应该是你知道的有关该论题的所有材料的堆砌。相反,论文应该有一个中心论点,你必须仔细考虑论文的每一部分对该论点的作用有多大。要记住毕业论文的写作并不是专门针对答辩委员会成员的。你应把毕业论文的写作当作在对后来研究者作陈述。如果论文布局恰当合理,论点清楚,他们会击节赞赏的。还要考虑到你写论文时和别人读论文时的知识状态是不一样的,因此论文中的材料必须足够详细,以避免因此对别人的阅读造成困扰。还有一点应该牢记心中,全世界的研究者(至少潜意识地)会根据你的工作判断你所在院校和系所的研究水平。即使你不这样认为,答辩委员会也会这样认为——所以你也必须这样认为。
l 你可以自顶向下,自底向上或者双向的写自己的毕业论文。自顶向下,意味着你从笔记开始,然后逐渐将之解释成论文的章节。自底向上,你首先描述自己工作的各个方面,然后将之集成为一篇毕业论文。单独使用上述方法的一种都不会特别成功。自顶向下有时不怎么起作用,因为在解释的同时,你对于已完成工作的看法也在改变。而自底向上,会变成互不相关片段的大杂烩。因此,将两种方法结合起来更有效。
l 在做研究的过程中,你应将自己的思路和结果写成一系列的笔记和工作论文。其中的部分论文具备了在期刊或者会议上发表的水平。将这些笔记和论文集成为一个文件(纸质的或者电磁的),这就是毕业论文。这属于自底向上的工作,接下来是自顶向下的工作。
l 提炼出毕业论文的论点,应具有下面的特性:
— 论点有几句话组成,也就是说跟摘要的长度差不多。
— 这些句子形成了论点的每一步。
— 每一句话都应概述了论文的某一部分(大概是一章)的内容。
— 论点对于确定论文的标题,摘要,总结,结论和整体都起指导性的作用。

l 论文论点将在下面几方面发挥作用:
— 确保论文的各部分以一致的方式集成在一起。它还表明了应如何将不同的笔记和论文重新组织成为毕业论文。
— 它能够回答诸如 “我已经完成了什么工作?”和“为什么这些工作配得上所授予的学位?” 这样的问题。此时,你应该已经对摘要,介绍,结论和标题等部分的重点已经很清楚了。
— 他能回答诸如“在‘进一步工作’中应讨论什么?”这样的问题。实际上,你必须精确地知道每一章在整体中起的作用是什么,也就是说,想证明什么。
l 论文论点很简短,且容易编辑。你可以不停地对之进行调整,直到有令人惊喜地发现。
l 现在又要回到自底向上的活动了——重些已有的材料,写作新的材料,才满足论点的需要。
为了能对上面的描述有所体会,这里给出一个例子,著名人工智能研究者Fr. Aloysius Hacker的博士论。
实例
"The Computational Modelling of Religious Concepts" by Fr. Aloysius Hacker
1) 我们用计算机中的思想来理解宗教概念。
2) 以前对宗教概念的解释,例如神圣的三位一体和圣迹,经常遇到哲学问题。
3) 由于缺乏合适的术语学而导致了问题的出现。计算性的术语学经常提供了一种合适的近似。
4) 虽然有一些问题仍然存在,例如,自由意愿。
5) 我们看到了一种新的可计算的神学正在出现。
上述五点中的每一点都对应论文中的一或者两章。
第一章介绍了计算机建模的一般概念,通过计算性的概念与宗教概念之间的类比,反映了宗教地位之间的因果关系和非因果关系,从而成功地将计算机建模应用于宗教中。并因此纠正了持续了两千多年的一些理论争论。
第二章描述的是“相关工作”,综述了很多有关有争议的概念(例如,神圣的三位一体,圣迹)的理论见解,并指出了这些见解之间内在的矛盾。
第三、四章是毕业论文的核心。第三章将三位一体与三重递归函数进行了类比,并以此来解决上帝同时是一个和三个实体的哲学难题。
第四章进一步扩展了这种类比,将宇宙看作一份程序,上帝是程序员,圣迹被看作程序被中断时插入的运行时修补程序。
第五章是“进一步的工作”。突出存在的问题被指出来,即对自由意愿问题的讨论,以及可能的计算性说明。
第六章是结论部分。总结了得到的结果,以及计算性方法揭示宗教问题的成功之处。这些工作表明,一种重要而新颖的神学研究方法已经初见端倪。

9 阅读指南
紧密地跟踪相关研究是获得博士学位的最主要的子目标之一。系里曾召开的“研究困难”会议上曾就阅读习惯提出了一些难点问题,引述如下:
“阅读是很困难的:随着学术进展的不同,研究者所面对的困难也不同。开始时不知道读什么(很多文档没出版),后来被阅读吸引住了,并成为逃避实际研究的借口。最后研究者失去了持续阅读所需要的时间和耐心(有时还害怕发现别人的工作远比自己的出色)”。很显然,除了阅读,还有很多方法保持对相关研究的跟踪,但也同样存在类似的问题。一名研究者必须学会在学习他人的工作和推进自己的工作之间保持适度的平衡。
可把他人的研究按照与自己研究相关程度的不同,安排在不同的同心圆上,越往外相关程度越低。例如,如果你正在研究首语重复法引用的查找,那么内圈应该由与首语重复法相关的工作组成,中圈由自然语言理解和计算语义学的研究组成,外圈由人工智能和语义学的研究组成。还可以尝试增加其他的外圈。很明显,对于外圈研究的跟踪所花时间应该比内圈的少,所以对于不同的圈,应采用不同的学习技术。

9.1 外圈
可通过快速浏览或者阅读论文摘要来保持对外圈研究工作的适度了解。最近人工智能论文的摘要写作水平有所提高。在 11.4部分包含了出版AI摘要的出版商和期刊列表。
每周抽出一个钟头的时间去图书馆快速浏览最新到的期刊,是个不错的主意。另外一种快速获取信息的方法是参加会议时同时参见短时间的陈述和长时间的教程性质的报告。跟别人在咖啡屋里或者走廊上就他们的最新思想作简短交谈也是很有价值的。有关AI的背景知识可在一般性质的课本中找到,例如,[Boden77],[Winston77],[Bundy78]。当然,上述材料都是很基础的讲稿。

9.2 中圈
此时你应该花更多的时间。上面提到的那些方法仍然适用,但还不够——你还需要从头到尾阅读某些论文,进行时间更长的交谈。你要阅读一些更专门的课本和参加研讨会等等。保持已读论文的完整记录,并对之作出一些评论,否则,随着记忆的模糊,曾经的一些体会和教益也会随之消散。有些人觉得此时索引卡片很有用。

9.3 内圈
要深刻地理解论文,只读一遍是不行的。你必须读几遍,而且要深入进去。看懂所有的例子,并做一些练习。跟作者取得联系。就某些问题和/或批评意见,跟作者交谈或者写信。要深刻的了解某项工作,最具价值的方法是教给别人。做一场报告,无论是正式的还是非正式的。自己经常使用的论文一定要手持一份拷贝,如果没有,去复印一份。
读论文时你会发现:如果脑海中一直有一个希望论文回答的问题,那么对论文的理解会更深刻。具体的问题取决于当时的情况,可能是这个样子:“在我的程序中能够该技术吗?”“他是如何解决X问题的?”“这作为一篇期刊论文合格吗?”“在讨论时我应该如何表达该思想?”
最后不要害怕自己因为所提的问题显得那么无知。每个人都对自己无知的领域很敏感。人工智能是一门交叉学科,所以我们肯定都有很多无知的地方。人们都很喜欢回答问题——这会让他觉得自己很重要。与对某项工作比较了解的人一起讨论,比自己一个人读论文的收获往往更多。

10 毕业论文的评审
当你的毕业论文历经数稿,导师终于对之表示满意后,就可以准备提交论文了。通知系办说你准备提交毕业论文。要保证自己的论文符合系里面的有关规定。将一式两份的毕业论文送到系办。
你的导师和系主任将选择合适的本系和外单位的评审委员,他们或许会非正式地与你商议评审委员的名单。当所有的评审委员都评审完了——可能需要数月的时间——本系的评审委员负责安排一场所有评审委员都参加的答辩。
答辩是你与答辩委员们之间的问答对话,要持续数个小时。你的导师可以作为旁观者参加,这取决于答辩委员会是否同意。答辩通常在系里的某间办公室中举行。在答辩举行的那天,有些外单位的评审委员(可能还有你)需要从外地赶来。穿着为正常的上班装即可,答辩的气氛是比较轻松的。如果能让你觉得更自在,可以稍微精心打扮一下。
在答辩之前和之后,答辩委员会都要向系里提交报告。答辩后的报告是答辩委员会联合签署的,包含了对论文的最终意见。结论通常为下列所列之一:
1) 完全接受。
2) 接受,需要些微修改。
3) 接受论文,但答辩不通过,将对答辩人作进一步考察。
4) 考虑延长期限,重新提交论文。
5) 考虑将博士学位降低为硕士学位。
6) 拒绝。
第1,3,6种结论是很少见的。你将被非正式地告知最终的结论,该结论理论上存在被系里或者学校的学术委员会推翻的可能(但此前尚未发生过)。
第2种结论允许纠正论文中存在的排版和拼写错误,小部分需要重写等等。你应在原有论文的拷贝上修改,如果需要,可以往上 程乱场1 系的评审委员将就论文是否已经完全改过了进行检查,然后会通知负责处理你的论文的教师,并通知你最终的结论。这可能需要数个月的时间。第4种结论要求论文被全部重写,有时还需要作进一步的研究。你必须重写,重新联系,重新提交毕业论文,跟同样的答辩委员会再重复一次答辩的过程。这是你最后的机会。第二次答辩已经不可能得出第4种和第5种结论了。
第5种结论是针对那些被认为是不适合获得博士学位者的,但又觉得可以授予硕士学位。这并不应该被看作是一个安慰奖。有时候需要进一步的研究和重写。你需要重新装订论文(用硕士论文的封面!),重新提交,通过由与上次不同的委员们组成的答辩委员会组织的答辩。
答辩的目的是让答辩委员会认为该毕业论文具有博士/硕士水平。特别是答辩委员会的委员们将在他们的答辩前报告里对论文提出各种疑问,这些疑问在答辩的过程中必须得到解答,必须够在答辩后的报告中不再提及。如果答辩后报告仍然存在疑问,系里在授予学位时不会不考虑他们的意见。
答辩委员们会就他们的疑问进行提问,希望得到满意的解释。由于时间的限制,通常先从最严重的和/或最一般的问题开始。例如,他们可能会首先要求你用自己的话总结出你认为自己论文最关键的贡献是什么。因此,要预先要为此准备一个简明扼要的答案。你还可以和导师一起,预想一下可能会被问到的其他问题。不过一般来说,你最担心的问题已经在论文中得到充分的说明,所以实际答辩时被问到的问题往往出乎你的意料。这样,答辩的头一天晚上最好睡个好觉,答辩的时候才能保持活力和警醒,这可比你一遍又一遍这可比你一遍又一遍的练习回答并不会被提问的问题强啊。不要在那儿不知所云地回答问题。注意答辩委员们的问题和说明,给出简明而中肯的回答。如果答辩委员们认为你对所研究领域的问题有一致和高水平的理解,他们将倾向于授予你学位,即使论文中有一些小失误。
答辩有点像调试程序。毕业论文就是程序,你就是程序员,博士/硕士标准是语言语法,答辩委员会是解释器。在答辩过程中,你得到了不同的错误信息。这些信息不一定全是真的——有可能是由于误解——但都必须认真对待。假设每一条错误信息都会使得你的论文作一处修改。当然,你希望只需要小的修改,但是让这种期望蒙蔽了自己而忽略了问题可能是更基础的。不要冒犯答辩委员们。你不可能靠大棒或者甜言蜜语通过答辩,恰如你不可能通过强力或者说服让计算机执行带有BUG的程序一样。你要做的是:理清自己的思路,消除你跟答辩委员会之间的误解,要保证自己已经知道如何修改自己的论文,那就去修改吧。答辩是一个合作的过程,答辩委员会是想让你过的,因此应该给他们所需要的所有帮助

2006年11月6日

[收藏]关于读博士的一些感想

From:
http://users.ir-lab.org/~tliu/blog/archives/001452.html

虽然还不是博导,不知不觉中门下已有10位博士生,深感责任之重大,战战兢兢,唯恐误人子弟。最近在学校的BBS上博士生们对学校对导师颇有微词,纷纷诉说读博士的艰辛,我也想谈一谈我最近对博士生培养问题的思考。

读博士确实很不容易,我1995年到1998年在哈工大计算机学院读博士,当时的条件比较艰苦,我的导师已经处于退休返聘状态,而且常去香港做客座,实验室里总共3-4个学生,没有研讨的环境,硬件设备多年不曾更新,我在毕业时使用的仍然是一台386,实验室不提供上网环境,查资料需要到北图,去一次背回来一堆资料,偶尔从别的实验室搞到一点国外比较新的会议论文集,如获至宝。我读博士的最后阶段在我的记忆中绝非愉快的经历,当时我已经结婚,微薄的收入让人感到拮据,等待论文录用通知的焦急心情和整理最终博士论文的莫名压力都是很折磨人的,亲戚朋友时常询问我何时毕业,询问中满含同情,因为他们觉得我似乎半辈子都已经花在读书上了,成天忙得昏天黑地确实可怜。

现在的博士生们和我当年相比,有一些苦恼增加了,比如毕业论文的要求升高了,而国内一级刊物的录用难度比我们当年还大;也有一些苦恼减轻了,比如有了互联网,查资料太方便了,而且可以请教网络上的高手,包括直接和国外的学者交流。还有不少苦恼没有变:贫穷(和已经参加工作的同学相比),迷茫(包括对研究工作的迷茫和对未来出路的迷茫),失落(获得的尊严暂时和自己的年龄与能力不相称)。

读博士这么苦,为什么还要读博士呢?在博士生中间,读博士的动机差别是很大的:有的人为了拿一个学位将来好在高校里继续当老师,在职博士大多是这种想法;有的人是为了换专业,从机械等不太热门的专业或者自己不喜欢的专业拿到硕士学位后开始读计算机的博士;有的人是要换学校,本科硕士阶段哈工大一直是自己的梦想,读博士终于实现了自己的梦想,能不能读下来暂且不论,能进入哈工大的门槛就是胜利;有的人是为了父母读博士,往往工大自己的子弟有这种倾向,父母望子成龙,儿女肩负父母的期望走上了读博士的道路;有的人读博士的目标比较模糊,是靠着一种惯性,如同入队入团入党一样稀里糊涂地读完硕士就读上了博士。最后一种,凤毛麟角的,是喜欢研究,也善于从事科研工作的,这样的人只要不受别人抱怨之声的影响,是可以很顺利地比较愉快地拿到博士学位的。

硕士入学难,毕业容易,是人人可读的。博士则不同,它需要你调动多年积累的全部知识和技能,在学习期间针对某一课题,往往是人类不曾解决的具有充分挑战性的课题独立思考解决方案,在完成课题的同时实现自身能力的全面飞跃。搞研究的人必须是聪明人,有的同学的确笨一些,思维不够灵活,不能触类旁通,这种只下笨功夫的人读硕士做工程没有问题,读博士就比较难了,要产生质的提高,是需要一定的先天资质的;有的同学基础太弱,写一篇文章逻辑不清楚,语句不通顺,文字全是网络语言,错字连篇格式混乱,英语阅读困难,口语更困难,数学基础不好,计算机算法知识不扎实等等,如果你有一两项短腿可以在博士期间弥补,但如果多项短腿,到博士阶段再补确实有点来不及了。有的同学天性好动,就是坐不住板凳,他们善于交际,杂事很多,心总是静不下来,他们应该去做行政,做管理,做市场,如果强行改变天性做研究是不明智的。

因此,我劝博士生同学们,首先要想一想自己的动机是什么,自己的基础怎么样,博士是培养高层次的科研人才的,不要把它看成一个人人都应该得到,都能够得到的美丽光环,应该把它看成多条人生道路中的一种,对照自己的条件冷静地判断自己是否适合读博士。如果自觉不适合,我建议同学们不要读,已经读上的如果时间还不长应该果断退学,想开了没有什么丢人的,美好的生活可能正在等待着你,青春不用浪费自己不喜欢,也不适合的工作中。

同学们对导师的抱怨较多,目前学术精湛,又有很多时间和你一起讨论的导师实在太少了。现在的老师们压力也非常大,故意偷懒不指导学生的导师或许有,我还没有见到,大多数导师太忙了,他们要忙着跑课题,干课题,验收课题,忙着管理实验室的杂务,忙着参加大大小小的答辩会,忙着讲课,很多老师身体透支,实在没有太多的时间和学生们经常研讨,特别是近年来博士生扩招,每个导师平均带10个以上的博士生,这个比例就决定了导师无法充分地指导学生。另一方面,由于导师太忙,或者说被迫地瞎忙,导师的水平不断下滑,尤其是在计算机这种发展速度很快的学科中更是如此,部分导师只知道一些宏观的概念,而不了解研究的细节,他们脱离了研究第一线,抓不到博士生的痛点,实在是想帮忙也帮不上。因此,我看选导师能够选到学风正派,真心培养学生,能够为学生创造各种研讨和学习的环境,在博士二年级后能够主要让学生做一些基金项目而不是一味干工程的导师就不错了,不必苛求。导师指导的不充分有的时候也是一种有利的因素,在这种条件下确实有利于培养独立思考,独立解决问题的能力,这样的学生真得到博士学位了,比倍受导师关照的学生更有独立工作能力。读博士关键靠自己,我想国外也强不到哪里去,我认识一个MIT的博士生,导师是大名鼎鼎的乔姆斯基,也就是一个学期师生见一面聊一聊。国外的名导师的长处是对国际上的研究动态更敏感,能帮助学生认识更多的国际学者。

很多同学抱怨学校学院对论文的要求太高了。高和低都是相对而言的,相对我们学院目前的博士生培养能力和生源质量来说确实高了,比如有的老师自己都不曾在国际期刊上发表过论文,而要求学生在国际期刊上发表论文,当然困难了。学院提高毕业门槛的初衷是好的,是要保证哈工大博士的质量,但是目前毕业周期太长,很多优秀的硕士毕业生不在本院读博士了,很多外校外专业的同学考进来,这些同学的基础弱一些,需要先花1-2年补基础,这样毕业时间就更长,整体毕业时间越长,大家越是不敢赌博士了,生源就越差,久而久之有形成恶性循环的趋势。其实,对于很多优秀的计算机专业硕士来说,如果他们读博士的话,即使是现在的毕业标准,他们也能够在3-4年达到,特别是硕士博士在同一个研究方向上工作的同学更是如此。

最后我想强调的是对科研的兴趣,兴趣增长的地方,压力就会被化解。我读本科的时候对计算机一点兴趣也没有,苦闷得很,后来我在家里的墙上贴满计算机的图片,天天暗示自己喜欢计算机,那时没有充分的上机时间,恰好我父亲借给我一台PC1500,比计算器大不了多少,只能编写BASIC程序,我就成天玩,还用它编写了俄罗斯方块让我母亲玩,从那时开始对计算机真正有了兴趣,那已经是大学三年级了。硕士一年级的时候我在PC机上写程序,由于对汉字系统不熟悉,我也不喜欢问别人,有2-3个月的时间,我一个人在实验室里苦苦捉摸,摸不着门径,常常死机,但是兴趣非常足,后来不知什么时候就通了,那时的日子真的很快乐。从我的经验上看,研究的兴趣一定是可以培养的,总想着毕业这个目标是不行的,好好体会研究的乐趣,象猜谜一样提出你的见解,如果验证结果是对的,成就感会是对你的辛苦的最好补偿。除了研究本身的乐趣外,开学术会议的乐趣也是非常大的,会议往往在倚山傍海风景如画的地方举行,喝着咖啡,和慕名已久的学者们切磋一下学术是多么惬意的事情啊。

啰里啰唆,感慨不少,读博士是苦的,先想想有没有必要吃着份苦,如果你的确有志于此,请你甘受其苦,苦中作乐吧。

[收藏]读博士与坐牢的惊人相似

1.都是因为一时糊涂或一时冲动,亦或是对于名利财富的贪婪欲望,错误的选择了这条道路
2.进来先接受教育
3.所有人都分在不同的组或队:读博叫课题组,监狱叫监区或大队
4.必须参与劳动:读博是脑力的(当然也有体力活),监狱是体力的,报酬当然是极少的,基本都是勉强糊口
5.里面的人都只有一个目的:早点出去
6.在里面表现好的才可以早出去,当然是极少数:读博叫提前毕业,监狱叫减刑;表现一般的就只有:读博叫按期毕业,监狱叫刑满释放;表现差的只好:读博的叫延期,监狱叫加刑
7.在里面的日子也有不同,读博的如果能遇上个好导师,坐牢的如果能遇到个好管教,生活可能会好过些。反之就要加倍痛苦了
8.中间会有比较猛的家伙实在熬不住了:读博的就直接退学了,坐牢的就越狱了
9.但大多数人只好在里面挨着了,盼望着那天早点到来
10.出去那天的场面是感人的,都要热泪盈眶,迫不及待的冲出去呼吸外面新鲜的空气
11.可好景不长,出去一段时间才发现,在里面待的时间太久,已经与社会脱节,出来后什么都干不了。
12.很多人重操久业了:读博的去申请博士后,坐牢的继续违法犯罪

2006年11月5日

[收藏]也谈”读博士干啥“?

也谈“读博士干啥”?
---------------宇·凡
首先,谈谈为什么要读博?

1、如果你压根就没想好这个问题,完全是随波逐流,或者证明自己是一个"好学生",或者认为考博可以带来生活的翻天复地的变化,或者认为读博就是混个学位,为了以后好提升,那么,请你谨慎考虑。

首先,博士并不一定意味着高收入。收入更多的是与行业与职位相关,而不是与学位相关的。

其次,既便为了想进高校而读博,也要事先考虑一下是不是喜欢那种生活方式,能否接受那种清苦?能不能坐冷板凳?不然,高校的日子也不好过,竞争一样激烈。而考博只不过是"多米诺骨牌"的第一个环节。等你博士毕业之后,不继续自己的科研,可是又已经付出那么多青春、热情和心血,放弃是否舍得?如果继续从事科研,就要考虑自己是否热爱这种寂寞的无人喝彩的工作,并且身边都是精英,你能否承受那种压力?要知道,真正的名专家名学者毕竟是少数,大多数人是要默默无闻、平平淡淡过一生的。你也可以有更好的未来,但那意味着加倍的付出和努力。

2、如果已经想好了,比如就是为了提高自己的科研能力,扩大自己的知识面,或者仅仅是体验一下这种生活,或者证明一下自己,或者临时没有更好的出路,想过渡一下,或者干脆就是喜欢从事科研,那么,无论任何理由,只要是坚定的,能说服自己的,那么你就可以选择自己的活法。祝贺你,你就可以尝试。

接下来,我们看一下读博士可能需要什么?

1、高智商就不要说了,还要有高的情商。这样才能保证自己高处能胜寒,或者寂寞的时候依然美丽着。

但凡读到博士的人,总是一些人群中的佼佼者。要么是绝顶聪明,要么是极端有毅力,要么就是非常灵活,总之,可谓八仙过海、各显神通。我在读博期间的感受之一就是,周围的人的确不简单,都有令人非常佩服的一面,可能再"混"日子的人,跟一般人相比也有一份自律和坚持。所以这是一个可以相互约束、相互见证、共同进步的群体。高智商基本是读博的第一要素。

但是不要以为光有高智商就有好的生活。高情商也很重要,比如你要经常想一下自己是什么样的人?想过和适合过什么样的生活?你怎样让自己在纷繁的乱世中保持一份清醒,远离物质诱惑?你怎样让自己保持快乐?因为,的确是有一些人没想好就进来了,所以学得很累,日子过得很牵强,时不时可能还觉得"活着没劲"。如果这样的话,倒不如及早融入社会洪流更让你能安静下来。既能出世也能入世是最好的,如果压根做不到出世,就绝对入世一些,让自己实际"生活"起来,也就运转自如了。

因为如果没有高情商,那么读博不但可能不会给你带来更多的快乐,而且会带来很多负累。因为你可能会跟社会上的人比物质,跟潜心做学问的人比成果,跟那些滋润的"小家庭"比幸福,等等。那就比较麻烦。因为老天爷毕竟不会把所有的好事都给一个人。你得到了一些,就要坦然面对可能因此失去的。

2、读博需要有点毅力,沉得住气,至少一段时间内是这样。

读博可不是说着玩的。如果只是想混混,也不是那么好混的。现在的毕业论文盲审制度,还是能卡住不少没下功夫或者功夫下得不到,或者下了功夫但没下到当处的人的。而且,平时博士还有论文发表的数量和档次的要求,动不动就是国家核心期刊几篇,理工科的可能还需要在国际刊物上发表。虽然大多数博士都完成任务,拿到了学位,但那是付出了很多焦虑、睡不着觉、掉头发等等代价的。当然,视个人天资和基础不同,可能各有差异,但不努力就可以完成任务的还真没听说过。

平时上课、读书的要求就不要说了。为了完成博士论文,或者在那样一个氛围中,为了自己至少像个博士,理工科的人要无数次地做实验,甚至通宵达旦,而文科的学生则要天天泡在书堆里,基本上3年下来,看小说的时间是没有的。大家都比较训练有素,就是自己浪费了时间会自责。所以为了逃避自责的痛苦和外在的压力,大家一般还是要选择一点点的去面对和积累。没有点做冷板凳的功夫是不行的,至少在一段时间内是这样。

博士同学中已经是硕导的,在博士论文的冲刺阶段,也会形容枯槁,也有老师们形容"做完博士论文就像扒层皮",毕竟抛却客观要求不说,就自身而言,大家也知道专心在学校搞点研究不容易,所以基本上博士论文就是一段时间内的最高水平。何况博士论文的最高要求,也是最基本的,就是"创新"。这两个字,可是会把人折磨坏的。结果是,做博士论文的时候,大多数同学都"自然减肥"。一个抱着侥幸心理,本来以为混混就可以过关的同学,在博士论文写完之后,说了这样一句深刻的推翻自己以前逻辑的话——"以后,谁要再说博士是混出来的,我跟他急!

接下来看一下读博可能带来的一些负面影响。

1、读博可能会改变一个人的生活节奏和轨迹。比如恋爱、婚姻和家庭。

说这个好象是废话。但是我们可以算笔账,一个人中间一直不停地读书,等博士毕业也是接近30的人了。这时候的社会工作经验还可能是零。如果不是足够幸运地在读书期间遇到合适的另一半并且已经成家的话,那么就要在毕业之后不但面临找工作,适应新环境的问题,也要面对建立一个小家,适应婚姻和家庭的问题,还要考虑是先在工作上干出点成绩还是抓紧要孩子的问题。这时候大多数小家庭都是无产阶级,可能早先也有很大一部分人是有了一定的工作、家庭、孩子之后又去读博的,这种辛苦就不要说了。面对家庭和自己的前途之间的不调和,需要自己判断、选择。有时候,有所选择是痛苦的。所以有很多人说,早知如此,宁愿不要选择的机会。可是时光是无法倒流的。校园里有不少带着孩子读书的母亲,有的将孩子放在周边的幼儿园或者学校里,自己面对多重压力,孩子也跟着受苦。精力、财力和爱心、责任之间的冲突和压力,让很多母亲说:"等我拿到学位的那一天,我可能最想做的就是找个没人的地方大哭一场。"

有的时候,鱼和熊掌的确不可得兼,这是事实。所以大多数博士在毕业后都会多多少少有些尴尬,来自情感的、家庭的、工作的,等等。

2、读博可能会加重取舍之间的难度。

有人认为,读完博士,工作等等可选择的余地更大了。实际上不是这样的。博士阶段着重培养的是在某一领域具有独立进行研究和解决问题的能力的人。它不是一个通才教育,只会将人的研究领域和学习领域越限越窄。所以,除非是在高校或做科研,不然,博士并不是最好的选择。

而且,读博可能多多少少还会产生这样的效应,就是你在长期的研究和投入中已经多多少少对这些研究产生兴趣。明知继续研究可能热情和动力不足,但是放弃却着实可惜,那时该怎么办?其实周围很多同学都是这样的。最后选择的未必是最初想选择的生活道路。我学的是文科,我的很多同学,本来想进新闻媒体,或者出版单位,或者机关等等,机会并不是没有,但是真正抉择的时候,却又割舍不下对专业培养起来的感情,最终继续选了高校进行教学科研,也有的虽然进了新闻出版,却做的并不开心,有点后悔的意思。不得不搞学术的时候不觉得热爱,反倒是真正离开了觉得自己"还是有点"喜欢学术的。这是一种悖论。会带来很多困惑和尴尬,这些问题的解决需要智慧、对自己的了解,还需要决断能力。一旦上了这贼船就必须面对,由不得你了。

说了这些,有人可能退缩了,觉得后脊梁骨嗖嗖发凉。其实,运用最简单的逻辑想想,如果真的读博就像地狱,哪还有现在的趋之若骛呢?不否认有一些头脑发昏,没想明白就混进来的人,但是一定也是有人是真正考虑好了并认可这种方式的。权且说其一二个读博士的好处:

1、读博是人的一种生活方式,而且很奢侈,不是每个人都可以享受的。

相比于钱来说,读博的机会显得更是一种稀缺资源。有机会读博的人可能不觉得,但是有很多人是压根没有机会考虑和尝试的,他们的羡慕和憧憬可能不是你读博的理由,但是至少有一点是肯定的,你可以体会跟别人不一样的人生。这也是一种生活方式。而且这种生活体验是非常奢侈的,有限的,难得的,所以自然也是有价值的有意义的。如果说有人选择冒险、挑战生命极限是一种生活方式,那么读博也是。读博完成和实现的是一种精神追求。享受这种方式本身就是一种经历、一种财富、一种收获。

有一个同事,我在博客中提到过的,海归,放弃了原来在外企的高薪工作,跑到国外读博士,最后回到高校。就是因为她觉得在外企的工作,使人变得没有时间思考,人像机器。所以为了进高校,她选择了读博并为这个目标奋斗了10几年。她说,人是要有点追求的。斯夫!当人们解决了基本的生存问题之后,对精神的渴望和寄托就会浮出水面,而读博是使人更接近思想本身的一种方式。

2、读博可以有机会接近和聆听大师的声音,并与最聪明的人相处。想不提高都难!

有博士点的地方,大都是师资力量相当强的地方,各种资源也很多。读博士可以使人轻而易举地就接近原来只闻其名、不见其人的一些大家,聆听他们在学术、做人等等方面的一些感受和教诲。这将是受益终生的。这种视界的打开和融合对一个人的提升来说至关重要。因为这些学者的点拨,可能会使人少走很多弯路,并在一些领域迅速接近国内或国外同行。某种意义上,这有"鲤鱼跳龙门"之效。特别是在一些综合性的名牌大学,这种优势就更加明显。用原来硕导的话说:"就像从省队进了国家队"。各种讲座、交流以及图书等等资源,使人进步飞快。

再说周围的同学,都是来自各地的人中龙凤。依我的经验,每个读到博士的人,都是有一些品质可能是一般的老百姓没有的,比如那种悟性、那种天资、那种刻苦、那种执着、那种毅力,等等。所以,与这样的一群聪明人交往,无论别人是不是有一些很难容忍的缺点,但也总是有一些优点是值得学习的,在这样的一种碰撞和交流中,无论是对学术的,还是对生活的看法,都会让人获益匪浅。真的是想不提高都难!

3、读博可以积累一些资源。

博士期间会遇到很多名师,也会有很多优秀的同学,这些都是一些潜在的资源。就算日后你的同学里出不了王侯将相,但至少以他们的起点,在各行各业上都会是不错的骨干。至少就我而言,很多同学遍布在很多城市的很多高校,无论对搞研究,还是作为了解风土人情的交流,都是颇有助益的。博士期间的师生关系有助于建立广泛的学术联系。

毕业之后,如果选择一个中等城市或者发展中的学校或单位,那么可能意味着你会瞬间拥有别人奋斗10几年才能拥有的东西,比如各种津贴补助、比如房子,或者配偶的工作,都能得到解决。生活会有明显提高。 从这个意义上,用原来同事的话说,读博就是赚钱。或者,读博还极有可能在毕业后进入一个博士成群的工作团体。这样,你就有可能使自己一直处于一个不断学习不断上升不断进步的状态。与智者的交流毕竟是令人愉快的。对此我受益良多。

另外,比较重要的一点,也是一个老教授曾经说过的,做研究工作,所有的科研成果的发表,名利都是自己的,不象在机关等单位工作,在年轻的时候多是为别人做嫁衣,而到了退休,往往是人一走茶就凉。而现在看来,读博直接地与以后是否有机会搞科研密切相关。

4、读博可以愉悦身心,是难得的生命体验。

因为博士不象本科生那样有天天上不完的课程,有各种各样的活动的约束,有各种检查和评比,所以基本上属于比较天马行空的、自由的一群。而高校大都有优美的环境和小资的气氛,博士生里面,大家基本上要么是有收入的,要么是可以自己赚些外快的,思想相对比较成熟了,各方面处于学校和社会的结合带,并可以暂时脱离家庭的束缚,做一些自由自在的个性的事情,是难得的生命体验。对于工作多年的人来说,这是一种放松、调整和休憩,而对于从未走上工作岗位的人来说,也从别人那里直接间接得到一些启迪。

我的博士生活就是丰富多彩的。有一帮朋友,大家经常轮流坐庄,出去吃饭、喝茶、野餐,或者就在校园里散散步、打打球,或者在学校的食堂里进行"学术午餐"和"学术晚餐",关于学术的、人生的、社会的,无所不谈。现在回想起来,我的同学和朋友都颇为留恋那段时光。我们都曾说过这样的类似"痴人说梦"之类的话,"如果条件允许的话,真想一辈子当学生,一辈子在校园里待下去。让读书变成一种生活方式。"

我想说了这么多,不知那些想了解些什么的人是更清醒了还是更晕乎了?其实,大家都是时而清醒时而糊涂的,这都正常。关键是,主要问题想明白了就行,小事不妨糊涂一点。某一时间和地点,我们只能有一次选择人生的机会。是否读博?这本身就是一个考卷。想好了再下笔,一旦下笔就坚持下去。相信,你会看到传说中的彩虹!

[收藏]美国读博士全攻略

到美国去攻读学士学位,如果语言过关,专业课过关,应该是件比较轻松的事。但读硕士学位,尤其是攻读博士学位,就不那么简单了。这其中有很多“技巧”值得研究。能拿到美国任何一所大学的博士学位就等于拿到了你所研究的领域的学术地位证书。在美国,很可能你被接收为博士生,但你最终却拿不到博士的学位。遇到这种情况,博士生导师通常会安慰性质地给你一个硕士学位证书。因此,在美国拿博士学位,有很多随机的成分,除了实力外,某种程度上需要有些运气。

  选校细分特色

  首先,你在选择学校时,要特别慎重。美国有些学校的博士学位特别难读,如加州理工大学(这里是钱学森先生的母校);如芝加哥大学(该校曾获得过多项诺贝尔奖)、纽约大学,这两所大学的博士、硕士学位都难读,尤其经济系最难读;如加州伯克莱大学,这里有的专业需要10年才能读下来,原因是那里的中国学生很多,竞争异常激烈,该校校长曾是美籍华人田长霖先生;还有如纽约市立大学,纽约的Bronkly理工学院等。纽约的大学难念的很大原因是因为纽约这座城市就业机会十分多,一般的人到纽约或纽约当地人,都会选择就业,但一旦选择了纽约的大学就读,就是高素质的人才。美国有哪些既有声望又相对不太难攻读的大学可供选择呢?坐落在美国田那西州的杜克大学,德州的莱丝大学、伊利诺州香槟城的伊利诺大学等。

  伊利诺大学的电机系与斯坦福大学在每年的评比中都不分伯仲,名例全美第一、二名;其会计系为全美国第一,伊利诺大学的教授中有一位是美国惟一获两次诺贝尔奖的人。

  获取博导好感

  其次,博士学位的授予很大程度上取决于博士生导师对你的直觉。他认为你在科研学术及高等教育方面不大可能有所建树的话,他就会千方百计地在你的学分和博士论文上挑毛病,说你的论文材料不充实等等,最终你很难拿到博士学位。在美国进行博士资格考试,笔试由本系主考,口试需要5位正教授参加。其中3位来自本系,2位来自外系(所谓边缘学科的教授)。当然,对论文的评判还是以你的指导教授为主,从论文的质和量上都要通得过。所以,你的博士生导师无论是你自己拜的还是系里指定的,他在本学科领域的声望对你是否能顺利通过博士学位考核举足轻重。他的学术声望越高,他越能说了算数,他说你行你就行;如果你的博士生导师学术地位平平,他反而会对学生的论文等格外挑剔,一方面表现出他的不自信,另一方面生怕别人说他对学生把关太松。

   论文不要偏难

  最后,要注意你的论文题目不要选得太难。如果是自然科学的研究论文,涉及实验报告和数据的,就更加麻烦,就更要慎重选题。有位同读遗传学的,他的博士论文材料需要从乳羊体内提取免疫苗,这种免疫苗每次提取的成功率很难保障,从培养到收获至少要七到八个月的时间,结果他用了整整一年时间做了两次试验,羊都死了,接着又搞,直到一年半的时间,实验数据拿不到,实验报告出不来,博士论文就无法进行,结果这位同学没能拿到博士学位,前功尽弃,造成终身遗憾。

2006年11月4日

[收藏]有志于读博士的硕士研究生应该学会什么

转自 GIS空间站论坛 http://bbs.gissky.net/ShowPost.asp?id=7362

读上博士已经两个多月了。根据自己的情况和大家谈谈如果想考博士的话在硕士阶段都应该掌握什么知识。(个人意见)
1、数学知识。上了博士才知道自己的数学知识简直太缺乏了。高等数学在考研过后基本都扔掉了。到博士阶段才感觉到如果想做出成果的话,没有扎实的数学功底是不可能的。无论你做的是GIS理论研究还是GIS应用研究都和数学息息相关。我是做应用的,所以从应用来看,无论做的是水文还是生态或是其它,其它领域的数学模型是你根本不可能绕开的冬冬,而要了解明白这些模型,基本的高等数学知识、线性代数和微分方程是必须掌握的基础知识。所以建议读研期间把自己的数学知识打牢。
2、计算方法。掌握了数学知识之后就要了解如何用计算机来解答。从积分的计算那到微分方程的求解以及更多的冬冬是以后博士学习不得不用到得冬冬。所以在这里也就需要我想说的第3个必学内容——编程语言。
3、编程语言。到了博士阶段,不会编程是行不通的(我们这个专业)。而且不能只是会,还要精通,特别关于计算方法的编程更加重要。在这里建议学习C++。因为毕竟这才上档次,呵呵。
4、专业基础知识(对于搞GIS应用的学生)。不懂专业基础知识的话,那你就无法对复杂的模型入手。原来觉得什么土壤啊,地质啊,气象等课程没什么意思。现在想来如果你是搞GIS应用的话,这些就是你的本钱,所以在硕士期间应该好好的把专业基础知识学好(关于自然地理的,学的越多越好,因为是相通的)。
5、专业软件学习。个人建议必须精通一个GIS软件和一个RS软件。因为这不是你到博士学习的东西。所以硕士期间一定要搞定。

以上是我个人意见,错误请指正。呵呵


2006年11月3日

[收藏]清华女生读博士之消极篇

每隔几天,就会有关于女孩子是不是该读博士的问题讨论。发文问这个问题的,大多都是面临选择的女孩子们。会有人站出来说,该读,因为有N个理由.也有人会说,
不要读了,因为M个理由。我是个过来人,快要从清华毕业了,也曾经有人发信问过我,我写写我的体会吧,反正褒贬皆有之,自己决定吧。

我大学毕业的时候,是班里的第3名,年级第11名。按照我的成绩,我有很多种选择。本科毕业、读硕士、直博或者出国。我的选择空间很大。我不想出国,原因很简单,我没考GRE和TOEFL。

选择继续读书而不参加工作是因为大家都这样选择,我们班只有两个人本科毕业,其他人都继续读书,我当然是一个自我感觉良好的人,自认为自己即使在清华这样一个人才济济的地方也同样可以出类拔萃,而且我本科的时候几乎是做到了这一点。

我曾经也怀着远大的抱负,希望自己的人生能够轰轰烈烈,甚至希望自己的名字能够载入史册。我是个不服输的女人。高考的时候,我是学校里保送生排名第一位,但我放弃了所有的保送机会,其中包括天大、西安交大、西工大的任意专业,只因为那里面没有清华。

高考考入清华让我如愿以偿,我除了学习以外还参加了很多协会,认识了很多朋友。在清华里,我不是个学痴派,但第三个学期我竟然还排了班里第一,有一阵子我对自己都有些崇拜。自信心膨胀,我以为巾帼的确可以不让须眉。

读博士的选择很简单,因为我当时觉得自己有搞研究的天赋,我要读博士,要好好学些知识,在这个领域作出些杰出的贡献,于是,我选择了读博士。

然而,渐渐的,我却发现自己失去了对未来的宏伟规划,我发现读博士跟我想的不一样。

工程项目像雪片一样飞来,而鲜有时间供你自己去读书。我开始逃避这样的生活,我宁愿在宿舍什么也不做,也不希望卷入一个又一个的工程项目中。“混”这个词的出现,让我更加觉得我的选择是如此的草率。我开始满足于做一个小女人,我渐渐失去了我的追求。

曾经有一段时间,我很彷徨,我想退学,甚至有时候失去了自我的那种难受感觉让我想到自杀。

导师很忙,没有时间管我。而且,他的学生也太多,他管不过来。只有每年临近毕业的学生,他才偶尔过问一下。我觉得自己失去了曾经令我骄傲的才华,我真的成了一种第三类人。清华女生的那种情怀我已经找不到了,随之而来的是无尽的感叹,感叹青春不再,感叹菱角尽失。

我有时候在想,如果我本科毕业就工作,拿着手里厚厚一沓的荣誉证书,在2000年大学生还没有泛滥的时候,找到一个适合的工作,也许我会比现在感觉好的多。我不知道,人生的路不能重来一次。现在找工作的尴尬,是我完全没有想到的。现在这个年代,性别歧视原来是如此的严重。(关于这个话题,我会再写一篇详细说说我的经历。)

大多数时候,我觉得有些后悔。但我不是一个总是生活在过去的人,我愿意看到将来。虽然有些后悔,我还是认真的做了两年研究,完成了我的博士论文。说实话,我没有退学的魄力,我只好调整心态读完全程。

我把十年最美好的青春留在了清华,女孩子十年最美好的时光用来读书我现在认为是不值得的。从我找工作的经历来看,这个社会不需要女博士,即使急需人才的地方也会告诉你,他们希望要男性。说实话,读了这么多年,突然有一种感觉,原来我已经被这个社会抛弃了。

[收藏]读博士有什么用?

如果说读书无用或者不重视学历是一种极端,那么唯学历论也同样是一种极端。博士是中国学位中最高的一个等级,如果走向唯学历论,读博士也就会变得千奇百怪。也就会提出读博士有什么用的问题。

  现在高校似乎都在追随一个目标——申博、申硕,好像高等院校的等级差异就是由硕士或者博士点多少决定的,这些博士点设置是不是够条件,整个评审的结果有时也耐人寻味。别的就不说了,我见过这样的博士,他先报考的硕士,硕士没录取,后来又去考博士,结果博士到录取了。看起来很奇怪,其实不奇怪,因为这个博士点是一个冷门,没有人报考,因此录取了。所以说博士点的设置和录取的标准也就耐人寻味了。

  如果说高考是一座独木桥,现在这个独木桥延伸了,延伸到硕士,甚至到博士。如果是社会就业竞争造成的,如果读博士就是为了就业,我以为这太狭隘了。

  许多学子学士毕业,读硕士,硕士毕业读博士,然后再进流动站,流动站出来应当是在所学的领域非常有建树了,这些学子也是而立之年了。可是国内一些学科在国际上落后了许多,但确实又培养了不少博士,可是这些学科总是上不去,不能不说我们在博士的培养上是有一些问题。

  许多大学在职的教师申请读博士,我以为很正常,因为自己学校这个专业的条件较差,走出去进修是必要的。可是许多人读博士的目的就是为了评职称,博士论文就是晋级教授的门票,等到教授职称一拿到手,就不再做啥学问了。有一些教授申请了不少课题,经费花了不少,课题做得很一般,有的还是造假,并且不愿意为本科生上课,你说中国高等教育如何进步?

  更奇怪的是我见过一个大学的教授已经是系主任、硕士生导师,其本人和所从事的专业在国内也小有名气,年纪已过半百竟然也去读博士。他读博士的动机至少有三个版本:嫌自己学校试验水平太差,借读博士的名义到条件更好的学校从事专业研究;嫌自己学校的水平太差,读了博士后以便往后好跳槽;现在虽是系主任,要往校长的位置上爬,必须是要有博士学位,动机究竟是啥?只有他自己说得清楚。

  现在读博士为了当官是一个普遍的现象,政府官员中高学历的人数在增多,有许多人都是博士,有的还是博士生的导师,博士当官能不提高执政能力也需要讨论。有些人读完博士就升官,原来读的专业由此就放弃了,人们不禁要问那你读这个专业干啥?朱永新先生这样的官员是研究教育的,那么去当主管教育的官员也无可厚非。一些博士乃至博士生导师放弃原来的专业去当官,也成了一种气候,如果是当官比做学问要容易多了,我看执政能力也难提高。政府官员把学历提高了,执政官员如果不懂具体的法律和政策,都是博士也不一定解决执政中的水平问题。另一方面这些博士就要放弃原来的专业,这个损失谁买单?

  中国的博士的心理问题也值得研究,有许多博士压力大啊,有的都自杀了,大部分原因是做不出成果,这些人不挤进这个行列就没有这个压力了。有的博士去乞讨,我想也是心理问题,除了成果可能还有待遇问题。

  有一个学者和我聊天,他说一个人一生也许有许多选择,例如读本科的时候学习的是这个专业,然后又跨越到另一个专业读了硕士,在读博士的时候又换了一个专业。这位学者以为这种转换是很正常的,有的人在这种转换中寻找到自己关注研究的方向,于是也容易出成绩,既然有了喜爱的研究方向,或者已经找到发展的方向就应当把这个方向研究到底。那种随便申请一个学位,毕业后就是为了当官,这种读博士的意义实在不大。世界上所有学有成就的人都是具有执著专一的特征,是不是读过博士并不是关键。博士学位的设置从根本上是为了促进这些专业人才在专业导师指导下进一步学习和研究,如果对此专业根本没有兴趣,而是为了一种功利,必然弊大于利,而且学术腐败也就随之而生。

  为了当官读博士,也不是少数,不仅是资源的浪费,也让博士学位庸俗化。可以断定这种人当官也当不好,其中有些人还心术不轨。

  博士专业的设置在于精,而不能泛;在于深,而不在于滥;在于实,而不在于名;在于用,而不在于利。让人们看到如果读博士有了强烈的功利色彩,那么博士学位的价值就随之陡降。科教兴国需要大量高级知识分子,并非读书无用。如果把读书变成功利色彩很重,一些博士的心理压力也就会非常沉重,应该说做学问是一件愉快的事情,不论它多么辛苦,如果真是在做学问,心理一定会很坦然,有压力不会在心理出现;当研究有了成果也就有了最大的满足。我们要看到今天的博士生以及毕业的博士出现这样和那样的问题首先应当反省读博士的动机,反省一下做学问目的。笔者以为如果动机有了问题,那么更严重的问题就是如此博士的培养还会危及社会的发展。

数据挖掘技术特写



2006-11-02 13:37:46



张承东
导语:
“我们把世界看成数学,并且把你也看成数学”--用这句话来说明数据挖掘技术的复合性和应用的广泛性似乎再好不过。如今,虽然一些行业在应用这一技术上仍然缺乏足够的主动,但一个不能阻挡的趋势是:已
经有越来越多的人在快乐而有效地使用这一技术并且不由自主地成为它的“挖掘”对象。



引子:
禽流感该如何更好地监控?今天你写Blog了吗?
你是否觉得这两个问题连在一起问很无厘头?
事实上,美国一家公司正在试图让这两个事件之间的关系日渐明了。
这家公司目前正在通过从全球的Blog网页中作挖掘出和禽流感相关的信息,从而建立一个预警机制。这一项目考虑到Blog已经成为新闻传播的重要途径,先从网上抓取有关禽流感的网页,存入到公司的数据仓库,再指定“国家”为关键目标词,然后利用关联分析技术,即可得到和禽流感关联最大的国家,由此可以判定该国的禽流感传染可能比较严重。
就在此前,已经有很多人在抱怨,网上多如牛毛的Blog除去浪费了人们数以十万年的阅读时间之外,还有多少用处?如今,商业智能领域中的数据挖掘技术正在力图从这些爆炸式增长的Blog中“挖”出更有价值的东西,同时它也正在更多领域中展示其非凡的力量。



工具篇:前方是岔路口



数据挖掘其实并非单纯的IT技术,而是数学家和计算机科学家之间的合作产物。在过去十年中,高等数学和计算机建模的联姻改变了科学和工程技术,以至于有人认为这一合作已经开创了一个全新的商业领域。
有关数据挖掘技术的定义有很多版本,综其要点,主要在于应用一系列统计与人工智能技术来发现以前并不了解的数据规律,并解决实际业务问题。如今,数据挖掘技术已经从最开始的一个简单的算法包,发展出通用挖掘平台和专业挖掘工具两大种类。其中,像IBM、NCR、SAS、微软、SPSS、StatSoft等厂商的数据挖掘产品(模块)基本都是通用型工具平台;而像美国的 Unica 公司、费尔艾萨克公司(Fair Isaac Corporation)则主要专注于诸如营销自动化、信用卡积分等细分领域,属于后一种工具。
具体来看,目前在数据挖掘领域声势颇大的大多是通用型工具平台,像IBM、NCR、SAS、微软、Oracle 、SPSS、StatSoft等都是如此。



“现在IBM更侧重的是平台优势。”在采访中,IBM软件部中国区DB2信息管理技术经理刘晶炜明确表示。目前,IBM的DB2中包含Intelligent Miner for Data和Intelligent Miner for Text两个数据挖掘模块,将数据挖掘和数据仓库整合到一个平台之上。其中,前者主要针对结构化信息,主要分为建模、浏览、Scoring Service三个部分;后者则是针对文本的挖掘模块,其主要功能是特征抽取、文档聚集、文档分类和检索。



NCR Teradata的数据挖掘工具同样也是与其数据仓库整合在一起。具体来说,其数据挖掘工具可以按照挖掘的步骤主要分成Profiler、ADS Generator、Warehouse Miner和模型管理器四块。目前Teradata最新版的数据挖掘方案是Teradata Warehouse Miner 4.1。



SAS 公司和SPSS公司作为两家从传统的统计分析技术发展而来的数据挖掘厂商,二者在业内的影响力可谓有目共睹。其中,SAS 公司提供了SAS Enterprise Miner 、SAS ETS(时间序列预测)、SAS OR(运筹学)、SAS STAT(统计分析)、SAS QC(质量控制)等一系列工具;SPSS公司也提供了Clementine和AnswerTree两项产品。



微软在SQL Server 2005中在数据挖掘方面的突破与创新曾被人看作最令人惊艳的地方。Microsoft SQL Server 2005 Data Mining 平台的确引入了大量的数据挖掘功能,其本身就是一个开发智能应用程序的平台,而非一个独立应用程序。而且,这一平台与所有 SQL Server 产品实现了集成,包括 SQL Server、SQL Server Integration Services 和 Analysis Services。据称,SQL Server 2005 中最重要的数据挖掘功能就是其处理大型数据集的能力,它允许模型对整个数据集运行,从而消除了采样方面的挑战。



总起来看,像IBM、NCR、Oracle、微软这些平台工具厂商基本上都是以提供“整车”为己任。一句话,只要用户不是很挑剔,基本上都可以在某一家那里即可买全包括数据挖掘工具在内的全套商业智能产品。而像SAS、SPSS、StatSoft等公司虽然也宣称提供工具平台,但提供“整车”的实力有限,主要在统计分析和数据挖掘领域延伸提供尽可能多的工具组件。



相对于这些挖掘工具平台,专业挖掘工具可能在市场的声势并不大,但是像Fair Isaac 公司、Unica 公司的发展却也相当不错。比如像Fair Isaac 公司就已经占据了全球信用卡积分市场70%-80%的份额,几乎达到垄断。该公司的创始人发明了一个信用评分卡(即费寇分数,FICO score),由此可以预测人的未来偿付行为,为消费者信用行业提供一个有效的预测工具。同样,美国 Unica 公司的 Affinium Model 则是一款专注于市场营销自动化的数据挖掘工具软件。



那么,面对这两种工具,用户该如何选择?换句话讲,哪种工具才是未来的发展方向呢?
中国传媒大学调查统计研究所副所长、数据挖掘研究室主任沈浩认为,平台化肯定是将来的一个发展方向,而且,中国的市场足够广阔,也可以容得下一批这样的平台厂商。IBM软件部中国区DB2信息管理技术经理刘晶炜也表示,正与SAS进行更多的合作,以便进一步统一数据挖掘领域的技术标准。而Teradata数据仓库专家盛秋戬博士则认为,目前的平台工具虽多,但从根本上讲,都是在用横向的数据挖掘工具解决纵向的行业业务问题。他表示,如果从用户出发,用户应该更欢迎那些专业挖掘工具。



北京瑞斯泰得数据技术开发公司苏立民总经理从事数据挖掘行业已有六年之久,他在采访中表示,现在数据挖掘领域的确存在平台化趋势,但专业工具也占领了一些市场。比如Unica 公司就是只选出并优化某些算法,再加上行业经验,就可以使建模过程更加优化。另据SYBASE商务智能总监廖钢城介绍,其实在日本,就有公司专门销售一种类似“黑匣子”的专业工具,银行积累的数据在里面跑一遍,就直接出来结果。这种工具用得也很好。而在另一方面,他也认为,提供平台的厂商会越来越少。



如此看来,业界对于工具的发展方向似乎并无太大异议,即平台工具会保持在一个适当的数量,而专业工具显然更得用户的宠爱。而现在,数据挖掘技术的发展刚好到了一个岔路口,一边指向通用型,一边指向专业型,就看企业要往哪个方向走了。



技术篇:算法与模型



一, 机关可曾“算”尽?



之所以说数据挖掘是高等数学和计算机科学联姻的产物,其中一大原因就在于,对各种算法的支持程度是衡量数据挖掘工具的一大标准。在前期采访中,笔者曾设想通过对比各种数据挖掘工具对算法的支持程度来分出高低。但在采访之后,笔者发现这一对比实无必要,因为目前的算法技术已经相当成熟,而主流工具也基本上都提供了对主流算法的支持。



从算法上看,业界公认主要有决策树、分类、聚类、回归、关联分析等几大主流算法。对于这些算法,IBM、NCR、Oracle等主流工具基本上都已经支持,而像微软的Microsoft SQL Server 2005 Data Mining ,它作为一个开发智能应用程序的平台,可以允许第三方添加自定义算法以支持特定的挖掘需求。
在支持的算法种类和数量上,SAS、SPSS等传统的统计分析厂商要比IBM、NCR、微软、Oracle 等厂商更多一些。比如SAS Enterprise Miner就提供了决策树、神经网络、自动神经网络、基于记忆的推理(MBR)、线性和对数回归、聚类、关联分析等很多算法。



Spss公司在其AnswerTree工具中就提供了CHAID、Exhaustive CHAID、Classification & Regression Tree、Quest等四种计算法则。在采访中,无论厂商还是业内专家大都认为,目前的算法技术已臻成熟。北京瑞斯泰得数据技术开发公司苏立民总经理就表示,近年来统计学领域新出现的新算法很有限,大多是对旧算法的完善。而对于现存的算法而言,除了一些独有的算法之外,主流算法都可以互相拷贝,并不存在太高的技术壁垒。



或许正是因为作为数据挖掘技术基石的算法技术已经比较成熟,这也造成厂商开始纷纷在其他领域开拓新的技术亮点。比如NCR Teradata就认为,除了算法指标,体系架构也非常重要。相对于算法上的难分伯仲, NCR更强调通过其“库内挖掘”的优势,来解决数据量、效率和质量的难题。此外,苏立民总经理认为,在算法成熟之后,更重要的工作就是在数据准备阶段。而商智通公司咨询总监匡宏波则认为,虽然算法的速度业已越来越快,但更关键的是怎么用。无疑,这些都是需要业界跳出单纯的算法技术并及早关注的重点。



二, 从模型看未来
美国《商业周刊》在今年的一篇文章中指出,人类将数学建模应用于现实生活与工作肯定将是21世纪最伟大的事件之一。事实上,建构模型也正是数据挖掘技术的重要内容,正是通过建模,数据挖掘工具才可以准确地告诉用户那些隐藏在数据库深处的重要信息,同时又对未来做出预测的。
那么,何为建模?简单来讲,就是综合运用数学思想方法和IT技术建立一个适合当前问题的模型,用以解释之前发生的事情并预测未来发生的事情。
“算法是刀,建模是刀法,而模型就是用刀切出来的东西。”北京瑞斯泰得数据技术开发公司苏立民总经理如此形容算法、建模和模型三者之间的关系。简单来讲,如果算法是“y=a+bx”,那么模型就是“y=5+3x”。区别就在于已经带入了常变量。目前,业界探讨较多的技术内容主要有自动建模和模型转换两点。
其一,自动建模。
自动建模是考查数据挖掘工具是否能够自我优化,从而方便一般用户使用的重要功能指标。在这项功能的帮助下,用户无需深刻了解算法的优缺点,即可利用其灵活的参数设置及其帮助从而增强建模的效率。
目前,诸多主流工具都在自动建模方面有着较好表现。比如NCR就尤其强调其模型的并行性。据Teradata数据仓库专家盛秋戬博士介绍, NCR的并行处理优势就在于:比如用两台服务器(集群)来作挖掘,可能需要1分钟的反应时间;而如果再加两台服务器,则只需要半分钟的反应时间。这一优势当然是基于NCR自身的硬件设备。
SAS Enterprise Miner(EM)的自动建模主要体现在自导向(SEMMA)数据挖掘进程上。SEMMA为执行数据挖掘的核心任务提供了一个灵活的框架,这些任务包括五个主要的步骤,亦即采样(S),探索(E),修改(M),建模(M)和评估(A)。此外,专业工具厂商美国 Unica 公司的 Affinium Model 的最大优点也是体现在最大限度地将数学建模过程自动化 ,使得那些数学基础不好的业务人员可以方便地使用这个工具。
需要注意的是,虽然自动建模被人们寄予厚望,但是还远未达到让用户手到擒来的地步。之所以这样说,一方面是因为工具本身的技术实现不够,苏立民就认为,在这方面,专业型工具做得要比通用型工具相对较好;另一方面,自动化本身并不能取代一切。中国传媒大学调查统计研究所副所长、数据挖掘研究室主任沈浩也解释说,做好自动建模,同样需要对业务有深刻的了解,才能选择更好的变量。比如在知道一批女孩的身高、体重数据之后,要分析出女孩的漂亮程度,那么,选定“身高除以体重”来分析无疑还是要靠脑子想出来的。



其二,模型转换。



数据挖掘工具的多样性造成模型种类也很多,这种情况下,不同工具生成的模型是否能够共享或转换就成为一大难题。目前,业界正通过对预测模型标记语言(Predictive Model Markup Language ,PMML)的应用来解决这一问题。这一语言在1997年7月由DMG(the Data Mining Group)发布,它利用XML描述和存储数据挖掘模型,已是一种已经被W3C组织接受的标准。现在来看,IBM、SAS和SPSS等厂商已经在使用PMML标准导入数据挖掘模型,但也有些厂商仍未采用此种标准,而从标准本身看,对数据仍然具有一定的依赖性,还未真正实现模型与数据的分离。







热点篇:文本挖掘与网络挖掘

算法和建模作为数据挖掘工具的核心技术从它诞生之日起就在得到不断完善,而在最近两年,也有一些新的技术和应用热点开始引起人们的关注,比如文本挖掘、网络挖掘和可视化挖掘就是其中比较重要的三种。
“文本挖掘是个太恐怖的事情。”中国传媒大学调查统计研究所副所长、数据挖掘研究室主任沈浩如此形容文本挖掘的威力。文本挖掘(Text mining),顾名思义,就是从非结构化的文本中发现潜在的概念以及概念间的相互关系。在这项技术中,最关键的是分词技术,建立词典。只有让计算机依据词典完成正确断词之后,才可以实现将非结构化信息转化为结构化信息,然后就可以进一步研究文本之间的关系。比如本文开头提到的通过分析Blog网页来建立禽流感预警机制的例子,其实既利用了文本挖掘技术,也是一个网络挖掘案例。
到目前为止,像IBM、微软等主流挖掘工具以及google和SNS网站都已经在使用文本挖掘技术。但遗憾的是,目前这些工具大多只支持英文,还不支持中文挖掘。
如果说文本挖掘是一项技术热点的话,那么网络挖掘可以称得上是数据挖掘领域中的一大应用热点了。具体来讲,网络挖掘还可以细分为三种挖掘,一是前文提到的文本挖掘,二是结构挖掘(Structure mining),主要解决网页与网页之间的链接关系,三是点击挖掘(Hit mining),是针对点击率的挖掘分析。总体而言,要实现网络挖掘,从技术上讲并没有难度,大部分的问题都可以用成熟方法来解决。
在采访中,无论厂商、集成商还是学界都肯定了网络挖掘的美好发展前景。“我个人比较看好Web下的网络挖掘。”盛秋戬博士这样说。他认为,网络挖掘是施展数据挖掘技术的很好的舞台,同时也会给挖掘工具厂商带来不少商机。沈浩同样也认为,当电子商务发展起来之后,网络挖掘肯定大有可为。
但是业内人士也指出,网络挖掘目前尚存在一些瓶颈。
首先,一个关键问题是电子商务的评估指标(e-Metrics)还没有形成一个完整的体系。所谓指标体系就要设定几个维度来衡量电子商务网站生意的好坏。目前,有些电子商务网站已经开始定义像潜在顾客率(reach)、招揽时间(Acquisition)、潜在顾客转化率(Conversion)等一些评估指标,美国的一些技术会议也已经开始做一些整合工作,但是要形成体系还需要一段时间。
其次,缺钱。在采访中,商智通公司咨询总监匡宏波表示,曾经有一家医药类电子商务网站主动找上门,提出要求想知道平台的某类药品(比如盘尼西林)主要销往哪里。但盛秋戬博士也指出,就电子商务领域的总体而言,除了像亚马逊、eBay等一些国外大型电子商务网站开始自己买工具进行挖掘之外,国内少数注意到数据挖掘技术的网站大多是自己开发做此类工作,舍得掏钱的人还不多。
在文本挖掘和网络挖掘之外,可视化挖掘(Visual Data Mining)因为和工具的易用性联系在一起,因而也颇为重要。简单来讲,可视化包括了数据预处理和结果呈现两个方面。比如StatSoft一直强调的完整的图表工具库以及高质量的图表呈现效果就是其优势所在。但是总体情况来看,可视化的内含和标准近几年一直没有更新的内容,而且,即便工具厂商自认为做得再“可视化”,对于用户来说,仍有难以理解和掌握的地方。苏立民介绍说,虽然现在挖掘结果呈现已经相当易用,但是他接触到的一些用户依然会抱怨说,每回总是打印出案例那么多表格到底有什么用?其中的问题就在于:工具的易用性是一回事,有没有既懂业务又懂技术的人来用却是另一回事。







应用篇:瓜熟蒂不落?
在采访中,笔者发现,无论厂商、集成商还是学术界,基本上都认同一个观点,即:数据挖掘在技术已经趋于成熟,现在更重要的就是如何拓展行业应用。 IBM软件部中国区DB2信息管理技术经理刘晶炜表示说,数据挖掘技术已经到了一个普及化的阶段,现在关键是要让数据挖掘从神坛上走下来。商智通公司咨询总监匡宏波也表示,现在数据挖掘领域的问题都不是技术问题,也不是工具问题,而是应用问题。那么,现在,数据挖掘工具在国内的实际应用处于什么阶段呢?
从行业应用来看,目前大多数的用户来自都来自电信、银行、保险、税务等领域,比如南京地税、四川移动两个案例就做得相当成功;应用主题则主要包含:消费者行为分析、信用评分与风险管理、欺诈行为侦测、购物篮分析等方面。综合国内外的发展趋势,可以看到的是,大型连锁商店和高科技制造产业也将成为应用数据挖掘技术的重要领域。前者的记账质量之好为业内公认,一旦开始数据挖掘方面的应用则前景不可限量;而在后一个领域,国外已经开始陆续导入数据挖掘技术,类似做法相信会很快为国内制造业大厂所借鉴。
从应用层次上看,大体可以分为三个层次,第一层次是把挖掘工具当作单独的工具来用,偶尔用一下出具一个报告,不用建设系统;第二层次则是把数据挖掘模块嵌入到系统中,称为部门级应用;第三层次是企业级应用,相当于把挖掘系统作为整个企业运营的CPU。目前,国内的数据挖掘的应用是本来数量就比较少,即便是做了的,也有很多只是处于第一层次,偶尔某些用户能够做到第二层次。
如此一来,问题出现了:既然数据挖掘技术已经趋于成熟,为什么在应用上却迟迟跟不上呢?笔者在采访了几家主流厂商和集成商以及业内专家后发现,问题主要集中在以下几个方面。
其一,工具易用性强则是否用户就会运用呢?答案是否定的。
现在很多厂家都在强调工具的易用性,但是却忽视了一个问题,即工具易用性强和用户会运用完全是两码事。SYBASE商务智能总监廖钢城表示,这两者的关系,就像用word写文章一样,即便输入法、界面等再友好,但是和使用者能否写出流畅的文章关系并无关系。换句话讲,工具再易用,前提也得是用户脑袋要清楚。即便面对同一个工具,统计学家和普通人使用后得到的结果也不一样。因为选用的数据不一样,选择的变量也不一样,结果的准确性自然也不一样。
“用户总是想像使用傻瓜相机一样使用挖掘工具,事实上这是不可能的。”盛秋戬博士表示说。据他介绍,目前很多号称已经做完的项目,其实大部分工作仍然还都是由厂商代替客户操作使用。
其二,复合型人才一将难求。
要成功完成一次数据挖掘过程,用户首先要业务熟悉,其次还要对算法和模型熟悉。两者不可偏废,才能知道拿来的数据代表什么,算出来的结果又代表了什么。然而,从目前电信、金融行业的人才结构来看,如今主导建设数据挖掘系统的大都是工科出身,不但业务不熟悉,即便是对于数学领域中的统计学也都过于生疏。客观的讲,这种复合型人才的缺乏也在很大程度上造成了目前数据挖掘市场还不够成熟。
那么,如何解决这个问题?答案似乎很简单,没有那就只有培养了。比如现在一些电信用户就在日常培训之外,还高薪聘请一些乙方(数据仓库解决方案供应商)的咨询师和顾问,专职负责自己的数据仓库和挖掘项目,试图由此培养一批既懂业务又懂技术的专业人才。当然,一开始说的是培养,最后实在忙不过来,用户挖厂商墙角的事也不是没有。
问题是,同样是培养人才,那到底是让业务人员学技术好呢,还是让技术人员学业务好呢?苏立民和廖钢城都表示,更赞成是业务人员去学习技术。因为业务人员是为了应用而学习,可以实现很好的结合。目前,像中国人民大学已经开始招收有计算机专业背景的统计博士,而中国传媒大学的数据研发中心也是文理兼收,可以想见,未来三四年内,人才缺乏的问题将逐步得到缓解。
其三,转变意识,端正心态。从意识上,主要是用户要转变;而心态上,则厂商和用户都需要端正。
首先,从意识上看,与国外长期的精细化管理相比,国内用户有些时候还不太习惯迅速走向精细化。沈浩就表示,国内零售企业的记账是最好的,也是被认为最值得作数据挖掘的行业,但至今为止还没有哪家开始做,原因就在于没有这方面的意识。
其次,从心态上看,用户和厂商的心态显得都过于着急。从用户来讲,总想找个可以替代决策的工具。不做长线,只想作短线,总以为项目上线就行了。像国内某电信公司,从一开始其实就没想清楚需求是什么,结果火急火燎的把工具买来,现在根本就用不起来。从厂商来讲,问题在于不太想培育市场,只想赚快钱。苏立民认为,数据挖掘是一个需要慢慢雕琢的东西,需要精耕细作才能做成功,但是目前一些厂商却更愿意采取狩猎型,作一个单纯的产品销售型公司,这种做法本身似乎就不太适合这一行业。廖钢城也表示,Sybase正是看到这种情况,所以就更愿意和和瑞斯泰得这样的集成商合作实施,而不只是销售产品。




编看编想:
从一锤子的买卖到沿途下蛋



生意人都知道,一锤子的买卖做不得。但笔者却发现,在数据挖掘领域里,敲一锤子换个地方的现象却似乎并不鲜见。为什么非要这样做呢?答案是,全因心里太着急。很多厂商总认为,自己怀里揣着的是好产品,面前的中国又是一个大市场。如此一想,就感觉不赶快搂下几个大单简直没天理了。
于是,搞售前的着急让用户签单,拿到钱后又着急从用户那里撤退。结果如何呢?还真像那句俏皮话说的:有困难要上,没有困难创造困难也要上。活活把一些简单问题复杂化。有些买完工具的用户其实需求都没想明白,何谈成功运用;而那些能在忽悠中挺过来的用户索性就不再理这茬。
问题出在哪里?其实厂商看得清楚,不外乎市场需要培育、人才也需要培养而已,而他们只是懒得下手去做,甚至不愿去说。
厂商着急,其实用户也着急。厂商着急卖产品,而用户却在着急花大价钱买来的产品早日上线出效益。这种想法虽然也有问题,但是可以理解。你想,谁不担心几十万打了水漂儿,谁又不想让领导说这几十万花得值、花得好呢?!
那么,如何才能做到既能保证项目按周期实施、又不让用户心急火燎得难受呢?上海证券交易所信息网络有限公司董事长赵小平提出了“沿途下蛋”的理论。简单讲,就是不要到最后才给用户下一个大金蛋,很可能这个大金蛋还没下来,用户就已经下了逐客令。正确的办法就是不断出成果,这样用户才会安心等待并且积极配合。
无疑,从“一锤子的买卖”到“沿途下蛋”这条路上还需要厂商和用户慢慢琢磨。(ccw-cnw)



2006年11月2日

[收藏]至少应该阅读的九本C++著作

至少应该阅读的九本C++著作

C++语言吸引如此之多的智力投入,以至于这个领域的优秀作品,包括重量级的软件产品、程序库以及书籍著作等,数不胜数。对于读者来说,倘若限于经济等客观因素而必须做出折衷取舍,我推荐至少阅读以下几本书:

1. The C++ Programming Language (Special 3rd Edition) by Bjarne Stroustrup

2. The Design and Evolution of C++ by Bjarne Stroustrup

如果你只打算购买一本书,那就选择1,如果还想要第二本 — 那就是这两本了。它们的作者是 C++语言的创建者。Stroustrup的文字语言丝毫不逊色于他所创建的程序语言。它们可以使你免于误入歧途。

3. Effective C++: 50 Specific Ways to Improve Your Programs and Designs by Scott Meyers

4. More Effective C++: 35 New Ways to Improve Your Programs and Designs by Scott Meyers

5. Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library by Scott Meyers

我强烈推荐Meyers这个系列。它们是菜鸟进阶必读之作。游刃有余的技术,高超的写作技巧。Meyers可能是世界上最优秀的C++技术作家。

6. The C++ Standard Library : A Tutorial and Reference by Nicolai M. Josuttis

C++标准库字典式著作。内容全面,结构清晰。

7. C++ Templates: The Complete Guide by David Vandevoorde, Nicolai M. Josuttis

Alexandrescu的Modern C++ Design阅读门槛很高,这本书可以充当你的垫脚石。单单阅读The C++ Standard Library或许并不足以使你具备定制、扩充标准库组件的能力,这本书可以助你一臂之力。对于任何希望进入模板编程领域的C++程序员来说,这是一本必读之作。

8. Modern C++ Design: Generic Programming and Design Patterns Applied by Andrei Alexandrescu

一本天才的著作!泛型模式,无限延伸你的视野,足以挑战任何一名C++程序员的思维极限。这本书几乎可以满足你对C++模板的所有幻想。

9. Design Patterns by Erich Gamma , Richard Helm, Ralph Johnson, John Vlissides

设计可复用的面向对象的软件,你需要掌握设计模式。这并不是一本专门针对C++程序员的著作,但它采用了C++(和Smalltalk)作为主要示例语言,C++程序员尤其易于从中受益。学习设计模式,这本书需要一而再、再而三的咀嚼。

这是公正客观的推荐吗?可能不是。实际上,没有任何人能够做到绝对客观 — 至少The Design and Evolution of C++是否应该进入这个推荐列表就能惹起喋喋不休的争吵。

还有许多优秀的著作值得推荐,但为了将推荐数目控制到个位数,它们没能入选。换一个人也可能会给出另外的“九本书”列表,但至少大半会和这个列表重叠。

巧合的是,这几本书均出自Addison-Wesley。它们绝大多数在市面上能找到相应的中文版,几乎每一中文版都有很好的质量。祝各位阅读快乐。

荣耀
2003年9月
南京师范大学


[收藏]C++程序设计之四书五经

C++是一门广泛用于工业软件研发的大型语言。它自身的复杂性和解决现实问题的能力,使其极具学术研究价值和工业价值。和C语言一样,C++已经在许多重要的领域大获成功。

然而,一个不可否认的现实是,在低阶程序设计领域,C++挤压着C同时也在承受着C的强烈反弹,而在高阶程序设计领域,Java和C#正在不断蚕食着C++的地盘。也许C++与C合为一体永远都是一个梦想,也许Java和C#的狂潮终将迫使C++回归本位 — 回到它有着根本性优势的开发领域:低级系统程序设计、高级大规模高性能应用设计、嵌入式程序设计以及数值科学计算等。果真如此,我认为这未尝不是一件好事。

C++吸引如此之多的智力投入,以至于这个领域的优秀作品,包括重量级的软件产品、程序库以及书籍等,数不胜数。文题“C++程序设计之四书五经”一个不太严格的含义是:C++程序设计之四书 ⅹ 五经。是的,在本文(及其下篇)中,我将分门别类推荐20多本C++好书,你可以根据自己的需要选读。

TCPL和D&E

TCPL和D&E分别是《The C++ Programming Language》和《The Design and Evolution of C++》的简称,均出自Bjarne Stroustrup之手。我将它们单列出来,首先是因为Bjarne是C++语言的创建者,然后是因为比“首先”那个原因更重要的原因:这两本书是C++领域毋庸置疑的杰作。说它们是C++语言圣经,并不为过。

Bjarne Stroustrup, The C++ Programming Language (Special 3rd Edition)
《C++程序设计语言(特别版)》,机械工业出版社
《C++程序设计语言(特别版)(英文影印版)》,高等教育出版社

迄今为止,TCPL是除了C++标准文献之外最权威的C++参考手册。和大多数人的看法不大一样,我认为Bjarne的文字语言并不逊色于他所创建的程序语言,至少我喜欢这种学院气息浓厚的作品。本书对C++语言的描述轮廓鲜明、直截了当。它从C++语言创建者的角度来观察C++,这是任何别的作者和书籍做不到的 — 没有任何人比Bjarne自己更清楚该怎么来使用C++。

这是一本严肃的著作,以中、高级C++开发人员为目标读者。如果你是一名有经验的C++程序员,需要了解更加本质的C++知识,本书正是为你而写。它不是那种让你看了会不断窃喜的小书,需要用心体会,反复咀嚼。在阅读过程中,请特别留心Bjarne先生强调了什么,又对什么一语带过。我个人比较喜欢这本书的第四部分“使用C++做设计”,这样的内容在类似的程序设计语言书籍中很难看到 — 我甚至认为Bjarne应该将这部分独立出来单独写一本书。

Bjarne Stroustrup, The Design and Evolution of C++
《C++语言的设计和演化》,机械工业出版社
《C++语言的设计和演化(英文版)》,机械工业出版社

D&E是一本关于C++语言设计原理、设计决策和设计哲学的专著。它清晰地回答了C++为什么会成为今天这个样子而没有变成另外一种语言。作为C++语言的创建者,Bjarne淋漓尽致地展示了他独到而深刻的见解。除了广受赞誉的语言特性外,Bjarne没有回避那些引起争议的甚至被拒绝的C++特性,他一一给出了逻辑严密、令人信服的解释。内容涵盖C++的史前时代、带类的C、C++的设计规则、标准化、库、内存管理、多重继承、模板等,对包括异常机制、运行时类型信息和名字空间在内的重要的新特性都分别进行了深入探讨。每一名C++程序员都应该可以从Bjarne的阐释中加深对手中这门语言的认识。

需要再次提醒的是,这两本书知识浓缩,信息量极大,请不要错过Bjarne每一句看似漫不经意的话。

入门教程

学习任何一门语言都需要一个从入门到精通、从新手到高手循序渐进的过程。不过,对于一个所谓的新手而言,究竟是一个完完全全的新手,还是一个熟悉某种别的语言的“新手”,甚至是在某种语言程序设计领域已经颇有建树的高手,很难一概而论?不同的C++新手需要不同的入门书籍。

Andrew Koenig, Barbara E. Moo, Accelerated C++: Practical Programming by Example
《Accelerated C++中文版》,中国电力出版社

和市面上大多数C++教程不同,本书不是从“C++中的C”开始讲解,而是始于地道的C++特性。从一开始就使用标准库来写程序,随着讲述的逐渐深入,又一一解释这些标准库组件所依赖的基础概念。另外,和其他C++教材不同的是,这本书以实例拉动语言和标准库的讲解,对后两者的讲解是为了给实例程序提供支持,而不是像绝大多数C++教材那样,例子只是用作演示语言特性和标准库用法的辅助工具。

作者在C++领域的编程实践、教育培训以及技术写作方面都是世界一流水准。我喜欢这种大量使用标准库和C++语言原生特性的清新的写作风格。在这本教材面前,几乎迄今为止的所有C++教材都黯然失色或显得过时。尽管这本教材也许对于国内的高校教育来说有些前卫,不过我仍然极力向我的同行们推荐。顺带一提,在Bjarne和我最近的一封通信里,他这样评价本书:对于有经验的程序员学习C++而言,这本书可能是世界上最好的一本。

Stanley B.Lippman, Josee Lajoie, C++ Primer (3rd Edition)
《C++ Primer (3RD)中文版》,中国电力出版社

这本书的名字多少有点让人误解。尽管作者声称这本书是为C++新手而写,但无论是它的厚度还是讲解的深度都暴露了似乎并非如此。也许说它是一本“从入门到精通”的C++教程会更合适一些。我个人认为它并不适合完全不懂C++的初学者 — 在阅读这本书之前,你至少应该先有那么一点C或C++的背景知识,或者至少要具有一些其他语言的编程经验。

尽管这本书省略了一些高级C++特性的讨论,但仍然可以称得上是迄今为止最全面的C++学习教程。事实上,如果一名C++初学者能够扎扎实实地读完本书并对照《C++ Primer Answer Book》完成全部习题的话,他的水平肯定可以进入职业C++程序员的行列。我个人认为,即使你已经拥有了TCPL,这本书依然有拥有的价值,因为在许多方面它比TCPL来得更详细、更易懂。

Stanley B. Lippman, Essential C++
《Essential C++中文版》,华中科技大学出版社
《Essential C++(影印版)》,中国电力出版社

可以不太严格地认为这本书是《C++ Primer》的精简版。本书一一讲述了C++中最具代表性的主题,包括过程式编程、泛型编程、基于对象编程、面向对象编程、模板编程以及异常处理等。Stanley将门槛调低到“具有其他语言程序设计经验”的C++新手所能接受的最基本的层次,使他们能够迅速开始使用C++编程而又免于阅读《C++ Primer》那样的大部头。它以实例引导学习,力图使读者在最短的时间内把握C++的精粹。

也许换一个人来概述C++编程范型(paradigm)的方方面面需要好几百页才能说清楚,但这本小书不可思议地做到了这一点。我个人非常喜欢这种满是技术、简明扼要并且“有话好好说”的书。这本书同样具有一个明显的风格:所有程序例子全部采用标准库组件,让人耳目一新。

以上三本书都不是为了完完全全的编程新手而写。完全的C++编程新手可以阅读Francis Glassborow的新书(尚未出版):《A Beginners Introduction to Computer Programming : You Can Do It!》。这也是Bjarne的推荐。Francis Glassborow是ACCU主席,多年来他对几乎每一本C++经典名著评头论足,他自己的这一本自然会引起C++社群的极大兴趣。

高效、健壮编程

两年前我在负责一个省级电力调度系统项目时编写了一个网关程序,它从SCADA系统获取电力实时信息。通讯接口采用了不常用的数据库直连方式(这个网关程序一端连接SQL Server 6.5,另一端连接Oralce 8.1.6)。由于实时测点近万,每次将全部取样更新或插入一遍显然是低效的。我在网关程序里建了一个内存库,获取到的数据首先在其中进行比较,然后决定是否更新物理数据库(同时还做了别的更复杂的事情……),从而在效率和资源占用两方面达到了预期效果。

这个程序一直运行得很好,但在离开现场之后的某一天,系统管理员打来电话,说大概因为网络故障等原因,有时这个网关程序会崩溃掉 — 它自己崩掉也就罢了,问题是它还会把Windows 2000 Advanced Server搞成“蓝屏”!坦白地说,我还从来没看过哪个非蓄意的程序有这个“能耐”。由于当时正忙于另外一个大项目,无法去现场调试,最后只有凭经验对内存库代码小心翼翼地封装以异常处理代码(同时也做了一些别的修改……)。这样,虽然没有彻底解决问题,但程序终究不再死得那么难看了。

在这儿讲这么一段花絮有什么意思呢(当初为那个可怕的bug朝思暮想时我可不认为这是一个“花絮”)?我想说的是,对于任何软件而言,离开强健,效率也就无从谈起。而对于C++程序员来说,也许编写一个高效的程序并不难,但要编写一个需要7 ⅹ 24小时持续运行的服务端软件就不是那么容易了,需要考虑许多因素,有时这些因素甚至远远超出C++语言和开发工具的本身。作为一名开发实际项目软件的程序员,并非非得自己碰钉子才能积累经验,只要我们足够虚心,别人的经验往往都是我们很好的借鉴。鉴于此,我推荐以下几本书供你选读,它们可以让你从强健和效率两方面受益(当然了,它们涵盖的内容远不限于异常处理J)。

Scott Meyers, Effective C++: 50 Specific Ways to Improve Your Programs and Design (2nd Edition)
Scott Meyers, More Effective C++: 35 New Ways to Improve Your Programs and Designs
《Effective C++中文版》,华中科技大学出版社
《More Effective C++中文版》,中国电力出版社
《Effective C++(影印版)》,中国电力出版社

如果说《Effective C++》主要讨论C++中一些相对基础的概念和技巧的话,那么《More Effective C++》则着重探讨了包括异常处理在内的一系列高级技术。与前者相比,后者具有两大主要区别:其一,它包含很多时新的标准C++的内容;第二,它讨论的主题倾向于“战略化”而非“战术化”,并且讨论得更深入、更彻底。尤其是对虚析构函数、智能指针、引用计数以及代理类(proxy classe)等技术和模式论述的深入程度,让人很难想象是出现于这样的一本小书之中。

游刃有余的技术,高超的写作技巧,Scott无疑是世界上最优秀的C++技术作家之一。在简洁、清晰、易读等方面,这两本书都卓尔不群。总之,Scott提供的这85个可以改善编程技术和设计思维的方法,都是中、高级C++程序员必备的技能。我强烈推荐这两本书(实际上还有一本,稍后就会看到)。

Herb Sutter, Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions
Herb Sutter, More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions
《Exceptional C++中文版》,中国电力出版社
《More Exceptional C++中文版》,华中科技大学出版社

你自认为是一名C++语言专家吗?读一读ISO C++标准委员会秘书长的这两本书再回答。在这两本书中,Herb采用了“问答”的方式指导你学习C++语言特性。对于每一个专题,Herb首先合理地设想出你的疑问和困惑,接着又猜测出你十有八九是错误的解答,然后给你以指点并提出最佳解决方案,最后还归纳出解决类似问题的普适性原则。

这两本书是典型的深究C++语言细节的著作,很薄,但内容密集,远远超过Scott的那两本书,读起来很费脑筋 — 我个人认为它们要比Scott的书难懂得多。若要研习这薄薄的两本书所包含的知识,至少需要花费数月的时间!(在Scott的荐序中,他坦陈不止一次陷入GotW问题的陷阱,你应该知道这意味着什么)对于语言细节的深究有什么好处呢?尽管在大多数情况下,我们不必关心C++代码幕后的动作,然而当我们不得不关心时,这两本书可以为我们提供很好的线索,因为它们揭示了C++语言中微妙而又至关重要的东西。

Stephen C. Dewhurst, C++ Gotchas: Avoiding Common Problems in Coding and Design
《C++程序设计陷阱》,中国青年出版社

Stephen的理论素养和实践经验注定这是一本值得一读的好书。Stephen曾经是贝尔实验室中第一批C++使用者。他已经使用C++成功解决了包括编译器、证券交易、电子商务以及嵌入式系统等领域中的问题。本书汇集了作者来自开发一线的99条编程真知灼见,洞悉它们,你可以避免几乎所有常见的C++设计和编程问题。

我甚至认为,对于C++编程菜鸟而言,阅读这本书会比阅读Scott和Herb的书更能轻松而立竿见影地获得更大的提高。我个人很喜欢这本书的写作风格 — Stephen的许多观点看似极端却无可辩驳。当然了,这种自信(以及冷幽默)来自于作者深厚的技术素养,而非自大的偏执。

除了上面推荐的书籍外,Dov Bulka和 David Mayhew合著的《Efficient C++: Performance Programming Techniques》(《提高C++性能的编程技术》,清华大学出版社)也值得一看。这本超薄小书聚焦于高性能C++应用程序开发。两位作者都是IBM软件专家,都工作于对性能要求极高的系统构建领域,本书是他们的经验之谈。也有人不喜欢这本书,因为它花了不少的篇幅讲述和C++无关的东西,我却恰恰因为这一点而对这本书产生好感,正是这些东西让我开阔了眼界。

模板和泛型编程

模板和基于模板的泛型编程无疑是当今发展最活跃的C++程序设计技术。模板的第一个革命性的应用是STL,它将模板技术在泛型容器和算法领域的运用展现得淋漓尽致,而Boost、Loki等现代程序库则将模板技术的潜能不断发挥到极致。在模板和泛型编程领域,我推荐以下两本重量级著作:

David Vandevoorde, Nicolai M. Josuttis, C++ Templates: The Complete Guide
《C++ Templates全览(繁体版)》,台湾碁峰资讯股份有限公司
《C++ Templates全览(简体版)》,人民邮电出版社

有一种老套的赞美一本书的手法,大致是“没有看过这本书,你就怎么怎么地”,这里面往往夸张的成分居多。不过,倘若说“没有看过《C++ Templates: The Complete Guide》,你就不可能精通C++模板编程”,那么这个论断对于世界上绝大多数C++程序员来说是成立的。

这本书填补了C++模板书籍领域由来已久的空白。此前,上有《Modern C++ Design》这样的专注于模板高级编程技术和泛型模式的著作,下有《The C++ Standard Library》这样的针对特定模板框架和组件的使用指南。然而,假如对模板机制缺乏深入的理解,你就很难“上下”自如。鉴于此,我向每一位渴望透彻理解C++模板技术的朋友推荐这本书。

这本书在内地、台湾各有一个译本,但出自不同的译者之手。当你看到这篇文章时,两个译本应该都已经上市,对于读者来说当然也就多了一种选择。侯捷先生个人网站上开放了繁体译本大部分章节,不妨先睹为快。

Andrei Alexandrescu, Modern C++ Design: Generic Programming and Design Patterns Applied
《C++设计新思维:泛型编程与设计模式之应用》,华中科技大学出版社
《C++设计新思维(影印版)》,中国电力出版社

你自认为是C++模板编程高手吗?请看过这本书再回答J 这是一本出自天才之手令人敬畏的杰作。泛型模式,无限延伸你的视野,足以挑战任何一名C++程序员的思维极限。

这本书共分为两大部分,第一部分讨论了 Loki程序库采用的基础技术以及一些高级语言特性,包括基于策略的类设计、模板局部特化、编译期断言、Typelist以及小型对象分配技术等。第二部分则着重介绍了Loki中的重要组件和泛型模式技术,包括泛化仿函数(Generalization Functor)、单件(Singleton)、智能指针、对象工厂(Object Factory)、抽象工厂(Abstract Factory)、访问者(Visitor)以及多方法(Multimethods)等。每一种技术都让人大开眼界,叹为观止。

在C++的学习方面,过犹不及往往成了不求甚解的借口。然而,面向对象并非C++的全部,模板和泛型编程亦占半壁江山。对于“严肃”的C++程序员而言,及时跟进这项早经例证的成功技术,不失为明智之举。

结语

这些著作是如此大名鼎鼎,也许根本不缺我一个推荐。然而,纵然C++程序员队伍的发展壮大速度不像其他更时髦的语言那样迅速,新人进总是多于旧人出。除了热忱地欢迎新人,我个人认为到了对C++书籍进行“盘点”的时候了,并且希望这样的“盘点”有益于感兴趣的读者。请保持耐心和宽厚。在下篇中,我将继续介绍标准库、网络编程以及其他方面的C++好书。有好书相伴,这个冬天不会冷。

荣耀
2004年1月
南京师范大学




下篇

我在上篇中“盘点”了TCPL和D&E以及入门教程、高效和健壮编程、模板和泛型编程等方面共十几本C++好书。冬去春来,让我们继续C++书籍精彩之旅J

标准库

当我还在研究院工作时,与同院另外两家研究所合作开发过一个大型水利枢纽调度集成项目。我们三家软件系统之间都要相互通信。在调试通讯模块时,细心的客户(一名好学的系统管理员)发现对于同一通信规约的解释代码,我的不超过30行,而对方的则超过了150行且很难看懂。这位系统管理员很纳闷,我说大家编程风格和习惯不一样,我使用了标准库,而他使用了传统C编程风格以及他所习惯的另外一些技术。

别误会!我绝无贬低这位合作伙伴的意思。事实上,我对那些真正有着深厚的C编程功力的程序员常常怀有钦佩之心。毕竟,C++能有今天的成功在很大程度上缘于它深深地植根于C。作为一名C++程序员,倘若不熟悉C++中的C,我往往会认为他的基本功是不扎实的,他的技术底气是不足的。

不过话又说回来,C++是一种多范型(paradigm)编程语言,具体采用哪种编程风格,专业程序员应该知道视具体情况而定。作为一名经常需要在现场做即兴开发的项目负责人,为了短平快地解决当务之急,我习惯尽量采用现有的库(和组件)。效率(以及强健性)久经验证的C++标准库已经摆在那儿了,何乐而不用呢?

Nicolai M. Josuttis, The C++ Standard Library: A Tutorial and Reference
《C++标准程序库:自修教程与参考手册》,华中科技大学出版社

这是一本百科全书式的C++标准库著作,是一本需要一再查阅的参考大全。它在完备性、细致性以及精确性方面都是无与伦比的。本书详细介绍了每一标准库组件的规格和用法,内容涵盖包括流和本地化在内的整个标准库而不仅仅是STL。正如本书副标题所示,它首先适合作为教程阅读,尔后又可用作参考手册。

浅显易懂的写作风格使得这本书非常易读。如果你希望学习标准库的用法并尽可能地发挥其潜能,那你必须拥有这本书。正如网络上所言,这本书不仅仅应该摆在你的书橱中,更应该放到你的电脑桌上。我向每一位职业C++程序员强烈推荐。

Angelika Langer, Klaus Kreft, Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference
《标准C++输入输出流与本地化》,人民邮电出版社

C++标准库由STL、流和本地化三部分构成。关于STL的书市面上已经有不少,但罕见流和本地化方面的专著。本书是这两个领域中最优秀的一本,迄今为止没有任何一本书比这一本更全面详尽地讨论了流和本地化。如果你不满足于停留在“会用”流库的层面,千万不要错过它。

2001年夏天,我草草翻阅过这本书的中文版,从内容到包装都给我留下了比较深刻的印象 — 不过负面的居多一些。2003年秋天,无意中得知某网络书店正以超低价格甩卖这本书的中译本,情不自禁,一阵唏嘘。

Scott Meyers, Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library
《Effective STL(影印版)》,中国电力出版社

读完Scott 的《Effective C++》和《More Effective C++》的中译本之后,我一直期待这本书的中文版。我从潘爱民先生的个人主页上了解到,他和他的合作伙伴似乎早已完成了这本书的翻译工作,可惜至今市面上仍不得见。幸运的是,我们可以看到它的原版。

本书是使用STL的程序员必读之作。在这本书中,Scott向我们讲述STL容器和算法的工作机制以及如何以最佳方式使用它们。和Scott的其他作品一样,这本书的写作风格清晰、精确,具有极佳的可读性。看过这本书以后,我想你也许会和我以及其他C++程序员一样产生这样的想法:Scott什么时候会写出一本“More Effective STL”?

关于STL,我还提醒你留心Matthew H. Austern的《Generic Programming and the STL: Using and Extending the C++ Standard Template Library》(《泛型编程与STL》,中国电力出版社)。这本书散发着浓厚的学院气息。Andrew Koenig和Barbara Moo在《Accelerated C++: Practical Programming by Example》一书末尾郑重推荐另外两本进阶好书(除了他们自己的《Ruminations on C++》外),其中一本是TCPL,另外一本就是本书!

网络编程

在网络编程时代,C++应该扮演着怎样的角色,让ACE(Adaptive Communications Environment)来告诉你。

Douglas C. Schmidt, Stephen D. Huston, C++ Network Programming, Volume 1: Mastering Complexity with ACE and Patterns
Douglas C. Schmidt, Stephen D. Huston, C++ Network Programming, Volume 2: Systematic Reuse with ACE and Frameworks
《C++网络编程,卷1:运用ACE和模式消除复杂性》,华中科技大学出版社
《C++网络编程,卷2:基于 ACE 和框架的系统化复用》,电子工业出版社

采用C++进行企业级网络编程,目前ACE(以及这两本书)是一个值得考虑的选择。ACE是一个面向对象、跨平台、开放源码的网络编程框架,目标在于构建高性能网络应用和中间件。Douglas是ACE的创始人,Stephen则已为ACE提供了数年的技术支持和顾问服务,两位都是ACE社群(是的,ACE的影响和实际应用的程度已经形成了一个社群)的专家。

ACE并不单单被大学和研究所追捧,它已经被成功地应用于世界上成千上万个商业应用中。在电信、宇航、医药和财经领域的网络系统中,ACE已经并继续发挥着重要的作用。如果你准备开发高性能通讯系统,你应该考虑考虑这一汇集世界顶尖专家智慧的成果。

除了使用C++面向对象设计技术和模板等高级语言特性外,ACE还运用了大量的模式。《C++网络编程》卷1和卷2并不仅仅教你关于ACE的方方面面,它还会教给你模式和通用框架设计等高级技术等。所以,作为一名中、高级C++程序员,即使你很少进行正儿八经的C++网络程序设计,阅读这两本书同样可以从中受益。

是的,并非所有网络应用都要使用Web服务器(以及其他应用服务器)和重量级组件模型,换个思路,它们或许也可以从轻量级的ACE组件中获益。

杂项

以下这几本书之所以被列入“杂项”单元,只是因为我没有考虑出更合适的归类方法,它们和上面的书籍一样,值得一读。

Bruce Eckel, Thinking in C++, Volume 1: Introduction to Standard C++ (2nd Edition)
Bruce Eckel, Thinking in C++, Volume 2: Practical Programming (Second Edition)
《C++编程思想(第2版)第1卷:标准C++导引》,机械工业出版社
《C++编程思想(英文版 第2版)》,机械工业出版社

《Thinking in C++》的第1版于1996年荣获“软件研发”杂志评选的图书震撼大奖。最新推出的第2版对内容进行了大幅改写和调整,以反映C++标准化带来的影响以及近几年面向对象领域最新研究和实践成果。“输入输入流”、“多重继承”、“异常处理”和“运行时类型识别”等高级主题连同C++标准化以后增加的一些内容则被放入第二卷中。Bruce是一名经验丰富的C++讲师和顾问,其培训和写作经验都是世界一流水准,他的作品比那些“玩票”的技术人员写的东西更能吸引读者。事实上,在同类图书中,对于大多数读者而言,这本书的可读性要超过TCPL和《C++ Primer》。顺带一提,访问作者的站点,你可以先睹第二卷的风采。

Andrew Koenig, Barbara E. Moo, Ruminations on C++: A Decade of Programming Insight and Experience
《C++沉思录》,人民邮电出版社

Andrew是世界上屈指可数的C++专家。这是一本关于C++编程思想和程序设计技术而非语言细节的著作。如果你已经具有一定的基础,这本书将教你在进行C++编程时应该怎样思考,应该如何表达解决方案。整本书技术表达透彻,文字通俗易懂。Bjarne这样评价这本书:本书遍布“C++是什么、C++能够做什么”的真知灼见。

Stanley B. Lippman, Inside The C++ Object Model
《深度探索C++对象模型》,华中科技大学出版社
《深度探索C++对象模型(影印版)》,中国电力出版社

从编译器的角度观察C++可以使你知其然并知其所以然。本书探讨了大量的C++面向对象程序设计的底层运作机制,包括构造函数、函数、临时对象、继承、虚拟、模板的实例化、异常处理、运行期类型识别等,另外还介绍了一些在实现C++对象模型过程中做出的权衡折衷。喜欢刨根问底的C++程序员不要错过这本书。

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented software
《设计模式:可复用面向对象软件的基础》,机械工业出版社
《设计模式:可复用面向对象软件的基础(英文版)》,机械工业出版社

设计可复用的面向对象的软件,你需要掌握设计模式。本书并非专为C++程序员而写,但它采用了C++(以及Smalltalk)作为主要示例语言,C++程序员尤其易于从中受益。四位作者都是国际公认的面向对象软件领域专家,他们将面向对象软件的设计经验作为设计模式详细记录下来。这本书影响是如此深远,以至于四位作者以及本书都被昵称为GoF(Gang of Four)。本书学院气息浓厚,行文风格严谨简洁,虽然它不如某些讲解模式的书籍易读,但真正要精准地理解设计模式,本书是终极权威。学习设计模式,这本书需要一而再、再而三的咀嚼。顺带一句:请将设计模式化作开拓思维的钥匙,切莫成为封闭思维的枷锁。

还有一些C++好书值得一读,恕此处无法一一列出。例如John Lakos的著作《Large-Scale C++ Software Design》(《大规模C++程序设计》,中国电力出版社)和侯捷先生的《STL 源码剖析》(华中科技大学出版社)等。

《STL 源码剖析》是一本很有特色的书,但我认为它还可以更好。我个人期待侯捷先生自第一版发行以来经过对模板技术的沉淀和再思考之后,再写一本剖析得更深入、更透彻并且更全面的“第二版”。遗憾的是,侯捷先生在完成《C++ Templates: The Complete Guide》一书的翻译后似乎决定暂时告别模板、泛型编程和STL领域。

2004年3月31日补充:我目前最常查阅的两本参考书是《C++标准程序库》和《STL源码剖析》。当然了,这与我年内的写作计划有很大的关系。

使用C++成功开发大规模软件系统,不仅需要很好地理解大多数C++书籍中讲述的逻辑设计问题,更需要掌握《大规模C++程序设计》中讲述的物理设计技术。当然,这本书的确有点过时了,不过,如果你的精力和金钱都比较宽绰,买一本看看并无坏处。

至此,我想有必要声明一下,有一些(好)书没有得到推荐,主要原因如下:

* 以上这些书已经足够多、足够好了。
* 我不会推荐通过正常渠道很难购买到的书籍 — 不管是中文版还是英文版。
* 作(译)者名气大小不影响我的推荐。我们是在看书,不是看人。
* 我不会推荐我从来没有看过的书。我至少要看过其中的某个版本(包括电子档)。这个“看”,一般指“认真阅读”,不过有一些也只能算是“浏览”。

结语

作为一名普通技术写译者,我深知技术创作和翻译的艰辛(和快乐),并多多少少了解一些有关技术书籍创作、翻译、制作、出版以及市场推介背后的细节。今天,我不会再对一本看上去差强人意的图书信口开河。罗列同一本书的各种版本的用意只在于为你多提供一些信息,让你多一种选择。

在本文成文的后期,我给Bjarne写了一封信,请教如果他来写这篇文章会怎么写。他给了我简明扼要的建议。在肯定以上列出的绝大部分图书都是世界顶尖水平的C++著作的同时,Bjarne提醒我别忘了向专家级程序员推荐《The C++ Standard : Incorporating Technical Corrigendum No. 1》。这本书是 C++标准规范的“图书版”,Bjarne亲自为之作序。

Bjarne还友好地提醒我,在我的推荐列表中没有哪一本有助于C++程序员进行Windows编程 — 这正是我的本意。在这篇文章中,我只推荐、点评平台中立的C++著作(网络编程除外) — 和操作系统无关,和集成开发环境无关,我甚至幻想它们和编译器也无关。你可以根据业务开发需要,选读自己喜爱的领域相关的C++书籍。

说到“系统无关、平台中立”,我不由得想起了“抽象层”的概念。开发实际应用的C++程序员通常工作于特定操作系统、特定开发环境和特定业务领域之中,而对标准C++和C++标准库扎实而深刻的把握,无疑是你得以在不同的操作系统、不同的开发环境以及不同的业务领域之间纵横驰骋的“抽象”本钱。

荣耀
2004年1月
南京师范大学





[收藏]读博士的一点感受

from TsinghuaBBS

读博士人人都要经历一段很艰难的时候,所以国外把读博士的过程开玩笑为“Survive”。但是,我觉得这个“Survive”虽然是有很大挑战,需要镇定去承受,但是它是向上的、主动的和有希望的。

觉得在读博士期间,选择导师和增强自我学习能力很重要。

选择导师至少要看三点:(1)导师的人格。一般一个好的导师,他很谦虚、活跃、给博士生一个很宽松自由的研究氛围,并且很信任你,知道你一直在努力和刻苦工作;(2)导师研究方向、论文发表情况和项目。因为读博士很多时候会变成自我探索过程,在这个过程的初始,需要导师领进门,因此导师的研究方向中有你一个很感兴趣的题目,并且这个题目的确有很多可以做的地方,这样你才能有发挥的余地。要注意的是,很多导师的研究课题(主要指纵向课题)不可能保证给每个博士生一个,所以先进来的博士可能会起步早些。但是,我感到,其实一个纵向课题可以研究的地方很多,若干个人都可以找到可以独立研究方向,不需要讲,某个课题已经有个博士在做了,我要等个“全新”的课题。导师的论文发表情况之所以重要,是因为这表明他还是有时间在做学问。(3)导师是否有过几个很能干的学生。古人有话,“青出与蓝,而胜于蓝”。如果导师手下曾经出过几个很不错的学生,这至少给你一个信号,你也可以在将来成为很不错的学生。当然,一般而言,这些很不错的学生大多出国了。如果导师手下有在读的不错学生,至少可以有个讨论的环境。

读博士期间的自我学习能力也很重要:(1)有很多事情可以比导师发挥更大的作用。如Internet其实就是一个很好的导师。通过它,我们可以访问最好的国际会议,最好的研究所,你研究领域最好的导师以及PHD学生。如,做人工智能研究的同学,可以到MITAI站点(www.ai.mit.edu)Download一批很有价值的参考文献。跟踪国际高档次会议论文、Workshop论文很重要,它会反映你这个学科研究领域最新进展。你也可以通过www.google.com和www.researchindex.com找你需要的文献。一些大的公司,如Microsoft(www..research.microsoft.com)和IBM(www.research.microsoft.com)站点上,也会有一流研究人员研究成果的文章;(2)事在人为。自我学习能力还要求自己始终是一个主动的人。三年时间很快,自己要多花些时间,多在相关领域做些深入研究;(3)我觉得读博士是一个心情成长的过程,到最后,你的确知道where you are going和what you are doing,是一个自信心成长的过程。

要特别提醒的是,国内研究水平和国外差距很大。所以,你要始终知道,国外在你研究领域,目前主流方向是什么,最著名的会议是什么,最著名大学的研究所是什么,最著名的导师是谁,最活跃的几个博士生是谁。这样,你毕业后,就有进一步学习的动力了。

本科生直接读博士,肯定需要至少一年半时间来进行角色转换。不要着急,慢慢来就可以了。

写下上面这些感受,肯定有很多不对的地方,诚恳接受大家指正。

2006年11月1日

[收藏]女博士写实:为留校而读博


  “学术和我的博士头衔无关”

  “如果硕士就能留在高校当老师,我肯定不会继续读博。”当老师一直是郝严的愿望,留在高校对她来说更是一个理想。

  今年刚开始念心理学博士研究生一年级的她,正一步步把这个理想变成现实。

  在笔者的大量采访中,半数以上的女博士生表示,自己选择读博并没有什么宏大的理想,只是希望“能获得更高的生活质量”,同时,80%的女博士期望毕业之后能够留在高校工作。

  郝严便是其中之一。虽然博士生的课业很辛苦,但她很满意自己目前的生活状态。“觉得会有一个自己喜欢的未来。三年的博士毕业之后,便能够成为高校教师,这对我来说实在是个诱惑。”

  “高校教师”,对郝严和很多女博士生来说,的确是一个很好的职业选择。

  在大部分女博士生眼里,“在高校”意味着一种很受女生欢迎的生活方式:更多的自由时间,更多的学习机会,良好的社会声誉,还有单纯安静的就业环境之类。对她们而言,“博士”是一个漂亮的头衔。

  郝严说,“博士头衔和我要做的研究没有什么联系。学术上的追求在我看来和博士头衔无关,做研究的能力也不需要用这个头衔来证明。可现在我需要它,它能让我过上自己想要的生活。”

  她补充说:“这就好比两个人相亲相爱,不用结婚也一样可以住在一起,过着亲密的生活,不需要去领一张结婚证来证明什么。但是如果想要得到法律保护和社会承认的话,结婚证是必不可少的。”

  “博士头衔之于我未来的工作,就好比结婚证之于恋人间的法定关系。”她笑着说。

  这个有趣的观点得到了大部分女博士的赞同。

  读博的郝严有了更多的自信,她说这是一种“可进可退”的自信。“一方面能够留在高校,跟学生打交道,接触一些新鲜的课题,对心理研究肯定是有益处的。另一方面也可以出去参加一些社会公益活动,做一些课题研究,想回来的时候再回来。”

  针对这一现象,北京大学中外妇女研究中心祖嘉合教授分析说:“在最近开展的一项女性角色的调查中,事业成功型、相夫教子型和两者兼顾型中,70%的女性希望自己成为第三种类型,既能在事业上获得成功,也能照顾好自己的家庭。”

  祖教授分析说,“留在高校工作,在一定程度上能够使她们的这种愿望有得到实现的机会。一方面高校不用坐班,时间上有很大的自由;另一方面,也能兼顾自己的事业。事业和家庭能够很好兼顾,这就不难理解为什么很多女生为留高校而读博士了。”

  两代女博士“大不同”

  2004年,吴笛考上了中科院的博士生,研究生物遗传学,今年上二年级,论文、实验、工作一系列的压力已经扑面而来了。

  吴笛的婆婆是上个世纪70年代的农学博士,退休之前是某农业大学的教授,是一位很有名的农学家,在杂交作物的研究上很有建树。

  “走一步看一步”是吴笛经常挂在嘴边的话,她说工作和论文的压力让她渐渐对未来不抱太高的期望了。“当压力已经到了一个顶点之后,也就麻木了,再多的麻烦也觉得没有什么了。”

  儿媳妇的压力让婆婆很不解,她不明白为什么现在的孩子好像读书越多反而越焦虑了。

  “我们那时候怀着多大的学术热情啊,山坡上田地里的白菜萝卜,就像是自己的孩子一样”,婆婆说,“当时哪里想过那么多啊,什么工作啊待遇啊,国家会给安排的,完全不用为学术以外的东西费心。我们博士毕业的时候,简直就是指点江山,意气风发啊!现在的博士还真是不一样了。”

  “越是不好的专业,博士越多。”吴笛这样埋怨。空闲的时候,吴笛会跟其他女博士生一起谈论一下未来的打算,在生物科技如日中天的时候,她们却觉得自己学的是“很不好”的专业。“平时不觉得,一到找工作的时候就显出来了。越不好找工作就越想往上读,博士越来越多也就不奇怪了。”

  婆婆今年已经快70岁了,但是还经常受邀参加国内外的一些研讨会,日子过得满当当的。每当吴笛因为工作和试验压力不住地叹气时,丈夫就会打趣:“真纳闷,生活在同一个屋檐下的婆媳俩,都是博士,差别咋就那么大哩?”

  吴笛说:“我也热爱自己的研究,否则不会想去大型的实验室锻炼自己,读博期间也学到了很多,但是压力却一直都在,而且从来没有觉得自己是精英。”

  硕士研究生毕业后,吴笛曾试着在一家研究所工作过一段时间。试验室的那份工作惟一吸引吴笛的就是没有固定的作息时间,但是整天和瓶瓶罐罐打交道,一天也看不到几个人的工作让她觉得枯燥极了。

  她很羡慕婆婆那种纯粹的状态,“我们俩一起在书房看书时,一个是呼啦啦地翻,一个是一行行地用手指着看。”

  “她们那一代人有着很强的社会使命感,她的那种感觉让每一个人都觉得她很重要,仿佛没有她们,油菜花就开不好。和她比起来,我这个博士念得糊里糊涂。”

  “我们现在需要考虑更多其他的问题,比如收入、生存,在这个都市中想过什么样的生活等等,所以只要学术上能跟得上别人,自己能过上喜欢的生活就好了。”

  北大中外妇女研究中心的祖嘉合教授说:“上世纪六七十年代的人有着更浓厚的理想色彩。这是和社会整体环境分不开的,当时提倡‘男女都一样’的口号,虽然一定程度上抹杀了男女之间的性别差异,但是总体看来,那是一个充满激情的年代。而现在的市场经济,需要人们更多的考虑理想和现实的结合。”

  在和国外一些研究机构的交流中,祖教授发现,中国以外的其他国家,女博士们也同样面临各种各样的压力。

  “结了婚,经济上的压力小了,接着读博能多一个选择的机会。”去高校也是吴笛的期望,“一方面专业不会丢,还有更多跟学生接触的机会,我是个喜欢热闹的人。”

  “女性似乎还是更适合感性一点的工作,我们的学科越到后来,需要的逻辑能力越强,优秀的女性研究者也有,但是相比男性而言,还是要少很多。”吴笛这样给自己下台阶。

  “读博面前男女平等”

  李晓蓬就要结束在北京语言大学的博士生生活了。语言信息处理的专业需要大量的数学知识和较好的编程能力,这让一直念文科的李晓蓬应付起来有些难度。

  李晓蓬把自己的博士生女同学分为三种人,一种是已经有了很好的工作,一边读博一边工作,读博完全是为了再充电,在既有的岗位上得到更好的发展;一类是工作不如意,很多自己想要的东西没有,或者压力很大,读了博士能找到更好的工作,提高自己的生活质量;还有一种就是她这样的,“不知不觉地一直读了上来”。

  李晓蓬读博前,并没有什么清晰的人生目标,既然一直在学校念书,就不妨按部就班念下去。这种生活,简单纯粹。谈到自己以后的打算,她说自己没有很大的为科学献身的精神。“可能我是一个比较务实的人。没有什么目标,但每一步都会走好,不管这一步有多小。”

  她很喜欢韩剧《浪漫满屋》里面宋慧乔扮演的智恩。智恩虽然刚一开始生活就遇到坎坷,但她能够走好每一步,认真解决遇到的每一个困难。“她稀里糊涂挺可爱的,没有什么大的志向,但也还算是踏实,最后也很幸福,我挺喜欢她的。”

  和李晓蓬比起来,同样来自农村的吴巧平,今年成为北京化工大学的博士生,她的读博目的就要明确很多:“在职场,女性的待遇显然不如男性,就业压力要大得多,而起码在读博面前人人平等。”

  吴巧平的家乡是西部一个国家级贫困县。身为小学教师的父母一边种地一边教书才把她和妹妹供了出来。她们的妈妈说:“在中国,不管什么时候,多念点书都没有错。”

  读博前,吴巧平曾在一家国有企业工作过,这是一段不愉快的工作经历。她说,虽然女性同样认真,但是社会上普遍还是把更多机会无条件地给了男性竞争者。她举例说:“我曾多次表示自己可以出差,但是公司从来没有给过我机会,而男同事在这方面显然占有更多的优势。公司里组织考察学习,向来都是派我的男同事去,我没有参加过自己感兴趣的研讨会,也没有机会直接接触新鲜技术。”

  吴巧平亲身体会到,在职场上女性似乎天然处于劣势,从求职到发展机遇到继续深造,竞争激烈的职场总是青睐男性。

  厦门大学人口研究所副所长叶文振说,大部分用人单位认为女性因生理特点会增加劳动成本,这无疑使得在同等条件下男性会有更多的发展机会。也就导致女性常常想要在其他方面提高自己,从而获得更多可以和男性竞争的优势。

  巧平的妹妹吴巧燕今年要从美国的俄克拉何马大学博士毕业了,学的是机械自动化。“总想要不断提高自己,这一点我们姐妹俩很像。”

  “本科毕业时,相同条件下不如其他男生,但是读了研就不一样了,博士毕业之后,应该更好一些。”

  “由于社会上根深蒂固的男强女弱的观念,很多女性不得不降低自己的标准,女博士和男硕士竞争,女硕士和男本科竞争的现象不可能瞬间消除。在实际工作中,社会对男女的标准是一样的,女性需要不断地提高自己,这是一种对社会激烈竞争的应对,也可以理解为一种妥协。”祖嘉合教授这样说。

  越洋电话里,除了互相叮嘱要经常锻炼保重身体之类,姐妹俩说的最多的就是未来。“我们总是想着毕业之后找份好工作,过更好的生活。我们互相鼓劲,肯定会有一个很好的未来的。”

  “如果毕业之后能去高校当老师当然很好了,不丢专业,生活质量也更好。但是不去高校也行,找一份可以解决户口的工作,多挣点钱,早点把爸妈接到北京来。”

  巧平坚信姐妹俩能够实现这样的愿望。“已经有学校开始想要巧燕来工作了。”