标题: 回Laix兼答hope 发信站: UNIX编程 (2001年11月26日17:00:09 星期一) 昨天晚上(2001-11-25)在华中站上hope发消息,提到自己最近感觉什么都懂点,什么 都不精通,很是迷茫,问我怎么办。今天早上看到这里(APUE)的信,是Laix写的,大 概意思和hope差不多吧。hope是从前打MUD的时候收的徒弟,呵,还正式在华中Heart 版投过拜师贴,当日说好是只教他老庄一派的东西,绝不涉及CS,未料3年后旧帐翻 起,说自己这个徒弟做得太不值得,什么都没学到,老庄和CS都落了空,ft,这也赖 我。Laix呢,则是喝多了网络迷糊汤,才发了神经来问我这种问题。问都问了,顺带 一并回答了拉倒,也不能算是回答,随便谈谈自己看法吧。 计算机科学博大精深,作为数学的强大分支已经独立出来,中间涉及的东西太多太多, 不是我这土人能够提纲挈领总结出来的。就个人感觉,按照自己兴趣随便挑一个方向 就可以了。庄子说,"彼亦一是非,此亦一是非",我觉得好的、对的,你未必觉得好 觉得对。如果抛开对机械的相对主义的批判,这个看法很有借鉴意义。所以,别人问 起怎么办,我就说,随便你,只要你喜欢。可这个回答未免太让人失望,似乎太简单 了。世上很多事情本来就是这么简单,你硬逼我复杂化,我也没辙,碍于情面谈谈自 己一些经历好了。 90年在COMX PC和APPLE II上第一次写BASIC程序,当时很多同学喜欢那种带点趣味数 学味道的题目,不说大家也明白都是些什么题目,我却提不起兴趣,就喜欢ASCII字 符点阵,换了N个ASCII字符点阵,拼出一个直升飞机的图案,从屏幕右边飞向屏幕左 边。你要问我,这有什么意思,不知道,反正那次之后我对ASCII字符、16进制特感 兴趣,对涉及数学的东西反倒不那么喜欢和计算机扯到一起。用现在的眼光来看,选 择实践、工程方向,抛弃了理论、科研方向。当然,那会肯定想不到这些名词的。 93年在8086上写PASCAL程序,写了不到两天,觉得别扭,不爽。正好二子强力推荐C 语言,就全面倒向C语言了。学C那会也是对指针特喜欢,直接结果就是喜欢ASM。CS 本科一年级一学期是不开ASM的,我们宿舍四个人有三个就喜欢用DEBUG,想不学ASM 都不成。这一学就一直到现在。ASM这个东西,始终觉得是CS必修中的必修。无论你 后来选择了Unix还是选择了Windows,又或是其他七七八八的平台。关于高级语言的 选择,我并不赞同一个排行榜式的推荐过程,一切以要达到的目的为中心,综合评估 后自行确定。设若事先有了条条框框,先入为主后就必然失去一些客观判断。这个问 题还是比较严重的,像我,现在已经完全侑于C语言的围城中了。这里我不会就高级 语言做任何比较,因为我只懂C语言,其他高级语言(包括BASIC、PASCAL、C++)一窍 不通。如果你选择了C语言,那可以继续看看后面的废话,如果不是,我觉得实在没 必要看下去了。 我喜欢C/ASM,是因为我喜欢实践,纯粹的功利主义者、偏执狂。这两门语言让我可 以在底层随便乱搞。其他语言同样可以,可我喜欢用C/ASM,没什么道理,直觉。我 对计算机科学的理解因为长期的偏向性选择以及可悲的中国式教育,已经失去了敏锐 的全局洞察力,甚至不客气地说,从来就没培养出一种全局洞察力,对计算机科学前 沿毫无概念可言。APUE的计算机科学版对我来说如天书一般,软件工程、算法设计我 几乎不看的。怎么样?很失望吧,不是想象中的、传说中的我?呵呵,本来么,就是 这样的一个土人,所以问我指导性方向,就是扯淡。 我给CS的师弟师妹们郑重推荐过三门课,操作系统、数据结构、编译原理。很少的三 门基础课。总感觉人的精力有限,少点比较实际些。南京大学那位朋友写的连载,我 看了,很不错,应该是个猛人,不是我这种土人可以望其项背的。连载中提到大量数 学方向的课程。客观地说,学好了那些课程中的某一门,你已经是猛人,学好了两门、 三门甚至更多,而且还能在今后的实践中运用、发展,那你太太太生猛了。这点上, 那个哥们说得一点不错。反过来,平常点,比如你我这种土人(原谅我忝列土人还拉 了垫背的),不学那么多课程,或者说学过又还给老师了,要养活自己并从计算机中 找到自己的寄托,未尝不可。好高骛远是大忌,自己喜欢并努力做到自己能做的最好, 足矣。总和猛人、精英们比造诣,吃饱了撑的,打死我也不干。我尊重他们,但也不 觉得自己不开心,这不就行了。不要在意自己学过什么课程,没学过什么课程,你问 问自己学了的课程学好没有,学有所用没有,如果没有,为什么没有,你干什么吃去 了?你再问问自己,同样的课程,为什么别人学了就有出息,整出点名堂,你为什么 没整出点名堂,你是比他/她笨还是其他什么原因。最后你问问自己,你开心不开心, 如果你开心,即使你没整出名堂,又有何妨?人就活这么一辈子,尽力了,开心了, 就成。没人逼你才华出众,更没人逼你打倒爱因斯坦。课程那个东西,你能学完么? 不可能的事情。你能学精么,精深广博是矛盾统一体。硬要我推荐,我还是只推荐这 三门课。其他的,看个人造化,想学并且能学,好,无害,不想学或者想学而不能学, 无妨。平庸的coder?非programmer?非计算机科学?呵呵,是如何,非又如何呢? 你是为了什么去学计算机,问问自己,这个问题不好回答哦。 Java我也搞过,毕业设计就是Java socket编程,从前也做过水木清华Java版斑竹。 后来放弃它,是因为自己不再热爱它了,没什么其他理由。我的理由在你们看来不成 为理由,你们的理由在我看来毫无说服力,所以就不必讨论为什么我放弃它了,简单, 不再热爱Java了。从找工作角度,在我所能接触到的范围内,Java的确没有C/C++程 序员需求量大,可我绝对不会建议一个热爱Java的人放弃它,只要热爱,便足够。而 且我相信对Java热爱的人一定能做出点名堂来,无论别人(包括我)怎么看待Java的前 途。 Laix提到C的版本多?这个看法恐怕有问题。估计是说C的编译器、扩展太多,不统一, 搞不好连VC、BC都对立起来做比较了,那我ft。不提这个茬了,学学再看,或许不等 问人自己就明白了。 关于所谓的底层研究,需要纠正一个看法。不知道从什么时候有了一个混帐的看法, 底层研究更能代表自己的计算机水平。其实前面我就暗示过,实践和理论,工程和科 研,是不同的方向,不同的选择,计算机水平没有唯一的、普适的衡量标准,不能简 单地将一些完全不可比的东西硬凑一起比较。而且,即便得到的结论是自己水平低, 又怎么了?能怎么样啊?你靠自己的知识养活自己,并从中得到乐趣,就可以了。现 实点,你的计算机知识能够创造效益,那在目前阶段就是水平高的体现。 乱七八糟说一堆,没什么中心,很乱。稍微总结一下好了,最重要的是自己一定要喜 欢,无论是选择语言、选择平台、选择工程还是科研、选择这个分支那个分支,自己 不喜欢就不要因为其他原因硬去折腾了。其次,选择了就尽力去做到自己能做到的最 好,而不是和别人比,有什么好比的呢。开心、尽力,就这么四个字。 我还是不习惯给别人推荐什么,一是自己的确没有资格推荐,二是自己的确没有能力 推荐。我最终选择了C/ASM、Unix APUE、TCP/IP、Kernel Hacking,最终选择了工程 实践,而非理论科研。我尽力去做到自己能做到的最好,尊重别人的成就,却从不觉 得自己太失败了,计算机对我来说是乐趣,是生活的一部分。CS不是什么精英文化, 不是什么这个那个,和木匠喜欢木器活一样的。你我的区别无非是你能做那样的木器 我能做这样的木器,你是鲁班,我不是鲁班,你开创了一个时代,我没开创一个时代。 可我专心做我的木器时,你未必体味得到我的快乐。不要问我这类问题了,庄子吾师 言,"彼亦一是非,此亦一是非"。 学CS、喝酒、做事,如果能做到低姿态进入,云淡风轻,出手无回,是很快乐、惬意 的事情,飞花落叶之间唯有扫者... ...