艺术,创造力与计算复杂度随笔

P = NP 是计算机科学领域最著名的一个问题。关于这个问题,还有一个非常哲学的表述:创造力可以被自动化么?

一千个人对创造力可能有一万种不同的理解,但如果从计算复杂度理论的角度来看,我觉得也许可以把它理解为求解 (NP \ P) 类问题过程——这类问题有两个特点:第一,面对它们,没有任何机械的过程能保证你轻易地构造出解来,事实上当问题规模稍微大一些时,纵然你能调动全世界资源,用尽从宇宙肇始至如今的时光,也不足以得出它的解。正所谓穷诸玄辩,如一滴投诸巨壑;竭世枢机,似一毫置于太虚。机械过程无能为力的地方,人类就只能仰赖直觉与灵感;而规律的穷途,也正是创造力绽放光芒之处。第二,当你得出一个该问题的解之后,其他人很容易验证你的解是否正确——毕竟,如果无法知道你的解正确与否,又如何知道你是天才还是疯子?

在我看来,这个对创造力的定义准确地捕捉到了艺术的价值:艺术的构思与创作是一件非常需要灵感又极其耗费精力的事情,但是欣赏那些优秀的艺术作品却往往颇为简单,但凭直觉与天性即可。有些艺术作品曲高和寡,可以理解为无法欣赏它们的人尚未掌握到一个简单的验证算法。与之相反的是,还有些作品也许初看教人觉得新颖,但看多了却让人觉得乏味。譬如钱锺书曾经批判江西诗派的诗人观察自然时失去了活性,也有许多人批判点彩画派的画作缺乏灵魂,也许就是因为在他们看来,这些艺术作品中没有创造力,它们的创作是可以表述为简单的机械过程的——咏叹任何景物只需要到唐诗里搜求典故,描绘任何风光都只要把它们拆成一个个原色组成的色块。

柏拉图认为,世界上所有事物都有一个纯粹的、最完美的理型,而现实世界中的所有东西都是它的投影;如果说一件事物非常美好,那么便是因为它接近理型。从这个角度来看,对艺术的追求与对完美的追求却是恰恰相反的。因为完美的事物往往是简单纯粹的,但也是机械的、乏味的;而艺术却需要一些创造力,需要创作与欣赏间的不对称,为此就需要在简单中融入复杂,在规律中揉进混沌,因为那才是人类超越自然的地方。换言之,艺术从来不是对完美的追求或对现实的再现,毕竟,方方正正有何趣味,变奏曲比单调的重复更生动。

然而到目前为止,我们还不知道 P 是否等于 NP。如果从我们前面谈论问题的角度来理解,我想我们更希望生活在一个 P ≠ NP 的世界:因为如若不然,我们所引以为傲的创造力,就只是一个我们相信了很久很久的幻觉而已。

欧陆风云(0):大卢村

那神态还留在石头上
而斯人已逝,化作尘烟
看那石座上刻着字句:
“我是万王之王,奥兹曼斯迪亚斯
功业盖物,强者折服”
此外,荡然无物
废墟四周,唯余黄沙莽莽
寂寞荒凉,伸展四方。

——《奥兹曼迪亚斯》,雪莱作,杨绛译

每次在我长时间不更新博客后再写文章,一定要或徜徉记忆,作一番哲学的思考,或引经据典,盗窃先贤的智慧,然后以穿越岁月的笔触,勾勒时间的魔力,好让读者忽略我因为懒散而没能更新博客的事实。当然,这也是因为时间确有让人感慨的魔力,不是么?“旧时王谢堂前燕,飞入寻常百姓家”,说得不正是一个拍本科毕业照的时候还穿着 ArchLinux 文化衫的小伙,现在却变成了 Mac 用户的故事么?

写作这篇文章时我正在瑞士的提契诺州,鸟语花香的城市卢加诺。在距此地9000余公里以外的交大,我的同学们即将迎来清明节假期(感觉似乎一定得加上“假期”两个字)——在此地复活节到来的同一天。无论来历如何,这两个节日都意味着从此以后,白日将逐步变长,万物将逐渐复苏,无论在世界上的任何地点(只要在北半球),没有什么比这个时候更合适,宣告在漫长的沉闷与慵懒之后一个崭新的开始。

我来到欧洲这座城市的目的,是在此地一个叫做 Università della Svizzera italiana (简称 USI)的大学作访问交流。我已经来到这座城市将近一个月了,而我还将要在这里待更久。因此,是时候在我的博客当中开启一个新的篇章了,就不妨借用一个我经常玩的 p 社的游戏,将这一系列命名为《欧陆风云》吧。

大卢村

卢加诺是处于瑞士南部边陲的一座城市,此地与意大利米兰的距离比与苏黎世或伯尔尼的还要近。在游戏《欧陆风云4》(Europa Universalis 4)刚开始的1444年,卢加诺还归属于意大利城邦米兰公国的统治之下,科莫公爵与米兰公爵曾为争夺此地有过多次的冲突,最终在1513年,它落入了瑞士联邦的掌握之中(别问我为什么)。这大概可以理解为何此地为意大利语区。

Lugano in EU4

从游戏截图上可以看出,卢加诺处于阿尔卑斯山的南端。据说因为阿尔卑斯山阻挡了来自北方的冷空气,因此尽管这里纬度高于上海,却远比上海要暖和。此外由于属于地中海气候区(我瞎猜的),阳光十分充足——充足得足以让我认识到,原来墨镜不只是装X用的。

我前面曾用“鸟语花香”形容卢加诺(Lugano)这座城市。说“鸟语”是因为此地属意大利语区,每一天都活得像玩解谜游戏,极大地方便了我们遵守至圣先师“非礼勿听”的教喻。而说此地“花香”则是缘于此地多见卖花的与拿花装饰自家的(也许由于季节原因,此时路上还看不到什么花,但有时可以发现一些树上已然含苞待放),慢慢地呼吸道就发现自己的敌人从烟尘变成了花粉。

但千万不要误会,虽然卢加诺被看作是一座城市,但它只有不到76平方公里的面积(本文所有数据来自维基百科,百分比则来自计算),大约只有上海的1.2%,即使相比我的老家开封——一座逐渐被郑州吞噬的城市,这个数据也只能上升到13.9%;而其6万多(2013年底的数据)的人口更是连当年世博园里的人数都比不上。所以来自中国的留学生将此地戏称为“大卢村”。

但是从另一方面来看此地的确是一座城市——仅仅从楼房的星罗棋布与街道上的车水马龙(倒是还远远达不到堵车的程度,至少我还没碰到过)来看,这句话就像数学证明题“显然”后的结论一般确凿。只是这里的街道相比中国的城市也是小了几号,没有非机动车道(自行车都骑在机动车道上),很多线路还都是单行道。此处的公交系统发达,而且相比国内的公交车非常优越的一点便是:往往非常准时,可以根据最近站牌上车的到达时间来决定什么时候到车站;但在中国待惯了也会觉得这里的公交相当可笑,譬如从我家到学校,坐公交车的话大约要坐个两三站——而这段距离即使步行也只要10分钟左右而已。

Lugano Street

抛开其他方面暂且不谈,欧洲人至少在学习编程的一个方面颇有优势——他们的楼层都是从0开始算起的。但可惜的是这里的互联网产业并没有展现出这一点——当我在打这段话的时候,我的桌前堆满了硬币,每一枚都让我愈发怀念起支付宝来。此外这里没有淘宝,没有饿了么,更没有交大里的 59store 或宅米,妈妈再也不用担心我 jawbone 手环上的计步数据了。

当然走在卢加诺的街道上还是颇为惬意的。除了明媚的阳光,还有各类公园与运动场,其中充斥着金发碧眼的小正太和小萝莉。听人介绍说,这里有规定说每隔多少公里必须有一个儿童游乐场——相比之下,我小时候的娱乐场却是小区的街道上——真是羡煞我辈。从学校一路向南,便是传说中的卢加诺湖,湖边修建着美丽的公园(Parco Ciani),逢周末便可看到许多人,有结伴出游的,有遛狗的,有慢跑的,还有带着小萝莉来喂天鹅的(别误会,是用面包喂)。

Parco Ciani

沿着卢加诺湖往南走,还有一条专门的人行道——左手边是湖光山色,右手边是我叫不上名字的树木,和一些简直称得上“诡异”的雕像。沿着此道一直向南,有一座被称作 San Salvatore 的山,从山的顶端可以俯瞰卢加诺湖与城市,其风光足以叫人胸中一畅。在上个周末,我和海洋一起攀登了此山,有趣的是,沿途还碰上了许多穿着登山服、背着登山包、拄着手杖的老头老太太;更有一位老先生掂着一件比人还长的乐器爬上来,并在山顶吹奏了起来。

然而,在我看来,除了自然风光,这里还有着更迷人的一景——微笑。虽然不是所有人,但在路上,或是超市里,或是楼道间,陌生人相逢时的微笑确实能让人心中一暖。在我看来,对待陌生人的态度往往是自身生活质量的反映,我相信少有人能在经历一天的辛苦工作与生活中的各种不顺心之后还能对陌生人展露出那种温暖的微笑。而最让我印象深刻的是我在传说中的瑞士银行 UBS 开户的时候,开户的职员我一边给我讲解银行账户的各个方面,一边欢快地跟我聊天聊了一个小时——其间她还纠正了我意大利语中“谢谢”的发音,我则告诉了她汉语中“谢谢”是怎么说的。

USI 这所学校全称的意思是瑞士意大利语区学校,但由于其拼写对英语世界的人来说太过蛋疼,所以有时候(比如在论文上)又被成为农家乐卢加诺大学。而我目前在这所学校的生活也可称得上是如农家乐一般轻松愉快——仅仅两次组会之后,我就已经进入了巴甫洛夫之狗的状态,每次提起组会想到的却是美味的葡萄酒。

The Church Near USI

我认为我来到瑞士以来,学到的最重要的生活技巧,恐怕就是买东西的时候不要换算。食堂里的一顿饭要11瑞士法郎,按现在的汇率换算过来,大约是71.18元人民币——即使是在魔都生活,也要被这样的价钱吓破胆;但如果不换算,就会觉得这样的价钱也是稀松平常——只要你这在这里有工资拿(我有)。然而葡萄酒的价钱却是一个例外,十几瑞士法郎,就足以买到法国阿尔萨斯著名葡萄酒庄产的金牌白葡萄酒——因此,据说这里最常见的三种疾病便是:抑郁症,花粉过敏,和酒精肝。

(欲知后事如何,且听下回分解)

我的大学(33):New Beginning

这个博客许久不曾更新了。上回写文章时的我还在为自己本科的毕业设计而纠结,现在的我已经住进了能洗热水澡的研究生宿舍(有这么作对比的 吗?)。按说太长时间不写文章必然会手生,但幸好在这未曾更新博客的半年里还有毕业论文这一浩大的工程为我润笔,所以我现在的文笔一定……更加惨不忍睹 ——因而如果在阅读这篇文章的诸君有在阅读文章的过程中发现这篇文章当中的任何段落中的任何句子由于充满了重复且无意义的文字而使整个句子变得几乎难以阅 读但你却发现明明整个句子提取主干以后可以用非常简洁的一两句话表达清楚的话,那一定是毕业论文对我的锻(cuī)炼(cán),教会了我如何写没有人会 读的文章。

这一年来我常常会觉得,大四以前发生的事情好像都已如上辈子那般遥远。当初的我曾在背包里放着一本谭浩强的《C程序设计》,满怀着憧憬与希望来到交 大,一本正经地参加学生组织和社团的招新面试,混入各个学院的迎新晚会看节目,穿着正装参加辩论赛然后两次惨败给同一个队伍,与朋友们在鸡公煲聚餐然后因 为菜点得太多只好打电话求援,接待某师兄和某大哥来交大游玩结果是我们把他们带到吉姆利得喝着畅饮玩了一下午的三国杀,紧接着又跑去自习教室通宵继续三国 杀……还有赶学院里那各种面向答辩的大作业的时光,参加stolon、hyll、这支队伍这三个为做项目而生的队伍的经历——这些队伍好像没有一个名字是 正常的。从这些经历中我收获了许多,比如Linux是怎么玩的,网站是怎么做的,还有用Java写网页是多么麻烦,Kinect的体感识别有多么不靠谱, 在C++的构造函数里胡乱放东西会多么蛋疼,以及小组合作的分工问题有多么纠结——所以比较正确的做法是,把所有的编程工作都交给雷哥。(Trust me. It’s been tested.)

我一直不知道我该算作理想主义还是近视(好吧,我确实近视 = =),直到大四我才开始真正思考起毕业后的出路。我一直不太能认同某些人对技术本身没有热情却积极准备出国的行为,然而从来没有思考过出国这件事的我后来 竟还是在一根又一根稻草落下后忽然产生了这样的想法,甚至还花了十来张毛爷爷报名了一次托福考试——只是后来真去参加托福考试的时候我已经确认直研了,因 此参加这次前一天晚上我才知道有哪些题型的考试的唯一作用就是鄙视了俞教主。

毕业前曾经在一次和昆仑聊天时,昆仑提到他读到一个人的日志,发现那个人大学期间参加的活动和做过的事,似乎都在切实地发掘和锻炼着自己的能力(相 比起某些存在的唯一意义似乎只是交朋友的社团和学生组织,嗯,这句是我加的),让他一方面感到惭愧,一方面也感到鼓舞;我也提到,现在的中国社会中许多人 心中“成功”的定义似乎只是有钱,而我更相信这样一句话:“Success is best measured by how far you’ve come with the talents you’ve been given.”(据说出自一本叫A Father’s Book of Wisdom的书)

然而对于人类来说,了解自己似乎真不是一件简单的事情。我还不能明确我的talents究竟有哪些。我不知道学术和工业哪条道路更适合我。我曾经尝 试过在微软实习,而学院在本科四年所教导的东西,在我看来,也是较偏向于工业领域的;于是我决定再尝试读研——一方面探索自己对于学术生涯的兴趣,另一方 面则是真心觉得自己懂的东西还是太少,我想要学习更多的东西,更确切地说,我想要学习更多自己真的感兴趣的东西。

所以大四这一年我生活的主旋律忽然从在寝室睡觉和在课堂上看闲书转变成了在实验室看论文和……在寝室睡觉。这一年来我越来越觉得有一种与我习惯的思 维方式所不同的,或许我可以把它称为“科学思维”的思维方式存在。我对这样一个可能根本是自己意淫出来的概念也只有一个抽象得“不可说”的理解,但同人于 野的博客中提到的许多学术著作,或者阿西莫夫的笔下虚构的神奇的心理史学,可以算作这方面的例子。我相信这种思维不止可以用来研究专业领域,还有许多我们 尚未真正理解而只依靠经验和“常识”来认识的事物可以依靠这种思维来提出革命性的思路。但我对这种思维却也不曾得窥门径,这也是我最近一直没有更新博客的 原因之一,我忽然觉得我对很多事物的理解的方式可能还太幼稚(另外还有一个原因是我忽然发现WordPress好丑)。

后来我们便在被雷哥誉为“毫无insight”的校长演讲中毕业了。毕业典礼的那天,巧遇昆仑、西瓜和zmc,于是在一起拍了一张合影;后来西瓜又翻出了四年前我们刚来到上海时在复旦门口的合影——把这两张合影放在一起对比着来看,似乎没变的只有光速和我的姿势。

哦,不对,不变的或许还有马书记每年开学时教导新生们要负责任的演讲。其实对我来说,本科毕业期间的岁月和研究生新学期开学的生活称得上无缝衔接, 几乎没有多大的区别——值得一提的区别或许只有寝室多了可以洗热水澡的地方,以及每天早上和晚上可以看到网上直播的软院研究生会的主要工作——在微博上煲 鸡汤。也许目前为止我重回交大读研究生最大的收获就是由于终于通过了一次交大的英语水平考试,而终于不用再背负英语一辈子没水平的恶名了(虽然这个研究生 的水平考与本科时的那款解谜游戏其实不可相提并论)。

太长时间没有写文章,忽然起念也只能作出这样的一篇滞涩的文字出来。也许最后还是该用一个稍微文艺一点的段落来结尾。十一长假本来有出去玩一玩的打 算,但念及祖国的人口,这一打算就落入了犹豫的沼泽。也许我明天就会忽然决定去苏州转上一圈,但也许我骑车骑到学校门口便改变了想法,不过那时我一定会模 仿王徽之的做法,装酷似地看着天上的云,慢条斯理地说:“乘兴而来,兴尽而返,何必到苏州?”

码踪侠影(0-2)

(本文是之前我在人人网上写的一系列小说,尚未完成,先把目前写的贴到这里吧)

 

 

“你知道吗?我的孩子,我们对主宰这个世界的神秘法则几乎一无所知。” ——教皇儒略三世

(本故事纯属胡扯,如有雷同纯属巧合)

雷哥站在软院一楼的圆厅中,腰沉三寸,足踏两仪,双手自然地搭在身体两侧,不知情的会以为他要跳骑马舞,实际上这是一种极其高深的架势。《五轮书》 里管它叫“无构之构”,《笑傲江湖》里说这是“无招胜有招”,我却知道,这乃是雷哥从C++的虚函数里悟出来的架势,就叫做“虚函数之阵”。

雷哥左面的人身长八尺,着西装革履,戴玄色墨镜,望之若雨果・维文,只是右手拿着一杆长枪,看来与他的一身装束极不协调。雷哥右面的人则是后面弯腰 驼背,前面大腹便便,头上的大胡子和长发散乱地纠结在一起,看来似乎想要模仿Richard Stallman的打扮,却整得神形两不似,只像是屌丝;更蛋疼的是,现在明明是大冬天,这家伙还是穿着一身油迹斑斑的T恤和短裤,让人不禁怀疑他没别的 衣服了。而在雷哥的正前方,则站着一个老头子,一头白发,一袭白袍,无风自动,像极了《魔戒》里的白袍甘道夫。

只听“hello world”的一声大喝,雷哥左侧的雨果・维文忽然出手,一杆长枪以迅雷不及掩耳之势刺向雷哥。只见雷哥不慌不忙,觑准了一个时机,转身移动到枪杆的侧 面,右手轻轻一带,枪尖便朝另一侧刚刚冲过来的Richard Stallman冲了过去,后者一个“冲”字诀刚刚发了出来,见状马上一个驴打滚才堪堪避开,其状狼狈不堪。不过这二人也不相互埋怨,四目一个交会,立马 又一齐冲向了雷哥。

我站在雷哥后方的位置观察着战局,与白袍甘道夫相对而立。只见雷哥虽然以一敌二,却丝毫不落下风。原来“天下武功,唯快不破”,雷哥的武功全都领悟 自C/C++,后者本就在现代编程语言中堪称速度上的无双王者;再加上雷哥这人平时写程序对效率的追求极其苛刻,数据能放在栈里的就不放在堆里,如果带上 汇编优化的三元表达式比if语句更快那就绝不用后者,这种追求在他修炼了传说中的神功秘笈CSAPP后更是进入了一种化境。

反观他的两个对手,速度上明显已经输了一筹。

那雨果・维文的功夫显然来自Java——Java本是为兼容多种平台设计的“一次编译,处处运行”的编程语言,所以从中领悟的功夫自然也是老少咸 宜,即使身着西装革履,也一点不影响招式的发挥;但另一方面来讲,即使施招者穿运动服,也提升不了多少速度——它的速度只能是这么慢了。更重要的是,由于 Java这东西号称“完全面向对象”,所以雨果・维文的每一招——即使是一个“hello world”——都不得不先封装成一个对象,然后出招;这样的后果就是,由于每一招招式都封装了起来,招式与招式之间相互承接的部分就会显得相当生硬,唯 一的办法就是使用各种设计模式来补足——这些设计模式虽然圆滑了招式之间的承接,却进一步降低了其速度。再加上这位雨果・维文似乎对设计模式的掌握还不够 充分,在应付雷哥凌厉的出招时便显得左支右绌。

而那位模仿Richard Stallman装扮的仁兄招式被我观察了许久,才发现并非来自Emacs Lisp,而是Perl。因此他的一招一式都让人搞不明白他到底想干什么,但有时候突然之间那些像疯人跳舞的比划就变成了妙不可言的一击,这着实给雷哥造 成了几次险境。幸而这位Richard Stallman似乎经常稍后自己也理解不了自己的比划是什么意思了,有时前面刚刚一招逼得雷哥暴露出五六个破绽,下面他却忘了该用哪一招;更多时候干脆 比划着比划着,他自己就看不懂自己在比划什么了。幸而如此,即使险象环生,雷哥也能很快从防守之势夺回攻击的主动权,以一敌二而不落下风。

Continue reading

东坡风流

我过去曾听过一个关于晋朝的大名士谢安的故事:谢安的一个同乡来拜访他,谢安问他有没有回家的归资,同乡说只有五万蒲葵扇。谢安拿起其中一把用了起来,于是京师的各路人士都抢着买这种扇子,使得扇子的价格飙升了好几倍1

后来我读宋朝李廌的《师友谈记》2,又看到下面一则故事:

士大夫近年效东坡桶高檐短,名帽曰子瞻样。廌因言之。公笑曰:近扈从燕醴泉观,优人有相以自夸文章为戏者。一优曰:“吾之文章,汝辈不可及也。”众优曰:“何也?”曰:“汝不见吾头上子瞻乎?”上为解颜,顾公久之。

这则故事不禁使我想起了之前听到的那个谢安的故事,事实上林语堂先生的《苏东坡传》3里还讲了另外一则更加相似的故事:

苏东坡官任通判之时,做了些怪事。

有一个商人因债务受审。被告是一个年轻人,苏东坡让他说明他的苦况。

被告说:“我家开了一家扇子店。去年家父去世,留下了一些债务。今天春天天阴多雨,人都不买扇子,并不是我赖债不还。”

苏东坡停顿一下,眼睛一亮,计上心来。他一看笔砚在桌子上,忽觉技痒。

他对那年轻人说:“把你的扇子拿一捆来,我替你卖。”

那人回来,转眼拿来二十把素绢团扇。苏东坡拿起桌子上的笔,开始在扇子上写草书,画几棵冬日的枯树,瘦竹岩石。大约一个钟头的功夫,把二十把团扇画完,把扇子交给年轻人说:“拿去还帐吧。”

年轻人喜出望外,想不到有这么好运气,向太守老爷千恩万谢,然后抱着扇子出了官厅。外边早已传开太守大人画扇子卖。他刚走出衙门,好多人围起他来,争着拿一千个钱买他一把扇子,不几分钟,扇子卖光,来晚一步的,只有徒叹奈何了。

犹记得当时告诉我谢安那个故事的文章名字似乎叫做《谢安风流》,所以姑且这里以《东坡风流》为题,记一些前些时间读《师友谈记》与近来读《苏东坡传》时读到的一些趣事。

Continue reading

我的大学(32):古今

宋朝的黄庭坚曾经说过:“士大夫三日不读书,则义理不交于胸中,对镜觉面目可憎,向人亦语言无味。”鄙人远非古人士大夫之类,虽然长时间没读 书,仔细照照镜子也没发现自己更加面目可憎了(咦?我为什么要用“更加”?),但毕竟文笔是不利索了起来。这个博客隔了好久才终于出了上一篇文章,却是短 小无聊,索然无味。一方面是因为俗纷缭绕,以至于刚刚坐下来想要写点悠闲的文字,便有几个箩筐的罪恶感若天花般乱坠;一方面却是太久不读书,以至于腹笥实 在空乏得可怜。所谓文章天成,妙手得之,苟若吾胸无点墨之辈,只得效阮籍之哭,哀风飙道阻,叹舟楫路穷,然后让自己的文章效仿王勃的人一样中道崩殂,其实 却只是东施效颦罢了。

既然上一篇文章未得善终,不妨此处补述我的大学生涯二三事,以资叙事之完整。却说我暑期在学校门口的微软实习,混了三个月,却有幸得到自己的老板赏 识,出言挽留,但是忖度再三,虽然非常感谢我在微软的老板的赏识,但我还是决定了继续在交大读研。一方面是深感自己所学甚少,还是渴望能趁出山前再练会儿 内功;另一方面也是还并不明确自己将来到底会走上什么样的道路,学术界还是工业界,这是个问题。既然雾失楼台,敌情不明,所幸占一进可攻退可守之要地。当 然读研不是说读就读的,即使直升本院研究生还要有一套笔试机试加面试的筛选流程。虽然很久以前就对自己通过这个选拔挺有信心,但等真到了眼前却突然紧张了 起来,以至于整天和雷哥互相感叹好紧张啊怎么办,要挂了怎么办。当然后来毕竟还是成功了。哦对了,我选择的实验室,好像学名叫做Trusted Cloud

好,前尘已矣,接下来我们来说后事(为什么总觉得这句话怪怪的)。我早在《我的大学(23)》中就曾经写道:

当年我在烈阳下亲自迎来的小盆友如今也成了迎新的志愿者,于是又一批新面孔追着各种学哥学姐询问各种白痴问题:“选数学分析还是高等数学好啊?”“学生会和团委哪个好啊?”“应该加入什么社团啊?”

而前一段的某天突然发现某位实验室的师兄早在09年我入学之前就和我有过QQ聊天记录,经他翻看当时的聊天记录,我才发现原来我当初也问过“软院的 课程难不难啊”这种白痴问题。于是更进一步地回想自己当年大一时候的岁月,想起自己当年还一本正经地去参加各种社团和学生组织的面试就想发笑。实验室的另 一位现在研究生一年级的师兄,正在做大一的班主任,他说可以找回一些年轻的感觉——大概就是像那种一本正经地去参加各种社团的学生组织的面试一样的感觉 吧,我猜。

前一段偶然翻到一位软院学弟的日记,其中一篇记述了他们参加英特尔全国软件创新大赛并取得了一等奖的故事,这不禁让我回想起了一年多以前的自己的那 次出征。我曾经说过我要在过去将来时的某天记述帝都的那个秋天的那个蛋疼的故事,但似乎直到现在进行时我还没有把那篇游记补上。不凭借文字的记录,现在的 我还能记得在北京的那几天熬夜搞测试、写文档、改程序的情形,我还记得当时的深夜把疯癫的hyll(我们的队伍名)的笑点降到了无穷低,以至于还没人说笑 话四个人就忽然前仰后合地笑得不能自已,而雷哥在测试结束之后打算把测试文件拷到U盘上的时候打的是”rm -rf xxx”,还问了我一句:“是这样吧?”唉,我就不提再之后雷哥他老人家回去找自己的队友却忘了他们是谁的事情了。但最后当我们取得一等奖的时候感觉却相 当平淡。不像当初听说自己拿了NOIP一等奖之后那般满面春风,也不像发现自己成功保送到了交大的那天晚上激动得睡不着觉(唉,当初真是年轻而又愚蠢啊 = =),感觉只是平淡。

软件学院有一项传统的自娱自乐项目叫做软件展示会。大一参加的时候没有什么感觉(那天走得较早没看到后来成为软院镇院之宝的AEVIOU输入法的 演示),大二那年没举办,而大三刚刚从北京拿奖回来便把获奖的CubeWorld搬上了软件展示会。据后来参观此次软件展示会的董浩亮师兄所述,他看完以 后的感受是,相比此次软件展示会,他们以前的软件展示会都“弱爆了”。然而当时身处庐山的我,却也是同样感到自己的这届软件展示会“弱爆了”。

时隔一年,我再次跑来软件展示会打酱油,并得以见识到许多学弟学妹们开始登上软院的舞台展示他们的作品。身处当时软展的我却突然意识到,自己的心情 恐怕和当年的董浩亮极为相似。当初我们(呃……其实是雷哥)用OpenGL实现的CubeWorld的被人称炫的场景,相比今年那些学弟学妹们用 Unity开发的游戏,就好像拿凤姐和詹妮弗·康纳利比美。虽然仔细一想,那些作品可能也有很多不为人所知的缺点,某些东西也并不像我们所认为的那么炫或 高级。这种感觉的转换,盖当你审视自己的作品时,因为你深知它有怎样的缺点与不足,这些缺点与不足会在你脑海中留下挥之不去的阴影;而在你审视小盆友的作 品时,任何一处超越自己的地方都会让你感到惊艳。只是当这种心境反过来时,只怕就要有问题了。

我常常会感觉到,这个世界是如此颓废。但直到有一天,我到图书馆借书,发现有几个mm借了几本Python的教程走掉了。那一刻我意识到:嗯,这个世界,还是充满了生机啊。

跋:本来觉得这篇文章还是写得太烂了就不好意思发了,后来听了俞教主的鼓励:“想想我的流水文。”我就发了……

我的大学(31):The Dust Settles

When the dust has settled, 这个短语在Dictionary of Idioms中 的解释为:when the present uncertainty, unpleasantness, etc., is over。大四的前夕正是一段充满了uncertainty的时间,尤其是当你的身边集齐了想要出国、读研和工作的各类朋友,向你讲述各种这个方向上的牛 人事迹,即使你本来以为对自己的选择已经十分确信,也难免产生一些动摇。而when the dust has settled,在之前充满了uncertainty的变化就开始成为了人生每日的迭代当中一种新的常态。

如今我已经习惯了这样的常态:听俞教主比较各个公司的员工待遇,讲又有哪些人拿到了哪些公司的offer;听韩总吐槽所谓的IT业三大养老院,然后 再顺带黑一黑我们读研的;看雷哥每天在微博上装小清新和卖萌;而我一边应付乱七八糟的事情,一边听将要去香港成为Dr. Wang的带狗质疑我现在过的真的是大四吗;偶尔还会有别人吐槽几句,我竟然到现在还没有找到妹子。

上一周的时候,我本科生涯的最后一门第一专业的课程结束了。本来我想在这篇日志里写点东西,来回顾和总结一遍我前三年的本科生涯,但现在我又不想写 了。但如果真要写点什么,我想说,我对中国的大学满腹牢骚,但我不后悔我读了大学(但我也不是劝你读大学);如果还要写点什么,我想忏悔下自己的大学生涯 翘课太多,有些课程实在学不到东西与其上课不如睡觉,但并不是所有的课程皆是如此。

还是那句话,写博客这事,闲的时候没东西写,忙的时候没时间写,此事古难全。既然回顾和总结本科生涯的构思中道崩殂了,这篇日志好像只能这般戛然而止了。

使用Matrix67的数据挖掘方法为博客作用词分析

今天早上看到Matrix67的《互联网时代的社会语言学:基于SNS的文本数据挖掘》一文,如获至宝。我很久以前也做过人人网流行的日志中喜欢用哪些词的 实验,不过仅仅使用程序抓取网页和获取二字组合,然后还要依靠人工来筛选正确的词语,这种方法效果并不好,而且最后也没能得出什么非常有趣的结论;而 Matrix67这篇文章非常通俗地讲解了作者使用的中文抽词方法和热度分析方法,这些方法巧妙却不复杂,得到的效果还相当不错,使我不可救药地踏上了亲 自把它实现一遍的征程上。

首先我用Python实现了Matrix67的中文抽词方法,并把这种方法应用在自己博客的rss上,然后把抽取得到的词语按照出现频率排序,得到的结果如下:

什么,我们,自己,大学,东西,可以,没有,作业,我的大学,所以,如果,时间,因为,文章,那么,现在,其实,大作业,比如,知道,障碍,代码……

看起来效果非常不错,于是我又尝试了另外几位朋友的博客。首先是橘子的,结果如下:

面试,公司,然后,什么,最后,没有,开始,应该,时间,测试,题目,这样,项目,怎么,大家,我们,自己,香港,由于,可以,实习,其实……

以及sqybi童鞋的:

算法,没有,诚哥,言叶,世界,置换,页面,可以,网页,自己,内存,如果,已经,所以,列表,我们,之后,因为,什么,开始,那么,过程,页面置换……

(一开始看到“诚哥”这个词语我还以为是哪里抽词出错了,后来仔细看了下sqybi童鞋的博客发现原来这个真的是个词语……)

这段程序的源代码被我放在了gist的上面,有兴趣的同学可以猛击这里。 抽词的结果非常好,但是这个结果还是有些问题:一是直接访问博客的rss只能获取最近10篇左右的文章,样本太小,不能充分反映这个博客的特点;二是各个 博客得到的抽词结果中出现频率较高的一般都是像“可以”、“没有”、“什么”这类非常常用的词语,不同的博客之间的差异不能够鲜明地反应出来。解决前一个 问题的方法是使用Google Reader,在浏览器中输入”http://www.google.com/reader/atom/feed/http://www.liyaos.com/blog/feed?n=100″这种链接便可以获取一个博客最近的100篇文章(需要先登录Google Reader,这使得直接用程序访问变得有点麻烦,不过我直接采用了在浏览器打开这个页面然后保存到本地,再用程序读取),格式为Atom,和rss很 像,也都可以使用Python的feedparser来轻松解析。解决后一个问题,则是Matrix67的文章后半部分提到的贝叶斯方法。

于是我使用前面的程序分析了以下数个博客(排名不分先后,嗯 = =):

把以上博客分析的所有结果作为总的词语库,然后再对每个博客使用Matrix67的文章中给出的概率公式进行计算,然后把得到的词语按照其概率值从大到小排序。以上博客的词语前10名分别为:

优哉·幽斋

我的大学,寻欢,词语,诗音,一段,梦里醉逍遥,大哥,中国人,学期,障碍

(“我的大学”来自《我的大学》系列,“寻欢”、“诗音”和“大哥”来自《多情码农无情码》)

SQYBI.COM

赫萝,诚哥,言叶,你们,罗伦斯,方茴,安竹,季安竹,李暮霭,远子学姐

(……这些都是什么啊……)

伸手即到梦想

期末,接着,成都,排队,假期,实习,福州,香港,世博,一趟

(显然高富帅的生活很丰富啊 = =)

静观己心,厚积薄发

太太,奶奶,三奶奶,姑娘,丫头,未央,老太太,三太太,笑道,素馨

(……………………我快笑惨了)

非人磨墨墨磨人

一个,成为,冯至,拉里,袁枚,里尔克,毛姆,那样,文学,十四

(虽然不知道博主在说什么,但是看起来好厉害的样子)

学而时嘻之

学家,根本,能力,原子,经济学,际上,最好,我认为,科研,辐射

(这篇博客的文章里讲什么学家的都有……所以“学家”就被当作词了,看来是信息熵的阈值还不够大,不过我的实验样本也不够大所以把阈值调大效果不一定会更好……)

宇宙的心弦

原理,怪物,动量,定义,几何,力学,角动量,收益,量子,液氮

(一看就知道学什么的……)

考据癖

考据,起床,笑声,星期五,胡克,培根,说法,蚊子,发音,星座

(考据癖什么都考啊……)

嗯,这个结果相当有趣的吧。

PS:本来还想拿来韩寒、蒋方舟的博客分析一下,但是这两个家伙的新浪博客都不提供全文阅读,只好作罢。

我的大学(30):这年夏天

有道是“赤日炎炎似火烧,又是一年暑假到”。话说这日我正在公司里一边盯着屏幕一边拿两个指头敲代码,突然间斜刺里杀出一名彪汉,定睛一看,只 见他:身长八尺,腰大十围,河目海口,燕颔虎头。侧撇两道胡髭,翩翩有若陆小凤;横陈一双虎目,威风好似吕温侯。原来是DHL的快递大哥。只见他看了看我 座位号,又对了对我的名牌,然后叫着我的名字塞给了我一份快递,还没等我反应过来就一个闪身,消失不见了。空留我坐在那里拿着快递的包裹发着呆,直到自己 成功地从编程态切换到日常态,看着纸包上“清华大学”的印章,才反应过来原来是BYVoid的书送来了。

回想起来,当年我和BYVoid在河南省实验中学的逸夫楼机房(江湖上戏称为“逸夫网吧”的地方)里聊天的情景仿佛还在昨日,那时他听说我报了上海 交通大学的软件工程专业,对我说他听说软件工程专业遇到的编程问题和OI的完全不一样。那时的我还完全无法想象OI以外的一个编程世界,如今虽然仍然未能 窥得编程的宏伟世界之全象,却也已经有海阔天空的感觉了。当年我们还都是在OI界打拼的小P孩,如今我却坐在微软的办公楼里接收BYVoid送来的他自己 编著的书籍《Node.js开发指南》。

这本书我曾经在人人网上推荐过,在此不妨再推荐一次。在此书出版之前,我曾有幸成为了此书的审稿人之一,得以提前阅读了这部佳作。虽然BYVoid 同学写作这本书的时候才大二,这本书是他的处女作,然而此书语言上字斟句酌,又不失形象,讲解时深入浅出,理论扎实,结构严谨,所有例子中的程序也都堪称 优雅。一言以蔽之,质量上乘,不但在中国技术类书籍市场中鹤立鸡群,在全世界的同类书籍中也绝对称得上上乘之作。想要了解这只蛋请猛击这里,想要了解下蛋的鸡请猛击这里

好,花开两朵,各表一枝,如今且按下BYVoid童鞋之事不表。却说弹指之间几个月的时光飞逝而过,我才恍然发现自己的这学期竟然已经消失殆尽。而 自己这学期的书读得少得可怜。于是难免地写文章都写不利索,文思枯竭,以至于遣词造句时有若病恹恹的冬蛇,疲软且无力;想用典时却又好像丢了五色笔的江 淹,墨尽而词穷;偶尔想诌两句古诗拽一拽,也只是“欲说还休,欲说还休”,最后只好“却道天凉好个秋”。说书人有句常用语叫“有话则长,无话则短”,如果 我们从这句话的反方向来看,我这学期几乎没什么文字,在《我的大学》系列中的篇幅如此之短,是否说明这学期无话可说呢?

据说林语堂当年写《京华烟云》的时候,写到红玉之死时,曾取帕擦泪曰:“古今至文皆血泪所写成。今流泪,必至文也。”林语堂先生的这番话被广泛传 颂,但是窃以为……林语堂先生其实是没有搞清楚充分条件和必要条件,他的前半句只能表明“血泪”是写成“至文”的必要条件,而非充分条件,所以推理不成 立……所以,从前文“无话则短”的论述也是没有办法推出“短则无话”的。也就是说,(绕了这么半天,)我这学期可以吐槽的事情并不比恒河沙数要少;换一种 通俗的说法,这学期依然很蛋疼……

上回说到我一时头脑发热选了数字媒体与艺术方向,结果陷入了水深火热的渲染真实感世界的计算机图形学战争之中。于是这一学期学习下来的成果是,计算 机图形学课程让我从此再也不想碰OpenGL,游戏程序设计课程让我从此再也不想碰UDK,神奇的是,细数下来没让对什么工具感到恶心的竟然是数字图像处 理课程(因为除了Qt其实没用什么工具?)。数字图像处理这门课还是让我收获很大的,因为它极大地刷新了我的世界观,让我意识到原来对于一个老师来说上课 还可以这么轻松,讲课可以除了这门课程涉及到的重要算法什么都讲(比如花半节课时间讨论怎么检查作业),检查作业还可以临时空降场外人士来帮忙检查……不 过鉴于我猛然想起下学期还有这位老师的课,此处还是戛然而止,避免失言吧。

上回还说到我游走在上海,参加了几家公司的笔试和面试的事情。前面我也数次不小心地提到,我现在在微软实习。在接到微软的offer之前曾经面过腾 讯、eBay。回想起自己面试腾讯的时候因为是处女面(也许你不理解我上一篇《我的大学》中突然出现的神旺大酒店,嗯,现神旺大酒店就是腾讯面试的地 方),说话挺没逻辑的;到eBay面试的时候说话就显得游刃有余了。话说eBay面试我的第一个面试官一开始问了我不少Java的问题,结果我只回答出了 一个其他全是斩钉截铁地“不会”(不过我还会提到,比如说,如果这道题用C的话我就会了),然后面试官看着我的简历问我做过那么多项目都是用的什么语言, 于是我高兴地说C++啊,然后开始问我C++的问题我就开始心里暗爽了啊,这是在刷分啊;然后又问我做一个购物网站大致是什么流程,于是我又暗爽了啊,你 知不知道我每次学习一个Web框架的方法都是先自己实现个购物车的demo啊!后来第二个面试官上来的问题也让我心里暗爽,他让我比较Java和C++的 区别,这个我简直可以写一篇上万字的文章出来啊,让我再把C、Python、Ruby、Clojure什么的一堆东西扯进来来一锅大乱斗都没问题的,可惜 那时候没说多少面试官问了另一个问题结果我蛋疼地忘了接下去扯了……但这还不是最蛋疼的,最蛋疼的是面试快结束的时候面试官冷不丁问了一句:“面向对象的 三要素是什么?”然后我第一遍竟然答错了……那一刻我深深地觉得自己对不起软件学院……

后来我果断被腾讯和eBay默拒了,再后来去参加了微软的面试,微软的面试是让我觉得最对口味的面试,因为面试的大部分时间都用在现场写代码上,这 比许多空谈要实在多了。后来在某个周一的某门选修课上接了一个电话,得知拿到了微软的offer,尘埃落定。然而一周过去以后的那个周一的同一门选修课 上,我又接到了一个电话,通知我去Google面试。后来思考再三,尽管Google也是自己很想去的公司,但因为自己已经接受了微软的offer,还是 拒掉了这次面试。虽然这种事情在不正经的时候可以拿来当作吹嘘的资本,但我内心里是觉得挺可惜的,也对不住现在在Google实习的然师兄的推荐了。

现在我在微软实习了已经将近一个月了。话说微软这边的环境还真是好,平时休息区冰柜里有免费的饮料、牛奶、咖啡、茶和各种零食(甚至还有泡面!)不 说,每天某个时间段阿姨还会端上来一盘子水果。由于我的位子具有得天独厚的地理优势,几乎每次水果都不会落下来。在公司的每层还有一个专门的game room,里面有桌上足球、乒乓球、台球和XBox 360,以及三国杀和按摩椅,于是最近总是习惯下班后在公司食堂吃了晚饭再到game room玩上一会儿再回寝室。啊,难免感到生活还是很惬意的啊……

话说我觉得自己去微软实习真是一件很神奇的事情,因为我在这之前的一年我几乎都是在Linux下编程,已经很少使用Windows;我胡乱学习了许 多种编程语言,还有很多种编程语言虽然我不会但也能够扯上一堆话(也许可以写一篇《如何和别人讨论你不会的编程语言》了),却偏偏C#是我一点点点点都不 了解的;我碰过JSP,PHP,3P里却唯独没碰过ASP。幸好之前在学习不少别的语言和框架时的经验能帮上忙,虽然现在对C#和ASP.NET我还有很 多东西压根不认识,但一边google或msdn一边写程序还是比较轻松的(有多年程序经验的人都知道,写程序总会碰到各种各样无比蛋疼的问题,所以请务 必理解我这里“轻松”绝不是“轻轻松松”,或者“不蛋疼”之类的意思……)。顺便说一句,C#这门语言还是很有意思的,不过限于篇幅,和自己目前的理解都 十分有限,这里还是不过多讲述了。

有位哲人曾经说过:“生命不息,蛋疼不已。”在我的上一篇文章中描述的失于雾的楼台而今已然展现,只是前方还有许多未卜的道路,等待着一个个入刺辉煌的绳命走过。所以本篇的终结语还是脱不出说书人的智慧:“欲知后事如何,且听下回分解。”

我的大学(29):雾失楼台

秦观有一首《踏莎行》的词,它的开头前两句是:“雾失楼台,月迷津渡。”此二句所牵涉的文学技巧,由于本人在一个连汉语言文学二专都没有的学 校待了太久,已经搞不清楚该用哪些专有名词来赏析了,所以请有慧眼者自识之。秦观的这首词据说是在他遭逢贬谪之后所作(为什么在语文课本上出现过的诗词几 乎都能据说是贬谪之后所在 = =),这一背景似乎与我并无可堪共鸣之处,然而其中的迷茫的情绪却依然成功地穿越了时空,与我的脑电波发生了共振。

好吧,上面一段话似乎有装X之嫌。不过我相信比起看一个很久没写博客的家伙,在他新更新的日志中一上来就抱怨最近俗事缠身,不得清闲,或者吐槽自己 的学校跟学院,还是一段类似上面那段话的文字更像话一点(围观群众:你在一开头真的没有吐槽自己的学校吗?)。不过,迷茫之情却并非无病呻吟。因为人生就 好像《三国志12》里的战斗地图,密布了战争迷雾,你只能看到你周围一段距离的情景,而且智力越高看得越远(比比看诸葛亮和兀突骨的视野? = =);远方的楼台则深锁在重重迷雾间,只有当你到达附近的时候,才能看清楚,它上面的标志到底是上海环球金融中心,还是神旺大酒店。

曾经有学长告诉我们,大三下学期是最轻松的一学期,结果呢?我写着写着代码清明的三天假期就过去了。也许是我当初头脑发热选择了数字媒体与艺术这么 一个方向的缘故——这个方向简直是个巨坑啊!以计算机图形学为例,建模也就罢了,还要光照;光照也就罢了,还要材质;材质也就罢了,还要贴图;还要阴影, 还要倒影,还要粒子,还要流体;这也罢了,还有不少人不满足于OpenGL或者DX本身的光照模型,还要自己写shader,还要GPU编程……还有什么 HDR什么乱七八糟的名词。我能说其实这里面一些东西整出来的效果我根本就看不出区别吗?国外那帮搞3D游戏的人都是疯子吗?!

西晋的名将羊祜曾经说过:“软院大作业,恒十居七八。”(后来被误传做“人生不如意,恒十居七八。”)南宋诗人宋岳也曾经题诗,单赞软院大作业之事 说:“大作业事常八九,可以秒杀无二三。”(后来也被误传做“不如意事常八九,可与语人无二三。”)不过说实话,与其大学四年天天坐在电脑前看美剧养老, 我还是更愿意做上那么些大作业,即使它们没让我对这门课多多少理解,至少也让我对代码的理解和掌握深入了许多——尽管几乎所有的大作业检查都不看你的代 码。此外,尽管每个大作业都没有非常深入地探究过什么,至少它们让我把从CLI到Web到GUI,从应用到网络到编译器到操作系统,各式各样的程序都写上 了一遍或者几遍,我认为这也是非常有帮助的(话说,我这么一个经常吐槽软院的人突然写这么一段话会被当做卧底吗?)。只是某天在上科技史课,听钮老师讲开 普勒推算开普勒第一、第二定理的过程的时候,突然发现,自己很久没有像高中时候那样拿起笔来,十分入迷地推算一些公式,研究一些算法了。这让我这个高中时 代的数学课代表(虽然后来被老师撤了)突然间感到一阵失落,与十分遗憾。我希望有一天,能够恢复那些绞尽脑汁,去不断向某个问题发起挑战的岁月。

最近参加了几家公司的笔试和面试。游走在浮躁的上海,有时我会去比较现在的自己,与三年前那个刚刚踏入大学的自己。身高好像没长过,不过肉似乎是掉 过几斤;女朋友是一如既往地没有,倒是基友多了几个(说到这里恰好看到书架上李廌的《师友谈记》,这书要是搁到现代写绝对是叫《基友谈记》……)。当然最 主要的不同还是在对程序的理解上,大学前的我无法想象OI风格以外程序的存在,而今我已经可以侃侃而谈地比较(忽悠)面向对象的编程与函数式编程的区别, 也开始思考自己开发某些特定的工具来帮助自己写程序,我甚至还写过加起来已经有万把来字的文档……这些事实是三年前那个每天和同学一起感慨一遍“前途渺 茫”的我怎样也无法预知的,如今已成了眼前的楼台。

只是未知后事如何,且听下回分解。