﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-faintbear-随笔分类-收藏</title><link>http://www.blogjava.net/faintbear/category/712.html</link><description>小风嗖嗖的刮着......</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 13:02:42 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 13:02:42 GMT</pubDate><ttl>60</ttl><item><title>Linux简史(转)</title><link>http://www.blogjava.net/faintbear/archive/2006/01/16/28243.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Mon, 16 Jan 2006 15:24:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2006/01/16/28243.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/28243.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2006/01/16/28243.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/28243.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/28243.html</trackback:ping><description><![CDATA[<FONT size=2>&nbsp;</FONT>
<P></P>
<H1 align=center><FONT size=2>Linux简史</FONT></H1>
<DIV class=author_info>
<P align=center><FONT size=2><STRONG>原著：Ragib Hasan</STRONG><BR></FONT><I><FONT size=2>Department of Computer Science<BR>University of Illinois at Urbana-Champaign</FONT></I></P>
<P align=center><STRONG><FONT size=2>翻译：王晓林</FONT></STRONG></P>
<P><I><FONT size=2>v2.2.0<BR>作于：2002年7月<BR>译于：2006年1月</FONT></I></P></DIV><BR>
<H2><A name=SECTION00010000000000000000><FONT size=2>目录</FONT></A><FONT size=2> </FONT></H2><!--Table of Contents-->
<UL class=TofC>
<LI><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.html#SECTION00020000000000000000" name=tex2html21><FONT size=2>混沌初开</FONT></A><FONT size=2> </FONT></LI>
<LI><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.html#SECTION00030000000000000000" name=tex2html22><FONT size=2>呱呱坠地</FONT></A><FONT size=2> </FONT></LI>
<LI><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.html#SECTION00040000000000000000" name=tex2html23><FONT size=2>冲突与发展</FONT></A><FONT size=2> </FONT></LI>
<LI><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.html#SECTION00050000000000000000" name=tex2html24><FONT size=2>风雨十年</FONT></A><FONT size=2> </FONT>
<UL>
<LI><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.html#SECTION00051000000000000000" name=tex2html25><FONT size=2>Linux桌面应用的崛起</FONT></A><FONT size=2> </FONT></LI>
<LI><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.html#SECTION00052000000000000000" name=tex2html26><FONT size=2>Linux在第三世界</FONT></A><FONT size=2> </FONT></LI>
<LI><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.html#SECTION00053000000000000000" name=tex2html27><FONT size=2>从桌面系统到超级计算机</FONT></A><FONT size=2> </FONT></LI>
<LI><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.html#SECTION00054000000000000000" name=tex2html28><FONT size=2>道路在延伸</FONT></A><FONT size=2> </FONT></LI></UL><BR></LI>
<LI><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.html#SECTION00060000000000000000" name=tex2html29><FONT size=2>穿黑色燕尾服的小家伙：Linux吉祥物</FONT></A><FONT size=2> </FONT></LI>
<LI><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.html#SECTION00070000000000000000" name=tex2html30><FONT size=2>趣事</FONT></A><FONT size=2> </FONT></LI>
<LI><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.html#SECTION00080000000000000000" name=tex2html31><FONT size=2>年谱</FONT></A><FONT size=2> </FONT></LI>
<LI><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.html#SECTION00090000000000000000" name=tex2html32><FONT size=2>参考链接</FONT></A><FONT size=2> </FONT></LI>
<LI><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.html#SECTION000100000000000000000" name=tex2html33><FONT size=2>鸣谢与版权声明</FONT></A><FONT size=2> </FONT></LI></UL><!--End of Table of Contents-->
<P><FONT size=2></FONT></P>
<H1><A name=SECTION00020000000000000000></A><A name=sec:beginning></A><BR><FONT size=2>混沌初开 </FONT></H1>
<P><FONT size=2>那是在一九九一年，令人痛苦难耐的冷战渐渐走到了尽头。和平安详的空气开始升起在地平线。在计算科学领域，随着强大硬件的推出，计算机的极限能力已超出了我们的想象，一个辉煌的未来似乎已渐露端倪。 </FONT></P>
<P><FONT size=2>但还是缺了点儿什么。在操作系统领域，存在着一片巨大的空白。 </FONT></P>
<P><FONT size=2>一方面，DOS还统治着庞大的个人电脑王国。比尔盖茨花$50,000从一个西雅图黑客手中买来DOS。之后，靠着聪明的市场策略，这个简陋的操作系统悄悄渗透到了世界的每一个角落。PC用户没有其它的选择。苹果机虽好，但它的天价没人能承受得起。它和大众需求保持着遥不可及的距离。 </FONT></P>
<P><FONT size=2>计算领域的另一个阵营是UNIX世界。但UNIX更是贵不可攀。为了追求高额利润，UNIX销售商把价格抬得足以吓跑随便哪个PC用户。贝尔实验室曾慷慨地提供UNIX的源代码给大学。但现在，这些源代码被小心地看管起来，不再对外公开。更令全球PC用户心烦的是，软件市场的大玩家们没能为解决这一问题提供个有效的方案。 </FONT></P>
<P><FONT size=2>MINIX似乎是个选择。它是在荷兰当教授的美国人Andrew S. Tanenbaum从零开始编写出来的。他写MINIX的目的是为了向学生讲授操作系统的内部工作原理。MINIX的设计面向当时最为流行的Intel 8086微处理器。 </FONT></P>
<P><FONT size=2>作为一个操作系统，MINIX算不上一流。但它的好处是你能得到它的源代码。只要你有Tanenbaum写的《操作系统：设计与实现》这本书，你就能得到那12,000行用C和汇编写的源码。头一次，程序员或黑客可以有机会读一读操作系统的源码--这种被软件商严加看管的东西。 Tanenbaum用详尽简洁的笔触探讨了编写操作系统的艺术。他是个一流的作者，迷住了一批当时计算机领域最聪明的大脑。全世界学计算机的学生都在钻研这本书，通过读它的源码来了解他们电脑里运行的MINIX操作系统。 </FONT></P>
<P><FONT size=2>Linus Torvalds就是这些学生中的一个。 </FONT></P>
<P><FONT size=2></FONT></P>
<H1><A name=SECTION00030000000000000000></A><A name=sec:born></A><BR><FONT size=2>呱呱坠地 </FONT></H1>
<P><FONT size=2>在1991年，Linus Benedict Torvalds还是个芬兰学生，在赫尔辛基大学念计算机专业二年级。同时他也是个自学成才的黑客。这个长着沙滩黄头发、说话软绵绵的二十一岁芬兰帅哥喜欢折腾他的电脑，把它不断推向能力的极限。但他缺少一个合适的操作系统来满足他如此专业的需求。MINIX不错，可它只适合学生，是个教学工具，而不是一个强大的实战系统。 </FONT></P>
<P><FONT size=2>当时，全世界的程序虫们都很看好Richard Stallman的GNU项目---一个致力于推出自由、高质量软件的运动。在计算科学的王国里，Stallman是个倍受尊崇的神话式英雄。他令人景仰的职业生涯是从大名鼎鼎的MIT人工智能实验室开始的。七十年代中后期，他在那里开发出了著名的Emacs编辑器。八十年代早期，商业软件公司从人工智能实验室吸引走了绝大多数优秀的程序员，并和他们签署了严格的保密合同。Stallman为此大大不爽。他认为软件和其它产品不同，在复制和修改方面它不该受到任何限制。只有这样，才能开发出更好更强的软件。1983年，他在著名的《GNU宣言》中，向世人宣告了GNU项目的启动，开始了贯彻其哲学的自由软件运动（顺带一句，GNU一词是‘GNU's Not Unix’的递归缩写）。为了最终实现开发出一个自由操作系统的梦想，他得先制造些工具。于是，在1984年初，Stallman开始创作一个令商业企业程序员叹服的作品--GNU C编译器（gcc）。他出神入化的技术天才，令所有商业软件程序员自愧不如。gcc被公认为世界上最高效最强健的编译器之一。 </FONT></P>
<DIV align=center><A name=fig:rms></A><A name=21></A>
<TABLE>
<CAPTION align=bottom><FONT size=2>Richard Stallman，GNU项目的创始人</FONT></CAPTION>
<TBODY>
<TR>
<TD>
<DIV align=center><FONT size=2><IMG src="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/figs/stallman.jpg"> </FONT></DIV></TD></TR></TBODY></TABLE></DIV><FONT size=2>到1991年，GNU项目已经开发出了众多的工具软件。大家期待已久的GNU C编译器也问世了。但自由操作系统还没有。MINIX也是受版权约束的（后来，在2000年4月，Tanenbaum在BSD许可证下发布了自由的MINIX）。GNU操作系统内核--HURD--还在开发之中，几年之内还不可能面世。 </FONT>
<P><FONT size=2>拖了这么久，终于该说说Linus了。 </FONT></P>
<P><FONT size=2>1991年8月25号，Linus在MINIX新闻组发出了历史性的一贴... </FONT></P>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE>
<TABLE cellPadding=3>
<TBODY>
<TR>
<TD align=left><CODE><FONT size=2>From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)</FONT></CODE></TD></TR>
<TR>
<TD align=left><CODE><FONT size=2>Newsgroups: comp.os.minix</FONT></CODE></TD></TR>
<TR>
<TD align=left><CODE><FONT size=2>Subject: What would you like to see most in minix?</FONT></CODE></TD></TR>
<TR>
<TD align=left><CODE><FONT size=2>Summary: small poll for my new operating system</FONT></CODE></TD></TR>
<TR>
<TD align=left><CODE><FONT size=2>Message-ID: &lt;1991Aug25.205708.9541@klaava.Helsinki.FI&gt;</FONT></CODE></TD></TR>
<TR>
<TD align=left><CODE><FONT size=2>Date: 25 Aug 91 20:57:08 GMT</FONT></CODE></TD></TR>
<TR>
<TD align=left><CODE><FONT size=2>Organization: University of Helsinki</FONT></CODE></TD></TR>
<TR>
<TD align=left><FONT size=2>&nbsp;</FONT></TD></TR></TBODY></TABLE></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>Hello，各位使用minix的朋友， </FONT></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>我正在写一个基于386（486）AT机器的（自由）操作系统（只是出于爱好，不会做得象gnu那么大、那么专业）。我从四月份开始酝酿，现在已经做得差不多了。我现在想知道一些你们对minix的看法，它哪点好？哪点不好？因为我这个操作系统和 minix多少有点儿类似（文件系统采用同样的物理布局（因现实原因），其它方面也有类似的地方）。我已经把bash（1.08）和gcc（1.40）移植过来了，它们好象还工作。这意味着在下面几个月里，我将给它加上更多实际的功能。所以我想知道大家都希望它有哪些功能。欢迎多提建议，但我不敢保证能实现你的建议 :-) <BR><CODE>Linus (torvalds@kruuna.helsinki.fi)</CODE> </FONT></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>PS. 没错，它不包含任何minix的代码，而且它有一个多线程文件系统。它现在不能在其它硬件上转（因为用了386任务切换机制，等等），而且除了AT硬盘，它基本上不支持任何其它硬件。这就是我的全部了 :-(。 </FONT></BLOCKQUOTE>
<P><FONT size=2>从这个帖子不难看出，Linus自己并没预料到他的小创造将有本事改变整个计算科学领域。1991年9月中旬，Linux 0.01版问世了，并且被放到了网上。它立即引起了人们的注意。源代码被下载、测试、修改，最终被反馈给Linus。10 月5号，0.02版出来了，同时伴随着Linus著名的声明： </FONT></P>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE>
<TABLE cellPadding=3>
<TBODY>
<TR>
<TD align=left><CODE><FONT size=2>From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)</FONT></CODE></TD></TR>
<TR>
<TD align=left><CODE><FONT size=2>Newsgroups: comp.os.minix</FONT></CODE></TD></TR>
<TR>
<TD align=left><CODE><FONT size=2>Subject: Free minix-like kernel sources for 386-AT</FONT></CODE></TD></TR>
<TR>
<TD align=left><CODE><FONT size=2>Message-ID: &lt;1991Oct5.054106.4647@klaava.Helsinki.FI&gt;</FONT></CODE></TD></TR>
<TR>
<TD align=left><CODE><FONT size=2>Date: 5 Oct 91 05:41:06 GMT</FONT></CODE></TD></TR>
<TR>
<TD align=left><CODE><FONT size=2>Organization: University of Helsinki</FONT></CODE></TD></TR>
<TR>
<TD align=left><FONT size=2>&nbsp;</FONT></TD></TR></TBODY></TABLE></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>你在怀念minix-1.1时代的美好时光吗？那时你自己写着驱动，充满了成就感。现在没什么好项目可做了，是吗？你在拚命啃一个操作系统，修改它以满足你自己的需要，是吗？现在minix已经没什么需要你去改进的了，你为此怅然若失，是吗？没机会再熬通宵去改进一个小程序了，是吗？如果是这样的话，那这个帖子就是给你的 :-) </FONT></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>一个月（？）前我曾经提到过，我正在一个AT-386计算机上开发一个自由版本的、类似minix的操作系统。现在它终于可以用了（尽管未必能满足你的期待）。我乐意把源代码公开出来，让它传播得更广。它现在仅仅是0.02版（外加一个（很小的）补丁）。但是我已经成功地在它上面跑了 bash/gcc/gnu-make/gnu-sed/compress等程序。我这个小宝贝儿的源程序在 nic.funet.fi (128.214.6.100) 下面的 /pub/OS/Linux 目录中可以找到。该目录中还有些 README 文件，还有几个在linux下能工作的可执行文件（bash，update和gcc，你还要求些什么呢 :-)。完整的内核源代码都在这儿了，因为没有用到minix 的源程序。函数库的源程序只是部分开放，所以目前还不能提供出来。拿到源代码后，直接编译就行了。编译完就能转了。哈哈。可执行程序（bash和gcc）的源代码可以在同一网站的/pub/gnu目录里找到。 </FONT></BLOCKQUOTE><FONT size=2>几周以后，Linux 0.03版发布了。12月份，0.10版发布了。这时的Linux还显得很简陋。它只能支持AT硬盘，而且不用登录（启动就进bash）。0.11版有了不少改进，可以支持多国语言键盘、软驱、VGA、EGA、Hercules等等。Linux的版本号从0.12直接上升到了0.95、0.96......不久，Linux的源代码就通过在芬兰和其它一些地方的FTP站点传遍了全世界。 </FONT>
<P></P>
<H1><A name=SECTION00040000000000000000></A><A name=sec:confrontation></A><BR><FONT size=2>冲突与发展 </FONT></H1>
<DIV align=center><A name=fig:laptop></A><A name=41></A>
<TABLE>
<CAPTION align=bottom><FONT size=2>Linus在展示一台Linux笔记本电脑</FONT></CAPTION>
<TBODY>
<TR>
<TD>
<DIV align=center><FONT size=2><IMG src="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/figs/laptop.jpg"> </FONT></DIV></TD></TR></TBODY></TABLE></DIV><FONT size=2>不久，Linus开始面对挑战。他面对的不是别人，正是Andrew Tanenbaum，那个开发出MINIX的伟大教师。在给Linus的一个回贴中，Tanenbaum写到： </FONT>
<BLOCKQUOTE><FONT size=2>“我还是坚持我的观点，在1991年还设计这样一个整体架构的内核是个根本性的错误。你该庆幸不是我的学生。这么个设计，在我这儿你得不了高分 :-)” <BR>(Andrew Tanenbaum to Linus Torvalds) </FONT></BLOCKQUOTE><FONT size=2>Linus后来承认说，这是他关于开发Linux所得到的最坏评价。Tanenbaum是当时的知名教授，他说的话自然很有份量。但这次面对Linux，他的话没能奏效，因为Linus不是个轻易服输的人。 </FONT>
<P><FONT size=2>Tanenbaum还说： </FONT></P>
<BLOCKQUOTE><FONT size=2>“Linux过时了。” </FONT></BLOCKQUOTE>
<P><FONT size=2>现在轮到新的Linux一代开始反击了。以强大的Linux社区为后盾，Linus给了 Tanenbaum一个恰如其分的回复： </FONT></P>
<BLOCKQUOTE><FONT size=2>你的工作是教授、研究员。这对于minix的大脑损伤是个绝妙的解释。 <BR>(Linus Torvalds to Andrew Tanenbaum) </FONT></BLOCKQUOTE><FONT size=2>Linux的开发在继续。不久，加入开发的人数就超过了一百，然后是数千，然后是数十万。Linux不再只是个黑客的玩具，配合上GNU项目开发出的众多软件， Linux已经可以走向市场了。它最终在GNU公共许可证下发布，这保证任何人都可以自由获得它的源代码，可以自由复制、学习和修改它。学生和程序员们都没错过这个机会。 </FONT>
<P><FONT size=2>不久，软件商们也来了。Linux是自由的操作系统。软件商们需要做的只是把各种各样的软件在Linux平台上编译，然后把它们组织成一种可以推出上市的形式。这和其它操作系统在运作模式上没什么区别，只是Linux是自由的。Redhat、 Caldera、和其它一些公司都获得了相当大的市场，获得了来自世界各地的用户。除了这些商业公司，非商业的编程专家们也志愿地组织了起来，推出了他们自己的品牌--享誉全球的Debian。配上崭新的图形界面（比如X Window、KDE、 GNOME），Linux的各个品牌都倍受欢迎。 </FONT></P>
<P><FONT size=2>好戏连台，惊喜不断。除了PC机，Linux又被移植到了许多其它平台上（PowerPC、Sun Sparc、ARM、Alpha...Debian就支持十几种CPU）。它还被人安装到了3com的手掌计算机上。另外，利用集群技术，许多Linux单机可以被组织成一个整体，用于并行计算。1996年4月，Los Alamos国家实验室的研究人员利用68台 Linux单机搭建了一个并行计算系统，用它来模拟原子弹爆炸的冲击波。与其它超级计算机不同的是，用Linux搭建的集群计算机非常便宜。这种DIY出来的超级计算机只花费$152,000，连人工（连接68台PC的线缆）都包括了。这价格只是同级别商业机的十分之一。它的峰值计算速度可达每秒19万亿(billion)次。在世界最强的超级计算机中它排在第315位。它也极其稳定可靠，投入运行三个月后，还不必去重启动。 </FONT></P>
<DIV align=center><A name=fig:beaming></A><A name=53></A>
<TABLE>
<CAPTION align=bottom><FONT size=2>今天锋芒毕露的Linus</FONT></CAPTION>
<TBODY>
<TR>
<TD>
<DIV align=center><FONT size=2><IMG src="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/figs/linusnow2.jpg"> </FONT></DIV></TD></TR></TBODY></TABLE></DIV><FONT size=2>今天，Linux最大的优势就是推动它前进的巨大开发热情。一旦有新硬件问世， Linux内核就能快速被改进以适应它。比如，Intel Xeon微处理器才问世几个星期，Linux新内核就跟上来了。它还被用在了Alpha、MAC、PowerPC上。甚至在手掌机这一少人问津的领域都可以运行Linux。正如它在1991年诞生时那样，Linux正以同样的热情阔步走向新世纪。 </FONT>
<DIV align=center><A name=fig:2002></A><A name=58></A>
<TABLE>
<CAPTION align=bottom><FONT size=2>Linus在2002年</FONT></CAPTION>
<TBODY>
<TR>
<TD>
<DIV align=center><FONT size=2><IMG height=307 src="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/figs/Linus_Torvalds.jpg" width=200> </FONT></DIV></TD></TR></TBODY></TABLE></DIV><FONT size=2>至于Linus本人，他保持着简单的生活。不象比尔盖茨，Linus不是亿万富翁。完成学业之后，他移居美国，在Transmeta公司找了个工作。Transmeta公司在指导完成了一个绝密项目的研发之后，推出了自己的Crusoe处理器。Linus是这个研发小组中活跃的一员。最近，他和Tove结了婚，生了个女儿，取名Patricia Miranda Torvalds。世界范围内的计算机社区都对Linus推崇备至，到目前为止，他是我们这个星球上最受欢迎的程序员。 </FONT>
<DIV align=center><A name=fig:family></A><A name=63></A>
<TABLE>
<CAPTION align=bottom><FONT size=2>全家福</FONT></CAPTION>
<TBODY>
<TR>
<TD>
<DIV align=center><FONT size=2><IMG src="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/figs/family.jpg"> </FONT></DIV></TD></TR></TBODY></TABLE></DIV>
<P><FONT size=2></FONT></P>
<H1><A name=SECTION00050000000000000000></A><A name=sec:decade></A><BR><FONT size=2>风雨十年 </FONT></H1>
<P><FONT size=2>Linux的开发已经走过了十个年头。它用十年的蓬勃发展否定了所有持怀疑态度的警告和预言。今天，Linux是有史以来发展速度最快的操作系统之一。从91、92年的几个技术狂热者发展到今天数以百万计的普通用户，这绝对是个不平凡的历程。大商业公司们“发现”了Linux，将数以百万计的美元倾入到开发中来，这一事实无情地驳斥了“开源运动反商业”的谬论。IBM曾经视开源社区为洪水猛兽。而现在，它已经将大量的资金转移到以Linux为平台的开源解决方案中来。 </FONT></P>
<P><FONT size=2>但真正让人感到惊喜的是，Linux开发团队持续不断地壮大，并在世界范围内扩散开来。这些开发者以旺盛的精力和高涨的热情不断改进着Linux的功能和性能。Linux的开发工作并没有象“代码封闭论者”所妄言的那样“最终消失在一片混乱之中”。正相反，Linux的开发是有组织有秩序的，它采用的是一种精心设计并被细心维护的开发模式。在这一高效开发模式下，数以千计的开发者们把各种各样的应用软件注入到Linux平台中来。 </FONT></P>
<P><FONT size=2>商业企业不再对Linux心怀戒惧，因而大量的软件商开始提供Linux平台上的产品支持，软件质量有了更可靠的保障，在办公室里用Linux不必再有“风险自负” 的担心了。说到可靠性，Linux在1999年CIH病毒肆虐和一年后的‘爱虫’病毒流行时，证明了自己的强健。这些相当简单的小病毒把世界搞得一团糟，而所有的Linux机器却丝毫不受影响。这充分显示了它出色的免疫力。当Redhat这样的 Linux排头兵走向市场的时候，它们受到了热烈的欢迎。甚至在近几年dot-com 网络泡沫破灭之后，它们还在持续蓬勃地发展壮大。这也大大增强了人们对 Linux的信心，许多大大小小的商业公司开始采用Linux作服务器和工作站平台，把Linux作为办公室系统的可靠支撑。 </FONT></P>
<P><FONT size=2></FONT></P>
<H2><A name=SECTION00051000000000000000></A><A name=sec:desktop></A><BR><FONT size=2>Linux桌面应用的崛起 </FONT></H2>
<P><FONT size=2>那么，针对Linux人们报怨最多的是什么呢？在过去，也许就数它的字符界面了。很多对Linux感兴趣的人被传统的字符界面吓着了。“字符界面可以让你无所不能”，一些执着的黑客会向你这样辩解。但对于数百万的普通用户，这意味着要花费大量的时间和精力去学习它。现成的X Window图形界面和窗口管理器并不能满足普通计算机用户的期待。这一直是MS Windows追随者们的攻击把柄。但在过去的几年间，情况发生了改变。象KDE和GNOME这样非常专业的桌面环境呈现在了人们的面前。这些桌面环境的较新版本使人们对Linux的“用户友好性” 有了更好的认识。尽管一些铁杆用户在报怨，图形化使黑客文化失去了其原有的纯正品位。但图形化大大改善了Linux在普通用户心目中的形象，促进了 Linux的流行与推广。 </FONT></P>
<P><FONT size=2></FONT></P>
<H2><A name=SECTION00052000000000000000></A><A name=sec:3rd_world></A><BR><FONT size=2>Linux在第三世界 </FONT></H2>
<P><FONT size=2>Linux 在发展中国家得到了广泛的传播�这也许是它对世界影响最大的地方。在Linux出现之前，发展中国家在计算科学领域大大落后于西方。硬件价格虽然不断下滑，但在第三世界国家，软件的高昂价格一直是有热情、没银子的计算机爱好者们的巨大负担。无奈中，他们只能求助于各种各样的盗版软件。这直接导致了盗版的泛滥，盗版金额达数万亿美元。话又说回来，大多数商业软件的标价都大大超过了发展中国家人民的承受力。举例来说，一个典型的操作系统软件至少标价$100。在一个年人均收入只有$200-$300的国家，这$100是个巨额数字。 </FONT></P>
<P><FONT size=2>Linux和其它开源软件的崛起彻底改变了这一切。在适当的缩减之后，Linux可以在硬件配置极低的计算机上运行。这使得Linux成为穷人的理想选择。在发达国家已经成为历史的老旧机器，比如486/Pentium 1计算机，在发展中国家还在被使用着。Linux使得这些老旧机器继续发挥作用。由于在穷国，高昂的软件价格是个大问题，所以开源软件得到了广泛的传播。在亚非拉，Linux成了广大计算机爱好者们的选择。在世界的各个角落，Linux被本地化。这标志着它真正走向了全球。Linux的相关文件被翻译成了各种语言，包括很多冷门的语言，比如，越南语。 </FONT></P>
<P><FONT size=2></FONT></P>
<H2><A name=SECTION00053000000000000000></A><A name=sec:super></A><BR><FONT size=2>从桌面系统到超级计算机 </FONT></H2>
<P><FONT size=2>Linus Torvalds当初开发Linux，只是出于一个黑客的爱好。自从Linux运行在了一个破386机器以后，到现在，它已经走过了一条很长的路。今天，它最令人瞩目的应用领域是大规模并行计算集群。 </FONT></P>
<P><FONT size=2>2001年8月，BBC报道说，美国政府正在计划一个超大规模计算机。这个超级计算机将能够进行每秒13百亿亿（13 trillion）次计算（13.6 TeraFLOPS）。这一项目被命名为“Teragrid”，是一个由四个美国超级计算中心组成的网络。这四个超级计算中心是： </FONT></P>
<OL>
<LI><FONT size=2>National Center for Supercomputing Applications at the University of Illinois(NCSA) </FONT></LI>
<LI><FONT size=2>San Diego Supercomputer Center (SDSC) at the University of California </FONT></LI>
<LI><FONT size=2>Argonne National Laboratory in Chicago </FONT></LI>
<LI><FONT size=2>California Institute of Technology in Pasadena </FONT></LI></OL><FONT size=2>在每个计算中心都有一个Linux超级计算机集群。在Teragrid网中，总共将会有超过3000个处理器进行并行运算。 </FONT>
<P></P>
<H2><A name=SECTION00054000000000000000></A><A name=sec:ahead></A><BR><FONT size=2>道路在延伸 </FONT></H2>
<P><FONT size=2>Linux从一个黑客的个人项目发展到一个遍布全球的操作系统，这一历程就象一次生物的进化。八十年代早期，Richard Stallman发起了GNU项目，为开源软件的发展奠定了基础。Andrew Tanenbaum教授开发的MINIX系统，把操作系统的学习研究从单纯的理论教学带入了实践阶段。最终，Linus Torvalds用他追求完美的无尽热情催生了Linux。在过去的几年中，开源社区成千上万的人们不断地呵护滋养着它，谱写了计算机革命史册的光辉一页。今天，Linux不再是一个学生黑客的项目，它成了一个世界范围的奇迹。在开源运动的精神感召下，IBM这样的大公司和千百万热情的人们都加入了进来。在计算科学的历史上，它将是人类最辉煌的成就之一。 </FONT></P>
<P><FONT size=2></FONT></P>
<H1><A name=SECTION00060000000000000000></A><A name=sec:tux></A><BR><FONT size=2>穿黑色燕尾服的小家伙：Linux吉祥物 </FONT></H1>
<DIV align=center>
<DIV align=center><FONT size=2><IMG src="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/figs/logo.jpg" width=200> </FONT></DIV></DIV><FONT size=2>Linux的标志是一只小企鹅。不象其它商业操作系统，Linux没有采用一个令人肃然起敬的徽标。这个穿着黑色燕尾服的小家伙充分表达了自由软件运动无忧、无虑、无畏的态度。这个可爱的徽标诞生于一个有趣的小故事。据Linus说，Linux最初并没有徽标。一次，Linus去南半球某地度假，碰到了一只企鹅。它长得并不象现在的Linux徽标。Linus想去亲近这小家伙。结果，小企鹅在他手掌上重重地拍了一翅膀。这次有趣的经历导致了后来Linux徽标的诞生。 </FONT>
<P></P>
<H1><A name=SECTION00070000000000000000></A><A name=sec:cookies></A><BR><FONT size=2>趣事 </FONT></H1>
<P><FONT size=2>下面是一些Linus的名言。 </FONT></P>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>Dijkstra八成讨厌我 <BR>(Linus Torvalds, in kernel/sched.c) </FONT></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>“我怎么知道它转不转？这是beta测试该做的事情。我只管编码。” <BR>（Linus Torvalds的个性写照。摘自某个帖子） </FONT></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>“我真白痴...至少这个bug花了我五分钟才找到...” <BR>（Linus Torvalds 给一个bug报告的回应） </FONT></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>“如果你想周游世界，想被邀请去到处演讲，那就写个Unix操作系统吧。” <BR>(By Linus Torvalds) </FONT></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>&gt;&gt; Linux除了有一个酷名字以外，谁能说说为什么我该用Linux而不是BSD？ <BR>&gt; 不，这就够了，有个酷名字就够了。在取名方面，我们花了老大的力气，希望它的名字能引起大家的兴趣。这招挺有效，数以千计的人们选择了Linux，就是为了说：“OS/2？哈。我有Linux。多酷的名字。”386BSD的名字里有太多数目字和奇怪的缩写，太失败了。听起来太技术化，把人都吓跑了。 <BR>(摘自Linus Torvald的一个关于Linux的跟贴) </FONT></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>&gt; 有朝一日，大家觉得有人能把Linux搞得更好的时候（自由软件基金会就是个选择），我就“退位”。我觉得这还不是我们现在该操心的事情，至少在可见的将来还不会发生。我喜欢搞Linux，尽管工作量不小。而且我还没听到有人报怨我（也就听到些很小声的提醒，都是关于我忘了或者忽略了某个小补丁。至今也没有什么真正的负面反映）。 </FONT></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>&gt; 别误会，我上面这些话并不是说一旦有人报怨我，我就撂挑子不干了。我皮很厚（Lasu正在我背后偷看我写这些东西，他说“更确切地说该是‘脸皮’很厚”），厚得足以接受些难听的话。如果不是这样，早在听到ast（译注：Andrew S. Tanenbaum）嘲笑我模仿、复制minix的时候，我就停止开发了。我只是想说， Linux到现在一直是我的宝贝儿，如果有人想把它搞得更好，我不会死抱不放、舍不得撒手的。 <BR>Linus </FONT></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>&gt; 嘿，也许我该到教皇那儿申请个圣徒的头衔。谁知道教皇的email？很高兴我让你恶心了。 <BR>（摘自Linus给某位为Linux未来表示担忧的人的回复） </FONT></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<BLOCKQUOTE><FONT size=2>当你向人炫耀“我写了个能搞死Windows的程序”的时候，大家会木然地盯着你说“呵，我Linux系统里有得是这类程序，而且这系统不花钱”。 <BR>(By Linus Torvalds) </FONT></BLOCKQUOTE>
<P><FONT size=2></FONT></P>
<H1><A name=SECTION00080000000000000000></A><A name=sec:timeline></A><BR><FONT size=2>年谱 </FONT></H1>
<TABLE cellPadding=3 border=1>
<TBODY>
<TR>
<TD vAlign=top align=left width=100><FONT size=2>日期</FONT></TD>
<TD vAlign=top align=left width=400><FONT size=2>事件</FONT></TD></TR>
<TR>
<TD vAlign=top align=left width=100><FONT size=2>1984年1月</FONT></TD>
<TD vAlign=top align=left width=400><FONT size=2>Richard Stallman从MIT辞职，开始了他的GNU项目。</FONT></TD></TR>
<TR>
<TD vAlign=top align=left width=100><FONT size=2>1985年某月</FONT></TD>
<TD vAlign=top align=left width=400><FONT size=2>Richard Stallman成立了自由软件基金会。</FONT></TD></TR>
<TR>
<TD vAlign=top align=left width=100><FONT size=2>1985年3月</FONT></TD>
<TD vAlign=top align=left width=400><FONT size=2>Richard Stallman在Dr. Dobb's杂志上发表了《GNU宣言》。在宣言中，他陈述了自由软件运动的起因。</FONT></TD></TR>
<TR>
<TD vAlign=top align=left width=100><FONT size=2>1991年8月25号</FONT></TD>
<TD vAlign=top align=left width=400><FONT size=2>Linus在Usenet新闻组上公开了关于Linux的构想。</FONT></TD></TR>
<TR>
<TD vAlign=top align=left width=100><FONT size=2>1991年9月</FONT></TD>
<TD vAlign=top align=left width=400><FONT size=2>Linux 0.01版在网上发布。</FONT></TD></TR>
<TR>
<TD vAlign=top align=left width=100><FONT size=2>1992年1月</FONT></TD>
<TD vAlign=top align=left width=400><FONT size=2>第一个Linux新闻组诞生：alt.os.linux。</FONT></TD></TR>
<TR>
<TD vAlign=top align=left width=100><FONT size=2>1992年4月</FONT></TD>
<TD vAlign=top align=left width=400><FONT size=2>Ari Lemmke在Usenet上创立了广受欢迎的comp.os.linux新闻组。</FONT></TD></TR>
<TR>
<TD vAlign=top align=left width=100><FONT size=2>1992年11月</FONT></TD>
<TD vAlign=top align=left width=400><FONT size=2>Adam Richter宣布他的公司推出了第一个Linux发行版： Yggdrasil。</FONT></TD></TR>
<TR>
<TD vAlign=top align=left width=100><FONT size=2>1993年6月</FONT></TD>
<TD vAlign=top align=left width=400><FONT size=2>Peter Volkerding推出了著名的Linux发行版：Slackware。</FONT></TD></TR>
<TR>
<TD vAlign=top align=left width=100><FONT size=2>1993年8月</FONT></TD>
<TD vAlign=top align=left width=400><FONT size=2>Matt Walsh推出《Linux安装与入门：第一版》。</FONT></TD></TR>
<TR>
<TD vAlign=top align=left width=100><FONT size=2>1994年3月</FONT></TD>
<TD vAlign=top align=left width=400><FONT size=2>Linux内核1.0版问世。</FONT></TD></TR></TBODY></TABLE>
<P><FONT size=2></FONT></P>
<H1><A name=SECTION00090000000000000000></A><A name=sec:links></A><BR><FONT size=2>参考链接 </FONT></H1>
<P><FONT size=2>下面是一些关于Linux历史的参考链接，也许对你有帮助。 </FONT></P>
<DL>
<DT><STRONG><FONT size=2>www.linux.org，</FONT></STRONG></DT>
<DD><FONT size=2>一个回答Linux相关问题的网站。 </FONT></DD>
<DT><STRONG><FONT size=2>www.cs.helsinki.fi/u/~torvalds，</FONT></STRONG></DT>
<DD><FONT size=2>Linus Torvalds的个人网站。上面有一些关于Linus一家的照片和趣事。 </FONT></DD>
<DT><STRONG><FONT size=2>www.slashdot.org，</FONT></STRONG></DT>
<DD><FONT size=2>一个专门针对geeks和技术痴迷者的网站。上面有很多关于Linux和其它自由技术的信息。 </FONT></DD>
<DT><STRONG><FONT size=2>http://en.wikipedia.org/wiki/Linux，</FONT></STRONG></DT>
<DD><FONT size=2>Wikipedia上关于Linux的文章。 </FONT></DD>
<DT><STRONG><FONT size=2>http://en.wikipedia.org/wiki/GNU，</FONT></STRONG></DT>
<DD><FONT size=2>Wikipedia上关于GNU项目的文章。 </FONT></DD></DL>
<P><FONT size=2></FONT></P>
<H1><A name=SECTION000100000000000000000></A><A name=sec:ack></A><BR><FONT size=2>鸣谢与版权声明 </FONT></H1>
<P><FONT size=2>历史通常是枯燥乏味的，但计算科学和 Linux的历史却是相当有趣的。这篇文章中的大多数信息都取自互联网。它的很多灵感来源于在孟加拉Linux用户俱乐部中的交流。谢谢大家。 </FONT></P>
<P><FONT size=2>本文涉及的所有资料的版权属于资料的原作者。所有的商标都属于它们的公司。 Microsoft和Windows是微软公司的注册商标。 </FONT></P>
<P><FONT size=2>本文的版权属于Ragib Hasan（1991+），作者保留所有版权。但不必担心，本文的任何部分都可以随意复制，前提是事先征得作者的同意。很简单，只要给他发个email就行了，不收钱。欢迎大力弘扬自由软件运动的精神。 </FONT></P>
<P><FONT size=2>如有任何建议和更正，请联系： </FONT></P>
<BLOCKQUOTE>
<TABLE cellPadding=3>
<TBODY>
<TR>
<TD align=left><FONT size=2>Ragib Hasan</FONT></TD>
<TD align=left><FONT size=2>&nbsp;</FONT></TD></TR>
<TR>
<TD align=left><FONT size=2>Department of Computer Science</FONT></TD>
<TD align=left><FONT size=2>&nbsp;</FONT></TD></TR>
<TR>
<TD align=left><FONT size=2>University of Illinois at Urbana-Champaign,</FONT></TD>
<TD align=left><FONT size=2>&nbsp;</FONT></TD></TR>
<TR>
<TD align=left><FONT size=2>Urbana, IL 61801</FONT></TD>
<TD align=left><FONT size=2>&nbsp;</FONT></TD></TR>
<TR>
<TD align=left><FONT size=2>United States</FONT></TD>
<TD align=left><FONT size=2>&nbsp;</FONT></TD></TR>
<TR>
<TD align=left><FONT size=2>电子邮件：ragibhasan aaaaht gmail daaawt com (你明白我的意思 ;-)</FONT></TD>
<TD align=left><FONT size=2>&nbsp;</FONT></TD></TR></TBODY></TABLE></BLOCKQUOTE><FONT size=2>本文可以从下列网址获得： </FONT>
<UL>
<LI><A href="http://ragibhasan.com/linux"><FONT size=2>http://ragibhasan.com/linux</FONT></A><FONT size=2> </FONT></LI>
<LI><A href="http://netfiles.uiuc.edu/rhasan/linux"><FONT size=2>http://netfiles.uiuc.edu/rhasan/linux</FONT></A><FONT size=2> </FONT></LI></UL><FONT size=2>中文PDF版可以从</FONT><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux_cn.pdf"><FONT size=2>这里</FONT></A><FONT size=2>获得。<BR>中文TeX源文件可以从</FONT><A href="http://cisd-ftp.swfc.edu.cn/%7Ewx672/course_materials/unix-linux/linux_history/History_of_Linux.tex"><FONT size=2>这里</FONT></A><FONT size=2>获得。<BR>关于中文翻译的任何意见和问题，欢迎与</FONT><A href="mailto:wx672@cisd-mail.swfc.edu.cn"><FONT size=2>我</FONT></A><FONT size=2>联系。 </FONT>
<P></P>
<H1><A name=SECTION000110000000000000000><FONT size=2>About this document ...</FONT></A><FONT size=2> </FONT></H1><STRONG><FONT size=2>Linux简史</FONT></STRONG>
<P><FONT size=2>This document was generated using the </FONT><A href="http://www.latex2html.org/"><FONT size=2><STRONG>LaTeX</STRONG>2<TT>HTML</TT></FONT></A><FONT size=2> translator Version 2002-2-1 (1.71) </FONT></P>
<P><FONT size=2>Copyright © 1993, 1994, 1995, 1996, </FONT><A href="http://cbl.leeds.ac.uk/nikos/personal.html"><FONT size=2>Nikos Drakos</FONT></A><FONT size=2>, Computer Based Learning Unit, University of Leeds. <BR>Copyright © 1997, 1998, 1999, </FONT><A href="http://www.maths.mq.edu.au/%7Eross/"><FONT size=2>Ross Moore</FONT></A><FONT size=2>, Mathematics Department, Macquarie University, Sydney. </FONT></P>
<P><FONT size=2>The command line arguments were: <BR><STRONG>latex2html</STRONG> <TT>-split 0 History_of_Linux.tex</TT> </FONT></P>
<P><FONT size=2>The translation was initiated by WANG Xiaolin on 2006-01-15 </FONT></P>
<ADDRESS><FONT size=2>WANG Xiaolin 2006-01-15 </FONT></ADDRESS><img src ="http://www.blogjava.net/faintbear/aggbug/28243.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2006-01-16 23:24 <a href="http://www.blogjava.net/faintbear/archive/2006/01/16/28243.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Firefox 扩展插件～</title><link>http://www.blogjava.net/faintbear/archive/2006/01/11/27641.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Wed, 11 Jan 2006 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2006/01/11/27641.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/27641.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2006/01/11/27641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/27641.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/27641.html</trackback:ping><description><![CDATA[<DIV id=mainContent>
<H2><FONT size=2><A href="http://mozillaupdate.mozine.org/">http://mozillaupdate.mozine.org/</A></FONT></H2>
<H2><FONT size=2>Firefox 扩展</FONT></H2>
<P class=first><FONT size=2>扩展是一些小巧的附加软件，它们为您的 Firefox 程序增添新的功能。从添加工具栏按钮到赋予浏览器全新的特性，扩展几乎无所不能。它们允许用户自由定制自己所需要的功能，与此同时，又保持了 Firefox 小巧的体积以便于下载。</FONT></P><A href="http://mozillaupdate.mozine.org/rss/?application=firefox&amp;type=E&amp;list=Popular"></A>
<H2><A title="最热门的 Firefox 扩展" href="http://mozillaupdate.mozine.org/extensions/showlist.php?application=firefox&amp;category=Popular"><FONT size=2>最热门的 Firefox 扩展</FONT></A></H2>
<P class=first><FONT size=2>至上周为止下载量最高的扩展。</FONT></P>
<OL>
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=6"><STRONG><FONT size=2>Adblock plus</FONT></STRONG></A><FONT size=2>（3.8 星，1248 次下载）<BR>可以过滤网页广告，是 Adblock 的增强版。增加了白名单和过滤规则同步功能。</FONT> 
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=8"><STRONG><FONT size=2>Tab Mix Plus</FONT></STRONG></A><FONT size=2>（3.4 星，1164 次下载）<BR>增强标签页浏览功能的扩展。<BR>Tab Mix Plus 是原来的 Tab Mix 的一个增强版本。同 Tab Mix 一样，它提高了 Firefox 的标签浏览能力。它包含了诸如复制标签，控制标签焦点，撤销关闭标签和其他的一些功能。但是，它提供了更多的像标签点击选项等功能。有一点和TM不一样，它兼容MAC。<BR></FONT>
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=53"><STRONG><FONT size=2>IE Tab</FONT></STRONG></A><FONT size=2>（3.5 星，1155 次下载）<BR>让你直接在 Firefox 的标签页中以内嵌的 IE 引擎浏览 IE Only 网页。</FONT> 
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=7"><STRONG><FONT size=2>FlashGot</FONT></STRONG></A><FONT size=2>（4.5 星，1128 次下载）<BR>允许 Firefox、Mozilla Suite、Netscape 和 Thunderbird 使用大多数流行的外部下载管理器处理单一的和全部("全部" 和 "选择")下载，支持 Windows, Mac OS X, Linux 和 FreeBSD 系统。</FONT> 
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=26"><STRONG><FONT size=2>Super DragAndGo</FONT></STRONG></A><FONT size=2>（4 星，795 次下载）<BR>拖拽链接到网页的任意空白位置就可以在新标签页中打开此链接。<BR>* 把链接、文本链接、图片或者书签工具栏里的书签快捷链接拖拽到网页的任意空白位置就可以在新标签页打开它们。<BR>* 拖拽词语到网页内容区域中的任意位置，则使用预设的搜索引擎搜索此词语。<BR>* 拖拽图片到任意位置则开始下载此图片。</FONT> 
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=88"><STRONG><FONT size=2>Fasterfox</FONT></STRONG></A><FONT size=2>（2.8 星，675 次下载）<BR>Firefox 性能和网络优化。<BR></FONT>
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=23"><STRONG><FONT size=2>MediaPlayerConnectivity</FONT></STRONG></A><FONT size=2>（3 星，568 次下载）<BR>使您轻轻一按就可用外部媒体播放程序播放网页内嵌视频。<BR>* 用一个简洁的按钮替换流视频。<BR>* 适合播放 Real 媒体, QuickTime, WindowsMedia 视频流, 播放清单, Flash, 背景音乐, Nullsoft 视频, Shockwave 等等各种格式媒体文件。<BR>* 允许使用任何播放器。<BR>* 支持媒体元文件 (即 Metafile，包括 ram, rpm, wmv, wm, wma, asx, asf, ...)<BR>* 自动播放: 初次检测到流媒体时自动启动播放程序。<BR>* 智能播放: 如果存在媒体元文件 (显示“+”图标)，MPC 会使用元文件自动搜索并选择最佳来源播放。<BR></FONT>
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=80"><STRONG><FONT size=2>Gmail Space</FONT></STRONG></A><FONT size=2>（3.9 星，441 次下载）<BR>这个扩展允许你使用你的 Gmail 空间保存文件。它可作为一个远程控制器，使你能从硬盘和 Gmail 之间进行文件传送。这个扩展类似 Windows 平台下的“Gmail Drive”程序。有了它以后，你的 gmail 帐户将变得象 FTP 服务器一样，使你可以上传和下载你的文件。扩展安装后，会在“工具”菜单里添加一个“GSasce”选项卡，点击它会打开一个文件夹/文件的传送窗口。<BR></FONT>
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=12"><STRONG><FONT size=2>Sage</FONT></STRONG></A><FONT size=2>（4 星，436 次下载）<BR>sage 是 Firefox 的一个灵巧的 RSS 和 Atom feed 聚合扩展。</FONT> 
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=66"><STRONG><FONT size=2>Forecastfox</FONT></STRONG></A><FONT size=2>（3.3 星，401 次下载）<BR>从 AccuWeather.com 获取世界各地天气预报，并且可以定制显示在工具栏或状态栏。<BR></FONT></LI></OL><A href="http://mozillaupdate.mozine.org/rss/?application=firefox&amp;type=E&amp;list=newest"><FONT size=2></FONT></A>
<H2><A title="最近更新的 Firefox 扩展" href="http://mozillaupdate.mozine.org/extensions/showlist.php?application=firefox&amp;category=Newest"><FONT size=2>最近更新的 Firefox 扩展</FONT></A></H2>
<P class=first><FONT size=2>最新加入和更新的扩展。您可以订阅 </FONT><A href="http://mozillaupdate.mozine.org/rss/?application=firefox&amp;type=E&amp;list=newest"><FONT size=2>我们的 RSS feed</FONT></A><FONT size=2> 来及时获得扩展的更新资讯。</FONT></P>
<OL>
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=35&amp;vid=466"><STRONG><FONT size=2>Nightly Tester Tools 0.7.9.11</FONT></STRONG></A><FONT size=2>，2006年1月10日<BR>Nightly Tester Tools 为经常测试使用每天更新版 Firefox、Thunderbird 和 Mozilla 套件的用户提供一些额外的实用功能。<BR>* 允许您安装与应用程序不兼容的扩展 (此功能仍在测试中)。<BR>* 允许您强制应用程序启用与当前版本不兼容的扩展。(此功能只在最近的 Firefox 和 Thunderbird, 或者 20/08/2005 以后的 branch 和 trunk 版本中工作)。<BR>* 在帮助菜单中增加复制和插入 Build ID 的选项。<BR>* 在工具栏增加在当前文本框插入 Build ID 的按钮 (不支持 Mozilla 套件)。<BR>* 提供启动质量反馈代理 (talkback) 的快捷方式。<BR>* 允许你定制包含 Build ID 等信息的应用程序标题栏。</FONT> 
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=105&amp;vid=465"><STRONG><FONT size=2>Organize Status Bar 0.3</FONT></STRONG></A><FONT size=2>，2006年1月10日<BR>这个扩展将允许你组织你的状态栏图标。你现在可以重新排列或移除 Firefox 状态栏中的任何一项图标或文字。<BR>如果你的状态栏非常满或比较乱，那么试试这个扩展吧。</FONT> 
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=86&amp;vid=464"><STRONG><FONT size=2>InFormEnter 0.4.1</FONT></STRONG></A><FONT size=2>，2006年1月10日<BR>以半自动模式填写表单的助手。<BR>这个扩展在一个网页表单的每个输入栏加入一个能够点击的小图标，你能从这里选择条目插入——不需要键入。你能通过菜单设定，使它显示你经常用到的信息，例如名字、email、地址等等。<BR></FONT>
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=4&amp;vid=463"><STRONG><FONT size=2>Bloglines Toolkit 1.6.2</FONT></STRONG></A><FONT size=2>，2006年1月10日<BR>对 Bloglines 用户有用的扩展，能够及时提示未读信息，并且可以方便快捷地订阅 Blog。</FONT> 
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=47&amp;vid=459"><STRONG><FONT size=2>Adblock Filterset.G Updater 0.2.7</FONT></STRONG></A><FONT size=2>，2006年1月10日<BR>这个扩展是 Adblock 的一个伴侣，能直接找到并使用在 Adblock 上。这个扩展每隔4～7天，能自动地从 Fileterset.G 下载最新的规则。Filterset.G 是一个由 G 进行维护的杰出的过滤规则设置，能配合 Adblock 以屏蔽 Internet 上几乎所有的广告。<BR>此外，这个扩展同样允许你自定义你的过滤规则，在 Filterset.G 更新时你也能连同更新一起添加。若是报告没有的广告，或是扩展的问题，请浏览论坛：http://forum.pierceive.com/ </FONT>
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=19&amp;vid=457"><STRONG><FONT size=2>All-In-One Sidebar 0.6.3</FONT></STRONG></A><FONT size=2>，2006年1月10日<BR>AIOS(All-In-One Sidebar) 使您在侧边栏中就可以快速切换书签、下载项和扩展等面板，或者在侧边栏登陆网站、查看源代码；另外，AIOS 还拥有侧栏切换柄和工具栏，单击浏览器一侧的突起边缘，即可打开/关闭 AIOS。所有这些都允许用户自由定制。AIOS 支持众多扩展，包括Translation Panel, ScrapBook, Sage, Enhanced History Manager, Advanced Search Sidebar, QuickNote 等等。<BR><BR>注意! 在安装 AIOS 新版本前一定要先卸载 0.5.5 以前的版本! 否则将损坏配置文件! 请千万小心，不要在旧版上自动更新升级。如果忘记卸载而导致配置文件损坏，您在作者主页上可以找到补救方法。<BR>补救方法: http://firefox.exxile.net/aios/knownissues.php#destroyedprofile<BR></FONT>
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=105&amp;vid=456"><STRONG><FONT size=2>Organize Status Bar 0.2.1</FONT></STRONG></A><FONT size=2>，2006年1月9日<BR>这个扩展将允许你组织你的状态栏图标。你现在可以重新排列或移除 Firefox 状态栏中的任何一项图标或文字。<BR>如果你的状态栏非常满或比较乱，那么试试这个扩展吧。</FONT> 
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=104&amp;vid=455"><STRONG><FONT size=2>Clear Cache Button 0.2</FONT></STRONG></A><FONT size=2>，2006年1月9日<BR>增加一个清除 cache 工具栏按钮。<BR>安装这个扩展之后，你能在定制工具栏面板找到一个清除 cache 按钮。<BR></FONT>
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=106&amp;vid=448"><STRONG><FONT size=2>Quick Locale Switcher 1.27</FONT></STRONG></A><FONT size=2>，2006年1月7日<BR>允许您快捷地从工具菜单更改和使用不同的 general.useragent.locale 参数选择。<BR><BR>特点：<BR>* 对于所有开发/翻译人员来说，是一个能让您很快地看到您所做的改动的便利工具。<BR>* 可以增加 3 个您自定义的 locales（本地化语言）。<BR>* 可以选择在菜单上显示哪些 locales（本地化语言）。<BR>* 在 Firefox 1.4 以上版本里，有自动重启的功能。<BR></FONT>
<LI><A href="http://mozillaupdate.mozine.org/extensions/moreinfo.php?application=firefox&amp;id=105&amp;vid=447"><STRONG><FONT size=2>Organize Status Bar 0.2</FONT></STRONG></A><FONT size=2>，2006年1月7日<BR>这个扩展将允许你组织你的状态栏图标。你现在可以重新排列或移除 Firefox 状态栏中的任何一项图标或文字。<BR>如果你的状态栏非常满或比较乱，那么试试这个扩展吧。</FONT></LI></OL></DIV><img src ="http://www.blogjava.net/faintbear/aggbug/27641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2006-01-11 21:32 <a href="http://www.blogjava.net/faintbear/archive/2006/01/11/27641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大学十年（一个程序员的路程）（林锐博士）《1----9》</title><link>http://www.blogjava.net/faintbear/archive/2005/09/09/12515.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Fri, 09 Sep 2005 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/09/09/12515.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/12515.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/09/09/12515.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/12515.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/12515.html</trackback:ping><description><![CDATA[<P align=center><FONT color=#ff0000 size=3><FONT color=#666666>我要对年轻的朋友们说两句肺腑之言：<BR><BR>　　一、主动去创造环境，否则你无法设计人生。<BR><BR>　　二、生活和工作要充满激情，否则你无法体会到淋漓尽致的欢乐与痛苦。</FONT><FONT color=#000000> </FONT></FONT></P>
<P align=left><FONT color=#666666>　　</FONT> 
<P align=left><FONT color=#666666>写此文使我很为难，一是担心读者误以为我轻浮得现在就开始写自传，二是担心朋友们误以为我得了绝症而早早留下遗作。</FONT> 
<P align=left><FONT color=#666666><BR>　　不论是落俗套还是不落俗套地评价，我在大学十年里都是出类拔萃的好学生。并且一直以来我对朋友们和一些低年级的学生们都有很大的正面影响。这十年是一个从幼稚到成熟的过程，交织着聪明与蠢笨、勤奋与懒散、狂热与怯懦、成功与失败。做对了的事可树立为榜样，做错的事可挂作为警钟。我写下经历与感受，期望以此引导和勉励无数比我年轻的学生们。我资历尚浅，既没有哲学家的深遂，也没有诗人的风华，不足以堂皇地育人，只能讲一些故事以表心愿。</FONT> 
<P align=right><FONT color=#666666>----林锐，1999年岁末</FONT> 
<P align=right> </P>
<P align=center><FONT color=#ff0000 size=3><STRONG>大学十年（一个程序员的路程）(一)</STRONG></FONT></P>
<P>林锐，1999年岁末</P>
<P align=left>　　　<BR>　　写此文使我很为难，一是担心读者误以为我轻浮得现在就开始写自传，二是担心朋友们误以为我得了绝症而早早留下遗作。 
<P align=left><BR>　　不论是落俗套还是不落俗套地评价，我在大学十年里都是出类拔萃的好学生。并且一直以来我对朋友们和一些低年级的学生们都有很大的正面影响。这十年是一个从幼稚到成熟的过程，交织着聪明与蠢笨、勤奋与懒散、狂热与怯懦、成功与失败。做对了的事可树立为榜样，做错的事可挂作为警钟。我写下经历与感受，期望以此引导和勉励无数比我年轻的学生们。我资历尚浅，既没有哲学家的深遂，也没有诗人的风华，不足以堂皇地育人，只能讲一些故事以表心愿。<BR>　　<BR>　　我出生在1973年的春节，属牛，是"牛头"。父母为我起了很好听的名字叫"林锐"。这一切暗示着上天对我别有用心，将降大任于我，可是这时候上帝去了一趟厕所。天堂与人间的时差如此之大，就在上帝大小便的几分钟内，我混混沌沌地度过了童年和少年，天才因此成为凡人。<BR>
<P align=left>
<P align=left>　　我小时候生长在浙江黄岩的偏僻山区。父母都是中学教师，由于山区师资缺乏，父母经常要从一个山头调到另一个山头教学。我换读过的小学的数目比我的年龄还大，没有伙伴，也没有家的概念。我就象活在货郎担里的小鸡，缩成一团，在高兴或恐惧时至多"啾""啾"地叫几声。我在读小学与初中的8年里，既不聪明活泼，也不调皮捣蛋，确切地说象块木头，简直是我名字的反义词。在学习上我没有受过一次表扬，也没有任何值得留念的人或事。无论我现在多么努力都已无法追回失去的8年金色年华，好心痛！ 
<P align=left><BR>
<P align=left>　　我草草地并且稀里糊涂地在13岁时从初中毕业，无处可去。这下我发慌了，开始渴望学习。我灰溜溜地离开山区，可怜巴巴地到一个比较好的乡下中学重读初三。我勤快得早晨4:30就起来读英语，脑袋似乎也被吓开窍了，"数理化"学得很好，并且生平第一次在物理考试中得了满分。当我再一次从初中毕业时，我以全校第一的成绩考入了黄岩中学读高中。 
<P align=left><BR>
<P align=left>　　黄岩中学分农村班与城市班，我当然是农民阶级。"阶级区别与歧视"对我是相当有促进作用的。我连任了几年的卫生委员，星期六和星期天同学们习惯地把活留给我，我这小官当得有滋有味。《物理》学得极好，有一种直觉帮我快速准确地解题，常常是老师刚把题目写完我就报出答案来。上物理课时我没法讲废话，因为我一开口就是标准答案。 
<P align=left><BR>　　可惜我的文科成绩极差。那时期盛传"学好数理化，走遍天下都不怕"，我们年少不懂事，糟踏了学文科的好时光。我写作文的最高目标就是不逃题，考试前我总是反复祈祷：我没干过坏事，保佑我作文不逃题吧！历史考试时填写"任课老师某年某月某日在我家乡英勇就义"，比谁的成绩更接近零分。更让我沮丧的是，这些行径都不是我发明的，我顶多是个跟屁虫而已，一点回忆时的自豪感都没有。 
<P align=left><BR>　　我现在认为文科教育实质是素质教育，如果素质不高，男孩再聪明也难以成大器，当然也难以吸引好女孩。 
<P align=left><BR>　　高考时我语文得了54分（是班里的中上水平），总分只比重点线高十几分。我不敢报考好地方，只好选择内地。选来选去只觉得西安与成都两个城市还不错，我拿把尺子在地图上一量，发现我家乡离西安的直线距离较短，于是就选了西安。老师们只听说过西安交通大学比较有名气，但谁也不了解。我以为在西安交通大学是学习开火车、开轮船的，尽管我也很渴望能开车开船，但考虑到自己的身材单小，就忍痛割爱了。我觉得西安电子科技大学的名字很好听，符合我做科学家的梦想，于是就报考西安电子科技大学（以下简称西电）技术物理系。 
<P align=left><BR>　　上帝精神拌擞地从厕所回来，发现我已经上大学。也许他原先是把我安排在清华或者北大的，但事已至此，干脆也就撒手不管了。他这一偷懒反而是好事，我在读大学的十年中自由发展，成了卓而不群的学生。</P>
<P align=left>    刚进西电，首先吸引我的是麻雀和馍。那麻雀滚圆滚圆的，简直是会飞的肉弹。它们不怕人，成堆聚集吵闹，常让我误以为是没有教养的一群鸡。那馍又白又大，既不放盐也不放糖，既不象馒头也不象包子。馍凉了后贼硬，据说有同学被楼上扔下的半块馍砸中脑袋，当场长出一个"肉包子"。最好笑的是人们把"馍夹肉"叫成"肉夹馍"，那东西实在好吃。 
<P align=left><BR>　　西电原是军校，作风严谨，校园并不华丽，生活有些单调。尽管我来自山清水秀的地方，可我的确喜欢西电的粗犷与憨厚。有一天我看到一个新生写的很肉麻的赞美西电的大字报，有一句是"我踏上了东去的列车"，我不禁笑掉牙。这一笑意味着"大个子欺负小个子"历史的结束，"小个子欺负大个子"新纪元的开始。 
<P align=left><BR>　　上大学的第一个学期刚好碰上美国打伊拉克（"沙漠风暴"行动）。那时全国都在谈电子战，我们全校都是研究电子的，而且以军事应用为主。在那种气氛里，同学们都有很强的使命感，并且被鼓动得信心十足。 
<P align=left><BR>　　一日，系主任视察早读，偏偏有同学迟到。系主任喝问："你为什么迟到了？" 
<P align=left><BR>　　 "因为我来迟了，"同学毫不含糊地回答，昂然入座。 
<P align=left><BR>　　我在班里年龄最小个子也小，上课时就象猩猩堆里的猴子那么显眼。由于我们是物理系学生，第一学期的《普通物理》课程就显得非常重要。系副主任给我们上课，他长得象叶利钦，口若悬河，板书极快。象在高中上物理课那样，我常在"叶利钦"刚写完题目时就报出答案。开头几次，"叶利钦"满脸疑狐地扫视我们，好像是要抓住拔掉他自行车气门芯的那个捣蛋鬼。后来他在第一排发现了我，我俩乐得裂了嘴。课间候息时，"叶利钦"常坐在我旁边，乘他给同学们答疑时，我就用笔拔弄他硕大无比的手指，在他指甲上涂点什么。 
<P align=left><BR>　　在第一学年，我就象乱草丛中的野花那样脱颖而出，倍受老师和同学们的关怀。就在我光荣到感觉屁股都能绽放光彩的时候，发现了令我胆战心惊的学习缺陷--不会做实验。一进实验室，我就束手无策，浑身发抖。我相信大一的学生都有虚荣心，为了维护"最聪明"这个荣耀，我完全可以掩盖、躲避甚至偷偷地弥补实验能力的不足。 
<P align=left><BR>　　我做了一件了不起的事：为了对抗虚荣的引诱，我夸张其辞地把"缺陷"告诉每一个我认识的人，让我没有机会欺骗自己。 
<P align=left><BR>　　聪明的人并不见得都有智慧，他可能缺乏"真实"这种品质。虽然我是在硕士毕业的时候才立下誓言--"做真实、正直、优秀的科技人员"，但我在18岁的时候就已经做到了"真实"，我必定一生保持。 
<P align=left><BR>　　第一年暑假回家，得到一个惊喜：家里竟然有了电路实验室！ 
<P align=left><BR>　　因为我常在信中鼓吹自己实验能力何等之差，"长此以往，下场将极为悲惨"。父母经不起这种"恐吓"，教英语的父亲将半年的工资连同"私有财产"全部捐出，每周到很远的商品交易市场购买电子元件以及器材，在家里建立了实验室。父亲很威严，我从小就怕他，但那个暑假我一点也不怕他。我们一起做实验，都从零学起，话不投机就用电烙铁"交流"，完全是同事关系。后来，我的兴趣转向了计算机，家里的实验室就由父亲独掌，继续发扬光大。现在父亲修理电器的水平在家乡远近闻名，学生们都忘了他是英语教师。 
<P align=left><BR>　　母亲是数学教师，年轻时略有姿色，智力远胜父亲。当她与他在山头的学校里相遇时，他一顿热情洋溢的饭菜就把她缴械了。我小时候家里很贫穷，家就象一条飘荡的小船，父亲划浆，母亲掌舵。当我6岁上学时，母亲就说："儿子啊，你将来只能靠笔吃饭而不能靠锄头吃饭。"小时候，母亲怕我变狡诈而不允许我学下棋。尽管我在大学里已经相当出色，母亲来信总不忘叮嘱"德智体全面发展"。她常用独特的方式检查我： 
<P align=left><BR>　　（1）看我是否变胖。如果我胖了，表明我懒了。因为勤奋的人没有理由变胖。 
<P align=left><BR>　　（2）看我说话是否还快。如果我说话慢条斯理，表明我变笨了。因为脑子灵活的人没有理由说话不快。 
<P align=left><BR>　　我读博士研究生时，母亲的眉头才舒开。她经常在师生中发表自由言论："儿子的智力与性格完全是我遗传的，他爸毫无半点功劳。"　<BR><BR><BR></P>
<P align=center><STRONG><FONT color=#ff0000 size=3>大学十年（一个程序员的路程）(二)</FONT></STRONG></P>
<P>林锐，1999年岁末</P>
<P align=left>　　　<BR>　　第三学期的主要课程是电路分析。电路题目常常很滑稽，当你满头大汗地解完方程时，答案往往是零。我归纳了不少公式用于简化计算，所以照样能在老师画完电路图时报出答案。学习是如此的轻松以致于我有太多的课余时间。 
<P align=left><BR>　　在课余我常做两件有意思的事： 
<P align=left><BR>　　（1）我为学习较差的十几名同学办了补习班，给他们讲课，改作业，出考题。我就象老母鸡那样看护着一群小鸡，使班长、学习委员等班干部形同虚设。我这样做既提高了自己的表达能力，又帮助了同学。这事不是老师叫我干的，是我自己的主意。 
<P align=left><BR>　　（2）我经常在宿舍里焊接电子线路，技艺渐精。我曾花了两天时间，把磁带盒做成能发声、发光的精美礼物，乐颠颠地送给一个女孩子。可惜不久后我迷上了计算机，从此再也没亲手做过好玩的东西。 
<P align=left><BR>　　上大学以前我根本没见过计算机。在第四学期时我遇到了十年来最敬爱的老师周维真，从而对编程产生了强烈的兴趣。他教我们Fortran语言，Fortran语言对我没有影响，影响我的是周老师高尚的师德以及他在教学和科研中的敬业精神。我从他那里学到的是怎样做人，怎样做学问。 
<P align=left><BR>　　很多计算机系老师改作业时喜欢打"√"或打"×"了事。周老师不仅把作业里的错误都找出来，而且逐一评注"好在哪里"和"差在哪里"。为了不让周老师过于劳累，全系同学有一个约定：上课时不准吵闹，否则别来；作业必须清楚，否则别交；提的问题必须有质量，否则闭嘴。 
<P align=left><BR>　　Fortran语言期末考试，我的卷面成绩是97分，有个女同学考了99分。我当时官为课代表，想不到被一个女生超过，甚为沮丧。可是报到系里的成绩单上，我的成绩是99分，那个女同学是97分。我以为周老师搞错了，跑去问他。周老师笑笑说："你平时的学习表现，该得满分。不能因为考试中的一个失误而打击你的积极性，所以给你加２分作为鼓励。而她一上机就束手无策，要让她知道考试成绩高并不表示已经学好了，扣她2分以示警告。你本来就是第一名。"这时又跑来一个"查"成绩的同学，他得了59分，哀求周老师让他及格。周老师说："你的试卷我看了好几遍，的的确确是59分。而你平时的学习表现也不会超过59分。这一分不能加，否则我会害你一生。" 
<P align=left><BR>　　在我这一级（90级），周老师至少为技术物理系教出两名软件高手--我和马佩军。我和马佩军读到硕士时已在软件方面雄霸西电，计算机系学生毫无翻身之望。由于马佩军不好名利，风头让我一人独得。我离开西电数年后，余威尚在。可惜我和周老师相处不到一年，他便调到北京信息工程学院。然而师恩的厚薄不在于时间长短，好的老师会让人想念、感激一辈子。<BR>    </P>
<P align=left>　　　<BR>　　在上大学的前三个学期，学习如同表演，有趣而且轻松。自从第四学期学习了计算机课程，我就有了新的追求，我多么渴望拥有一台计算机，可以天天编程。如果挨一个巴掌能换取一分钟上机时间的话，我愿意每天挨1440个巴掌。如果非得加上一个期限不可，我希望是一万年。 
<P align=left><BR>　　我本科的专业是半导体物理，一二年级由系里负责教学，三四年级由微电子所负责教学。在第四学期末，我央求系里把我推荐到微电子所参加科研，贾新章教授"收留"了我。我踏进微电子所的那一脚，让我从纯粹学习转向了科研，从"高分低能"转向了"低分高能"。 
<P align=left><BR>　　我终于有了一台286电脑，那个暑假我就睡在实验室里，时时刻刻守着它，深夜里我一个人冲着它发笑，一会儿盖上布，一会儿掀开布，一会儿摸摸它的"脸"，一会儿理理它的"辨子"。我很快地完成了任务--设计一个"立方运算"的模拟电路，并且学会了C语言。 
<P align=left><BR>　　西电有个好传统，每年冬季举办一次全校性的"星火杯"学生科技作品竞赛。每届都有六七百件作品展示，低年级的学生看后无不热血沸腾，跃跃欲试。我很希望能独立开发一套软件，参加本届"星火杯"竞赛。贾新章老师是研究集成电路可靠性的，见我如此热切，就让我开发"集成电路可靠性分析软件"。 
<P align=left><BR>　　我开始一边研究数值算法，一边设计软件。从炎热的8月份到发冷的十一月，几乎天天通宵编程，程序很快增长到一万多行。在离竞赛还剩一个月左右的时候，出现了大量的问题。不仅程序老是出错误，而且发现原先的算法并不有效。此时已经没人能够"救"我。贾老师不会编程，不知道问题究竟出在程序上还是出在算法上（实质上两者都有问题）。而那些懂软件开发的年青教师，实在看不明白我的上万行程序是如何组织的。他们只能悲伤地看着我挣扎。由于我经常逃课，好学生变成了坏学生。系里意见极大，贾老师十分为难。不少老师和同学劝我赶紧"改邪归正"，放弃项目，不值得因小失大。 
<P align=left><BR>　　当时我有个无法动摇的心念：如果放弃一次，那么碰到下一个挫折时我就会继续放弃；如果坚持而成功，那么碰到下一个挑战时我会激励自己再取成功。 
<P align=left><BR>　　在压力面前，我依然坚挺。每当略有进展时，心里一阵狂喜，但很快又会碰到新的困难，有时一坐就是20个小时。每天在喜悦的颠峰与苦恼的深渊之间反复折腾。在竞赛前二天，我终于成功地完成了软件研发，结果获得软件与论文两个二等奖。这个荣誉本身不值得一提，并且我付出很重的代价--对物理专业失去兴趣而彻底抛弃了它。但那时我才19岁，在极限状态下，我磨练了意志，使我日后充满激情。 
<P align=left><BR>　　在本科四年级，我认识了微电子所的郝跃老师。他是数学博士，是微电子所最有才华、最潇洒、最有领导风范的青年学者。我常去向他请教数学问题，他讲得意气风发，我听得如痴如醉。我俩一个月的"交流量"很多硕士化一年时间也得不到。有一天，郝老师说："你做我的学生吧。"我就毫不迟疑地从贾老师门下"跳槽"到郝老师门下。郝老师后来是我的硕士生导师，他高兴时喜欢说："好，很好，非常好！"我看着他升教授，升博导，升副校长，师生两人分别在各自的阶层中名声显赫。 
<P align=left><BR>　　在三四年级，我的专业课程没有一门及格过。但由于微电子所的老师们已经认可了我，就把我的卷面成绩作为及格线，我对同学们的帮助莫大于此！如果要我考研究生，我绝对考不上。系主任安毓英觉得我将来很有前途，于是不顾别人反对，一锤定音让我免试读硕士研究生。<BR><BR><BR><BR></P>
<P align=center><FONT color=#ff0000 size=3><B>大学十年（一个程序员的路程）(三)</B></FONT></P>
<P>林锐，1999年岁末</P>
<P align=left>　　　<BR>　　读硕士研究生后，我的科研条件相当好。导师十分开明，任我自由发展。我最喜欢做的事是设计图形用户界面和开发数据可视化软件。图形程序的最大魅力是即便它毫无用处，你也可以自我欣赏。总有人担心"花很多精力、物力让界面那么漂亮，图形那么逼真是否值得？"这种问题不能强求别人与你一致。我当时赞美女孩子的最高境界就是把她和我的图形程序相提并论。 
<P align=left><BR>　　我喜欢设计用户界面是因为自己有相当好的美感。在读本科时我模仿过六七个流行软件的界面，常常向同学演示、卖弄。觉得还不过瘾，就写了一篇名为"用户界面设计美学"的短文。凡是路过我实验室的同学都被我逮住，被迫听完我得意之极的朗读，茫然者与痛苦者居多。不久我的朗读便所向披糜，闻声者逃之夭夭。 
<P align=left><BR>　　我的研究工作基本上以集成电路的数值计算为主，数值计算产生的一堆堆数据常把我搞得晕头转向。我发现用图形来表征、解释数据可以让自己不再迷糊下去，那感觉就象刚睡醒时冲凉水一样。我硕士学位论文中的软件就是用图形来仿真集成电路生产过程中"缺陷"对成品率的影响。我并不是在看了学术论文后才开始研究可视化技术的，我是在做了工作后才发现那些好玩的技术叫做"可视化"。由于我肚子里头的确有货，在硕士一年级，我没有使用"剪刀"与"浆糊"（这是很多人写书的法宝），只化了三个月时间就写完第一本著作《微机科学可视化系统设计》。 
<P align=left><BR>　　我在读硕士期间的工作强度与本科时的相当，但工作方式有很大不同。我有了明确的目标：（1）开发自主版权的软件产品；（2）培养做领导的才能。这个目标可以通过团队工作，参加全国性大学生科技竞赛而实现。 
<P align=left><BR>　　我在西电成立了"可视创意软件小组"，马佩军、戴玉宏、马晓宇是我的主要技术伙伴，帮手很多（有几个漂亮的女生负责宣传）。办公室里贴满了标语，如"创造性的事业要靠激情来推动"，"生于忧患，死于安乐"，"让春天消失"。还有大幅的"作战图"，倒计时牌。每个伙伴写了一张"军令状"放在机器上，我迄今还记录着那些纯真、活泼、充满激情的文字。那是多么艰苦而幸福的日子，夜里放震耳欲聋的音乐、咬尖辣椒提神，有伙伴累得蹲在厕所里睡着了。 
<P align=left><BR>　　在1994年和1995年的冬季，我们的软件作品分别获中国大学生应用科技发明大奖赛二等奖和全国大学生"挑战杯"学术科技作品竞赛二等奖，在西北地区，我们是"老大"。我成了西电学生的榜样。如果你是西电学生，你可以不认识校领导（有名字的人并不见得就有名），但你不能不认识我，否则你就不是个好学生。仰慕我的学生有一大批，我刚到浙大读博士学位时，收到一个西电计算机系学生的信，他说："你走了，我呆在西电没有意思，我准备考浙大的硕士，你到哪里我就跟到哪里。" 
<P align=left><BR>　　在硕士毕业前，我在鉴定表上这样写道："我热爱科技事业，如同热爱生命一样。近5年的科研工作带给我最充实的生活，也寄托着我美好的向往。可我同时也感到了痛苦，因为5年来我耳闻目睹科研中太多的弄虚作假。我发誓：做一名真实、正直、优秀的科技人员，以正身自勉。"<BR>　　</P>
<P align=left>       我在西电度过了幸福的6年半，最让我牵肠挂肚的是"吃"、"友情"和"爱情"。 
<P align=left><BR>　　当我第一次吃红红的和青青的辣椒时，"感动"得满脸是泪，那滋味让我觉得前17年白活了。我在读硕士时已经能自力更生，我开发的软件不仅竞赛获奖挣了名气，而且还挣了钱（卖了二十多份软件，平均每份挣500元）。写书得稿费7000元，那时我简直就是富翁。这些钱的小部分用来给女孩子买礼物，大部分用于和与哥儿们吃香的喝辣的。 
<P align=left><BR>　　我相信自己已经尝遍了西安的小吃，并且发现了一个真理：最好吃的东西都在地摊上，最香的东西一定是辣的，最辣的东西一定是香的。曾经沧海难为水，我在浙大的三年里很少再吃辣椒，因为怕它沾污我心目中的辣椒。 
<P align=left><BR>　　在我小时候，我爸很讨厌土豆，他竟然因此不让我吃土豆。我哪敢跟他论理，于是忍啊忍，一直忍到我上大学"远走高飞"。如果说辣椒是我新交的女朋友，那么土豆就是我天生的命（迄今尚未发现能让我不要命的食物）。我在西电经常用电炉（从来都没被抓住过）做"以土豆为核心"的菜，天长日久，朋友们干脆叫我"土豆"。 
<P align=left><BR>　　我吃饱土豆和辣椒后不免深思而感叹，人要是认认真真地吃，真的花不了多少钱，那些贪官究竟是怎么吃掉巨款的？我将来怎么吃得掉自己挣来的钱？ 
<P align=left><BR>　　我在读中学与本科时，满头白发，脑袋可以当白帜灯泡用。当我硕士毕业再照镜子时，吓了一跳，白头发不见了！我不知道究竟是哪种食物起的作用（估计是辣椒）。那些早生白发的小伙子们，你们就到西安上学吧。<BR><BR><BR><BR></P>
<P align=center><FONT color=#ff0000 size=3><B>大学十年（一个程序员的路程）(四)</B></FONT></P>
<P>林锐，1999年岁末</P>
<P align=left>　　　<BR>　　马佩军是我最早的朋友。刚入学时我们同住一个宿舍，他象国民党兵盘问良家妇女那样上下打量我，问："喜欢干啥？" 
<P align=left><BR>　　我怯生生地回答："打乒乓球。" 
<P align=left><BR>　　他再问："什么风格。" 
<P align=left><BR>　　我答："快球。" 
<P align=left><BR>　　他突然象阎锡山那样怪笑，拍拍我的肩膀说，"好！我喜欢，以后你就是我的朋友。我是陕西人，农民，会开拖拉机和卡车。这里是我的家，以后你有啥事，就对我吱一声。" 
<P align=left><BR>　　马佩军和我打乒乓球时口中念念有词："哼！你对我狠，我对你更狠；你对我好，我对你更好。"他好几次说要把世上最好吃的板栗送给我一袋，这一袋板栗我到现在都没拿到。 
<P align=left><BR>　　马佩军夜里极能侃，吹他家乡的人跑得快，常把野兔追断气。有时他吹得太离谱，常令我们6人群起而攻之。为了把我们一举歼灭，他白天到图书馆查"资料"，夜里再挑起事端。双方就象印度与巴基斯坦，常干两个秃子争一把梳子的事。 
<P align=left><BR>　　马佩军上大学前也没见过计算机，但他对计算机技术有极强的领悟力。我们第一次上机时，他把我拉到打印机旁边说："帮我防着管机房的，我要修理这台打印机"。还没等我反应过来，他就开始"肢解"打印机。我无比深刻地体会到：歹徒在作案时都不害怕，最提心吊胆的就是那个放风的。他在5分钟内修好了打印机，我佩服得五体投地，甘愿下次再跟他干"坏事"。 
<P align=left><BR>　　我一直认为马佩军是西电编程第一高手，他编程的时候根本不是人，是指针。之所以我的名气大，一是因为他不好名利，二是我把他的程序写上了我的名字（并且卖了不少钱）。 
<P align=left><BR>　　马佩军的女朋友是我介绍的，我一眼就看出她将嫁给他。后来俩人果真结婚了，只是他嫁给了她。硕士毕业后，马佩军留在西电读博。前年我再见到他时，他说我害死他了，快乐得要宰了我。我喜欢陕西人源于马佩军。</P>
<P align=left>    宋任儒是我们的班长，也是班里最早的预备党员，满口仁义之道，比唐僧还让人受不了。在二年级时，我迷上一个比我大一岁有了男朋友的女同学，多日沮丧。他看在眼里痛在心里，跑去把那女同学教育了一通。苏联解体的时候他十分沉痛，在思想教育课上，他向我们作了深刻的检讨，好象是他没有管教好戈尔巴乔夫那小子。最后他为我们点燃了希望：在不久的将来，"苏联"将重新成为苏联，共产主义旗帜将继续在全世界飘扬。 
<P align=left><BR>　　在本科三四年级，他对跳舞十分入迷，连上厕所都滑翔而去。我那时常把自己关在实验室里搞科研，极少有空与他玩乐，等到本科毕业时，猛地发现他已经风度翩翩。 
<P align=left><BR>　　宋任儒的学习既不好也不差，我们从来没有合作研究过什么。我喜欢他是因为他很有情趣，不落俗套。也许，我俩本来就是"敢爱而不恨"的同一类人。 
<P align=left><BR>　　本科毕业时，他分到威海工作，走之前我为他饯行。可在硕士开学时，我的房门被人一脚踢开，他对我喊了一声"林子啊，我又回来了"。我就象祥林嫂见到了被狼叼走的孩子。 
<P align=left><BR>　　宋任儒读硕士时被发配到临憧771所，他在那里过上了乐不思蜀的日子。有一天，他带来两个文静的女孩子（一个读硕士，一个读本科）来串门。就在我洗水果的几分钟里，三个人已玩得乐翻了天，两个女孩满屋子追他，一会儿把他按到桌子上打，一会按到床上打。我惊诧之极而又羡慕之极，恨不得挨打的人是我。想不到上学竟然会有这等欢乐，看来我读硕士的日子白过了。 
<P align=left><BR>　　后来，那个大一点的女孩子嫁给了他。当他带她去见公婆时，公公长叹一声："把儿子交给你，我就放心了。"而婆婆已乐得合不拢嘴，竟然无法叹气。 
<P align=left><BR>　　现在，宋任儒已从复旦大学获得博士学位，比我更早地成家立业。他和她既是夫妻，又象兄妹，还象伙伴。他叫她"聪聪"，她叫他"笨笨"。 
<P align=left><BR>　　"聪聪"问"笨笨"："老公啊，人活着为了什么？" 
<P align=left><BR>　　"笨笨"答："就是让咱们每天快快乐乐。" 
<P align=left><BR>　　我迄今亲眼看到的幸福莫过于此。<BR><!--msnavigation--><BR><BR></P>
<P align=center><FONT color=#ff0000 size=3><B>大学十年（一个程序员的路程）(五)</B></FONT></P>
<P>林锐，1999年岁末</P>
<P align=left>　　　<BR>　　我在大二时曾为系里学习最差的十几名同学办了补习班，谢伟在这个补习班里名列倒数前茅。在他睡懒觉时，我象催命鬼那样喊他捅他。他无比吃力地抬起沉重的眼皮，就象软弱无力的举重运动员，还没有挺起来就趴下了。 
<P align=left><BR>　　他开始呻吟："这一次就饶了我吧，下一次我一定一定会去的，求你了。" 
<P align=left><BR>　　我不肯。 
<P align=left><BR>　　"那么让我再睡5分钟，"他不死心。 
<P align=left><BR>　　我仍不同意。 
<P align=left><BR>　　"那么你就从1数到10，要慢一点，"他讨价还价。 
<P align=left><BR>　　当我数到9时，他就接着数9.1,9.2, 9.3 …… 
<P align=left><BR>　　一开始他觉得我很好玩，后来他就喜欢得离不开我了。并不是因为我学习好，而是那时侯我天真并且充满活力。在三四年级我忙于科研时，他照顾我的生活，叫我"少爷"，既做管家又做兄长。我们不仅共用饭菜票，并且共用仅有的一个碗，总是他买饭菜和洗碗。 
<P align=left><BR>　　我们那一级的学生大多崇拜巨人公司的创始人史玉柱，我问谢伟："我是不是和史玉柱一样能吃苦？" 
<P align=left><BR>　　他说："如果考虑年龄因素，你已经比他更能吃苦。你将来一定能做大事业，我就把希望寄托于你了。" 
<P align=left><BR>　　在我们都还不成熟的时候，我成了他心中的灯塔，只要灯不灭，希望就在。现在他为了娶一个日本姑娘，披荆斩棘追到日本，有了新的希望。 
<P align=left><BR>　　二十几年来，我就为一个男人哭过，那时他本科毕业。<BR>　　<BR></P>
<P align=left>      我读硕士研究生时，由于受我的影响，本系三四年级的学生蜂涌至微电子所参加科研。夜里看十二层高的科技大楼，灯火通明、热闹非凡的那一层就是微电子所。那时，我在微电子所学生中的地位仿佛伊拉克的萨达姆，手下兵将极多。 
<P align=left><BR>　　我写第一本书时，有几个人老向我伸着手等待输入稿子，就象火车站行乞的人那样阴魂不散，使我没时间慢腾腾地打草稿。我就象金庸写小说，有如神来之笔，想到那里就写到那里，写了一段他们马上输入一段，一气呵成。那本科技书写得很滑稽，同学们看得笑出眼泪，编辑看了拍案叫绝，只改了几个字就出版了。 
<P align=left><BR>　　那时侯我的心情是如此之好，为一男同学乱蓬蓬的头发写了一篇散文，并送他一把梳子。又把一女同学的实验报告写成评书。我的文笔大概就是这样练出来的。 
<P align=left><BR>　　这一群学生中，戴玉宏、史江一和马晓华是我最好的伙伴（我们都属于牛）。 
<P align=left><BR>　　戴玉宏其貌甚帅，眉中有一根白毛闪闪发光，因此号称"白眉鹰王"。"白眉鹰王"武功了得，是我软件产品的核心开发人员，我们合作最深最久。后来我开公司，他就从广州辞职到杭州为我助威，令我感动不已，可见读大学时期我们有多铁！戴玉宏有一次打饱嗝，整整打了两天两夜，我差点心疼死。 
<P align=left><BR>　　我尚未发迹之日曾与戴玉宏在校园里卖花，无人问津，就请电子工程系的鲁洁救助。鲁洁温柔貌美，她一言一笑尤如春风吹拂苏堤的杨柳，令人心里一荡再荡。顷刻间就有男生围观，有人看花，有人看"贵妃"，鲁洁一走，我和戴玉宏可怜得就象两根蜡烛。鲁洁读大学时调皮捣蛋，到四年级时还不太会编程。她的本科毕业设计是仿真"雷达跟踪飞行物"，程序基本上全是我编写的。我已记不起用了什么公式，只知道每次计算后都弹出一个对话框"报告长官，击中目标"。鲁洁毕业后到深圳的一家软件公司工作，几年一过，她成了行家。再与她交谈时，我只有听的份，象鸡琢米一样点头。 
<P align=left><BR>　　史江一和马晓华都是狭西人，和马佩军一样厚道热情。史江一性格稳重，属于"你办事我放心"的那类人。我对微电子专业一窍不通，全靠他帮我混过实验这一关。后来我开公司失败，陷入经济危机，就把希望工程的一个小孩托给了他。 
<P align=left><BR>　　马晓华是我最不放心的人。他常常为别人做事情，但热情过头就忘了自己的事情。有几个不道德的学生就利用他的这个缺点，经常使唤他，并且借他的钱不还。马晓华喜欢为那些人"卖命"并且挨训，他总是在受虐待够了的时候再跟我们嘀咕，我们实在气不过，只好对着他的屁股追加一顿拳脚，并给他一个绰号"受虐狂"。但愿他找个好老婆，我可以早日放心。 
<P align=left><BR>　　我们这一群小伙子同时喜欢上一个女孩子，她叫姜姗，是她班里的四大美人之一。我们不仅没有争风吃醋，而且心甘情愿地让她坐遍每个人的脖子。姜姗小姐5岁时她爸姜晓鸿成了我的同事，我们经常一起去钓鱼，亲得象一家人。姜姗喜欢大喊大叫，声音高过帕瓦罗蒂，我们教唆她喊她爸"姜球球"。 
<P align=left><BR>　　我常带姜姗到小炒摊去吃女孩子不敢吃的东西，并哄她："世上最好吃的东西是鸡屁股。" 
<P align=left><BR>　　她无师自通地加上一句："世上最好听的屁是鸡放的屁。" 
<P align=left><BR>　　我常想着将来生个儿子并把他培养成天才，但如果能有姜姗这样的女儿，不要儿子也罢。<BR><BR><BR></P>
<P align=center><FONT color=#ff0000 size=3><B>大学十年（一个程序员的路程）(六)</B></FONT></P>
<P>林锐，1999年岁末</P>
<P align=left>　　　<BR>　　在本科三年级我第一次参加"星火杯"竞赛并获得软件二等奖后，马上成为低年级学生眼中的明星。我义务当上了一年级学生的上机辅导员。一天晚上我巡视机房，一女生请求帮助。 
<P align=left><BR>　　我见屏幕上空白一片，根本没有一行程序，十分疑惑地问："什么问题？" 
<P align=left><BR>　　"没有问题。"她把书往我手上一塞说："这些作业你帮我做。"然后就自个子跟她的同学玩乐，把我撇在一边，似乎我辛辛苦苦地学习就是为了给她做作业。 
<P align=left><BR>　　我定神对她细看，发觉她简直就是《射雕英雄传》里的黄蓉再世，顿时心就"突突突"直跳。当天晚上我没睡着，接下几天的课不知所云。在选修课《操作系统》考试时，我给家里写了一封超短信：请快寄钱来，我谈恋爱了。我交了白卷直奔她去。 
<P align=left><BR>　　我的初恋只有两个月，却让我思念了8年。她离我而去时没有任何理由，而我却失魂落魄。在我本科毕业前的18个月里，白天我狂热工作强作笑容，夜深人静时心痛如刀割而无法抑制。没有人为我"疗伤"，我是硬挺过去的，这一段经历使我日后心理承受能力极强。后来我开公司的失败虽然对信心有所打击，但根本无痛可言。 
<P align=left><BR>　　我们分手后并未成为陌生人，就象两只刺猬，离得远了就有点留恋，离得近了，就刺着对方。认识她时我虽然已略显才气，但并不具备成熟男人的魅力，很多事情我并不知道怎么去把握。有时"喜欢"并不能成为"爱"，感情也许是永远研究不透的学问。<BR>　　<BR>　　我读硕士研究生时有了一群生机勃勃的朋友，感情的伤痛被掩没了。朋友堆里夹着一位女生，她文雅而富有气质。平日里无拘无束，大伙戏称她是我的秘书。我的言行举止和穿着都经过她的调教，俩人出双入对，十分亲近，不知不觉有了感情。别人已经把我们当成恋人，我和她牵着小姜姗散步时，简直就象天堂里的一家人。她的温柔有时能让我失去所有斗志。 
<P align=left><BR>　　可是我当时着迷于事业，认为自己不久将干一番惊天动地的事。鉴于史玉柱在创业时就离过婚，所以我认为感情是事业的累赘，两者不可得兼。 
<P align=left><BR>　　更糟糕的是，我和第一个朋友耦断丝连，偏偏她俩是同班同学。我知道脚踩两只船没有好下场，可我的的确确同时喜欢着两个人，并梦想她俩能合二为一。我情愿被人指责，也不愿掩饰真实的感觉。有时她俩一同走过，我站在路上丢了魂似的看着俩人的背影，任凭看热闹的人指指点点。 
<P align=left><BR>　　我和第二个朋友已经有了很深的感情，她毕业后我曾坐火车千里送鲜花给她，让她感动过。而我固执的性格和对初恋的思念终于让她心碎。尽管我们已经几年没见，我依然看得见她留在我心里的那颗眼泪。<BR></P>
<P align=left>    我在西电六年半的学习和生活也许是一生中最珍贵的，叫我怎能不爱西电。 
<P align=left><BR>　　两年前我回西电，惊奇地发现校园里房前屋后长满了待收割的小麦！这所大学是从事电子科技的，种小麦干啥呀？ 
<P align=left><BR>　　朱总理曾讲过："目前国家粮食充足，再来三年自然灾害也不怕。"现在国泰民安，似乎用不着"深挖洞，广积粮"吧。我素知西电提创勤俭节约、自力更生，但与其种小麦还不如种蔬菜呢。 
<P align=left><BR>　　老同学告诉我，种小麦是为了应付"211"工程（为21世纪选拔100所重点大学）的检查团，因为"211"工程有较高的绿化指标。偏偏检查赶在冬天，那时的西北极难长草。西电本来就人多地少，地上一长草马上就会被谈恋爱的学生给折磨死。一到冬天，整个校园就光秃秃一片。用小麦绿化校园可谓千古绝笔，检查团的那些权贵人士早已五谷不分，岂知所见的"草坪"乃是麦田。<BR>　　<BR>　　浙江大学依山而傍西湖，是个美丽而高贵的大学。1997年春天，我就象干儿子那样挤进她的怀抱，并期望得到关爱。我到了向往已久的计算机辅助设计与图形学（CAD&CG）国家重点实验室读博士学位。导师是石教英教授，石老师虽然年过六旬，但精力充沛，红光满面，施拉普纳不及他半分精神。 
<P align=left><BR>　　我幸福地幻想着大干一番自己喜爱的专业，并计划在35岁左右成为实验室主任。开学的第一天，我兴冲冲地奔向实验室。进门不到5分钟，就因不懂规矩被看门的年青女子训了几次。为了不再冒犯规矩，我就老老实实地抓起一份计算机报纸并且站着阅读，心想这下不得罪谁了吧！ 
<P align=left><BR>　　突然一个气得脸色铁青的男人（机房管理员之一）对我断喝："你在干什么！你怎么可以不经允许就翻看别人的报纸！"似乎我是他一生中见到的最无耻的人。 
<P align=left><BR>　　我就象一个情窦初开的少年飘飘然地去拥抱梦中情人，不料迎来两个耳光，此下场比《猫和老鼠》中的猫还惨。如果这两个年轻人有幸看到我这篇文章，应该好好悔过自新，她与他的工作态度打击过数十个学生的积极性。我本是因为向往CAD&CG实验室而来的，得到的却是极坏的第一印象。 
<P align=left><BR>　　不出几日，我就发现实验室里人们大多轻言寡语、小心翼翼、井水不犯河水。初到此实验室的北方同学极为迷惑地问我："你们浙江人是不是都这个德性？我看你不太象嘛。" 
<P align=left><BR>　　也许你以为我以前的研究单位很土，刚到高贵的CAD&CG实验室，有点象刘姥姥那样无所适从，甚至有点自悲。非也，西电微电子所的设备、人员超过CAD&CG实验室数倍，我在微电子所的办公室就比CAD&CG实验室主任的还好。比物质条件是没有任何意思的，学生渴望的是自由、欢乐的环境，这样才能激发他们的创造力。压抑的环境会把一个个本来充满活力的年轻学生变成一群小老头，他们只好套上硕大的眼镜以显示眼里的世界有多么渺小。 
<P align=left><BR>　　如果不允许一个男人在工作时仰天大笑，这样的地方不去也罢。 
<P align=left><BR>　　我颇费周折地考入CAD&CG实验室，却尚未热身就全力而退，决心自立门户。至今我都没有用实验室的计算机编过一行程序。<BR><BR><BR></P>
<P align=center><FONT color=#ff0000 size=3><B>大学十年（一个程序员的路程）(七)</B></FONT></P>
<P>林锐，1999年岁末</P>
<P align=left>　　　<BR>
<P align=left>　　刚读博时我穷困潦倒，只有一床，一盆，一壶，一碗。我那些穷朋友们象挤牙膏一样挤一些钱资肋我。我买了一台计算机，在宿舍里开发软件产品"可视化软件开发工具 VA 4.0"。1997年8月，我去北京参加首届中国大学生电脑大赛软件展示，路费也是借的。同学为我壮胆时说："如果不能获奖，就回到实验室干活吧。" 
<P align=left><BR>　　我说一定会拿第一名，不然去干啥。 
<P align=left><BR>　　在软件展示时，我们发现很多好的作品是国家的科研项目，根本不是学生个人的作品，违背了竞赛的宗旨。如果允许这样做的话，我应该运几条生产线过来。我写了一份抗议书，找了十几个人签名（很多人感恨而不敢签）。但抗议能顶屁用，我参加过的科技竞赛、见过的科研鉴定多了，哪一次我没看到虚假？我写抗议书是因为眼里容不得沙子。如果我的专业是政治，早就坐牢去了。 
<P align=left><BR>　　这次竞赛选出十个"软件明星"，只有我的软件和清华大学博士生的项目值得一看。我不能否认他的项目水平极高，但那不是他个人的作品（评委甚至认识他的导师，知道项目的来龙去脉）。我的作品被评为第一，他的项目被评为第二。组委会来拍电视，可是找不到浙江大学的展板。因为浙江大学没有任何准备，我是一个人来的，我的作品夹在杭电的作品之中，没名没姓。我只好从塑料袋上剪下"浙江大学"四个字，贴在展板上撑撑门面。 
<P align=left><BR>　　自新中国成立以来，清华大学就一直在浙江大学头上"作威作福"，我好歹也争了一口气。可是颁奖时，组委会竟按地方顺序从北京念起，我沦落到第七，差点咽气。 
<P align=left><BR>　　我曾在上海的一辆公共汽车上与一位北京来的旅客聊天，此公极健谈。似乎他到上海旅游的目的就是为了发掘北京的优越性。见我挂着浙江大学的红色校徽，且对清华、北大并不神往，不禁十分迷惑，就问："浙江大学在浦东还是浦西？我要去看看。" 
<P align=left><BR>　　北京已经是极度优越了，那里的处长局长比我见过的土豆还多。就请不要把什么鸡皮蒜毛的好东西都拿走，给我们留点希望吧。<BR></P>
<P align=left>　　1997年11月，在穷得快挨饿的时候，我获得了中国大学生跨世纪发展基金特等奖（全国共20名，奖金1万元）。在人民大会堂领奖时，我以为能碰到宋健等人物，不料见到的却是政协的人手，不禁甚为失望。给我们出钱的是一个靠资本运作发财的集团，在宴会前，该集团领导人和我们座谈，他什么不好吹偏偏吹自己是个高科技企业："我们主要从事生物工程，几年前就掌握了克隆技术，英国的'克隆羊'简直是小菜一碟。……我们在东北有个农场，新品种的小麦长得比人还高，麦粒跟葡萄一样大，你们不久都会喝到用这种小麦酿的啤酒。……我如果去美国炒个总统，那就跟玩似得。" 
<P align=left><BR>　　我们几个获奖的博士生吃饱喝足、拿了钱后，关起门来把那个老板臭骂一通，扬长而归。别以为给钱就能让我们说好话！ 
<P align=left><BR>　　刚拿了"跨世纪发展基金"，又马上获得"浙江省青少年英才奖"，浙江大学也给我发奖学金。比起那些一个月只有300元工资的博士生们，我简直是"暴富"。还了朋友们给我的"救济款"后，仍然是个"富翁"。我老是觉得手头的钱是抢劫来的，心里不踏实。于是找浙江大学校团委"诉苦"，请校团委把我的"不义之财"捐给浙大的贫困学生。校团委的老师热情而坦诚，说愿意等我成为真正的富翁时再接受捐款，现在不能让我"杀鸡取卵"。但为了能让我表达心意，建议我资助"希望工程"的中学生，让我选了5个初一的学生，每个学生500元。我轻浮地以为自己真的帮助了5个中学生，直到1998年暑假我见到了其中的一个中学生，才发现自己做的好事只不过杯水车薪而已。我是到了自己贫困失意时才真正去帮助那些孩子的。<BR>　　<BR>　　在1997年，我在学生时期的荣誉已登峰造极，觉得自己的翅膀已经硬了，不想再混下去。我总以为自己是第二个史玉柱，应该开个软件公司来振兴民族软件产业。我曾到东软集团（沈阳）参加"民族软件产业青年论坛"，大不咧咧地作了一次演讲（现在发现演讲的内容没有一项是可以操作的）。杭州有一个记者来采访我，我谈了一天的理想，记者还是没听明白，干脆自己写新闻报道，并且含蓄地做了一个广告：万事俱备，只待投资。 
<P align=left><BR>　　由于我能说会道，频频上电视，引来近10个投资者。我选择了一位年龄比我大一倍、非常精明的商人作合伙人，成立了"杭州临境软件开发有限公司"。彼时，我可谓光芒四射，名片上印着"以振兴民族软件产业为已任，做真实、正直、优秀的科技人员。"浙江大学想开除我，被我"晓之以理、动之以情"安抚住。 
<P align=left><BR>　　我当时想开发一套名为Soft3D的图形系统，此系统下至开发工具，上至应用软件，无所不包。公司名字起为"临境"有两个含义：一是表示身临其境，这是我对图形技术的追求；二是表示快到了与SGI公司称兄道弟的境界，这是我对事业的追求。"临境"这个名字我在读本科时就已经想好了，1997年底公司成立的那一天，我有一种"媳妇熬成婆"的悲壮感觉。 
<P align=left><BR>　　我从实验室挖来一位聪明绝顶的硕士生做技术伙伴。他叫周昆，年龄很小（1978年出生），研究能力极强。如果按照浙江大学计算机系博士生毕业的论文要求，他入学读硕士的那一天就可以博士毕业。周昆的头明显比我的大，估计其脑容量至少是我1.5倍。我曾经以师兄的身份为他洗过一双袜子，他因此觉得我是个好人。我俩一拍即合，常常为Soft3D的设计方案自我倾倒。一想到Microsoft公司的二维Windows系统即将被Soft3D打击得狼狈不堪时，我们就乐不可支，冲劲十足。 
<P align=left><BR>　　我已经把"振兴民族软件产业"列入日程，并且提前担忧将来钱挣得太多用不完该怎么办。1998年5月份，我们做了一套既不是科研又不全象商品的软件。软件产品宣传了几个月，并没有出现订单如潮、接应不暇的局面（事实上压根就没有反应）。我意识到没有找对市场，但仍觉得产品中的一些技术很有价值，将它改装成其它软件也许能开创"东方不亮西方亮"的新局面。 
<P align=left><BR>　　于是我向只有一面之缘尚在北大方正工作的周鸿一求助。他是真正的软件高手，当我小心翼翼地展示约10万行C++代码的软件时，他竟在十几分钟内就指出多处重大的设计错误，使我目瞪口呆地意识到整个软件系统的价值为零。那种心痛啊，就象眼睁睁看着孩子被狼吃掉一样。<BR>　　到1998年10月，我用光了30万元资金。周鸿一再一次从北京飞到杭州，三下五除二替我把只活了一年的公司给关闭掉。他放心不下，觉得我"恶病需用猛药补"，于是意尤未尽地把我捉到北大方正插在他管辖的部门，让我学习怎样做事情。 
<P align=left><BR>　　北京寒冷的冬天可以营造一种凄凉的气氛，冲去一切可以自我原谅的借口。我并不是太爱虚荣的人，知道这次失败是我的毛病积累到一定水准忍不住喷发出来的结果。我绝不能以年纪尚轻不太懂市场与管理为理由轻率地敷衍过去。 
<P align=left><BR>　　从北大方正"劳改"了两个月回来，我心服口服地承认失败了。我把察觉到的数十个毛病列出来，日后一个一个克服掉。我写的《软件工程思想》一书，大部分内容取自我开公司失败的教训录。我现在能客观地从可行性分析角度说明我和投资方所犯的主要错误，以祭我那幼年夭折的软件公司。 
<P align=left><BR>　　我的主要错误： 
<P align=left><BR>　　（1）年青气盛，在不具备条件的情况下，想一下子做成石破天惊的事。我的设计方案技术难度很大（有一些是热门的研究课题），只有30万元资金的小公司根本没有财力与技术力量去做这种事。分析经济与技术可行性，即可否定我的设计方案。 
<P align=left><BR>　　（2）我以技术为中心而没有以市场为中心去做产品，以为自己喜欢的软件别人也一定喜欢。我涉足的是在国内尚不成气候的市场，我无法估计这市场有多大，人们到底要什么。伙伴们跟着我瞎忙乎一整年，结果做出一个洋洋洒洒没人要的软件。分析市场可行性也可以否定我的设计方案。 
<P align=left><BR>　　（3）我做到了"真实、正直"，但并没有达到优秀的程度。我曾得到很多炫目的荣誉，但学生时代的荣誉只是一种鼓励，并不是对我才能和事业的确认。正因为我不够优秀，学识浅薄，加上没有更高水平的人指点我，才会把事情搞砸了。 
<P align=left><BR>　　投资方的主要错误： 
<P align=left><BR>　　（1）投资方是个精明的商人，他把我的设计方案交给美国的一个软件公司分析，结论是否定的。但他觉得我这个人很有利用价值，希望可以做成功其它事情，即使Soft3D软件做不成功，只要挣到钱就行。这种赌博心态使得正确的可行性分析变得毫无价值。 
<P align=left><BR>　　（2）由于我不懂商业，又象所有单纯的学生那样容易相信别人。他让我写下了不公正的合同，我竟然向他借钱买下本来就属于我的30%技术股份。他名为投资方，实质上双方各出了一半的资金（他出51%，我出49%）。他在明知Soft3D软件不能成功的情况下，却为了占我的便宜而丧失了应有的精明，最终导致双方都损失。 
<P align=left><BR>　　关闭公司时，他搬走了所有的固定财产。我明明投入了技术，又亏了15万元，却一无所得。几个月后当我意识到不公平而找他协商时，他说："只能怨你自己愚蠢，读到博士，连张合同都看不懂。"我觉得自己在此事上虽愚但不蠢，真实、正直的品质加上不懈的努力会让我变得有智慧。自己的奋斗没什么可以后悔的，学到的远比失去的多，下一次会做得更好。<BR><BR><BR><BR></P>
<P align=center><FONT color=#ff0000 size=3><B>大学十年（一个程序员的路程）(八)</B></FONT></P>
<P>林锐，1999年岁末</P>
<P align=left>　　　<BR>
<P align=left>　　公司关闭后，我就面壁反省，补习基础，准备为几年之后"东山再起"养精蓄锐。 
<P align=left><BR>　　1999年1月，有一个民营企业家G先生向我请教一个问题："我给一个年轻人投资了100万元，建立一家从事环保信息应用开发的软件公司。他曾许诺一年内创利润上千万元，可是才过去5个月，他就把100万元用完了，什么也没挣到。我实在不明白是怎么回事，请你帮我分析分析。" 
<P align=left><BR>　　这位G先生年龄有我的2.5倍，曾在西北当过几十年的技术兵，性格豪爽。他投资的那个年轻人叫Y（以下称Y经理），自称有英国的管理学文凭，能对公司的市场、技术、管理一把抓。G先生喜欢说"钱我没问题"，于是想也不想就投了100万元，并且给Y经理40%的股份。 
<P align=left><BR>　　G先生请Y经理到家里坐谈。我那时突然狡猾起来，自称是G先生的远房亲戚，在浙大读半导体物理，特羡慕那些做软件的同龄人，渴望听听Y经理的高见。Y经理果然信口开河，滔滔不绝，连绵不断，如黄河泛滥，一发而不可收拾。我激动地想去参观他的公司和产品，并表示要抛弃物理专业，立马转向软件专业。 
<P align=left><BR>　　Y经理得意而笑："对于IT行业你就不懂了，我们经营的是一种理念而不是产品，这是国外最先进的思想。你可以来参观我的公司，但你看不到具体的东西，只能用心去领会。" 
<P align=left><BR>　　这屁话比曹元朗的诗还臭（《围城》）。我搞软件只有8年功夫，说我不懂IT行业并不过分。可我读了10年大学都没听到过如此"先进"的思想。如果这是英国管理学教育的成果，我认为自己已经发现了这个曾经是"日不落帝国"的衰败的真正原因，有必要找英国首相切磋一番。 
<P align=left><BR>　　我对G先生说："Y经理根本不懂技术，为人极其浮夸。应马上关闭公司，以绝后患。那100万元你也亏得起，就买个教训吧。" 
<P align=left><BR>　　G先生说："钱我没问题，那100万元就算我在澳门赌博输掉了。" 
<P align=left><BR>　　1999年5月，G先生又来找我请教另一个问题。 
<P align=left><BR>　　他说："小林啊，你上次说得很有道理，我接受了教训。" 
<P align=left><BR>　　我说："那是好事，不论年龄大小，知错就改总是好孩子嘛。" 
<P align=left><BR>　　他叹了一口气："最近几个月，Y经理又花了我100万元。" 
<P align=left><BR>　　我当时差点给噎死，气凶凶地训G先生："我早跟你讲过，Y经理不是好东西，叫你关闭公司你不听，你老说钱没问题，亏你200万元活该。" 
<P align=left><BR>　　老先生象犯了错误的小孩子："Y经理每一次向我要钱时，都拍拍胸脯保证下个月就有利润，所以我一而再、再而三地掏钱给他，希望能救活软件公司。现在该怎么办？" 
<P align=left><BR>　　一个有20名职员的软件公司，程序员只有三四个，连"十羊九牧"都不如。200万元的财务报表中，有100多万元用于吃喝玩乐和行贿。这种公司完全无药可救。台湾作家李敖曾说过："当你没法扶一个人上马时，也许应该拉他下马"。从5月份到8月份，我行侠仗义，替G先生清理软件公司，根除Y经理这些败类。 
<P align=left><BR>　　可是难哪，因为G先生投资的公司根本不把G先生放在眼里，又岂能让我插手。就在我想方设法卡住Y经理的脖子时，Y经理总能从G先生那里挖出钱。G先生就象被吸血鬼附身，却仍存幻想："如果吸血鬼能治好我的病，就让它再吸些血吧。" 
<P align=left><BR>　　Y经理又和一个来自深圳的骗子H想了注意，教唆G先生再投资100万元新建一个"指纹"公司，说利润将比开发环保信息的应用开发更加可观（估计要用亿来度量）。就在他们准备鉴合同之际，我偶而路过，发现异常，便强行阻止。 
<P align=left><BR>　　G先生是个好人，但太顽固。好几次我气极想撒手不管，但又不忍心好人被坏人欺负。我曾请求G先生："我求您别再说钱没有问题，您的私人财产会被人骗光。请让我把这漏洞堵住吧，好让我安心地回学校做完博士学位论文。" 
<P align=left><BR>　　到8月份，我和G先生的两个儿子，伙同"黑社会"的朋友，强行把那个软件公司搬回G先生的工厂中，辞退所有员工。现在那个软件公司被别人接管，仍然半死不活，好在每月亏损不过几万元，G先生承受得起，我就不再去碰G先生的伤疤。 
<P align=left><BR>　　我以前从未玩过与人勾心斗角的游戏，此三个月的经历让我疲惫不堪。那个软件公司的员工曾透露，Y经理的英国文凭大约是在上海或杭州某个大专培训班里混来的。方鸿渐买美国克莱顿大学博士文凭尚知羞耻（《围城》），而Y经理却趾高气扬。害得我平白无故为英国教育界担心，回想起英国鬼子曾打劫过中国，倍感耻辱。 
<P align=left><BR>　　G先生是正人君子，不防小人，实在不是现代的商人。我和他成了忘年交。G先生第一次见到我时问我工资几何，我答曰："300元，够买几本书。"G先生甚为着急："这样的条件怎么能生活？你就搬到我家来住吧，我家条件好，你可以安心地学习，将来可为国家多作贡献。"后来他几次相邀，我就看在国家的份上住入他家，一直住到博士毕业。自从读中学以来，我第一次享受食来张嘴，不用洗衣服的奢侈。唯一的麻烦是我得向很多朋友解释："我不是被别人养起来了，是为了国家的利益，不得已才这么做的。G先生是男的不</P>
<P align=left>　　<BR>　　我在读博士学位的三年里，经历有点奇特。我遗憾的是"真才实学"没有长进，并且没有了在西电那样的纯真友情和缠绵爱情。略为欣慰的是我做了几件感人的事，也碰到了几件有趣的事，让我发觉自己变得成熟了。<BR>　　<BR>　　我很想讲一讲自己参加希望工程的经历与感受。 
<P align=left><BR>　　1998年暑假，浙江省云和县梅源中学的老师们带希望班几名优秀学生来到浙江大学，其中有受我资助的何晓丽同学。我才知道初中学生一个学期的学杂费就要600元。何晓丽哭诉下学期不能再上学，其它的学生处境相似。我以前资助的2000元是5个人3年平均分派的，根本不起作用。 
<P align=left><BR>　　那时侯，公司倒闭使我债务累累，并且自信心遭受十年来最大的打击。我在入不敷出、心事重重的情况下，没有推卸义务，而是"变本加利"的去尽这个义务。我在西电的好朋友史江一替我"接管"了一个中学生。有一个小姐追求我，我乘机给她一个活生生的"见面礼"。1999年7月份，我把工资卡送给了一个大学生，自己成了无产阶级。从1997年11月起到我博士毕业期间，我直接或间接地为7个贫困学生捐助了约1万元。我有了几点感受： 
<P align=left><BR>　　（1）对人的帮助莫过于给予希望。<BR>　　（2）人在任何时候都能够帮助比自己更困难的人，哪怕自己处于困境。<BR>　　（3）帮助是要负责任的，一定要设法做成有意义的结果。不负责任的帮助就是"施舍"。"施舍"缺乏诚意，不配称为"帮助"。 
<P align=left><BR>　　不少人曾对我说："你是做大事的人，不要在小事上浪费精力，更不要为了别人而害了自己。" 
<P align=left><BR>　　很多人总以为自己将来是伟大人物而不愿做小事，从而到死也没做成什么有价值的事。也有很多人希望自己成功后再去帮助别人，无论他最终成功还是失败，一辈子也没有帮助过人。还有很多人略有权势或略有名气后，便觉得自己吃喝玩乐、放屁、上厕所都是重要的事，在他们最能够帮助人的时候却以"太忙""没空"为理由不去做好事。 
<P align=left><BR>　　我也在忙碌、在奋斗，也渴望成为伟大人物，但我希望让有意义的小事充实一生。<BR>　　<BR>　　我还要讲另一件我常干的小事。 
<P align=left><BR>　　很多受过高等教育的人保留了随地扔垃圾的"风俗习惯"，这恶习就象脚气那样虽然不致人于死地，但能遗臭万年。即便象浙江大学这等典雅的地方，你都经常可以看见草坪、校门口的废纸、果皮、塑料袋，垃圾就如同天使脸上的一砣狗屎那样鲜艳，人们竟然无动于衷。我记不请自己多少次当众、当道捡垃圾，可是几年来我都没有在大学里发现第二个做这种事的人。 
<P align=left><BR>　　我很想对所有的教授、博士、硕士、学士们讲句话："救人并不只是医生干的事，保护环境也不只是清洁工干的事。只要你多化几秒钟，弯几次腰，就能让环境更加清洁，让心灵更加清洁。我们不必个个道貌岸然，但至少应该做到'读书明理'。" 
<P align=left><BR>　　那些正在追我和将要追我的小姐们，你多捡一次垃圾就多一份希望，你丢一次垃圾就不再有希望。 
<P align=left><BR>　　我这样碟碟不休地讲"希望工程"和"捡垃圾"，并不是在沽名钓誉，也不是在布道，只是希望我这些"金玉良言"能触动更多的自以为自己是高素质的人们。<BR><BR><BR><BR></P>
<P align=center><FONT color=#ff0000 size=3><B>大学十年（一个程序员的路程）(九)</B></FONT></P>
<P>林锐，1999年岁末</P>
<P align=left>　　　<BR>
<P align=left>　　<BR>　　在浙大的三年里，我没有对感情"播种"，所以也没有收获，但有一次"艳遇"。 
<P align=left><BR>　　在关闭公司的那天晚上，人去楼空，我象严监生断气前那样盯着尚未熄灭的灯。这时一位杭大（现已并入新浙大）的四年级女生来找我。一年前她曾作为实习记者采访过我，谈得很投机。我知道她是聪明好学的学生，曾大言不惭地教导过她几次。我开公司的一年里几乎没与她来往过，想不到当我成了光杆司令时她还能"兔死狐悲"地来看望我，着实让我感动。 
<P align=left><BR>　　我不无自嘲地对她说："你不用安慰我了，这次失败我还能挺得住。" 
<P align=left><BR>　　她说："我不是来安慰你的。我一直盼望你的公司倒闭，等了整整一年。在你去北京之前，我有话跟你说。" 
<P align=left><BR>　　我心下一凉，搞不清什么地方得罪她了，让她如此记恨我。大概是我得意之日教导她时言语过重，伤了她的自尊心。好在我是知错就改的人，当下惭愧地向她道歉。 
<P align=left><BR>　　她不理会我，说："你开公司时光环重重，我根本无法靠近你。即便那时我成了你的好朋友，你也不会把我放在眼里。我暗恋你一年了，一直都没跟你讲。我早知道你会失败的，失败时你就剩下一个人，你才会知道我是真心爱你的，而不是冲着其它来的。你是个优秀的理科学生，我是个优秀的文科学生，门当户对，珠帘合壁。请你不要觉得女的追男的很荒唐，我是认真的，请你给我一次机会。 
<P align=left><BR>　　我虽然评不上情场高手，好歹也在爱河里游过泳，呛过水。想不到仓促之下，被一女子说得脸红耳赤，无法掩盖窘相。 
<P align=left><BR>　　我一直认为男人应该勤劳一辈子，好让柔弱的女子舒舒服服地在大树下乘凉。而学习、工作出色的女子只能做朋友，不能做夫人。 
<P align=left><BR>　　她从小习诗弄文，读大学时蜚声杭大。我见到她第一面时就把她归类为事业上的朋友，所以才会正儿八经地与她交谈并教导她。我在西电的两个女朋友就属于读书不太好但比较有魅力的女生，我从来也没有指导过她们学习。如果我喜欢一个女孩子并希望她成为我的女朋友，我早就去追求她了，岂能轮到她追我。 
<P align=left><BR>　　她见我彷徨不安，便滔滔不绝地例举爱我的"证据"。我开公司一年来发生的事她了如指掌，就象在我的房间里放了窃听器，在我的朋友中安插了间谍。她甚至跑到团中央去查阅我的老底，有些"案件"我过去的伙伴都未必知道。她思念我时，写了很多诗，留了很多泪，为此杭大的一些男生四处追查"凶犯"。 
<P align=left><BR>　　我早知道有些人不编程序、不做实验就能写出论文，难道男女之间不接触也能滋生感情？ 
<P align=left><BR>　　第一回合我就被她挑翻在地，我莫名其妙地成了"负心郎"，无地自容地把她送走。我以为这是文科女生的风格，就当作一个趣事不放在心上。 
<P align=left><BR>　　我从北大方正"劳改"回来不久后，她提着一篮鲜花来找我，并对我说了她的梦想：在寒冷的冬天，大地铺满积雪，四野人鸟绝迹。我孤独求败地深居在冷冰冰的小木屋里。在一个狂风呼啸的黄昏，她一手拎着亲手做的饭菜（我想应该有土豆和辣椒），一手拎着一捆木柴，敲开了那扇紧闭的门和心房。终于木屋四壁生辉…… 
<P align=left><BR>　　我对第一个朋友最好的赞美是："黄蓉很象你。" 
<P align=left><BR>　　我对第二个朋友最深情的话是："将来咱们老了，我回黄岩当物理老师，你当语文老师。" 
<P align=left><BR>　　相比之下，我的确不及杭大女生浪漫。此后她再找过我几次，当我意识到她动真格的时候，她已不能自拔。爱情是很怪的东西，并不是两个好人就能碰出火花。就象一头好牛和一匹好马，可以一起干活，但没有必要吃住都关在一起。 
<P align=left><BR>　　与其让她长痛，还不如让她狠痛一次。 
<P align=left><BR>　　我对她说："我们真的不能在一起。"<BR>　　她问为什么？<BR>　　我说："我不喜欢你。"<BR>　　她再问为什么？<BR>　　我说："不为什么，我没有心跳的感觉。" 
<P align=left><BR>　　她说十年之后再找我。 
<P align=left><BR>　　我知道她会奋发图强，因为她会一直想着"为什么"，期望让自己有个满意的答案。 这条路8年前我已经走过了。 
<P align=left><BR>　　半年前我再见到她时，她已经直攻博了，在文学上有了长足的进步。并且找了一个软件工程师做朋友。 
<P align=left><BR>　　我说软件工程师未必就懂得软件工程的道理，待我写的软件工程书籍出版后再送她一本。 
<P align=left><BR>　　她说将会送给我她的第一本著作，书中开头的几个故事是关于我和她。 
<P align=left><BR>　　我说看了她的书后一定会写一篇读后感给她。 
<P align=left><BR>　　她仍然提醒我不要忘记十年后的相约。<BR><BR>        </P>
<P align=left><BR>
<P align=left>　　<BR>　　<BR>　　我在浙大有一个值得怀念的人，她是管宿舍楼的大妈。在1999年1月至5月，我在博士生宿舍静心修炼内功，大妈就象我的"护法"。晚上九点钟时，她就会烧些东西给我吃。我和大妈非亲非故，同学们都不明白大妈为什么待我好。我想那是因为我没把自己当成"博士"来看，而是当成"人"来看。 
<P align=left><BR>　　5月份后，我看在国家的份上搬到一个千万富翁家里去住，大妈也调到"熊猫馆"当掌门人。我一般隔几个月去看望大妈一次，中秋节我就和她在一起。朋友们知道我和大妈有这层关系，就纷纷托大妈物色女朋友。 
<P align=left><BR>　　大妈果然称职，她就象特务那样审视大楼里的女生。可大妈毕竟是大妈，她采用的"标准"是几十年前的版本，无法与现今的兼容。她盯住了不该盯的，却漏掉了不该漏的，至今都未"推销"成功一个。 
<P align=left><BR>　　这件事让我又明白了一个软件工程道理：光有完善的数据库还不够，还应该提供很好的搜索引擎。<BR>　　<BR>　　我相信生活、科学、艺术中的很多道理是相通的，于是就不嫌人笑，写下《软件工程思想》这本书，并写下了十年来的故事，交最后一次作业。 
<P align=left><BR>　　大学十年给我留下了很多美好的回忆，现在可以打上漂亮的句号了。尽管我即将告别大学，但我会终生学习。也许我成不了天才，但还有机会成为天才的爸爸。 
<P align=left><BR>　　我想大声呼喊出那种可以用双手把握未来的自豪。 
<P align=left><BR>　　我要对年轻的朋友们说两句肺腑之言： 
<P align=left><BR>　　一、主动去创造环境，否则你无法设计人生。 
<P align=left><BR>　　二、生活和工作要充满激情，否则你无法体会到淋漓尽致的欢乐与痛苦。 
<P align=left><BR>　　如果我碰到上帝，只会对他说一句话："你看厕所去吧。"<BR><BR></P><img src ="http://www.blogjava.net/faintbear/aggbug/12515.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-09-09 11:08 <a href="http://www.blogjava.net/faintbear/archive/2005/09/09/12515.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修练8年C++面向对象程序设计之体会(林锐博士)</title><link>http://www.blogjava.net/faintbear/archive/2005/09/09/12514.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Fri, 09 Sep 2005 02:59:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/09/09/12514.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/12514.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/09/09/12514.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/12514.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/12514.html</trackback:ping><description><![CDATA[修练8年C++面向对象程序设计之体会<BR><BR>
<P style="TEXT-INDENT: 2em">六年前，我刚热恋“面向对象”（Object-Oriented）时，一口气记住了近十个定义。六年后，我从几十万行程序中滚爬出来准备写点心得体会时，却无法解释什么是“面向对象”，就象说不清楚什么是数学那样。软件工程中的时髦术语“面向对象分析”和“面向对象设计”，通常是针对“需求分析”和“系统设计”环节的。“面向对象”有几大学派，就象如来佛、上帝和真主用各自的方式定义了这个世界，并留下一堆经书来解释这个世界。</P>
<P style="TEXT-INDENT: 2em">有些学者建议这样找“对象”：分析一个句子的语法，找出名词和动词，名词就是对象，动词则是对象的方法（即函数）。</P>
<P style="TEXT-INDENT: 2em">当年国民党的文人为了对抗毛泽东的《沁园春·雪》，特意请清朝遗老们写了一些对仗工整的诗，请蒋介石过目。老蒋看了气得大骂：“娘希匹，全都有一股棺材里腐尸的气味。”我看了几千页的软件工程资料，终于发现自己有些“弱智”，无法理解“面向对象”的理论，同时醒悟到“编程是硬道理。”</P>
<P style="TEXT-INDENT: 2em">面向对象程序设计语言很多，如Smalltalk、Ada、Eiffel、Object Pascal、Visual Basic、C++等等。C++语言最讨人喜欢，因为它兼容C 语言，并且具备C 语言的性能。近几年，一种叫Java 的纯面向对象语言红极一时，不少人叫喊着要用Java 革C++的命。我认为Java 好比是C++的外甥，虽然不是直接遗传的，但也几分象样。外甥在舅舅身上玩耍时洒了一泡尿，俩人不该为此而争吵。</P>
<P style="TEXT-INDENT: 2em">关于C++程序设计的书藉非常多，本章不讲C++的语法，只讲一些小小的编程道理。如果我能早几年明白这些小道理，就可以大大改善数十万行程序的质量了。</P>
<P style="TEXT-INDENT: 2em"><STRONG>1. C++面向对象程序设计的重要概念</STRONG></P>
<P style="TEXT-INDENT: 2em">早期革命影片里有这样一个角色，他说：“我是党代表，我代表党，我就是党。”后来他给同志们带来了灾难。</P>
<P style="TEXT-INDENT: 2em">会用C++的程序员一定懂得面向对象程序设计吗？</P>
<P style="TEXT-INDENT: 2em">不会用C++的程序员一定不懂得面向对象程序设计吗？</P>
<P style="TEXT-INDENT: 2em">两者都未必。就象坏蛋入党后未必能成为好人，好人不入党未必变成坏蛋那样。</P>
<P style="TEXT-INDENT: 2em">我不怕触犯众怒地说句大话：“C++没有高手，C 语言才有高手。”在用C 和C++编程8年之后，我深深地遗憾自己不是C 语言的高手，更遗憾没有人点拨我如何进行面向对象程序设计。我和很多C++程序员一样，在享用到C++语法的好处时便以为自己已经明白了面向对象程序设计。就象挤掉牙膏卖牙膏皮那样，真是暴殄天物呀。</P>
<P style="TEXT-INDENT: 2em">人们不懂拼音也会讲普通话，如果懂得拼音则会把普通话讲得更好。不懂面向对象程序设计也可以用C++编程，如果懂得面向对象程序设计则会把C++程序编得更好。本节讲述三个非常基础的概念：“类与对象”、“继承与组合”、“虚函数与多态”。理解这些概念，有助于提高程序的质量，特别是提高“可复用性”与“可扩充性”。</P>
<P style="TEXT-INDENT: 2em">1.1 类与对象</P>
<P style="TEXT-INDENT: 2em">对象（Object）是类（Class）的一个实例（Instance）。如果将对象比作房子，那么类就是房子的设计图纸。所以面向对象程序设计的重点是类的设计，而不是对象的设计。类可以将数据和函数封装在一起，其中函数表示了类的行为（或称服务）。类提供关键字public、protected 和private 用于声明哪些数据和函数是公有的、受保护的或者是私有的。</P>
<P style="TEXT-INDENT: 2em">这样可以达到信息隐藏的目的，即让类仅仅公开必须要让外界知道的内容，而隐藏其它一切内容。我们不可以滥用类的封装功能，不要把它当成火锅，什么东西都往里扔。</P>
<P style="TEXT-INDENT: 2em">类的设计是以数据为中心，还是以行为为中心？</P>
<P style="TEXT-INDENT: 2em">主张“以数据为中心”的那一派人关注类的内部数据结构，他们习惯上将private 类型的数据写在前面，而将public 类型的函数写在后面，如表8.1(a)所示。</P>
<P style="TEXT-INDENT: 2em">主张“以行为为中心”的那一派人关注类应该提供什么样的服务和接口，他们习惯上将public 类型的函数写在前面，而将private 类型的数据写在后面，如表8.1(b)所示。</P>
<P style="TEXT-INDENT: 2em">
<CENTER><IMG src="http://cimg.163.com/catchpic/1/15/15085E8BC7E018B2BDAB3DFEED127750.gif" border=0></CENTER>
<P></P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em">很多C++教课书主张在设计类时“以数据为中心”。我坚持并且建议读者在设计类时“以行为为中心”，即首先考虑类应该提供什么样的函数。Microsoft 公司的COM 规范的核心是接口设计，COM 的接口就相当于类的公有函数[Rogerson 1999]。在程序设计方面，咱们不要怀疑Microsoft 公司的风格。</P>
<P style="TEXT-INDENT: 2em">设计孤立的类是比较容易的，难的是正确设计基类及其派生类。因为有些程序员搞不清楚“继承”（Inheritance）、“组合”（Composition）、“多态”（ Polymorphism）这些概念。 <BR><BR><BR></P>
<P style="TEXT-INDENT: 2em">1.2 继承与组合</P>
<P style="TEXT-INDENT: 2em">如果A 是基类，B 是A 的派生类，那么B 将继承A 的数据和函数。示例程序如下：</P>
<P style="TEXT-INDENT: 2em">class A</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">void Func1(void);</P>
<P style="TEXT-INDENT: 2em">void Func2(void);</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">class B : public A</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">void Func3(void);</P>
<P style="TEXT-INDENT: 2em">void Func4(void);</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">// Example</P>
<P style="TEXT-INDENT: 2em">main()</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">B b; // B的一个对象</P>
<P style="TEXT-INDENT: 2em">b.Func1(); // B 从A 继承了函数Func1</P>
<P style="TEXT-INDENT: 2em">b.Func2(); // B 从A 继承了函数Func2</P>
<P style="TEXT-INDENT: 2em">b.Func3();</P>
<P style="TEXT-INDENT: 2em">b.Func4();</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">这个简单的示例程序说明了一个事实：C++的“继承”特性可以提高程序的可复用性。正因为“继承”太有用、太容易用，才要防止乱用“继承”。我们要给“继承”立一些使用规则：</P>
<P style="TEXT-INDENT: 2em">一、如果类A 和类B 毫不相关，不可以为了使B 的功能更多些而让B 继承A 的功能。</P>
<P style="TEXT-INDENT: 2em">不要觉得“不吃白不吃”，让一个好端端的健壮青年无缘无故地吃人参补身体。</P>
<P style="TEXT-INDENT: 2em">二、如果类B 有必要使用A 的功能，则要分两种情况考虑：</P>
<P style="TEXT-INDENT: 2em">（1）若在逻辑上B 是A 的“一种”（a kind of ），则允许B 继承A 的功能。如男人（Man）是人（Human）的一种，男孩（Boy）是男人的一种。那么类Man 可以从类Human 派生，类Boy 可以从类Man 派生。示例程序如下：</P>
<P style="TEXT-INDENT: 2em">class Human</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">…</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">class Man : public Human</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">…</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">class Boy : public Man</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">…</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">（2）若在逻辑上A 是B 的“一部分”（a part of），则不允许B 继承A 的功能，而是要用A和其它东西组合出B。例如眼（Eye）、鼻（Nose）、口（Mouth）、耳（Ear）是头（Head）的一部分，所以类Head 应该由类Eye、Nose、Mouth、Ear 组合而成，不是派生而成。示例程序如下：</P>
<P style="TEXT-INDENT: 2em">class Eye</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">void Look(void);</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">class Nose</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">void Smell(void);</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">class Mouth</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">void Eat(void);</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">class Ear</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">void Listen(void);</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">// 正确的设计，冗长的程序</P>
<P style="TEXT-INDENT: 2em">class Head</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">void Look(void) { m_eye.Look(); }</P>
<P style="TEXT-INDENT: 2em">void Smell(void) { m_nose.Smell(); }</P>
<P style="TEXT-INDENT: 2em">void Eat(void) { m_mouth.Eat(); }</P>
<P style="TEXT-INDENT: 2em">void Listen(void) { m_ear.Listen(); }</P>
<P style="TEXT-INDENT: 2em">private:</P>
<P style="TEXT-INDENT: 2em">Eye m_eye;</P>
<P style="TEXT-INDENT: 2em">Nose m_nose;</P>
<P style="TEXT-INDENT: 2em">Mouth m_mouth;</P>
<P style="TEXT-INDENT: 2em">Ear m_ear;</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">如果允许Head 从Eye、Nose、Mouth、Ear 派生而成，那么Head 将自动具有Look、Smell、Eat、Listen 这些功能：</P>
<P style="TEXT-INDENT: 2em">// 错误的设计</P>
<P style="TEXT-INDENT: 2em">class Head : public Eye, public Nose, public Mouth, public Ear</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">上述程序十分简短并且运行正确，但是这种设计却是错误的。很多程序员经不起“继承”的诱惑而犯下设计错误。</P>
<P style="TEXT-INDENT: 2em">一只公鸡使劲地追打一只刚下了蛋的母鸡，你知道为什么吗？</P>
<P style="TEXT-INDENT: 2em">因为母鸡下了鸭蛋。</P>
<P style="TEXT-INDENT: 2em">本书3.3 节讲过“运行正确”的程序不见得就是高质量的程序，此处就是一个例证。 <BR><BR><BR><BR></P>
<P style="TEXT-INDENT: 2em">1.3 虚函数与多态</P>
<P style="TEXT-INDENT: 2em">除了继承外，C++的另一个优良特性是支持多态，即允许将派生类的对象当作基类的对象使用。如果A 是基类，B 和C 是A 的派生类，多态函数Test 的参数是A 的 指针。那么Test 函数可以引用A、B、C 的对象。示例程序如下：</P>
<P style="TEXT-INDENT: 2em">class A</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">void Func1(void);</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">void Test(A *a)</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">a->Func1();</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">class B : public A</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">…</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">class C : public A</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">…</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">// Example</P>
<P style="TEXT-INDENT: 2em">main()</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">A a;</P>
<P style="TEXT-INDENT: 2em">B b;</P>
<P style="TEXT-INDENT: 2em">C c;</P>
<P style="TEXT-INDENT: 2em">Test(&a);</P>
<P style="TEXT-INDENT: 2em">Test(&b);</P>
<P style="TEXT-INDENT: 2em">Test(&c);</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">以上程序看不出“多态”有什么价值，加上虚函数和抽象基类后，“多态”的威力就显示出来了。</P>
<P style="TEXT-INDENT: 2em">C++用关键字virtual 来声明一个函数为虚函数，派生类的虚函数将（override）基类对应的虚函数的功能。示例程序如下：</P>
<P style="TEXT-INDENT: 2em">class A</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">virtual void Func1(void){ cout<< “This is A::Func1 \n”}</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">void Test(A *a)</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">a->Func1();</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">class B : public A</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">virtual void Func1(void){ cout<< “This is B::Func1 \n”}</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">class C : public A</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">virtual void Func1(void){ cout<< “This is C::Func1 \n”}</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">// Example</P>
<P style="TEXT-INDENT: 2em">main()</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">A a;</P>
<P style="TEXT-INDENT: 2em">B b;</P>
<P style="TEXT-INDENT: 2em">C c;</P>
<P style="TEXT-INDENT: 2em">Test(&a); // 输出This is A::Func1</P>
<P style="TEXT-INDENT: 2em">Test(&b); // 输出This is B::Func1</P>
<P style="TEXT-INDENT: 2em">Test(&c); // 输出This is C::Func1</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">如果基类A 定义如下：</P>
<P style="TEXT-INDENT: 2em">class A</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">virtual void Func1(void)=0;</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">那么函数Func1 叫作纯虚函数，含有纯虚函数的类叫作抽象基类。抽象基类只管定义纯虚函数的形式，具体的功能由派生类实现。</P>
<P style="TEXT-INDENT: 2em">结合“抽象基类”和“多态”有如下突出优点：</P>
<P style="TEXT-INDENT: 2em">（1）应用程序不必为每一个派生类编写功能调用，只需要对抽象基类进行处理即可。这一</P>
<P style="TEXT-INDENT: 2em">招叫“以不变应万变”，可以大大提高程序的可复用性（这是接口设计的复用，而不是代码实现的复用）。</P>
<P style="TEXT-INDENT: 2em">（2）派生类的功能可以被基类指针引用，这叫向后兼容，可以提高程序的可扩充性和可维护性。以前写的程序可以被将来写的程序调用不足为奇，但是将来写的程序可以被以前写的程序调用那可了不起。 <BR><BR><BR></P>
<P style="TEXT-INDENT: 2em"><STRONG>2 良好的编程风格</STRONG></P>
<P style="TEXT-INDENT: 2em">内功深厚的武林高手出招往往平淡无奇。同理，编程高手也不会用奇门怪招写程序。良好的编程风格是产生高质量程序的前提。</P>
<P style="TEXT-INDENT: 2em">2.1 命名约定</P>
<P style="TEXT-INDENT: 2em">有不少人编程时用拼音给函数或变量命名，这样做并不能说明你很爱国，却会让用此程序的人迷糊（很多南方人不懂拼音，我就不懂）。程序中的英文一般不会太复杂，用词要力求准确。匈牙利命名法是Microsoft 公司倡导的[Maguire 1993]，虽然很烦琐，但用习惯了也就成了自然。没有人强迫你采用何种命名法，但有一点应该做到：自己的程序命名必须一致。</P>
<P style="TEXT-INDENT: 2em">以下是我编程时采用的命名约定：</P>
<P style="TEXT-INDENT: 2em">（1）宏定义用大写字母加下划线表示，如MAX_LENGTH；</P>
<P style="TEXT-INDENT: 2em">（2）函数用大写字母开头的单词组合而成，如SetName, GetName ；</P>
<P style="TEXT-INDENT: 2em">（3）指针变量加前缀p，如*pNode ；</P>
<P style="TEXT-INDENT: 2em">（4）BOOL 变量加前缀b，如bFlag ；</P>
<P style="TEXT-INDENT: 2em">（5）int 变量加前缀i，如iWidth ；</P>
<P style="TEXT-INDENT: 2em">（6）float 变量加前缀f，如fWidth ；</P>
<P style="TEXT-INDENT: 2em">（7）double 变量加前缀d，如dWidth ；</P>
<P style="TEXT-INDENT: 2em">（8）字符串变量加前缀str，如strName ；</P>
<P style="TEXT-INDENT: 2em">（9）枚举变量加前缀e，如eDrawMode ；</P>
<P style="TEXT-INDENT: 2em">（10）类的成员变量加前缀m_，如m_strName, m_iWidth ；</P>
<P style="TEXT-INDENT: 2em">对于int, float, double 型的变量，如果变量名的含义十分明显，则不加前缀，避免烦琐。如用于循环的int 型变量i,j,k ；float 型的三维坐标（x,y,z）等。</P>
<P style="TEXT-INDENT: 2em">2.2 使用断言</P>
<P style="TEXT-INDENT: 2em">程序一般分为Debug 版本和Release 版本，Debug 版本用于内部调试，Release 版本发行给用户使用。断言assert 是仅在Debug 版本起作用的宏，它用于检查“不应该”发生的情况。以下是一个内存复制程序，在运行过程中，如果assert 的参数为假，那么程序就会中止（一般地还会出现提示对话，说明在什么地方引发了assert）。</P>
<P style="TEXT-INDENT: 2em">//复制不重叠的内存块</P>
<P style="TEXT-INDENT: 2em">void memcpy(void *pvTo, void *pvFrom, size_t size)</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">void *pbTo = (byte *) pvTo;</P>
<P style="TEXT-INDENT: 2em">void *pbFrom = (byte *) pvFrom;</P>
<P style="TEXT-INDENT: 2em">assert( pvTo != NULL && pvFrom != NULL );</P>
<P style="TEXT-INDENT: 2em">while(size - - > 0 )</P>
<P style="TEXT-INDENT: 2em">*pbTo + + = *pbFrom + + ;</P>
<P style="TEXT-INDENT: 2em">return (pvTo);</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">assert 不是一个仓促拼凑起来的宏，为了不在程序的Debug 版本和Release 版本引起差别，assert 不应该产生任何副作用。所以assert 不是函数，而是宏。程序员可以把assert 看成一个在任何系统状态下都可以安全使用的无害测试手段。</P>
<P style="TEXT-INDENT: 2em">很少有比跟踪到程序的断言，却不知道该断言的作用更让人沮丧的事了。你化了很多时间，不是为了排除错误，而只是为了弄清楚这个错误到底是什么。有的时候，程序员偶尔还会设计出有错误的断言。所以如果搞不清楚断言检查的是什么，就很难判断错误是出现在程序中，还是出现在断言中。幸运的是这个问题很好解决，只要加上清晰的注释即可。这本是显而易见的事情，可是很少有程序员这样做。这好比一个人在森林里，看到树上钉着一块“危险”的大牌子。但危险到底是什么？树要倒？有废井？有野兽？除非告诉人们“危险”是什么，否则这个警告牌难以起到积极有效的作用。难以理解的断言常常被程序员忽略，甚至被删除。[Maguire 1993]</P>
<P style="TEXT-INDENT: 2em">以下是使用断言的几个原则：</P>
<P style="TEXT-INDENT: 2em">（1）使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别，后者是必然存在的并且是一定要作出处理的。</P>
<P style="TEXT-INDENT: 2em">（2）使用断言对函数的参数进行确认。</P>
<P style="TEXT-INDENT: 2em">（3）在编写函数时，要进行反复的考查，并且自问：“我打算做哪些假定？”一旦确定了的</P>
<P style="TEXT-INDENT: 2em">假定，就要使用断言对假定进行检查。</P>
<P style="TEXT-INDENT: 2em">（4）一般教科书都鼓励程序员们进行防错性的程序设计，但要记住这种编程风格会隐瞒错误。当进行防错性编程时，如果“不可能发生”的事情的确发生了，则要使用断言进行报警。 <BR><BR><BR></P>
<P style="TEXT-INDENT: 2em">2.3 new、delete 与指针</P>
<P style="TEXT-INDENT: 2em">在C++中，操作符new 用于申请内存，操作符delete 用于释放内存。在C 语言中，函数malloc 用于申请内存，函数free 用于释放内 存。由于C++兼容C 语言，所以new、delete、malloc、free 都有可能一起使用。new 能比malloc 干更多的事，它可以申请对象的内存，而malloc 不能。C++和C 语言中的指针威猛无比，用错了会带来灾难。对于一个指针p，如果是用new申请的内存，则必须用delete 而不能用free 来释放。如果是用malloc 申请的内存，则必须用free 而不能用delete 来释放。在用delete 或用free 释放p 所指的内存后，应该马上显式地将p 置为NULL，以防下次使用p 时发生错误。示例程序如下：</P>
<P style="TEXT-INDENT: 2em">void Test(void)</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">float *p;</P>
<P style="TEXT-INDENT: 2em">p = new float[100];</P>
<P style="TEXT-INDENT: 2em">if(p==NULL) return;</P>
<P style="TEXT-INDENT: 2em">…// do something</P>
<P style="TEXT-INDENT: 2em">delete p;</P>
<P style="TEXT-INDENT: 2em">p=NULL; // 良好的编程风格</P>
<P style="TEXT-INDENT: 2em">// 可以继续使用p</P>
<P style="TEXT-INDENT: 2em">p = new float[500];</P>
<P style="TEXT-INDENT: 2em">if(p==NULL) return;</P>
<P style="TEXT-INDENT: 2em">…// do something else</P>
<P style="TEXT-INDENT: 2em">delete p;</P>
<P style="TEXT-INDENT: 2em">p=NULL;</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">我们还要预防“野指针”，“野指针”是指向“垃圾”内存的指针，主要成因有两种：</P>
<P style="TEXT-INDENT: 2em">（1）指针没有初始化。</P>
<P style="TEXT-INDENT: 2em">（2）指针指向已经释放的内存，这种情况最让人防不胜防，示例程序如下：</P>
<P style="TEXT-INDENT: 2em">class A</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">void Func(void){…}</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">void Test(void)</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">A *p;</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">A a;</P>
<P style="TEXT-INDENT: 2em">p = &a; // 注意a 的生命期</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">p->Func(); // p 是“野指针”，程序出错</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">2.4 使用const</P>
<P style="TEXT-INDENT: 2em">在定义一个常量时，const 比#define 更加灵活。用const 定义的常量含有数据类型，该常量可以参与逻辑运算。例如：</P>
<P style="TEXT-INDENT: 2em">const int LENGTH = 100; // LENGTH 是int 类型</P>
<P style="TEXT-INDENT: 2em">const float MAX=100; // MAX 是float 类型</P>
<P style="TEXT-INDENT: 2em">#define LENGTH 100 // LENGTH 无类型</P>
<P style="TEXT-INDENT: 2em">#define MAX 100 // MAX 无类型</P>
<P style="TEXT-INDENT: 2em">除了能定义常量外，const 还有两个“保护”功能：</P>
<P style="TEXT-INDENT: 2em">一、强制保护函数的参数值不发生变化</P>
<P style="TEXT-INDENT: 2em">以下程序中，函数f 不会改变输入参数name 的值，但是函数g 和h 都有可能改变name的值。</P>
<P style="TEXT-INDENT: 2em">void f(String s); // pass by value</P>
<P style="TEXT-INDENT: 2em">void g(String &s); // pass by referance</P>
<P style="TEXT-INDENT: 2em">void h(String *s); // pass by pointer</P>
<P style="TEXT-INDENT: 2em">main()</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">String name=“Dog”;</P>
<P style="TEXT-INDENT: 2em">f(name); // name 的值不会改变</P>
<P style="TEXT-INDENT: 2em">g(name); // name 的值可能改变</P>
<P style="TEXT-INDENT: 2em">h(name); // name 的值可能改变</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">对于一个函数而言，如果其‘&’或‘*’类型的参数只作输入用，不作输出用，那么应当在该参数前加上const，以确保函数的代码不会改变该参数的值（如果改变了该参数的值，编译器会出现错误警告）。因此上述程序中的函数g 和h 应该定义成：</P>
<P style="TEXT-INDENT: 2em">void g(const String &s);</P>
<P style="TEXT-INDENT: 2em">void h(const String *s);</P>
<P style="TEXT-INDENT: 2em">二、强制保护类的成员函数不改变任何数据成员的值</P>
<P style="TEXT-INDENT: 2em">以下程序中，类stack 的成员函数Count 仅用于计数，为了确保Count 不改变类中的任何数据成员的值，应将函数Count 定义成const 类型。</P>
<P style="TEXT-INDENT: 2em">class Stack</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">public:</P>
<P style="TEXT-INDENT: 2em">void push(int elem);</P>
<P style="TEXT-INDENT: 2em">void pop(void);</P>
<P style="TEXT-INDENT: 2em">int Count(void) const; // const 类型的函数</P>
<P style="TEXT-INDENT: 2em">private:</P>
<P style="TEXT-INDENT: 2em">int num;</P>
<P style="TEXT-INDENT: 2em">int data[100];</P>
<P style="TEXT-INDENT: 2em">};</P>
<P style="TEXT-INDENT: 2em">int Stack::Count(void) const</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">++ num; // 编译错误，num 值发生变化</P>
<P style="TEXT-INDENT: 2em">pop(); // 编译错误，pop 将改变成员变量的值</P>
<P style="TEXT-INDENT: 2em">return num;</P>
<P style="TEXT-INDENT: 2em">} <BR><BR><BR></P>
<P style="TEXT-INDENT: 2em">2.5 其它建议</P>
<P style="TEXT-INDENT: 2em">（1）不要编写一条过分复杂的语句，紧凑的C++/C 代码并不见到能得到高效率的机器代码，却会降低程序的可理解性，程序出错误的几率也会提高。</P>
<P style="TEXT-INDENT: 2em">（2）不要编写集多种功能于一身的函数，在函数的返回值中，不要将正常值和错误标志混在一起。</P>
<P style="TEXT-INDENT: 2em">（3）不要将BOOL 值TRUE 和FALSE 对应于1 和0 进行编程。大多数编程语言将FALSE定义为0，任何非0 值都是TRUE。Visual C++将TRUE 定义为1，而Visual Basic 则将TRUE定义为-1。示例程序如下：</P>
<P style="TEXT-INDENT: 2em">BOOL flag;</P>
<P style="TEXT-INDENT: 2em">…</P>
<P style="TEXT-INDENT: 2em">if(flag) { // do something } // 正确的用法</P>
<P style="TEXT-INDENT: 2em">if(flag==TRUE) { // do something } // 危险的用法</P>
<P style="TEXT-INDENT: 2em">if(flag==1) { // do something } // 危险的用法</P>
<P style="TEXT-INDENT: 2em">if(!flag) { // do something } // 正确的用法</P>
<P style="TEXT-INDENT: 2em">if(flag==FALSE) { // do something } // 不合理的用法</P>
<P style="TEXT-INDENT: 2em">if(flag==0) { // do something } // 不合理的用法</P>
<P style="TEXT-INDENT: 2em">（4）小心不要将“= =”写成“=”，编译器不会自动发现这种错误。</P>
<P style="TEXT-INDENT: 2em">（5）不要将123 写成0123，后者是八进制的数值。</P>
<P style="TEXT-INDENT: 2em">（6）将自己经常犯的编程错误记录下来，制成表格贴在计算机旁边。</P>
<P style="TEXT-INDENT: 2em"><STRONG>3 小结</STRONG></P>
<P style="TEXT-INDENT: 2em">C++/C 程序设计如同少林寺的武功一样博大精深，我练了8 年，大概只学到二三成。所以无论什么时候，都不要觉得自己的编程水平天下第一，看到别人好的技术和风格，要虚心学习。本章的内容少得可怜，就象口渴时只给你一颗杨梅吃，你一定不过瘾。我借花献佛，推荐一本好书：Marshall P. Cline 著的《C++ FAQs》[Cline 1995]。你看了后一定会赞不绝口。会编写C++/C 程序，不要因此得意洋洋，这只是程序员基本的技能要求而已。如果把系统分析和系统设计比作“战略决策”，那么编程充其量只是“战术”。如果指挥官是个大笨蛋，士兵再勇敢也会吃败仗。所以我们程序员不要只把眼光盯在程序上，要让自己博学多才。我们应该向北京胡同里的小孩们学习，他们小小年纪就能指点江山，评论世界大事。</P><img src ="http://www.blogjava.net/faintbear/aggbug/12514.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-09-09 10:59 <a href="http://www.blogjava.net/faintbear/archive/2005/09/09/12514.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如果你不知道RSS是什么。一定要看看~</title><link>http://www.blogjava.net/faintbear/archive/2005/09/06/12210.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Tue, 06 Sep 2005 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/09/06/12210.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/12210.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/09/06/12210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/12210.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/12210.html</trackback:ping><description><![CDATA[朋友问我RSS是什么，俺说自己上网查。呵呵，其实我也不知道一句话怎么说清楚。<BR>也许这个比较直观。看看哈<BR><BR>
<P><B>RSS</B>是一种用于共享新闻和其他Web内容的数据交换规范，起源于<A title=网景通讯公司 href="http://zh.wikipedia.org/wiki/%E7%BD%91%E6%99%AF%E9%80%9A%E8%AE%AF%E5%85%AC%E5%8F%B8">网景通讯公司</A>的推"Push"技术，将订户订阅的内容传送给他们的<A title=通訊協同格式 href="http://zh.wikipedia.org/wiki/%E9%80%9A%E8%A8%8A%E5%8D%94%E5%90%8C%E6%A0%BC%E5%BC%8F">通讯协同格式</A>(Protocol)。RSS可以是以下三个解释的其中一个：</P>
<UL>
<LI><B>Really Simple Syndication</B>（真正简单的整合） 
<LI><B><A title=RDF href="http://zh.wikipedia.org/wiki/RDF">RDF</A> (Resource Description Framework) Site Summary</B> 
<LI><B>Rich Site Summary</B>（丰富站点摘要） </LI></UL>
<P>但其实这三个解释都是指同一种Syndication的技术。</P>
<P>目前RSS规范的主要版本有0.91、1.0和2.0。</P>
<P>0.91版和1.0版完全不同，风格不同，制定标准的人也不同。0.91版和2.0版一脉相承。1.0版更靠拢<A title=XML href="http://zh.wikipedia.org/wiki/XML">XML</A>标准。</P>
<P>RSS目前广泛用于<A title=Blog href="http://zh.wikipedia.org/wiki/Blog">blog</A>、<A title=Wiki href="http://zh.wikipedia.org/wiki/Wiki">wiki</A>和网上新闻频道，世界多数知名新闻社网站都提供RSS订阅支持。<BR><BR><BR><IMG id=ViewPicture.ascx_GalleryImage style="BORDER-RIGHT: black 2px solid; BORDER-TOP: black 2px solid; BORDER-LEFT: black 2px solid; WIDTH: 640px; BORDER-BOTTOM: black 2px solid; HEIGHT: 358px" alt=RSS改变传统Web浏览模式 src="http://www.donews.net/images/www_donews_net/wangyi/33022/r_RSS－1.jpg">&nbsp;</P><img src ="http://www.blogjava.net/faintbear/aggbug/12210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-09-06 13:50 <a href="http://www.blogjava.net/faintbear/archive/2005/09/06/12210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的收藏</title><link>http://www.blogjava.net/faintbear/archive/2005/03/10/1915.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Thu, 10 Mar 2005 08:07:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/03/10/1915.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/1915.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/03/10/1915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/1915.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/1915.html</trackback:ping><description><![CDATA[<P>ORACLE:<BR>&nbsp;&nbsp;&nbsp;&nbsp; <A href="http://www.eygle.com/">http://www.eygle.com/</A>&nbsp; (牛人oracle)<BR>&nbsp;&nbsp;&nbsp; <A href="http://www.anysql.net/index.html">http://www.anysql.net/index.html</A>&nbsp;(牛人 d.b.c.a)<BR>&nbsp;&nbsp;&nbsp;&nbsp; <A href="http://skyhorse.blogbus.com/logs/2004/03/106569.html">http://skyhorse.blogbus.com/logs/2004/03/106569.html</A><BR>&nbsp;&nbsp;&nbsp;&nbsp; <A href="http://www.dbanotes.net/">http://www.dbanotes.net/</A><BR>&nbsp;&nbsp;&nbsp;&nbsp; <A href="http://www.psoug.org/reference/">http://www.psoug.org/reference/</A>&nbsp; (我靠.最好的学习oracle pl/sql的地方)<BR>JAVA:<BR>&nbsp;&nbsp;&nbsp; <A href="http://www.javaresearch.org/">http://www.javaresearch.org</A><BR>&nbsp;&nbsp;&nbsp; <A href="http://www.java-cn.com/">http://www.java-cn.com/</A><BR>&nbsp;&nbsp;&nbsp; <A href="http://www.javayou.com/">http://www.javayou.com/</A>&nbsp;&nbsp;&nbsp;&nbsp;(java自由人)<BR>&nbsp;&nbsp;&nbsp; <A href="http://yhe.dalian.cn/">http://yhe.dalian.cn/</A>&nbsp;(小红帽的blog，个人收藏，java学习...)<BR>JAVA---J2ME<BR>&nbsp;&nbsp; <A class=headermaintitle id=Header1_HeaderTitle href="http://blog.csdn.net/turbochen/">Java憩园</A>&nbsp;(高手啊)<BR>&nbsp;&nbsp; <A href="http://www.j2medev.com/">http://www.j2medev.com/</A><BR>&nbsp;&nbsp;&nbsp; <BR>Blog:<BR>&nbsp;&nbsp; <A href="http://www.nihaoblog.com/index.html">http://www.nihaoblog.com/index.html</A><BR>&nbsp;&nbsp; <A href="http://www.rainbowsoft.org/zblog/">http://www.rainbowsoft.org/zblog/</A><BR><BR>c/c++:<BR>&nbsp; <A href="http://www.luocong.com/">http://www.luocong.com/</A>&nbsp;(数据结构的学习)</P><img src ="http://www.blogjava.net/faintbear/aggbug/1915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-03-10 16:07 <a href="http://www.blogjava.net/faintbear/archive/2005/03/10/1915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>