posted in 程序员之路 

摘要:数学修养对软件开发之路起着什么作用?码农如何修炼自己的内功并成长为优秀的软件开发员?带着相关思考,社区之星第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

posted in 程序员之路 

我曾在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

posted in 程序员之路 

最近在网上看到有人写了一篇关于《写给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

posted in 程序员之路 

编者按: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

posted in 程序员之路 

始终认为, 对一个初学者来说,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

posted in 程序员之路 


清华梦的诞生

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

小小科学家

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

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

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

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

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

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

失之交臂

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

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

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

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

我们是考试前填的志愿,我根本不考虑其他学校就只填了清华。后来妈妈研究了一下,帮我添了一个天津大学在第二志愿。以下的志愿全部空白。大家觉得我真够大胆,可是我的心理状态让我发挥完全失常,比清华的最低分数线还差两分。特别是语文,才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

/** * RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS. * LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/ /* var disqus_config = function () { this.page.url = PAGE_URL; // Replace PAGE_URL with your page's canonical URL variable this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable }; */ (function() { // DON'T EDIT BELOW THIS LINE var d = document, s = d.createElement('script'); s.src = 'https://chenzz.disqus.com/embed.js'; s.setAttribute('data-timestamp', +new Date()); (d.head || d.body).appendChild(s); })();