2007/8

访谈:谈计算机专业的学习

 

“如果说我看得比别人更远,那是因为我站在巨人的肩上。”

——艾萨克·牛顿
写这篇文章的时候,一年一度的Kernel Summit就要在英国剑桥举行了。中国具体有多少人去参加我不清楚,但据我了解,非常少。这说明两个问题:一是,开源在中国做得还不够,仍然有很长的路要走;二是,国内关心计算机核心技术的人太少了。

而现在,在金钱和就业压力的驱动下,大学校园里到处充斥着“考证”、“培训”、“外包”,越来越少的人能真正地关心计算机科学了,越来越少的人能专心地为开源去奉献自己的力量,越来越少的人能下决心去攻克中国目前最薄弱核心计算机技术:操作系统内核,编译器,数据库等等。科学在慢慢消失,艺术在渐渐褪色……这让我感到非常担心。

那么,如何才能真正学好计算机科学与技术?在大学四年中究竟应该学一些什么知识?这是我们共同关心的问题。我就这些问题对西邮计算机系的几位校友进行了专访,他们如今都是知名IT公司的程序员。让我们一起来听一下他们自己的经验和建议,以及他们对计算机科学,开放源代码,和在西邮应该怎么学好这个专业的一些看法。希望这会对你们有帮助!

(注意:这篇文章不仅仅是写给计算机系新生的,计算机系其他学生同样受用。)

三篇访谈如下:

1. Interview with Zheng Ye

2. Interview with Zh Lin

3. Interview with Kang Hua

感谢以上三位的耐心解答!

拿什么拯救你,我的系统

经过了几天的准备,今天终于正式开始装FC7了。

备份也懒得刻光盘了,直接cp到另一块硬盘(hdb)的/home中。拷贝过程中发现,原来自己的用户目录中有很多冗余的文件。过了很久终于复制完毕,然后就复制一些重要的隐藏文件,比如:muttrc,bashrc,vimrc等等,小心翼翼地备份了全部文件。接着就弄FC7的iso文件。第一次从硬盘安装,没什么经验,照网上说的去做。其实也没什么,就是把内核用的两个文件提取出来,在grub里添加它们的路径。grub把它们加载后就准备安装了,安装时选从硬盘,然后找到iso所在目录即可。

可到我这里就出问题了,本来放到hda的iso居然找不到。只好移动到hdb上,重启。这次很好,进入安装界面,重新格式化分区,然后软件包也选好了,可开始安装时又出问题了!提示说根分区不够!根分区分小了……被迫重启,可是,hda上的系统因为格式化全没了,当然也包括grub和那两个安装文件!hdb在这时候也开起了玩笑,Linux引导不了了,只能进BSD,而BSD又挂不上Linux的分区!就要绝望的时候,想起一个主意,在hda上先装个临时的Linux,把FC7安装程序引导起来就行了。因为手头上只有FC3,所以只好装它了。

安装FC3时又出问题了,提示内核bug,说是因为hdb引起的……无语,拔了hdb的电源线接着装……过了半个小时,安装完毕,重启后还是进不了!一到grub那里就重启……又用此安装盘急救修复,还是不行,因为grub-install用不上……实在不行了,向刘洋兄求助,借他的Ubuntu安装盘用。

晚饭拿到光盘后,回来接着装。用Ubuntu的LiveCD,进去后直接用grub,把hdb的MBR一覆盖,果然就好了。先进入hdb上的Linux,提取文件,在其grub中添加FC7安装程序的引导,重启就好了!剩下安装就很顺利了。安装完体验了一把FC7,很爽!!输入法也不用设置,直接用scim,ff也不错,pidgin也很好用,FC5上xmms的最小化bug也没了!hdb上的东西都健在,只要cp回来就可以了。

天哪!终于把我的系统拯救回来了!

西施回来了

今天在小吃街看到西施了!她终于又回来了!

激动万分……西施的到来使我们对西邮小吃街又有了信心,对构建河蟹小吃街必将起重要的作用!

Slab, Slob, Slub

Linux内核真是变化太快了,内存管理这块就是一个好例子。

本来Linux内核只有Slab的,现在好了,Slab多了两个兄弟:Slob和Slub。瞧!这就是内核的命名风格,让你光看名字就糊涂了!这也是我这两天读内核源代码的深刻体会,什么cache啊,cache_cache啊,free_area啊,绕不晕你才怪呢~!

以前搞不懂这三个到底什么关系,为什么要有这三个 。今天搜了一下,明白了一些。简单的说:Slab是基础,是最早从Sun OS那引进的;Slub是在Slab上进行的改进,在大型机上表现出色(不知道在普通PC上如何),据说还被IA-64作为默认;而Slob是针对小型系统设计的,当然了,主要是嵌入式。相关文章如下:

Anatomy of the Linux slab allocator
The SLUB allocator
The SLOB allocator

这也正好体现了一个Linux内核开发一贯的思想:提供一种机制,而不是一种策略(Provide mechanism not policy)。其它软件开发又何尝不是如此呢?

更新了一下博客

加了一个“友情链接”页面,因为这个主题自带的是默认隐藏,而且还是随机显示,不爽。时间仓促,难免有遗漏。如果你给我做了链接而这里没有,请及时留言指出。希望交换链接的也可以留言。

提示:链接我的网站时请指向首页,而不要仅仅是这个博客,谢谢!

还添加了一个Image Counter,看看到底有多少潜水的人。

BTW:最近换了个手机,发短信很不方便,恕不及时回你的短信。有事请直接打电话。等手机换回去再说。

看了《科幻大师》前两集

貌似上一篇文章中说错了,应该只出来了两集,第三集没找到。

我把这两集看完了,简单说一下感受。

每一集的开头都有这么一句:“很久以来,我们都在探寻生命是如何开始的,生存的目的是什么,我们又将去往何方……”,配的动画也不错,感觉很爽。

第一集是讲一位女心理医生帮助失忆的总统恢复记忆。背景是在世界核战过后,仅存的八百多人都躲在地下掩体中。而导致这一切的就是那位总统!他下了错误的决定,从而引发核战。感觉这集不错,情节人物都可以。片尾提出一个值得深思的问题:“当多数人的命运掌握在少数人手中时,掌权者的失职能被原谅吗?”

第二集感觉就不怎么样了,说实话,有点儿假。故事大体是说外星文明突然降临地球,警告战争中的人类,并威胁如不停止战争就要占领地球。故事有点儿老套不说,里面的细节也有些 假,比如,外星人能够迅速找出美国部署的全部核弹发射井并使之失灵。(不过里面的女中尉很漂亮的说~~)

这两集给我们传达了同样的信息——停止战争吧,愚蠢的人类!记得一篇文章中说过,人类的道德比人类的科技落后了几千年!我非常同意。记住:人类在近两千年的历史中,全世界彻底没有战争和冲突的时间总共只有五十八天。

Masters of Science Fiction

说来惭愧,好久没有在SF分类中发表文章了。今天得发一篇了。

最近出了一部Masters of Science Fiction,是abc根据一些科幻短篇故事改编,每一集都讲述着一个完全不同的科幻故事。据说还是霍金解说。第一季暂时只预定了六集,现在前三集已经放出。下面是一些相关链接:

官方网站:http://www.mastersofscifi.com/site/
abc链接:http://abc.go.com/specials/mastersofscifi.html
tv.com链接:http://www.tv.com/masters-of-science-fiction/show/58459/summary.html
imdb链接:http://www.imdb.com/title/tt0772139/

有兴趣的可以BT下来看看。

备份

我怀疑是不是用Linux时间长了人都会变懒,起码我是。

记得以前还有Window$的时候(两年多以前了),备份挺勤快,因为那时候貌似隔三岔五就要重装一次系统。现在好了,用上Linux了,那么的稳定,不升级系统的话三四年都不用重装一次!也因此养成了一个懒惰的毛病——硬盘里的东西不再备份了!

今天终于下定决心要备份了!一是为了保护硬盘里的数据,二是准备升级FC5到FC7。

先整理光盘,把以前刻的,买的,骗来的光盘都拿了出来。哎,本以为应该很多,可一看也不多了,送出去了若干,被骗走了若干……

仔细一看,里面的光盘大体上分三类。一部分是Window$上的盗版软件(再次感叹中国盗版业如此发达!),有VB,VC,Office,优化大师等等,现在我是用不到了,准备送人。(有需要的人可以留言,免费赠送!

另一部分是买计算机书或者杂志送的光盘,大多数都是看一遍就完的,送出去不少,就留了几张值得再看的。哎,又回想起美好的旧时光啊~!想当年我们高中那会儿,最爱看的就是《电脑爱好者》,《电脑报》和《网友世界》。第一个一般是傻乐同学买,每次带到学校都被哄抢,在班中后面N个男生中传阅;第二个一般是阿元同学买,我也就经常屁颠屁颠地从教学楼这头跑到那头去他们班借这来看,然后再在我们班被哄抢……最后一个一般是我和别人买。哎,那时候为了买这杂志,经常是从饭钱里抠啊!不过这杂志做的光盘是相当好,我现在还留了两张呢。瞧,那时我们多么年轻~~!

剩下的就是我以前勤快时的备份了,最早的可以追述到04年!最多的还是从网上下的电子书,杂七杂八啊;其次应该是歌曲,里面最多的恐怕是刘若英的歌和MV了;还有一些就是Linux上的常用软件。

还有个把张就是系统安装盘,不是Window$,是Linux!哈哈,这下我可以倚老卖老了!想当年,我用的Linux那还是Red Hat 7.2(Fedora Core还没出世呢),就记得中文显示很差,基本上全是??;KDE经常崩溃,比现在的Window$错误报告还多。再看看现在的Linux,那个炫啊,那个好啊,那个稳定啊!现在的娃们真有福!再次感叹Linux发展太快了!

对了,整理过程中还有个意外收获——居然发现了两张没用过的光盘!窃喜中……干脆直接把/home下的所有东西复制过去,反正空光盘那么多~~嘿嘿!

再谈Quicksort和Binary Search

众所周知,Quicksort是大牛C.A.R. Hoare于1962年发明的(wikipedia上说是1960,但paper上写的是1962),当时他那篇paper现在可以免费下载了。短短12页(其实是11页,而且每页利用率不高)就把quick sort分析得详详细细,头头是道了。其实这个算法只不过是这位牛人职业生涯中最琐碎的贡献,他的主要贡献还是Algol60。那个时候可是牛人辈出的年代,Ken Thompson牛当年可是用汇编写操作系统和编译器的,搁到现在连想都不敢想啊!偶滴神啊!咳咳,不好意思,跑题了……

现在,凡是一本和“数据结构” 或者“算法”靠边的书就必然会提到Quicksort,很多还给出自己的实现。无奈,绝大多数代码都很丑陋(如果不能说非常丑陋的话)。好不容易,我在BWK的牛著《The Practice of Programming》中找到了一个简洁的实现。请欣赏:

接下来我们谈谈Binary Search。1946年,第一个Binary Search算法出现;1962年,第一个“正确”的Binary Search算法出现,最前面十八个都错了。1986年,Jon Bentley在课堂上和《Programming Pearls》这本书中,说明了这么简单的演算法(1962版)可以犯下多少的bug。2006年,书中那个大众引用的程式被抓到integer overflow bug。这个bug是出在这个该死的语句上:

int mid =(low + high) / 2;

您看出哪里错来了么?其实是low+high超出int表示的正数范围时就会变成负数,这时mid也跟着错了,而后面用mid取数组元素自然也不对了。修补就很简单了:

int mid = low + ((high - low) / 2);

下面是《Practice of Programming》中的Binary Search,不那么通用,而且也存在上面说的bug!把它修改成通用(模仿一下标准C库函数bsearch(3))而且bug-free的代码就留给您作为课后作业了。

BTW:这里有篇小文章,分析了为什么90%的程序员写不出bug-free的binary search。里面确实道出了很多程序员的无奈,用某牛的话说就是我们只能证明bug的存在,而不能证明其不存在,代码越多越是如此!

公子啊,公子~!

“你以为你躲起来就找不到你了吗?没有用的!你是那样拉风的男人,不管在什么地方,就好像漆黑中的萤火虫一样,那样的鲜明,那样的出众。你那忧郁的眼神,稀嘘的胡喳子,神乎其技的刀法,还有那杯Dry Martine,都深深地迷住了我。 ”

——《国产零零漆 》

公子,男,其名时雨行(hang)

烘培鸡 :http://www.shiyuhang.org/

爱好:闷骚

优点:闷骚

缺点:闷骚

信奉格言:失去信仰,法律就失去了灵魂。(或:法律如果不被信仰,就等于形同虚设。)

自我宣言: 时雨行(xing),我看行!(应公子强烈要求,加此注释:感谢王聪同学帮我想了这么帅呆酷毙的广告词!感谢人民!感谢党!)

曾用网名:acstar,西游民,大低调,半壶酒,时雨 (to be continued…)

公子语录:

1. 北大就是把学校建到火星上我也去!

(点评:您就是火星人啊,您不去北大招谁去?)

2. 我爱北京未名湖,未名湖上太阳升。

(点评:原来未明湖就是公子眼中的天安门啊!)

3. 是爷们就去未名湖泡脚。

(点评:王聪版:是爷们就去未名湖泡妞,另一个版本是:是爷们就去未名湖泡茶,还有:是爷们就去未名湖泡酒。点评的点评:人家未名湖招你们惹你们了?!

4. 黄沙百战穿金甲,不破北大终不还!

(点评:我们明儿给您老定做一套黄金甲!)