侯捷先生谈程序员与编程.docx
《侯捷先生谈程序员与编程.docx》由会员分享,可在线阅读,更多相关《侯捷先生谈程序员与编程.docx(18页珍藏版)》请在冰豆网上搜索。
![侯捷先生谈程序员与编程.docx](https://file1.bdocx.com/fileroot1/2023-1/1/9aadc1df-55a5-49ab-a6dc-6b2d0a5bf549/9aadc1df-55a5-49ab-a6dc-6b2d0a5bf5491.gif)
侯捷先生谈程序员与编程
关键词:
侯捷,语录,编程,程序员
急功近利是大忌
一位读者写信给我,说他非常着急。
他一个月挣300元人民币,家里情况又不好。
他希望赶快把VC/MFC学会,进入IT产业挣钱。
信写得很长,看着看着,我也不禁为他着急起来。
有许多读者,虽然情况没有那麽急迫,燃眉之情却也溢于言表。
不外乎都是希望能够尽快把某技术某技术学习起来。
但是哪一样东西哪一样技术是可以快速学成的呢?
能够快速学成的技术,人才也就必然易取易得,根据市场供需法则,也就不可能有很好的报酬。
所以诸君当有心理准备,门槛高的,学习代价高,报酬高;门槛低的,学习代价低,报酬低。
说起来是老生常谈了。
这其中最可怕的心理在急功近利。
从读者的来信,以及从CSDN上的众多帖文,我感觉,许许多多人学习IT技术,进入IT产业,是认为IT产业可以助你脱困,远离贫穷。
是的,IT产业有这个「钱」景,但你得有那份实力。
要吃硬核桃,也得先估量自己的牙口。
「好利」是基本人性,Acer总裁施振荣先生大力提倡「好逸恶劳」之说,视为人性之本,进步的原动力。
谁能说不是呢?
好利可以,近利就不妙了。
近利代表目光浅短,一切作为都因此只在小格局中打转。
梨园有句话:
要在人前显贵,就要在人后受罪。
台上一分钟,台下十年功。
老祖宗这方面的教诲太多了,身为中国人的我们,应该都耳熟能详。
对于心急的朋友,我只有一句话:
勿在浮沙筑高台。
你明明很清楚这个道理,为什麽临到自己身上,就糊涂了?
急是没有用的,浮躁更会坏事。
耐住性子扎根基吧。
做任何事都要投资,扎根基就是你对自己的未来的投资。
如果想知道如何按部就班扎根基,侯捷网站上有一篇文章:
「97/06选义按部考辞就班」,请你看看。
口舌之战有何益
最常在程序技术相关论坛上看到毫无价值而又总是人声鼎沸的口舌之战,就是诸如「VB和Delphi谁好」、「BCB和VC谁优」、「Linus和Windows谁棒」、「Java和C++谁强」这种题目。
每次出场都一片洋洋洒洒,红红火火急速窜升为超酷话题。
众人各拥所好,口沫飞扬,但是从来说服不了任何异阵营的人,话都只说给自己人听,给自己人爽。
这样的论战有何意义?
许多人在重组自己的偏见时,还以为自己在思考呢。
战到最后,就只是争谁说最后一句话而已。
而且,擦伤引起的争吵几乎总是以刺伤结束。
工具与技术的评比,是一场高水准的演出。
真有能力做评比,侯捷是很尊敬的。
但是这些各拥所好,口沫飞扬的人,真的对评比两造都有深刻的了解吗?
很多时候我们看到的只是无知,而无知是这麽一种东西:
当你拥有了它,你就拥有巨大的胆量。
很多人喜欢某种工具,只不过因为那是他的初体验。
他玩它玩出了一点心得,可以说出它的某些好,就开始做「评比」了。
你只看到牡丹的艳丽,又怎知寒梅的清香,幽兰的空灵?
绝大多数人使用某种工具,不是因为它最好,不是因为众里寻它千XX,仅仅只是因缘际会。
虽然说不同的应用环境选择不同的工具,是最伶俐的作为,但我真的怀疑,在现今工具(以及工具背后反映的技术)如此繁复的时空下,有多少人能够同时精通一个以上的同质工具?
追二兔不得一兔,我还是认为你精专一样工具,把它发挥到最高效能,获得的利益多些。
被大家拿来评比的,都是市场上的佼佼者,还能差到哪里去?
能够两雄相争,必然是在技术面、非技术面(资源的普及、品牌的可靠度)各有一片天,你的评比意义大吗?
全面吗?
大多数人没有能力同时精通两种同质工具,初学者听了网路上不知名大侠的高论,也不可能有所选择(如果有,怕也只是蒙着头瞎选)。
这种没有提供数据,评论者也没有显示任何信誉(credit)的论战,没有任何意义,纯粹只为自己爽。
浪费网路资源!
C++之父BjarneStroustrup曾经在他自己的网页上的FAQ(以及其他许多场合)中回答如下问题。
虽然其中谈的是语言,但是扩大到其他层面仍然合适,值得大家好好咀嚼(注:
全文由孟岩先生译出,可自侯捷网站浏览):
Q:
你愿不愿意将C++与别的语言比较?
A:
抱歉,我不愿意。
你可以在TheDesignandEvolutionofC++的介绍性文字里找到原因。
有不少人邀请我把C++与其它语言相比,我已经决定不做这类事情。
在此我想重申一个很久以来我一直强调的观点:
语言之间的比较没什麽意义,更不公平。
主流语言之间的合理比较要耗费很大的精力,多数人不会愿意付出这麽大的代价。
另外还需要在广泛的应用领域有充份经验,保持一种不偏不倚客观独立的立场,有公正无私的信念。
...
人们试图把各种语言拿来比较长短,有些现像我已经一次又一次地注意到,坦率地说我感到担忧。
作者们尽力表现出公正无私,但最终都是无可救药地偏向于某一种特定的应用程序,某一种特定的编程风格,或者某一种特定的程序员文化。
更糟的是,当某一种语言明显地比另一种语言更出名时,一些不易察觉的偷梁换柱就开始了:
比较有名的语言中的缺陷被有意淡化,而且被拐弯抹角地加以掩饰;同样的缺陷在不那麽出名的语言里就被描述为致命伤。
同样的道理,较出名的语言的技术资料经常更新,而不太出名的语言的技术资料往往是陈年老酒,试问这种比较有何公正性和意义可言?
Q:
别人可是经常拿他们的语言与C++比来比去,这让你感到不自在吗?
A:
当这些评比不够完整,或者出于商业目的,我确实感觉不爽。
那些散布最广的比较性评论大多是由某种语言,比方说Z语言的拥护者发表的,其目的是为了证明Z比其它语言好。
由于C++被广泛运用,所以C++通常成了黑名单上的头一个名字。
通常这类文章被夹在Z语言供货商提供的产品之中,成了其市场竞争的一个手段。
令人震惊的是,相当多的此类评论竟然引用的是那些Z语言开发厂商的员工的文章,而这些经不起考验的文章无非想证明Z是最好的。
尤其当评论之中确实有一些零零散散的事实...,特意选择出来的事实虽然好像正确,有时却是完全误导。
以后再看到语言评比文章时,请留心是谁写的,他的表述是不是以事实为依据,以公正为准绳,特别是评判的标准是不是对于所引述的每一种语言来说都公平合理。
这可不容易做到。
我说过了,真正精譬的技术评比,对于相当程度的研究者,是很有价值的,但我很少在论坛上看到精品─论坛还能有什麽精品,99%是打屁闲谈没有营养的文字。
我们每每在其中看到偏见、我执、以及最后免不了因擦伤而引起的刺伤。
这真令人伤感。
这些人把时间拿来学习,多好。
奉劝各位少花时间瞎打屁,多花时间学习,看些真正的精典,别动不动就在论坛上提问,也别动不动就挂在论坛上看别人的瞎打屁。
不但评比性的话题,大家喜欢强出头,其他话题,情绪性的反应也很多。
中国强盛之道,眼前彷佛全压宝在IT产业(尤其软件工业)上面。
程序员被赋予了过多的期许,程序员也自我膨胀了许多。
夹杂着民族主义或个人好恶,看到不满意的人事物,就号召大家「黑(hack)」过去。
这是什麽心态?
比拳头吗?
说实话,就算要比拳头大小,「黑」个网站算是什麽尺寸的拳头?
网路是个大暗室,君子不欺暗室。
杂志定位在哪里
CSDN上头,前一阵子曾经请大家就《程序员》的定位问题给意见。
很热闹。
我不知道刊物掌门人在看了那麽多建言之后,有没有收获。
猜想是没有─就算有也恐怕不大。
就像面对书籍一样,读者最直观的感觉,就是要看他所需要的东西。
100个人有100种需求,这样的询问得不出总结。
隐性读者、不上网的读者、不投票的读者、不写帖文的读者,你又如何知道他的想法。
我以为,只需把握一个原则:
永远比大众水平高一个档次,扮演引导者,带领读者接触前沿思想与宏观视野,那就是了。
读者本身会成长,不论你把刊物定位在实质技术的哪一个层次,都会有人不满足;今年的读者成长了,不见得明年还是你的读者。
唯有保持前沿思想与宏观视野,时常导入新的技术形式、新的思维、专家的见解、意见领袖的看法,才能够长期吸引读者,并对许多人以及整个技术开发环境做出长久的贡献。
美国大物理学家费曼,曾经批评物理课的教学。
他说老师老是在传授解物理习题的技巧,而不是从物理的精神层面来启发学生。
这一点是不是可以给刊物经营者和刊物读者一点点启发?
以此观之,就我个人的专长领域,STL之父访谈录、算法大师DonaldKnuth采访、C++/OOP大系、GP/STL大系、将标准C++视为一个新语言┅以及一些总括性、大局观的文章,是我认为最好的主题。
此中有侯捷自己的作品,唔,我向来不客气。
当然啦,太形而上的东西是不行的,太过抽象的东西不容易被接受。
抽象层次愈高,人的自由度愈大,但抽象思考是层次高的人的专利,要普罗大众能够接受,还需具象细节稍做辅助。
如何长期保持具有前沿思想与宏观视野的稿源?
与外国杂志合作是一个既快又好的办法。
每一期《程序员》最前数页都有当期重要外文期刊的前沿摘要,可见《程序员》编辑群一直与外文专业期刊保持着阅读上的接触。
要挑选合作伙伴,心中一定有谱。
当然啦,与国外合作涉及经费问题。
旁人(尤其读者)很难体会或换位思考经费上的种种困难。
就像有人痛心疾首义正词严地埋怨CSDN速度慢得像蜗牛,却可曾想过网站的资源从哪里来。
向你收费,你接受吗?
台湾已经倒掉很多很多家着名的网站,我等着看免费的服务撑到几时。
要刊物宏观耐读,读者们也得成熟些。
一群很好的读者,才拱得起一本很好的刊物。
下面是一封读者来信:
。
软件工程对整个软件工业的提升,至为重要。
但是一个程序员要修练到对「软件工程」这个题目感兴趣,非三五载(甚至更多)不为功。
我的意思是什麽呢?
我的意思是,这类书籍、这类工具、这类网站、这类刊物,在一个嘈嘈切切、急功近利的环境中难有生存空间。
这是为什麽蒋涛先生想要将《程序员》杂志导向软件工程主题时,我对他兴起巨大的尊敬与忧虑的原因。
现在技术发展太快了,国外(甚至印度)在实现「软件工业化」的时候,大陆(至少我周围是这样)还停留在小作坊手工打造的水平。
我认为未来的世界不再属于「个人数字英雄」,软件工程似乎比一两项技术更迫切。
以您的大局观和丰富的阅历,对这个问题是否有不同的看法,不知您是否愿意就此从技术(或其他)角度写篇文章发表您的见解
顺带一提,《程序员》的文字水平一直以来带给我「阅读的乐趣」。
这个评语我从来少有机会用在台湾的电脑刊物或电脑书籍上。
比起台湾的电脑读物,这里的文字有深度多了。
轻浮躁进没信心
只要上网看看程序员出没的论坛,你就会看到一片浮躁与焦虑。
反映出来的就是没有信心。
「C#推出,Java将死」,「Java演进,C++将亡」,「.Net推出,VB程序员死定了」,「Kylix推出,大伙儿快学」,「Delphi持续新版,哥儿们别怕」,「我刚学VC,怎麽它就出场了」,「MFC真的要过时了吗」┅。
诸如此类的问题,不知该归类为谣言还是童语?
很奇怪也很感叹,为什麽大家对这类问题如此感到兴趣。
那透露出一种肤浅─没有深刻了解技术本质,因而汲汲营营慌慌张张惶惶惑惑于新工具、新事务、并且认为新的大概一定都是好的。
对自己没有信心,对整个环境也没有信心。
有深度的程序员绝对不会在意这种事情。
当然,并不是早晚三柱香就万事保平安。
并不是告诉自己别在乎别在意,就真的能够不在乎不在意了。
那必需是发自内心,胸中自有丘壑的一种笃定,有着好的本质学能做靠山。
台湾BBS(连线)前阵子也有许多热烈讨论Java,C#,C++,.NET的贴信。
我把我最欣赏的一封引于下。
其最后结语,扩张到任何领域都是合适的。
发信人:
algent@.tw(流云),广告牌:
programming
标题:
一些想法Re:
不懂,业界一直喊Java,在喊些什麽..."
发信站:
KKCITY(SunFeb1812:
55:
492001)
以目前台湾业界的情形来看,C\C++应该是想成为一个软体工程师的基本技能;至于Java,如果熟悉C++,学Java应该花不了一个月的时间。
以我个人的观点,Java的OO程度是胜于C++的,而且在这个Internet盛行的年代,效率的瓶颈在于网路本身的频宽而不在单机执行时的效率,Java所提供的Collectionframework是非常威力强大的程序设计工具,又内建了对Multi-thread程序的支援,丰富的classlibrary让人在设计网路、资料库┅的相关软体时无后顾之忧。
C++可能是过去十多年以来最重要的程序语言之一,它的效率显然较Java为佳,但在撰写需要安装在Internet上成千上万种不同厂牌的机器上执行的程序时,相对于Java可能就不是最好的解决方案。
「目前」不需要以Java来开发DeskTop上的应用程序,因为「当下」而言Java撰写的程序相对于C++会占据更多的记忆体且执行效能不彰。
我们不能期待免子游得比鱼快,也不能期待鱼飞得比鹰高。
工程上的需求使得各种场合有不同的适合的程序语言,不必费心去批评A、推崇B、打压C。
基本的理论比这些事重要多了。
VB将死?
Java将亡?
C++将被Java取代...,这很重要吗?
我用Java也用C++,即使明年它们全都被Java++、C++++、Lisp++、Forth++取代,何有于我哉?
FFT还是FFT、Dijkstraalgorithm还是Dijkstraalgorithm...还是别太担心这些事了...
侯捷除了偶在BBS上自说自话外,绝少回应或叁与讨论。
看了上封信,忍不住回了一帖:
作者:
jjhou(jjhou)广告牌:
programming
标题:
一些想法Re:
不懂,业界一直喊Java,在喊些什麽..."
时间:
FriFeb2321:
12:
142001
同意你的看法。
写得非常精采。
人到了一个层次,才会去思考事物的本质是什麽,不被浮面的工具所系绊。
熟练工具是必要的,但工具的演化汰换,不是大家在这里关起门来喊爽就好。
DonaldKnuth说:
「语言持续演进,那是必要的。
不论现在流行什麽语言,你都可以肯定十年二十年之后它不再风光。
我总是在自己的书中写些不时髦的东西,但这些东西却值得后代子孙记取。
」(注:
以上局部是《程序员》2000/12的译文)
DDJ1996/04p18:
"Languagekeepevolving,andthatisnecessary....Whatevercomputerlanguageisinfashion,youcanguaranteethatwhitinadecadeortwoitwillbecompletelyoutoffashion.Inmybook,Itrytowritethingsthatarenottrendy,butarethingsthataregoingtobeworthrememberingforothergenerations."
追求新知固然是一个计算机从业人员该有的态度,但是追求新工具与充实固有知识两者之间,应该取得一个平衡。
过犹不及!
再说,凡走过必留下足迹。
你现今的任何努力,只要它是扎扎实实的,就绝不至于落空。
技术是有累积性的呀,技术总是触类旁通的呀。
你说MFC和OWL就没有累积性,我说有,messagemap的原理不一样吗?
framework的工作原理不一样吗?
我个人并非任何语言或任何工具或任何技术的狂热者,我是务实派。
对于自称熟稔多种(属性不同的)语言的人,我充满敬畏并保持工作上的距离。
要精通一个语言,使自己能发挥其最大效能,不是件容易的事,需要不少精力的投注。
99.99%的人都是凡人,身为凡人的我们,把时间用来精通一(或二)种适合其工作性质的「语言」,比泛泛认识多种「语法」,要高明得多,回报也大得多。
真的,还是别太担心谁将兴起谁将亡的事了吧。
天才的沃土
教育永远是我最关心的议题。
教育的重要性绝对不亚于产业。
没有好的教育,何来好的产业人才?
学校教育就不提了,那不是侯捷能够着力的地方。
虽然我也在大学教书,但一年不过教育数十位学生,影响能有多大?
书籍的读者动辄数万人,刊物的读者动辄数十万人,这才是有大影响力的地方。
自修教育如影随形,打你离开学校就跟随你一辈子,重要性远胜于学校教育。
谈到自修,离不开读物─各种型式的书籍和刊物。
在咱们程序员这一行,书籍和刊物的情况如何?
下面是一封读者来信:
我记得您说过,到一个地区的书店去逛逛,对这里的IT技术水平就知道大概。
这话太得我心了。
我学习软件技术5年,花在买书的钱有一万二千(人民币)以上,如今回头来看,绝大部份是垃圾。
以前曾经担心:
若要到外地工作,这麽多书怎麽带走?
现在则是一种心痛的轻松,因为值得带走的书只够一提。
学习IT之初,谁不想在产业上做出一番成成绩?
但多年之后回首,则恐怕都会为自己当时所处的教育环境痛心。
关于计算机书籍的浮滥、低劣,我收到太多太多的读者反应了。
以上只是冰山一角,有兴趣的读者请上侯捷网站看个饱。
有些出版社甚至以出烂书闻名,看看这封信:
您想必看过蒋先生在《程序员》上写的文章,知道所谓IT出版四大家。
蒋先生可能碍于礼仪,有些地方还没讲透。
例如其中的XXX出版社,在译作方面现在已经是一块榜样粗制滥造的榜样。
再看这封信:
我在您网站中看到了有关对关于xxx出版社的评价,深有感慨。
其实该出版社是大陆IT业引进外文书籍的鼻祖,我们这一辈程序员(92年以前的)就是读该出版社的译着成长起来的(我至少还有两大纸箱xxx出版社的旧书),在那个时候,差不多所有的计算机类图书都是它们引进并翻译的,现在看来,那个时候的翻译质量差得无法忍受(比IncideVC++5/e还差许多),但我们那个时候已经很满足了,毕竟有比没有好。
现在大家对xxx出版社的批评,我想是竞争的结果,因为大家看到了更好的译着,有了比较。
总而言之,xxx出版社当年的特点是大量翻译,草草出版,让科技人员能够在尽快的读到优秀作品。
这种作风显然已经不合时宜了,或者说它已经完成了它的历史使命。
我现在当然也不象从前那样狂买xxx出版社的书了,因为有了更多的选择。
这封信让我跌入回忆。
台湾也曾有两家出版社,有过同等劣质的作法。
这两家恶贯满盈的出版社,一名莹圃,一叫松格。
两家都关门了。
他们的作法都是,快速而大量地翻译外文书。
由于速度快,也由于选材之中不乏好书,所以曾经拥有一定的市场。
怎地都关门了?
因为读者只能被欺负一次两次,不会永远当傻瓜。
这样的出版心态摆明没有长远打算,只想捞一票走人,不关门才怪。
我们可能因为,垃圾堆中多少捡过一些经过修补尚称堪用的东西,而对刻意制造这些垃圾的人产生一种奇怪的情愫。
东西明明不好,但我们从中吸收了一点点养份。
该谢他还是该恨他?
该唾弃他!
这些商人之所以大量而快速地引进外文书,因为有利可图。
有利可图是好事,但他没把他该做的事做好。
他们放弃品质而无所惧,因为他们知道,在怎样的时空背景下可以怎样轻松地赚钱。
大陆出版界朋友告诉我,谁谁谁(都有名有姓)很轻松地在几年里就这样积聚了几百万人民币的身家。
几百万人民币呀,我的天。
这也算IT产业吧,果然是一片红火,鸡犬升天。
因努力做事而致富,应该得到我们的赞美和祝福。
可这样的出版社,花更大的功夫赚更多更长远的钱他们不要,因为轻松钱赚起来不费劲儿。
百分之一的人可能从这些垃圾中吸收到一些养份,百分之百的人从中感受了阅读的痛苦。
谁知道从中被误导的人又有百分之几?
买书的钱我们没少花,得到的正价值却是那麽少,痛苦指数那麽高。
这位读者说『总而言之xxx出版社当年的特点是大量翻译,草草出版,让科技人员能够尽快的读到优秀作品』,又说『它们引进并翻译的,现在看来,翻译质量差得无法忍受』。
喔,一本优秀的原作,经过无法忍受的翻译质量洗礼后,还会是一本优秀的作品吗?
待人宽厚是美德,但是刻意制造馊水油让人吃坏肚子者,不值得为他们说话。
你说『它已经完成了它的历史使命』。
不,他们从来就没有历史使命,也没有使命。
如此「仁厚自持」而且忍耐度奇佳的读者,相当稀少。
绝大部份程序员谈到计算机图书,都是斑斑血泪的控诉。
《程序员》2001/03p119可不就有一篇「计算机图书出版商的陷阱」。
读者来信写道:
鲁迅说,未有天才之前,应该要先营造天才的土壤。
...您的心情我确实能够深刻理解(这大概就是堆在墙角那几百本垃圾书的最大贡献吧)。
「天才的土壤」,嗯,鲁迅说得好。
不正应该是出版社的职志吗?
我们却能向谁说去?
其实我们也只是希望有一些好书造就一些资质不错的程序员而已。
前一阵子才沸沸扬扬于印度程序员与中国程序员的比较,我们哪企望天才?
不过就是希望培养一些扎实的人才而已。
看倌也许奇怪,书不好,侯捷为什麽不把矛头对准作者,却大骂出版社。
哇勒,我早就抱着「得之我幸,不得我命」的卑微态度,不敢期望创作性中文好书。
上面我说的,以及读者最痛心疾首的,是翻译书的低劣水平。
人才济济的中国,怎麽可能找不到够格的译者?
如果不是出版社的抢钱抢短心态,会造就出这一大批劣品吗?
我能不怪罪出版社吗?
到头来,还是要靠自己。
「计算机图书出版商的陷阱」一文最终是这麽说的:
『记住,您花的是自己辛苦挣来的钱,所以千万不要浪费在没有用的东西上。
对于出版了优秀图书的出版公司要有所回报。
买他们的书,给他们写信,让他们知道你在想什麽,你需要什麽。
』
良性循环
一个体系的建制,需要从底层到顶层的坚实构筑。
不论是C++,Java,.Net,OO,UML,Windowsprogramming,Linuxprogramming,每一个主题欲成就一个完整体系,都需要一大套书。
拿C++/OOP来说,就得涵盖语法语意的、物件模型的、专家经验的、设计样式(designpatterns)的、入门的、进阶的,作为叁考工具的┅。
拿GP/STL来说,就得有GP泛论型的、STL源码剖析的、STL应用大全的、STL规格大全的、STL组件设计的、其他泛型技术的┅。
拿Java来说,就得有语言核心的、物件导向的、多绪编程的、图形界面的、网路应用的┅。
对生手而言,不先把底层的东西弄清楚就学习高层的抽象,必会成为空中楼阁,流于形式。
对熟手而言,缺乏抽象思维,意味层次上的停滞。
写作、翻译、乃至于出版全体系好书,真的是一件需要目光长远、意志坚定、带点理想色彩的人,才做得起来的志业。
如果这样的人,这样的出版社,没有得到大家理念上和实质上的支持,谁会投入这种傻事?
我个人一向是高品质高价位的坚定信奉者。
高品质高价位是生产者经营的最大诱因。
因为努力做出了高品质,所以得享高价位带来的高利润,天经地义。
否则谁要费心去做高品质?
慈善家吗?
傻瓜吗?
对于消费者,高价位当然令他不舒服。
但是你应当思考是否物有所值,甚至物超所值。
拿英文书为例,USD49.95一本的TheC++StandardLibrary,或是USD49.95一本的GenericProgrammingandtheSTL,完全物超所值。
当我了解这些书的价值,就算他们再贵两倍,我也要买。
有人拼死吃河豚,我可是要拼命买好书。
现实地说,眼下「知识