关于王垠同学
下午抽一段时间看了一下曾经的清华名人王垠同学的博客,看到这位曾经在水木清华BBS上发表了一系列文章批评Microsoft,鼓吹(请自行剥离这个词的色彩)GNU/Linux的人物,逐渐的变得能够理解Windows操作系统的设计思想和理念,同时体会到MFC以及Visual Studio对于程序员的巨大尊重。
他依然没有读完任何一个博士,从清华退学之后,去到了Cornell,退学之后又去到了Indiana U,读了四年博士,又退学了。对于我这种凡夫俗子来说,是没有那么大的毅力像他这样执着于退学的事业,当然我这种凡夫俗子也没他那么的勇气天天称呼自己是天才(或许这也是件好事情)。
不过有趣的是,随着年龄的增长我们对于Computing和Computer Science的理解倒是有着些许巧合,列于此,我可以十年之后再来读读,看是否又有了新的感悟。
-
*NIX对于许多的初学者来说,是不必要的不友好。Ubuntu和Red Hat对于Linux社区的贡献不应该被抹杀。 Gnu/Linux这个系列的操作系统,由于其“极客”的出身,很容易让初学者感到无所适从。*NIX系列的操作系统本身的设计上有许多可圈可点的地方,比如文件系统的抽象化,比微软早些年的文件系统(胖16,胖32,更早得不说了)要高明许多,扩展性极强。可是配置他永远都是一个巨大的时间上的无底洞。我自认为对于Linux不算太外行,迄今为止我无法随心所欲的配置我需要的ftp daemon。更不用说装个驱动居然一度还要重新编译内核模块(不知道现在好些没有,我从来没有搞清楚过)。这些设计就像王同学讲的,使得许多Linux下的奇技淫巧变成了所谓牛人的“知识”,实在是让我不敢苟同。Windows用一个集中(centralized)的注册表解决所有的系统级别的配置问题,其实要比Linux高明许多。我一度也认为用awk,grep和sed可以解决绝大部分问题,后来发现,有一点点调试grep和sed命令的功夫,我直接拿Python写个script反而可能来的更快些,不是说这些工具不好,而是这些工具只能做好很有限的一件事情(这就是Unix的设计哲学),学习曲线那么高,能做的事情却着实与付出的学习代价不成正比。用awk这么久,我不过就拿他来搜索些比较简单的pattern,再复杂一点的我宁可写Python或者Perl脚本。Bash脚本是永远没有学会过,因为Python够用了。
-
Windows不是像以前想象的那么不堪,尤其是Visual Studio,是非常优秀的IDE。Office Suite能在办公软件的垄断地位屹立不倒这么多年,也有自己的两把刷子。 举个简单的例子,我有一个横向上巨大的表格(许多列),在LibreOffice里面如果要输入(import)的话是不可能的,因为LO对于表格的横向尺寸(dimension)有限制,这个限制是因为LO表格的数据结构用的是数列而不是链表。这是一个Excel几年前就解决的问题。并不是所有的人都有输入一个几百万列表格的需求,可是Excel就为了少数(?)某些人,而重新设计了自己的代码,提供了这个功能。只有人到中年的时候才体会到,意识形态并不重要,重要的是用合理的工具把自己需要做的事情完成。
-
Java是相当优秀的编程语言。王同学是一个鄙视世间一切编程语言的人(他自己做programming language),不过他对于Java欣赏有加,我到是相当的赞同。因为工作的原因我用过各种统计学家能用到的语言,从数学和统计专用的MATLAB,STATA, SAS, R,到稍微通用一点的Python, Perl, 再到稍微再专业一点的Scala, Java, 再到统计学家们的鬼见愁C++,C。个人认为这其中最合用的就是Java。很重要的原因是Java的Parsing是非常完备的,这里的parsing指的是把Java的代码转化成Java语义的过程。这直接导致了Java IDE比如IntelliJ IDEA对于任何类的定义都可以瞬间找到,而且不用编译也知道你写的代码能不能通过编译器。Java对于测试也极其友好。不会像C++容易写出丑陋的代码,和出现一些神奇的问题,比如C++和C代码混用的时候会在链接时出现奇怪的函数名修饰的问题。