TAOUP给我们的启示

"Those who don't understand Unix are condemned to reinvent it, poorly."
– Henry Spencer, 1987.11

《UNIX编程艺术》(简称TAOUP,是对Knuth的TAOCP的致敬。)讲解UNIX社区的历史、理念、哲学、原则,及其相关技术和软件。可作为故事书看完,也可作为相关技术参考。很奇怪的是,我基本上认同该书陈述的所有理念与哲学,仿佛那些只是很自然的事情又似乎每一个人都可以接受一样(其实肯定并非如此!),尽管我并非真正意义上的程序员或者黑客。

看完这本书我最大的收获或者想与大家分享的还不是书中的理念、哲学、技术,而是一个事实。通过作者的那番陈述(其实只是他叙述的方式在深深地影响我),我看到在我所在的这个地区(大学)的一个没有被太多人关注或者讨论的事实:目前我和我的同事、学生缺乏的不仅仅是理论、技术,可能更重要的问题是,我们缺乏一个具有统一理念且保持稳定发展的专业社区

拿程序开发而论,我们往往看到我们讲授程序开发的局限性,也看到提升程序员能力的迫切性,更认识到目前要提高大部分同学编程能力的不可能性。一直在反思,是什么导致了这样的窘迫局面?我们有批评过教学的方法、教育的制度,也批判过社会的各种风气。然而,看完TAOUP之后,我想,如果我们的学生不能有(并且进入)一个可以影响他一生的程序员社区,不能学习生活在某个稳定的程序员社区中,并受一种薪火相传的理念或者称为文化氛围所熏陶与影响,他们在程序员这个路上势必无法走远。

稍微回顾一下我们学院CSer教育之路:大一学C、C++ (Windows 编程),然后Java,然后有数据结构、操作系统,再接着某些TCP/IP编程、做网站等等,学点数据库或者再加上软件工程。似乎学了很多知识,但是只要问一个问题,也许很多问题就暴露出来:我们培养的是具有何种统一技术理念的程序员

这个问题在TAOUP中频频强调。我们号称培养的是灵活多变的程序员,无论什么操作系统都懂的程序员,反过来,其实是什么操作系统都不懂的程序员。也正因为我们不强调操作系统,那么操作系统所赋予的许多理念就不可能被传授,比如UNIX社区中的开源文化、代码重用、摒弃丑陋的GUI等等。这种不重视操作系统理念的编程教育,不能不说是因为Wintel 的崛起或者我国计算机教育的落后状况造成的极坏后果。

Windows为了满足一般用户桌面应用需求,提出“可见即所得”的理念,被鼓吹了20年。我们培养的程序员大部分是欣然接受这种理念的,尽管我并不能称他们是Windows程序员。我们培养的毕业生的毕业论文经常有很多丑陋的排版,只要你向他们指出,他们都归咎于Windows:没办法,Word就是这样工作的。比如,一张图片挤不进一个版面就会挤压到下一个版面而导致有一页有大量空行这样的错误。我不知道是否“Word就是这样工作的”,但是“可见即所得”绝对值得再写一篇文章批判。

我知道,要扭转这样一种简单的错误看法我们都需要花费上十年的工夫或者干脆是不可能的任务。为什么?因为他们身边大部分人都是这样的一般非技术用户,因为他们的老师、他们的技术主管、他们的领导都是从小就被Windows培养出来的专门人才。但是不要忘记,他们并不是Windows系统的专门人才,而仅仅是被简单而丑陋的系统惯坏了的用户而已。我举这个例子只是想说明,要改变某些看上去容易改变的现状是非常非常困难的一件事情(注:批评Windows系统并不是一件容易接受的事情,更别提改变使用Windows的陋习是容易的事情。所以,我愿意为以上见解接受所有批评。),重点是没有一个正常的环境,即我一开始就提出的那种所谓的“程序员社区”。

如果我倡议说,把这样的社区建设起来,那也未免过于乐观了。一种文化氛围的建设岂是一人之力几年的工夫可以完成的呢?那是不是就不可补救呢?也不尽然。当务之急,我想,首先要倡导尽可能多的同学在Linux下学习、编程、娱乐。其次,相关课程逐步跟进,比如,大一的编程、大二的操作系统、计算机网络等课程多强调Linux操作系统。希望星星之火可成为薪火相传之火、可以壮大成燎原之火!

也有人会问,那Windows操作系统这么流行就不讲了?答案是,Windows是流行,但是真没什么可以讲。所谓没什么可以讲是因为Windows本身就缺乏一种传统,而且它还是闭源系统,你讲什么?估摸现在能讲XP的老师都没有,但是XP已经退休了。那该讲Win8?嗨,这可能吗?就算能讲,讲完了估计该出Win10了。哦,不,也许是Win13,谁知道呢?

将IT文化建设的问题推广一步:一个地区的文化如果缺乏统一传承,那么这种文化即呈岌岌可危之势。在这一点上,我中华文化的传承中已经日益凸显其危机啊,就不提也罢了。不过,是该反思反思了。应该看到的是,我们的IT文化尚未成型,IT文化社区尚未建设,足可一叹。这就是TAOUP给我的启示。分享给大家,应该是给大家的启示!

P.S. 本文作者是一位普通的大学老师,其目的有二:推荐一本书;提出一个问题:如何教如何学CS? 本文不探讨Linux与Windows的差异好坏。

2014.5. 写
2017.2.14改

UNIX编程艺术

推荐阅读更多精彩内容