太阳是黑色的

少年听雨歌楼上,红烛昏罗帐.壮年听雨客舟中,江阔云低断雁叫西风. 而今听雨僧庐下,鬓已星星也! 悲欢离合总无情,一任阶前点滴到天明.

小论公平

昨天看到新语丝上有人报料北大招收博士生的过程可能存在猫腻,那位同学的理由主要是自己是初试考试的第一名,而在复试的时候自我感觉发挥正常,却最终没有能够被录取。

我相信这样的情况,很多人都有曾经经历过或者听说过,也许都司空见惯了。要是放在以前,我也会开始感慨招生过程的种种不公和可能存在的腐败现象。然而,在海外留学的这些日子,让我对这种现象有了一些新的认识。

我自己经历过美国大学本科的录取、美国大学研究生阶段的录取、美国大学导师招收学生的过程、美国大学校内工作的招聘过程、美国本土公司的招聘过程,应该说,想来想去,说句客观话,国内的高考、研究生考试、甚至新语丝上那位博士考生的经历都相对来说是公平的。

先说说一些客观的事实。美国大学本科的录取因素有很多,但是考试成绩却只是一部分考虑。当然,谁有SAT高分(相当于我国的高考)以及平时成绩的高分,对于录取有很大的帮助,但要去那些比较好的大学,甚至是名校,光有这点成绩是远远不够的。比方说,学科竞赛,体育竞赛,文艺竞赛,都是相当重要的。对于国际学生来说,美国大学还要考虑地域、文化、肤色等等方面。所以,也许一个成绩优异的中国学生不被录取,而一个会敲鼓的非洲原始部落的学生则被录取,这是真事。于是,在这种情况下,谁也不会因为自己分数比别人高几分没被录取,去找学校的麻烦。更何况,学校的自主招生体制说白了就是学校想招谁就是谁。美国教育部不更会管这些事情。

那么美国大学研究生的招生是怎么回事呢?对于国际学生来说,托福成绩和GRE成绩是不可或缺的。但是,这两项仅仅是一个敲门砖。除非两项均接近满分,否则对于个人来说,竞争力并不体现在这两项的分数上。学校可能更多考察科研或者项目经历,以此来判断一个学生是否有学习的潜力。同时,大学时期的活动也是十分重要的。另外,平时综合成绩也是必须考察的因素。如果有学生本科阶段就发表过论文,那么无疑会让这位学生增色不少。然而,即便是这些方面综合起来以后,学校可能还要考虑这个专业是否需要这么多学生,国家、地域的问题同样需要考虑。另外,这个学生所在的学校以前是否申请过本学校,如果有,记录如何,等等。所以,一个人被录取了,和另一个人不被录取,可能大家都不知道为什么。

再说说美国大学的教授招收学生(也就是找导师)。美国大学研究生入学以后,特别是博士研究生,不一定有导师。如果没有导师,那就需要自己争取去寻找。绝对不可能出现系里面安排的情况。而导师要不要这个学生,则完全是导师自己的事情,也就是喜欢谁就招谁。那么,一切可能的因素都要参考,一切不可能的因素也要考虑在内。有导师喜欢招收那些已经通过博士资格考试的学生,有的导师不太在乎这些。有的导师仅仅需要那些和自己研究方向完全对口的,已经具备一定研究能力的学生。有的导师喜欢那些相对“白板”的学生,可以日后培养。从这一点看,仅仅凭几个考试的成绩,基本上说和能否找到导师关系不大。

说了这三个我亲身经历过的经验后,我想说,一方面我们宣扬素质教育,一方面我们自己并没有习惯除开分数以外的东西。如果说高考要保持客观公正性需要分数的绝对杠杆,那么研究生的入学考试,特别是博士入学,绝对的考试分数仅仅应该作为某种参考。因为研究生的培养目的不是通才教育,而是培养研究型人才,研究工作和看看课本做做题是两码事。

那么有人会说,如果不完全按照分数做,岂不就是不公平吗?这样岂不是腐败的温床吗?看看我上面描述的美国大学的招生过程,你能想象在其中会发生多少“台面下”的“交易”吗?既可以说没有,也可以说非常多。说没有是因为,招生是对学校自己有好处的事情,招生招得不好直接影响学校的利益,所以学校不会太过于玩火。但是,说完全没有幕后交易,那肯定不是。那为什么克林顿的女儿(能力很平平)可以很轻松去斯坦福大学,然后又去牛津深造?

这里随时都发生着分数高的同学进不了最好的大学,分数高的同学找不到工作的情况。一点不奇怪。当然,大家不要从另外一个极端去理解,这不是说分数不重要,而是,我们要去适应分数不是公平的衡量标准。至少不完全是。

到了美国以后,我才发现,美国人对于“关系”是多么看中。“Networking“成为了中国“关系”在美国的间接翻译。当然,那是另外一个话题了。但是,我只是想说,依靠数字和一些看似可以衡量的标准,并不能保证公平。更何况,这种公平也许并不需要。

再次抛出关于Linux的话题

今天gaospecial给我留言,我回了以后,害怕大家误解一些我对于Linux的看法,固而好好写一篇我对于Linux,特别是Linux开发环境的看法。

我自己有一台电脑使用的是Ubuntu Linux操作系统,我实验室的机器是CentOS,现在上班的机器也是CentOS,学校的工作站是Sun Solari。尽管,我自己在Linux下开发和办公基本没有问题。从我自己的情况看,我没有必要讨厌Linux。2004年的时候,我还在我所参加的学 生组织学生网络中心组织了Linux学习小组。应该说,我个人还是很喜欢Linux的。

但是,为什么我一直都对Linux有意见呢?那是因为我觉得有一些Linux的缺点不应该说成是“强大”的代名词,反而成为了Linux迷炫耀的地方。

比方说,一直以来“易用性”好似不被Linux用户所齿,只要功能强大就行。但是为什么Ubuntu能够成功?这是不是说明了“易用性”的重要性?也许 是。还有一点,以前Linux宣传的口气是,不需要什么图形界面,全部命令行的操作体现了专业和高级。不过,现在Gnome和KDE的界面做得越来越花 哨,还有不同的界面插件证明了,虽然界面不是万能的,但是对于普通用户来说,没有界面是万万不能的。

操作系统和软件的发展还是有一定规律的。强大和易用性不是对立的。这也是汇编语言虽然强大,但是并不是最主要的开发语言的原因,也是甚至C或者C++也会慢慢变成不是最主要的开发的语言的原因。当然,那是另一个话题。

再说Linux的开发。长期来看没有一个标准的集成开发环境其实是阻碍Linux发展的一个潜在因素。回顾Windows阵营,微软的Visual Studio和Borland的系列开发工具(包括C++ Builder、Delphi、JBuilder)真的是功不可没。强大的开发工具提高的是整体软件开发的能力和效率。不仅仅是写程序的效率,更是团队协 作的效率。举一个简单的例子,在Linux下开发,因为调试器的缘故,很多时候,开发人员只能通过输出log信息来达到知道运行状态的目的,但是这在一个 大型系统中,要想通过这样的方式来很清楚认识每一步的运行状态是非常困难的。对于源程序来说,功能代码之间夹杂着无数的调试信息输出代码,也是非常不美观 和影响代码理解的事情。

注意,这里不是否定GDB和G++之类的开发工具的强大性,而说的是易用性以及易用性带来的效率问题。我们不能说,因为有了GDB,就不需要更高级的调试工具了,这是不对的。

我知道通过配置VIM和Emacs还可以听音乐,看电影,还能干这个,干那个。有人说这两个软件能无所不能。我相信。但是,要说开发软件,我不相信这是好 的方法。大的例子太多了,微软、IBM、Oracle和Sun的基本所有软件都是用了集成开发环境开发,单靠VIM和Emacs来编写上百万的代码是不可 能的,这不是怀疑这些编辑器的编写能力,而是软件开发除了编写,还有很多的东西。

所以,Linux阵营要做的是好好开发一个软件开发环境,而不是一次又一次告诫大家使用VIM或者Emacs。这两个软件本身没有错,但是做开发工具,特别是软件开发工具,并不是最适合的。

另外,有人肯定会告诉我,VIM和Emacs的插件如何如何丰富。最好不要提这个。第一个原因是,用户安装好一个软件,这个软件是要可以使用的,能够达到基本需求的。为了语法高亮、为了语法检查都需要寻找插件,这不是什么好的理由。

当然,VIM和Emacs存在的理由,不是没有。在有不少的情况下,特别是终端操作,远程操作,这样的纯文本编辑器是效率最高,也是很有可能唯一提供的工具。

此文仅仅是希望在使用Linux的朋友,真正去看到Linux的不足,去弥补这方面的问题。

实习感言(二)

上周就实习的初步印象抛出了一些感性认识,其实后来我仔细思考以后,还是发现了一些深层的东西。

就整个开发流程和工具来看,公司还停留在上个世纪70-80年代的思路。当然,有人对这种满屏字符,只用VIM、Emacs的方式推崇至极。然而就效率性而言,我还是看不到这样做的意义。有一个强大的集成开发环境已经是80年代以来大多数语言开发能否普及与否的共识。比方说,因为代码深处某个地方的拼写错误,在集成环境下可以不费任何力气找出,而纯文本环境,也许就是一上午的时间。这一点和是不是熟练的开发者关系不大,因为代码量上去以后,再熟悉的人也需要合理的工具。

公司的环境和语言虽然落后,但是我却深深感到了这种方式对于公司发展的合理性。一个能够生存30年的公司,技术的稳定性是最重要的。在早年的时候,关系数据库还没有成形,SQL的国际标准还没有制订,Java还要等上十多年才被发明,一切当然只能自己做。那么现在呢?那天,我带着同样的疑问问了公司的老板,SQL那么成功,公司的数据库软件居然不原生支持,让我有一些不可理解。然而,老板却说了这么一句话:SQL的标准形成才10年,Java也不过流行了10多年,我们有30年的历史,在这30年里,流行的东西来来去去,而我们的技术却稳定了下来

这是一句实话。20年前,最红火的语言和开发平台现在已经无人知晓。谁能保证Java的未来和SQL的未来呢?30年,技术变换风云,唯有客户的需求是永恒的。满足客户的需求是最关键的业务。而要随时都能够去满足客户的需求,技术的稳定性就尤为重要。所谓稳定性就是说,版本的升级、功能的加入要非常平滑。不能上一个版本是C++,下一个版本是Java,然后又想换Python。这其实没有意义。换技术需要成本,况且在实际开发中,特别是已经积累了大量代码的软件公司眼里,语言,的的确确不是最重要的东西。

尽管开发环境丑陋,但是产品只要能够达到客户需求,产品只要能够延续,就是胜利。这一点,我们国内的开发者通常看不清楚,经常爱陷入各种技术平台的论战,而忽略了讨论需求本身。

于是,公司使用一个完全不支持对象的开发语言从1970年代直到现在。所有的产品都能够非常完美的衔接。这不得不说是一个奇迹。

—————————————————————————–

然而,我还是很不理解Linux下开发的一些“习惯”。因为要配置某个运行环境,我的一位同事在我的机器上满屏幕字符的飞快配置了足足4个小时!Emacs和Shell屏幕交相辉映,快捷键用得我眼花缭乱。但是,我一方面佩服这位仁兄的技术水平,另一方面,我着实不明白那么多配置文件和脚本的是为了什么。说到易用性,我不得不佩服微软。在微软的平台下开发程序真的是享受,用过Visual Studio的人,很难认同缺乏那么多功能的开发环境。

实习感言

已经实习了一个星期了,最大的感触还是上课和搞科研的自由度大一些。工作的压力还是比较大。

目前还没有开始做正式的项目,但是到这个小公司的实习却给了我很多启发。有管理方面的,有技术方面的。管理方面的我可能还需要观察一段时间才能看出一些名目,不过这一个星期的开发学习,让我对于这个公司技术方面的感想还是逐渐清晰起来。

这个公司的产品大多数是和报纸出版有关,也就是排版和印刷相关。此公司虽然人数不多,不过客户群体还是很大,目前最近的客户是基于旧金山的全美最大的华人日报《星岛日报》。如此小规模的公司,成立于1975年,已经在淘汰率极高的软件行业摸爬滚打了30多年,不能不说是一个小小的奇迹。

第一天去公司把我吓一跳。公司的开发语言是公司自己开发的语言,编译器是公司自己开发的,调试器是公司自己开发的,数据库是公司自己开发的,网络服务器是集成Apache并且经过改写的。公司10个左右的产品均是又自己的开发语言所编写。这种情况已经持续了将近20年。然而,公司本身的技术人员,特别是开发人员并不多,核心的开发人员也就3-5个人!

吓一跳之后就是痛苦的持续到现在的开发经历。公司的语言是类Pascal语言,我在1997年到2002年有过几年Pascal的开发经历,然而没有集成环境的开发,仅仅依靠编译器,开发进度非常之慢。命令行的调试器对于大型程序来说根本就太过于原始。最后,仅仅是Emacs的语法高亮都成为了唯一能够帮助的奢侈品。整个工作的感觉就像是上个世纪70-80年代。因为没有语法提示和高级开发工具(如Visual Studio、Netbeans和Eclipse)的成员提示功能,根本就不清楚语言库内提供了什么功能。经常为了一个简单的函数要去查询浩如烟海的文档。注意,那些文档的编写都非常差,基没有例子,就仅仅写了一下函数的功能,更何况所有的开发手册有4-5卷本,两三个牛津字典那么厚。没有索引和指导在这样的文档里面找一个函数的使用,简直就是大海捞针。

网络开发环境和一般的Web开发环境,比如PHP、ASP.net、JSP都非常不一样,有一点类似模板外加控制代码的意味。然而整体的流程确实在后台的服务器组件中完成的。这一切都是公司自己的语言编写的。尽管现在有很庞大的软件在这上面编写完成,但并不意味这这套东西就没有问题。首先,后台的服务器组件不能区分POST和GET,有点匪夷所思。并且对于Session的支持也非常有限。没有事件的概念,更没有什么URL重写这些现代的东西。

数据库就更是夸张。首先,公司的数据库都不是严格意义上的关系数据库,而是自己写的数据引擎。并且与SQL不兼容!数据库查询不能使用强大的SQL,这在今天看来很不可思议。然而,整个公司的存储方案都是类似于结构文件的方式。因为没有SQL,关系数据库所带来的一切便利这里都用不上。而很多基础的东西明显缺失。比方说,没法生成唯一的递增序列作为数据的标识,只能使用很丑陋的方法模拟。更严重的局限在于,索引的字段的长度只能是255个字符,单个索引的字段长度不能长于127。常常一个简单的功能都让人困扰半天。

我的同事在另外一个项目中工作,那个项目使用了非CVS也非SVN的自己编写的原始的代码管理工具,效果是,可能还不如没有版本管理。大家经常覆盖相互写的东西。

看我写了那么多抱怨的话,是因为我这几天真的被磨得有一点没有脾气了。我一方面很佩服一个这么小的公司居然能够维持这么复杂的软件体系,一方面我的确非常不理解这样做的真实意义所在。如果说20年前,开发工具、调试工具、数据库工具都没有成熟的话,那么时至今日,市面上随便都能够找到开源的免费的好的替代产品。

最要命的还是编程语言的问题,此开发语言不能和现有的很多语言集成,比方说C,C++,或者Java。再加上人力物力的原因,语言库的开发又跟不上,文档就更旧,让人整个在浪费时间。

另一方面,对于团队开发,不使用开发工具,那完全就是自欺欺人。完全依靠一个简单的文本编辑器和原始的调试器,开发编译器是可行的,开发应用软件,那就是扯蛋。

不过,唯一让人钦佩的是,国内哪个40-50人的小公司想过开发自己的编程环境或者是数据库?考虑到这个公司存在了30年以上,不能不说还是有一些值得借鉴的地方。

变形金刚2在我所在的小镇开拍

变形金刚2在我所在的小镇开拍。有同学已经去报名群众演员了。

新闻:

http://news.aol.com/story/_a/transformers-2-movie-to-shoot-at/n20080517144009990011

http://www.mcall.com/news/local/all-n-l-transformers-060308-cn,0,5721345.story

在美国第一学年有感

明天,也就是周一,我将到本地一家小公司去实习。从而也算是在美国的第一学年彻底结束。

回首这一学年的学习,感慨还是良多的。这里说说主要的一些想法,和大家分享。

我所在的大学并不是美国的顶级学校,比如MIT或者是斯坦福之类,但是30左右的排名也使得我的一些观察可能还是比较符合美国一流大学的情况。

应该说,这有很多东西是和国内大学一样的。比方说,有人逃课。比方说,期末抱佛脚。比方说,炒作业。尽管我是研究生,但是我观察的本科生也经历着我们在国内所经历的类似生活。在这里,大多数学生还是能力平平,至少说也就是图完成作业。真正有能力的并不是多数。两极分化其实也很严重。有人能够每个暑假都找到实习。有人已经开办了自己的公司,并且业务不错(在我所助教的两个学期,都碰到了自己开公司的学生)。当然,也有人作业也没法好好完成。特别是我当助教,有一些计算机的课程需要做课程项目,如果我不在最后一个星期提醒那些学生,鲜有人会真正按照进度完成。很多学生找到我,一脸无辜,说自己如何如何花了时间,但是就是做不出来。有时候一听就知道是瞎说,做不出来情有可原,那是水平问题,可是,有人连编程环境都没有配置好,这就是问题了。当然,最终期末的成绩,好坏真的很分明。

学校有两座图书馆,但真正爆棚的时候也就是期末。平时人流量和学生人数相比还是有差距。美国学生平时的生活除了学习,最终要的莫过于聚会。一般来说,从周四晚上开始大家就去聚会了,图书馆人数就非常少。我们图书馆的书籍馆藏十分丰富。不过就我借过的上个世纪70年代的几本书来说(并不是很偏的书籍,而是经典教材),我经常是第一个或者是第二个借书的人(因为有记录之前谁借过),让我有时候觉得这里的人没有好好利用起资源。

然而另一方面,美国学生对于资源的利用却又让人瞠目结舌。我们学校有两个室内体育馆,有一个足球场,橄榄球场,棒球场,排球场,若干网球训练场地。室内体育馆一个是篮球馆,另一个是健身用的,里面有游泳池,室内球馆,和近一百个跑步机和其他健身器材。注意,这些设施的使用完全是免费的。即便是这样,美国学生依然嫌学校的体育设施不够完善,有人居然在学校的校报上反映,不少学生还花钱到附近的负费健身房去。同时,我们学校有四个食堂和两个学生活动中心和一个和北京音乐厅差不多大小的表演艺术中心,但是学生嫌这些建筑太过于分散,希望学校建设一个集学习、娱乐、餐饮为一体的大型学生中心,内带电影院。当我看到这样的报道,感慨这里的学生真的是生活过于优越。从某种意义上来说,我们希望这样的学生从内心真正去体会世界上其他地方的疾苦,甚至仅仅是去体会困难一点的生活,都是天方夜谭。

美国学生的社团活动和业余生活还是很多。但就我观察来看,学生组织的活动规模都比较小,极少有那种劳命伤财的大型表演性活动,比如晚会(值得回味的是,两次大型晚会性质的活动均是中国留学生会组织的)。这让我印象很深刻。对于国内的很多大学生活动,我们可能过于要求场面性和组织性。但另一方面,美国学生对于“社会性”活动均非常热衷。比方说达尔富尔问题的演讲,整个场地人员爆棚,却鲜见我们中国留学生的身影。甚至是介绍四川西面那个自治区情况的演讲,也看不到中国人的身影(我可能是在那里的唯一中国人)。不得不感慨,我们的不少留学生还过着看看书,打打球的类似中学生活。眼下,那位富有争议的得过诺贝尔和平奖的宗教领袖就要在7月份到我们学校讲学一周,价格不菲的5000张门票在15分钟内售光。不知道我们中国留学生又有什么反应。

在这里,研究生的生活是非常忙碌的。我已经记不起有几次是晚上11点以前离开图书馆的了。大多数时候都要忙到深夜。然而收获却是显著的。最明显的并不是知识上的提高,因为知识本身在哪里都可以学习,最大的提高来于如何指导自己去学习,也就是如何为自己的学习找到动力。仅仅完成课程和导师交给的一些任务是远远不够的。

应该说我们一直有一个偏见,说中国大学里面的课程设置没有太多用,很多东西都过时了,或者说与工作不相干。不少同学抱怨学的东西没用。那我要说一句公道话,这里的很多课程,甚至大多数课程也和国内一样,与工作毫没关系。把自己找不到工作,或者觉得能力不行的责任推卸给学校,是很愚蠢的。事实上,在美国,如果你想找到一份理想的工作,那些工作技能没有一项是直接在大学里面教授的,没有,也不可能。抱怨学校的同学们最好多找找自己的原因。

从8月份开始,我就从系里面的助教工作转去我们学校的高性能计算中心担任研究助理,这对于我来说又是一个新的挑战。

关于找工作

到了找工作的时候,虽然自己还不需要现在着急这件事情,但是周围同学和朋友的经历让我体会到了找工作的艰辛。

总的说来,还是有能力的人先找到了工作,像小义,像我们班的学委。尽管可能并不是最满意的,但是毕竟有了着落。从我的观察来看,大多数找不到工作的人其实都是自己的问题。比如,要求太高,又要是大型企业,又要解决北京户口,还要“五金一险”。老实说,这简直就是“自绝生路”。去中华英才网上看一看,有多少职位啊,可是大家把目标定太高了,那肯定就没有地方去。

事实上,如果自身条件不够理想,就不应该有那么多的要求。注意,我这里所说的条件,除了学历以外更重要的还是你自己究竟会什么东西。这个是很重要的。联想到以前学生网络中心的两位学长,都不是计算机专业的,其中一位甚至是学习法律的,但是最终都在非常好的公司里工作,就可以看出来,有一技之长还是很重要的。

过一段时间,我想写一个更加详细的关于“工作”话题的文章。主要是剖析我们中国人的职业观和价值观的。

我们到底需不需要自由

最近的一些事情让我感到,中国国民根本就没有理由和资格去谈论自由和民主,不是我们没有条件,而是我们把自由和民主当成了自己获利和徇私舞弊的工具。

其实,现在政府已经给了我们很多获得自己权利的条件,然而遗憾的是,我们自己把这些条件给浪费掉了。

比如高校的研究生报送,本来的目的是通过这种形式,给那些有一定特殊才能和全面发展的学生一个机会,然而,各个学校最终的落实结果却反而是让那些有关系的人能够明目张胆的走了后门。

所以,只有考试,从某种意义上说,才能相对公平一点。

上政治班的收获

最近在上考研的政治班。老实说,以前对政治的感觉就是,政治都是条条款款,都是一些形式化的东西,或者说都是教条。然而,这几次上课更新了我的一些看法。虽然是以考试为目的的辅导班,但是老实或多或少讲到了很多政治的内涵。然正是这些看似不是考试内容的内容引发了我很大的兴趣,同时也给了我很大的启发。

说简单一点,这种启发就是,一个国家需要政治教育,不管这个国家是什么政治制度。一个人,也必须要懂得政治,至少要懂得政治的一些基本原理,这样才能理解国家和社会的很多行为。最后,也是最重要的一点,要把政治放到历史中去看待。没有历史,也就谈不上政治。因此,孤立地看待政治问题,无疑是无法真正理解政治本身的。

当然,政治有教条的东西,可是这些教条其实可以用在很多方面,比如商业。商业的运筹帷幄很难说不是一种政治的体现。因此,想要在商业上有所作为的人,应该好好研究一下政治。至少要熟悉政治。

牛人来了!

建议标榜自己是牛人,或者帮助别人标榜牛人的人看看这则报道

http://news.sina.com.cn/o/2006-08-10/15109713931s.shtml

你们所说的牛人都肯定没有这位在出事前“牛”。

这则报道中折射出的东西远不是那么简单。如果没有媒体,如果没有那么多需要梦想,特别是需要去编造去幻想理想的年轻人,陈峰伟肯定不会走到这一步。

你看了以后不要觉得好笑,事实上,这样的人在你我身边时,我们也许就是一个附庸者。昨天我才论述了高谈阔论。然而,所有这些吹嘘者背后,无疑不是指向我们社会整个的价值观的。的确,有人还在为这样的人叫好,说什么,这样的人最适合我们的时代。