Jul 25

FZU 一位cser && icpcer的文章,转载过来。一些感受,一份感动。

http://acm.fzu.edu.cn/phpBB/viewtopic.php?t=682

作者: cy

[连载]四年 (1)
今 天刚拿到Visa, 明天就离校了。本科四年学到了很多东西,也有一些遗憾,这里一起总结一下,希望对以后的小朋友能有些帮助。文中提到的内容,主要是针 对真心喜欢Computer Science并且没有打算马上就工作的同学。当然,这只是给大家一个参考,而且各人情况不同,大家不要一味模仿-_-
刚 进学校的时候就知道本科阶段是最后一个可以真正自己学习的时间了,因为以后即使读研究生,也必然要帮导师做事,时间安排和学习内容都会受到约束,至于工作 那就更不用说了。所以就打算在这四年里能把自己以前希望搞懂的领域至少都粗略的看一遍,这样以后不管做什么都不会有太大遗憾。现在想想,还是有很多遗憾 的,有些不该花时间的地方浪费了很多时间,有些该看的东西反而没看。这一方面是引导的问题,有些事情其实并不难,只要有人能在适当的时候点拨一句,往往结 果就会有很大不同;另一方面当然是自己还太naive,现在的小朋友都是大二就开始发paper的,差距啊……下面按近似时间顺序具体分析一下。
高 三暑假的时候刚好Knuth的The Art of Computer Programming出影印版,于是大一开学就开始看第一卷,相当的震撼,完全 没想到算法书可以写到这种高度和境界。这一看就是一年,终于把第一章看完了,习题做了大概60%……但就在这时候发现了传说中的 Concrete Mathematics,就是把Knuth第一章的内容写成一本书,讲解细致得多,很多原来不懂的习题技巧也放到正文部分来讲了,很适 合偶这种土人,但后来由于种种原因没有详细看下去,这是很大的遗憾,以后还是要找个时间好好读一下的。友情提醒, Concrete Mathematics介绍了大部分在计算机科学中广泛运用的数学知识,并且在概念的引入和表述上很有特色,特别适合学习,而 TAOCP则显得有点像习题集了……鉴于偶们大一的高数、物理、英语变态的简单,建议逃课看CMath -_-。如果逃课被抓住,偶的经验是不要理他,期 末好好考就行……
由于书选择错误,这一年能力没有太大提高,但至少开阔了眼界知道了什么样的结果才算是一流的结果,知道了所有看似深奥的内容其 实背后都一定有一个简单的想法在支撑着(否则别人也不可能想出来啊,脑袋都是肉长的嘛)。如果觉得一个问题很复杂,那一定是自己还没悟。这些认识对我后来 的学习是有很大帮助的,也算是误打误撞的一个收获吧。另外,当时网上很多人评价Knuth的文笔如何如何的好,没什么感觉,后来考完GRE,又看了几页顿 时跪拜,今后也要多多学习大牛的表达方式。寒假的时候顺便学了TeX,打算出国的同学还是要找个时间学一下这个的,以后写paper比较方便,大概一周左 右时间就够了。顺便做个广告,如果会TeX,以后写毕业论文用偶的TeX模版,就可以不用花时间排版了,偶们学校的论文格式实在是很变态啊啊啊啊……
大 一暑假的时候辅导中学生参加信息学竞赛,碰到一个高三学生,给了我很大启发。为了避免泄露网友资料,具体事件略去……但这件事给我的影响就是让我意识到没 有什么事情是不能尝试的。不赌一把怎么会知道结果,只要这个赌注自己承担的起,就值得试一试。这也更加坚定了我出国和逃课的决心。偶这里一直强调逃课的重 要性是因为,偶觉得学生的主要任务是学习,而不是上课。我们有权利自己选择合适的学习方式。最烦的就是上课点名了,一点技术含量都没有-_-

[连载]四年 (2)
接下来讨论一下计算机的一些专业课。下面的内容都是我认为应该学习的东西,而不是老师画出来的那些所谓的重点。如果只是为了应付考试,考前看两三天足够了。当然,这些介绍肯定是很片面的,但至少比天天去上课好-_-
大 二的时候开始上硬件的课,数逻、组成、体系结构。因为之前没有接触过这方面的东西,学的时候一直很迷茫,以为这个只有做硬件的人才用得到。直到最近才有点 悟了,其实这些课对编程还是很重要的(不过模电对偶们有啥用处,偶就不知道了……),但是重要的东西并不是他课上教的那些东西-_- 这个偏差源于出发点 不同。现行的教材都偏重于如何设计一个特定功能的硬件,但程序员需要关心的是给定一个硬件的实现,如何高效的利用他的特性来写程序。虽然学通了,这两个观 点本质上没什么区别,但对于初学者,如果没有意识到这点,就很难产生兴趣深入的学下去,也不知道应该往那方面学。为了说明偶的观点,举个很简单的例子。 for (i=0;i 至于理论计算科学,我们系是分散在几个不同的课里面的。首先是离散数学,偶觉得这个应该学至少三个学期。第一个学期学集合论与 数理逻辑,推荐沈恩绍的《集论与逻辑》,很有前途的一本书,如果对这方面有兴趣,可以继续学Type Theory, Model Theory……最后 可以去欧洲做Programming Language或者Automatic Theorem Proving之类的(PL在北美很萧条,好像除了 Rice就没其他学校做了)。第二个学期学群论和组合数学,这部分在CMath里面基本上都介绍了,可以再补充一些群论的东西。群论用在密码学、图论中, 往往可以达到意想不到效果,因此还是要好好学的。并且数学这东西现在如果不学好,以后就更没机会弥补了。第三个学期学图论……感觉数学领域里面只要带上 “论”就立刻变得toooooo hard了……图论、数论、群论,偶没一个学得好的-_- Anyway,这个教材有很多,王树禾的就很不错,数学猛的 可以看Bollobas的Modern Graph Theory。图论的技巧性很高,因此不容易学,但每解决掉一题,满足感也很高。目前 spectral graph很流行,不过看这个线代要很牛(线代如果牛了,做量子计算也很方便了)。然后就是数据结构,我们系这门课还是很有特色的,看 我们自己的教材就行。可以顺便参考一下Introduction to Algorithm和Algorithm Design。这两本书的侧重点不同, CLRS直接讲解算法思想,便于教学,内容涵盖面比较广,习题也都很经典。Algorithm Design是去年刚出的新书,侧重于讲解这些算法是怎么 思考得到的,经常是从一个很容易想到的但是错误的approach出发,逐步修正,得到正确的算法,并且由于是去年才出的,例题都很新颖, reference也给的比较全面。最后是复杂度理论和自动机理论。自动机我们系是放在编译原理里面介绍的,但由于是编译的教材,对这方面的介绍力度就小 了一些。复杂度理论本来可以放在数据结构课上说的,但可能考虑到大家编程实践的负担已经比较大了,就跳过。但是如果要考Sub,这部分是必考的,因此还是 要找个时间自学一下。这方面经典的书很多了,并且写书的都是大牛,Wood、Ullman、Hopcraft都有写过。最后还要提一下CMU有一门给大一 开的课叫Great Theoretical Ideas in Computer Science,内容很有启发性,ppt做的也pp,强烈建议看一 看。
剩下的课基本上都是应用性的课程,如果前面的基础打得好,学起来就比较轻松了。
操作系统,这个还是很重要的,如果没学清楚,写出 来程序就跟那些外系的没什么区别了。编程水平高虽然不意味着就一定能做出好的成果。但是如果不会编程,那你数学必须相当的彪悍才行,比如像姚先生那样,他 貌似就只会很简单的Pascal……OS好的教材有很多,随便到网上搜一下就行。不过我们的课本那是罕见的差,跟看政治书没啥区别了。这部分建议看基于 Linux的教材,它比Windows的介绍的会更深入一些,碰到问题至少还有源代码可以查。学操作系统关键还是实践,虽然不可能实现整个操作系统,但是 写一写自己感兴趣的部分还是有可能的,其他的部分至少要搞清楚为什么会提出这些概念,它可以解决哪些问题。有兴趣的同学可以自己写一个能处理 Restricted Function的Online Judge,这样对调试进程、系统调用的理解就很深刻了。这里再做下广告,目前网上的 Online Judge虽然很多,但是能像偶们的Judge这样支持Restricted Function Call的还是很少的,挖哈哈。
网 络,这个就是很Engineering的学科了,看书好像没什么用。其实Engineering的东西,书上基本都是提一些框架性的东西或者标准之类的, 当做字典用就可以了,这里面关键是弄清楚这些设计是怎么提出来的,能解决哪些问题,具体的协议内容并不重要。从实用的角度来说,偶认为至少要掌握 Socket编程和协议栈,有兴趣深入的,可以写一写P2P,ad-hoc network之类的应用程序,相信会很有收获的。网络是一个很大应用背景, 在这个基础上可以做很多的应用,在理论方面也有很多诸如路由、安全性问题没有解决,因此在前几年是非常热门的。不过偶导师告诉偶,在US,Network 的PhD已经过剩了,并且funding也不够充足。我想这个是学科发展一个必经阶段,从历史上看每一个很有前途的学科出现的时候,往往都会有很多人加入 进来,使得在短期内这个学科过渡饱和,然后随着学科逐渐走向成熟,那些投机的人自然会离开,从而形成一个稳定的供需关系。所以,如果你真的喜欢 network,我觉得可以不用理会这些负面的消息。
人工智能。偶一直觉得从算法设计或者ICPC的角度来学搜索算法是学不好的,只有在人工智 能当中,从状态空间的角度来学搜索,才能对它有比较深刻的认识。另外,一些软计算方法,诸如遗传算法、神经网络的程序也要写一下,貌似现在很多本科生都会 这个了。不过,偶觉得做这个方向不太踏实。软计算方法每几年就会提出的一种新的,然后原来的方法就瞬间没人关心了。最后导致的结果就是每次出了一个新的方 法,大家就把以前的问题update一下,做一个试验结果就是一篇新的paper了。这样好像很没意思。当然,要是能证明它们的收敛性那还是很牛的。人工 智能里面还有一些很有前途的分支,比如数据挖掘、机器学习等,这几年也比较热门,偶比较感兴趣的是这个跟 massive data manipulation的结合,貌似目前结果还不多。
最后说一下软件工程……我个人是强烈鄙视软件工程的那套理 论,特别是他的什么开发模型。我相信合作可以提高效率,但绝对不相信一个真正有价值的程序可以有十几甚至更多的人在那种变态模型下合作完成。Knuth在 写TeX时候完全就是一个人,虽然写了10年。但他曾经试图让他的学生去写程序,最后发现花在沟通上的时间远大于他自己写程序的时间。这个是完全可以理解 的,每个人都有自己的背景、风格,软件工程的变态模型就是希望所有的coder都能够去除个性,靠读那些很规范的文档来交流,像机器一样写程序。这个也太 没有人权了吧。这样做也许在表面上可以提高效率,但他忽略了coder的创造性,是资源的严重浪费也是对人才的不尊重。至于软件工程剩下的那些什么风险评 估、系统集成,那是地球人都知道的东西,需要他再建立一个学科来讨论么-_-想想开源软件的例子,就应该知道这个什么开发模型完全没有意义。这个是偶长期 以来一贯坚持的观点,欢迎有不同意见的同学讨论。

Jul 25

两张来自acmicpc@bbs.sjtu的照片,放在这里,以此共勉。

这个世界的舞台很大,虽然我们不是最闪耀的,但我们却可以去努力打拼自己的未来,追逐自己的梦想。

Beyond the dream……


注释:
sjtu acmicpc四年前选拔赛笔试的一道题
问N条线段最多可以将平面分割成多少个区域
这图是AlexanderYi的手工枚举版
任何时候都不要放弃希望。
注释:这是AlexanderYi这几年做过的icpc题目。
因为努力,才能变得更强。

Jul 15

又忙乎了小半年,停下来,喝口水,说说。

说是忙乎,是因为确实挺忙乎的,还稍微有点点累。

三月多份开始准备5T,背单词,做题,练听力成了生活的主旋律。最后在几门考试夹杂的中间匆匆考完了5T,然后不是很意外的拿到了一个很烂的分数。

中间偶尔也会碰碰ICPC,看了些有意思的东西。topcoder也通宵做过几次,就是比较累。

因为准备5T,这学期的课大概翘掉了99%。课时少的,小学分的,都还能突击个差不多的成绩。大学分的专业课,就没什么投机的机会了,分数烂也在情理之中。再加上众所周知的特殊原因,我的分数似乎就更没有了什么竞争力。

越来越发现Java是个好东西。还有面向对象是需要自己体会的。图形学,编译原理,都很有意思。我的网络,还需要找个机会重新改造一下。微机原理,我一直对这门课程的设置持怀疑态度。

除了prof.huohw,似乎对其他大多数老师我已经没什么印象了。事实上,大学这三年,上了这么多课,对于很多教授,副教授,我只能说从道德的角度,对师长表示尊敬;但对于认可他们是个好老师,我持保留意见。不过,很多年轻教师的表现还是足够让人眼前一亮的。

自己,其实还算充实的过着自己的日子,虽然中间不断会有这样那样的一些遗憾,但从来没想过后悔。

lrm 已经是第二次去baidu final了,也依旧坚持着自己的路;xiahong也去sjtu找机会了;chengmingming去了很多人神往的 msra,估计rank1st的年纪成绩,再加上icpc的一个rank19th,微软嵌入式rank3rd,去thu也不是什么大问题了; xiatian也有cmcm,mcm的成绩保底了,积极的联系着导师;……

看看自己,很菜的水平+icpc Honorable Mention,还有一个鸡肋的本科成绩。

期末那阵子挺累的,其实倒也不是因为看书的原因,更多的是在想自己一年后的出路,用个大点的名词就是“前途”。

g/t 的路子是希望不大了,时间太紧,10g应该来不及了,更何况这中间还有很多其他事情。8t,更多的只是想证明一下;或者留条路子,因为说起机会,总是很难 放的下。对于出国,目的很明确,就是想在一个好的环境中,研究自己感兴趣的东西,再然后体验一下不同的文化,俗话说:读万卷书,行万里路。最后回来,做自 己的事业。然而事实上,我一直对自己的原始动机问题、以及一些矛盾,都深表怀疑。

外推,应该是最现实的了。感兴趣的方向是有了,学校,导师也看个差不多了,但看看上面,估计很大程度就只能拼rp了,不知道我的rp如何,hoho~

继续呆在xdu?算了吧,一是一个地方呆久了,恐怕会钝化;二是就目前的情况来看,这里的环境未来能究竟能给我提供多大的空间?

工作?不是没考虑过,还考虑过这个暑假去实习。但其实跟我最初的想法并不吻合。

机会。看着眼前的机会,总是会在这个、那个之间左右权衡,然后捡起一个;亦或者很贪婪的统统都抱起来;拿起来之后,即使发现不多,或者除了问题,该放弃的时候,却又总是不舍得、没有勇气放下。

辗转、踌躇之后,总要是下些决定的。

继 续ICPC,是因为这是大学里最能够让我充满激情的一个词。记得以前,没有转而选择其他之类更能够获奖的竞赛,进而为自己的保研之类能够多一个砝码,而选 择继续ICPC,是因为不想让自己陷于功利,就是想踏踏实实干点事情,学点东西,亦或者单纯就是想证明自己。现在,我已经能够在ICPC里面找到足够多的 乐趣,也找到了自己的方式。虽然水平还是很菜 ,但只要你跟我一提起ICPC,我总是会热血沸腾的,因为我曾在这里真切的投入过。恩,我还想最后体验一次on site的感觉,还有,我想在XDU的ICPC里留点属于我的脚印。^^

外推,应该是眼前最重要的事情了,希望自己的“菜鸟水平”可以得到认可,可以让我有机会在一个好的环境里继续做我感兴趣的事情^^

8T,起码得考个算是中国人考的分数吧,hoho~

Zidane以一个男人的方式结束了自己的世界杯,结束了自己的职业生涯,结束了一个时代。
而我,希望在最后能够用自己的方式为这四年的生活画上一个属于我的句号。

Jul 10

夜,

西安,

实验室,

一个人,

等球,

短信,

很安静……

“孤独的人他们想象鲜花一样美丽”
“一朵骄傲的心风中飞舞跌落人们脚下”

Jul 10

新的历史被写入了,历史没有被重写,因为历史是不能被改写的。

骗点球 场外的意大利媒体 骗红牌 联赛造假
丑陋的意大利 你还有什么?

伟大的齐达内,伟大的男人,走好……

《天下没有不散的筵席》·郑钧

我曾经以为生命还很漫长  也曾经以为你还和以前一样  其实我错了一切全都变了

就在你转眼的一瞬间一瞬间 我听见你说

天下没有不散的筵席 一切全都全都会失去 天下没有不散的筵席你的眼泪欢笑全都会失去

所以我们不要哭泣 所以我们不要回忆过去 所以我们不要在意所以我们不要埋怨自己

总盼着和你能有个好结局  可惜我力不足我的心有余如果我哭了也许是我老了

因为我变得很脆弱很脆弱害怕听你说天下没有不散的筵席  一切全都全都会失去

天下没有不散的筵席  你的眼泪欢笑全都会失去

所以我们不要哭泣 所以我们不要回忆过去  所以我们不要在意  所以我们不要埋怨自己