陈中正的网络日志

为什么要写博客?

        写博客会花费一些时间,因此有时会想为什么要写博客?

        因为感觉写博客是一个思考、总结的过程,有人说“读书说明你学会了学习,而写作说明你学会了思考”。通过写作,把学习的东西加以总结、凝练,真正变为自己的东西。

        第一次接触到博客是在CSDN的一个校园讲座上,讲座中那个CSDN讲师各种宣扬写博客的好处,什么找工作好找,什么因为一篇博文被IT大佬所赏识,blabla……反正一堆好处,当时就想写博客真是太特么牛掰了,高端大气上档次,于是兴冲冲的跑去申请了一个博客。

        博客申请初期也写什么特别有用的东西,只是转载一些技术文章以及一些杂文,再往后开始写一些简单的学习笔记,转载一些好的文章。再后来看到了一些牛人的博客,写得确实很好,再加上看了一些东西,也开始写一些博客了,写到现在,感觉不错。

        关于为什么要写博客,刘未鹏的博文“为什么你应该(从现在开始就)写博客”和池建强的博文“写作即思考”都有所讨论,对于他们的许多观点也感到十分赞同。当然自己还远远达不到他们的层次,不过有一点是mac君很赞同的,就是要学着开始写博客,或许一开始的时候质量不高,但这是一个开始。写作的过程就是一个思考的过程,写作会推动自己开始思考。

        感觉写作就是一个函数定义的过程。在写作的时候,往往会就某一个问题进行思考,这个问题自己已经思考过很多次,终于有一天自己觉这个问题已经想得小有成果了,可以进行一下总结了,于是就写了一篇文章。

        这就好比是在定义一个函数,或者定义一个类。在函数中,对这个问题的各种情况(函数的各种参数)进行了分析,因为要兼顾到不同的情况(不同参数),因此在定义函数的过程中就会进行一些思考。同时为了保持结果的准确性,就会对事物的推理过程有一个显性的思考的过程:毕竟这不是写私人的日志,而是要写给人看得,事物的推理要过得去才行。最后总结出了一些结论(函数的返回值),这样当再次遇到这个问题时,直接调用这个函数就能直接得到返回值了。另一方面,写出来的文章可以作为一个类来使用,类的一个特性是可派生:在这个类的基础上,可以对其他的一些东西进行思考,进而派生出一个更加复杂问题的思考,而这些思考可以写成另一篇博文(另一个子类),通过这样的方式构造对这个世界的理解。

        相比与只思考不写作的方式,写作一方面能够加深记忆的印象,另一方面对问题有一个更加明确的逻辑。刘未鹏在博文中有过一个比喻:思考的过程就好比是一个打着灯笼探路的过程,因为人大脑的能力有限的(科学测试人只能同时进行7+-2的思考),在探路的过程中往往会迷失了方向。如同在进行深度优先遍历时,走到一个“树”的子结点上回溯不到上层节点了,这时通过写作就能对事物进行一个更加深层次的把握。还有一个优势在于,博文写出来是给人看得,别人看了之后可能会有一个思想的交流的过程,思维的碰撞产生智慧的火花,这算是写作的意外收获了。

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/9884047

『转』程序员职业规划发展路线图

 

锐哥准备为大家烹饪红烧鲤鱼,小丫主动要求跟锐哥学习烧鱼,这也使小蔡和大熊非常感兴趣变得积极主动。锐哥首先要求他们把配料准备好,小丫又进行配料准备任务分工,没有的配料分头到超市购买。用料如下:

鲤鱼(一斤半到两斤的鱼最好)、蒜头两头整的、姜片5~6片、小香葱3根、小红辣椒10个左右,分两段切(超市有的卖盒装的),辣豆豉(可用老干妈代替)1大匙、豆瓣酱2大匙、盐少许、鸡精1小匙、料酒1匙、清水2碗、1两纯瘦肉馅、植物油少许。

锐哥让他们注意,收拾鱼的时候要将鲤鱼鱼腹两侧各有一条与细线一样的白筋去掉,可以除腥味;在靠鲤鱼鳃部的地方切一个小口,白筋就显露出来了,用镊子夹住,轻轻用力,即可抽掉。大家七手八脚很快备齐了用料。

时间:6月10日 17点 地点:锐哥家 人物:锐哥、小蔡、大熊、小丫

锐哥边烹饪鱼边讲解说:“首先将收拾好的鲤鱼控干水,最好准备一条干净餐布或者厨房专用纸巾再将鱼上的水分吸干,油入锅烧热,把准备好的鱼放里面煎至黄色再翻面煎成黄色,将鱼装盘待用,如果你手艺到家,鱼也可以一直放在锅里进行别的程序操作。再将肉馅放入锅里炒,直到变色,放少许料酒,再接着放豆瓣酱还有老干妈和肉馅炒匀,这时姜片和整粒的蒜也放进去小炒一分钟,把煎好的鱼再放进去,加两碗水放入小红辣椒。

“这会可以放一点点盐,因为豆瓣酱和老干妈里都有盐味,再放鸡精粉盖上锅盖,改中小火烧至汤快收干时把鱼装好盘,里面的汤剂留在锅里,把切好的小香葱放入锅里翻炒两下关火,将汤剂淋到鱼上。这道菜就做成了,看似复杂,其实材料都准备好做起来又快又简单。”

小丫品尝了一口称赞:“锐哥的手艺真不错!味道好极了,色泽红亮,蒜香浓郁,皮焦肉嫩,咸鲜微辣。”很快大家一起吃完了饭。

锐哥:“大家注意到没有,其实烹饪鱼的过程与一个人的职业规划的过程相似,从配料收集→加工→实现目标(红烧鲤鱼)。另外,职业规划非常重要的一点是要学会角色分析能力。大部分人在长期的工作中趋于麻木,对自己的角色并不清晰。但是,就像任何产品在市场中要有其特色的定位和卖点一样,在职者必须让自己有一些过人之处,让自己的价值和成绩得以体现并受到认可。”

小蔡:“在第一次钓到鱼的时候,我感悟到的就是因为对软件行业不了解,所以缺少一根结实的线将自己与梦想有序地串联起来,因此很难深刻体会到目标在自己掌控下挣扎时的力量。那么,通常程序员如何对自己的角色做分析呢?”

锐哥顺手在纸上画了几个图,说:“确切地说,你应该问程序员通常的发展路线是怎样的?你们可以看看这个图(如图3-1所示),当一个初步的职业规划方案已经成型时,如果制订者目前已在一个软件公司工作,那么,对他来说进一步的提升非常重要。首先要做的则是进行角色分析,反思一下这个职业环境对个人的要求和期望是什么,如何使自己在单位中脱颖而出。

1936235.jpg

图3-1

“通常,软件技术人员的职业发展有几个选择:专注于技术,成为技术专家;转型到技术型销售、技术支持等;随着技术成长,从技术性管理到高级管理。这是大家都看得清楚的方向,也都在向这些方向的金字塔尖努力。

“就像烹饪鱼一样,每一个阶段目标都需要你进行角色分析,找出这一角色需要的‘配料’,当你注意收集技术、素养等相关‘配料’后,就会成功烹饪出你所需要的目标鱼。前提是你一定要了解自己的特点和优势,就好比黄瓜种子是不可能培育成西瓜一样。”

锐哥继续说:“这归根结底,都是以技术为基础。在扎实的技术基础上(高级软件工程师),如果有着比较强的抽象设计能力,又打算专注于技术开发,架构师是个好的选择;如果性格更适合做管理,情商能力突出,技术型管理应该是下一步的方向。这种发展规划属于‘瘸腿走路’的类型,各有侧重主攻发展的职业方向,也是目前一般程序员普遍采用的发展路线规划。”

小蔡认真地看着图说:“程序员职业规划还有这么多学问!我看到每个角色配合的学历,那么学历和认证证书真的很重要吗?还有必要花钱参加社会技术培训吗?”

锐哥:“决胜点在于长期的点滴积累,认证证书、成绩、丰富的经历是求职的表面文章,在目前软件行业里不是很看中这个,真正的‘内功’是需要规划的。至于培训,我倒是很建议直接加入软件公司,你就会学到很多实际的东西。不过,学历教育虽然在职业生涯里不是主要的,但是随着职位的提升却有很重要的意义,能辅助拓展你的职业发展空间,而不是以此为阻碍从而失去更多的机会。 ”

“已经工作两年以上的程序员可以有几种基本的职业规划:技术专家、软件架构师、实施顾问或销售。其中程序员最主要的发展方向是资深技术专家,无论是Java、.NET还是数据库领域,都要首先成为专家,然后才可能继续发展为架构师。尽管架构师的职位可以工作一辈子,待遇也非常好,对于科班出身的程序员最为适合,但这种工作职位非常有限,因为在中国目前的IT行业,架构师需要的条件比较复杂,而且需求量也比较少,这也是我国软件行业走向国际并有待成熟的因素之一。”

大熊指着另外一张图说:“这个是综合才能型发展路线图(如图3-2所示),我听说目前国内缺乏的是管理能力和专业知识技能并驾齐驱的IT人才。是不是指着这种复合型人才?”

1936237.jpg

图3-2

锐哥说:“是的,特别是懂得运用目标管理技术的项目管理人才,既掌握核心技术又有全局掌控能力的项目管理人才,非常难找。我建议对于大多数人来说,首先是要专,只有在技术方向上做得比较深入,才能适当做工作调整,把自己转变为某个领域的专家。

“然后,根据自己的情况,决定自己做软件架构师还是高级的顾问销售,另外一部分人可能就会走向管理,这和个人性格与情商有关。软件优秀的管理者都必须懂得技术,掌握核心技能的人才向管理岗位转型有很大的优势,因而提升管理能力成了转型的关键。譬如,当唐骏还是微软一名普通程序员时,就从公司发展的角度考虑,向老板提议开发了中文版Windows,最终使他从几万名工程师中脱颖而出,成为部门经理。正如他所说,虽然是程序员,但自己不能只把自己当程序员,你可以为老板和公司着想。

“调查研究后,带着解决方案去找老板,就会得到老板的重视和信任,所以一定要增强工作主动性和参与性。无论是软件开发还是项目管理,国内员工大多只是做好份内事或完成交派任务,很少能主动发现问题。其实,只有拥有更高眼界,才能谋取大发展。

“总之,程序员要根据本身的基本素质、技术能力选择开发层次,由低到高,逐步发展。也是一名程序员本身具备相应素质的循序渐进的发展轨迹,包括很强的技术背景和综合管理才能等素养,这也就是所谓‘两条腿走路’的职业规划发展路线。”

小蔡:“原来技术转型还有这么多学问,受益匪浅。我打个比方,如果只是一名程序员,但仍需要站在项目经理的层面上看自己的工作,这样才能更好地合作,融入团队中,并且锻炼自己的思想境界,从而提高自己。”

锐哥:“小蔡说得是。另外,在未来发展上首先确定自己的发展方向和研究方向,在学习技术的同时还要为以后做准备,做好以后的技术转型。广度和深度是相对的,先广还是先深实质上从某种意义来说取决你的工作性质,如果你是从事单一工作的,多半你会短暂先深,因为这是你立足的根本;而如果你选择的职业是综合性的,比如管理、讲师等,那么你必然要先有广度才可以,但一段时间后,你都要转入深度,只有你在某一方面或领域有一定的深度后,你才能继续寻求广度,否则,你将什么都会,但什么都不精,这样的人在市场上是最难以立足的。”

大熊:“这张程序员发展路线图挺有意思,国际人才型(如图3-3所示),一定要求外语口语流利吧?”

1936239.jpg

图3-3

锐哥:“是的。如果说前面‘两条腿走路’要求的综合能力成分多,随着国际化相互联系越来越紧密,那么国际化人才可以说是当前更为便捷的程序员职业规划发展之路。目前,国际化软件项目经理是人才市场上炙手可热的人才,有丰富经验、外语口语好的软件项目经理是抢手的香饽饽,供不应求,薪水自然也是水涨船高。最重要的是,一个优秀的项目经理可以在这个岗位上长久工作下去,并且有向高层进一步提升的可能。外语好、技术又好的程序员发展路线很广,是目前国内外软件企业需要的热点人才。”

小蔡:“锐哥跟我们说了这么多,感觉对程序员、对软件行业的整体发展路线清晰了很多,但是我该用什么方法进行选择呢?”

锐哥:“要想正确地选择,你得必须充分地了解、分析自己,你要学会SWOT职业规划自我分析法。”

总结与提升

成功与失败的区别在于,成功者选择了正确而失败者选择了错误。因此,我们常常能够看到一些天赋相差无几的人,由于选择了不同的方向,人生却迥然相异。选择正确的方向尤为重要,希望不同的程序员根据自己不同的优势和特点能画出适合自己的程序员职业规划图。

软件开发也是有层次区别的,比如,按层次从高到低通常可分为:

系统开发:如操作系统、数据库系统、服务器系统开发;

专业开发:如网络安全、游戏、人工智能开发;

应用开发:如MIS、BI、ERP等系统开发;

普通开发:如网站、简单应用系统开发。

不同的层次,难度系数不一样,对技术要求、个人素质要求也不一样。要成为系统开发者、专业开发者、高级应用开发者,需要有很高的专业知识和很强的逻辑、抽象、空间思维能力,这就要求具有很好的基础,同时具有较大的提升潜力。而要成为简单开发者和初级应用开发者则相对容易些,正是这样,才使很多人走上了软件开发的道路。

(责任编辑:董建伟)

转自:http://tech.ccidnet.com/art/3089/20090908/1880563_1.html

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/8986086

关于在大学中如何学习的一点感悟

    一直以来中国教育以“填鸭”式的教学风格而闻名,最近在看了几本英文翻译过来的书后特别有感触。

    甭管学生想不想学,学了能不能消化,学了会不会用,只是一味的教授知识。

    上了(6+3+3+2)年的学终于对如何学习有了一点自己的感悟,在此与大家分享。

   

    中国填鸭式教育造成的问题:

    有人把学习总结了一个 "3W学习原则":Why、 What 、Why

    Why:为什么要学习这个知识,以及知识为什么是这个样子而不是那个样子的。

    What:这个知识究竟是什么样的。

    How:如何应用学到的知识。

    个人感觉只有从这3个角度认识了知识,学习了知识才能算是真正掌握了知识。国内的教学往往偏重的是 What 概念性原理性的讲解,以及 如何做题。关于 Why 和 How的部分却少有提及, 而Why 和 How,才是真正能够激起一个人学习兴趣的,而课堂上几乎不讲这些,学生也习惯了不问,最终在"填鸭式"的教育中逐渐失去了对学习的兴趣。

    为什么说 Why 和 How才是真正能够激起一个人学习兴趣的部分?我是这么理解的:知道了Why ,知道了为什么要学习这个知识,才能够体会到 学习这个知识的必要性。知道知识为什么是这个样子的,而不是那个样子的,才能够打心底里认同学习的知识,才能够体会到前人智慧的伟大之处,才能够油然的产生一种对知识的渴求。 知道了How,才能够知道学到的知识有什么用,才能够感觉到学习之后自己的一点一点的成长,才能够感受到自己应用知识解决问题之后的成就感。

    比如在大一和大二期间学习了 工科数学分析、计算机导论、数字电子、汇编语言, 学这几门课有共同点:

    1. 不知道为什么要学习这门课。尤其是数字电子,讲课老师显然不是学计算机出身的,只管将讲他的课,至于为什么要学习数字电子,对学习计算机的学生有什么用,为什么前人要总结出这些概念,一概不管。颇有种"我讲我的课,你们只管学,不要管为什么"的感觉。因而学习中一直很迷茫。

    2. 听着听着就听不懂了。课程一开始能听懂,但听着听着就听不懂了,而且作业不愿意做,上课不愿意听,根本没有一点兴趣。

    3. 考前抱佛脚,考完试就忘的差不多了。因为大部分考试知识都是考前一个周突击的,死记的知识学得快,忘得也快。

    总之,这种学习 自己不喜欢的东西的感觉是非常痛苦的。

    直到后来看了 Charles Petzold的《编码的奥秘》一书,才理解了为什么要学习 数字电子 和 汇编语言,并 唤起了对 计算机组成原理和 操作系统 浓厚的兴趣。因为他在这本书中阐述了 为什么要学习这几门课,为什么前人要总结出这些知识点,学习了之后有什么用,在看完书后,我不禁生出一种仰天长啸的感觉。如果当初上课老师按照这本书的思路,怎么会学的那么痛苦?!

    这个学期又学习了 计算机组成原理 ,由于这门书的原因,自己上课一直听的比较愉快,因为自己知道为什么要学习 这门课,学了有什么用,这些知识处于自己知识框架的哪一个部分。反观身边的同学,一如既往,学习的十分的痛苦,因为他们就根本不想学习这些知识呀!每每想到这些,我都十分庆幸遇到了这本书。

 

    如何在这种"填鸭式"的教育中学习

    在高中化学中,学习了两个概念"定性"和"定量",学习知识,既要定性的学习,又要定量的学习。好比学习一个化学方程式,只有知道了反应物和生成物是什么,才有可能 定量 的计算生成物。如果直接就定量的学习肯定会不适应。

    在中国这个现实环境中,课堂上只"定量"的教授知识,却不"定性",即不教授 Why 和 how,既然我们改变不了环境,只好适应这个环境,现在的关键问题就是:如何"定性"的学习,即如何知道学习知识的必要性,如何应用知识,进而激发对学习的兴趣?我认为可以从两个方面着手:

    1. 多看科普书籍。 这里的所谓的科普书籍就是指的那些 浅层次的讲授知识,扩大人的知识面,却不深层次的探究每个问题的书,也正是这类书能够引起人们对某些问题深深的好奇,引起人们对学习的兴趣。如之前提到的《编码的奥秘》一书,只是就某些知识做了"定性"的讲解,让人们知道为什么要学习这门知识,这门知识有什么用?至于深层次的探究——“定量”学习,正好放到课堂上进行。

    关于这些科普书籍,通常有这几种特点: 国内的不如国外翻译过来的,国外翻译过来的不如直接看英文原版(虽然我没能做到)。当然不否认国内也有一些好书。如何才能从茫茫书海中掏出这些 珍贵的书籍?

    一个好的途径就是 上豆瓣,在豆瓣上你可以看到每本书的评分,无数人已经对这本书做出了评分和书评,通过这些评分和书评,就能够权衡这本书究竟有没有必要读,适合什么阶段的人读,以后要注意的问题等。 

    2. 多实践。 记得有一个很牛的学长说过, 动手实践是学习最快的方式,因为为了使用知识而学习知识,这种感觉是非常棒的。在实践过程中,你不仅获得了学习的动力,更在实践过程中深入的理解了知识。

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/8914696

『转』大学里如何学习 ?

引子

唉,本实在不想发水文的,可还是发了,看来是周末闷骚咯,没兴趣的请赶紧飘过 ~~~

本篇博文其实是用来给在读大学生一点借鉴的,并不会讨论什么技术类的点 ,所以,不喜欢这种类型文章的也可以飘过,

但是如果各位有兴趣的且保有不同意见者,也可以提出,欢迎讨论,毕竟出来混的应该也看过了很多学校里所谓的大学生,

估计心里头对现在从大学里头招进来的各位小学弟小学妹也不咋的满意,而我也算是比较了解一些学生的,

所以,何不趁着周末一起出来指点一下他们呢?

                

           

致学生 - 大学最重要的不是 Java 和 .Net 而是基础,基础才是最重要的 !!!

在这里,我也主要是因为见很多大学生现还在学校里迷茫,毫无方向感,

而刚好自己周末有点闷骚吧,因此也站出来说两句话,希望不会因此受到人身攻击,

当然,我只是扯淡,说出我的建议,至于觉得发言不妥者,自可以飘过,也欢迎提出新的见解,

而这里我对大伙扯的两句,尤其适用于现还在大学里的各位学弟学妹们,

首先,现在大学里过多追求就业率,拿我们学校来说吧,是个二流学校,为了有好的就业率,

学校一直和校外培训机构进行合作,一直主推 Java ,甚至推出学生如果在某个培训学校培训的话,

是可以不用去上课的,这一点,我实在想不通,最后我给自己一个答案,那就是学校已经自认为比不上外面的培训机构了,

这个不得不说是一个悲剧哦 ! ! !

而后就是,我们学校里,好不容易有个博导给我们上课,但是悲剧又来了,博导上的课居然是计算机导论,

最差劲的一门了,唉,现在才发现,大学里真正教书的一般都是助教和讲师,博导可都是有自己的项目要做,

有自己的公司要开,有自己的人际网要拓展,博导这么忙,当然也就只能请个助教了,

这个其实才是现今大学教学的一个大悲剧 ! ! !

还有就是我本科学的是软件工程,大学里,我很悲剧我没有学过组成原理,编译原理等等基础课,

我们听讲座听的最多的居然是培训学校来的老师的演讲(基本上是推销),

呵呵,够悲剧了吧,希望各位的学校不会和我们学校一样 . . .

上面呢,就是我在学校时候的学习背景了。

          

然后呢,我再根据我自己的经历来谈谈我的看法,我呢,也算是个计算机行业的狂热分子吧,

自大一接触  C++ ,我一直都对这行业很感兴趣,曾经也经常在网吧上通宵(当然那会是为了学习  C++ ),

大一到大二上学期,我一直都是在黑框框里面(也就是 DOS 环境下)写着 C++ 程序,

也潜心写过汉诺塔,迷宫,八皇后等等经典算法题,

那会儿写的呢也很带劲,但一直没有接触过具体界面的实现,所以总是感觉有些不爽,因为总觉得那不是软件,

甚至都怀疑起  C++ 到底能够做什么用,现在想来那时候的想法真是幼稚啊,

并且自己也总是幻想着能够什么时候做一个具体的软件出来(那个时候总是觉得只有有了现在所谓的图形界面才算得上软件),

后来一次偶然的机会,我接触了 . Net ,然后,我发现,做图形界面是如此的爽呼呼,

于是乎,一个人拼命地学,拼命地学 .Net,然后开始拼命地写我那个时候我所认为的所谓的软件,

写一些数学工具,一些小游戏,也将一些诸如迷宫,八皇后的算法题从 C++ 改成 C# 写的应用程序,

然后就是做  Web  开发,学了很多很多,也做了很多的诸如什么什么的管理系统等等,

但一直都感觉不再向大一学习  C++ 那么正派了,有点说不出的感觉,

但也一直总结不出什么内容,

不过现在算是总结出来了,因为我过早的涉及了高级语言,而忽略了真正的基础  ! ! !

因为总结出来了结果,所以我也越发的思考大学里面,作为一个大学生到底应该要学的是什么?

总结了个人所认为的在技术上的几点内容,注意是技术上的,至于做人处事上的,我自己都做的不好,没资格在这里扯淡,

英语很重要,我的英语一直不怎么的,因为英语差劲我也吃了很多亏的,甚至我现在看英文资料,我都得开着金山词霸的划词翻译,

看起来的那个速度自然是不用说了,

曾经我也总是想,现在国内资料那么多,要英语干吗?呵呵,听我一句劝,好好学习英语吧,

因为你会发现,你真正要找的资料是某个不常用  API  的英文解释,而不是要找  HelloWorld  怎么实现的中文资料,

然后就是难道你以为任何一门语言都有向  MSDN  中  C#  这么全面的中文文档?那你看看  MSDN  中 VC++ 的文档吧 ! ! !

或许有人会说:为什么  C/C++  中文资料这么多?

天呐,难道你想一辈子跟在别人几十年后面,你知道  C/C++ 是一年出来的吗?难道,你愿意永远比别人了解到新知识晚几十年?

数学很重要,大学里,我数学一直都还不错,无论是高数,还是线数,离散,我都学得不错,也一直有些沾沾自喜,

但是到现在看来,我的数学,呵呵,悲剧,学得太烂了,数学的话,我觉得各位在校的,也听一句劝,学得越深越好,

曾经,我也总是觉得数学没一点用处,但是后来看了  OpenCV ,也和同学讨论了  OpenGL ,谈论了一些计算机图形学的内容,

也看了同事的一些不晓得是什么的东西,居然列那么多数学公式,关键是我一个都不懂,

此时我才发现,计算机的世界其实是一个数学世界,

你想深入了解计算机,那你得数学得学得非常牛逼,里头全是数学,所有的东西都是数学,

甚至让我觉得,计算机搞到很牛逼了的话,那么一定可以成为一个牛逼的数学家了,

或许各位会说,我只局限在我所了解的领域里面了,因为在  .Net 中,数学似乎一点都不重要呢,

但是我会反问,难道你又不是局限在 .Net  中了,

或许,你觉得微积分,常微分方程离我们很远,其实,你错了,它离我们很近,你总有一天会发现的,

呵呵,其实数学的重要不重要,关键在于你想不想真正的呆在这一行里面;

汇编很重要,弄到这里,应该会有很多人反对了,因为,向汇编这种东西,在搞 Java  和 .Net 的这些高级语言程序员眼里,

那早就应该是过时的内容了,呵呵,其实我以前也是这么觉得的,毕竟,有本事你拿汇编做个  Web 应用程序出来看看,

呵呵,以前多幼稚的想法啊,人家<<疯狂程序员>>里头的绝影就是弄的汇编,不晓得现在混得咋样咯,应该不会差那头去吧,

毕竟人家弄的是汇编,确实,那汇编做应用软件或者 Web 应用程序的话,确实太牵强了,但是为何我现在搞 .Net 这么多年了,

反而回过头来学习汇编了呢?因为我发现,我对内存的管理,对寄存器中的内容,对整个 .Net  的底层,对所有的一切都掌控不了,

曾经看一本书,好像是<>吧(一本  Sql  Server  方面的巨著,这里擅自推荐一下),

里面的作者就说了,计算机中最害怕的事情就是不可预料,无法掌控,

而且汇编语言中,对内存的寻址,以及寄存器的使用都有非常好的解释和频繁的使用,

通过学习汇编,你可以更好的理解地址总线,数据总线,控制总线和 CPU 以及内存之间真正的工作流程,

以及它们之间的一些最基层的协作关系,同时也能理会内存最真实的使用,

而不会向无头苍蝇一样,甚至连内存是什么都不知道,只会说,我只要分配内存即可,只要  new  就 OK 了,

当然如果你只想做到你所要的  new  的话,我也没有办法,我只能说你还不够狂热,不够专业,不是合格的程序员;

计算机组成原理和编译原理,计算机组成原理的重要性是不言而喻的,毕竟考研专业课中,这东西好像还占蛮大的比例的,

至于这编译原理吗,肯定又有人反对编译原理了,说,又不让你自己搞编译器,学什么编译原理,

呵呵,说的也不错,但是我想说的是,并不是你想搞什么你才去学什么,眼光放远点,

你会发现,你的世界里并不是只有 .Net  和 Java,

而且在编译原理这东西里面,你确实能够学到很多东西,就比如,如果当初设计  Java  的是你,

你会想到先将程序编译成字节码,然后再使用解释器来解释字节码吗?

我想,你肯定想不出的 ~~~

操作系统

操作系统,这个名词听着都感觉很严重,毕竟,在操作系统被  Windows  垄断的环境下,

也确实很难有人愿意接受操作系统是很重要的东东了,

甚至觉得学习操作系统就是学习如何在  DOS  环境下,敲个命令出来一大堆东西,

或者觉得学习操作系统就像是学习  <>一样,

能够打开个注册表,能够优化一下电脑,改变一下电脑启动画面,那就是学习操作系统了,

又觉得以后操作系统这东西就给微软去做吧,

如果你真这样想的话,那我只能说,真是个悲剧 ! ! !

我想说,如果你觉得操作系统不重要的话,那你真是错到家了,

大学里头,我一开始也是带着混的心态混过的操作系统课程的,

但是在考试前一个星期,我居然迷恋上了操作系统,那可真是作死的看操作系统啊,

整整在一个星期里,我拿着<<操作系统概念>>看了 2 遍,甚至在看完 2 遍中文版的之后,

我还准备去啃原版的,无奈英文水平太差,最后只能作罢,

经过了那次的操作系统的学习后,我自以为操作系统我掌握的还不错了,

但是后来,我发现,我一直都在追赶操作系统里面的知识,

从我写驱动程序开始,我就一直在追赶操作系统,为此,我重新学习操作系统,看  Windows  内核原理,

看  Windows  分析,看内存管理,看进线程调度,看  CPU  调度,看  I/O 管理,即插即用管理等等,

看了很多,至今我都觉得,我在操作系统这一块还很欠缺,很欠缺,我越往深处学习,我就觉得我越欠缺操作系统的知识,

现在也还正在打算到哪里再去找些什么资料来填补空缺呢,呵呵,说了这么多,

我只是想纠正现在大学里头很多人认为操作系统不重要这一观念,

操作系统真的很重要,很重要 ! ! !

C/C++,这两个东西我想不必多说了,只是在这里奉劝那些和我当年幼稚想法一样的说  C/C++ 做不了什么用的人,

如果这两个东西,你错过了,你补都补不回,

其实啊,我们被大学里头的老师害惨了啊,

曾经我的  C++ 老师就说,美国什么航空火箭发射上天后失败,直接掉了下来,照成  n  人死亡,损失惨重,

而这一切竟然是一个指针惹的祸,所以,我们  C++  老师就跟我们说,指针这个东西很危险,少接触为妙,

哈哈哈,真被害惨了,后来才发现 C/C++ 如果没有了指针,那就真的一点用处都没有咯 ~~~

还有,当年老师教  Goto  语句的时候,老师只讲了一句话:这东西,影响程序逻辑性,造成程序可读性差,所以大家禁用 ~~~

呵呵,现在出来,这个  Goto 语句也还是经常看到的

(这里我并不是推广使用  Goto 语句哦,只是有些东西,并不是说老师不教我们就可以不学的,也不是我们不学,以后就不会碰到要使用的情况的)

劝诫各位,千万不要看不起黑框框,来句形象点的:一切图形界面都是过眼浮云 ~~~

我最庆幸的是,我当初对 C++ 还执着过那么一年半,所以,也还算有一点点,也就是一点点底子而已,

拿最简单的说,人家  Windows  还是 C 写的呢,人家  Oracle  也是  C  写的呢,你还敢说  C/C++ 没用 ?

然后,那你又会说,那些都是做的系统集成,系统软件,

呵呵,那我现在给公司里写的也都是  C  写的呢,而且写的环境还是在黑框框里头写的呢 (Dos  环境下编译调试),

那你现在还会很鄙视黑框框吗 ?

数据结构和算法,对数据结构还好,在大学里,还是有很多人意识到了数据结构的重要性的,

而且,基本上上课的老师也会稍微强调一下数据结构的重要性,呵呵,所以,在大学里头,这门课缺课的人还是比较少的,

确实,如果等到各位将来研究一些稍微底层的代码时,或者如果有机会写系统软件的时候,

你会发现,底层里头的链表那个多啊,循环链表,双向循环链表,平衡数,顺序表,最小生成树等等用的到处都是,

当然啦,现在 C# 里头,大家或许很少有机会接触到了,要队列有队列,要表有表,要字典有字典,要什么有什么,

一般来说一个字典,一个  Array , 一个泛型基本上全部搞定,

但是忘了告诉各位,用得这么方便可是需要付出代价的哦  ! ! !

而对于算法的话,现在感觉越来越不受重视了哦,

甚至很多学校都不开算法课了,只是一个简单的数据结构带过而已,

所以很多人也都不晓得贪心算法,动态规划等了(说实话,我也不太懂了,不过打算有时间去补补),

都是高级语言惹得祸(注意,这里不是抨击高级语言哦),把算法都封装的那么好,

说实在的,如果真不做大的系统的话,算法这东西真的很多都可以不需要掌握了的,

但是,如果,这世界上每一个人都这样想的话,就不会有  Windows  ,Oralce 了,

殊不知,Windows  整个结构的复杂性,其中调度算法的使用,

也殊不知,Oracle  体系结构的复杂度,其中缓存处理算法的复杂度等等,

如果你只想在  .Net  上用用别人的东东,或者说是有空拿个循环玩玩的话,算法这东西确实跟你隔得很远了,

但是,难道你愿意这样???

你去看现在年薪高的程序员,哪一个不是算法高手?

呵呵,这就是差别哦  ~~~

数字电路和模拟电路,说到这里,更多意见应该会冒出来了,咱搞软件的,为什么要搞这些东西呢?

呵呵,如果真的不用搞这些东西,大学里就不会开这些课咯,博客园里头搞 .Net  的居多,搞  Web 开发和 .Net 应用软件开发的居多,

而现在市场上搞  Java  和  .Net 的又是居多,所以设计到数字电路和模拟电路的内容不多,

甚至是一片空白,所以也就觉得这两东西真是扯淡,说真的,我很能体会大伙的心情,因为我以前也是这样觉得的,

但是,大家眼光放开点,真的放开点,这个世界上真的就只有  Java  和 .Net 了吗?

而除了  Java  和  .Net  以外,很多其他地方,对于数字电路和模拟电路都是要求很高的,

尤其现在社会上很缺模拟电路方面的人才哦,而且,理解了这两个东西以后,对于自身理解程序的具体怎么跑的,

为什么能输出个字符,为什么能执行计算操作都是很有帮助的,而不会像一个码农,连自己在做什么都不知道,

这也就是所谓的不可预知 ! ! !

计算机网络,这个东西呢,说真的,也不好说,当今早就过了以前那个计算机只是用来做计算的时代了,

现在是网络的时代,如果你真不懂网络,说实在的,你连程序员都不适合,不要求你有多深的掌握,

但是  TCP,UDP 还是要分得清吧?TCP/IP 协议五层结构总的知道吧?

数据具体的流动过程也要有所了解吧,呵呵,都是很基础的东西啊,

可是,这些基础却是最重要的东西~~~

 

                       

总结

上面总结出来的几门课程,都是我认为大学里头,在计算机中最最基础的课程了,

但是,这些课程却被很多大学给忽略了,从而也被很多大学生给忽略掉了,

而诸如软件工程,数据库,软件项目管理之类的课程我在这里没有提及,因为,那一块过多涉及软件方向了,

会限制到一些思维,所以我没有提及。

现在的大学里(像我所在的学校),侧重点已经变咯,培养学生事小,捞到收入才是最重要的了,

学校为什么拼就业率啊?就业率高了,自然学生来得多,学生来得多,自然,国家给的钱多,

自然,腰包里钱更多,然后又大肆拼就业率,拼就业率,那就得多让学生接触所谓的现在社会上所需要的(Java  和  .Net  程序员),

如何培养出这样的程序员呢?交给培训学校吧 . . .

甚至,似乎今年还推出了一个新的专业,是和牛耳培训学校合作的一个软件外包专业,

呵呵,专业外包人才,靠 . . . 名字真好听 . . . 要我说,学校太不负责了 . . .

说实在的,以前,有一些不同意老赵对培训学校的观点的,

但是,现在看来,也还是有一些同意了(但培训学校确实还是有一些作用的,或许会培养人,但是我觉得也会害死人),

通观全文,可能有读者会觉得我在反对高级语言,其实,我一直都在努力地避开这个话题,

因为,我本身的意愿并不是反对高级语言,只不过,我觉得大学里头的学生,

尤其是大一,大二,大三的学生,他们不应该过早的接触到高级语言,

如果他们基础真的好了,那他们到哪里都可以展翅,当然,等到基础好了,

学起高级语言来也是手到擒来的 . . .

还有就是需要解释一下,现在大学里头流传的:学基础课程是找不到工作的 !只有  Java  和  .Net  才是王道;

我的回答是放屁 !

           

好了,拍砖的拍砖,要骂的请先给出理由,然后再骂,最讨厌什么都不标明就进行人身攻击者 !

          

同意的请顶起,反对的请说出理由,也算是给学弟学妹们一个指导 !

         

          

欢迎转载,但转载请注明:     转载自    Zachary.XiaoZhen - 梦想的天空

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/8759243

『转』谈 Linux,Windows 和 Mac —— 王垠

这段时间受到很多人的来信。他们看了我很早以前写的推崇 Linux 的文章,想知道如何“抛弃 Windows,学习 Linux”。天知道他们在哪里找到那么老的文章,真是好事不出门…… 我觉得我有责任消除我以前的文章对人的误导,洗清我这个“Linux 狂热分子”的恶名。我觉得我已经写过一些澄清的文章了,可是怎么还是有人来信问 Linux 的问题。也许因为感觉到“舆论压力”,我把文章都删了。

简言之,我想对那些觉得 Linux 永远也学不会的“菜鸟”们说:

  1. Linux 和 Unix 里面包含了一些非常糟糕的设计。不要被 Unix 的教条主义者吓倒。学不会有些东西很多时候不是你的错,而是 Linux 的错,是“Unix 思想” 的错。不要浪费时间去学习太多工具的用法,钻研稀奇古怪的命令行。那些貌似难的,复杂的东西,特别要小心分析。

  2. Windows 避免了 Unix,Linux 和 Mac OS X 的很多问题。微软是值得尊敬的公司,是真正在乎程序开发工具的公司。我收回曾经对微软的鄙视态度。请菜鸟们吸收 Windows 设计里面好的东西。另外 Visual Studio 是非常好的工具,会带来编程效率的大幅度提升。请不要歧视 IDE。要正视 Emacs,VIM 等文本编辑器的局限性。当然,这些正面评价不等于说你应该为微软工作。就像我喜欢 iPhone,但是却不一定想给 Apple 工作一样。

  3. 学习操作系统最好的办法是学会(真正的)程序设计思想,而不是去“学习”各种古怪的工具。所有操作系统,数据库,Internet,以至于 WEB 的设计思想(和缺陷),几乎都能用程序语言的思想简单的解释。

先说说我现在对 Linux 和相关工具(比如 TeX)的看法吧。我每天上班都用 Linux,可是回家才不想用它呢。上班的时候,我基本上只是尽我所能的改善它,让它不要给我惹麻烦。Unix 有许许多多的设计错误,却被当成了教条,传给了一代又一代的程序员,恶性循环。Unix 的 shell,命令,配置方式,图形界面,都是相当糟糕的。每一个新版本的 Ubuntu 都会在图形界面的设计上出现新的错误,让你感觉历史怎么会倒退。其实这只是表面现象。Linux 所用的图形界面(X Window)在本质上几乎是没救的。我不想在这里细说 Unix 的缺点,在它出现的早期,已经有人写了一本书,名叫 Unix Hater's Handbook,里面专门有一章叫做 The X-Windows Disaster。它分析后指出,X Window 貌似高明的 client-server 设计,其实并不像说的那么好。

这本书汇集了 Unix 出现的年代,很多人对它的咒骂。有趣的是,这本书有一个“反序言”,是 Unix 的创造者之一 Dennis Ritchie 写的。我曾经以为这些骂 Unix 的人都是一些菜鸟。他们肯定是智商太低,或者被 Windows 洗脑了,不能理解 Unix 的高明设计才在那里骂街。现在理解了程序语言的设计原理之后,才发现他们说的那些话里面居然大部分是实话!其实他们里面有些人在当年就是世界顶尖的编程高手,自己写过操作系统和编译器,功底不亚于 Unix 的创造者。在当年他们就已经使用过设计更加合理的系统,比如 Multics,Lisp Machine 等。

可惜的是,在现在的操作系统书籍里面,Multics 往往只是被用来衬托 Unix 的“简单”和伟大。 Unix 的书籍喜欢在第一章讲述这样的历史:“Multics 由于设计过于复杂,试图包罗万象,而且价格昂贵,最后失败了。” 可是 Multics 失败了吗?Multics,Oberon,IBM System/38, Lisp Machine,…… 在几十年前就拥有了 Linux 现在都还没有的好东西。Unix 里面的东西,什么虚拟内存,文件系统,…… 基本上都是从 Multics 学来的。Multics 的机器,一直到 2000 年都还在运行。Unix 不但“窜改”了历史教科书,而且似乎永远不吸取教训,到现在还没有实现那些早期系统早就有的好东西。Unix 的设计几乎完全没有一致性和原则。各种工具程序功能重复,冗余,没法有效地交换数据。可是最后 Unix 靠着自己的“廉价”,“宗教”和“哲学”,战胜了别的系统在设计上的先进,统治了程序员的世界。

如果你想知道这些“失败的”操作系统里面有哪些我们现在都还没有的先进技术,可以参考这篇文章:Oberon - The Overlooked Jewel。它介绍的是 Niklaus Wirth(也就是 Pascal 语言的设计者)的 Oberon 操作系统。

胜者为王,可是 Unix 其实是一个暴君,它不允许你批评它的错误。它利用其它程序员的舆论压力,让每一个系统设计上的错误,都被说成是用户自己的失误。你不敢说一个工具设计有毛病,因为如果别人听到了,就会以为你自己不够聪明,说你“人笨怪刀钝”。这就像是“皇帝的新装”里的人们,明明知道皇帝没穿衣服,还要说“这衣服这漂亮”! 总而言之,“对用户友好”这个概念,在 Unix 的世界里是被歧视,被曲解的。Unix 的狂热分子很多都带有一种变态的“精英主义”。他们以用难用的工具为豪,鄙视那些使用“对用户友好”的工具的人。

我曾经强烈的推崇 FVWM,TeX 等工具,可是现在擦亮眼睛看来,它们给用户的界面,其实也是非常糟糕的设计,跟 Unix 一脉相承。他们把程序设计的许多没必要的细节和自己的设计失误,无情的暴露给用户。让用户感觉有那么多东西要记,仿佛永远也没法掌握它。实话说吧,当年我把 TeXbook 看了两遍,做完了所有的习题(包括最难的“double bend”习题)。几个月之后,几乎全部忘记干净。为什么呢?因为 TeX 的语言是非常糟糕的设计,它没有遵循程序语言设计的基本原则。

这里有一个鲜为人知的小故事。TeX 之所以有一个“扩展语言”,是 Scheme 的发明者 Guy Steele 的建议。那年夏天,Steele 在 Stanford 实习。他听说 Knuth 在设计一个排版系统,就强烈建议他使用一种扩展语言。后来 Knuth 采纳了他的建议。不幸的是 Steele 几个月后就离开了,没能帮助 Knuth 完成语言的设计。Knuth 老爹显然有我所说的那种“精英主义”,他咋总是设计一些难用的东西,写一些难懂的书?  谈 <wbr>Linux,Windows <wbr>和 <wbr>Mac

一个好的工具,应该只有少数几条需要记忆的规则,就像象棋一样。而这些源于 Unix 的工具却像是“魔鬼棋”或者“三国杀”,有太多的,无聊的,人造的规则。有些人鄙视图形界面,鄙视 IDE,鄙视含有垃圾回收的语言(比如 Java),鄙视一切“容易”的东西。他们却不知道,把自己沉浸在别人设计的繁复的规则中,是始终无法成为大师的。就像一个人,他有能力学会各种“魔鬼棋”的规则,却始终无法达到象棋大师的高度。所以,容易的东西不一定是坏的,而困难的东西也不一定是好的。学习计算机(或者任何其它工具),应该“只选对的,不选难的”。记忆一堆的命令,乌七八糟的工具用法,最后脑子里什么也不会留下。学习“原理性”的东西,才是永远不会过时的。 

Windows 技术设计上的很多细节,也许在早期是同样糟糕的。但是它却向着更加结构化,更加简单的方向发展。Windows 的技术从 OLE,COM,发展到 .NET,再加上 Visual Studio 这样高效的编程工具,这些带来了程序员和用户效率的大幅度提高,避免了 Unix 和 C 语言的很多不必存在的问题。Windows 程序从很早的时候就能比较方便的交换数据。比如,OLE 让你可以把 Excel 表格嵌入到 Word 文档里面。不得不指出,这些是非常好的想法,是超越“Unix 哲学”的。相反,由于受到“Unix 哲学”的误导,Unix 的程序间交换数据一直以来都是用字符串,而且格式得不到统一,以至于很多程序连拷贝粘贴都没法正确进行。Windows 的“配置”,全都记录在一个中央数据库(注册表)里面,这样程序的配置得到大大的简化。虽然在 Win95 的年代,注册表貌似老是惹麻烦,但现在基本上没有什么问题了。相反,Unix 的配置,全都记录在各种稀奇古怪的配置文件里面,分布在系统的各个地方。你搞不清楚哪个配置文件记录了你想要的信息。每个配置文件连语法都不一样!这就是为什么用 Unix 的公司总是需要一个“系统管理员”,因为软件工程师们才懒得记这些麻烦的东西。

再来比较一下 Windows 和 Mac 吧。 我认识一个 Adobe 的高级设计师。他告诉我说,当年他们把 Photoshop 移植到 Intel 构架的 Mac,花了两年时间。只不过换了个处理器,移植个应用程序就花了两年时间,为什么呢?因为 Xcode 比起 Visual Studio 真是差太多了。而 Mac OS X 的一些设计原因,让他们的移植很痛苦。不过他很自豪的说,当年很多人等了两年也没有买 Intel 构架的 Mac,就是因为他们在等待 Photoshop。最后他直言不讳的说,微软其实才是真正在乎程序员工具的公司。相比之下,Apple 虽然对用户显得友好,但是对程序员的界面却差很多。Apple 尚且如此,Linux 对程序员就更差了。可是有啥办法呢,有些人就是受虐狂。自己痛过之后,还想让别人也痛苦。就像当年的我。

我当然不是人云亦云。微软在程序语言上的造诣和投入,我看得很清楚。我只是通过别人的经历,来验证我已经早已存在的看法。所以一再宣扬别的系统都是向自己学习的 Apple 受到这样的评价,我也一点不惊讶。Mac OS X 毕竟是从 Unix 改造而来的,还没有到脱胎换骨的地步。我有一个 Macbook Air,一个 iPhone 5,和一个退役的,装着 Windows 7 的 T60。我不得不承认,虽然我很喜欢 Macbook 和 iPhone 的硬件,但我发现 Windows 在软件上的很多设计其实更加合理。

我为什么当年会鄙视微软?这很简单。我就是跟着一群人瞎起哄而已!他们说 Linux 能拯救我们,给我们自由。他们说微软是邪恶的公司…… 到现在我身边还有人无缘无故的鄙视微软,却不知道理由。可是 Unix 是谁制造的呢?是 AT&T。微软和 AT&T 哪个更邪恶呢?我不知道。但是你应该了解一下 Unix 的历史。AT&T 当年发现 Unix 有利可图,找多少人打了多少年官司?说微软搞垄断,其实 AT&T 早就搞过垄断了,还被拆散成了好几个公司。想想世界上还有哪一家公司,独立自主的设计出这从底至上全套家什:程序语言,编译器,IDE,操作系统,数据库,办公软件,游戏机,手机…… 我不得不承认,微软是值得尊敬的公司。

公司还不都一样,都是以利益为本的。我们程序员就不要被他们利用,作为利益斗争的炮眼啦。见到什么好就用什么,就学什么。自己学到的东西,又不属于那些垄断企业。我们都有自由的头脑。

当然我不是在这里打击 Linux 和 Mac 而鼓吹 Windows。这些系统的纷争基本上已经不关我什么事。我只是想告诉新人们,去除头脑里的宗教,偏激,仇恨和鄙视。每次仇恨一个东西,你就失去了向它学习的机会。

后记:“对用户友好”是一个值得研究,却又研究得非常不够的东西。很多 UI 的设计者,把东西设计的很漂亮,但是却不方便,不顺手。如果你想了解我认为怎样的设计才是“对用户友好的”,可以参考这篇博客

 

转自:

王垠博客

http://blog.sina.com.cn/yinwang0

 

 

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/8699391

『转』算法的力量——李开复

2006年5月

算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门,就产生了一种误解,认为学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。其实,大家被这些公司误导了。编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论,例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。在“开复学生网”上,有位同学生动地把这些基础课程比拟为“内功”,把新的语言、技术、标准比拟为“外功”。整天赶时髦的人最后只懂得招式,没有功力,是不可能成为高手的。

算法与我

当我在1980年转入计算机科学系时,还没有多少人的专业方向是计算机科学。有许多其他系的人嘲笑我们说:“知道为什么只有你们系要加一个‘科学’,而没有‘物理科学系’或‘化学科学系’吗?因为人家是真的科学,不需要画蛇添足,而你们自己心虚,生怕不‘科学’,才这样欲盖弥彰。” 其实,这点他们彻底弄错了。真正学懂计算机的人(不只是“编程匠”)都对数学有相当的造诣,既能用科学家的严谨思维来求证,也能用工程师的务实手段来解决问题——而这种思维和手段的最佳演绎就是“算法”。

记得我读博时写的Othello对弈软件获得了世界冠军。当时,得第二名的人认为我是靠侥幸才打赢他,不服气地问我的程序平均每秒能搜索多少步棋,当他发现我的软件在搜索效率上比他快60多倍时,才彻底服输。为什么在同样的机器上,我可以多做60倍的工作呢?这是因为我用了一个最新的算法,能够把一个指数函数转换成四个近似的表,只要用常数时间就可得到近似的答案。在这个例子中,是否用对算法才是能否赢得世界冠军的关键。

还记得1988年贝尔实验室副总裁亲自来访问我的学校,目的就是为了想了解为什么他们的语音识别系统比我开发的慢几十倍,而且,在扩大至大词汇系统后,速度差异更有几百倍之多。他们虽然买了几台超级计算机,勉强让系统跑了起来,但这么贵的计算资源让他们的产品部门很反感,因为“昂贵”的技术是没有应用前景的。在与他们探讨的过程中,我惊讶地发现一个O(n*m)的动态规划(dynamic programming)居然被他们做成了O(n*n*m)。更惊讶的是,他们还为此发表了不少文章,甚至为自己的算法起了一个很特别的名字,并将算法提名到一个科学会议里,希望能得到大奖。当时,贝尔实验室的研究员当然绝顶聪明,但他们全都是学数学、物理或电机出身,从未学过计算机科学或算法,才犯了这么基本的错误。我想那些人以后再也不会嘲笑学计算机科学的人了吧!

网络时代的算法

有人也许会说:“今天计算机这么快,算法还重要吗?”其实永远不会有太快的计算机,因为我们总会想出新的应用。虽然在摩尔定律的作用下,计算机的计算能力每年都在飞快增长,价格也在不断下降。可我们不要忘记,需要处理的信息量更是呈指数级的增长。现在每人每天都会创造出大量数据(照片,视频,语音,文本等等)。日益先进的记录和存储手段使我们每个人的信息量都在爆炸式的增长。互联网的信息流量和日志容量也在飞快增长。在科学研究方面,随着研究手段的进步,数据量更是达到了前所未有的程度。无论是三维图形、海量数据处理、机器学习、语音识别,都需要极大的计算量。在网络时代,越来越多的挑战需要靠卓越的算法来解决。

再举另一个网络时代的例子。在互联网和手机搜索上,如果要找附近的咖啡店,那么搜索引擎该怎么处理这个请求呢?

最简单的办法就是把整个城市的咖啡馆都找出来,然后计算出它们的所在位置与你之间的距离,再进行排序,然后返回最近的结果。但该如何计算距离呢?图论里有不少算法可以解决这个问题。

这么做也许是最直观的,但绝对不是最迅速的。如果一个城市只有为数不多的咖啡馆,那这么做应该没什么问题,反正计算量不大。但如果一个城市里有很多咖啡馆,又有很多用户都需要类似的搜索,那么服务器所承受的压力就大多了。在这种情况下,我们该怎样优化算法呢?

首先,我们可以把整个城市的咖啡馆做一次“预处理”。比如,把一个城市分成若干个“格子(grid)”,然后根据用户所在的位置把他放到某一个格子里,只对格子里的咖啡馆进行距离排序。

问题又来了,如果格子大小一样,那么绝大多数结果都可能出现在市中心的一个格子里,而郊区的格子里只有极少的结果。在这种情况下,我们应该把市中心多分出几个格子。更进一步,格子应该是一个“树结构”,最顶层是一个大格——整个城市,然后逐层下降,格子越来越小,这样有利于用户进行精确搜索——如果在最底层的格子里搜索结果不多,用户可以逐级上升,放大搜索范围。

上述算法对咖啡馆的例子很实用,但是它具有通用性吗?答案是否定的。把咖啡馆抽象一下,它是一个“点”,如果要搜索一个“面”该怎么办呢?比如,用户想去一个水库玩,而一个水库有好几个入口,那么哪一个离用户最近呢?这个时候,上述“树结构”就要改成“r-tree”,因为树中间的每一个节点都是一个范围,一个有边界的范围(参考:http://www.cs.umd.edu/~hjs/rtrees/index.html)。

通过这个小例子,我们看到,应用程序的要求千变万化,很多时候需要把一个复杂的问题分解成若干简单的小问题,然后再选用合适的算法和数据结构。

并行算法:Google的核心优势

上面的例子在Google里就要算是小case了!每天Google的网站要处理十亿个以上的搜索,GMail要储存几千万用户的2G邮箱,Google Earth要让数十万用户同时在整个地球上遨游,并将合适的图片经过互联网提交给每个用户。如果没有好的算法,这些应用都无法成为现实。

在这些的应用中,哪怕是最基本的问题都会给传统的计算带来很大的挑战。例如,每天都有十亿以上的用户访问Google的网站,使用Google的服务,也产生很多很多的日志(Log)。因为Log每分每秒都在飞速增加,我们必须有聪明的办法来进行处理。我曾经在面试中问过关于如何对log进行一些分析处理的问题,有很多面试者的回答虽然在逻辑上正确,但在实际应用中是几乎不可行的。按照他们的算法,即便用上几万台机器,我们的处理速度都跟不上数据产生的速度。

那么Google是如何解决这些问题的呢?

首先,在网络时代,就算有最好的算法,也要能在并行计算的环境下执行。在Google的数据中心,我们使用的是超大的并行计算机。但传统的并行算法运行时,效率会在增加机器数量后迅速降低,也就是说,十台机器如果有五倍的效果,增加到一千台时也许就只有几十倍的效果。这种事倍功半的代价是没有哪家公司可以负担得起的。而且,在许多并行算法中,只要一个结点犯错误,所有计算都会前功尽弃。

那么Google是如何开发出既有效率又能容错的并行计算的呢?

Google最资深的计算机科学家Jeff Dean认识到, Google 所需的绝大部分数据处理都可以归结为一个简单的并行算法:Map and Reduce(http://labs.google.com/papers/mapreduce.html)。 这个算法能够在很多种计算中达到相当高的效率,而且是可扩展的(也就是说,一千台机器就算不能达到一千倍的效果,至少也可以达到几百倍的效果)。Map and Reduce的另外一大特色是它可以利用大批廉价的机器组成功能强大的server farm。最后,它的容错性能异常出色,就算一个server farm里面的机器down掉一半,整个farm依然能够运行。正是因为这个天才的认识,才有了Map and Reduce算法。借助该算法,Google几乎能无限地增加计算量,与日新月异的互联网应用一同成长。

算法并不局限于计算机和网络

举一个计算机领域外的例子:在高能物理研究方面,很多实验每秒钟都产生几个TB的数据量。但因为处理能力和存储能力的不足,科学家不得不把绝大部分未经处理的数据丢弃掉。可大家要知道,新元素的信息很有可能就藏在我们来不及处理的数据里面。同样的,在其他任何领域里,算法都可以改变人类的生活。例如人类基因的研究,就可能因为算法而发明新的医疗方式。在国家安全领域,有效的算法可能避免下一个911的发生。在气象方面,算法可以更好地预测未来天灾的发生,以拯救生命。

所以,如果你把计算机的发展放到应用和数据飞速增长的大环境下,你一定会发现,算法的重要性不是在日益减小,而是在日益加强。

给程序员的七个建议

(1)练内功。不要只花功夫学习各种流行的编程语言和工具,以及某些公司招聘广告上要求的科目。要把数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。大家不妨试试高德纳所著The Art of Computer Programming里的题目,如果你能够解决其中的大部分题目,就说明你在算法方面有一定的功力了。

(2)多实战。通过编程的实战积累经验、巩固知识。很多中国大学毕业生缺乏编程和调试经验;学习C语言,考试过关就算学会了;课题项目中,只要程序能够编译,运行,并且输入输出满足要求就算了事。这些做法是不行的。写程序的时候,大家必须多想想如何把程序写得更加精炼、高效、高质量。建议大家争取在大学四年中积累编写十万行代码的经验。我们必须明白的是:好程序员是写出来的,不是学出来的。

(3)求实干。不要轻视任何实际工作,比如一些看似简单的编码或测试。要不懈追求对细节一丝不苟的实干作风与敬业精神。我发现不少程序员对于知识的掌握很肤浅,不求甚解,没有好奇心,不会刨根问底。比如,学会了C++,是否了解一个对象在编译后,在汇编代码中是如何被初始化的?这个对象的各个成员在内存中是如何存放的?当一个成员函数被调用时,编译器在汇编代码中加入了哪些额外的动作?虚函数的调用是如何实现的? 这些东西恐怕在编程语言或编译原理中都没有详细提到,只有通过踏实的实干才能真正掌握。

(4)重视数学学习。数学是思维的体操,数学无处不在。学计算机至少要学习离散数学、概率论、布尔代数、集合论和数理逻辑。这些知识并不难,但是对你未来的工作帮助会很大。 尤其当你对一些“数学密集型”的领域如视频、图像处理等有兴趣时,这些知识将成为你手中的利器。

(5)培养团队精神,学会与人合作。今天的软件工程早已经不是一个人可以单独操作的,而必须靠团队合作才能成功。不懂得合作的人是不能成大器的。大家要多去寻找可以与人一起做项目的机会。

(6)激励创新意识,培养好奇心,不要死记硬背。没有掌握某种算法技术的根本原理,就不会有应变和创新的能力。想成为一位好程序员(其实从事任何一个行业都是如此),重要的是要养成钻研,好奇,创新,动手,合作的优秀习惯,不满足于填鸭,不满足于考试交差,不满足于表象。这不是学几门课能够一蹴而就的。

(7)有策略地“打工”。在不影响学业的前提下,寻找真正有意义的暑期工作或兼职。去找一个重视技术的公司,在一个好的“老板”指导下完成真正会被用户使用的程序。不要急于去一个要你做“头”而独挡一面的地方,因为向别人学习才是你的目的。找工作也是一样,不要只看待遇和职衔,要挑一个你能够学习的环境,一个愿意培养员工的企业,一个重视你的专业的公司。最后,还要挑一个好老板。

希望大家都能把握机会,养成好的学习习惯,把算法学精学透;希望大家都能有一个美好的未来!

 

转自:

开复学生网

http://www.5xue.com/modules/kaifulee/view.article.php/21/c0

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/8662854

『转』专访刘伟:软件开发人员的内功修炼之道

摘要:数学修养对软件开发之路起着什么作用?码农如何修炼自己的内功并成长为优秀的软件开发员?带着相关思考,社区之星第10期采访了中南大学副教授——刘伟。他对数学修养、设计模式、软件架构和重构方面的独特见解,相信会给众多码农和技术大牛带来新的收获。

导语:他虽然是一名大学老师,但却有着十多年软件开发和项目管理经验,他曾任职于湖南移动、创智软件园、NIIT(印度国家信息技术学院)和长沙创智新程教育技术有限公司等机构,也曾为多所高校、软件培训机构担任讲师和多家公司提供企业内训服务。另外他还主持和参与了30多个软件项目的开发工作,涉及教育、电子商务(政务)、企业EAI、移动通信等领域,此外他还致力于科研研究。正是这种复杂的多重经历,让他对软件开发有着独到的见解和心得,为此CSDN记者对这位学者兼技术人进行了专访,希望大家看完后能够对软件开发之路有全新的认识,尤其是对软件开发人员至关重要的设计模式、数学修养、软件架构和重构方面。

119_130116105437_1.jpg

刘伟,中南大学软件学院副教授,博士。中国计算机学会会员,美国计算机学会(ACM)会员,希赛教育集团企业内训讲师,新程教育集团顾问兼高级讲师,CSAI顾问团专业顾问及内训讲师。具有十多年软件开发、项目管理及IT教育培训经验,曾担任项目经理、系统架构师、软件工程师、IT培训讲师和高级讲师等职位。研究方向为软件工程与数据挖掘,目前正从事相关算法的研究与CASE工具的开发工作。著有:《设计模式》、《设计模式实训教程》、《设计模式的艺术——软件开发人员内功修炼之道》等书。同时也在编著新书《UML实用教程》和《C#设计模式》。

我与计算机的故事

CSDN:请和大家介绍下你及所从事的工作

刘伟:我现在主要从事软件工程和数据挖掘等领域的科研、教学和研发工作。具体工作包括:

  • 软件工程专业课程的教学工作:主要讲授《软件工程》、《设计模式》、《软件体系结构》和《电子商务与数据挖掘》等课程。
  • 软件工程和数据挖掘等领域的科研工作:注重理论研究与实际应用的结合,目前主要研究课题包括源代码自动重构、CASE工具研发、源代码中设计模式挖掘、软件度量等,目前承担的几项科研项目的研究工作,已得到包括华为在内的多家企业的关注并愿意参与其中。
  • 企业培训与支持工作:在周末和寒暑假,我会给一些企业提供需求分析、UML、设计模式和重构等技术培训,密切与企业联系,为企业项目开发提供一些指导,同时也为高校教学工作添加更多真实的企业案例,已经给多家公司提供过企业内训,反响都还不错。
  • 软件研发工作:时间允许的话我会承担一些软件项目的研发工作,目前正在从事一些CASE工具的研发工作。

CSDN:你并非计算机出身,是什么缘故促使你自学计算机课程?在学习上有什么心得可分享?

刘伟:严格来讲大学期间我并不是一名好学生,因为我没把时间和精力放在专业学习上,现在从事的工作也与大学所学专业没有关系,但我并不后悔,反而觉得大学四年让我更加清楚地知道自己想要什么,树立了更长远的目标,那几年也过得很充实,为之后的学习和工作奠定了很好的基础。

我大学本科学的是化学专业,不过从大一(1999年)开始就对计算机产生了极大兴趣,然后自学了所有计算机课程,大二开始在一些校办网站和软件公司兼职。在本科和研究生学习期间,我利用课余时间在多家软件公司兼职,也组织过团队在外面接一些项目。软件开发是极富挑战的创造性工作,我很享受那个集体力和脑力劳动于一体的过程,我想最根本的原因应该还是兴趣所在吧。

在大学期间,我对软件教育和技术推广也具有极大热情,2001年(19岁)开始在一些IT培训机构担任网页制作、SQL Server数据库等课程的兼职讲师,同时考取了高级程序员等证书,还获得了微软认证系统工程师和微软认证数据库管理员。

对于软件知识和技术的学习,我有以下几点建议,供参考:

  • 最重要的是兴趣:兴趣是可以慢慢培养,作为一名软件专业老师,我也有意识发掘并培养学生的兴趣,让学生喜欢上这个专业,然后再努力去学习研究,进而全面学习和掌握相关专业知识;
  • 其次是学习能力:IT知识更新速度非常快,一定要培养自学能力,我经常跟学生说:真正成功的大学教育并不在于教会学生多少东西,而是教会学习的能力,这种能力让大家终身受用。俗话说:授人鱼,不如授人以渔!只有不断学习,才能真正成为行业领袖和专家。在学习过程中,要善于利用互联网资源,不要把电脑和网络当做娱乐工具,而应该作为学习工具,经常访问一些IT网站,看一些行业新闻、博客和论坛等,多交流、多讨论和多虚心学习。
  • 多思考,多实践:软件工程是工程应用类专业,一定要多实践,有条件可以参与一些老师牵头的横向项目(企业项目),或者在不影响学习的情况下接点企业小项目做做(例如小网站或者小型的MIS系统之类),这样能力提升会更快,而且能够学到很多在课堂上学不到的知识和经验。

2010年我在CSDN博客上发表了一篇文章,《写给明天的软件工程师——感悟篇》,大家如果感兴趣的话可以看看。

CSDN:你微博中用“软件兴邦,教育利民!致力于中国软件教育“作为座右铭,想传达什么?

刘伟:这包含了我的人生理想,我现在的目标是成为一名一流的IT教育工作者,这里的IT教育是广义的,除了高校教育、企业培训外,还包括职业教育等,我觉得一个行业要能得到更好的发展,应该有一套成熟、科学、合理的人才培养体系。现在软件行业的地位和重要性毋庸置疑,前段时间我在博客中转载了一篇文章《软件应用无所不在 正吞噬整个世界》,现在软件已渗入到各行各业,而且很多传统行业已经离不开软件的支持,例如:零售、交通、出版、医疗、招聘、娱乐、电信、教育等等,还有很多行业本身就是依托于软件的,例如电子商务、在线游戏等。网景公司创始人、硅谷著名投资人马克·安德森的这篇文章中,他列举我们所面临的三大挑战第二条就是人才问题,软件行业缺乏大量能够胜任的软件工程师、经理、营销人员和销售人员,他指出只有教育才能解决这个问题。正因为如此,我觉得自己的选择是非常正确的,我也希望自己能够通过努力,成为一名优秀的软件教育工作者。“软件兴邦,教育利民!致力于中国软件教育”这句话也是用来勉励自己,希望自己能够不断研究和探索软件人才培养的规律和模式,以便更好地从事软件教育工作。

数学之美:程序员应有的数学修养

CSDN:一名优秀的程序员和他的数学修养有没有什么联系?它给程序员带来的最大帮助是什么?

刘伟:我个人觉得是有联系,而且关系很密切。数学作为自然科学之母,更多的是培养人的逻辑思维能力,是思维的体操。

我们要区别一下合格程序员和优秀程序员,合格程序员可以完成一些常规的代码编写工作,例如CRUD,这里确实用不到太多的数学知识,但是如果希望能写出高质量的代码(例如具有良好的时间复杂度和空间复杂度),或者参与一些技术难度较大的软件开发工作(例如涉及到构建数学模型的软件,如交通调度系统、与电子商务有关的数据挖掘系统、计算机模拟药物设计软件等),良好的逻辑思维能力是必须的,而数学正可以培养这种能力。

良好的数学修养将让程序员在设计和实现软件时思维更严谨、思路更开阔、考虑也会更缜密,有助于写出高质量的软件,还有利于参与一些技术复杂度较高的软件,这对于个人综合素质的提高和职业发展都很有帮助。我建议大家有时间看看数学书,做做数学题,你能够从中找到快乐!

CSDN:那程序员如何培养自己的数学修养?应该培养哪些数学修养?

刘伟:2012年有三本书卖得很火,它们是:腾讯副总裁吴军先生的《数学之美》、日本资深技术作家结城浩的《程序员的数学》和北大高材生顾森的《思考的乐趣:Matrix67数学笔记》。而购买者绝大部分都是IT相关人士,当然最多的还是程序员。由此可见,很多一线程序员都意识到有时间应该学学数学,看看数学书,培养自己的数学修养。这是好事,说明大家都在努力求进步,都在努力提升自己的综合水平。我也读完这三本书,收益颇丰。

2006年我在CSDN博客上发表了一篇题为《浅谈程序员的数学修养》文章,很多人发表了一些不同的看法和意见,当然我在这篇文章中所写的很多都是个人观点,难免会存在一些考虑欠周全的地方,但对于一名优秀程序员是否应该具备一定的数学修养这个观点我还是坚持自己意见,我认为是肯定的。那么如何培养自己的数学修养,我在《浅谈程序员的数学修养》一文中有提到,大家感兴趣的话可以看看这篇文章,另外我还转载了几篇与之相关的文章:《数学是成就卓越开发人员的必备技能》和《编程需要知道多少数学知识》,有一些不同的声音,大家都可以看看。

需要指出的是这里所说的数学修养并不是指数学知识,不是指你各种解题能力,这里所指的数学修养更多的是平时对数学知识的积累。比如适当做数学题来训练自己的思维、看有关数学书来丰富自己的知识体系,当你需要在工作中具体用到一些数学知识时,你可以很快地学习。数学修养的培养更多的是培养自己的逻辑思维能力,这对于一个优秀程序员是非常重要的能力,数学修养不等于数学知识,并不是看几本高深的数学书就能有好的数学修养,真正的数学修养的培养并不需要我们一定要掌握多少高深的数学知识,而是在平常的学习和工作中能够将数学知识和正在解决的问题联系起来。例如当你在设计一个电子商务系统时,除了传统的CRUD,你还应该考虑一下顾客行为分析、商品推荐、网站链接结构优化、广告投入策略、信息检索模型构建等,这里面也许就需要用到贝叶斯网络、粒子群优化、图论、 聚类和分类等与数学相关的知识,如果你具备很好的数学修养,平时也注意数学知识的积累,那么即使从头开始学这里的某些知识也不是难事。由此可见,对于一名优秀程序员而言,数学修养是必备的。

具体来说,数学修养的培养可以从算法分析和设计开始,深入理解一些经典算法的设计原理和实现机制,我认为算法是数学的一部分,是数学在计算机领域的应用,就像数学应用在材料、力学、经济学一样。另外,有空的话可以多做数学题和逻辑题,把这些习题当做一种逻辑思维练习,让自己思维更加活跃一点,Bob大叔(Robert C. Martin)称这种练习为卡塔(Kata),我建议大家有时间每天也做一两个卡塔,有些数学题可以不在纸上写,直接用程序实现也可以。另外,前面提到的那三本书也挺不错,建议大家有时间可以看看,权当一个入门,总之一定要认识到数学修养的重要性。对于那些正在或有志于数据挖掘、信号处理、图像处理和搜索引擎等工作的朋友,那数学的重要性就不多言了,大家都懂的。

IT人才培养

CSDN:在大学计算机专业课中哪些课程最难?你又是通过什么方式简单地讲解难点?

刘伟:大学计算机专业课中比较难的课包括离散数学、数据结构、编译原理、算法分析与设计等(来自同学反映),当然有的学校还开设了信息论与编码、数字图像处理、计算机图形学、计算机密码学、数据挖掘等,这些课跟数学以及逻辑思维能力或多或少有点关系,当然也因人而异。上述这些课程对于有些同学而言也并不难,但是跟软件工程、操作系统、计算机网络、计算机组成原理等课程相比,很多同学在学习这些课程时相对更加吃力。

这些课有些我也没有教过,在以前讲授数据结构、算法分析与设计等课时,如果遇到比较难的地方,我会首先利用一些图形和动画来分析其原理,先形成一个感性的认识,然后引入一些比较容易理解和通俗的实例来讲解,通过对具体问题的分析来逐步深入。特别是算法,不能为讲算法而讲算法,最好能够结合一些具体问题来分析,对于算法的本质需要讲透彻一点,但通常数学基础较好的学生可以快速消化这些知识,而数学基础相对较差的在学习过程中遇到的困难更大。因此,我有时候也会要求学生在课后做逻辑思维题,例如数字找规律、图形找规律、逻辑推理、简单的数学证明题等来训练一下思维能力,这其实也是在无形中培养自己的数学修养,通过一段时间的训练,有些同学确实有所进步,在思考问题时思路更开阔、更严谨,对算法的理解也更深入。

CSDN:你曾做过几年开发,后来为什么从技术人转为IT教育工作者?之前的工作对你现在有何帮助?在给高校学生上课之外,你还喜欢与企业交流,为什么?

刘伟:我个人对教育事业可以说是情有独钟,我出生于一个教师家庭,祖父、父亲、母亲都是教师,祖父和父亲是一所中学教师(祖父是老校长,父亲是现任校长),母亲是小学教师。从小就在学校长大,一直很喜欢把自己学到的东西传授给别人,这很快乐。在大三(19岁)时我就在IT培训机构担任网页制作、SQL Server数据库等课程的讲师,那时学生基本上比我大,但学习完之后,大家反应都还挺好,说我讲课思路清晰、内容很丰富、信息量大,能够学到很多东西,我想这方面还有点遗传基因吧。研究生阶段也在职业培训机构担任兼职讲师,硕士毕业(2006年)后在湖南移动、创智软件园上班,主要从事软件研发工作,还在NIIT(印度国家信息技术学院)、创智新程教育技术有限公司(原创智集团教育事业部)担任高级讲师,同时也担任几所高校的企业兼职教师,之后读博并在中南大学软件学院任教。从2001年开始都从事与IT教育相关的工作,之前是兼职,现在是全职。对于软件研发、软件职业教育、软件高校教育我都有涉足,正是这种特殊的工作经历,让我对IT人才的培养有更深刻的理解和认识。

在有过几年一线开发经验后,我发现自己最大的长处还是在于将一些知识用较为通俗的语言和实例传递给他人,这也是一名好教师,特别是IT相关教师应该具备的能力,因此,我陆续拒绝了很多国内外知名企业的Offer和多家猎头公司的邀约,在经过慎重思考后我已逐步将工作重心转移到软件教育上。另外我觉得中国的软件教育需要一批有过企业背景,也具有较好表达能力和感染力的老师,我自认为还是具备这些条件的。看到我的学生们能够进入一些一流的软件公司、做出一些优秀的软件,所带给我的成就和愉悦感,远比自己收获这些要大。

企业工作背景对我的教学工作非常有帮助,在教学过程中,我会结合一些企业真实项目实例来进行知识讲解,会结合我之前的一些工作经历讲授一些书本之外的知识,例如在讲解软件需求工程时,我会告诉学生我曾参与开发的一些项目是如何来获取需求的、对于不同的需求源我们做了哪些分析和考虑、采用了哪些需求获取手段、如何记录需求以及如何确认需求,跟学生讲我们当时遇到了哪些问题以及最后怎么解决的,还会穿插一些真实的小故事,让大家的学习过程不那么枯燥无味,而是充满好奇感和趣味性。正因为之前参与过那么多实际的项目,亲身经历过很多软件的成功与失败,也充分体会到过程的快乐与艰辛,才让我现在能够自信满满地站在讲台上,与学生们分享我的知识与经验。

为了不脱离企业,我现在仍然会经常与企业进行交流,我一直认为,一旦脱离企业实际需求,IT教育不可能培养出真正优秀实用的人才。一方面,我会在工作之余参与一些企业项目的开发工作,主要以顾问的形式参与需求分析、系统架构设计、技术评审等,尽自己的能力给一些企业提供指导,例如教企业如何实施Scrum、如何使用UML构建软件模型、如何对源代码进行优化和重构等。在提供指导的同时,我又可以将这些知识和经验传递给在校学生,让学生知道现在企业正在做什么、他们是怎么做的、遇到了什么困难、应该具备哪些知识才能胜任这些工作,我觉得这是一个良性循环,学生们学习了这些知识和技能之后在实际开发中就能够用上,而且学习过程本身也很好地切合了企业的需求,在一定程度上解决高校人才培养和企业实际需求脱节的问题。当然,我现在所做的还是一个探索性的工作,也希望这项工作对于我国高校软件人才的培养有一定的参考价值。另一方面,我也在分析企业的一些需求,例如,有些企业员工因为工作压力大、项目进度紧等原因,无法静下心来学习一些新知识,于是我会将这些知识整理好,用较短的时间和较为通俗生动的方式传授给他们,我觉得这也是IT教育很重要的一个组成部分,教育是贯穿一生的,活到老,学到老。

与企业交流让我了解到企业对人才的需求,能够为我的教学工作提供更多真实案例,同时我也能够为企业开发人员提供一些指导和培训,此外,我个人的知识和经验也在不断累积,有助于我更好地从事软件教育工作。

CSDN:现行的软件人才培养体制有哪些缺陷?你认为该如何改进?

刘伟:关于现行软件人才培养体制,我个人也有一些自己的意见和建议,下面我谈几点自己的看法吧。

  • 培养目标问题。做科学家好还是工程师好?研究型大学是不是不应该培养工程师?研究型大学如何培养工程师?现在很多985和211高校的口号都是建设国内一流的研究型大学,老师们都全力去做科研,而工程类专业,特别是软件工程又是以培养工程应用型人才为主,如果老师们都将精力用于做科研了,谁来培养工程师?怎么培养工程师?而且没有实际的项目开发经验,只是照本宣科,停留在纯理论的教学中,如何能够培养出合格的工程师?我个人觉得工科大学本科教育(工程类专业)应该还是以面向应用工程型为主,如果希望当科学家,应该是在硕士,特别是博士教育中。随着工程硕士规模的扩大,很多人硕士毕业之后还是当工程师。如果有志于当科学家的同学,应该从本科就做好准备,打下良好研究基础,学好数学、英语和一些基础理论课程,最好能够把算法、计算理论、编译原理、形式化方法、数据挖掘、计算机图形学等知识学好,为做科学研究打下基础,如果有机会的话,可以提前和老师们一起参与一下科研项目的研究,了解一下科研的流程,说不定还能够做出点啥科研成果。而对于大部分想做工程师的同学而言,软件开发类课程就非常重要了,无论是编程、分析设计、架构还是测试,以及数据库、操作系统、数据结构等基础课都是成为一名优秀工程师的基础,如果有机会,做做实际的应用型项目(不是停留在课程设计或者项目实训等模拟项目上),那帮助就更大了。在大学阶段有一个比较明确的职业规划,对于同学们的成长确实有很有帮助,虽然这个做起来有点难度。
  • 课程体系的建设问题。这也是软件工程教育的一个核心问题,它对应于一个怎么做的问题,软件工程专业的课程体系要兼顾多方面,因此一套完善合理的课程体系需要不断调整和优化,这样难免会有一些同学会成小白鼠,但是这是人才培养道路上必经的一个过程,还望做过小白鼠、正在做小白鼠和即将成为小白鼠的同学们理解。一套科学合理的软件工程课程体系,我认为至少要考虑如下两个方面:用人企业的需求(分析用人企业所需的技能和技术,结合企业的招聘启事,请企业专家参与评审课程体系,包括课程的培养目标、先后顺序、教学大纲和实验安排等)、人才的长远发展(我们不能只是培养码农,需要培养出能够具有更好发展前景的软件人才,因此除了编码类课程,还需要开设需求、分析、设计、架构、测试和项目管理等课程)。对于教育工作者,人才是产品,用人单位是客户。我们都希望能够培养出高质量的产品,满足客户的需求,做到三方共赢!
  •  教学与实践课时分配的问题。软件工程是一个重实践的专业,必须要多实践,重点培养实践能力,许多高校都在压缩教学课时,大量增加实践课时。但是现在有一个很重要的问题是很多学校的教学资源不足,不可能所有的课都在机房上。大家经常会提到一个“做中学”的问题,对于软件人才的培养,确实需要增加实践课时,我个人觉得如果网速足够快并提供合适的在线项目开发和管理平台,有些练习和项目完全可以在宿舍完成。教学课时没有必要开设那么多,我始终还是坚信那句话:大学教育更多是培养大家学习能力,而不是学习知识本身。
  • 师资问题。作为软件工程专业的教师,必须不断更新自己的知识体系,需要至少在某一个或几个领域与最新技术接轨,每年应该也要实时充电,让学生们能够在学校就学到一些前沿知识。对于有些知识的学习,老师的理解能力和消化能力还是要强于学生,毕竟对行业和专业的了解更为全面和系统。我个人的观点是,作为从事软件工程一线教学的教师,应该有目的地提升自己的实际项目开发能力,不断学习新知识,“一门课上到退休”对我们来说并不适用,也不应该是这样。作为一名软件教育从业者,我要求学生要努力学习,学会自学新知识与技能,同时我也需要不断学习,只有这样,我自己也才能实现成为一流IT教育工作者的梦想。
  • 高校与企业联合办学的问题。与企业联合办学是目前很多高校在培养软件人才时采用的一个重要的手段,这样一方面可以让学生学到一些企业实用技术,另一方面可以缓解师资不足的问题。学生也特别希望能够有一些企业老师来讲课,学习到更多实用的技术和经验。我想我的课之所有学生们喜欢,跟我之前有过几年项目开发经验有很大关系。但是在校企联合办学过程中,地域因素也不得不考虑,例如在北京,如果要找一流的测试专家给某个高校上软件测试的一些课程,可以找中国软件评测中心或国家信息中心软件评测中心,但是有很多二线、三线城市的高校就没有这么便利的企业教学资源,应该建立一个校企合作的平台。我觉得校企合作是一个对三方有利的方式,对于学生和学校的好处不用多说,对于企业而言,可以从中选拔优秀的潜在员工,还可以宣传自己的企业和产品,同时带来新的赢利点。很多国内外知名软件公司就成立了专门的校企合作部门,已经嵌入到师资培训、学生培养、实习生安排和社团活动等多个环节,并取得了不错的效果。

当然,还包括不同层次的学校人才培养的差异性问题、软件工程硕士培养问题、不同方向(开发、测试、互联网营销等)的软件人才培养问题等。每一个问题都可以作为一个专题讨论,恕本人才疏学浅,也不妄加评论了,以后有机会再跟大家进一步交流。以上很多观点都来自我2012年12月份写的一篇博文《如何培养软件工程人才——参加“第一届高等学校软件工程人才培养高峰论坛”有感》,欢迎大家一起交流和讨论。

转自 http://www.csdn.net/article/2013-01-15/2813690

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/8621030

『转』王垠的过去和现状

我曾在2006年冬天接触到王垠的三篇文章:《完全用linux工作》、《写给支持和反对<完全用Linux工作>的人们》、《清华梦的粉碎--写给清华大学的退学申请》,今天巧合又再次读遍,于是决定把我找到的关于王垠的信息总结一下。

1. 以前——清华退学前

7BAD496B2472C79D38CC9D5BF0615C32_400_300.JPEG

王垠是高考发挥失常进入四川大学计算机系,为97级(据此推测他是79、80生人);01年直接报送到清华大学计算机系软件所硕博连读,主要进行集成电路布线算法的研究。

2004年8月左右[1],王垠完成了《完全用linux工作》、《写给支持和反对<完全用Linux工作>的人们》,痛陈windows弊端、宣扬linux,但自己后来也承认是“义愤填膺”之作,“自己都感觉到偏激”[2],文章在中国的计算机和linux阵营引起极大轰动效应,成为水木清华liunxapp版和中国多个linux社区的偶像级人物。

2005年,王垠为第一作者的论文参加IEEE/ACM Asia andSouth acific Design Automation Conference (ASP-DAC 2005)国际学术会议获得Best Paper Award [3]。但紧接着,9月22日,还差一年博士毕业的王垠在水木社区BLOG上发表了《清华梦的粉碎--写给清华大学的退学申请》明确要求退学 [4]。

对于此次退学举动,川大的老师表示...父母...。[5]。

2. 清华退学后——今

06年8月,从清华退学后王垠考GRE出国到了康奈尔大学计算机系 [6];然而,王垠仍有一篇博文抱怨他在Cornell的遭遇 [7]。而后从Cornell退学[8],又到印第安纳大学伯明顿分校(IUB [9])计算机继续博士学位的至今在读 [10]。根据其在IUB的主页,王垠现在的研究方向和兴趣是程序语言方面,另外也对数据库和操作系统感兴趣。王垠在08秋、09秋和10春任教《软件系统导论》,11年秋任教《数据库概念》,应该没有公开的论文发表。

以下是分不同段落引用一些不同的评价:

(对于王垠在Cornell的遭遇)“这人理想中的科研是十八十九世纪贵族的科研,与当今科研民工的现实完全脱节。所以出国前国外留学生界也普遍不看好他,结果真的如此。”[11]

”偶然得知原来与王垠有过一面之缘,在清华的时候看过他玩滑板,记得他还买了瓶水给我喝,更加关注关于他的评论。他是那么谦和、阳光,不是别人想象中的偏激、清高。他只是很清楚自己需要什么,自己该怎样才能过自己想要的生活,才能最大限度地实现自己的价值。或许他该隐藏一些事实,让清华依然成为芊芊学子朝圣的地方。就象我们的高考作文,必须要有个积极的结尾,才有高分。“ [12]

”我隐约感到王师兄很难去一个他理想中的研究环境。不是美国的教育体制没有以前优秀了,而是这么多年来,自费申请国外奖学金的学校,还有老师,都不是最优秀的。就算是是最好的学校如,mit ,还有最好的导师,他也不可能把最好的资源给从中国来的留学生的。说白了,这些年,通过GRE出国的,基本上是给导师当助教的,帮老师打工的,比国内的顶尖学校的优秀老师好不了多少。“ 

”很多人都等着你失败呢。“  [13]

3. 一个王垠的同学的想法

此章节全文来自http://bbs.tsinghua.edu.cn/bbstcon.php?board=MS&gid=58706,来自王垠提到的计算几何合作满分合作者王益,我觉得这篇应该全文转载。

王垠的退学申请引起了很多人的讨论,其中不乏生活在王垠身边的同学。看了王垠的长文中对他自己心灵历程的回忆,看了大家从各个角度发表的意见,作为王垠的同学和朋友,这些天我也一直百感交集,现在总结了三点,想跟大家说说。

首先,水母上对这件事情的主流反映是让人觉得充满关心和理解的,有些甚至温暖得让人感动的。也有不理解的意见,我觉得正常,毕竟这确实是件很突兀的事情。不管怎样,我期待我们的社会和教育体制对王垠和他的老师们能体现出更多的理解和关怀。

(一) 从王垠的角度说

看过王垠的退学申请的人会知道,王垠是个理想主义者;而我们大多数人其实是机会主义者,寻求survival。我以为两类人都值得敬佩:机会主义者是社会主流,实际上起勤恳的工蚁的作用,是社会进步的主力;理想主义者是少数,像指方向的灯塔。有的灯塔方位不对,有的灯光暗淡,不能给人信任感,但无论如何,这世界不能少了灯塔 ── 总要有人说说他们的梦想,也许就是这世界应该发展的方向吧。理想主义者要说什么就让他说呗 ── 如果说对了,是对大家都有价值的;如果说错了,自有时间来证明。有什么好反驳和压制的呢?对吧?

王垠不仅是理想主义者,他是个天才,天才不是全才,天才在他不天才的方面比常人更柔弱,更需要关心。 我以为天才不一定是指天生的才,仅仅是指在某方面比较出众的人。作为王垠的 朋友,我们经常在一起讨论问题(那个计算几何大作业算其中之一吧),也作为一个在清华计算机系学习了4年多的直播生,我想我可以负责任的说,王垠的思维速度、深度、和广度;探索的欲望、求知热情、持之以恒的精神;动手能力;以及在数学和计算机科学上的潜力都比咱们清华计算机系很大一部分同学强。(我感觉王垠那篇获奖论文远不足以说明其才能。也请大家相信我不是只以paper 论英雄的人) ── 你说你在某个方面比王垠更强?那好阿。你也是天才!── 我想这也是王垠的老师们在学术方向选择上一再放任他的原因(这点我了解,是事实)。 但是天才不是全才 ── 当他们在一方面投入绝大部分精力的时候,在其他方面必然的技不如人的。图灵处理不好同性恋男友的关系,霍金会对朝夕照顾他的妻子无端发脾气,爱因斯坦管不好生活费,诸葛亮不能收拢人才造成蜀中无大将的局面。。。 难道因为这些缺点就应该骂他们一顿,让他们辞职下岗,羞愤隐居吗?如果当年他们身边的人这么作,历史恐怕会变得更悲哀一些;如果我们今天这样作,中国恐怕永远也不会有诺贝尔奖得主,不会有开明的政治家了。

我、和我们2001级直播生中很多同学都知道,王垠在处理人际关系方面很单纯、不上路,有时不能理解别人。在我们生日节日的宴席上、一起出去喝酒唱歌的时候、确实有过尴尬出现。我们都会跟王垠说,希望他能改。但是就象王垠不强迫我们跟他一样理想化一样,我们也从不觉得必须让他按照我们的处事标准生活。

我个人以为,如果觉得一个朋友值得我关心,那我就关心他帮他。不能也不必求回报。更不能因此要求他改变什么。批评应该是建议的形式、是尽我的责任。听与不听是他的事。毕竟谁也不可能改变别人的原则、也没有资格、没有必要这么作。我想王垠身边朋友不少,大家应该和我的想法差不多。如果更多的人能这样理解和包容王垠、理解和包容我们身边所有有才干的“不完美者” ── 我们的社会就更和谐、更完美了。

(二)对王垠的老师们

王垠的老师们更需要大家的理解。王垠的文章容易让人误以为他对他的老师们有很大意见。但是我想强调的是:我对这件事的了解比大多数同学多一些,从王垠这两年来跟我聊的情况看,我从来不觉的王垠是对老师个人的意见(即使在他的这篇文章中有冲动的话)。像前面有id是university的兄弟总结的,王垠的意见是一个完美主义者,理想主义者,对体制中瑕疵的不满的表达 ── 对事不对人。 

我跟大家说说从我的角度了解的一些情况:

王垠的导师是计算机系一位很有爱才盛名的老教授。在和王垠商量的情况下,数次容许王垠改变研究方向,去作不是他们实验室的研究方向。前天(王垠的文章被转载后的第二天)我的一个博士后师兄就专门写信说到老师爱才的事实例子,希望我传劝王垠。 王垠的副导师和实验室内外的很多同学关系都不错。 今年春天他专门将自己的交流机会分出一部分,帮王垠联系了去香港交流,希望王垠能看到他们实验室的研究方向中的一些引人之处。 今年夏天,计算机系博士生论坛时,王垠跟一位系领导谈起一些他看到的教育行政管理方面的不足。这位老师很坦诚很认真的和王垠讨论,几乎到交头接耳,还爽朗的笑道:“这个你怎么才发现阿?”。王垠得到开导后很高兴很兴奋,说老师真是实在人。半年前,当另一位系领导得知王垠数次改变研究方向后,专门请负责研究生工作的一位年轻老师向王垠身边的同学了解情况,帮王垠想办法。这位年轻老师向我了解情况的时候非常诚恳,让我都觉得很感动。还有,当时给我们上课的一位老师,在王垠寻找研究方向的过程中一直寄予帮助和指导、在王垠不开心的时候一贯坚持理解和鼓励。当王垠告诉我这些情况时。。。还是感动。 当这些老师们作这些很实际的工作的时候,都是默默无闻的,他们没有把这些放上网去让人转载。 我觉得不公平。 我说出来,希望大家知道,这样对问题的了解更全面。

但是不管怎样,今天中国的总体学术环境和学术氛围达不到王垠的理想要求。在某些方面不如国外合理。我对此也有过很多想法。我想这些情况,老师们比我们学生了解的更深刻。这样的问题不是一个老师就能改变的。但是让我感到很开心的是,我看到的这些最能干最值得钦佩的老师们,在王垠的理想化意见面前表现出的充分的理解、包容、耐心、实事求是、不避讳问题的态度,让我对清华、对中国的教育制度的完善变得很信心。

(三)我对此事的态度

1、学生退学是很正常的事情。人各有志。可以理解。

2、客观的说,王垠写这篇文章时是处于冲动的状态下的。其语言不客观、不能做到对老师们基本的理解. 对帮助过他的老师们是有伤害的。我希望大家能给王垠一个平静心情的时间,一个反思的缓冲.  希望王垠能有机会向老师们说一声"对不起".

3、清华的校训是崇尚“行胜于言”的。既然有个理想主义者在说问题,那我们倒是可以看看是否真有这些问题。主动去找问题,不回避问题,有则改之,无则加勉,寻求改革之道 ── 是以谓之“自强不息”;实事求是,不全盘否定,不因噎废食,寻求最佳的改革方案 ── 是以谓之“厚德载物”。

4、从王垠的角度来说,完善自己不完善的一面是很重要的。即使是天才,他的生存也主要靠自己。不能体谅他人、不能理解他人、是不可以的。

5、人非圣贤,孰能无过。希望王垠能在完善自己的同时,继续坚持人生的目标。才真能不辜负老师们默默的培养努力和承受的不公。 

4. 王垠的相关链接

王垠在IUB的个人主页:https://www.cs.indiana.edu/~yw21/

王垠的open source:https://github.com/yinwang0

王垠的flickr:http://www.flickr.com/photos/wangyin/

王垠03年前的个人主页(清华不保存毕业生的主页,所以原版已经查不到,这是其复制版本):http://docs.huihoo.com/homepage/shredderyin/index.html

王垠04年、05年的live空间(由于live空间停止服务,已经失效):http://spaces.msn.com/members/shredderyin

有意思的是:从huihoo的备份里面我们能找到王垠收集的几条有趣言论,包括这一条:

There are three kinds of mathematicians: those who can count, and those who can't.

--- folklore

以及归类到MyDreams的Computer Science Common Room的简单设想。

5. 其他相关话题

贺卫方停招研究生

陈丹青出走清华

6. 参考资源

[1] 据下面的链接,《写给支持和反对<完全用Linux工作>的人们》写于2004.8.26,《完全》一文则不详:http://hi.baidu.com/southhill/blog/item/6227f063f82627d5e6113a66.html

[2] 见《写给支持和反对<完全用Linux工作>的人们》

[3] http://www.beelink.com.cn/20051018/1954753.shtml

[4] http://forum.ubuntu.org.cn/viewtopic.php?f=112&t=330553&p=2447194 

[5] ...

[6] 康奈尔大学(英文:Cornell University)是一所位于美国纽约州伊萨卡的私立研究型大学,另有两所分校位于纽约市和卡塔尔教育城,是著名的常春藤盟校成员。来自百度百科:http://baike.baidu.com/view/30250.htm

[7] 详见后附原文。

[8] 博文《MS or PHD?》 http://phillips.blogbus.com/logs/54228967.html

[9] 印第安纳大学创建于1820年,是美国阿巴拉挈亚山脉西部最古老的大学之一,在全国共有八个分校,分别是:Bloomington, Fort Wayne, Gary , Indianapolis, Kokomo, New Albany, Richmond和South Bend。赖在百度百科:http://baike.baidu.com/view/1628363.htm

[10] 其个人在IUB的主页INTRODUCTION对自己的介绍是PhD student。

[11] 百度知道:清华退学博士王垠后来干什么去了?http://zhidao.baidu.com/question/158174440.html

[12] 百度贴吧:读<清华梦的粉碎-写给清华大学的退学申请书>有感的回复:http://tieba.baidu.com/p/47435139

[13] 百度贴吧:王垠又开始骂康奈尔大学了的回复:http://tieba.baidu.com/p/346587208

 

附:王垠《Cornell 感受》原文

来自:http://bbs.sciencenet.cn/forum.php?mod=viewthread&tid=6505,这不是作者主页,但是能找到为数不多的原文拷贝。

http://shredderyin.spaces.live.com/blog/cns!73FF08D72187CE2E!5259.entry

Cornell 感受(1)

早就有人问起我的学习情况,问我有没有找到理想的研究环境。我却总是弄一些小动物,要不就是好玩的内容在这上面。真是惭愧,因为一直觉得自己还没有什么发言权,一直觉得是不是自己搞错了。不过来了 Cornell 已经一年半,也可以说一下对美国教育的感想了。我的感觉可能是错的,或者局限于我的专业或者学院。不过总的感觉就是,美国教育其实很大部分是商业性的应试教育,而外国研究生基本上是用来骗本科生钱的廉价劳动力。本科生能学到的真东西,相对于他们交的学费,也是少而又少的。巨大的作业和应试压力,已经剥夺了学生思考的自由,真正潜心研究的环境是很难求的。

还是让我慢慢的回忆一下这一年半的经历吧……

2006 年的8月3号,我们经过20多小时的飞行,来到了 Ithaca。面对这个小山村,我们是非常新奇的。这里的夏天是如此的美,到处是绿草,到处是瀑布,自来水都是可以直接喝的,房间里全都有地毯。貌似一切都是那么的美好,人都是那么的有礼貌。刚走到人行道边上,路上的汽车就缓缓停下来,让行人过马路。路上遇到一个不认识的人,他会莫名其妙跟你打招呼,说: “Isn't it beautiful?” 总之 Ithaca 的美是不用多说了的,居民的总体素质还是比较高的。不过很快,这种新鲜感就随着在 Cornell 遇到的各种事情消失了。Cornell 给我的第一印象就是非常差的。

其实正式开学是在20多号,我们之所以这么早的来,原因是需要参加一个所谓 ITADP Summer Program。ITADP 也就是 International Teaching Assistant Development Program,也就是对 TA 的培训。这个培训是强制性的,不参加就不能做 TA,也就得不到经济支持了。我们连时差都还没倒过来就参加这么一个课程,每天从上午9点到下午3点。我也不记得申请 Cornell 的时候他们提到过这个东西,而是在接受了 offer 之后才收到一封信,说要所有外国TA参加这个培训。没想到 Cornell 的印象就从此在我心中一落千丈。

首先,经过培训的,或者仍然在接受培训课程煎熬的中国同学,我们都痛恨这个东西。我们得出的一致结论就是,这个培训对提高英语水平的效果是微乎其微的,纯粹就是浪费时间和精力。夏天的培训只有一个星期,分小班进行,在培训的末尾老师会进行评定。如果不通过,就需要强制性的修一期的课,叫做 EDUC 578。EDUC 578 期末会有一个评定,如果不通过,就需要修 EDUC 579。接着是 EDUC 580, ... 课号换了,但是课程的内容基本没有换,不断反复,无聊之极。总之,这个课耗费大量精力,影响学业。中国学生大多都对这个课程叫苦不迭。很多人都把牢底坐穿了,上了两年还没有通过。如果真能留下来,那还算不错的,各个系情况不一样。我认识有一个电子系的博士生在第一期评定没有通过就被取消了经济支持,他只好自己掏钱转成了计算机系的硕士。

再来看看这个课程的性质呢?我还深刻的记得在 Summer Program 的时候,ITADP 的主要负责人给我们讲的话:“You know why you are here? ... You know how important the undergraduate students are to us? You might even find a prince or princess in your class one day, from another country! ” 那个语气呀,就跟大老板差不多。我们是Ivy!是贵族学校!这不是很清楚的暴露了我们的用途吗,是为本科的“公主”和“王子”们服务的。后来我听说,的确是这样的,这个 ITADP 就是在本科生家长的强烈要求下成立的。而王子和公主们,可能还是没有得到他们想要的。

这个课是不可以旷的,旷课两节就会 fail 掉,从而取消 TA 的资格。这个课也是不可以迟到的,否则老师在下课的时候会警告你,要是再迟到就会给你 fail。这个课的规则是如此的严格,真是非常特殊。没有任何专业和非专业的课程有如此的军事化管理。再来看这个课程是什么内容。其实主要的内容就是告诉大家什么是好的 teaching,什么是坏的,大多都是废话。我记得在讨论教育的时候我提到,一个好的老师应该引导学生去思考,告诉他们知识是怎么获得的,而不是把知识灌输给学生;应该减轻学生的压力,鼓励他们创新。结果老师对我的这些说法很木然。很显然我的说法,她丝毫没有预料到过。她所期望的只是写黑板时字不要写得太小之类的。

然后我们做很多所谓的 microteaching 练习。microteaching 就是在课堂上对其他参加课程的同学讲授一些自己专业上最基本的常识。拿我来说吧,我第一次讲的内容就是二叉树。这个练习有一定的好处,就是让我明白了其实很多时候老师认为学生明白了,其实老师只知道自己明白了,而不知道学生其实是不明白的。但是我后来发现,对于 Cornell 的本科生,基本是没法知道他们是否明白。不论是我讲课,或者我和本科生一起听课,很普通的情况是这样:老师经过一段精彩的讲述之后,问:“你们明白了吗?”没有人吭声。再问:“有人没有明白的请举手。”也没有人举手,一片寂静。老师无可奈何,只好继续讲下去。总之,大家都以为别人都听懂了,都很害怕别人笑话自己不懂,感觉非常像国内的高中。不过总的说来,microteaching是很费精力的。讲一两次还行,反复的做就很烦了。课程的另一个内容是对自己的话进行录音,每次10分钟以上,一个星期三次,必须及时提交给老师评语。这个对于英语有一些帮助,不过费时间太多了,为了那10分钟,经常需要准备一两个小时。而且经常找不到有趣的话题,所以觉得很无聊。

因为第一期的时候,系里有一个教授碰巧给我一个 RA ,所以我没有参加 EDUC 578 (当然,像所有中国学生一样,我夏天的评定是没有通过的),所以第二期的时候我才被迫参加了这个课程。每个星期这个课程都耗费我太多的精力,以至于我在第二期的时候选的唯一的一门理论课后来没有精力完成。一方面这也是由于教课老师的问题,他只会在黑板上写定理……证明…… 所以后来我drop掉了那门传说中的牛人讲的课程,导致第二期就只修了 ITADP 的课程。一个系里都不认为是课程的课程,就这样占用了我一学期。

幸亏我表现还好,每次都貌似很积极的样子,很配合老师,其实心里在骂这个 program。同时我也比较同情老师,因为她也是打工的,讲了这么久这个课也觉得有点无聊了,虽然她没有直说 ;-) 所以很幸运的在期末勉强通过了评定,以后就再也不用上那个可怕的课了。不过还有不知道多少中国学生仍然在经受 ITADP 的煎熬……

http://shredderyin.spaces.live.com/blog/cns!73FF08D72187CE2E!5261.entry

Cornell 感受 (2)

再谈一下本科教育吧,因为我感觉“王子”和“公主”其实挺苦的,跟在中国上高中差不多。因为Cornell本科生太多,有两万多人,而每个人都可以选修任何一门基础课,所以经常人满为患。我第一学期做 CS 100m 的 TA。100m是一门最基础的编程课,前一半讲授 Matlab,后一半讲授 Java。天知道 Matlab 怎么被当成“编程语言”来教了,以至于在后一半的时候学生还经常继续被 Matlab 误导,用那种思维方法来写 Java。不过现在100m已经去掉了Java的内容,变成了纯 Matlab 的课程。要学 Java 就去上 100j.

那一期总共登记的学生有280多个,课堂我第一堂课去过一次,教授让我们去跟学生们见个面。结果只去了两个TA,一个大礼堂坐满的人,教授差点都不知道我在那里。学生们都很懵懂,所以老师讲什么基本上没有什么关系。因为基本没有什么互动,所以感觉还不如用个摄像机拍下来,这样学生一遍看不懂还可以倒回去再看。不过我知道他们不会那么做的,要不然大家都不来上课了。

我们总共有9个TA和十来个本科 consultant,负责批改作业,试卷和答疑。编程作业是两星期一次,期中考有两次,期末考一次。每次作业提交之后,大家都会马不停蹄开始组织批改。那三次考试就更加军事化了,每次都是当堂闭卷考试,一个大礼堂楼上楼下全都坐满。考考考啊…… 监考完之后,大伙就按姓名字母把试卷分批收上来,然后“押送”到一个房间开始流水作业。在黑板上画一个流程表,改完一个字母就在上面画一个X。一般会从晚上9点半一直弄到半夜一两点钟,才能完成任务。

我改作业都很慈悲,不忍心为了一点小错就扣分。如果思路是对的,我就不会扣很多分。但是不是所有 TA 都这么好,有些特别刁钻,会想方设法把分扣下来,以显示自己比别人懂得多。如果要求重判分数,还需要提交书面申请。很多高年级课程居然还会课堂点名,有些每星期都有一次作业,需要在课堂当堂交作业,如果迟交就会被拒绝接受,没有商量。有些交作业需要把每道题分开放在不同的信封里,这样他们方便分给TA,每个人只改一道题。一切都机械化了。所以本科生基本上生活在作业,考试与分数的恐惧之中。这样的环境下,所谓的西方 critical thinking,只不过是一个笑话。这种待遇是我在川大都没有遇到过的,现在比较一下,川大才算是真正的大学呀 ;-)

每学期中和学期末都有学生对 TA 的评定。会对各方面进行打分。不过从来没见过这个分数起了什么作用就是。另外据说 Cornell 对本科生有各种奇怪的隐性收费的做法以增加收入,因为学校有很大的财政赤字。

转载网址:http://kurttlin.diandian.com/post/2011-10-03/5502426

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/8620978

『转』写给4年前开始编程序的自己

最近在网上看到有人写了一篇关于《写给4年前没有开始做设计的自己》,突然也想写这样一篇文章。具体那篇文章的内容我并没有细读,防止自己的思路照着他的来。

首先,我先简单介绍下自己,好为后面的内容做一个铺垫。我今年23岁,内蒙古人,今年6月将于粤东地区韩山师范学院毕业,软件工程专业。

一、如果可以,你应该去学文学或者经济学、或者其他你喜欢的专业

这样的建议并不是因为计算机专业不好,或者不适合。行业内普遍认为IT人士在同年龄的白领中是比较辛苦的,加班现象是大多数互联网公司中常见的。且长时间从事计算机相关工作,对健康也是有一定害处。如果你不信可以看看你现在的自己和四年后的我的这两张脸。明显苍老了不止4岁。长时间坐在电脑前也会引发颈椎病,当然如果你坐姿可以调整好的话,也可以避免这个问题。如果你想要一个好的身体和白白净净的脸,还是换行吧,别那么倔强。

二、你该如何去学计算机

四年前开始学计算机的你,充满了自信,做事情分得清轻重缓急,抓得住方向。但是你的过于自信造成了我今天的知识面狭窄,只会做网页的状况,且你没有给予一些重点学科予以重视。

你觉得数学没什么,编程时很少会涉及到复杂的算法,就算涉及到,你也能够解决,只是付出的时间多一些。简单的递归和排序对你不是问题。我要告诉你,你错了。计算机之所以可以发展到今天,就是因为数学,其根本原理就是基于数学。是的,编程时你很少会涉及到使用书中的数学知识,但当你想涉及底层或高效率编程时,你的数学会让你寸步难行。

你觉得英语没什么,编程时很少会涉及到复杂的单词,就算涉及到,你也可以金山词霸,只是动几下手指就好了。简单的变量命名规则对你不是问题。我要告诉你,你错了。大多先进新的技术资料均是源于美国等发达国家,且相匹配的文档书籍也是英文的。是的,你可以去看中文翻译版。但是我要告诉你,不是所有的书你都可以找到翻译版,不是所有的英文网站你都以用谷歌翻译;在你研究一项新技术的时候,苦无资料的你只能去一个次一个词的翻译国外文档或书籍。

三、别去听老师讲课,你可以大胆的逃课

当然,前提是你要保证不要挂科。国内的觉得多数学府,其主要任务在我看来不过是所谓的“科研”。这里我加上引号的意义很明显,大学根本就没有交出它本应交出的科研成果,所以一切都是走形式。是的,是走形式。老师的工作重点是考职称,系辅导员的工作重点是不要出什么乱子,执行书记的指示,然后把你当做是一个高中生一样圈养。大学里的老师,也很少有真正有学识的。打个比方,可能教你数据挖掘的老师自己都没有去挖掘过,可能只是在家里拿个小铲子挖挖花盆罢了。当然,不能排除有真正好的老师,但真的是可遇而不可求。即使你遇到了一个很有学识的老师,大多数情况下,他也是个不会讲课的老师,或者是个精力不在教学的老师。

所以,你要大胆的逃课。图书馆是你的将要泡的地方,你可以把他当做是你的女朋友。她能提供给你大多数你想要的,只要你能静心研读。其实,你完全可以利用两节课的时间去看老师用四节课讲的内容。

四、别总是做一样东西,去广泛涉猎吧

大一时你给自己定向PHP,这是一个不错的决定,并且也因为这个觉得,即将毕业的你也找到了一份不错的工作。但是我要告诉你,不要总是PHP。我承认PHP让你学到了很多,甚至通过PHP使我学到了脱离语言本身的东西。我也并不是说长时间的编写一门语言会怎样怎样,很多大牛都说语言无关(关于这个观点,后面我也说说自己的观点)。真正的弊端是,长时间的网页开发会造成你的目光短浅,无视其他平台的优越性,知识面狭窄。如果你能做到更多的平台,我相信你会对编程本身有一个质变的理解。

五、你要坚决抵制微软平台

其实你已经这样做了,但是还是要说一下。微软是一个垄断性的企业,其WINDOWS流行程度虽然降低,但他仍然是PC操作系统的龙头老大。微软为实现其垄断梦,采用傻瓜编程的方式,蒙骗了大多数微软平台程序员。你用.net去开发一个网页,甚至不需要自己去写HTML,只需要用VS去画就可以了。是的,这样很方便。你用.net实现MVC只需要按照它的框架即可。是的,这样很方便。

但是我要问你,你知道你所画出来的网页本质是什么?如果我要你实现一个复杂的JS效果,你在它复杂的类库中找不到对应的类的时候,你该怎么办?

我还要问你,你知道MVC的本质是什么吗?M、V、C分别是什么?有什么优点缺点?意义何在?

如果你走上了这条路,毫无疑问的,4年后的我只能呜呜呀呀的说的大概吧。呵呵,幸好你没有走上这条路。

六、大学学的是什么

这段应该不是写给四年前的我,只是比较有意义,所以决定写出来。因为大一的时候我已经明白了这个道理。

大学并不是高中,没有老师会整天抓着你学习,管你吃喝拉撒。一切都是靠你自己。学习也是一样。大多数老师是不负责任的,上完课布置个神马作业然后走人。如果你不想白读这个大学,那么你要开始自学,并且学会自学。

有些人会说,我很笨怎么办?我不会自学怎么办?

首先,我觉得没有人是笨的,除非你是弱智。即使是弱智,我依然认为你不是笨的。为什么这么说呢,我是一个极端的人,我相信主观因素可以克服,只要你有足够的自信,并且付出足够的努力。当你决定要做一件事,并且客观上是有可能成功,而你却失败了的时候,我只能说是你自己付出不够努力,不是天不下雨天不刮风的原因。

其次,自学其实没有你想的那么难。只要你有书,只要你有电脑,神马都是浮云。我的意思是没有什么问题是解决不了的。即使是在你一窍不通的情况下让你去搭建一个邮件服务器,给你书和电脑,只要你肯努力,肯定是可以做到的。谷歌百度是你自学的莫大助理。想想互联网搜索还没有星期的90年代,如果你碰到一个问题,除了翻查书海和问人几乎没有更加便捷的办法。所以,你要庆幸你活在这样一个时代,感谢互联网用户。并且一直秉承着:form the Internet,to the Internet的精神。

最后,关于语言无关性,我想说说自己的观点。

很多老师和大牛会提及语言无关性。但是我想说下自己的反对观点。我并不认为这句话是错的,只是觉得不是所有人都有资格说这句话。如果是一个菜鸟,大言不惭的说语言无关性,那可真是笑话了。一门语言都无法精通的人,何谈语言无关性。是的,相同的问题可以同步多种编程语言解决。对于大牛来说,无论使用哪种语言可能都是得心应手,并不是他对所有的语言都精通,而是他已经掌握了编程语言的本质以及编程思想,学习一门新的语言可能只是十天半月的问题。但是对于初学者来说,编程本质与思想,以及对于细节问题的纠结,使他们无法脱离问题本身,而将大部分精力花在语言上,这没什么不值得的。

所以我认为,你可以说语言无关性,但你首先要扛得起“大牛”这两个。

再者,大牛也不要对初学者强调语言无关性,你是在误导他们。等他们真正达到那个境界,这个思想自然就领悟了。

这篇文章被推荐到首页是我没有想到的,文中确实存在过激的观点和个人情绪的发泄,发表当初并没有考虑到这些。如果对于某些读者造成了困惑和不满,在这里我向大家真诚的道歉。

关于文中我补充几点大家争议较大的内容:

1、这篇文章是以现在的我写给4年前的我为出发点,且写文章的时候也一直把我这对自己说话的口吻去说的。语言过于偏激也大多是针对自己,并无恶意。

2、是否应该翘课的问题。我说的太过偏激了,可能是因为在我们学校我没有接触到真正认真负责搞教学的老师,并且即使是上课我也是在下面自习的。其他人的情况可能和我不同,可能真的又值得去听认真去听的老师。如果有这样的老师,当然应该去认真听课。同时也应该通过老师去了解课程和行业,毕竟老师的视野要比我们宽泛的多。大学中我就遇到一个恩师,虽然他和其他老师一样不注重教学不会上课,但他给我提供的机会以及私下里聊天教我的东西足够我受用终生。

3、关于自动化我依然坚持我的观点。我并不是一口否定不应该去使用开源类库、框架等工具,我个人也经常用这些东西,比如THINKPHP,或者其他常用类。但使用这些的过程中,我会尽可能多的去了解其原理。我只是不想做一个局限于某个平台的程序员,希望自己能够接触更多的底层的东西,提高自己。同时我也认为,这是能够区分一个程序员能力的标准。有人有不同观点,我不想争论。正如我所说的,并不是不去使用自动化工具,而是应该在使用过程中明白其原理。

4、学校好坏以及是否有参加工作并不是衡量一个人能力的标准。我承认我的学校说出去没几个人知道,但这决定不了什么。别人高中玩了三年考到我们学校,我用半条命出来拼出个第一,才勉强考上本科,教育水平不同而已。可能你的优越性只是在于你出生在一个比较发达的城市,而我却是生在一个只有200多户人家的山村。但我相信时间会改变一切,我相信。

转自 始终不够 http://blog.csdn.net/huyanping/article/details/8581623

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/8620865

『转』一个合格的程序员应该读过哪些书

编者按:2008年8月4日,StackOverflow 网友 Bert F 发帖提问:哪本最具影响力的书,是每个程序员都应该读的?

“如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本, 你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西。”

很多程序员响应,他们在推荐时也写下自己的评语。 以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书。

其实除了前10本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同时摘译部分推荐人的评语。

下面就按照各本书的推荐数排列。

1、《代码大全》 史蒂夫·迈克康奈尔

推荐数:1684

“优秀的编程实践的百科全书,《代码大全》注重个人技术,其中所有东西加起来, 就是我们本能所说的“编写整洁的代码”。这本书有50页在谈论代码布局。” —— Joel Spolsky

对于新手来说,这本书中的观念有点高阶了。到你准备阅读此书时,你应该已经知道并实践过书中99%的观念。– esac

Steve McConnell的原作《代码大全》(第1版)是公认的关于编程的最佳实践指南之一, 在过去的十多年间,本书一直在帮助开发人员编写更好的软件。

现在,作者将这本经典著作全新演绎,融入了最前沿的实践技术,加入了上百个崭新的代码示例, 充分展示了软件构建的艺术性和科学性。McConnell汇集了来自研究机构、学术界以及业界日常实践的主要知识, 把最高效的技术和最重要的原理交织融会为这本既清晰又实用的指南。

无论您的经验水平如何,也不管您在怎样的开发环境中工作,也无论项目是大是小, 本书都将激发您的思维并帮助您构建高品质的代码。

代码大全(第2版))》做了全面的更新,增加了很多与时俱进的内容,包括对新语言、新的开发过程与方法论的讨论等等。

2、《程序员修炼之道

推荐数:1504

对于那些已经学习过编程机制的程序员来说,这是一本卓越的书。 或许他们还是在校生,但对要自己做什么,还感觉不是很安全。

就像草图和架构之间的差别。虽然你在学校课堂上学到的是画图,你也可以画的很漂亮, 但如果你觉得你不太知道从哪儿下手,如果某人要你独自画一个P2P的音乐交换网络图,那这本书就适合你了。—— Joel

《程序员修炼之道:从小工到专家》内容简介:《程序员修炼之道》由一系列独立的部分组成, 涵盖的主题从个人责任、职业发展,知道用于使代码保持灵活、并且易于改编和复用的各种架构技术, 利用许多富有娱乐性的奇闻轶事、有思想性的例子及有趣的类比, 全面阐释了软件开发的许多不同方面的最佳实践和重大陷阱。

无论你是初学者,是有经验的程序员,还是软件项目经理,《程序员修炼之道:从小工到专家》都适合你阅读。

3、《计算机程序的构造和解释

推荐数:916

就个人而言,这本书目前为止对我影响醉倒的一本编程书。

《代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和交易细节。 其他像《人件集》、《计算机编程心理学》和《人月神话》这些书会深入软件开发的心理层面。 其他书籍则处理算法。这些书都有自己所属的位置。

然而《计算机程序的构造和解释》与这些不同。 这是一本会启发你的书,它会燃起你编写出色程序的热情; 它还将教会你认识并欣赏美; 它会让你有种敬畏,让你难以抑制地渴望学习更多的东西。

其他书或许会让你成为一位更出色的程序员,但此书将一定会让你成为一名程序员。

同时,你将会学到其他东西,函数式编程(第三章)、惰性计算、元编程、虚拟机、解释器和编译器。

一些人认为此书不适合新手。 个人认为,虽然我并不完全认同要有一些编程经验才能读此书,但我还是一定推荐给初学者。 毕竟这本书是写给著名的6.001,是麻省理工学院的入门编程课程。 此书或许需要多做努力(尤其你在做练习的时候,你也应当如此),但这个价是对得起这本书的。

4、《C程序设计语言

推荐数:774

这本书简洁易读,会教给你三件事:C 编程语言;如何像程序员一样思考;底层计算模型。 (这对理解“底层”非常重要)—— Nathan

《C程序设计语言》(第2版新版)讲述深入浅出,配合典型例证,通俗易懂,实用性强, 适合作为大专院校计算机专业或非计算机专业的C语言教材,也可以作为从事计算机相关软硬件开发的技术人员的参考书。

《C程序设计语言》(第2版新版)原著即为C语言的设计者之一Dennis M.Ritchie和著名的计算机科学家Brian W.Kernighan合著的 一本介绍C语言的权威经典著作。 我们现在见到的大量论述C语言程序设计的教材和专著均以此书为蓝本。 原著第1版中介绍的C语言成为后来广泛使用的C语言版本——标准C的基础。

人们熟知的“hello,world”程序就是由本书首次引入的,现在,这一程序已经成为所有程序设计语言入门的第一课。

5、《算法导论

推荐数:671

《代码大全》教你如何正确编程; 《人月神话》教你如何正确管理; 《设计模式》教你如何正确设计……

在我看来,代码只是一个工具,并非精髓。 开发软件的主要部分是创建新算法或重新实现现有算法。 其他部分则像重新组装乐高砖块或创建“管理”层。

我依然梦想这样的工作,我的大部分时间(>50%)是在写算法,其他“管理”细节则留给其他人…… —— Ran Biron

  • 经典的算法书,被亚马逊网,《程序员》等评选为2006年最受读者喜爱的十大IT图书之一。
  • 算法领域的标准教材,全球多所知名大学选用
  • MIT名师联手铸就,被誉为“计算机算法的圣经”
  • 编写上采用了“五个一”,即一章介绍一个算法、一种设计技术、一个应用领域和一个相关话题。

6、《重构:改善既有代码的设计

推荐数:617

《重构:改善既有代码的设计》清晰地揭示了重构的过程,解释了重构的原理和最佳实践方式, 并给出了何时以及何地应该开始挖掘代码以求改善。 书中给出了70多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。

《重构:改善既有代码的设计》提出的重构准则将帮助你一次一小步地修改你的代码,从而减少了开发过程中的风险。

《重构:改善既有代码的设计》适合软件开发人员、项目管理人员等阅读, 也可作为高等院校计算机及相关专业师生的参考读物。

我想我不得不推荐《重构》:改进现有代码的设计。—— Martin

我必须承认,我最喜欢的编程语录是出自这本书:任何一个傻瓜都能写出计算机能理解的程序, 而优秀的程序员却能写出别人能读得懂的程序。—— Martin Fowler

7、《设计模式

推荐数:617

自1995年出版以来,本书一直名列Amazon和各大书店销售榜前列。 近10年后,本书仍是Addison-Wesley公司2003年最畅销的图书之一。 中文版销售逾4万册。

就我而言,我认为四人帮编著的《设计模式》是一本极为有用的书。 虽然此书并不像其他建议一样有关“元”编程,但它强调封装诸如模式一类的优秀编程技术, 因而鼓励其他人提出新模式和反模式(antipatterns),并运用于编程对话中。—— Chris Jester-Young

8、《人月神话

推荐数:588

在软件领域,很少能有像《人月神话》一样具有深远影响力并且畅销不衰的著作。

Brooks博士为人们管理复杂项目提供了最具洞察力的见解。 既有很多发人深省的观点,又有大量软件工程的实践。 本书内容来自Brooks博士在IBM公司System/360家族和OS/360中的项目管理经验。

该书英文原版一经面世,即引起业内人士的强烈反响,后又译为德、法、日、俄中等多种语言,全球销量数百万册。 确立了其在行业内的经典地位。

9、《计算机程序设计艺术

推荐数:542

《计算机程序设计艺术》系列著作对计算机领域产生了深远的影响。 这一系列堪称一项浩大的工程,自1962年开始编写,计划出版7卷,目前已经出版了4卷。

《美国科学家》杂志曾将这套书与爱因斯坦的《相对论》等书并列称为20世纪最重要的12本物理学著作。 目前Knuth正将毕生精力投入到这部史诗性著作的撰写中。

这是高德纳倾注心血写的一本书。—— Peter Coulton

10、《编译原理》(龙书)

推荐数:462

我很奇怪,居然没人提到龙书。(或许已有推荐,我没有看到)。 我从没忘过此书的第一版封面。 此书让我知道了编译器是多么地神奇绝妙。- DB

11、《深入浅出设计模式

推荐数:445

强大的写作阵容。

  • 《Head First设计模式》(中文版) 作者Eric Freeman;
  • ElElisabeth Freeman是作家、讲师和技术顾问。
  • Eric拥有耶鲁大学的计算机科学博士学位,E1isabath拥有耶鲁大学的计算机科学硕士学位。
  • Kathy Sierra(javaranch.com的创始人)FHBert Bates是畅销的HeadFirst系列书籍的创立者,也是Sun公司Java开发员认证考试的开发者。

本书的产品设计应用神经生物学、认知科学,以及学习理论,这使得这本书能够将这些知识深深地印在你的脑海里, 不容易被遗忘。

本书的编写方式采用引导式教学,不直接告诉你该怎么做,而是利用故事当作引子,带领读者思考并想办法解决问题。 解决问题的过程中又会产生一些新的问题,再继续思考、继续解决问题,这样可以加深体会。

作者以大量的生活化故事当背景,例如第1章是鸭子,第2章是气象站,第3章是咖啡店, 书中搭配大量的插图(几乎每一页都有图),所以阅读起来生动有趣,不会感觉到昏昏欲睡。

作者还利用歪歪斜斜的手写字体,增加“现场感”。 精心设计许多爆笑的对白,让学习过程不会太枯燥。 还有模式告白节目,将设计模式拟人化成节目来宾,畅谈其内在的一切。 每一章都有数目不等的测验题。 每章最后有一页要点整理,这也是精华所在,我都是利用这一页做复习。

我知道四人帮的《设计模式》是一本标准书,但倒不如先看看这部大部头,此书更为简易。 一旦你了解了解了基本原则,可以去看四人帮的那本圣经了。- Calanus

12、《哥德尔、艾舍尔、巴赫书:集异璧之大成

推荐数:437

如果下昂真正深入阅读,我推荐道格拉斯·侯世达(Douglas Hofstadter)的《哥德尔、艾舍尔、巴赫书》。 他极为深入研究了程序员每日都要面对的问题:递归、验证、证明和布尔代数。 这是一本很出色的读物,难度不大,偶尔有挑战,一旦你要鏖战到底,将是非常值得的。 – Jonik

13、《代码整洁之道

推荐数:329

细节之中自有天地,整洁成就卓越代码

尽管糟糕的代码也能运行,但如果代码不整洁,会使整个开发团队泥足深陷, 写得不好的代码每年都要耗费难以计数的时间和资源。 然而这种情况并非无法避免。

著名软件专家RoberfC.Marlin在《代码整洁之道》中为你呈现出了革命性的视野。Martin携同ObjectMetltor公司的同事,从他们有关整洁代码的最佳敏捷实践中提炼出软件技艺的价值观, 以飨读者,让你成为更优秀的程序员——只要你着手研读《代码整洁之道》。

阅读《代码整洁之道》需要你做些什么呢?你将阅读代码——大量代码。 《代码整洁之道》促使你思考代码中何谓正确,何谓错误。 更重要的是,《代码整洁之道》将促使你重新评估自己的专业价值观,以及对自己技艺的承诺。

从《代码整洁之道》中可以学到:

  • 好代码和糟糕的代码之间的区别;
  • 如何编写好代码,如何将糟糕的代码转化为好代码;
  • 如何创建好名称、好函数、好对象和好类;
  • 如何格式化代码以实现其可读性的最大化;
  • 如何在不妨碍代码逻辑的前提下充分实现错误处理;
  • 如何进行单元测试和测试驱动开发。

虽然《代码整洁之道》和《代码大全》有很多共同之处,但它有更为简洁更为实际的清晰例子。 – Craig P. Motlin

14、《Effective C++》和《More Effective C++

推荐数:297

在我职业生涯早期,Scott Meyer的《Effective C++》和后续的《More Effective C++》都对我的编程能力有着直接影响。 正如当时的一位朋友所说,这些书缩短你培养编程技能的过程,而其他人可能要花费数年。

去年对我影响最大的一本书是《大教堂与市集》,该书教会我很有关开源开发过程如何运作,和如何处理我代码中的Bug。 – John Channing

15、《编程珠玑

推荐数:282

多年以来,当程序员们推选出最心爱的计算机图书时,《编程珠玑》总是位列前列。 正如自然界里珍珠出自细沙对牡蛎的磨砺,计算机科学大师Jon Bentley以其独有的洞察力和创造力, 从磨砺程序员的实际问题中凝结出一篇篇不朽的编程“珠玑”, 成为世界计算机界名刊《ACM通讯》历史上最受欢迎的专栏, 最终结集为两部不朽的计算机科学经典名著,影响和激励着一代又一代程序员和计算机科学工作者。

本书为第一卷,主要讨论计算机科学中最本质的问题:如何正确选择和高效地实现算法。

尽管我不得不羞愧地承认,书中一半的东西我都没有理解,但我真的推荐《编程珠玑》,书中有些令人惊奇的东西。 – Matt Warren

16、《修改代码的艺术》by Michael Feathers

本书是继《重构》和《重构与模式》之后探讨修改代码技术的又一里程碑式的著作, 而且从涵盖面和深度上都超过了前两部经典。 书中不仅讲述面向对象语言(Java、C#和C++)代码,也有专章讨论C这样的过程式语言。

作者将理解、测试和修改代码的原理、技术和最新工具(自动化重构工具、单元测试框架、仿对象、集成测试框架等), 与解依赖技术和大量开发和设计优秀代码的原则、最佳实践相结合,许多内容非常深入,而且常常发前人所未发。

书中处处体现出作者独到的洞察力,以及多年开发和指导软件项目所积累的丰富经验和深厚功力。 通过这部集大成之作,你不仅能掌握最顶尖的修改代码技术,还可以大大提高对代码和软件开发的领悟力。

我认为没有任何一本书能向这本书一样影响了我的编程观点。 它明确地告诉你如何处理其他人的代码,含蓄地教会你避免哪些(以及为什么要避免)。- Wolfbyte

同意。很多开发人员讨论用干净的石板来编写软件。 但我想几乎所有开发人员的某些时候是在吃其他开发人员的狗食。– Bernard Dy

17、《编码:隐匿在计算机软硬件背后的语言

这是一本讲述计算机工作原理的书。

不过,你千万不要因为“工作原理”之类的字眼就武断地认为,它是晦涩而难懂的。 作者用丰富的想象和清晰的笔墨将看似繁杂的理论阐述得通俗易懂,你丝毫不会感到枯燥和生硬。 更重要的是,你会因此而获得对计算机工作原理较深刻的理解。 这种理解不是抽象层面上的,而是具有一定深度的,这种深度甚至不逊于“电气工程师”和“程序员”的理解。

不管你是计算机高手,还是对这个神奇的机器充满敬畏之心的菜鸟, 都不妨翻阅一下《编码:隐匿在计算机软硬件背后的语言》,读一读大师的经典作品,必然会有收获。

我推荐Charles Petzold的《编码》。 在这个充满工具和IDE的年代,很多复杂度已经从程序员那“抽取”走了,这本书一本开眼之作。 – hemil

18、《禅与摩托车维修艺术 / Zen and the Art of Motorcycle Maintenance

对我影响最大的那本书是 Robert Pirsig 的《禅与摩托车维修艺术》。 不管你做什么事,总是要力求完美,彻底了解你手中的工具和任务,更为重要的是, 要有乐趣(因为如果你做事有乐趣,一切将自发引向更好的结果)。 – akr

19、《Peopleware / 人件集:人性化的软件开发

Demarco 和 Lister 表明,软件开发中的首要问题是人,并非技术。 他们的答案并不简单,只是令人难以置信的成功。 第二版新增加了八章内容。 – Eduardo Molteni

20、《Coders at Work / 编程人生

这是一本访谈笔录,记录了当今最具个人魅力的15位软件先驱的编程生涯。 包括DonaldKnuth、Jamie Zawinski、Joshua Bloch、Ken Thompson等在内的业界传奇人物,为我们讲述了 他们是怎么学习编程的,在编程过程中发现了什么以及他们对未来的看法, 并对诸如应该如何设计软件等长久以来一直困扰很多程序员的问题谈了自己的观点。

一本非常有影响力的书,可以从中学到一些业界顶级人士的经验,了解他们如何思考并工作。 – Jahanzeb Farooq

21、《Surely You’re Joking, Mr. Feynman! / 别闹了,费曼先生!》

虽然这本书可能有点偏题,但不管你信不信,这本书曾在计算机科学专业课程的阅读列表之上。 一个优秀的角色模型,一本有关好奇心的优秀书籍。 – mike511

22、《Effective Java 中文版

此书第二版教你如何编写漂亮并高效的代码,虽然这是一本Java书,但其中有很多跨语言的理念。 – Marcio Aguiar

23、《Patterns of Enterprise Application Architecture / 企业应用架构模式

很奇怪,还没人推荐 Martin Fowler 的《企业应用架构模式》- levi rosol

24、《The Little Schemer》和《The Seasoned Schemer》 nmiranda

这两本是LISP的英文书,尚无中文版。 美国东北大学网站上也有电子版。

25、《交互设计之路》英文名:《The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity》该书作者:Alan Cooper,人称Visual Basic之父,交互设计之父。

本书是基于众多商务案例,讲述如何创建更好的、高客户忠诚度的软件产品和基于软件的高科技产品的书。 本书列举了很多真实可信的实际例子,说明目前在软件产品和基于软件的高科技产品中,普遍存在着“难用”的问题。

作者认为,“难用”问题是由这些产品中存在着的高度“认知摩擦”引起的, 而产生这个问题的根源在于现今软件开发过程中欠缺了一个为用户利益着想的前期“交互设计”阶段。“难用”的产品不仅损害了用户的利益,最终也将导致企业的失败。

本书通过一些生动的实例,让人信服地讲述了由作者倡导的“目标导向”交互设计方法在解决“难用”问题方面的有效性, 证实了只有改变现有观念,才能有效地在开发过程中引入交互设计,将产品的设计引向成功。

本书虽然是一本面向商务人员而编写的书,但也适合于所有参与软件产品和基于软件的高科技产品开发的专业人士, 以及关心软件行业和高科技行业现状与发展的人士阅读。

他还有另一本中文版著作:《About Face 3 交互设计精髓》

26、《Why’s (Poignant) Guide to Ruby 》

如果你不是程序员,阅读此书可能会很有趣,但如果你已经是个程序员,可能会有点乏味。

27、《Unix编程艺术》

It is useful regardless operating system you use. – J.F. Sebastian

不管你使用什么操作系统,这本书都很有用。 – J.F. Sebastian

28、《高效程序员的45个习惯:敏捷开发修炼之道

45个习惯,分为7个方面:工作态度、学习、软件交付、反馈、编码、调试和协作。

每一个具体的习惯里,一开始提出一个谬论,然后展开分析,之后有正队性地提出正确的做法,并设身处地地讲出了正确做法给你个人的“切身感受”,最后列出几条注意事项,帮助你修正自己的做法(“平衡的艺术”)。

29、《测试驱动开发

前面已经提到的很多书都启发了我,并影响了我,但这本书每位程序员都应该读。 它向我展示了单元测试和TDD的重要性,并让我很快上手。 – Curro

我不关心你的代码有多好或优雅。 如果你没有测试,你或许就如同没有编写代码。 这本书得到的推荐数应该更高些。 人们讨论编写用户喜欢的软件,或既设计出色并健壮的高效代码,但如果你的软件有一堆bug,谈论那些东西毫无意义。– Adam Gent

30、《点石成金:访客至上的网页设计秘笈

可用性设计是Web设计中最重要也是难度最大的一项任务。 《点石成金-访客至上的网页设计秘笈(原书第二版)》作者根据多年从业的经验,剖析用户的心理, 在用户使用的模式、为扫描进行设计、导航设计、主页布局、可用性测试等方面提出了许多独特的观点, 并给出了大量简单、易行的可用性设计的建议。

本书短小精炼,语言轻松诙谐,书中穿插大量色彩丰富的屏幕截图、趣味丛生的卡通插图以及包含大量信息的图表, 使枯燥的设计原理变得平易近人。

本书适合从事Web设计和Web开发的技术人员阅读,特别适合为如何留住访问者而苦恼的网站/网页设计人员阅读。 这是一本关于Web设计原则而不是Web设计技术的书。

本书作者是Web设计专家,具有丰富的实践经验。 他用幽默的语言为你揭示Web设计中重要但却容易被忽视的问题,只需几个小时, 你便能对照书中讲授的设计原则找到网站设计的症结所在,令你的网站焕然一新。

取决于你所追求的目标。 我喜欢《代码大全》是因纯编程,《点石成金》是一本有关UI设计的卓越书籍。 – Justin Standard

 

 

转自:justjavac  http://justjavac.com/other/2012/05/15/qualified-programmer-should-read-what-books.html

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/8611448

『转』程序员之路——一个老程序员对刚上大学的学弟学妹的忠告

始终认为, 对一个初学者来说,IT界的技术风潮是不可追赶。 我时常看见自己的DDMM们把课本扔了,去买些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心。 而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可以不用指针等等则让我觉得好笑。

C#就象当年的ASP 一样,“忽如一夜春风来,千树万树梨花开”,结果许多学校的信息学院成了“Web 学院”。 96, 97级的不少大学生都去做Web了。当然我没有任何歧视某一行业的意识。 我只是觉得如果他们把追赶这些时髦技术的时间多花一点在基础的课程上应该是可以走得更远的

几个误区

初学者对C#风潮的追赶其实也只是学习过程中经常遇到的几个误区之一。 我将用一些实际的例子来说明这些现象,你可以按部就班的看看自己是不是属于其中的一种或者几种:

认为计算机技术等于编程技术:

有些人即使没有这个想法,在潜意识中也有这样的冲动。 让我奇怪的是,许多信息学院的学生也有这样的念头。 认为计算机专业就是编程专业,与编程无关的,或者不太相关课程他统统都不管,极端的学生只要书上没带“编程”两个字他就不看。

其实编程只是计算机技术应用过程中一种复杂性最低的劳动,这就是为什么IT业最底层的人是程序员(CODER)。 计算机技术包括了多媒体,计算机网络,人工智能,模式识别,管理信息系统等等这些方面。 编程工作只是在这些具体技术在理论研究或者工程实践的过程中表达算法的过程。

编程的人不一定对计算机技术的了解就一定很高。而一个有趣的现象是,不少大师级的计算机技术研究者是不懂编程的。 网上的炒作和现实中良好的工作待遇把编程这种劳动神秘化了。 其实每一个程序员心里都明白,自己这些东西,学的时候并不比其它专业难,所以自然也不会高档到哪里去

咬文嚼字的孔已己作风:

我见过一本女生的《计算机网络原理》教材,这个女生像小学生一样在书上划满了横杠杠,笔记做得满满的,打印出来一定比教材还厚。 我不明白的是,像计算机网络原理这样的课程有必要做笔记? 我们的应试教育的确害了不少学生,在上《原理》这一类课程的时候许多学生像学《马列原理》一样逐字背诵记忆。 这乃是我见过的最愚蠢的行为。 所谓《原理》,即是需要掌握它为什么这样做,学习why,而不是how(怎样做)。 极端认真的学生背下以太网的网线最大长度,数据帧的长度,每个字段的意义,IP报头的格式等等,但是忘了路由的原则,忘了TCP/IP协议设计的宗旨。 总之许多人花了大量的时间把书背得滚瓜烂熟却等于什么也没学。

在学习编程的时候这些学生也是这样,他们确切的记得C++语法的各个细节。 看完了C++ 教程后看《Thinking in C++》(确实是好书),《Inside C++》,《C++ reference》,this C++, that C++……, 然后是网上各种各样的关于C++语法的奇闻逸事,然后发现自己又忘了C++的一些语法,最后回头继续恶补…。

有个师弟就跟我说:“C++太难了,学了这里忘了那里,学了继承忘了模板。”

我的回答道:“你不去学就容易了”。

我并没有教坏他,只是告诉他,死抠C++的语法就和孔已己炫耀茴香豆的茴字有几种写法一样毫无意义。 你根本不需要对的C++语法太关心,动手编程就是了,有不记得的地方一查MSDN就立马搞定。 我有个结论就是,实际的开发过程中对程序语法的了解是最微不足道的知识。 这是为什么我在为同学用Basic(我以前从没有学过它)写一个小程序的时候,只花了半个小时看了看语法,然后再用半个小时完成了程序, 而一个小时后我又完全忘记了Basic 的所有关键字。

不顾基础,盲目追赶时髦技术:

终于点到题目上来了。 大多数的人都希望自己的东西能够马上跑起来,变成钱。 这种想法对一个已经进入职业领域的程序员或者项目经理来说是合理的,而且IT技术进步是如此的快,不跟进就是失业。 但是对于初学者来说(尤其是时间充裕的大中专在校生),这种想法是另人费解的。

一个并未进入到行业竞争中来的初学者最大的资本便是他有足够的时间沉下心来学习基础性的东西,学习why而不是how。 时髦的技术往往容易掌握,而且越来越容易掌握,这是商业利益的驱使,为了最大化的降低软件开发的成本。 但在IT领域内的现实就是这样,越容易掌握的东西,学习的人越多,而且淘汰得越快。 每一次新的技术出来,都有许多初学者跟进,这些初学者由于缺乏必要的基础而使得自己在跟进的过程中花费大量的时间,而等他学会了,这种技术也快淘汰了。

基础的课程,比方数据结构,操作系统原理等等虽然不能让你立马就实现一个Linux(这是许多人嘲笑理论课程无用的原因), 但它们能够显著的减少你在学习新技术时学习曲线的坡度。 而且对于许多关键的技术(比方Win32 SDK 程序的设计,DDK的编程)来说甚至是不可或缺的。

一个活生生的例子是我和我的一个同学,在大一时我还找不到开机按纽,他已经会写些简单的汇编程序了。 我把大二的所有时间花在了汇编,计算机体系结构,数据结构,操作系统原理等等这些课程的学习上,而他则开始学习HTML和VB,并追赶ASP的潮流。 大三的时候我开始学习Windows 操作系统原理,学习SDK编程,时间是漫长的,这时我才能够用VC开发出象模象样的应用程序。 我曾一度因为同学的程序已经能够运行而自己还在学习如何创建对话框而懊恼不已,但临到毕业才发现自己的选择是何等的正确。 和我谈判的公司开出的薪水是他的两倍还多。

下面有一个不很恰当的比方:假设学习VB编程需要 4个月,学习基础课程和VC的程序设计需要1年。 那么如果你先学VB,再来学习后者,时间不会减少,还是1年,而反过来,如果先学习后者,再来学VB,也许你只需要1个星期就能学得非常熟练。

几个重要的基础课程

如果你是学生,或者如果你有充足的时间。我建议你仔细的掌握下面的知识。 我的建议是针对那些希望在IT技术上有所成就的初学者。 同时我还列出了一些书目,这些书应该都还可以在书店买到。 说实在的,我在读其他人的文章时最大的心愿就是希望作者列出一个书单。

大学英语 -不要觉得好笑。我极力推荐这门课程是因为没有专业文档的阅读能力是不可想象的。 中文的翻译往往在猴年马月才会出来,而现在的许多出版社干脆就直接把E文印刷上去。 学习的方法是强迫自己看原版的教材,开始会看不懂,用多了自然熟练。 吃得苦下得狠心绝对是任何行业都需要的品质

计算机体系结构和汇编语言 -关于体系结构的书遍地都是,而且也大同小异, 倒是汇编有一本非常好的书《80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著)。 你需要着重学习386后保护模式的程序设计。否则你在学习现代操作系统底层的一些东西的时候会觉得是在看天书。

计算机操作系统原理 -我们的开发总是在特定的操作系统上进行,如果不是,只有一种可能:你在自己实现一个操作系统。 无论如何,操作系统原理是必读的。这就象我们为一个芯片制作外围设备时,芯片基本的工作时序是必需了解的。 这一类书也很多,我没有发现哪一本书非常出众。 只是觉得在看完了这些书后如果有空就应该看看《Inside Windows 2000》(微软出版社,我看的是E文版的,中文的书名想必是Windows 2000 技术内幕之类吧)。 关于学习它的必要性,ZDNET上的另一篇文章已经有过论述。

数据结构和算法 -这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的(朱战立,刘天时)。 很多人喜欢买C++版的,但我觉得没有必要。C++的语法让算法实现过程变得复杂多了,而且许多老师喜欢用模块这一东西让算法变得更复杂。 倒是在学完了C版的书以后再来浏览一下 C++的版的书是最好的。

软件工程 -这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知所云。 我的建议是看《实用软件工程》(黄色,清华)。 不要花太多的时间去记条条框框,看不懂就跳过去。 在每次自己完成了一个软件设计任务(不管是练习还是工作)以后再来回顾回顾,每次都会有收获

Windows 程序设计 -《北京大学出版社,Petzold著》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。 而且前面的那本《Inside Windows 2000》也最好放到这本书的后面读。 在这本书中,没有C++,没有GUI,没有控件。有的就是如何用原始的C语言来完成Windows 程序设计。 在学完了它以后,你才会发现VC其实是很容易学的。千万不要在没有看完这本书以前提前学习VC,你最好碰都不要碰。 我知道的许多名校甚至都已经用它作为教材进行授课。可见其重要。

上面的几门课程我认为是必学的重要课程(如果你想做Windows 程序员)

对于其它的课程有这样简单的选择方法:如果你是计算机系的,请学好你所有的专业基础课。 如果不是,请参照计算机系的课程表。 如果你发现自己看一本书时无法看下去了,请翻到书的最后,看看它的参考文献,找到它们并学习它们,再回头看这本书。 如果一本书的书名中带有“原理”两个字,你一定不要去记忆它其中的细节,你应该以一天至少50页的速度掌握其要领。 尽可能多的在计算机上实践一种理论或者算法。

日三省乎己

每天读的书太多,容易让人迷失方向。看看我以前整理的一个合格程序员应该看哪些书,如果原文被墙,可以到CSDN看。 一定要在每天晚上想想自己学了些什么,还有些什么相关的东西需要掌握,自己对什么最感兴趣,在一本书上花的时间太长还是不够等等。 同时也应该多想想未来最有可能出现的应用,这样能够让你不是追赶技术潮流而是引领技术潮流。 同时,努力使用现在已经掌握的技术和理论去制作具有一定新意的东西。 坚持这样做能够让你真正成为一个软件“研发者”而不仅仅是一个CODER

把最多的时间花在学习上

这是对初学者最后的忠告。 把每个星期玩CS或者CS的时间压缩到最少,不玩它们是最好的。 同时,如果你的ASP技术已经能够来钱,甚至有公司请你兼职的话,这就证明你的天分能够保证你在努力的学习之后取得更好的收益,你应该去做更复杂的东西。 眼光放长远一些,这无论是对谁都是适用的。

 

转自:justjavac(迷渡) http://blog.csdn.net/justjavac/article/details/7998856

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/8611439

“程序员之路”序

    有过迷茫,有过困惑。

    感谢许许多多老师、学长有关 经验分享,学习指导 的文章。

    让我在成为一个 coder(或者说engineer) 的路上不再迷茫。

    在此,把看过的好的文章整理起来,与君分享。

    这就是“程序员之路”分类。

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/8611421

『转』清华梦的粉碎——写给清华大学的退学申请


清华梦的诞生

小时候,妈妈给我一个梦。她指着一个大哥哥的照片对我说,这是爸爸的学生,他考上了清华大学,他是我们中学的骄傲。长大后,你也要进入清华大学读书,为我们家争光。我不知道清华是什么样子,但是我知道爱迪生和牛顿的故事。清华,大概就是可以把我造就成他们这种人的地方吧。我幼小的脑海里就想象出我能在清华做的事情……我的脸上浮现出笑容。我说我要实现这个“清华梦”。这就是清华梦的诞生。

小小科学家

我相信每个人在小时候都跟我差不多,对这个世界充满了好奇。

鲁迅有他的百草园,我也有我自己的"实验田"。如果说小时候的鲁迅是一个艺术家,那么小时候的我就是一个科学家。这么说可能有人要说我口气太大,张口闭口就是这家那家。然而在我的字典里,"艺术家"和"科学家"并不是什么了不起的人,它们只是贴在人内心的一个标签。如果一个小孩专注于内心对世界的感觉,那么他就是一个艺术家。而我不是。我的大部分兴趣是在了解世界是怎样运转,甚至不惜代价。也许大部分男孩子都是这样。

我小时候住在父母执教的中学里。两间平房,门口有一小块地,妈妈在里面种了一些菜。我们一家三口虽然穷,但是过着宁静舒适的生活。我们在这个地方一直住到上初中的时候。这些房屋记录着一个年幼的科学家的探索和实验,直到它们被夷为平地。

妈妈拒绝让我养猫狗,她说凡是会拉屎的都不养---除了我。所以我小时候就喜欢与蚂蚁作伴。我总是试图用各种各样的办法去了解蚂蚁的生活习性。我可以一整天的观察我家屋檐下的蚂蚁来来去去。看见他们用触须碰一碰,然后各自分头走开,我就会想它们到底说了什么。我在想,能不能用一种方法解开蚂蚁语言的密码。我从书中得知蚂蚁洞里有蚁后,她有很大的肚子。为了一睹芳容,我开始试图水漫金山,把水往蚂蚁洞里灌。我有时一个下午就干这种事情,却没有一次成功看到蚁后。后来才知道蚂蚁是如此精明的下水道工程师,水大部分都渗到地底下去了。可是我不甘心,我开始试用别的办法。比如在洞口放一块糖。可是蚁后架子太大,终究不肯出来,让别人帮她送饭进去。

有人说,这个世界最后不是毁在疯子手上,就是毁在科学家手上。世界上如果只有科学家是很可怕的,比如他们会发明高效的杀人武器。我发现疏松的棉絮可以迅速的燃烧,就想出一种惨绝蚁寰的大屠杀实验。我先把糖水滴在地上,等蚂蚁把那个地方围个水泄不通的时候,铺上棉花,点火……现在想起那些勤劳的小黑头都变成灰烬,我仍然心惊肉跳。他们的灵魂会来找我报复吗?后来这个实验有一个升级的版本用的是浸泡过一种化学药品溶液的纸,文火燃烧,由于燃烧速度慢,杀伤力不大,这个实验可以测试蚂蚁的逃跑路线。我还用活蚂蚁进行过心理实验。首先用破袜子摩擦塑料尺产生静电,然后放在一只正在行走的蚂蚁身后不远处。蚂蚁走不动了,我就开始推测它在想什么,它感觉到什么。它可能会觉得有外星人?但是由于尺子拿开以后,它若无其事继续走,我猜它只是有点纳闷,而不惊慌。但是反反复复几次之后,它明显有罢工的意思,似乎忘了自己要去干什么。后来我又发现蚂蚁被吸到塑料尺上之后会由于带上相同的电荷而被"发射"出去,就像人间大炮一样。注:"人间大炮"是日本电视剧《恐龙特急克塞号》里的一种可以把人当作炮弹发射的威力很大的电磁装置。

一点微小的发现,就可以引发大量的探索和实验。这就是我在那个年代的特点。虽然妈妈也逼着我练习书法,绘画,还多次获奖,但我不喜欢这些东西。我似乎生下来就是科学家,不是搞艺术的,不过也许只是妈妈的强迫让我反感了艺术而已。物理是我最喜欢的,因为它让我了解到世界的奥秘。我一般开学前几天就会把物理书上的实验都挑出来,费尽辛苦找到材料实践一番,心里美滋滋的。上学真是快乐!

失之交臂

上了高中,由于课业的压力,我的生活逐渐改变了。为了考上清华大学,我努力的学习。抛下我的毛笔,抛下我用来做实验的蚂蚁,电池和线圈,抛下除了考试科目的一切。在老师眼里我是一个听话的好学生,在妈妈眼里我是一个听话的好孩子。每天早上按时起床,吃一大碗妈妈做的面(为了补充一上午学习需要的体力),然后冲进教室,按照预设的程序开始读书,做练习题。似乎一切都有条不紊,顺利进行。可是……

忽然有一天我发现,我的一切活动都是在纸上进行的,看书,做习题。试卷和复习书让我变得变得麻木。我想这样下去我就不再像爱迪生和牛顿了。于是我开始调皮起来。我不但要做考试的题目,还要做更难的题目。做了物理奥林匹克的题目,接着就想看大学的物理书,接着就想恢复我小时候的实验的爱好。老师辅导自习时经常被我缠住问一些不着边际的问题,那其实是我在实验中发现的问题。终于有一天,在我要求他跟我合作制造一个磁悬浮陀螺的时候,他显示出了不耐烦:“王垠,你让我先回答别的同学的问题好不好?你的问题对考试没有好处。” 我呆住了,启发我让我爱上物理的人,尽然对我说出这样的话。后来想一想,他也是无奈啊,不过我从此再也不想问他任何“超纲”的问题。

高二的时候妈妈就拿回一份前一届的高考题让我做,我随手一做就得了一个当时可以考上清华的成绩。我的心里想,清华我来了。明年的这个时候,我就会拿到录取通知书了!从此我就不再把高考放在眼里。我开始钻研越来越难的题目,进行越来越离谱的实验。我想,清华里面应该都是我这样的学生吧,我会有很多志同道合的朋友,不用再跟这群只会做题的呆子在一起了。

可是我的行为总是受到老师的压制,他们要把我们变成考试的机器。他们告诉我,沉下心来做习题,考试才能有把握。妈妈也帮着老师劝导我。看,一班的某某某这次模拟考试数学成绩比你高,多努力一下吧。我哪里听得进去,我才不在乎这点分数,我能解决更难的问题,老师都没法解决的问题。我开始有了逆反心理,开始早上懒床,装病请假不去上课。班主任,校长多次找我谈话,说我要沉下心来准备考试云云。但是我根本就听不进去,我鄙视高考,觉得他们没有资格出题来考我。然后我就有了心理疾病,大概是强迫症。高考语文的时候我居然怀疑监考老师认为自己在作弊,接着好像真的怕被抓住了一样,手发抖,头冒汗。然后我又想要是考不好,以前的优秀会不会也被人怀疑?他们会不会以为我以前的成绩全都是作弊得来的?手就抖得更厉害了。这时候,监考老师可能发现了我的情况,真的走了过来,站在我身后。害得我好几分钟不敢写一个字,因为手已经完全不听使唤。不过他还是走开了,这可怕的高考终于结束了。

我们是考试前填的志愿,我根本不考虑其他学校就只填了清华。后来妈妈研究了一下,帮我添了一个天津大学在第二志愿。以下的志愿全部空白。大家觉得我真够大胆,可是我的心理状态让我发挥完全失常,比清华的最低分数线还差两分。特别是语文,才96分。天津大学第一志愿收满不要我。昔日的好学生,居然到了落榜的下场。我真的那么好吗?我问自己。我太骄傲,才落到如此地步吧。我开始怀疑自己是否应该那样瞧不起高考。看着爸爸的愁眉苦脸,妈妈的唠唠叨叨,真是生不如死。复读吗?那会是噩梦的继续。我不能再在这个学校待下去。再面对题海,我的心理疾病会让我自杀的。碰巧四川大学来招收高分落榜的学生,还给了我随便选择专业的机会。妈妈说,计算机现在很火热,出来好找工作。我虽然对工作不感兴趣,但是我比较喜欢写程序,于是就进了川大计算机系。

两度退学失败

不能不说进川大是个没有选择中的好选择。大学生活自由一些,我至少不会走上自杀的道路。可是我的毛病仍然在继续,我永远不满足学校里能学到的那么点东西。老师基本是照本宣科,我逐渐不再满足这种知识灌输式的教育。我觉得完全没必要上这个大学。

川大的环境我实在无法忍受。军训的时候受够了同学和教官的委屈,我就想退学。我们的军训是在一个戒备森严的炮兵基地里,心里的苦向谁说啊!有一天我们正在路上齐步走的时候,我忽然看到一个女人挽着一个军官走了过来。那个军官的老婆怎么长的这么像我妈妈!要是妈妈来到我身边该多好!没想到回到营地,团长(原来是连长,我们来军训他就升一级做团长了)说有人来探访。我走过去,居然发现是妈妈!因为听说我想退学,她急忙向学校打听了军训的地点,几经周折跑过来,是那个军官带着她混进来的。我想我妈妈要是转行当间谍一定是个好料子。她说已经帮我办了退学,学校同意了,回去好好复习,准备考上清华…… “好好复习,好好复习”……我的脑海里又浮现出高三的情景,这次我要跟一群更没用的复读的人在一起。脑子一阵疼痛之后,我说:“妈妈,我不想退学了。”

可是军训回到学校,发现宿舍如此差劲,我又想退学。妈妈又来帮我办理手续,可是结果我还是由于懦弱反悔了。害得学校办事的老师都骂我: “你这个人简直神经病!” 对啊,我确实是有病,不过我的是精神病,不是神经病。我恨我的高中,我恨我的大学,我恨高考,我恨中国的教育!是你们让我生病的。可是妈妈,她为了我已经费尽了辛苦。我不能再这样周折下去。我自己在学校里好好努力,准备考上清华的研究生吧。

学校住宿环境很差劲,又经过好多麻烦事,我终于决定在校外去租房子住。后来我开始玩滑板,它让我变得勇敢。我心里逐渐平静下来,可以用心看书了。大二以后,我的学习生活才逐渐进入正常,自信开始恢复。

梦的复苏

记得川大教Pascal语言的老师第一堂课就对我们说:“我们学校就是落后啊。外面公司里都用C, C++了,我们还在教Pascal。你们以后要出去工作恐怕还是得学学VC什么的。” 于是有的同学开始抱起一本本像“XXX圣经”之类的书开始学习,上数学课也在看这些东西。我当时自愧不如啊。自己就是小学的时候玩过一下学习机,可以说没有任何计算机基础。辅导员也经常夸他们几个动手能力强,以后公司就需要这样的人。他们出口就是Bill Gates, 世界首富云云。军训的时候听着他们说什么DOS, 温95,我就只有张着嘴崇拜的份了。才想起我高中计算机竞赛的时候一道有关DOS命令的题没有做出来,现在听他们说才知道原来DOS是个“操作系统"。那操作系统又是什么,他们说每个电脑上都必须有一个操作系统……我真是愧不如人 -_-!

正在我决定鼓起勇气后来跟上,准备拿起一本DOS大全从头啃起的时候,一次偶然的机会我接触到了Linux。后来又因为The Art of Computer Programming,接触到了Knuth。我才发现,课堂上讲的那些东西原来如此低级,有些东西学了就过时,学它干吗?我并不比别人落后多少。我一再的思考,什么是计算机科学?是什么让我们计算机系的人不同于其他系的。我有时候认为有了答案,但是后来答案又被我自己推翻。在思想的混乱中,我发现我逐渐摆脱了旁人的标准。我不再想像别人那样去考计算机等级考试,对微软的认证也不屑一顾。我自己学会了Linux,还会很多种当时别人听都没听说过的计算机语言。我学会了LaTeX,还因为找出Knuth书里的错误得到两张支票和一些礼物。这并不是什么值得炫耀的,但是这给我对计算机的兴趣很大鼓舞,我从此更加认真的看书。上课要不就逃掉,背地里拿着大部头的“龙书”之类的原版英语书啃。要不就看我打印出来的GNU的一些资料,完全不听老师讲。期末划重点的时候也不去,考试却总能考个八九十分。总有几个女生排名在我上面,不过我不在乎这点分数,考试和分数不再能评价我。同学们大概都觉得我是一个怪人,后来毕业了我才听他们说,他们管我叫“怪才”。我如此努力的学习着,对别的事情充耳不闻。我只有一个目的,就是毕业就离开这个鬼地方,进入清华大学上研究生。虽然大家不理解我在干什么,清华的老师应该挺在乎我学的东西吧。

可是我没有想到,在我死啃书本的时候,我的创造力正在离我远去。在我盲目接受我认为高深的材料的时候,我失去了自己的创造。我成了比别人稍微好一点的技术工人,不再跟爱迪生和牛顿是一类人了。我高中的时候拼命想保存的创造力已经在苦读之下消失殆尽。我看书的方式变得顺序化,总想从头看到尾。我的高中老师们的目的,中国教育的目的,终于快达到了。

清华,我来了

大三的暑假,我来到清华想拿一些考研的资料。这是我梦中的地方呀,美丽的校园,比川大要大上好多倍吧,脚都走痛了才走到招待所。去系办,一个办事员态度很不好的给我一份资料。哎,学校好,人脾气就该大啊。忍了吧,要是真能考进来就好了。

后来听一个老师说清华有一种学生叫“直博”,可以硕博连读,五年拿到博士学位。只要面试通过就可以进来学习。我心想这种方式好啊,我平生最讨厌的就是考试了。出高考题的那帮人,他们有什么资格考我!考研资料也是遍地飞。写了几本复习材料就自称什么“一代名师”,我最看不起这种人了,就会赚钱。我如果可以获得“直博”的名额,就可以永远摆脱他们了。想一想,要是硕士三年,博士三年,就要六年。现在五年就可以拿到博士学位,还不用考试,真是太好了。可是我又有什么资格获得清华的直博?我在川大从来没听说过这种东西。

于是我就开始打电话联系老师,跟他们谈谈。面对他们的眉头,面对他们的笑脸却无可奈何的说“没有名额”,我都感觉没什么希望了。一个院士甚至对我说:“你们四川大学是什么学校?二流都算不上,最多算个三流大学。你怎么能来我这里!” 我深受打击,可是我还是没有放弃。最后我找到了一个老师,我们一开始就谈的挺投机。他听说我跟Knuth有过联系,挺高兴的说,哦我知道他,好多年前来我们这里做过报告呢。我终于觉得找到了知音,于是决定就跟着他学习。老师找好了之后还有一个面试,是别的老师参加的,我说什么他们似乎没有认真听,就一个劲看我的考试成绩这种我不屑一顾的东西。我面试时特意穿上了Knuth送我的MMIX T-shirt,他们大概根本不知道是什么,我也没有提起。

不过老师只对我的体育成绩提出了疑问,说你怎么才80多分?你的身体能不能胜任繁重的学习任务啊?我笑着回答,我每天还跑5000米呢,我们学校打分比较严,难道清华的学生体育都考90?面试就这样通过了。

推荐信与散伙饭

面试通过后回到学校还要办一些手续。成绩单,推荐信等等,跟申请外国大学研究生院差不多,让我感觉挺正规的。院长对我挺好的,同意帮我签推荐信。可是签完字之后他对我说:“你别以为他们觉得你是个人才。他们是根本招不到人!他们那里像你这样的学生都出国了,剩下的是最差的。谁想读博士啊?你别太高兴了。” 我笑着应付这突如其来的打击,在心里却不断为自己的选择辩护。清华一定是好样的,不会让我失望。它是我的梦啊。

很多麻烦的手续之后,终于拿到了我梦想的大学的录取通知书,可以离开川大这个鬼地方了。毕业的散伙饭上,看着大家喝得酩酊大醉,还有人在咆哮说居然连川大的文凭都没拿到,我一个人默默地想象着即将到来的清华的快乐生活,暗自庆幸。

散伙饭到了尾声的时候,我诧异的看到一个平时不太熟悉的同学拿着一杯啤酒走过来。我挺紧张,我最不喜欢别人给我敬酒了,说是客气,其实很虚伪。没想到他说:“我敬你一杯,大牛人。听说你被清华大学录取作了博士。我干了,你随意。” 我不知如何回答,我一向不知如何应付别人的恭维。还好他没有让我也干杯,倒是够尊重人。没想到喝完他接着说:“我知道你是怎样的人。我很仰慕你,你是真正喜欢研究的人。可是我要告诉你,清华的人并不会比我们好多少。大部分人也只是想混一个学位,将来找个好工作。没有多少人可以跟你一起研究的,你去了必定很孤独。我就很奇怪你这样的人怎么不出国呢!你会后悔的。”

我有点不高兴了。一个人说你的选择是错误的,你的反应是什么呢?反正我当时为我的“清华梦”作了一番辩护,说我进去自己好好研究,应该还是能够很好的,毕竟这是我从小的梦啊。可是没想到,他说的居然是对的,我现在开始感谢他了。

计算几何,创造力的复苏

清华还是一样的上课方式,大部分课也是很多人一起上,一起打瞌睡。老师也是照本宣科,我居然发现他们其实跟川大的老师没什么区别。清华的不同之处就是,一到考试的时候原来进行的一切娱乐活动都不见了人影。原本每天晚上都有人一起玩轮滑,考试的时候就只剩下我孤零零的一个人。因为大家都怕考试,开始熬夜复习了。还有就是上课不容易逃课了,有些老师会突然点名,缺席会严重影响最后的成绩。

对于博士生,传说还有一个规定,那就是后10%淘汰。也就是说,不管你成绩如何,如果成绩排名在课程的后10%,那么就要重修。而如果两门功课重修,就会被开除。面对如此残酷的规定,很多同学都惶惶不可终日。我就是在隔壁同学的唠叨声中度过了第一期。不过我还是没有把考试当回事,所以我也没有去验证这个说法的官方真实性。我仍然不去听老师划重点,我仍然不觉得老师出的题目有什么好,我仍然讨厌有人让我们用手算矩阵。可能觉得太残酷,还是觉得要是开除了博士生谁来干活,这条规定后来改成了如果博士生上了80分就可以不重修。我也不知道为什么我觉得考砸的科目也上的了80,故意放我过去的吗?

但是我的生命中出现了这样一门课程。它改变了我对老师的看法,让我觉得上课原来也可以如此有趣。这就是计算几何。上课的人很少,只有十来个人。因为听说这门课很难,很多同学都没有选。但是我就是那种知难而进的人。老师上课的方式跟别的课程很不一样,大家坐在一个小教室里,老师有精美的幻灯片,有动画,不时还插入一段大科学家,大哲学家的名言。上课时老师会停下来很多次让学生提问题,下课大家都积极踊跃的讨论新奇的问题。课程的评分方法也很特别,平时成绩占到30%的分量,作业分为几种分值,可以自己选择做不做,作业的总分数乘以30%,加上最后大作业的分数乘以70%,就是最后的得分。说真的,这门课太有趣了,我就只逃过一次课。但是还是有时候人数不到一半,因为其他课程压力太大,有人都去复习别的课程了。但是邓老师从来不点名,还对逃课的同学表示同情。还问我们在座的有没有其他课特别紧张的,下次课可以不来。真是让人感动。

我就是在这门课上认识了王益,我们亲密无间的合作,让我领略到了什么叫做研究。大作业的时候我们在一个小组,其实是三人一组,但是那第三个人其实什么也没干。我和王益决定写一个3D的Voronoi图扫描算法演示程序。王益的3D图形编程能力很强,所以他做界面,由我负责算法生成数据作为后端。我们分别在自己的机器上编写程序,不时的打电话讨论接口的设计问题。我找到了Bell labs 的 Steven Fortune 的算法程序,决定看懂它,然后改造成演示需要的分部运行的算法。但是 Fortune 的程序几乎没有注释,而且使用了一种奇怪的数据结构,很难理解。Fortune 还在程序里说到,这个算法虽然有效,但是对于程序员来说是一个挑战。所以我email请他给我一份算法论文的拷贝,他同意了。但是一个月之后,信才到我手里,那时我们已经完成了作业。因为我花了一个星期看懂了他的程序,还换掉了他的麻烦又低效的数据结构。随后成功的把后端与王益的前端设计好接口联合。等我看到 Fortune 的论文,发现程序里面其实已经改进了论文的核心内容。其中的parabolic transformation其实完全没有必要实现。我深深体会到实践的重要性,也许先有了他的论文我反而会被误导,写不出实际可以运行的程序。

由于我们的团结努力,老师对我们的大作业非常满意,他给了我们最高的分数 100。由于我们两个都在课下超额完成作业,所以总的分数我们两个都是满分。这是我阔别已久的100分。只有在小学我才拿到过这种分数啊!对于一个对考试成绩满不在乎的人,100 又意味着什么?如果是别的课程我会毫不在乎,就像我得了80分一样。可是这个100分是我们团结研究而来的,它包含了对我们的合作意识,对我们的友谊,对我们的热情的肯定。虽然我觉得我们的东西还有改进的余地,但是我接受这个100分!也只有这样的课程,我才可能得100分。

从此我感觉到了什么叫做研究。这跟我小时候干的那些事情没有什么两样。你在身边发现一个问题,想知道为什么。然后你就想去获得解决这个问题的知识。你去看书,你去问专家,你上网去搜索。如果没有发现答案,那么好啦,你就可以自己试图去发现为什么,这是最有趣的部分。知道了为什么,就想让这个东西有用处,对人们的生活产生好处。这就是研究。

《完全用Linux工作》与TeX的推广

这么说来我还是对清华有些好感。遇到一个好老师让我从呆头呆脑的技术工人的状态恢复过来,开始追求自己的梦想。可是第一年把所有的课程上完之后,我就发现原来清华所谓的“研究”是如此混沌。其实清华大部分人进行的所谓的“研究”是什么呢?其实就是写作,不是科学研究。这一点以后我会详细叙述。

远远看去外观华丽的有着先进的工作站的实验室,却没有可以安心看书的地方。机器挨着机器人挨着人,书都没地方放。师兄师姐们都在忙着用 word写论文,不时有两个人隔着几行机器大声谈话。实验室通风不好,还有一个大型工作站在嗡嗡作响,我进去一会儿就觉得头晕,所以后来就不想去了。PC 机以前都是公用的,每次都会用不同的机器,却没有我想用的软件,麻烦死了。好不容易实验室买了新机器分配给个人,装上一个 Linux 系统开始写程序,还在Sun工作站上安装了多达1G的GNU程序。却被一个师兄嘲笑说那种跟DOS一样落后的东西你居然也用。于是我写了一篇文章叫做《完全用Linux工作》,放在主页上驳斥这种观点。矫枉过正,确实写的优点偏激,结果引起网上linux界轩然大波。后来我又发现几乎全校的论文都是 word排版的,那些公式质量太差,看起来头痛,才发现很多学生害怕数学的原因之一。所以又写了文章宣传 TeX,希望中国产生更多漂亮的数学书。这下子我出名了,真没想到,出名不是因为我的研究成果,而是因为这些业余的东西。我起初不希望我因此出名,但是看到旁边的人都用上了 TeX,我觉得我还是做了一件好事,至少让论文看起来漂亮了一些。

可是论文的内容,却是我永远的痛!

培养计划

我在第一年就把功课全部上完了。本来我想多选几门课,比如法语,可是清华的博士要选课需要提交一个“培养计划”给导师签字。导师同意之后才能修改。导师看到我选了法语,就说这个第二外语还是自己学学就行了吧,旁听也行啊,我主要是怕你课太多了考试不通过就麻烦了。我当时没有说什么,就把法语去掉了,只留下刚够学分的课程。其实我还想选很多的,体育,音乐什么的,都不好意思跟导师说。后来才知道宿舍对门的硕士生选了钢琴课他们导师都不管。为什么我们就受到如此待遇?

可是没有把法语加到培养计划却成了我的遗憾。有一个新学期我去旁听了第一节法语课之后老师就说,我知道很多同学是来旁听的,这样教室里人太多了,效果不好。这对自己对大家都不好,下次请旁听的同学不要来了。我脸皮薄,下次就没有去了。后来自己想自学却又没有老师教,看了十集reflet之后就此作罢。

后来我终于明白了,清华不需要全面发展的博士生,而其实导师还会在某种程度上削弱学生的能力。导师并不是真的为我们好,而是不喜欢我们上课,因为上课不但会花掉研究(或者干活)的时间,而且让他们眼界太开阔,这样学生会很容易有别的选择而走掉。所有的活动:助教,实习,都必须有导师签字。而大部分导师就会找借口不让学生干这些事情。不给他们助教和实习的机会,让他们以后不好找工作,只能为自己服务,或者为自己的熟人服务。甚至这次我去西藏,要办边境证都要有导师签字。办事的老师说,没有导师签字,你跑出去了不回来怎么办?大妈,我跑那种地方干吗?

除了这些,还有两大法宝就是博士学位和违约金。清华的博士学位有多值钱知道吗?不知道?那么博士退学要交几万块钱的违约金,这下大部分穷苦学生怕了吧。这就是你们的卖身契。清华就是这样把研究生牢牢地控制在自己的掌握之下。我对一个如此害怕学生跑掉的不自信的学校还能说些什么?如果你是好样的,就不会害怕我们跑掉!该跑掉的最后终究会跑掉。

我的自我培养

在学习上,我永远是个吃不饱的人。选不了课,我就去旁听。旁听后觉得老师讲的不好,我就自学。在我有空的时候,我就会去图书馆借书看。在我本科的时候,我就已经发现自己的一个特点,我会很快发现新的东西,并且学会使用它。虽然这些东西并不是创新,但是它们丰富了我的技能,让我有更大的能力去进行创新。我经常顺藤摸瓜似的从一个问题搜索出一大串我想知道的东西。然后借一大堆书回来,每本看一点点,只为找到我需要的答案。

计算几何课的一次作业,我为了写一个算法的演示程序,花了3天时间学了一点Java语言,正好能够完成那个程序。我开始接触到TeX的底层细节,看完了The TeXbook,并且找出一道练习题答案的错误。开始移植gbkfonts程序,作为我的CWEB语言的练习。看完了几乎所有 Xlib 的手册,了解了 XWindow 的工作原理。我接触到 Scheme,并且做完了 SICP 的大部分习题,还自己想出好多问题用Scheme实现算法。后来花了好几个晚上,把MIT课程6.001的录像下载回来。我才发现教授上课可以如此搞笑有趣,上课时戴上巫师的帽子,做一些滑稽的表演。我终于明白,有的计算机科学家居然可以去好莱坞演电影 :) 这个课程让我领会到 LISP 的强大,改变了多年以来对这种古老语言的误解。它让我感觉到在看似纷繁复杂,不断更新的计算机语言的世界,还有那么一种永恒的美!接着我又学会了 Common LISP,并且开始用它来设计研究计算几何的一个函数库。另外还找了一些希奇古怪的程序来玩,写了一些心得体会放在网上给别人看。

我意识到自己数学还不够强,甚至有些怕,就开始看一些数学方面的书。Concrete Mathemtatics, What is Mathematics?, Science and Hypothesis, Godel Escher Bach, ... 虽然每一本都没有看完,但是我逐渐相信自己的数学能力,发现数学原来如此有趣,并不是做习题那么枯燥,也不像一辈子就拼命证明一个定理那么清高。才发现国内很多数学书用难看的符号把学生吓倒了,其实想通了就是很直观的原理。

我看了电影 A Beautiful Mind 之后深受感动,就去买了一本原著的书,它是数学天才John Nash的传记。它描写了20世纪初的Princeton,一群科学家生活的情景。我眼前浮现出在一个房间里,一群人在喝茶聊天下棋讨论问题激烈争论。我发现我从小内心向往的,就是那样的地方。我看到Nash是如何用“头脑暴力”解决一个他没有任何基础知识的问题。原来只要有了问题和探索的精神,就会有动力去获得解决它所需要的知识,最后将问题解决。发现有用的,重要的问题,而不只是寻找困难的问题,这样才会对人类有价值,才会有动力。我还看到一个真正的数学天才是怎样的喜欢恶作剧,又怎样因为过度的傲慢狂妄,想向世人证明自己的天才而发疯。我发现世界上有远比科学更宝贵的东西。我开始悔悟我高中时对待成绩不好的同学的态度。我不是一个天才,但是我要做一个好人。

但是我的研究却没有多少进展,至少我自己这么认为。我发现问题的根源,就是没有真正的讨论,没有真正的问题。

我们也有讨论,原来是这个样子

上完课,就该开始搞研究啦。可是研究什么呢?老师给我几篇论文看,意思是让我看看有没有什么想法。

我开始感觉没有头绪,就跟导师说能不能找师兄师姐跟我讨论讨论,还有别的人在做这个吗?他说,就你一个人做这个,每个人做一个题目,独立思考,这就是研究。我觉得是啊,我应该独立思考。可是过了一段时间发现不行啊,我想实现一个想法,但是我不知道是不是已经有人试过失败了。实验的时间开销会比较多,所以我想知道那么多厉害的人,为什么都不用这种明摆在那的方法?当我再次提出需要讨论的时候,他似乎有点生气的说:”你为什么总是想有人跟你做一样的东西啊?你不是想抄袭别人的论文吧?” 我不发话了。继续做我的实验,结果确实不理想。虽然自己实践很重要,可是要是能利用别人的经验,何乐而不为呢?这并不是偷懒。如果有人讨论,很多时候一个人提出一个问题,另外的人可能就会告诉他这个问题是不是有人做过,有什么重要性,凭直觉告诉他有什么难度。可是如果没有讨论,连问问“有没有人做过”的机会都没有!

后来我就经常上网看看国外的大学怎么搞研究,发现他们都有 seminar,讨论组。A Beautiful Mind 描述的 Princeton 以前的天才们每天都在一个地方喝茶,讨论问题,争得面红耳赤,回家分头思考,做实验,第二天喝茶时再讨论。那就是我从小梦寐以求的生活啊!计算几何课已经让我爱上了与人合作和讨论的方式,现在却孤零零一个人了。我必须告诉导师,合作和讨论是非常重要的。在我据理陈述之后,他说:“好吧。反正师兄师姐各自有自己的事,你要讨论什么就跟我和你副导师讨论吧。” 于是我就开始了跟他们两个星期一次的见面讨论。每次讨论都感觉他们不知道我在说什么,他们心里想的都只是这个能比别人的好多少呢?能不能投到这个会议呢?如此宏观。我觉得跟他们讨论完全是浪费时间。

后来课题逐渐有了新的同学加入,导师决定跟中科院数学所的人一起申请一个项目来研究。于是我们每两个星期去中科院讨论。不过感觉他们那边也差不多。中科院的老师觉得他们的研究太理论,期望我们能给他们带去一点实际的东西。可是我们也没有什么实际的东西,所有的问题都是从别人的paper里看到的。副导师就开始跟他们说这个问题有多么多么重要…… 他们也借此机会开始研究以前放下的一些问题。总之讨论的感觉就是没有目的,没有主题。有时有人说他在想一个什么问题,说了一会儿就被否决了。有时候就是一个人看了一篇paper之后做一个感想。我坐在那里就在想,我们到底在干什么?我们甚至都不知道什么东西值得研究,还研究什么?后来师弟师妹们就开始考虑把问题变一变,看看能不能产生新的问题。他们的做法,我跟他们开玩笑说就是“有问题也要解决;没有问题,制造问题也要解决!” 他们笑着点点头,“本来就是这样嘛。没办法啊。”

博士生论坛的时候,同学们都觉得有类似的问题,讨论不足,交流不足。所以我提议成立一个类似国外大学的 Common Room,用来讨论问题。可是大部分老师说:“这样一个房间,天天都要有那么多人在里面待着。谁来出这个钱?” 是啊,老师自己的办公室都要钱,哪里可能有什么 Common Room?就算有了 Common Room,在里面讨论的无非还是文章发到哪里的问题。制度决定了行为,我的设想太理想化了。

分析一下,为什么老师不提倡讨论呢?因为问题是有限的。老师辛辛苦苦这么多年搞来搞去都在搞这些问题,分配给你们每人一个,互不冲突。要是两个人都搞一个问题,这下好了。出了成果论文归谁?学校要求必须第一作者才算论文数。要是两个人都写论文,那么投到同一个会议肯定有一个要被 reject。这样对集体发展不利嘛,大家不就是发几篇论文混毕业吗?何苦?

paper, paper, 还是paper

说到paper我就痛心。我的方向上我至今还没有看到几篇我觉得像样的文章。我主要进行集成电路布线算法的研究。看起来高深,其实是很简单的问题,一个平面上有一些点是电路里的电极,现在需要用铜线把它们连起来,怎么样让连线的长度或者时延最短?这个问题跟几何上一个有名的问题 Steiner tree 问题有关系。我的导师就是以前写了一篇这样的paper发到IEEE transactions。

已经毕业的一个师兄就在他研究的基础上修改来修改去,发了好几篇paper。英文的不够还翻译成中文,投到国内的期刊。后来一个师姐又在这个师兄的基础上进行修改,又发了好多篇。可是在我看来,他们的论文纯粹就是炒冷饭,没有什么创新。一个问题解决了,那么解决问题的人显示了他们的聪明,至于这个问题对人有什么用,他可以暂时不管(虽然我也严重反对这种做法)。后来又有人来搞这个问题,多半是被老师分配来的。他也小修改一下,修改想法其实不费工夫,主要是你怎样把你的 Introduction 写好?可以让别人觉得你的工作有意义?这就是功夫。作家的功夫。我有一次面见INRIA的头目 Jean-Claude Paul 时,他就对我说:“Tsinghua students are all writers, not scientists.”

现在清华研究生做的事情无非就是,写好paper,然后找个地方投出去。SCI 的最好,EI的其次。偏僻的没人看的杂志也没关系,交钱也没关系。我就知道日本的一个SCI索引的期刊收1000美元的版面费。导师出钱,不投白不投,投了好毕业呵!

现在我也被“分配”来做这个问题。虽然说是一个有名的问题,但是这个有名的问题已经被研究了好几十年了。有很多挺厉害的人做出了很重要的贡献,但是我们为什么研究这个问题?我至今没有搞懂。

开头导师只是给了我两篇paper,据说是以前他一个得意门生写的,美国某大学的副教授。其中有一篇说是如何在不构造 Delaunay triangulation的情况下生成 MST (最小生成树)。看到这篇文章开头说在 rectilinear metric下, Delaunay triangulation 就不能用来构造 MST 了,所以他设计了一个新的算法。这个算法比起 Leo Guibas 的算法更加简单。文章里还提到一次 Matroid,让初出茅庐的我觉得高深莫测。我还专门去借了一本《Matroid Theory》来看,其实他的论文剩下的部分跟Matroid没有任何关系。可是我对“Delaunay triangulation 不能用来构造 RMST” 这个说法产生了怀疑。经过理论分析我觉得即使在 rectilinear metric下,Delaunay triangulation 也可以用来构造 MST 的。我觉得作者只是故意这么写,想为他设计算法的动机找一个借口。我决定实践我的想法,写一个程序从Delaunay triangulation 构造出一个 RMST。这本身不是什么创新的工作,可是我却在想,这样一个东西能不能用来构造 Steiner tree 呢?后来我真的就想出一个办法。实验表明我的算法比以前的算法要快几倍。

这是不是说我的算法是一个值得写paper的东西呢?导师说我应该写一篇,但是我认为我只是在挑别人的毛病时意外想出了一个改进的算法,并不会对将来的研究有什么启发。虽然程序快了一些,但是很少有那么大的线网需要这么快的算法,而且几倍的提高在我眼里不算是一个理论上的改进,而且这个算法不能推广到其他距离空间,可扩展性很低。所以我内心觉得这个结果不令我兴奋,不想写论文。但是在老师的一再要求下,我居然把这个研究写成了两篇 paper。按照他的说法:“应该分阶段总结你的成果。” 起初投出去的时候评委总是说这个东西不实用,导师说这是评委的问题,他们觉得不实用我们就投到理论一点的会议。经过几次投稿,还是失败了。我终于忍不住了,对副导师说出我的想法,我说:“看一个作家的水平,是看他扔在垃圾筐里的纸。就让我把这篇paper永远藏在我的垃圾筐里吧。” 但是他不甘心,说你要相信自己的实力,然后把我的算法胡乱夸奖了一番。我说我不管了,随便你怎么办。我就开始研究我自己喜欢的东西去了。之后他居然真的投中一个欧洲的会议,是被 LNCS 收录的,LNCS 是 SCI 索引的,所以我居然有了一篇 SCI 文章!我自己不喜欢的文章也是 SCI 了!

第二篇论文就更传奇了。几投不中,就其原因,评委说是没有和现在“最先进”的算法程序实验比较。而我没有比较的程序,就是那个让我觉得发 paper动机不纯的人的程序。没办法,求他给我代码。比了一下,确实比他快。不过我估计他程序写的有毛病,老是 core dump。而且从实验数据来看,运行时间增长的速度不符合他论文里声称的时间复杂度。但是没办法,他只给 binary,也不给源代码。程序快几倍,很有可能是实现上的问题,而不是算法更好。我的一个师兄以前就把他自己的算法戏称为“基于bug的优化”。我觉得这样比较对那个算法的作者不公平,完全没有发表的价值了。但是没办法,谁叫我们都是出来混的,没有人在乎这些。我还是记录下数据,添到论文上。一投就中,得了一个最佳论文奖。然后就有一篇校内新闻宣传:“我校王垠同学获得XXX会议最佳论文奖。这是大陆学者首次在如此高级别的会议上获得如此高的奖项。” 这个“高级别”的会议,在我看来就是个垃圾。美国人都把最差的论文投到这里,就是为了来旅游一圈而已。

我对自己的做法产生了深深的负罪感,觉得自己正在进入这团混沌,正在被同化。我决定换一个题目研究。我就开始考虑zero skew tree. 找了20多篇paper来看,发现他们没有什么本质的改进。而且对于问题本身的价值,他们完全就不清楚。有的作者后来甚至说,其实以前他们考虑的问题是没有必要解决的,因为实际应用中不可能遇到,我们其实可以把问题变成这样……本来一句话就可以说清楚的事情,又写成了好几篇paper。我就是这样在 paper的海洋中,找不到目标。

我见过的这种低级别的会议,低质量的论文几乎都是从 IEEE 那里出来的。道理很简单,IEEE 会议多,会议论文集都像两大块砖头,还是双列小字排版,当然能容纳下这么多的垃圾了。所以我对 IEEE 也没有好感。

火山小规模爆发

第一篇投中了会议之后,副导师很高兴的说“代替我去开会”,到希腊Santorini岛玩了一圈。回来还跟我说希腊不好玩,好苦啊,幸好你没去。然后就继续要我为算法申请一个专利。

写这个论文我都已经焦头烂额了,一点都不感兴趣。现在还要写专利,“要像教小学生做这件事一样,一步一步的把算法写清楚,举出实例”。我觉得快不行了,再这样折腾下去,我到博士毕业也许也就只搞出这些小儿科东西吧!我终于小规模爆发了一次。我坦荡的告诉了副导师我的想法,我觉得做学问应该是什么样,我觉得这么点东西不值得申请专利。我还告诉他我对国内的研究环境很失望。

他慌了,可能以为我想要退学,赶忙找我谈谈。对我说,我知道你心中有很大抱负。所以这次就不写专利了。我知道你想有更好的研究环境,但是不踏踏实实做好现在的工作,又怎么能有大的创造呢?然后就开始举爱因斯坦,居里夫人的例子…… 然后说,其实你在这里好好努力,将来出国的机会多的是,你想去Harvard也行,你想去Princeton,都行啊!

你说行就行?你去去给我看看?我们实验室从来就没有去这些地方的。继续这样做下去,以后哪个真正的科学家还会要我?

全面发展

在对清华的研究完全失望了之后。我就准备考GRE,TOEFL出国了。我去上了一个新东方的班,没学到什么英语方面的东西,倒是接触了很多新的思想。老罗的言论特别有趣,虽然我不是完全赞同他的意见。写GRE作文特别培养思维能力。我为了写GRE作文,常常为了一个不明白的问题到图书馆翻阅英文的哲学书籍,有关教育的书籍…… 对于很多问题我得到了完全不同的观点。大学的目的是什么?人的价值观是由理性决定的吗?等等等等。我读到了亚里士多德,柏拉图,康德等人的言论。甚至有个哲学家说 "All Animals Are Equal". 我看了他的文章觉得有很多可以批驳的观点。我看到迪卡尔的文章,说“要掌握科学就要掌握它的全部”,这句话真合我心意,我就是想做一个懂很多东西的人啊。我想结合艺术与科学。虽然我这个观点得到一些人的批判,但是我仍然相信迪卡尔。

从这些互相矛盾的观点中,我有了自己的判断力。我开始能够揭开从小蒙在我眼睛上的有色眼镜看问题。我开始检查我自己的思维,我以前的观点。看看它们是否是未经判断就盲目放进去的。我检查到很多很多的错误。我的待人接物,我对他人的理解上,都有不足之处。我还检查到妈妈传递给我的一些有色眼镜,小学课本给我们的有色眼镜。我开始学会用自己新的方式对待他人,看待事物。我不再盲目相信权威,哪怕他是诺贝尔奖得主,图灵奖得主。我有了自己的自由思维。

在那段时间,我感觉我的心智大门被开启了。我开始尝试从来没有做过的事情,以及从来不认为我能做好的事情。我一次又一次的相信我能。我能学会画画,我能打好太极拳,我能理解古典音乐…… 世界还有那么多美好的事情等着我去学习去开发啊!

可是,我们却像囚犯一样被判了5年在清华。博士学位就是我们的枷锁。

醒悟,paper的奥秘

清华研究生谈论的重点是什么?是 paper。吃饭的时候谈,喝茶的时候谈,睡觉的时候也谈。隔壁的同学在进校第一年就为paper惶惶不可终日,说:“你知道吗,他们要求我们发SCI,怎么办呢?我几个师兄都是因为没有paper延期毕业的。” 这恰好就是那个为后10%淘汰惶惶不可终日的同学。他的老师是个院士,可是他在手下就干一些写word文档之类的杂活还忙得要命,根本没有时间思考问题。

后来听说学校有规定,博士生必须发4篇paper才能毕业,其中必须有一篇是SCI索引,或者两篇EI索引。看上去冠冕堂皇的SCI, EI,不就是跟 google 差不多的东西吗?被它索引了怎么样了?特别是对文章的篇数作要求,而对质量没有判断。我其实读了两年都还不知道学校是这样规定毕业标准的。当我知道的时候,已经有人告诉我SCI=Silly Chinese Index。真是让人啼笑皆非。

学校没有能力评价学生的水平,就拿文章数来衡量。这样的毕业标准造就的是怎样的学生,怎样的实验室呢?难道导师真的没有能力判断 paper的好坏吗?有些是,但是有些不是。即使他知道你的论文没什么价值,也会叫你发表。我发现paper数量的背后,是某些人的如意算盘。想一想是怎么回事吧。国家看什么来拨款研究?看paper。看什么来评价一个学校的水平,也是paper。国家没有能力评价你的能力,当然只有看你有多少 paper。所以有了paper就有了钱。只要你能写paper,培不培养你,你将来的发展,关我们什么相干?你写的paper别人能不能看懂,能不能转化成生产力,管我们什么相干?怪不得有的院士想尽办法也要多收学生,宁愿自己帮学生出学费也要他进来。因为学生就是财源。paper可以带来基金,可以在美国买小车洋房,没有基金就让学生干活吧。一个月几百块钱吊着一条命在那里为你拼命,谁叫他们想要那个博士学位呢!

该清醒了,博士无产阶级!

告别清华的博士学位

现在我已经厌烦了国内所谓的“学术”。我准备放弃清华的博士学位,出国找个好老师,进行真正的研究。博士第4年了,做出这样的决定真是不容易。有人告诉我不要放弃,你知道有多少人正在羡慕你?你知道一个清华的博士学位有多么值钱吗?但是我不能这么沉默下去了!

博士学位,累坏了多少年轻的中国人!我不再为它浪费我的青春。我知道国外大部分研究也不是那么好,如果国外也找不到好的老师,我就找一个简单的工作,和我心爱的人一起生活。有人说这是浪费人才?在清华混沌的过日子才是浪费呢!当一个侍者至少也让我感到对社会有贡献,看着顾客满意,我会露出笑容。可是做一个博士却没有。我感觉自己是个没用的人。

我已经完全看透了中国教育的失败。我高中的时候就受到它的伤害,这种伤害延续到现在。中国教育已经成为埋没人才的祸首。留在这个圈子里就是屈服,我不出声,大家都不出声,这个世界就会继续这样郁闷的运转下去。我今天要对这个系统大声地说一声“不!”

我离开了。可是中国永远也不缺少为清华拼命的人!因为他们的妈妈会告诉他们,清华是全中国最好的学校。你要考上清华,为我们光宗耀祖……

行动

2005年9月22日下午3点,我在东主楼导师的办公室里跟导师和副导师再次重申了我的想法。包括以上的一切,和我准备退学,准备10月份考托福的打算。导师经过一番举例爱因斯坦,居里夫人,叫我踏踏实实的说教无效之后,严厉的批评了我只顾自己,不顾及教研组为我付出的心血。然后说:“要是你不能再为实验室作研究,我们就不能支持你了,前两个月实验室发的钱我收回。你可以马上写退学申请,我们实验室没有什么损失,我们有的是人干你的事情。不过我要告诉你,你一旦退学,连学校的住宿都要被收回!”

接着是副导师尖声的咆哮:“是啊,你瞧不起我们。我们是没有你聪明,可是我们勤勤恳恳……你知道你得的那个best paper award,我们付出了多少努力吗?你认为这么容易拿到吗?那是多少国外专家鉴定……”

我安静的等他说完。真像是一场闹剧,一场梦。他平息下来之后,我说了一声“再见”,然后默默地走出了办公室。

你们要退学申请?这里就是我的退学申请。

尾声

晚上收到副导师的email说:“还有一件事需要向你说一下:你在学校学习期间所取得的成绩包含你的努力、导师的指导帮助、同学们的帮助,还有学校和国家的支持。你作为博士生学习阶段取得的成果属于教研组、学校和国家。正如同我们作为职务发明的专利属于学校一样。

你在MST、SMT等方面取得了结果,它属于教研组、学校和国家。单位有责任进行合理的应用,为国家建设、国家荣誉服务。有责任进行进一步的整理丰富、向高水平的刊物投送。这里我们想说明一下上述的情况,同时,也告诉你一下:你若愿意将这些成果进行进一步的整理、我们已经给你提出了具体的修改意见,欢迎你按照进行修改。你若放弃,我们将进行具体的改进、投递。我们将尊重你的意见。谢谢。”

最后还是没有忘了paper的剩余价值。进一步验证了我的判断,他们在乎我吗?不。他们只在乎paper。至于我流离失所,又有何相干?我不知道有多少无知的弟弟妹妹又会把他们的研究建立在我不屑一顾的paper之上。

Segmentation fault ! Core dumped —我写本文的目的

Repair what you can — but when you must fail, fail noisily and as soon as possible. —Basics of The UNIX Philosophy

修复你能修好的—但是如果你必须失败,那就尽快喧闹的退出。—UNIX基本哲学

我不是一个中国教育操作系统下优良的程序。我在系统里运行了将近20年,快到最后的时候才喧闹的退出,Dump出这么大一个core file。我知道有的程序很早就退出了,我自愧不如他们。但是有的程序一声不响就退出了,还有很多的程序成为了zombie,永远的驻留在系统中成了系统的负担,在这一点上我又比他们好一些。至少我让程序员有机会用调试器检查core文件,调查这个程序运行中哪里出了问题。

“你退学就退学,干吗大惊小怪,牢骚满腹的?” 如果只是有牢骚,我就把隔壁同学拉过来一起发发牢骚就完事了。可是我虽然不是优秀的程序,我觉得应该为修复这个系统,修复自己做点什么。我希望国家的教育和研究环境好起来,这样大家就安心的生活,不用出国搞得奔波流离。有多少恋人由于一个人出国了而痛苦的分手,有多少父母在盼望海外游子的归来?我不能像很多人那样申请了国外的学校,拍拍屁股就走人。我一年前就考GRE想出国,可是我总是自欺欺人的幻想国内的境况会好起来,有时我觉得看到希望,可是马上希望又破灭了。一个个大师来了,让我一次次燃起希望,可是发现他们对环境的作用也不大。一些大师不满意,又走了。我自己也想尽力改造环境,结果经过多次努力无效,自认能力不够,终于放弃了。

在发现大家都忙着发表paper而没有讨论时,我曾经建议设立一个清华的THU-Technical Report。我的想法是:最差的草稿扔在垃圾堆里;可能有用但是还不值得向所有人公开的东西发到THU-TR,供系内查阅;如果发现THU-TR的东西会有用,再好好修改了转投会议或者期刊。系学术助理王磊很高兴的采纳了我的建议,并且自愿维护一个THU-TR的编号。可是根本没有人愿意把自己好不容易写出来的但是确实又不值得发表的东西投到这里,因为世界上总有地方可以把这个东西投出去,还是SCI和EI,而这个THU-TR连正式刊物都不算。后来有人告诉我,如果学生都把东西投到我们这里,不知道有多少导师会跟我们急。所以THU-TR的计划就这么告罢。

我一年前写信给Knuth,这个我相信是真正的大师。我说我想退学,想请他推荐一些真正的研究者给我做老师。他回信说“你先找精通中国文化的长者谈谈”。我意识到他可能觉得这是一个文化的问题。我于是想知道中国的科技为什么搞不好,就开始看一些有关文化的东西。后来居然跑到中国社会科学院去听新竹清华大学人文学院的院长讲座,后来又在清华参加了人文学院的研讨会。会上一个老师说的好,当一个制度没法衡量学术水平本身,它就会用一个似乎等价的标准,比如paper数或者高考分数。但是一旦这个标准被确立,人们就会向着这个标准努力,而不是向学术水平本身。他们总会发现制度的很多问题,找出破绽,去达到这个标准,而不是提高自己的学术水平。最后,这个标准已经完全不能反映水平本身。我就在想,这个问题大了,这不仅是环境,制度,而且还是长久以来的文化造成的。从新竹清华大学院长的讲座里,我发现英国人是怎样用科学技术打开了中国的大门,而乾隆皇帝是如何对科学不感兴趣。中国似乎从古到今就不重视科学技术的,中国有自己的优势,自己的文化。对啊,科学技术是个双刃剑,如果照美国那样发展下去也不知道会怎么样。我们中国的文化是瑰宝,但是它已经被外国的坚船大炮打得遍体鳞伤。这不是我们的错,但是我们要努力恢复自己的文化,不能总是怨天尤人。我就开始看道德经之类的东西,还去西麓学社参加古代文化讨论活动,后来又开始打太极拳。

我觉得再没有从实际出发的目标,我的研究就会完全变成纸张了,就像我高中感觉到的一样。所以后来我就自己设立了一个研究方向,我把自己称为“研究博士生”,我要去了解博士生都是怎么样生活的。我就想知道有多少学生有跟我类似的困境。我跟很多朋友谈过,去了解他们的苦衷,研究生也有,本科的也有。我觉得我还应该了解更多的人,就试图到研究生通讯社做记者,心想挂一个记者证,就好跟人套磁问一些问题了。结果他们说我口才不好,所以做了一个秘书。后来记者们告诉我,他们是由上级分配任务的,根本不可能让你去报道学生真正的想法。我为了多多接触外国文化,比较中西文化的不同,又加入了学生对外交流协会(ASIC),我在ASIC有了很多好朋友。博士生论坛的时候也有很多同学跟我反映研究上的问题。讨论成立特别兴趣小组(SIGs)的时候,我就提议成立一个Common Room,一个同学说她去 Stanford 的时候那里就有很好的 Common Room,很多人在一起讨论,这是国外大学斯通见惯的东西。我告诉Oxford的朋友我的想法,他很惊奇地说:“你们居然没有 Common Room?” 后来吃饭时我又找一些老师谈话,发现他们也对这个事情无可奈何。老师自己的办公室都要自己出钱,谁还能支持你们有这么大一个房间?而且即使有了房间,谁来讨论?还不就是拿着别人的paper,试图找点可以改进的地方,或者就讨论哪个会议好发paper。Common Room只是一个形式,只要有人感兴趣,随便找个茶馆也能讨论。问题就在于没有人有精力有心情进行真正的讨论,制度决定一切。我们无能为力。我觉得自己一个学生力量太小,曾经试图找大师帮忙。我找到Andy Yao,述说我的苦衷。结果他对我说:“别试图去改造环境!你没有这个能力,连我都没有!改造好你自己就不错了。" 改造好我自己,可是怎么改?所以我决定先换一个环境,到一个真正搞研究的地方去体会,去学习。

其实我不后悔进入川大,不后悔来到清华,珍惜一切的历史,因为没有它们,我也许就不是现在的我,有着自己想法的我。我也许就在安逸的生活中变得堕落。它们不完美甚至给我痛苦,但是我还是珍惜,珍惜这里的朋友,这里的一草一木。也许这就叫做爱。我会变得更好,我会挂念我的满目苍夷的祖国母亲。我会回来告诉你我学到的一切,我会给你和其他儿女真正的幸福,一定的!

(本文在进行一些修改。如果转载请注明出处,以便看到最新的版本。http://spaces.msn.com/members/shredderyin/PersonalSpace.aspx?_c01_blogpart=blogmgmt&amp;_c=blogpart)

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/8547379