大学四年后的四年
2008年3月28日
大学四年后的四年
大学里面没干全大学里面该干的事情——读书
毕业后的四年里干了大学里面该干的事情——读书,附带着应用学到的知识来写程序
现在,四年了,该做点其他事情了。
大学里的我和现在的我似乎是有相当差别的两个人。刚进大学的我,充满了主人翁精神,觉得自己长大了,在大学里要担负起责任来。那时在高中时候就被学校培养过的责任意识,到了进大学之后的那一刻,便得到了发挥。我觉得既然到了交大这样一座学府里,就应当好好地学习,好好地做事。
后来,在大学里的四年时间,我经历了从认真到颓废的过渡,经历了从一开始的反对社会弱肉强食到后来的接受这种事实但坚决反对这种做法,并使用设身处地的方法来理解那些处于社会下层的人的痛苦。总之,富的人可以富,但穷的人不能太穷,这是我的想法。而且从机会来说,我们每个人在出生之后虽然是不同的身份,但出生之前谁也说不准会生在一个富人的家庭或是一个穷人的家庭(我经常问我自己,出生之前是谁呢?很明显,如果用唯物论的话,我出生之前只是食物,或者连食物都不是,出生之后的我乃至如今,仍只是食物变的。如果不唯心也不唯物的话,那我生为谁是随机的,至少不是我能控制的)。
大学时候的计算机学习,很多都是凭自己的兴趣。对操作系统比较有兴趣,就对 Windows 2000 研究得比较多一些。对 Java 有一点兴趣,于是就稍微用了一点。C/C++ 的确是非常有趣的东西,在没有理解它们的原理之前花了不少功夫去摆弄它们。QBASIC/VB 也是小时候和大学时候的最爱,只是对其没有 malloc 而感到郁闷。数据结构与算法这门课让我感到很有趣,特别是数据结构,因此虽然自己没有能力去发明一种,但至少对书上写的一些还是大部分都做了一些程序,包括作业和业余的。微机原理虽然有兴趣,也做了实验写了程序,但总觉得学校的课本和教学的深度都非常有限,远不足以用来写操作系统……
大学时候,还继承初中和高中时的习惯,经常听音乐,而且不仅是轻音乐,对古典音乐也产生了兴趣。初中时候听轻音乐,主要集中于 Paul Mauriat 的音乐。流行歌曲也听,主要是英文的,Celine Dion、Take That、Mariah Carey、Boyz II Men、Elton John、Seal、Oasis……听得有点杂。Paul Mauriat 的音乐从八十年代到九十年代也有电子乐器到新风格的改变。古典音乐由听 Bach 开始,感觉 Bach 的协奏曲真是真正的川流不息——四部小提琴没有一部能说是主旋律的,每次听到主旋律了,那部小提琴在下一阶段又转而成为协奏者了,由另一部来演奏出新的主旋律。Mozart 的音乐,有一些段子相当好,特别具有戏剧性,《费加罗的婚礼》可算其代表了。第 40 交响曲是相当的经典,第 41 也不错。当然也有一些他早期的音乐,小夜曲,某些地方有点罗嗦,反反复复地绕。
Beethoven 的音乐则更多地包含复杂的情感。无论是第二交响曲还是有名的第五交响曲,都得仔细品味,而且还不一定能完全明白他在讲什么。但是这些一定是他所表达的意思,不会有太多冗余。Debussy 是印象派,据说是反对音乐带有过多的情感。他的作品里面的《海》和《月光》乍一听倒有点像中国的一些美术片的配音,用于描述景色和动态很有效。受这些音乐家的音乐的影响,我在大学四年里也零零散散地写了一些小曲[1]。
在大学里面,玩游戏成了经常做的事情。在还没进大学之前,我就几乎每个周末都在家玩极品飞车III[2]。虽然计算机的显卡配置太低,只有在 512 * 384 分辨率和软件渲染的模式下运行,但仍玩得不亦乐乎。大学里面第一个让我颓废的游戏是星际。这个游戏最大的问题是玩一盘要半个小时到一个小时(对于我这样的低手来说),很浪费时间,而且我又不懂得节制,结果大二开始我就荒废学业了。到了大三,最喜欢玩的 CS。当然期间也不会忘了与剑哥一起玩的虫虫赛跑等小游戏。后来还在硬件条件足够好了的情况下玩上了极品飞车五。
毕业之后,埋头工作了。计算机成了我的日常工具。在工作的时候,我经常上网看技术文章,逛别人的技术博客。论坛我却不常上,因为论坛经常没有什么有趣的贴子,或者贴子的范围太散,难有共鸣。交大 BBS 还比较好些,因此我偶尔上上。计算机方面的书越买越多,特别是进交大读了工程硕士之后,逛昂立书店的次数比较多,我也在那儿累计花了超过 500 块钱用于买书。其中最经典的要数《C 程序设计语言(第二版)》了。还买了《C 程序设计的抽象思维(Programming Abstractions in C)》、《C++ 的设计与发展(The Design and Evolution of the C++ Programming Language)》。也买了《Windows 程序设计(第五版)》这样的厚厚的书。
甚至,在 2005 年,还花了 36 元买了一套有包装的 Fedora Core 2 的光盘。自从知道Fedora 并不是稳定的 Linux 之后,我就再也不买 Fedora 光盘了,改用自己网上下载的Slackware 和 CentOS,而后来把 CentOS 都删了,锁定 Slackware,先用会了再说。当年高博为我订的免费 Ubuntu Linux 5.10 光盘我还有十张左右放在家里睡大觉呢……
从计算机语言来说,毕业后学会了 C# 和 Python。对于 C#,毕业之前只是在学校里听王建硕的讲座,知道了 .NET 的光明前景。工作中则实际应用了 C#,而且不仅用了 1.0,还在 2005 年尝鲜 VS 2005 Beta 版用了 C# 2.0。ASP.NET 也是工作中必用的东西。在工作中还写了一些 Windows API 的程序,这在学校里也没系统地做过,感觉还是不错的。工作中用 VC++ 做了一些 ActiveX 控件,在东方宽频项目中用了 Web Service。这些都是信息中心给我的机会,对于这一点真的要感谢单位。
Python 则是业余时候看了 Eric S. Raymond 的文章而去学的。学了以后觉得真的很不错,小巧易用。特别是它的 iterator 的简化版 generator,还有 generator 的简化版generator comprehension,还有 list comprehension,都是很灵的东东,我只是学了,还没能很好地发挥它们的作用,但不管如何总是不错的了。不过对于动态语言来说,编程容易出现类型不匹配的错误(当然是人为错误了)。这一点我还是只能手工加 assert 了,没办法了。
操作系统的确应当是对用户透明的东西。用户看到的界面是 Shell 或者是应用程序。现代操作系统的最基本模块是:进程管理、内存管理、文件系统、磁盘缓存、网络。古代的操作系统简单的可能是单任务的,单用户的,没有虚拟内存的,没有磁盘缓存的,没有网络的,但文件系统似乎连 DOS 都有哦,呵呵。当然,单任务和没虚拟内存还是有进程管理和内存管理的,只不过处理的情况不太一样。
当系统一启动,这些基础任务就一下子都起来了。于是,程序就可以运行了,可以读写文件了,可以访问网络了。读写文件的时候的速度可以由内存来加快了(Rob Pike 说的:磁盘缓存就是性能上的 hack 而已)。
其实如果硬盘像内存一样快,没有磁盘缓存也可以,甚至没有内存都可以。当然,如果内存像 CPU 一样快,那 CPU 的 1 级 2 级或 3 级高速缓存也可以不要了。
现在明白为什么应用程序最好不要占太多内存了吧?内存占得多了以后,可能会迫使交换文件起作用,让数据块在物理内存和硬盘之间跑来跑去。此外,内存占得多了以后,磁盘缓存可以用的内存就少了,会影响性能。
除了内存占得不要太多之外,硬盘文件的读写最好也不要范围太广,这样磁盘缓存能起到良好的作用。当然这得视需求而定。实际需求真的有很大数据量的话,总也得读写很大量的文件,否则完不成任务,软件就没用了。
就目前而言,操作系统没什么大的花头,难就难在具体的实现上面。实现的时候选择什么样的语言(通常 C 比较多),什么样的架构(比如如何实现系统调用,如何在各个模块之间做接口,如何加载和卸载可选模块,如何将多种不同的设备统一起来),选择什么样的算法(比如用什么文件系统)等等。Rob Pike 讲到系统好像二十年来没有什么本质区别。
其实写程序最开心的事情还是书本上学的知识在实际程序中的应用。如果一个程序包含了书本上讲到的内容,而且这些内容在程序中发挥了必要且重要的作用,那么就很开心。
不过业余时间我写程序花的时间太多了,以至于没有什么时间放松一下自己。想想四年了,也不应该继续这样下去了。篮球看不来,准备周末开始看 F1。此外,出去随便走走,再有就是找同学玩。但是,专业的东东还是得学,业余程序也可以写,不过不必那么追求进度了,转而应该多花时间作些思考。另外还要对于人生和社会有所思考。还得听听音乐,写写音乐。
[1] http://robbiemosaic.go1.icpcn.com/musicland.htm
[2] http://robbiemosaic.go1.icpcn.com/nfs3.htm
回忆