找回密码
 FreeOZ用户注册
查看: 3364|回复: 20
打印 上一主题 下一主题

[其他] 弱弱的问一下,大家对“王垠”怎么看?

[复制链接]
跳转到指定楼层
1#
发表于 10-7-2008 23:12:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
我觉得他的水平还是很高的。。:)
要向他学习了。。
回复  

使用道具 举报

2#
 楼主| 发表于 11-7-2008 17:47:27 | 只看该作者
顶上来。
就是那个退学去美国的计算机博士生啊。。
回复  

使用道具 举报

3#
 楼主| 发表于 11-7-2008 17:47:38 | 只看该作者
清华大学的。。
回复  

使用道具 举报

4#
发表于 12-7-2008 10:35:03 | 只看该作者
是个不太成熟的年轻人,很聪明,因为一篇到处被转帖的《完全在Linux下工作》而出名,后从清华退学。


个人觉得,他是个有个性有才华的年轻人,但是观点因为个人视野的原因略失偏颇。不是一个好的学习对象,LZ还是不要学习他了

评分

参与人数 1威望 +30 收起 理由
kingsking + 30 觉得他说了一些真话,如在科研方面的欺骗。 ...

查看全部评分

回复  

使用道具 举报

5#
发表于 13-7-2008 02:17:01 | 只看该作者
有才,可惜国内的科研环境容不下这种才子。

评分

参与人数 1威望 +30 收起 理由
kingsking + 30 谢谢分享!

查看全部评分

回复  

使用道具 举报

6#
 楼主| 发表于 14-7-2008 16:51:19 | 只看该作者
原帖由 coredump 于 12-7-2008 07:35 发表
是个不太成熟的年轻人,很聪明,因为一篇到处被转帖的《完全在Linux下工作》而出名,后从清华退学。


个人觉得,他是个有个性有才华的年轻人,但是观点因为个人视野的原因略失偏颇。不是一个好的学习对象,LZ还是 ...



国内的科研有时以“论文数”来论英雄。
即使这样的论文在实际中全无价值。。

另外,他揭示了“学术腐败”,实际上这种腐败是很严重的。。


正如我在投资界看到的一样,每个行业都有自己的黑幕,
基金业有基金黑幕,学术界也有类似的黑幕,

我想IT界也应该有。。
所以我觉得王垠是一个有勇气和独立思考的人。。:)
回复  

使用道具 举报

7#
发表于 14-7-2008 16:57:53 | 只看该作者

回复 #6 kingsking 的帖子

全世界的科研届都是以“论文”来论英雄,不过欧美的科研届偏重论文质量。

国内的科研届比较浮躁,这也是整个社会风气造成的,一些科研资金申请就是学霸们的分钱盛会,没办法,短期内看不到改变的趋势。
回复  

使用道具 举报

8#
发表于 14-7-2008 17:14:17 | 只看该作者

回复 #6 kingsking 的帖子

---所以我觉得王垠是一个有勇气和独立思考的人----
   同意,是个好孩子。出国对他来说要少痛苦许多。
   国内的腐败这个东西早就是遍及各个领域了,学术腐败,读”新语丝“就行了,他只不过是个第一次看到皇帝新装的又一个单纯的孩子而已。
回复  

使用道具 举报

9#
 楼主| 发表于 14-7-2008 18:49:35 | 只看该作者
LS说得有道理。。


第二个问题。linux为什么比window稳定如此得多。

windowS好像永远没有安全。。

反病毒软件居然如此脆弱。
是因为软件公司太黑。(即明知是不安全的,却口口声声说是最安全的。。的隐瞒主义?)
还是因为技术本来就是没有绝对的安全?
回复  

使用道具 举报

10#
发表于 14-7-2008 19:07:03 | 只看该作者

回复 #9 kingsking 的帖子

那是因为windows的管理员没有学好策略,如果管理员配置好的话,那也是稳定且安全的。而且安全这个词很泛泛。从病毒角度讲,攻击windows的病毒太多了,因为病毒编写者大多是个人用户,使用windows有关吧,个人使用linux的很少,一般都是公司用linux或是unix,所以有组织的黑客,大概都在攻击linux和unix,说不定能打开银行的金库呢

当linux支持个人用户开始,就离安全渐行渐远的,如果开发支持多媒体技术等等很快也会变得不稳定。

什么操作系统都不是绝对安全的,windows还年轻,和unix系统比差二十多年呢。如果要安全,大概打孔纸袋是最安全的。服务器一般放在那里就安全,如果用户把它当成个人电脑,折腾来折腾去的,而且用root用户登陆玩弄,嘿嘿,说不定不如windows
回复  

使用道具 举报

11#
发表于 14-7-2008 21:31:50 | 只看该作者
不认识……没听说过……
回复  

使用道具 举报

12#
 楼主| 发表于 14-7-2008 23:22:42 | 只看该作者
原帖由 maaboo 于 14-7-2008 18:31 发表
不认识……没听说过……



他还是很厉害的。
回复  

使用道具 举报

13#
 楼主| 发表于 14-7-2008 23:29:35 | 只看该作者
清华梦的粉碎—写给清华大学的退学申请



www.hn.xinhuanet.com   2005-09-26 15:21:01   作者:任意键  来源:  
        

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

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

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

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

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

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

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

    失之交臂

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

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

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

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

    我们是考试前填的志愿,我根本不考虑其他学校就只填了清华。后来妈妈研究了一下,帮我添了一个天津大学在第二志愿。以下的志愿全部空白。大家觉得我真够大胆,可是我的心理状态让我发挥完全失常,比清华的最低分数线还差两分。特别是语文,才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 的论文,发现程序里面其实已经改进了论文的核心内容。我深深体会到实践的重要性,也许有了他的论文我反而会被误导,写不出实际可以运行的程序。

     

     

    谢谢您的阅读, 您是本文第 1895 个阅览者 关闭窗口

     

    第1条回复: 参与讨论 推荐

    作者:任意键 于 2005-09-24 21:37:00.0 发表  来自: 发送短消息

     

    由于我们的团结努力,老师对我们的大作业非常满意,他给了我们最高的分数 100。由于我们两个都在课下超额完成作业,所以总的分数我们两个都是满分。这是我阔别已久的100分。只有在小学我才拿到过这种分数啊!对于一个对考试成绩满不在乎的人,100 又意味着什么?如果是别的课程我会毫不在乎,就像我得了80分一样。可是这个100分是我们团结研究而来的,它包含了对我们的合作意识,对我们的友谊,对我们的热情的肯定。虽然我觉得我们的东西还有改进的余地,但是我接受这个100分!也只有这样的课程,我才可能得100分。

    从此我感觉到了什么叫做研究。这跟我小时候干的那些事情没有什么两样。你在身边发现一个问题,想知道为什么。然后你就想去获得解决这个问题的知识。你去看书,你去问专家,你上网去搜索。如果没有发现答案,那么好啦,你就可以自己试图去发现为什么,这是最有趣的部分。知道了为什么,就想让这个东西有用处,对人们的生活产生好处。这就是研究。

    《完全用Linux工作》与TeX的推广

    这么说来我还是对清华有些好感。遇到一个好老师让我从呆头呆脑的技术工人的状态恢复过来,开始追求自己的梦想。可是第一年把所有的课程上完之后,我就发现原来清华所谓的“研究”是如此混沌。其实清华大部分人进行的所谓的“研究”是什么呢?其实就是写作,不是科学研究。这一点以后我会详细叙述。

    远远看去外观华丽的有着先进的工作站的实验室,却没有可以安心看书的地方。机器挨着机器人挨着人,书都没地方放。师兄师姐们都在忙着用word写论文,不时有两个人隔着几行机器大声谈话。实验室通风不好,还有一个大型工作站在嗡嗡作响,我进去一会儿就觉得头晕,所以后来就不想去了。PC机以前都是公用的,每次都会用不同的机器,却没有我想用的软件,麻烦死了。好不容易实验室买了新机器分配给个人,装上一个 Linux 系统开始写程序,还在Sun工作站上安装了多达1G的GNU程序。却被一个师兄嘲笑说那种跟DOS一样落后的东西你居然也用。于是我写了一篇文章叫做《完全用Linux工作》,放在主页上驳斥这种观点,引起网上linux界轩然大波。后来我又发现几乎全校的论文都是word排版的,我本科毕业论文就用LaTeX了,清华居然这么土!我对word排版的论文质量恨之入骨,所以又写了文章宣传 TeX,打击 word 在论文排版的市场。这下子我出名了,真没想到,出名不是因为我的研究成果,而是因为这些业余的东西。我起初其实不希望我因此出名,但是看到旁边的人都用上了 TeX,我觉得我还是做了一件好事,至少让论文看起来漂亮了一些。

    可是论文的内容,却是我永远的痛!

    培养计划

    我在第一年就把功课全部上完了。本来我想多选几门课,比如法语,可是清华的博士要选课需要提交一个“培养计划”给导师签字。导师同意之后才能修改。导师看到我选了法语,就说这个第二外语还是自己学学就行了吧,旁听也行啊,我主要是怕你课太多了考试不通过就麻烦了。我当时没有说什么,就把法语去掉了,只留下刚够学分的课程。其实我还想选很多的,体育,音乐什么的,都不好意思跟导师说。后来才知道宿舍对门的硕士生选了钢琴课他们导师都不管。为什么我们就受到如此待遇?

    可是没有把法语加到培养计划却成了我的遗憾。有一个新学期我去旁听了第一节法语课之后老师就说,我知道很多同学是来旁听的,这样教室里人太多了,效果不好。这对自己对大家都不好,下次请旁听的同学不要来了。我脸皮薄,下次就没有去了。后来自己想自学却又没有老师教,看了十集Reflet之后就此作罢。

    后来我终于明白了,清华不需要全面发展的博士生,而其实导师还会在某种程度上削弱学生的能力。导师并不是真的为我们好,而是不喜欢我们上课,因为上课不但会花掉研究(或者干活)的时间,而且让他们眼界太开阔,这样学生会很容易有别的选择而走掉。所有的活动:助教,实习,都必须有导师签字。而大部分导师就会找借口不让学生干这些事情。不给他们助教和实习的机会,让他们以后不好找工作,只能为自己服务,或者为自己的熟人服务。甚至这次我去西藏,要办边境证都要有导师签字。办事的老师说,没有导师签字,你跑出去了不回来怎么办?大妈,我跑那种鬼地方干吗?

    除了这些,还有两***宝就是博士学位和违约金。清华的博士学位有多值钱知道吗?不知道?那么博士退学要交30000块钱的违约金,这下大部分穷苦学生怕了吧。这就是你们的卖身契。清华就是这样把研究生牢牢地控制在自己的掌握之下。我对一个如此害怕学生跑掉的不自信的学校还能说些什么?如果你是好样的,就不会害怕我们跑掉!该跑掉的最后终究会跑掉。

    我的自我培养

    在学习上,我永远是个吃不饱的人。选不了课,我就去旁听。旁听后觉得老师讲的不好,我就自学。在我有空的时候,我就会去图书馆借书看。在我本科的时候,我就已经发现自己的一个特点,我会很快发现新的东西,并且学会使用它。虽然这些东西并不是创新,但是它们丰富了我的技能,让我有更大的能力去进行创新。

    计算几何课的一次作业,我为了写一个算法的演示程序,花了3天时间学了一点Java语言,正好能够完成那个程序。我开始接触到TeX的底层细节,看完了The TeXbook,并且找出一道练习题答案的错误。开始移植gbkfonts程序,作为我的CWEB语言的练习。看完了几乎所有 Xlib 的手册,深入了解了 XWindow 的工作原理。我接触到 Scheme,并且做完了 SICP 的大部分习题。我领会到 LISP 的强大,改变了我们多年以来对这种古老语言的误解。接着我又学会了 Common LISP,并且开始用它设计用来研究计算几何的一个函数库。另外还找了一些希奇古怪的程序来玩,写了一些心得体会放在网上给别人看。

    我意识到自己数学还不够强,就开始看一些数学方面的书。Concrete Mathemtatics, What is Mathematics?, Science and Hypothesis, GEB, ... 虽然每一本都没有看完,但是我逐渐相信自己的数学能力,发现数学原来如此简单。我开始对哲学感兴趣……

    我们也有讨论,原来是这个样子

    上完课,就该开始搞研究啦。可是研究什么呢?老师给我几篇论文看,意思是让我看看有没有什么想法。

    我开始感觉没有头绪,就跟导师说能不能找师兄师姐跟我讨论讨论,还有别的人在做这个吗?他说,就你一个人做这个,每个人做一个题目,独立思考,这就是研究。我觉得是啊,我应该独立思考。可是过了一段时间发现不行啊,我想实现一个想法,但是我不知道是不是已经有人试过失败了。实验的时间开销会比较多,所以我想知道那么多厉害的人,为什么都不用这种明摆在那的方法?当我再次提出需要讨论的时候,他似乎有点生气的说:”你为什么总是想有人跟你做一样的东西啊?你不是想抄袭别人的论文吧?” 我不发话了。继续做我的实验,结果确实不理想。虽然自己实践很重要,可是要是能利用别人的经验,何乐而不为呢?这并不是偷懒。如果有人讨论,很多时候一个人提出一个问题,另外的人就会告诉他这个问题是不是有人做过,有什么重要性,凭直觉告诉他有什么难度。可是如果没有讨论,连问问“有没有人做过”的机会都没有!

    后来我就经常上网看看国外的大学怎么搞研究,发现他们都有 seminar,讨论组。后来又买了一本 A Beautiful Mind,看到Princeton以前的天才们每天都在一个地方喝茶,讨论问题,争得面红耳赤,回家分头思考,做实验,第二天喝茶时再讨论。那就是我从小梦寐以求的生活啊!计算几何课已经让我爱上了与人合作和讨论的方式,现在却孤零零一个人了。我必须告诉导师,合作和讨论是非常重要的。在我据理陈述之后,他说:“好吧。反正师兄师姐各自有自己的事,你要讨论什么就跟我和你副导师讨论吧。” 于是我就开始了跟他们两个星期一次的见面讨论。每次讨论都感觉他们不知道我在说什么,他们心里想的都只是这个能比别人的好多少呢?能不能投到这个会议呢?如此宏观。我觉得跟他们讨论完全是浪费时间。

    后来课题逐渐有了新的同学加入,导师决定跟中科院数学所的人一起申请一个项目来研究。于是我们两个星期一次去中科院讨论。不过感觉他们那边也差不多。中科院的老师觉得他们的研究太理论,期望我们能给他们带去一点实际的东西。可是我们也没有什么实际的东西,所有的问题都是从别人的paper里看到的。副导师就开始跟他们说这个问题有多么多么重要…… 他们也借此机会开始研究以前放下的一些问题。总之讨论的感觉就是没有目的,没有主题。有时有人说他在想一个什么问题,说了一会儿就被否决了。有时候就是一个人看了一篇paper之后做一个感想。我坐在那里就在想,我们到底在干什么?我们甚至都不知道什么东西值得研究,还研究什么?后来师弟师妹们就开始考虑把问题变一变,看看能不能产生新的问题。他们的做法照我的话说就是“有问题也要解决;没有问题,制造问题也要解决!”

    博士生论坛的时候,同学们都觉得有类似的问题,讨论不足,交流不足。所以我提议成立一个类似国外大学的 Common Room,用来讨论问题。可是大部分老师说:“这样一个房间,天天都要有那么多人在里面待着。谁来出这个钱?” 是啊,老师自己的办公室都要钱,哪里可能有什么 Common Room?就算有了 Common Room,在里面讨论的无非还是文章发到哪里的问题。制度决定了行为,我的设想太理想化了。

    分析一下,为什么老师不提倡讨论呢?因为问题是有限的。老师辛辛苦苦这么多年搞来搞去都在搞这些问题,分配给你们每人一个,互不冲突。要是两个人都搞一个问题,这下好了。出了成果论文归谁?学校要求必须第一作者才算论文数。要是两个人都写论文,那么投到同一个会议肯定有一个要被reject。这样对集体发展不利嘛,大家不就是发几篇论文混毕业吗?何苦?

    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美元的版面费。导师出钱,不投白不投,投了好毕业呵!

    现在我也被“分配”来做这个问题。虽然说是一个有名的问题,但是这个有名的问题已经被研究了好几十年了。有很多牛人做出了很重要的贡献,这里面不乏 D.Z.Du 之类的传奇人物。但是我们为什么研究这个问题?我至今没有搞懂。

    开头导师只是给了我两篇paper,据说是以前他一个得意门生写的,美国某大学的副教授。其中有一篇说是如何在不构造 Delaunay triangulation的情况下生成 MST (最小生成树)。看到这篇文章开头说在 rectilinear metric下, Delaunay triangulation 就不能用来构造 MST 了,所以他设计了一个新的算法。这个算法比起 Leo Guibas 的算法更加简单。文章里还提到一次 Matroid,让初出茅庐的我觉得高深莫测。可是我对“Delaunay triangulation 不能用来构造 RMST” 这个说法产生了怀疑。经过理论分析我觉得即使在 rectilinear metric下,Delaunay triangulation 也可以用来构造 MST 的,我决定实践我的想法,写一个程序从Delaunay triangulation 构造出一个 RMST。这本身不是什么创新的工作,可是我却在想,这样一个东西能不能用来构造 Steiner tree 呢?后来我真的就想出一个办法。实验表明我的算法比以前的算法要快几倍。

    这是不是说我的算法是一个值得写paper的东西呢?导师说我应该写一篇,但是我认为我只是在挑别人的毛病时意外想出了一个改进的算法,并不会对将来的研究有什么改进。虽然程序快了一些,但是很少有那么大的线网需要这么快的算法,而且几倍的提高在我眼里不算是一个理论上的改进。所以我内心觉得这个结果不令我兴奋,不想写论文。但是在老师的一再要求下,我居然把这个研究写成了两篇paper。按照他的说法:“应该分阶段总结你的成果。” 起初投出去的时候评委总是说这个东西不实用,导师说这是评委的问题,他们觉得不实用我们就投到理论一点的会议。经过几次投稿,还是失败了。我终于忍不住了,对导师说出我的想法,我说:“看一个作家的水平,是看他扔在垃圾筐里的纸。就让我把这篇paper永远藏在我的垃圾筐里吧。” 但是他不甘心,说你要相信自己的实力,然后把我的算法胡乱夸奖了一番。我说我不管了,随便你怎么办。我就开始研究我自己喜欢的东西去了。之后他居然真的投中一个欧洲的会议,还是被 LNCS 收录的,LNCS 是 SCI 索引的,所以我居然有了一篇 SCI 文章!我自己不喜欢的文章也是 SCI 了!

    第二篇论文就更传奇了。几投不中,就其原因,评委说是没有和现在最先进的算法程序实验比较。而我没有比较的程序,就是那个让我鄙视的人的程序。没办法,求他给我代码,只给 binary,也不给源代码。比了一下,确实比他快。不过我估计他程序写的有毛病,老是 core dump。不过还是记录下数据,添到论文上。一投就中,得了一个最佳论文奖。然后就有一篇校内新闻宣传:“我校王垠同学获得XXX会议最佳论文奖。这是大陆学者首次在如此高级别的会议上获得如此高的奖项。” 这个“高级别”的会议,在我看来就是个垃圾。美国人都把最差的论文投到这里,就是为了来旅游一圈而已。

    我见过的这种低级别的会议,低质量的论文几乎都是从 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点,我在东主楼导师的办公室里跟导师和副导师再次重申了我的想法。包括以上的一切,和我退学的打算。导师经过一番举例爱因斯坦,居里夫人,叫我踏踏实实的说教无效之后,严厉的批评了我只顾自己,不顾及教研组为我付出的心血。然后说:“要是你不能再为实验室作研究,我们就不能支持你了。前两个月实验室发的钱我收回,你如果决定可以马上写退学申请。我们实验室没有什么损失,我们有的是人干你的事情。不过我要警告你,你一旦退学,连学校的住宿都要被收回!”

    接着是副导师尖声的咆哮:“是啊,你瞧不起我们。我们是没有你聪明,可是我们勤勤恳恳……你知道你得的那个best paper award,我们付出了多少努力吗?你认为这么容易拿到吗?那是多少国外专家鉴定……”

    真像是一场闹剧,一场梦。他平息下来之后,我说了一声“再见”,然后默默地走出了办公室。

    你们要退学申请?这就是我的退学申请。

    尾声

    晚上收到副导师的email说:“还有一件事需要向你说一下:你在学校学习期间所取得的成绩包含你的努力、导师的指导帮助、同学们的帮助,还有学校和国家的支持。你作为博士生学习阶段取得的成果属于教研组、学校和国家。正如同我们作为职务发明的专利属于学校一样。

    你在MST、SMT等方面取得了结果,它属于教研组、学校和国家。单位有责任进行合理的应用,为国家建设、国家荣誉服务。有责任进行进一步的整理丰富、向高水平的刊物投送。这里我们想说明一下上述的情况,同时,也告诉你一下:你若愿意将这些成果进行进一步的整理、我们已经给你提出了具体的修改意见,欢迎你按照进行修改。你若放弃,我们将进行具体的改进、投递。我们将尊重你的意见。谢谢。”

    最后还是没有忘了paper的剩余价值。进一步验证了我的判断,他们在乎我吗?不。他们只在乎paper。至于我流离失所,又有何相干?我不知道有多少无知的弟弟妹妹又会把他们的研究建立在我不屑一顾的paper之上。
回复  

使用道具 举报

14#
 楼主| 发表于 14-7-2008 23:30:06 | 只看该作者
Linux
由 allblue 于 2004, 二月 24 - 22:44 提交。
我已经半年没有使用 Windows 的方式工作了。Linux 高效的完成了我所有的工作。

GNU/Linux 不是每个人都想用的。如果你只需要处理一般的事务,打游戏,那么你
不需要了解下面这些了。

我不是一个狂热的自由软件份子,虽然我很喜欢自由软件。这篇文章也不是用来推
行自由软件运动的,虽然我觉得自由软件运动是非常好的。

这篇文章也不是用来比较 Linux 和 Windows 内核效率,文件系统,网络服务的。
我现在是作为一个用户而不是一个开发者来说话的,我们的讨论是基于操作,应用
层面的。是为了告诉大学里还不了解,或者不理解 UNIX 的科学工作者和大学生,
UNIX 比 Windows 更适合用于科学研究工作,请大家理解 UNIX 的工作方式,不要
用 Windows 的标准来要求 Linux,而要用一个科学工作者的标准来要求自己,用
UNIX 的思想来武装自己。我显然是反对在大学,特别是理工科专业推广 Windows 的。我也反对在对“娃娃”
们的计算机启蒙教育中使用 Windows。因为 Windows 不论从技术上,经济上,思想
风格上都是与我们培养高科技人才的目标格格不入的。Windows 的流行属于历史遗
留问题,爷爷一级的人当然已经不可救药,但是我们不应该让下一代继续走上歧途。

UNIX 不是计算机专家的专利

当我建议一些非计算机专业的人用 Linux 的时候,很多人说:“UNIX 是计算机系
的人用的,我们不能理解。” “UNIX 是男孩用的,我们女孩不用。”

但是其实世界上的大多数科学家和工程师几乎用的都是 UNIX 作为他们的电脑工具。
就因为它简单,可靠,稳定,强大,有趣。甚至很多时候 UNIX 就是唯一的选择。

你说:“我们都会用 UNIX 的话,你们计算机专业的人还用来干什么?” 很容幸的
告诉你,计算机专业的有一部分人就是专门为你们提供这样强大而方便的计算机工
具的。如果他们制造的工具只有自己会用的话,那这个工具还有什么用?

理解 GNU/Linux 不要用 Windows 的标准来要求 Linux。

由于GNU/Linux这个词太长,下面如果没有特别指明,“Linux”就是指“GNU/Linux”。

在这个年代,恐怕没有人需要我来介绍 Linux 是什么了吧?如果你觉得“Linux 只
不过是跟 DOS 差不多的东西”,那请问问你旁边的 Linux 用户,Linux 到底是什么?

那为什么我还要写一篇这样的文章?因为,我发现还有很多人不不理解 Linux 和
UNIX,虽然他们也在用它,但是他们有时会问:“为什么 Linux 不能像 Windows 那
样 ……?”,“怎么Redhat Linux不能 mount NTFS 分区!”,“Linux 下用什么
整理硬盘?”,“什么时候OpenOffice才能完全兼容Word文件啊?”,“现在还有什
么Windows能干的事情Linux干不了的?”……

他们有40G的硬盘,却只为 Linux 分配了2G空间,有时还抱怨“这个东西怎么占这么
多硬盘!” 似乎 Windows 该占用大部分硬盘。他们把重要的数据装在Windows的分
区,似乎信不过Linux。他们总是到处寻找新奇的,好看的GUI程序,对命令行的东西
一概不屑一顾。他们对Drag&Drop,菜单配置,自动升级非常感兴趣。他们如果找到
一个很像 Windows 程序的 Linux 程序,一定会很高兴的说:“哈哈!Linux 也能……了!”
如果Linux在某种测试中胜过Windows,他们会高兴得跳起来。他们没有办法用Linux
解决问题的时候,甚至用Wine来运行Windows程序。有时实在没办法,只好重起到
Windows,或者干脆省得麻烦,在 Windows 下装一个 VMWare 虚拟一个 Linux 玩。

你如果出现了上面的情况,说明你的思想受到了 Windows 的某种潜移默化的影响和
误导。你没有能够从本质上理解存在于 Linux 身上的 UNIX 思想。你支持 Linux,
你喜欢 Linux,你能从中感觉到快乐,这非常好。你现在只需要明白的是:Linux 从
来就不是一个玩具,它是天才UNIX的后代。UNIX 是自晶体管发明以来最伟大的发明,
它从诞生那一天开始就比 Windows 的设计出色。

你要体会什么叫做“设计”,一个糟糕的设计并不是到后来缝缝补补就可以变好的,
而一个出色的设计,不但可以以不变应万变,而且可以影响到后来者。一个出色的设
计配上一个出色的实现,那就是非常出色的发明。Linux 就是这样的一个出色的发明。
Linux 并不需要追赶 Windows,也不需要打垮微软。它的最终目标是改变整个计算机
世界,还人们自由,给人们乐趣和方便。

Unix 是简单的,你不需要成为一个天才也能理解这种简单。

UNIX的设计者 Dennis Ritchie 说:“Unix is simple. It just takes a genius
to understand its simplicity.” 但是我不这么认为,因为我不是一个天才,但是
我却勇敢的把 Windows 完全删除掉,遇到不明白的事情的时候努力用 UNIX 的方式
去解决,而不是寻求 Windows 的帮助。现在我体会到了 UNIX 的思想和好处,我可
以用比 Windows 高效几倍的效率工作。因为我相信这样的信念:“Windows 能办到
的事 Linux 一定能办到,而且办的更好。”

这小节开头的话应该改成:“Unix 是简单的,你不需要成为一个天才或是计算机专
家。但是在这个冲斥着 Windows 错误观念的世界,你需要信念和勇气才能理解它的
简单。” 我下面就告诉你一些我理解到的东西。首先,你要知道的是微软在国际科
学领域是根本没有地位的。

微软的地位

微软的名声在欧洲和美国的大学里,特别是在计算机系里之坏,大家可能有所耳闻。
我认识的 MIT,Stanford 的教授,贝尔实验室的专家,甚至一个欧洲小国的高中计
算机老师都绝口不提微软的名字。在他们眼里,微软只是一个没有真技术,专靠在落
后国家商业宣传和垄断经营的小公司。这个“小”并不是说它人少,钱少,而是说它
先进技术少。

我上次和王益合作写了一个算法演示程序,那个算法是贝尔实验室一位科学家Steven
Fortune很天才的发明,为了程序能够被身边大多数人使用,我们选择了 VC+MFC 作为
平台。我在分析算法时还得到 Fortune 很热情的鼓励,寄给我一份资料,还多次回信
耐心的给我讲解了很多细节。但是程序完成之后,我把样品发给 Fortune,他回信说:
“对不起。我机器上没有 MFC。” 话说的很客气,但是我已经感觉到了他对 Windows
的不屑。然后我把 MFC 静态编译进程序再发给他,他就没有再回信了。他显然不是瞧
不起我,而是确实有难处。

你能感觉到这位科学家对微软和 Windows 是什么态度了吧?不是反感,而是他心里根
本没有 Windows 这个东西!微软在高科技领域没有发展,那么它怎么生存呢?到发展
中国家去发展一下,他们的人民还对电脑一无所知,我说不定甚至可以打入大学的计
算机系呢。我送他们软件,我捐钱盖大楼,我出钱找图灵奖获得者来演讲,让他们觉
得我们都是科学家!

好了,现在全国的大学包括清华,几乎所有人机器必装盗版 Win2000,Office XP,学
校的选课系统是非IE不能正确浏览,论文用 Word 编辑,演示用ppt做,email 的通知
附件是 doc 文件,你不用 Word 打不开,连 863 项目都用 VC 写程序了。我很久以
前就看到一份报纸说,“微软为什么不严厉打击盗版?” 这篇文章说,微软非但不打
击中国的盗版行为,而且有放任之趋势。放长线吊大鱼,“以后我要你们加倍的来还
我!” 确实如此,它的目的快实现了。

Windows 笼罩下的中国计算机教育

说句丢脸的话,比尔盖茨很久以前是我的偶像…… //blush

在中国,比尔盖茨被很多人奉为神圣,“少年电脑天才”,甚至有的人提到他的名字
就做出“抱拳对天”的姿势。很多人谈到微软的“新技术”,“高科技” 都是眉飞色
舞。各种“VC编程圣经”,“深入了解 Visual C++”之类的书,在开头几页都会出现
非常肉麻的字眼,“在那团团的混沌中,一个开天辟地的精灵,Windows 1.0,诞生了……”

微软的软件被这么多人盗用,那么人们是怎样使用这些盗版程序的呢?先看看电脑培
训班,教的都是一些 DOS 命令,打字,Windows 基本操作,Word 文档处理,Power
Point,高级班可能有 Excel,Access…… 参加各种微软认证考试,MCSE,MSDE 的人
络绎不绝。考试辅导班都贴出了“280元,考过为止”之类的字样。考试参考资料更是
昂贵,有些电脑书店整整两书架都是“Microsoft Press”的东西。我有个同学参加认
证考试,每门考试都要200多元。而且你一次考不过可以再考,又要交钱。他后来还津
津乐道跟我说,看我,花了XXXX(一个四位数)元考过了微软认证,得到一张比尔盖茨
亲笔签名的证书和价值6000元的 Windows XP 内部发行版。

“电脑要从娃娃抓起”,我们再来看看娃娃们学的是什么。大部分家长给孩子买了电
脑之后,他们首先就会装一个盗版的 Windows,然后买来盗版的游戏开始玩。如果哪
个孩子会用 Delphi 编程序,那可不得了。报社记者,电视台争相报导,说,某某学
校的初中生某某,在别人都还在玩电脑游戏这种“初级阶段”的时候就已经用 Delphi
写程序了。镜头还瞄准了他显示器上面的像框中的比尔盖茨头像!

我刚进入大学计算机系时还不懂得什么是操作系统,因为我以前只用过“中华学习机”。
看到新入学的同学们各个谈论的都是 “Windows 95”,“VC”…… 我简直觉得我落
后了好几十年一样,整个一土人,根本跟他们答不上话。好不容易找到一个比较熟的
同学问了一下:“你们天天谈论的瘟95是什么啊?”答:“win95就是一个操作系统,
跟DOS是一类。”“朵死是什么?” “你连DOS都不知道是什么?别在计算机系混了。”
学校上课当然不讲VC编程之类的东西,但是上 Pascal 的老师有一次就说:“嗨,我
们学校真是落后。现在别人都用 C, C++,甚至 VC 了,我们还在讲 Pascal。不知道
什么时候才能有VC课啊。你们出去也是要用VC的,只好自学了。” 于是,有些同学很
多时候上课都捧着一本很重的“Windows 编程大全”之类的书,根本没有听课。吃饭
时就念念有词的跟我说,“代码的优化是无止境的”,“匈牙利命名法真是伟大的发
明” …… 这就是中国很多大学计算机系的情况。

感觉到无知了?这不是偶然的,而是微软长久以来埋下的伏笔。它要让无知的大家都
把它奉为神圣,它要让支持UNIX,Xwindow的人一旦说 UNIX 好,Xwindow 好的时候,
都被一群人围着说教:“这个 Windows 也能做到”,“你对 Windows 有偏见”,
“微软才是主流啊”,“你敢瞧不起 win2k?”,“.NET 就是世界潮流”,“微软的
毕竟是新技术”,“有钱就是有技术”…… 甚至在一番论战比较后败下来还是要说:
“Windows 性能差点,但是易用性强”,“Windows 是老百姓用的,要求别那么高”,
“微软那么有钱,以后想超过 UNIX 还不容易吗?”……

发达国家的计算机教育

我前段时间在 USENET 发文问有关 Scheme 语言的问题时,认识了一位丹麦人。他解
决了我所有的问题,并且建议我阅读一些很“深奥”的有关程序语言语法,文法的书,
他告诉我很多网站可以学习 LISP,Scheme,人工智能,算法。他叫我看 Jonathan
Rees 的论文 "Syntactic Closures"。他还打包给我寄过来一份 MIT 的 "How to
Design Programs"。他说他在自己的 PC 机上装的是 Linux,他用 Emacs 编辑,运行
Scheme 程序。他对 Emacs 的了解和爱好真是使人惊讶。他大学本科毕业时做的毕业
设计是一个 Scheme 解释器。这对于我来说是望尘末及了。

他是那么的不厌其烦,我的每一个问题他都详细的回答。我有时都觉得过于详细了,
怎么这么耐心啊?我觉得他似乎是我的高中老师。他是什么样的人呢?我好奇的打听
了他的情况。原来,他是丹麦一所普通高中的计算机老师。

他说他在高中里讲授程序设计和算法,计算机语言文法。他说用 Scheme,他的学生不
用再为内存泄漏等程序语言本身的问题而烦恼,而专注于问题和算法本身。有利于培
养学生解决问题的能力,特别是用计算机解决数学问题的能力。

天哪!为什么欧洲出现那么多数学家,几何学家?你看看别人重视的是什么!我们的
计算机教育如果继续这样下去,只会沿着弯路越走越远!

微软和它的朋友们的如意算盘

下面来看看微软的收入是怎么来的。首先,Windows 98系列操作系统,一个就是 100
多美元,每次升级又是几乎同样的价钱。Windows NT 还要贵几倍,而且有用户数目限
制,5个用户的,10个用户的…… 以后如果要增加用户数目还要按比例付钱。

花了如此多钱买来的操作系统就能用了吗?它竟然连压缩程序都没有提供!你装上
Windows 之后一般第一件事就是去下载一个 WinZip 吧,“只要 29 美元”。Windows
会中病毒啊,马上花 70 美元买一个 Norton AntiVirus 吧。还有黑客呢?再买一个
Norton Internet Security 好了,100 美元。系统需要优化,磁盘需要整理,买一个
Norton System Works 是你最佳的解决方案,100美元。

可是你现在还是不能干正事啊!你想要一个 Word, PowerPoint?那就买一套 Office
XP 吧,一起买便宜些,$459.90。

那些程序不会用啊!那些菜单怎么设置,到底有什么功能啊?看“帮助”也学不会。
买本书看看吧,我推荐“Special Edition Using Microsoft Office XP”,不贵,
$27.99。这本书里面大部分是屏幕抓图,还是买一本旧的比较划算,$17.85。

你如果只是当个秘书,上面的差不多还凑合了。可是你有更高的追求,你想成为 Windows
程序员。首先买一个 Visual Studio.NET 吧,要不然怎么编译程序。$494.95。

为了紧跟微软动向,世界潮流,不能不注册个 MSDN 什么的吧?这个贵一点,不过物
有所值啊,$2,799。

嗯,你现在已经是上层阶级,白领人士了。你现在可以像这样“自由”的,“安全”
的生活了:

为什么要反对使用 Windows

很多人都说不应该完全否定 Window,Windows 也有它的长处。不应该骂微软。

对。Windows 容易操作,适合普通用户。如果微软把它自己定位在 P&G,Philips 那样
的地位,能够给我们的百姓提供周到的,完善的,价廉物美的服务。那我肯定是很喜欢
它的。
但是从上面的种种情况说明,微软是一个野心极大的国际垄断组织!它的产品没有一个
是不出问题的:Windows 不稳定,容易中病毒,而微软不为大家免费提供杀毒软件。我
就是要让你们花钱买我的朋友 Symantec 的杀毒软件,谁叫你们已经上了我的贼船?这
叫什么售后服务啊!

你买来微软的程序,安装的时候一般都有一个协议,说:“由于微软的程序造成你的数
据损坏或丢失,微软概不负责。” 我想很多人肯定觉得这个不合理,不想按那个 "I
accept"。但是你的软件买都买来了,钱都花了,现在一按 "I decline",安装程序马
上就会退出。你只好被迫点击了 "I accept"!这不是不平等条约吗?

我已经目睹了好几个朋友的文档被 Microsoft Word 损坏,有的是编辑了十多天的30多
页的论文,有的是费了很大工夫做出来的个人简历,那个朋友为此失去了到自己向往的
P&G 工作的机会。就在他要投简历的前一个晚上,就在那一瞬间…… 不知道他痛哭的
时候有没有想起要投诉微软,可是谁叫我们用的都是盗版呢,况且你还点击了 "I accept"。

微软仗势已经占有大部分PC市场,制定不符合国际标准的“微软的标准”,以不合理的
方式压制其它公司的软件,这个问题已经在美国司法部闹了很久了。他甚至在 Windows
系列操作系统中放置能够通过网络泄漏用户信息的代码,以至于 Windows 刚进入澳大
利亚时被澳大利亚政府禁止使用。

有些人说:“微软毕竟开创了一个历史,造就了今天的 IT 行业。” 但是,如果没有
微软,我们今天早就用上非常稳定,非常可靠,非常方便,非常“傻瓜”的软件了!微
软是阻挡信息技术发展的罪魁祸首。

微软的程序的工作方式(注意,我只是说操作方式,病毒的事情另外算)确实适合于一般
家庭,上上网,发发邮件,打打游戏都不错。可是微软却要把自己包装成什么“高科技”
企业,要在世界各地设置“研究院”,在大学计算机系赠送不适合用于科研的 Windows
产品,甚至出钱请图灵奖得主来中国畅谈“二十一世纪的计算”,还在大会上宣传自己
的 .NET 技术。非要把别人认为自己是科学的,自己是领导世界高科技的。但是呢?它
什么高科技也没有。欧洲,美国,哪一个关键部门在用微软的东西?NASA? DOE? CERN?
你仔细想一想,微软的程序对人类到底有什么重大作用?

什么是 Windows 能干而 Linux 干不了的事情?---
“Windows 能干而 Linux 干不了的事情,那就是不需要干的事情。”

有个朋友看我半年没有用 Windows,有时就会问我:“你只用 Linux,有没有发现有些
Windows 能处理的事情 Linux 干不了?”---
我回答说:“Windows 能干而 Linux 干不了的事情,那就是不需要干的事情。”

Windows 能做的有益的事情 Linux 都能做---
Windows 下的某些功能确实是我们需要的,那么 Linux 的开发者们和用户也需要这种功
能,他们就会去实现这种功能,而且比 Windows 的方式好得多。由于大多数科学家,工
程师用的都是 Linux 或者某种商业 UNIX, 所以几乎所有商业的科学工程程序,比如
Matlab, Mathematica, AutoCAD, Candence的,Synopsys的,Avant! 的……全都是先有
UNIX 的版本(包括Linux),然后再考虑移植给 Windows,甚至根本不移植给 Windows,
因为 Windows 的机器一般没有足够的能力运行这样的程序。你不要以为只有 Windows
才有 PSpice, UNIX 的 HSpice 要好得多,而且可以运行在大型主机上。当然它们不是免
费的,但是它们值那个价钱。

但是 Windows 下有些东西在 Linux 下没有很相似的,或者你找到很多类似的,但是它
们每一个比起 Windows 的那个程序都要差很多,那么原因有两种可能性:

有一个完全类似的程序,但是由于它乍一看不漂亮,被你忽略了。而其它程序虽然看起
来很漂亮,但是它们是一些初学编程的人写的。现在由于 Gtk, Qt 的诞生,Linux 下开
发图形界面程序极其简单,很多初中生甚至小学生都可以随手编出一些漂亮不中用的程
序。如果你整天寻找这样的程序挑来挑去,永远也找不到你满意的。当然也有一流的程
序用 Gtk 和 Qt,比如 GVIM 就可以用 Gtk 作为图形界面,我还知道 Synopsys 一些
程序用了 Qt。

我曾经也犯过这样的错误,从外表区分一切。结果优秀的 FVWM, lftp, Mutt, wget 都
被我忽略过。当我找回它们的时候,我是那么的羞愧不已,它们现在都是我的朋友 我
第一次看到 FVWM 觉得它只不过是一个有很厚很难看边框的东西。可是现在,我的同学
看到 FVWM 都说:“哇!真漂亮。”

有另一种完全不同的方式可以达到相同的目的,甚至更好。

很多人很关心 Open Office, Star Office, AbiWord, ... 他们多么盼望有一天某一个
Linux 程序能够完全兼容的打开一个复杂的 doc 文档。但是你永远也不可能有那一天。
为什么呢?因为微软为了占有市场,必定不会让其它系统的程序能够完全兼容它的文档
格式。它一定会不断变化 doc 文档的内部结构,隐藏一些秘密,让其它公司的程序打
开 doc 文档时总是有某种问题,从而你必需购买 Microsoft Office 和 Windows。

你应该想一下,那么多的高智商的大学教授,科学家,学生,他们用的都是 Linux 或
者其它类型的 UNIX,他们没有 Word 可用,怎么处理文档呢?这么多年没有一个像
Open Office 的程序出现,难道大家没有办法写文档吗?

显然不是这样。你看看那些高水平的学术杂志,论文,那些大学教授的网页,那些漂亮
的幻灯片,它们是什么做的?原来 UNIX 用户早就有非常方便的 troff, LaTeX, SGML
等东西可以处理文档,而且它们比起 Word 都要高明的多。Word 显然被这些大拿忽略
了,以至于很久以来没有人想在 Linux 下开发一个类似 Word 的程序,除非某些公司
想抢微软的饭碗。

很多人留着 Windows 在硬盘上的原因无非是为了用 Word 和 PowerPoint。我见过一个
教授,他的 Windows 笔记本电脑上除了 PowerPoint 什么都没有。有一天演示的时候,
他指着堆乱字符说:“对不起,这是一个公式……怎么每次都是这样……” 其实有比
PowerPoint 好几百倍的东西可以制造幻灯片,你可以用最简单的方法制造世界一流效
果的论文和幻灯片。你待会儿可以看看我的TeX网页,你就会知道为什么我可以完全离
开 Windows。

Windows 能做的那些没用的事情 Linux 永远做不好

电脑游戏
有些人说 Linux 下不能玩 Windows 下所能得到的所有游戏。的确,Linux 下虽然也
有少量的游戏,比如 Quake。但是它没有 Counter Strike, 没有 Star Craft, ……

并不是说电脑游戏不该玩,但是应该适可而止。电脑是用来处理事务,帮助你学习,解
决问题的工具,而不是一个玩具!整天沉迷于电脑游戏中,而不出去感觉外面的世界,
你会变得越来越冷酷,越来越缺乏人情味。你与真实的世界越来越远。

你可以在 CS 里杀人,你可以在 Tomb Raider 里探险,你甚至可以在 Tony Hawk’s Pro
Skaters 里滑板…… 但是 It’s not real!你虽然有很高的“反恐技巧”,但是遇到
歹徒的时候,你是那么的怯懦;你虽然控制 Laura 伸手敏捷,但是你打篮球的时候怎
么总是被人断球?你虽然可以轻易的在 THPS 里作出一个 "360 kickflip to hangten
grind to fakie",但是你踩在自己的滑板上的时候还不会 ollie!

说回来,如果你偶尔玩一下电脑游戏未尝不可。但是世界上有远比 Windows + PC 更好
的游戏方式。Sony 的 PlayStation2, SEGA 的 DreamCast, Nintendo 的 N64,Namco
的街机……每一个都比 Windows 游戏精彩,每一个都有如此高的3D性能,以至于
Pentium4, Itanium + GForce4 都无法与它们比美!

Linux 的用户们都是关心解决世界的关键问题的份子,他们哪里有时间用自己的机器来
玩游戏啊?他们每天用Linux高效的做完自己的工作就到阳光下享受自然去了。要玩游
戏也是玩一些类似推箱子,贪吃蛇之类的智力小游戏。所以,你知道为什么 Linux 几
乎没有游戏了吧?

“整理硬盘,优化系统”

这是一个非常有意思的话题,仅次于有关“病毒”的话题。相信很多 Windows 用户都
有整理硬盘的经历。在很多 Windows 用户眼里,“硬盘用久了,会出现碎片,速度会
减慢,需要一个程序来整理,整理硬盘的时候不要做其它工作”,这好像是天经地义
的事情。

我也曾经津津有味的看着 Norton Defrag 一点一点的把我的硬盘排序,调整,用图形
的方式显示出来,然后报告:“100% 没有碎片。你的硬盘现在已经达到最佳状态。”
我现在才发觉我那时是多么的幼稚。

Linux 和 UNIX 用户似乎从来没有“整理硬盘”这种说法呢?你觉得很奇怪吗?如果
你觉得很奇怪,那说明你的思想在某种程度上被微软的垃圾程序禁锢了。你需要明白,
UNIX 的大型主机很多必须是一天24小时,一年365又1/4天不停运转的,要是每个星期
都要整理一次硬盘,在整理的时候几乎不能干任何事情,那是绝对行不通的!

Linux 机器根本不用整理硬盘,这就是为什么没有看到过 Linux 用户整理硬盘。Linux
的文件系统是比 Windows 的 FAT, FAT32, NTFS 高明得多的文件系统,它们不但可以
对文件设置权限,实施完全的保护,而且可以“越用越整齐”,“越用碎片越少”!
你应该把文件大部分放在 Linux 的分区,而不是 Windows 分区,因为它比 Windows
分区可靠得多。

还有更滑稽的事情就是有很多“Norton System Doctor”,“Windows 优化大师”,
“超级兔仔注册表魔法” 之类的程序存在,而且价格昂贵。似乎一个操作系统本来应
该有很多问题,需要别的厂商做程序来“优化”它,而且为了得到优化,你需要付钱!
这些问题 Linux 根本就没有,所以不需要什么优化。Linux 内核本身就是高度优化的。

IDE

有些人在抱怨为什么 Linux 没有一个良好的 IDE 开发环境。Linux 现在已经有一些
IDE 了,但是总是有很多问题。你是不是正在寻找,正在期望 Linux 某一天可以有一
个VC那样的开发环境?你有没有发现你正在进入微软给你设下的怪圈?你为什么一定
要用 IDE?你说:“IDE 开发迅速,调试方便,适合大型程序……” 那说明微软的程
序在你脑子里已经比较根深蒂固,你需要好好清醒一下了,看看我来告诉你。

高明的 UNIX 程序员不用 IDE,IDE 从来就是给初级 Windows 程序员用的。

你看看大型的 UNIX 程序,包括 Linux 内核,各种网络服务程序,Xwindow 程序在内,
哪一个是 IDE 搞出来的?我们实验室的 EDA 程序也没有一个是 IDE 弄的,我还知道
Candence, Synopsys,Mentor 的高性能的图形界面 EDA 程序也都不是 IDE 写的。
你信不信,微软的人在写 Windows 本身的时候也根本不用 IDE。微软内部程序员最喜
欢的编辑器其实是 VIM,用 VIM 的微软程序员上次向乌干达的可怜儿童捐助了1000多
美元,这是值得称赞的。

有一次某杂志采访一些出名的 Linux 内核程序员,包括 Linus 在内,没有一个人用
IDE,有的人用 VIM,有的用 Emacs,只有 Linus 说“GNU Emacs is evil”,但是其
实他用的是一种跟 Emacs 有同样键绑定功能的 MicroEmacs。大家都是用编辑器编辑了
程序文件,然后用 make 这样的自动工具调用 gcc 编译器完成编译工作的。甚至高级
的 Windows 程序员也不用 IDE,他们可以从命令行调用 cl,nmake 来编译自己的程
序。虽然这样的 Windows 程序员很少,但是他们却是最了解 Windows,最高明的
Windows 程序员。

为什么 UNIX 程序员不用 IDE?明白了这个道理你就能体会到 UNIX 的设计思想了。首
先,一个 IDE 集成了编辑器,编译器,汇编器,调试器,跟踪器…… 这个编辑器功能
肯定比不上 VIM 或 Emacs,编译器比不上 GCC,汇编器比不上 as,调试器比不上 gdb,
ddd, 跟踪器比不上 strace, ltrace, truss。你得到的是一套整合的低能的程序。如
果你对调试器的功能不满意,你只好换用另外一套 IDE,但是这套 IDE 的热键,菜单,
编辑器功能,按钮…… 跟原来那个有很大不同。你不得不花很多时间来熟悉新的环境,
而不能保持原来的某些东西。

而在 UNIX 下就不一样了。你可以用你最喜欢的 VIM 编辑程序,你在 VIM 里可以调用
GNU make,make 可以调用 gcc, ld, ... make 的出错信息可以被 VIM 捕获,VIM 能
帮你在源程序里定位。你如果喜欢 icc, 你可以让 make 用 icc 而不是 gcc。你如果
觉得 gdb 跟踪变量时比较麻烦,你可以用 ddd 来显示各种数据结构之间的关系。你还
可以在 Emacs 里调用 gdb,那样就可以同步显示源代码了。而且 VIM 和 Emacs 还可
以编辑很多其它东西,比如信件,LaTeX 文档,HTML,配置文件…… 你不用另外找一
个什么编辑器来干这些杂活了。很多程序比如 Mutt, tin 都可以在内部使用 VIM,这
样就更方便了。实际上 make 在其它方面还能帮你很多忙,我的每一个比较大型的 LaTeX
文档都是用 make 维护的。

Linux 能干的高精尖的事情 Windows 都干不了

当然有很多事情是Linux/UNIX的专利了。因为 Windows 只能装在 PC 机上,好像以前
也有 Alpha 可以使用 Windows NT,但是就是没见到有人用。PC 机的能力是很低的,
像我们编程序处理 NP-Hard 问题的人,用 Windows 的机器显然速度不够,而且有时一
个问题算上几天甚至几个星期,Windows 机器是以“死机”著称的,我们怎么能放心?

所以几乎所有科学计算程序,EDA 程序,高性能图像处理程序都不是 Windows 的。他
们有时也会移植一些给 Windows,但是常常降低那些程序的能力。你比较过 Windows
版本的 Mathematica 和 Linux 的有什么区别吗?

IBM 制造的最大的并行计算机有 8000 多个处理器,Windows 不可能有能力管理这么多
处理器,它用的是什么操作系统?答案是 Linux。

《泰坦尼克号》电影里的三维动画,那么细腻逼真,Windows机器能做出来吗?不行。
那也是 Linux 机器做的。

民航总局用来训练地情人员的虚拟现实训练设备,Windows 当然无能为力。那都是商业
的 IRIX 机器。

UNIX 是最早支持 TCP/IP 网络协议的系统。它上面有很多可以互相协作的网络服务程序,
它们经过多年的使用和修订,已经达到比较完善的程度。而就在1997年,微软的比尔盖
茨还在扬言:“Internet 是没有前途的。” 微软的这个“远见卓识”大家应该都已见
识,它后来加上的网络服务程序IIS漏洞之多,让公安部都频频发出警报,大家也是见识
了的。

其实你知道了,Windows 没有一样有用的事情能比 UNIX 干的更好。

Linux 干不了的有用的事情 Windows 照样干不了
当然 Linux 不是万能的。它也有不能干的事情,电脑也有干不了的事情。但是 Linux
干不了的事情,Windows 肯定也干不了。这些事情就是我们需要探索,需要努力的事情
了。在你探索的过程中,Linux 必定是你的好伙伴。

不要把Linux和Xwindow掩盖起来!不要把我们的用户当成傻瓜。

什么?你早就知道 Windows 是垃圾?噢!你怎么不早说呢!害我废话这么多。嘿嘿。

“好了。你知道 Windows 是垃圾,你现在用什么?”

“Linux + Xwindow”

“那我问你,Xwindow 是什么样的?”

“不就是跟 Windows 差不多吗?只不过 ’Start’ 按钮比较方,而且上面不是一个
Windows 标志,而是一个脚丫子。点击一下居然还有很漂亮的中文菜单。我喜欢!”

“你知道什么是‘根窗口’吗?”

“不知道。从来没听说过呢?”

“根窗口就是遮盖整个屏幕的那个最大的窗口。”

“哪儿有什么窗口啊!我没有看到呢?”

你发现了问题吗?这些 Linux 用户说是在用 Linux 和 Xwindow,但是他们对 Linux
和 Xwindow 几乎完全不了解。很多人用了那么久 Xwindow 都不知道根窗口是什么东
西,不知道其实按钮也是窗口,不知道窗口管理器和其它程序有什么关系,大家都以
为窗口上面的按钮是程序自己放上去的,不知道窗口的“class name”,“resource
name”是什么东西。他们也不知道 .Xdefaults 是用来干什么的。特别是他们很多人
都不知道 Xwindow 的字体是如何命名的,什么是 fontset,有了一个新的字体也不
知道怎么安装。

他们被遮在 Linux 之上的一层一层的包装迷惑了,他们等待有图形界面的工具来帮
助完成一切事情,他们认为 Linux 跟 Windows 一样,只是麻烦一点。他们知道 Linux
内核很好,但是他们感觉不到 Linux 和 Xwindow 在操作层面的天生的先进性,随后
不久就把 Linux 完全删除掉了。你发现没有,要用户理解 UNIX 和 Xwindow 的操作
层面的先进性,才是留住用户的最好办法。如果用户体会不到操作时的方便和高效,
内核再好他们也不会理会。

但是用摹仿 Windows 的作法来吸引用户,永远会失败的。因为 Linux 如果摹仿 Windows
那一套低效率的方式,那么 Linux 的这套“低效率方式”永远比不上 Windows 的那
一套“低效率方式”。那么用户就会说:“这个 Linux,没有一样比的上 Windows。”

Linux 天生就是继承了 UNIX 的高效的工作方式,为什么我们要把它掩盖起来?我们为
什么只告诉用户 KDE 的菜单怎么用?我们为什么不能像早期的 Xwindow 书籍那样第一
节就告诉用户什么是 X server, 什么是 X client,什么是 Window Manager, 什么是
根窗口。第二章就告诉用户窗口有哪些属性,什么是 classname, resource name, hint,
怎样使用 .Xdefaults, xrdb ……

在这里我又不得不说一下那些 Linux 的发行公司和写书的人,他们把 Linux 和 Xwindow
包装起来,却没有从基本上告诉用户 Xwindow 的工作原理。很多书籍讲授的层次就是在
Gnome, KDE 的菜单操作的层次,靠大量抓图来占篇幅,“繁荣”Linux 书籍市场。

现在很多人已经把能够利用别人的库写出一个好看的程序作为自己编程水平的象征。在
这个“图形化”,“可视化” 的年代,你如果还在用 troff, LaTeX 写文档,你还在用
VIM 自己编辑 HTML,用 Mutt 处理邮件,你还在用文本模式的 gdb 调试程序,你还在用
Xlib 写程序, 你还在用 tin 上 USENET,你还在自己写 Makefile,写机器代码,你还在
玩 Clossal Cave 这样的字符模式冒险游戏,那你就是老古董。

其实这种思想是错误的。虽然你是一个坚决的 Linux 支持者,但是你的思想是 Windows
的思想。你认为图形界面,菜单,按钮就可以解决一切问题,就可以给你高效方便。你还
是没能摆脱微软给你的潜移默化的东西。你其实离不开 Windows 那样的环境,你迟早会
删掉自己的 Linux。

GUI vs. CLI
做一个坚定不移的“两面派”

大家看到这个标题是不是热血沸腾?两派大虾都可以围攻我了:

GUI派用户:“哇!我一看你这小子就是 CLI 的。要不然自己写什么 Makefile?用什么
Mutt?”

CLI派用户:“切~ 你还用 X!高手都不用 X。你是 GUI 那边的。”

可怜的我:“555~~ 你们都不要我~~ GUI 和 CLI 就那么水火不容吗?”

计算机界这样的门派之分还很多。很有特点的就是 CLI 和 GUI 了。CLI (Command LIne)
的狂热份子声称永远不用 X。我上次在实验室看到一个同学用一个 SecureCRT 登录到
Sun 机器,然后用一个 vanilla vi 编辑程序,我建议他启动一个 GVIM 过来显示在
Exceed 上可以有语法加亮。但是他坚决反对,说:“高手不用X。你想想,要是我在一
个很慢的网络连接怎么用 X?而且好多服务器没有装 X 程序。”

但是我们实验室的网速可够快,Windows 机器都有 Exceed 啊,而且 Sun 机器有全套
X 客户程序包括 GVIM。他说他是 CLI 的坚决拥护者,但是他却在用 Windows,他后来
打开了好几个 SecureCRT,每次从文本框输入地址,用户名和密码,从下拉菜单选择
"SSH2",然后点击“Connnect”。他还不断的夸SecureCRT是“网络管理员投票选出的
最受欢迎的登录方式”。老天,SecureCRT 本身就是个 GUI 啊,他其实没有明白
Xwindow 的好处。

你说我是 GUI 的?我虽然很少在 console 下工作。但是我对 bash, VIM 很熟悉,我
可以让 bash 按照我的键绑定方式来工作。我可以在 rxvt 里使用 Mutt 来收发 email。
我的每个桌面上都常常堆放着一打不同大小的 rxvt。我用 VIM 编辑 LaTeX。我自己写
Makefile 来维护 LaTeX 文档。我有时用 mpg321 来放 mp3。我上BBS用的我自己写的
expect 脚本。 好了,CLI 派的朋友可以收我做盟友了

你说我是 CLI 的老古董?我的 FVWM 被我配置为可以“手写操作”,我只要画一个
"r"就可以启动 rxvt,我只要画一个 "U" 就可以启动 GVIM,…… 我用 GVIM 语法加
亮模式编辑程序,我用 Mozilla 浏览网页,…… GUI 派的现在好像认我做朋友了

好了。CLI 派的朋友,虽然我很喜欢命令行,但是我有时在屏幕上左右画一下就可以
执行:

Module FvwmConsole -terminal rxvt -geometry 45x5-0+0 -bg gold -fg midnightblue -fn "-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-*"
你是不是现在又想把我逐出师门?

GUI 派的朋友,虽然我很喜欢窗口。但是我可以在 FvwmConsole 里输入:

All (rxvt) MoveToDesk
把我所有的 rxvt 移动到我现在工作的桌面。“这家伙,怎么这么快就叛变了!”

其实何必分什么 GUI 和 CLI,UNIX 和 Xwindow 都是工业标准,它们从设计那天开始
就有非常灵活的用法,各个程序,不管是 GUI 还是命令行的都可以互相协作。UNIX 和
X 是一家,何必搞的那么偏激,非此即彼?你从我上面的行为可以看出 GUI 和 CLI
的模糊界线吗?我就是坚定不移的“两面派”。

UNIX 是简单的--
“我相信简单就是最好,如果太复杂,我是不能理解的。” —Seymour Cray

很多第一次用 Linux 的人会惊奇的发现,Linux 的程序居然不用“安装”就可以运行,
程序拷贝到随便那个目录都可以用,而不是一定要占用你第一个分区的空间。程序的
设置只是一些简简单单的文本文件。你根本不需要什么“注册表修改器” 就可以改变
系统的设置。这就叫做简单,但是简单就是美。虽然这只是 UNIX 简单性的一个肤浅
的认识,你已经体会到了某些东西。

但是简单并不意味着功能弱,并不意味着落后。相反,简单意味着强大,意味着生命力。

我不会再继续阐述我理解到的“UNIX 的简单”,因为这个需要自己去体会。

UNIX 是永恒的
有人说:“Plan9 会取代 UNIX,Mach 会取代 Linux 内核。”

但是你如果是一个深入体会了 UNIX 的人,你就会知道:UNIX 的思想是永恒的,不管
时过境迁,Plan9 是否代替 UNIX,UNIX 的灵魂都会在 Plan9 身上现形!

我为同一个设备写过 Linux 内核和 Windows VxD 驱动程序。写 Linux 驱动程序时,
我对 UNIX 设计的完美的一致性,远见性所折服。UNIX 用同样界面的 read(), write()
系统调用就可以对不同的对象:普通文件,设备文件,管道,管道文件,socket,……
进行统一的读写操作。我跟本不需要写一个测试用的应用程序就可以对我的设备驱动进
行测试,因为 cat, cp, dd, 它们也使用了同样的 read(), write(),设备和普通文件
在应用程序眼里没有区别。在那个还没有 Smalltalk, 没有 C++ 的年代,UNIX 的设计
者已经使用了所谓的 “面向对象方法”。对,C 语言也可以实现面向对象。

UNIX 的系统调用几十年都没有很大变化,这非但不是顽固,不进步的象征,反而是
UNIX 的远见卓识的体现!这就跟 TeX 程序几十年都不变的情况差不多。这些才是真正
的永恒的 master piece! 你应该改变所有软件都必需从 0.1, 1.0, 1.1, 1.2, 2.0,
..., 3.0, 3.1, 95, 98, 2000, XP, ... 不断升级的想法。

Windows 就不同了,它在最开头只是一个 DOS 之上的图形包装而已。后来为了兼容以
前的糟糕设计,不得不加上很多累赘。我写 VxD 驱动程序的时候就深有体会,Windows
95 程序对设备的操作只有用 DeviceIoControl,我不得不写了两个应用程序来对设备
驱动进行测试。Windows 内核的不一致性和隐密性使我非常恼火。不过 Windows WDM
驱动程序现在也有了 ReadFile, WriteFile,…… 那说明什么?那说明 Windows 在向
UNIX 学习,或者有可能是某个 UNIX 设计人员在微软打了几天临工,顺手加了几个
UNIX 的东西进去。这样做是没有用的,Windows 从一开始就是非常糟糕的设计,它的
历史的包袱太沉重了,缝缝补补有什么用?它只能永远的被 UNIX 甩在身后!

UNIX 是强大的
让聪明人干任何他们想干的事情。

UNIX 的一个特点就是非常高的灵活性,Xwindow 也具有这种灵活性。这种灵活性体现
在哪里呢?

UNIX 的程序一般都有很多参数,不管你现在用的着用不着,总有人需要某些参数。它
们的行为很多都可以用配置文件来改变。比如 GNU bash, 通常缺省的命令行输入方式
是 Emacs 方式,但是只要我编辑一个 .inputrc 文件,就可以把它变成 vi 的输入方
式,而且我还可以自己绑定键序列到某些操作。我可以用 shopt 来设置它的很多特点,
比如是否进行通配符扩展,是否可以把一个变量当作一个目录来cd,是否可以自动纠
正某些明显的目录名打字错误 ……

UNIX 程序设计的思想是提供给用户“机制”,而不限制用户制定“政策”。这是一个
重要的尊重用户的作法。

我们再来看看 Xwindow。Xwindow 是一个出色的设计,它把显示服务器和客户程序分开。
一个显示上既可以显示本机上的程序,也可以显示别的机器上的 X 程序,而它们都遵
守你的窗口管理器的统一指挥,它们之间可以方便的传送剪贴版数据,各种事件 ……
比如有时我的 XFree86 上会出现四个不同机器上的 XTerm,两个不同机器上的 GVIM,
…… 它们统一受本机上的 FVWM 指挥。

Xwindow 程序都具有很多很多命令行参数和 resource 参数。你可以随意的在命令行或
者 .Xdefaults 文件设置所有的颜色,字体,尺寸…… 而且如果你用 xrdb 把 .Xdefaults
导入到根窗口,那么其它机器上没有经过配置的同样的程序,显示到你的机器上的时候
也会遵守同样的外观规定。

Xwindow 的窗口具有 Property, 也就是一些可以自己定义的共享数据(原子)。正是因
为这些 Property 的存在,使得 Xwindow 具有无比强大的生命力。X 的窗口管理器和
其它客户程序之间并没有统一的协议,但是后来出现了 ICCCM(客户程序间通信规范),
这个规范就是通过 property 定义的。现在又有人定义了一套“扩展的窗口协议(EWM
Hints)”,使得 Xwindow 可以具有某些 Windows 的特征,比如一个工具条程序可以告
诉窗口管理器:“这个屏幕下面被我占据了24个像素的空间,你最大化程序的时候不要
越过这个界线。”

一个强大的窗口管理程序比如 FVWM,它收到这样的提示时,可以答应工具条程序的这
个要求,也可以不答应。一切选择的权力在于谁?当然是用户了!

你想想,是不是有些 Windows 程序常常弹出一个窗口要你选择 "Yes or No"?你不点
击它它就不下去。你觉不觉得你的程序在侵犯你的尊严?你是一个人,一个智慧的生物,
怎能受到一个程序如此的待遇?

还有就是很多 Windows 程序把人当成傻瓜,而它是“智能程序”。比如,有一个程序就
是喜欢把你的每句话第一个字母都变成大写,我不说它是谁了,你遇到的时候就知道了。

如果连“一句话开头一个字母要大写”这么明显的问题都需要程序帮你纠正的话,人脑
还用来干什么?况且如果你故意想要不大写的话,那就更麻烦了,我楞是没有从它那一
大堆菜单里找到怎么关闭这个愚蠢的选项。

只有符号才能完全操纵计算机。

我们来说说很多初学 Linux 的用户。虽然他们在用 Linux,但是他们打心眼儿里是觉得
Windows 的工作方式好,他们希望 Linux 有一天能“像Windows那样”。你说:“我鼠
标一点,我菜单一拉,…… 就可以完成我的操作。” 但是我要告诉你:“Linux 从来
没有摹仿 Windows,将来也不会。Linux 从诞生之日起,它的工作方式就比 Windows
的先进。

Linux 属于能勇敢面对符号的人。只有符号才能完全操纵计算机。”

看看优秀的 UNIX 程序,XFree86, FVWM, VIM, Emacs, proftpd, Mutt, wget, tin, ...
没有一个不是用配置文件来设置选项的。为什么这些程序没有方便的菜单可以用来配置?
难道它们的设计者就那么低能,连个图形配置界面也写不出来?

当然不是。因为图形界面配置方式的能力是极其有限的,而配置文件和程序语言的表达
能力却是无限的。用图形界面配置这些程序的话,如果你想达到配置文件的效果,你需
要成百上千的菜单,checkbox, radio button, ... 到时候你根本没办法找到你需要修
改的地方了!而各个程序的配置文件的语法都有很多相似之处,一般就是一些命令,设
置一些变量,参数,…… 一旦用会了一个,其它的也就容易理解了。如果你用惯了 awk,
sed, Perl,你会觉得那才是真正的自动化啊。

鼠标虽然是很好的工具,但是它的表达能力是有限的。你不可能光用鼠标就让电脑完全
明白你的意思,它毕竟只有3个按钮。看看我的MetaPost页你就能体会到鼠标的这一弱
点。所以我们虽然很喜欢鼠标,但是却不能完全依赖它。

各个小程序的完美配合

这就是UNIX最重要的特点了,它就是UNIX设计的思想。让每个程序只具有一项专门的能
力,然后让它们合作。Xwindow也继承了这种好传统。这恐怕就是Windows和其它操作系
统望尘末及的地方了。UNIX 程序设计之统一,配合之完美,真使我难以置信!shell,
grep, find, awk, sed, make, Perl, Emacs, vi, tin, Mutt, ... 它们是那么的具有
一致性!你一旦学会了 sed 的正则表达式,其它程序基本上都能用了。你一旦学会了
vi 和 VIM, 你会发现它的操作是那么的有规律性,似乎vi的设计者在几十年前就已经
设计好了 VIM 在今天的完美而统一的操作方式!而且vi的操作还体现在 Mutt, tin 等
很多程序中。你甚至可以把 bash 设置为 vi 的输入方式来输入命令行,我就是这么做
的。一个程序可以调用另外一个程序来得到数据,可以把数据交给它处理后返回来,可
以在自己的窗口里“嵌入”另外一个程序。

在 Windows 和其它非 UNIX 操作系统中,这种合作是非常困难的。我曾经在Windows
下使用 Perl来进行一些自动工作。但是 Windows 的文件操作,管道是如此的不稳定,
程序之间基本不能合作。你别想在 Visual Studio 窗口里面嵌入 UltraEdit 编辑器,
你别想用一个 expect 脚本来控制 telnet 到水木清华BBS。

Windows 的程序都是大而全,大而杂,所有的电子邮件程序都需要自己提供编辑器,自
己发送和收取邮件,自己显示邮件的附件。每一个BBS程序都提供自己的Virtual Terminal,
自己的通讯代码。每一个 IDE 都自己提供编辑器,编译器,汇编器,调试器。人们为
了使用一种新的程序,需要适应所有这些它提供的界面,而不能使用自己喜欢的编辑器
的键绑定,菜单组织…… 不能 DIY!

你要知道,最高级的电脑是定做的,自己想要什么什么CPU,什么主板,多少内存,什
么硬盘,键盘,鼠标,显示器都是自己选择的。最高级的滑板,自己想要什么牌子的版
面,什么牌子的沙,什么桥,什么轮子,什么轴承,也都是自己选的。最高级的 古球
拍,木板,胶皮,海绵,胶水都是可以自己选择…… 而用 Windows 程序,你得到的是
大杂烩,就像你去买“品牌机”,只有那么几种配置,而且附带很多你不需要的软件和
服务;就像你去买组装好的滑板,你想要大一点的轮子和窄一点的板子,但是你没有这
种选择余地!Windows 程序就相当于最廉价,最次的滑板。但是它却会花你更多的钱,
因为一旦一个部件坏了,或者你不喜欢了,你不能另外找一个好的换掉它,你必需重新
买全套配件!

而 UNIX 和 Xwindow 就是高档的“组装货”。比如我用 Mutt 的时候,我可以用 VIM
也可以用 pico 来编辑邮件,我可以用 ImageMagick 也可以用 xv 来显示附件里的图
片,我可以用 lynx 把 HTML 附件转成文本嵌入窗口中,我也可以把 HTML 附件交给
Mozilla 图形显示。我可以让 GnuPG 帮我把邮件进行数字签名和加密,我也可以用其
它 PGP 程序。

我想让 Postfix 而不是 sendmail 帮我发出邮件,我想让 fetchmail 帮我收邮件,
转发给 postfix,然后被我自己写的Perl过滤器处理…… 这一切我都可以办到!我可
以选择我最喜欢的专门的程序来完成专门的工作,然后把它们结合在一起,我也可以
分别得到它们的好处。

学 UNIX 绝对不是浪费时间
有人告诉我:“你看我用 Windows 什么都不用学。而用 Linux,光是安装就花了我一
个星期!”

首先,我要告诉你的是,你装 Linux 花了一个星期,不是因为 Linux 不好装,而是
因为你已经习惯了 Windows,对 Linux 最初难以理解而已。你想一想你最初安装Windows
的时候呢?你花了多少时间搞明白什么是硬盘分区?什么是盘符?什么是目录?你认为
Windows 就是那么容易可以学会的吗?虽然你觉得没花时间学,但是你以前在用别人的
机器的时候已经耳濡目染,自然就了解了。而且由于你想要 Linux 和 Windows 并存于
硬盘上,又增加了安装难度。而且你肯定没有得到有经验的 Linux 用户的帮助,否则
他们会在20分种之内帮你搞定。一个星期也太夸张了.

如果一开始用的就是Linux就没有这个问题。你想想如果你没有用过 windows,你肯定
会很习惯 /etc, /usr, /usr/local ,... 而不是 C:, D:, E:, ... 是不是?如果你只
用过Linux,你第一次用 windows 时恐怕也会问:“/bin 目录哪里去了啊?”

最重要的是,你用惯了的UNIX工具,它们可以伴随你一生,而不会那么容易变化或消失。
你可以永远不用再换另外的工具了。除非那个工具比你这个好的太多,而且可以完全模
拟你现在的工具。

我们实验室一个60多岁的老师,用vi, cc, make, ...都几十年了,他以前的经验绝对
没有白费,而且教会了我们一批又一批的学生。vi 伴随着 UNIX 的最初发行而诞生,
直到今天还是世界上头两号编辑器之一!有些人的 FVWM 配置文件已经用了 10 多年,
现在完全不经修改还可以用。

看看 Windows 的工具,你从 Borland C++ 换到 VC, 就必需适应新的环境:菜单不同
了,颜色不同了,按钮不同了,帮助信息不同了,热键不同了,编译器参数,调试器功
能也不同了,…… 那个时候恐怕花要花你很多时间去适应。当你刚刚适应了 VC, 你又
要换成VJ, PowerBuilder, C++Builder, ...

很多windows程序员都是这样,开头在dos下用Turbo C, 然后是 Borland C, VC, C++
Builder, ......不断追赶微软的潮流。而且微软的SDK, MFC, .NET …… 什么都在不
断变化,不断出问题,又不断的在修改…… Windows 程序员不得不买又厚又重的 Microsoft
Press 的书籍,看了才一个月,又过时了。今天你才学会了写 VxD,明天你就必须用
WDM 了。你不得不注册 MSDN 才能赶上 Microsoft 的步伐。很多人说:“计算机是贵
族的专业。” 这就是微软一手造成的。

这些东西才是没完没了的浪费大家的时间和金钱的。这是是浪费生命!我们为什么不
使用从诞生就那么一致和完美的 UNIX?你需要理解先进工具的设计理念。UNIX 的工
具就像我们用的汽车,它的离合器,油门,刹车,方向盘,后视镜,永远都在同样的
位置。用惯了的话,你对你的汽车的每一个部件都会了如指掌,甚至你自己都可以修
车了。这难道不好吗?

有人说:“你说我们需要了解 UNIX,难道你要开车还必须了解汽车的结构吗?” 你
去问问开车的司机,哪一个不了解汽车的结构的,那他的驾照就是混来的。你难道想
要傻瓜型的“微软牌汽车”吗?我们来看看:

你买的微软牌汽车最开头只有一个座位,每加一个座位你得向汽车公司付钱。车上的
防撞气囊不时会冒出来,说是为了你的安全。每开100英里要大修一次,每过一年要换
一次引擎。附带的,你还必须换用由微软汽车公司指定的石油公司提供的新型号的机
油。你的车出了问题,但是法律规定,你不准私自拆开你的汽车来修理,你必需到微
软汽车公司指定的维修点去,需要付相当多的钱才能修好一个小毛病。

最可气的是,你每换一个型号的微软牌汽车,它的刹车和离合器都在不同的位置,你
需要重新去考驾驶执照。如果这辆汽车在途中刹车失灵,你受了重伤,你也不能状告
微软汽车公司,因为你买来汽车之后必须签一个合同,说“由于微软牌汽车对你和家
人造成的一切死伤,微软概不负责。”

怎样完全用 GNU/Linux 工作

说了这么多 Windows 的不好。我还没有告诉你我怎么用 Linux 处理有些必要的事情。
半年以前我由于中文老是配置不好,一直是双系统,不时需要重起到 Win2k 来处理
汉字。后来我找到了 miniChinput, XSIM 和 SCIM 输入法。这下可以处理汉字了。
而且 VIM 和Emacs 对汉字支持越来越好。我的大部分文本是用 VIM 编辑的,包括程
序,信件,网页,LaTeX 论文,MetaPost 绘图语言。

我不用 Word 这样的程序写论文,而是用 LaTeX,因为这是世界上效果最好,最方便
的论文工具,是大多数学术杂志要求的格式。幻灯都是用 ConTeXt 做的,用起来很简
单,而且效果非常漂亮。你可以看看我的TeX介绍。

至于绘图,你可以用很多可视化的工具,比如 xfig,dia。但是对于我来说,任何可
视化的工具都不能完成某些任务,我需要一种可以精确描述图形的语言。我找到了
MetaPost。它简单又好用,而且效果是世界一流的。我的插图,如果不是图像,都是
MetaPost 画出来的。

我曾经抱怨 mozilla-mail 经常突然消失,损坏我好几封快要完成的信件。后来我发
现mozilla 的邮件处理程序确实是不稳定的,功能又弱,有经验的 UNIX 用户都不用
这样的程序。Mutt 是一个非常稳定可靠的 UNIX 邮件处理程序,而且功能非常强大。
我曾经为 Gnome 和 KDE 的不稳定而烦恼。现在我找到了非常强大的 FVWM。KDE,
Gnome也能和 FVWM 一起工作。虽然 Gnome 和 KDE 总体不稳定,但是某些部件程序
还不错,很多 gtk, Qt 的程序也很不错,它们很多都是可以独立于这些桌面环境运
行的。

Linux 有很多强大方便的工作方式是 Windows 没有的,或者有类似的东西,但是很
差劲或者用起来不方便。比如 ssh 服务,rsync,cvs,expect ……

结论

我写这么多的目的是什么?我希望喜欢 Linux 的朋友,完全清除微软和 Windows 灌
输在你脑子里的谬论,别再相信它们所谓的“新技术”,别再追赶 Windows,因为追
赶Windows = 倒退。马克思有一个思想很重要,“新生事物并不一定是在最近出现的。”

UNIX,Xwindow, TeX 虽然都比 Windows 先出现,但是它们才是先进生产力的代表。
我们要清楚的认识到什么才是真正的现代化,什么才是真正的自动化。

消除学计算机很难的幻觉,勇敢的拿起像 bash, FVWM, TeX, VIM, Emacs, Mutt ……
这样强大的程序,勇敢的面对符号。不要再埋怨“Linux 为什么不能像 Windows 那样”,
不要再浪费时间试用这样那样的程序,不要再忙着升级。你需要理解 UNIX 的工作方
式,因为那是大多数科学家的工作方式。Linux 可以成为你的好朋友,你需要认识它,
了解它,信任它,才能完全的靠它来高效的工作。当然,在游戏机,手机,掌上电脑
里,或者在用电脑来娱乐的时候,用一些“傻瓜软件”还是不错的.

我希望小学,中学的计算机老师能够提高自己的素质,在孩子们的启蒙教育中充分利
用Linux 神秘的特点,引起孩子们对数学,对符号的好奇心。诱导他们用计算机来解
决世界上的有趣问题,而不要把教学的范围局限于计算机的操作和它自身的问题。

附录: 我用来处理日常事务的 Linux 程序
好了好了。我知道你发现自己应该转向 Linux,你很后悔当初为什么中了微软的邪。但
是不要着急。因为这些东西本来只是工具,它们是用来完成你的主要任务的辅助而已。
你以前选错了工具,这不要紧。你还是拥有你自己原来的专业技能,那才是最重要的。
工具的东西只有慢慢适应转换,不能一蹴而就,否则你会感到非常没意思,甚至放弃。

如果你只想做一个像我这样的普通用户,主要目的是用 Linux 来完成自己的任务,那
就可以不用系统管理员或者网络管理员的标准来要求自己,因为当一个系统和网络管理
员确实很辛苦。这里我对实验室的网管同学鞠一躬,谢谢你的指点和帮助. 不用把你的
机器当成网络服务器,不用开放没有必要的服务,设置好 ssh, ftp 已经足够了。这样
会省去了解很多没必要了解的东西的时间。不用过度考虑“安全”,因为 Linux 缺省
已经很安全了。不过你有兴趣了解更多那也无妨。

下面给出一些推荐使用的可以处理一般事情的程序。至于你的专业上要用到的科学和工
程软件比如 Matlab, Mathematica, Maple, HSpice, Design Compiler, …… 还有其
它物理上的,化学上的,生物上的 …… 都必然有 Linux 和 UNIX 的版本。当然他们
很多不是免费的,不要总是觉得什么都应该免费,自由不等于免费。它们是经过很多人
辛勤劳动的产物,是可靠的程序,它们物有所值。

下面列出我常用的一些 Linux 程序。一个列表里可能有很多,那是为了方便你来选择,
我列出了比较信得过的。但其实很多只有第一个是我真正在用的,我不喜欢试用程序。
我不是一个合格的网络管理员,我的服务器都只设置了我自己需要的功能,那样可以省
去我很多麻烦 tongue

Shell: bash。它结合了 csh 和 ksh 的优点,并且有 readline 功能,你可以随意绑
定自己的键盘。
编辑器: VIM, Emacs。
程序开发: GCC, make, ld, Scheme48, j2sdk, Perl, Python, Tcl/Tk ...
论文,幻灯工具:LaTeX, ConTeXt
绘图工具:MetaPost。这个语言太强了,以至于我只用它了。你不熟悉的话可以用xfig,
dia 来画一些流程图之类的图片。
图像处理:ImageMagick。其中的 import 程序可以屏幕抓图,convert 程序可以转换
图像格式,display 可以显示图片和简单编辑(缩放,换质量,转格式,简单绘图,简
单虑镜)。通常我就这么点需要。如果你要更强大的图像工具可以用 Gimp, 它几乎和
Photoshop差不多。
自动管理工具:make。我可以用make来自动编译程序,自动编译文档,自动更新插图……
全自动,而且不会重复劳动。
数值计算程序:SciLab。这个程序基本上可以代替 Matlab。
代数计算程序:MAXIMA。这个程序基于世界上最老的计算机代数系统之一: 由美国能
源部(DOE)发行的 MIT Macsyma 系统。它是用 Common Lisp 实现的。很多现在的符号
计算程序比如 Maple 都从 MAXIMA 身上学到很多东西。它现在经过 DOE 批准以GPL发
行,永远是一个自由软件。
加密程序:GnuPG。我的 PGP 密钥就是它搞出来的。
打包,压缩程序。什么都有: tar, gzip, bzip2, zip, rar, ...
虚拟光驱程序。Linux 不需要虚拟光驱程序,直接 mount 就行了。
ftp 服务器:proftpd, vsftpd。proftpd 功能很强,但是我只用了最简单的一种设置。
WWW 服务器:apache。(我一般没有开)
ftp 客户程序:lftp,ncftp。它们都是文本方式操作的,但是比起图形界面的方便的
多。比如 lftp 几乎具有 bash 的所有方便功能,Tab 补全,bookmark, queue, 后台
下载,镜像…… Linux 也有图形界面的 ftp 客户程序,但是大多不稳定,有很多问
题。这就是很多人抱怨 Linux 不如 Windows 的一个小原因。还有很多人用 Wine 模
拟 Windows 的leapftp,其实 lftp 比 leapftp 好很多,你需要的只是适应一下。
自动下载工具:wget。它非常稳定,有一次我下载一个程序,用 IE 和 Mozilla 下载
回来的文件都是坏的,最后还是 wget 可靠的传输了数据。用它甚至可以镜像整个网
站,比起WebZip 这样的 Windows 程序强多了,而且不会因为你不付钱就在下载回来
的网页里强制插入广告。
虚拟终端:rxvt, xterm, gnome-terminal, mlterm, ...
X server: XFree86
窗口管理器:FVWM。编译加入了 libstroke。
中文输入:XSIM。被我修改过以适应 FVWM 的需要。另外推荐你还可以用 SCIM。
email 处理:Mutt + Postfix + fetchmail
看 PDF, PS, DJVU 文件:Acrobat Reader, xpdf, GhostScript, gv, djvu工具包和
netscape 插件。
看CAJ文档。我从来不看CAJ之类的文档,如果找不到PDF或PS,直接去图书馆借最好。

看网页:Mozilla, Phoenix, lynx。Mozilla-Xft 的显示效果比IE 好很多。
英汉字典:IBM智能词典,星际译王。
编辑网页:我用VIM 直接写 HTML。你如果想要图形方式的可以用其它的比如
screem, BlueFish。
登录其它 UNIX, Linux 机器:openSSH, telnet。 我喜欢用 openSSH 把其它机器的
X 程序通过 ssh 加密的隧道传到我机器上显示。
登录 Windows2000 server 的 display service: rdesktop,...我有一天试了一下,
不错。后来就没有用过了。
同步程序:rsync。我用 rsync 通过 ssh 来跟某些机器同步数据,或者做自己机器上
不同目录间的同步。
上BBS:rxvt(或任何一种终端) + telnet + chatbot(helloooo 机器人的程序)
QQ, ICQ: 我没有 QQ 或 ICQ。不过你可以用 Gaim, 它同时支持 QQ, ICQ 和很多其它
的即时通信方式。ICQ 用户也可以用 Licq。
放录像:MPlayer, RealPlayer。MPlayer 太好了,直接就可以放 VCD, DVD, divx,
wma, wmv ... 用 Windows 的同学都很羡慕我,说 Windows 要放这个需要大堆插件。
rm 最好还是用 realplayer 放,它也是免费的。
放音乐: xmms(mp3,ogg都可以), mpg321(放mp3), ogg123(放ogg)。mpg321 不如xmms
管理音乐文件那么方便,但是有时我还是用 mpg321 放 mp3 作为背景音乐,因为懒得
开一个xmms窗口 smile
游戏:我觉得 KDE 的那个 ksokoban(推箱子),很好玩 smile
看 Word 文档。请 Word 用户把文档全部转为 PDF 或 PS 再给我,文档里没有特殊的
格式干脆就用文本吧,何必那么麻烦。以前很奇怪的是,通知里本来没有什么特殊的
格式居然还要发doc附件的email。现在好了,我们系发通知都用文本,PDF,甚至图片
了 tongue
其它程序:还有很多我需要用而你不一定用得着的。比如,Doctor Scheme,
Scheme48, Scsh, kawa...这些程序只有 Doctor Scheme 有Windows版本。还有很多幕后工作但是你一般不察觉的:xinetd, telnetd, sshd, crond, atd, lpd, ... 他们
都比 Windows 的对应者强的多,或者根本没有对应者。
回复  

使用道具 举报

15#
 楼主| 发表于 14-7-2008 23:31:24 | 只看该作者
前一篇,是讲思想的,
为了论文而论文,不管有无作用,只是为了出文章而搞科研。
这就是为什么有很多所谓的“证券专家”发了大片的论文,但却不能从证券市场赚钱的原因
回复  

使用道具 举报

16#
 楼主| 发表于 14-7-2008 23:32:42 | 只看该作者
后一篇是讲技术的,
真正的高手不会随波逐流的。
对技术的理解很深。
正如投资方面的高手。。。:)
“行家一出手,就知有没有”。。。。


有的所谓的“证券专家”并不是真正的专家。。

[ 本帖最后由 kingsking 于 14-7-2008 21:11 编辑 ]
回复  

使用道具 举报

17#
发表于 15-7-2008 10:10:20 | 只看该作者
原帖由 kingsking 于 14-7-2008 17:49 发表
第二个问题。linux为什么比window稳定如此得多。

这是个永远具有争议而且没有标准答案的问题, 我从自己的经验来回答几点:

1. 如newgay所言,Windows和Linux/Unix的目标用户群不同。实际上,因为这点原因,几乎使这个问题本身失去存在的意义
2. Open Source的优势。 Windows下的软件多是闭源的,软件之与用户就是个黑盒子,你永远不知道这个黑盒子除了表面上你看到的行为外还偷偷摸摸干了什么勾当。而Open Source的世界,一切都是源代码,所谓源码面前了无秘密,即使一般用户不去检查,也总还有无数双专业的眼睛替我们盯着,这就使得一些偷鸡猫狗的行为无处遁形。
3. 但Open source也是一把双刃剑,骇客也可以从open source中找到漏洞发起攻击,但相比闭源系统的攻击而言,这更像明刀明枪的较量,因为双方掌握的信息对称,始终使得"邪不压正"。但在闭源的世界中,骇客的攻击更像背后的暗算,这就”明枪易躲,暗箭难防“了。
4. Open Source软件的生命比闭源软件长久, 一个Open Source的软件,只要还有人在用,就始终处于被维护的状态,商业软件一旦没有了利益而言,软件本身就会被立刻抛弃。这样的结果就是,Open Source的软件发展不快,功能不会花哨,但是会日趋稳定,商业软件根据市场需要,在功能,性能,稳定性,扩展性等方面会有不同表现。
5. 永远不要低估Windows, 微软里面关着的程序员们不是一群傻瓜,这样想的人才是真正的傻瓜。事实上,Windows及其之上的庞大软件集合代表了人类目前所能够达到的最高科技成就之一。
回复  

使用道具 举报

18#
 楼主| 发表于 15-7-2008 11:12:23 | 只看该作者
原帖由 coredump 于 15-7-2008 07:10 发表

这是个永远具有争议而且没有标准答案的问题, 我从自己的经验来回答几点:

1. 如newgay所言,Windows和Linux/Unix的目标用户群不同。实际上,因为这点原因,几乎使这个问题本身失去存在的意义
2. Open Source的 ...



受教了。thanks.

不过我始终觉得可靠的软件才是真正的软件。
正好前面有个帖子说的。
汽车不能每年爆炸一次。
(你可以说是因为用户不专业造成的,但是如果大量的用户都出现这种问题,软件的制造者难道没有责任吗,难道没有侵犯消费者权益吗??)

[ 本帖最后由 kingsking 于 15-7-2008 08:14 编辑 ]
回复  

使用道具 举报

19#
发表于 16-7-2008 10:21:25 | 只看该作者
原帖由 kingsking 于 15-7-2008 10:12 发表



受教了。thanks.

不过我始终觉得可靠的软件才是真正的软件。
正好前面有个帖子说的。
汽车不能每年爆炸一次。
(你可以说是因为用户不专业造成的,但是如果大量的用户都出现这种问题,软件的制造者难道没 ...


这样的结论是对软件的设计和生产方式没有深入了解造成的:
1. 不过我始终觉得可靠的软件才是真正的软件。
     按照这个定义,现在人类生活的社会还没有真正的软件。相对足够的可靠是可以的, Windows面对的用户群不需要1年才启动一次机器的可靠度。 对于那些需要苛刻可靠度的企业用户,Windows现在做的也不差。而且现代软件的规模和与硬件结合的复杂度而言,绝对不能把任何一次的故障都算到Windows操作系统上面。

2. 汽车不能每年爆炸一次。
    这是很流行,但是很不恰当的比喻。 汽车是硬件,它的设计和制造周期都很长,变动周期也很长。软件的真正设计就是包括分析,开发,编码和测试的全流程,但是软件的构建是极其廉价的。如果把某一品牌汽车生产总数和缺陷召回次数,交通事故次数的比例拿来和软件的装机数量,出错数量的比例做比较;尤其是拿错误修复的速度来比较的话,你就会惊讶于软件原来是如此可靠了  这不仅仅适合Windows,对所有大规模的软件产品都是如此。
3. Open Source的软件不意味着就是相对更安全和更可靠的,只不过这些软件出了错用户使没有权利去抱怨的,要么自己楼起袖子hacking code,要么等待。 因此,由于开发的模式完全不同,这样比较谁更可靠也没有完全中立公正的标准。

推荐阅读:《大教堂与集市》以及《敏捷软件开发, 原则,模式与实践》一书, 没有时间阅读全书的话也请阅读该书附录的2篇小品文章, 第一篇是讽刺小品,第二篇是著名的《源代码就是设计》, 读完之后相信会对这些问题豁然开朗。起码不会再用汽车爆炸和软件BUG来做比较了。

评分

参与人数 1威望 +30 收起 理由
kingsking + 30 能不能把这2个小品帖出来,我在网上找了很久 ...

查看全部评分

回复  

使用道具 举报

20#
 楼主| 发表于 16-7-2008 12:41:28 | 只看该作者
原帖由 coredump 于 16-7-2008 07:21 发表


这样的结论是对软件的设计和生产方式没有深入了解造成的:
1. 不过我始终觉得可靠的软件才是真正的软件。
     按照这个定义,现在人类生活的社会还没有真正的软件。相对足够的可靠是可以的, Windows面对的用户 ...



thanks,长见识了.
回复  

使用道具 举报

21#
 楼主| 发表于 16-7-2008 15:53:23 | 只看该作者

找到一篇,"软件就是设计"

源代码就是设计

Jack Reeves著

邓辉 译


本文摘自《敏捷软件开发:原则、模式与实践》(清华大学出版社,2003年9月版)。这是一篇伟大的论文,该文撰写于1992年,作者在当时就能有这样的反思,实在是非常了不起。

至今,我仍能记起当我顿悟并最终产生下面文章时所在的地方。那是1986年的夏天,我在加利福尼亚中国湖海军武器中心担任临时顾问。在这期间,我有幸参加了一个关于Ada的研讨会。讨论当中,有一位听众提出了一个具有代表性的问题,“软件开发者是工程师吗?”我不记得当时的回答,但是我却记得当时并没有真正解答这个问题。于是,我就退出讨论,开始思考我会怎样回答这样一个问题。现在,我无法肯定当时我为什么会记起几乎10年前曾经在Datamation杂志上阅读过的一篇论文,不过促使我记起的应该是后续讨论中的某些东西。这篇论文阐述了工程师为什么必须是好的作家(我记得该论文谈论就是这个问题——好久没有看了),但是我从该论文中得到的关键一点是:作者认为工程过程的最终结果是文档。换句话说,工程师生产的是文档,不是实物。其他人根据这些文档去制造实物。于是,我就在困惑中提出了一个问题,“除了软件项目正常产生的所有文档以外,还有可以被认为是真正的工程文档的东西吗?”我给出的回答是,“是的,有这样的文档存在,并且只有一份——源代码。”

把源代码看作是一份工程文档——设计——完全颠覆了我对自己所选择的职业的看法。它改变了我看待一切事情的方式。此外,我对它思考的越多,我就越觉得它阐明了软件项目常常遇到的众多问题。更确切地说,我觉得大多数人不理解这个不同的看法,或者有意拒绝它这样一个事实,就足以说明很多问题。几年后,我终于有机会把我的观点公开发表。C++ Journal中的一篇有关软件设计的论文促使我给编辑写了一封关于这个主题的信。经过几封书信交换后,编辑Livleen Singh同意把我关于这个主题的想法发表为一篇论文。下面就是这篇文章。
——Jack Reecves, December,22,2001

 

什么是软件设计?
©Jack W.Reeves, 1992

面向对象技术,特别是C++,似乎给软件界带来了不小的震动。出现了大量的论文和书籍去描述如何应用这项新技术。总的来说,那些关于面向对象技术是否只是一个骗局的问题已经被那些关于如何付出最小的努力即可获得收益的问题所替代。面向对象技术出现已经有一段时间了,但是这种爆炸式的流行却似乎有点不寻常。人们为何会突然关注它呢?对于这个问题,人们给出了各种各样的解释。事实上,很可能就没有单一的原因。也许,把多种因素的结合起来才能最终取得突破,并且这项工作正在进展之中。尽管如此,在软件革命的这个最新阶段中,C++本身看起来似乎成为了一个主要因素。同样,对于这个问题,很可能也存在很多种理由,不过我想从一个稍微不同的视角给出一个答案:C++之所以变得流行,是因为它使软件设计变得更容易的同时,也使编程变得更容易。

虽然这个解释好像有点奇特,但是它却是深思熟虑的结果。在这篇论文中,我就是想要关注一下编程和程序设计之间的关系。近10年来,我一直觉得整个软件行业都没有觉察到做出一个软件设计和什么是真正的软件设计之间的一个微妙的不同点。只要看到了这一点,我认为我们就可以从C++增长的流行趋势中,学到关于如何才能成为更好的软件工程师的意义深远的知识。这个知识就是,编程不是构建软件,而是设计软件。

几年前,我参见了一个讨论会,其中讨论到软件开发是否是一门工程学科的问题。虽然我不记得了讨论结果,但是我却记得它是如何促使我认识到:软件业已经做出了一些错误的和硬件工程的比较,而忽视了一些绝对正确的对比。其实,我认为我们不是软件工程师,因为我们没有认识到什么才是真正的软件设计。现在,我对这一点更是确信无疑。

任何工程活动的最终目标都是某些类型的文档。当设计工作完成时,设计文档就被转交给制造团队。该团队是一个和设计团队完全不同的群体,并且其技能也和设计团队完全不同。如果设计文档正确地描绘了一个完整的设计,那么制造团队就可以着手构建产品。事实上,他们可以着手构建该产品的许多实物,完全无需设计者的任何进一步的介入。在按照我的理解方式审查了软件开发的生命周期后,我得出一个结论:实际上满足工程设计标准的惟一软件文档,就是源代码清单。

对于这个观点,人们进行了很多的争论,无论是赞成的还是反对的都足以写成无数的论文。本文假定最终的源代码就是真正的软件设计,然后仔细研究了该假定带来的一些结果。我可能无法证明这个观点是正确的,但是我希望证明:它确实解释了软件行业中一些已经观察到的事实,包括C++的流行。

在把代码看作是软件设计所带来的结果中,有一个结果完全盖过了所有其他的结果。它非常重要并且非常明显,也正因为如此,对于大多数软件机构来说,它完全是一个盲点。这个结果就是:软件的构建是廉价的。它根本就不具有昂贵的资格;它非常的廉价,几乎就是免费的。如果源代码是软件设计,那么实际的软件构建就是由编译器和连接器完成的。我们常常把编译和连接一个完整的软件系统的过程称为“进行一次构建”。在软件构建设备上所进行的主要投资是很少的——实际需要的只有一台计算机、一个编辑器、一个编译器以及一个连接器。一旦具有了一个构建环境,那么实际的软件构建只需花费少许的时间。编译50 000行的C++程序也许会花费很长的时间,但是构建一个具有和50 000行C++程序同样设计复杂性的硬件系统要花费多长的时间呢?

把源代码看作是软件设计的另外一个结果是,软件设计相对易于创作,至少在机械意义上如此。通常,编写(也就是设计)一个具有代表性的软件模块(50至100行代码)只需花费几天的时间(对它进行完全的调试是另外一个议题,稍后会对它进行更多的讨论)。我很想问一下,是否还有任何其他的学科可以在如此短的时间内,产生出和软件具有同样复杂性的设计来,不过,首先我们必须要弄清出如何来度量和比较复杂性。然而,有一点是明显的,那就是软件设计可以 极为迅速地变得非常庞大。

假设软件设计相对易于创作,并且在本质上构建起来也没有什么代价,一个不令人吃惊的发现是,软件设计往往是难以置信的庞大和复杂。这看起来似乎很明显,但是问题的重要性却常常被忽视。学校中的项目通常具有数千行的代码。具有10 000行代码(设计)的软件产品被它们的设计者丢弃的情况也是有的。我们早就不再关注于简单的软件。典型的商业软件的设计都是由数十万行代码组成的。许多软件设计达到了上百万行代码。另外,软件设计几乎总是在不断地演化。虽然当前的设计可能只有几千行代码,但是在产品的生命期中,实际上可能要编写许多倍的代码。

尽管确实存在一些硬件设计,它们看起来似乎和软件设计一样复杂,但是请注意两个有关现代硬件的事实。第一,复杂的硬件工程成果未必总是没有错误的,在这一点上,它不存在像软件那样让我们相信的评判标准。多数的微处理器在发售时都具有一些逻辑错误:桥梁坍塌,大坝破裂,飞机失事以及数以千计的汽车和其他消费品被召回——所有的这些我们都记忆犹新,所有的这些都是设计错误的结果。第二,复杂的硬件设计具有与之对应的复杂、昂贵的构建阶段。结果,制造这种系统所需的能力限制了真正能够生产复杂硬件设计公司的数目。对于软件来说,没有这种限制。目前,已经有数以百计的软件机构和数以千计的非常复杂的软件系统存在,并且数量以及复杂性每天都在增长。这意味着软件行业不可能通过仿效硬件开发者找到针对自身问题的解决办法。倘若一定要说出有什么相同之处的话,那就是,当CAD和CAM可以做到帮助硬件设计者创建越来越复杂的设计时,硬件工程才会变得和软件开发越来越像。

设计软件是一种管理复杂性的活动。复杂性存在于软件设计本身之中,存在于公司的软件机构之中,也存在于整个软件行业之中。软件设计和系统设计非常相似。它可以跨越多种技术并且常常涉及多个学科分支。软件的规格说明往往不固定、经常快速变化,这种变化常常在正进行软件设计时发生。同样,软件开发团队也往往不固定,常常在设计过程的中间发生变化。在许多方面,软件都要比硬件更像复杂的社会或者有机系统。所有这些都使得软件设计成为了一个困难的并且易出错的过程。虽然所有这些都不是创造性的想法,但是在软件工程革命开始将近30年后的今天,和其他工程行业相比,软件开发看起来仍然像是一种未受过训练(undisciplined)的技艺。

一般的看法认为,当真正的工程师完成了一个设计,不管该设计有多么复杂,他们都非常确信该设计是可以工作的。他们也非常确信该设计可以使用公认的技术建造出来。为了做到这一点,硬件工程师花费了大量的时间去验证和改进他们的设计。例如,请考虑一个桥梁设计。在这样一个设计实际建造之前,工程师会进行结构分析——他们建立计算机模型并进行仿真,他们建立比例模型并在风洞中或者用其他一些方法进行测试。简而言之,在建造前,设计者会使用他们能够想到的一切方法来证实设计是正确的。对于一架新型客机的设计来说,情况甚至更加严重;必须要构建出和原物同尺寸的原型,并且必须要进行飞行测试来验证设计中的种种预计。

对于大多数人来说,软件中明显不存在和硬件设计同样严格的工程。然而,如果我们把源代码看做是设计,那么就会发现软件工程师实际上对他们的设计做了大量的验证和改进。软件工程师不把这称为工程,而称它为测试和调试。大多数人不把测试和调试看作是真正的“工程”——在软件行业中肯定没有被看作是。造成这种看法的原因,更多的是因为软件行业拒绝把代码看作设计,而不是任何实际的工程差别。事实上,试验模型、原型以及电路试验板已经成为其他工程学科公认的组成部分。软件设计者之所以不具有或者没有使用更多的正规方法来验证他们的设计,是因为软件构建周期的简单经济规律。

第一个启示:仅仅构建设计并测试它比做任何其他事情要廉价一些,也简单一些。我们不关心做了多少次构建——这些构建在时间方面的代价几乎为零,并且如果我们丢弃了构建,那么它所使用的资源完全可以重新利用。请注意,测试并非仅仅是让当前的设计正确,它也是改进设计的过程的一部分。复杂系统的硬件工程师常常建立模型(或者,至少他们把设计用计算机图形直观地表现出来)。这就使得他们获得了对于设计的一种“感觉”,而仅仅去检查设计是不可能获得这种感觉的。对于软件来说,构建这样一个模型既不可能也无必要。我们仅仅构建产品本身。即使正规的软件验证可以和编译器一样自动进行,我们还是会去进行构建/测试循环。因此,正规的验证对于软件行业来说从来没有太多的实际意义。

这就是现今软件开发过程的现实。数量不断增长的人和机构正在创建着更加复杂的软件设计。这些设计会被先用某些编程语言编写出来,然后通过构建/测试循环进行验证和改进。过程易于出错,并且不是特别的严格。相当多的软件开发人员并不想相信这就是过程的运作方式,也正因为这一点,使问题变得更加复杂。
当前大多数的软件过程都试图把软件设计的不同阶段分离到不同的类别中。必须要在顶层的设计完成并且冻结后,才能开始编码。测试和调试只对清除建造错误是必要的。程序员处在中间位置,他们是软件行业的建造工人。许多人认为,如果我们可以让程序员不再进行“随意的编码(hacking)”并且按照交给他们的设计去进行构建(还要在过程中,犯更少的错误),那么软件开发就可以变得成熟,从而成为一门真正的工程学科。但是,只要过程忽视了工程和经济学事实,这就不可能发生。

例如,任何一个现代行业都无法忍受在其制造过程中出现超过100%的返工率。如果一个建造工人常常不能在第一次就构建正确,那么不久他就会失业。但是在软件业中,即使最小的一块代码,在测试和调试期间,也很可能会被修正或者完全重写。在一个创造性的过程中(比如:设计),我们认可这种改进不是制造过程的一部分。没有人会期望工程师第一次就创建出完美的设计。即使她做到了,仍然必须让它经受改进过程,目的就是为了证明它是完美的。
即使我们从日本的管理方法中没有学到任何东西,我们也应该知道由于在过程中犯错误而去责备工人是无益于提高生产率的。我们不应该不断地强迫软件开发去符合不正确的过程模型,相反,我们需要去改进过程,使之有助于而不是阻碍产生更好的软件。这就是“软件工程”的石蕊测试。工程是关于你如何实施过程的,而不是关于是否需要一个CAD系统来产生最终的设计文档。

关于软件开发有一个压倒性的问题,那就是一切都是设计过程的一部分。编码是设计,测试和调试是设计的一部分,并且我们通常认为的设计仍然是设计的一部分。虽然软件构建起来很廉价,但是设计起来却是难以置信的昂贵。软件非常的复杂,具有众多不同方面的设计内容以及它们所导致的设计考虑。问题在于,所有不同方面的内容是相互关连的(就像硬件工程中的一样)。我们希望顶层设计者可以忽视模块算法设计的细节。同样,我们希望程序员在设计模块内部算法时不必考虑顶层设计问题。糟糕的是,一个设计层面中的问题侵入到了其他层面之中。对于整个软件系统的成功来说,为一个特定模块选择算法可能和任何一个更高层次的设计问题同样重要。在软件设计的不同方面内容中,不存在重要性的等级。最低层模块中的一个不正确设计可能和最高层中的错误一样致命。软件设计必须在所有的方面都是完整和正确的,否则,构建于该设计基础之上的所有软件都会是错误的。

为了管理复杂性,软件被分层设计。当程序员在考虑一个模块的详细设计时,可能还有数以百计的其他模块以及数以千计的细节,他不可能同时顾及。例如,在软件设计中,有一些重要方面的内容不是完全属于数据结构和算法的范畴。在理想情况下,程序员不应该在设计代码时还得去考虑设计的这些其他方面的内容。

但是,设计并不是以这种方式工作的,并且原因也开始变得明朗。软件设计只有在其被编写和测试后才算完成。测试是设计验证和改进过程的基础部分。高层结构的设计不是完整的软件设计;它只是细节设计的一个结构框架。在严格地验证高层设计方面,我们的能力是非常有限的。详细设计最终会对高层设计造成的影响至少和其他的因素一样多(或者应该允许这种影响)。对设计的各个方面进行改进,是一个应该贯穿整个设计周期的过程。如果设计的任何一个方面内容被冻结在改进过程之外,那么对于最终设计将会是糟糕的或者甚至无法工作这一点,就不会觉得奇怪了。

如果高层的软件设计可以成为一个更加严格的工程过程,那该有多好呀,但是软件系统的真实情况不是严格的。软件非常的复杂,它依赖于太多的其他东西。或许,某些硬件没有按照设计者认为的那样工作,或者一个库例程具有一个文档中没有说明的限制。每一个软件项目迟早都会遇到这些种类的问题。这些种类的问题会在测试期间被发现(如果我们的测试工作做得好的话),之所以如此是因为没有办法在早期就发现它们。当它们被发现时,就迫使对设计进行更改。如果我们幸运,那么对设计的更改是局部的。时常,更改会波及到整个软件设计中的一些重要部分(莫非定律)。当受到影响的设计的一部分由于某种原因不能更改时,那么为了能够适应影响,设计的其他部分就必须得遭到破坏。这通常导致的结果就是管理者所认为的“随意编码”,但是这就是软件开发的现实。

例如,在我最近工作的一个项目中,发现了模块A的内部结构和另一个模块B之间的一个时序依赖关系。糟糕的是,模块A的内部结构隐藏在一个抽象体的后面,而该抽象体不允许以任何方法把对模块B的调用合入到它的正确调用序列中。当问题被发现时,当然已经错过了更改A的抽象体的时机。正如所料,所发生的就是把一个日益增长的复杂的“修正”集应用到A的内部设计上。在我们还没有安装完版本1时,就普遍感觉到设计正在衰退。每一个新的修正很可能都会破坏一些老的修正。这是一个正规的软件开发项目。最后,我和我的同事决定对设计进行更改,但是为了得到管理层的同意,我们不得不自愿无偿加班。

在任何一般规模的软件项目中,肯定会出现像这样的问题,尽管人们使用了各种方法来防止它的出现,但是仍然会忽视一些重要的细节。这就是工艺和工程之间的区别。如果经验可以把我们引向正确的方向,这就是工艺。如果经验只会把我们带入未知的领域,然后我们必须使用一开始所使用的方法并通过一个受控的改进过程把它变得更好,这就是工程。
我们来看一下只是作为其中很小一点的内容,所有的程序员都知道,在编码之后而不是之前编写软件设计文档会产生更加准确的文档。现在,原因是显而易见的。用代码来表现的最终设计是惟一一个在构建/测试循环期间被改进的东西。在这个循环期间,初始设计保持不变的可能性和模块的数量以及项目中程序员的数量成反比。它很快就会变得毫无价值。

在软件工程中,我们非常需要在各个层次都优秀的设计。我们特别需要优秀的顶层设计。初期的设计越好,详细设计就会越容易。设计者应该使用任何可以提供帮助的东西。结构图表、Booch 图、状态表、PDL等等——如果它能够提供帮助,就去使用它。但是,我们必须记住,这些工具和符号都不是软件设计。最后,我们必须创建真正的软件设计,并且是使用某种编程语言完成的。因此,当我们得出设计时,我们不应该害怕对它们进行编码。在必要时,我们必须应该乐于去改进它们。

至今,还没有任何设计符号可以同时适用于顶层设计和详细设计。设计最终会表现为以某种编程语言编写的代码。这意味着在详细设计可以开始前,顶层设计符号必须被转换成目标编程语言。这个转换步骤耗费时间并且会引入错误。程序员常常是对需求进行回顾并且重新进行顶层设计,然后根据它们的实际去进行编码,而不是从一个可能没有和所选择的编程语言完全映射的符号进行转换。这同样也是软件开发的部分现实情况。

也许,如果让设计者本人来编写初始代码,而不是后来让其他人去转换语言无关的设计,就会更好一些。我们所需要的是一个适用于各个层次设计的统一符号。换句话说,我们需要一种编程语言,它同样也适用于捕获高层的设计概念。C++正好可以满足这个要求。C++是一门适用于真实项目的编程语言,同时它也是一个非常具有表达力的软件设计语言。C++允许我们直接表达关于设计组件的高层信息。这样,就可以更容易地进行设计,并且以后可以更容易地改进设计。由于它具有更强大的类型检查机制,所以也有助于检测到设计中的错误。这就产生了一个更加健壮的设计,实际上也是一个更好的工程化设计。

最后,软件设计必须要用某种编程语言表现出来,然后通过一个构建/测试循环对其进行验证和改进。除此之外的任何其他主张都完全没有用。请考虑一下都有哪些软件开发工具和技术得以流行。结构化编程在它的时代被认为是创造性的技术。Pascal使之变得流行,从而自己也变得流行。面向对象设计是新的流行技术,而C++是它的核心。现在,请考虑一下那些没有成效的东西。CASE工具,流行吗?是的;通用吗?不是。结构图表怎么样?情况也一样。同样地,还有Warner-Orr图、Booch图、对象图以及你能想起的一切。每一个都有自己的强项,以及惟一的一个根本弱点——它不是真正的软件设计。事实上,惟一一个可以被普遍认可的软件设计符号是PDL,而它看起来像什么呢?

这表明,在软件业的共同潜意识中本能地知道,编程技术,特别是实际开发所使用的编程语言的改进和软件行业中任何其他东西相比,具有压倒性的重要性。这还表明,程序员关心的是设计。当出现更加具有表达力的编程语言时,软件开发者就会使用它们。

同样,请考虑一下软件开发过程是如何变化的。从前,我们使用瀑布式过程。现在,我们谈论的是螺旋式开发和快速原型。虽然这种技术常常被认为可以“消除风险”以及“缩短产品的交付时间”,但是它们事实上也只是为了在软件的生命周期中更早地开始编码。这是好事。这使得构建/测试循环可以更早地开始对设计进行验证和改进。这同样也意味着,顶层软件设计者很有可能也会去进行详细设计。

正如上面所表明的,工程更多的是关于如何去实施过程的,而不是关于最终产品看起来的像什么。处在软件行业中的我们,已经接近工程师的标准,但是我们需要一些认知上的改变。编程和构建/测试循环是工程软件过程的中心。我们需要以像这样的方式去管理它们。构建/测试循环的经济规律,再加上软件系统几乎可以表现任何东西的事实,就使得我们完全不可能找出一种通用的方法来验证软件设计。我们可以改善这个过程,但是我们不能脱离它。

最后一点:任何工程设计项目的目标是一些文档产品。显然,实际设计的文档是最重要的,但是它们并非惟一要产生的文档。最终,会期望某些人来使用软件。同样,系统很可能也需要后续的修改和增强。这意味着,和硬件项目一样,辅助文档对于软件项目具有同样的重要性。虽然暂时忽略了用户手册、安装指南以及其他一些和设计过程没有直接联系的文档,但是仍然有两个重要的需求需要使用辅助设计文档来解决。

辅助文档的第一个用途是从问题空间中捕获重要的信息,这些信息是不能直接在设计中使用的。软件设计需要创造一些软件概念来对问题空间中的概念进行建模。这个过程需要我们得出一个对问题空间中概念的理解。通常,这个理解中会包含一些最后不会被直接建模到软件空间中的信息,但是这些信息却仍然有助于设计者确定什么是本质概念以及如何最好地对它们建模。这些信息应该被记录在某处,以防以后要去更改模型。

对辅助文档的第二个重要需要是对设计的某些方面的内容进行记录,而这些方面的内容是难以直接从设计本身中提取的。它们既可以是高层方面的内容,也可以是低层方面内容。对于这些方面内容中的许多来说,图形是最好的描述方式。这就使得它们难以作为注释包含在代码中。这并不是说要用图形化的软件设计符号代替编程语言。这和用一些文本描述来对硬件科目的图形化设计文档进行补充没有什么区别。

决不要忘记,是源代码决定了实际设计的真实样子,而不是辅助文档。在理想情况下,可以使用软件工具对源代码进行后期处理并产生出辅助文档。对于这一点,我们可能期望过高了。次一点的情况是,程序员(或者技术方面的编写者)可以使用一些工具从源代码中提取出一些特定的信息,然后可以把这些信息以其他一些方式文档化。毫无疑问,手工对这种文档保持更新是困难的。这是另外一个支持需要更具表达力的编程语言的理由。同样,这也是一个支持使这种辅助文档保持最小并且尽可能在项目晚期才使之变成正式的理由。同样,我们可以使用一些好的工具;不然的话,我们就得求助于铅笔、纸以及黑板。

总结如下:

 实际的软件运行于计算机之中。它是存储在某种磁介质中的0和1的序列。它不是使用C++语言(或者其他任何编程语言)编写的程序。
 程序清单是代表软件设计的文档。实际上把软件设计构建出来的是编译器和连接器。
 构建实际软件设计的廉价程度是令人难以置信的,并且它始终随着计算机速度的加快而变得更加廉价。
 设计实际软件的昂贵程度是令人难以置信的,之所以如此,是因为软件的复杂性是令人难以置信的,并且软件项目的几乎所有步骤都是设计过程的一部分。
 编程是一种设计活动——好的软件设计过程认可这一点,并且在编码显得有意义时,就会毫不犹豫的去编码。
 编码要比我们所认为的更频繁地显现出它的意义。通常,在代码中表现设计的过程会揭示出一些疏漏以及额外的设计需要。这发生的越早,设计就会越好。
 因为软件构建起来非常廉价,所以正规的工程验证方法在实际的软件开发中没有多大用处。仅仅建造设计并测试它要比试图去证明它更简单、更廉价。
 测试和调试是设计活动——对于软件来说,它们就相当于其他工程学科中的设计验证和改进过程。好的软件设计过程认可这一点,并且不会试图去减少这些步骤。
 还有一些其他的设计活动——称它们为高层设计、模块设计、结构设计、构架设计或者诸如此类的东西。好的软件设计过程认可这一点,并且慎重地包含这些步骤。
 所有的设计活动都是相互影响的。好的软件设计过程认可这一点,并且当不同的设计步骤显示出有必要时,它会允许设计改变,有时甚至是根本上的改变,
 许多不同的软件设计符号可能是有用的——它们可以作为辅助文档以及工具来帮助简化设计过程。它们不是软件设计。
 软件开发仍然还是一门工艺,而不是一个工程学科。主要是因为缺乏验证和改善设计的关键过程中所需的严格性。
 最后,软件开发的真正进步依赖于编程技术的进步,而这又意味着编程语言的进步。C++就是这样的一个进步。它已经取得了爆炸式的流行,因为它是一门直接支持更好的软件设计的主流编程语言。
 C++在正确的方向上迈出了一步,但是还需要更大的进步。


后 记

当我回顾几乎10年前所写的东西时,有几点让我印象深刻。第一点(也是和本书最有关的)是,现今,我甚至比那时更加确信我试图去阐述的要点在本质上的正确性。随后的一些年中,许多流行的软件开发方法增强了其中的许多观点,这支持了我的信念。最明显的(或许也是最不重要的)是面向对象编程语言的流行。现在,除了C++外,出现了许多其他的面向对象编程语言。另外,还有一些面向对象设计符号,比如:UML。我关于面向对象语言之所以得到流行是因为它们允许在代码中直接表现出更具表达力的设计的论点,现在看来有点过时了。

重构的概念——重新组织代码基础,使之更加健壮和可重用——同样也和我的关于设计的所有方面的内容都应该是灵活的并且在验证设计时允许改变的论点相似。重构只是提供了一个过程以及一组如何去改善已经被证实具有缺陷的设计的准则。

最后,文中有一个敏捷开发的总的概念。虽然极限编程是这些新方法中最知名的一个,但是它们都具有一个共同点:它们都承认源代码是软件开发工作中的最重要的产品。

另一方面,有一些观点——其中的一些我在论文中略微谈到过——在随后的一些年中,对我来说变得更加重要。第一个是构架,或者顶层设计的重要性。在论文中,我认为构架只是设计的一部分内容,并且在构建/测试循环对设计进行验证的过程中,构架需要保持可变。这在本质上是正确的,但是回想起来,我认为我的想法有点不成熟。虽然构建/测试循环可能揭示出构架中的问题,但是更多的问题是常常由于改变需求而表现出来的。 一般来说,设计软件是困难的,并且新的编程语言,比如:Java或者C++,以及图形化的符号,比如:UML,对于不知道如何有效地使用它的人来说,都没有多大的帮助。此外,一旦一个项目基于一个构架构建了大量的代码,那么对该构架进行基础性的更改,常常相当于丢弃掉该项目并重新开始一个,这就意味着该项目没有出现过。即使项目和机构在根本上接受了重构的概念,但是他们通常仍然不愿意去做一些看起来就像是完全重写的事情。这意味着第一次就把它作对(或者至少是接近对)是重要的,并且项目变得越大,就越要如此。幸运的是,软件设计模式有助于解决这方面问题。

还有其他一些方面的内容,我认为需要更多地强调一下,其中之一就是辅助文档,尤其是构架方面的文档。虽然源代码就是设计,但是试图从源代码中得出构架,可能是一个令人畏惧的体验。在论文中,我希望能够出现一些软件工具来帮助软件开发者自动地维护来自源代码的辅助文档。我几乎已经放弃了这个希望。一个好的面向对象构架通常可以使用几幅图以及少许的十几页文本描述出来。不过,这些图(和文本)必须集中于设计中的关键类和关系。糟糕的是,对于软件设计工具可能会变得足够聪明,以至于可以从源代码的大量细节中提取出这些重要方面的内容这一点,我没有看到任何真正的希望。这意味着还得必须由人来编写和维护这种文档。我仍然认为,在源代码完成后,或者至少是在编写源代码的同时去编文档,要比在编写源代码之前去编写文档更好一些。

最后,我在论文的最后谈到了C++是编程——并且因此是软件设计——艺术的一个进步,但是还需要更大的进步。就算我完全没有看到语言中出现任何真正的编程进步来挑战C++的流行,那么在今天,我会认为这一点甚至要比我首次编写它时更加正确。

——Jack Reeves, 2002年1月1日

评分

参与人数 1威望 +30 收起 理由
coredump + 30 谢谢分享! 我有纸质书,没有此书电子版

查看全部评分

回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 17-11-2024 15:45 , Processed in 0.043552 second(s), 37 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表