漫谈程序员与编程
作者简介:侯捷,台湾电脑技术作家,着译评兼擅。常着文章自娱,颇示己志。
个人网站:www.jjhou.com
北京镜站:www.csdn.net/expert/jjhou
--------------------------------------------------------------------------------「侯捷观点」进行了4期。通过这个专栏的作用,我开始接触大陆的电脑技术刊物《程序员》和电脑技术网站 CSDN,并累积了相当量的观察和感想。这个专栏前数期谈的都是技术,不是深度书评就是高阶技法。这一期让我们轻松一下,谈谈程序员(programmer)与编程(programming)。其中不少议题起因於读者来信的触发,许多观点我也已经回应於侯捷网站上。所以若干文字可能你曾经在侯捷网站上阅读过。有些看法也许读来刺眼,听来刺耳。但如果大家不把我视为外人,当能平心静气地思考。台湾存在许多相同的问题,我也时常为文针砭。
有一句话这麽说:如果你想使人发怒,就说谎。如果你想使人大怒,就说实话。说实话的人来了,但愿你心平气和。
急功近利是大忌
一位读者写信给我,说他非常着急。他一个月挣300元人民币,家里情况又不好。他希望赶快把 VC/MFC 学会,进入 IT 产业挣钱。信写得很长,看着看着,我也不禁为他着急起来。
有许多读者,虽然情况没有那麽急迫,燃眉之情却也溢於言表。不外乎都是希望能够尽快把某技术某技术学习起来。
但是哪一样东西哪一样技术是可以快速学成的呢?能够快速学成的技术,人才也就必然易取易得,根据市场供需法则,也就不可能有很好的报酬。所以诸君当有心理准备,门槛高的,学习代价高,报酬高;门槛低的,学习代价低,报酬低。
说起来是老生常谈了。这其中最可怕的心理在急功近利。从读者的来信,以及从 CSDN 上的众多帖文,我感觉,许许多多人学习 IT 技术,进入 IT 产业,是认为 IT 产业可以助你脱困,远离贫穷。
是的,IT 产业有这个「钱」景,但你得有那份实力。要吃硬核桃,也得先估量自己的牙口。
「好利」是基本人性,Acer 总裁施振荣先生大力提倡「好逸恶劳」之说,视为人性之本,进步的原动力。谁能说不是呢?好利可以,近利就不妙了。近利代表目光浅短,一切作为都因此只在小格局中打转。
梨园有句话:要在人前显贵,就要在人後受罪。台上一分钟,台下十年功。老祖宗这方面的教诲太多了,身为中国人的我们,应该都耳熟能详。
对於心急的朋友,我只有一句话:勿在浮沙筑高台。你明明很清楚这个道理,为什麽临到自己身上,就糊涂了?急是没有用的,浮躁更会坏事。耐住性子扎根基吧。做任何事都要投资,扎根基就是你对自己的未来的投资。如果想知道如何按部就班扎根基,侯捷网站上有一篇文章:「97/06 选义按部 考辞就班」,请你看看。
口舌之战有何益
最常在程序技术相关论坛上看到毫无价值而又总是人声鼎沸的口舌之战,就是诸如「VB 和 Delphi 谁好」、「BCB 和 VC 谁优」、「Linus 和 Windows 谁棒」、「Java 和 C++ 谁强」这种题目。每次出场都一片洋洋洒洒,红红火火急速窜升为超酷话题。众人各拥所好,口沫飞扬,但是从来说服不了任何异阵营的人,话都只说给自己人听,给自己人爽。
这样的论战有何意义?许多人在重组自己的偏见时,还以为自己在思考呢。战到最後,就只是争谁说最後一句话而已。而且,擦伤引起的争吵几乎总是以刺伤结束。
工具与技术的评比,是一场高水准的演出。真有能力做评比,侯捷是很尊敬的。但是这些各拥所好,口沫飞扬的人,真的对评比两造都有深刻的了解吗?很多时候我们看到的只是无知,而无知是这麽一种东西 : 当你拥有了它,你就拥有巨大的胆量。
很多人喜欢某种工具,只不过因为那是他的初体验。他玩它玩出了一点心得,可以说出它的某些好,就开始做「评比」了。你只看到牡丹的艳丽,又怎知寒梅的清香,幽兰的空灵?
绝大多数人使用某种工具,不是因为它最好,不是因为众里寻它千百度,仅仅只是因缘际会。虽然说不同的应用环境选择不同的工具,是最伶俐的作为,但我真的怀疑,在现今工具(以及工具背後反映的技术)如此繁复的时空下,有多少人能够同时精通一个以上的同质工具?追二兔不得一兔,我还是认为你精专一样工具,把它发挥到最高效能,获得的利益多些。被大家拿来评比的,都是市场上的佼佼者,还能差到哪里去?能够两雄相争,必然是在技术面、非技术面(资源的普及、品牌的可靠度)各有一片天,你的评比意义大吗?全面吗?
大多数人没有能力同时精通两种同质工具,初学者听了网路上不知名大侠的高论,也不可能有所选择(如果有,怕也只是蒙着头瞎选)。这种没有提供数据,评论者也没有显示任何信誉(credit)的论战,没有任何意义,纯粹只为自己爽。浪费网路资源!
C++ 之父 Bjarne Stroustrup 曾经在他自己的网页上的 FAQ (以及其他许多场合)中回答如下问题。虽然其中谈的是语言,但是扩大到其他层面仍然合适,值得大家好好咀嚼(注:全文由孟岩先生译出,可自侯捷网站浏览):
Q: 你愿不愿意将C++与别的语言比较?
A: 抱歉,我不愿意。你可以在The Design and Evolution of C++的介绍性文字里找到原因。有不少人邀请我把C++与其它语言相比,我已经决定不做这类事情。在此我想重申一个很久以来我一直强调的观点:语言之间的比较没什麽意义,更不公平。主流语言之间的合理比较要耗费很大的精力,多数人不会愿意付出这麽大的代价。另外还需要在广泛的应用领域有充份经验,保持一种不偏不倚客观独立的立场,有 公正无私的信念。...
人们试图把各种语言拿来比较长短,有些现像我已经一次又一次地注意到,坦率地说我感到担忧。作者们尽力表现出公正无私,但最终都是无可救药地偏向于某一种特定的应用程序,某一种特定的编程风格,或者某一种特定的程序员文化。更糟的是,当某一种语言明显地比另一种语言更出名时,一些不易察觉的偷梁换柱就开始了:比较有名的语言中的缺陷被有意淡化,而且被拐弯抹角地加以掩饰;同样的缺陷在不那麽出名的语言里就被描述为致命伤。同样的道理,较出名的语言的技术资料经常更新,而不太出名的语言的技术资料往往是陈年老酒,试问这种比较有何公正性和意义可言?
Q: 别人可是经常拿他们的语言与C++比来比去,这让你感到不自在吗?
A: 当这些评比不够完整,或者出於商业目的,我确实感觉不爽。那些散布最广的比较性评论大多是由某种语言,比方说Z语言的拥护者发表的,其目的是为了证明Z比其它语言好。由於C++被广泛运用,所以C++通常成了黑名单上的头一个名字。通常这类文章被夹在Z语言供货商提供的产品之中,成了其市场竞争的一个手段。令人震惊的是,相当多的此类评论竟然引用的是那些Z语言开发厂商的员工的文章,而这些经不起考验的文章无非想证明Z是最好的。尤其当评论之中确实有一些零零散散的事实...,特意选择出来的事实虽然好像正确,有时却是完全误导。
以後再看到语言评比文章时,请留心是谁写的,他的表述是不是以事实为依据,以公正为准绳,特别是评判的标准是不是对於所引述的每一种语言来说都公平合理。这可不容易做到。
我说过了,真正精譬的技术评比,对於相当程度的研究者,是很有价值的,但我很少在论坛上看到精品 ─ 论坛还能有什麽精品,99% 是打屁闲谈没有营养的文字。我们每每在其中看到偏见、我执、以及最後免不了因擦伤而引起的刺伤。这真令人伤感。这些人把时间拿来学习,多好。奉劝各位少花时间瞎打屁,多花时间学习,看些真正的精典,别动不动就在论坛上提问,也别动不动就挂在论坛上看别人的瞎打屁。
不但评比性的话题,大家喜欢强出头,其他话题,情绪性的反应也很多。中国强盛之道,眼前彷佛全压宝在 IT产业(尤其软件工业)上面。程序员被赋予了过多的期许,程序员也自我膨胀了许多。夹杂着民族主义或个人好恶,看到不满意的人事物,就号召大家「黑(hack)」过去。这是什麽心态?比拳头吗?说实话,就算要比拳头大小,「黑」个网站算是什麽尺寸的拳头?网路是个大暗室,君子不欺暗室。
杂志定位在哪里
CSDN上头,前一阵子曾经请大家就《程序员》的定位问题给意见。很热闹。我不知道刊物掌门人在看了那麽多建言之後,有没有收获。猜想是没有 ─ 就算有也恐怕不大。
就像面对书籍一样,读者最直观的感觉,就是要看他所需要的东西。100个人有100种需求,这样的询问得不出总结。隐性读者、不上网的读者、不投票的读者、不写帖文的读者,你又如何知道他的想法。
我以为,只需把握一个原则:永远比大众水平高一个档次,扮演引导者,带领读者接触前沿思想与宏观视野,那就是了。读者本身会成长,不论你把刊物定位在实质技术的哪一个层次,都会有人不满足;今年的读者成长了,不见得明年还是你的读者。唯有保持前沿思想与宏观视野,时常导入新的技术形式、新的思维、专家的见解、意见领袖的看法,才能够长期吸引读者,并对许多人以及整个技术开发环境做出长久的贡献。
美国大物理学家费曼,曾经批评物理课的教学。他说老师老是在传授解物理习题的技巧,而不是从物理的精神层面来启发学生。这一点是不是可以给刊物经营者和刊物读者一点点启发?
以此观之,就我个人的专长领域,STL 之父访谈录、算法大师 Donald Knuth 采访、C++/OOP 大系、GP/STL 大系、将标准C++视为一个新语言┅以及一些总括性、大局观的文章,是我认为最好的主题。此中有侯捷自己的作品,唔,我向来不客气。
当然啦,太形而上的东西是不行的,太过抽象的东西不容易被接受。抽象层次愈高,人的自由度愈大,但抽象思考是层次高的人的专利,要普罗大众能够接受,还需具象细节稍做辅助。
如何长期保持具有前沿思想与宏观视野的稿源?与外国杂志合作是一个既快又好的办法。每一期《程序员》最前数页都有当期重要外文期刊的前沿摘要,可见《程序员》编辑群一直与外文专业期刊保持着阅读上的接触。要挑选合作夥伴,心中一定有谱。
当然啦,与国外合作涉及经费问题。旁人(尤其读者)很难体会或换位思考经费上的种种困难。就像有人痛心疾�