您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 软件工程 > C++高手对新手的忠告-侯捷
程序员与编程急功近利是大忌一位读者写信给我,说他非常着急。他一个月挣300元人民币,家里情况又不好。他希望赶快把VC/MFC学会,进入IT产业挣钱。信写得很长,看着看着,我也不禁为他着急起来。有许多读者,虽然情况没有那么急迫,燃眉之情却也溢于言表。不外乎都是希望能够尽快把某技术某技术学习起来。但是哪一样东西哪一样技术是可以快速学成的呢?能够快速学成的技术,人才也就必然易取易得,根据市场供需法则,也就不可能有很好的报酬。所以诸君当有心理准备,门槛高的,学习代价高,报酬高;门槛低的,学习代价低,报酬低。说起来是老生常谈了。这其中最可怕的心理在急功近利。从读者的来信,以及从CSDN上的众多帖文,我感觉,许许多多人学习IT技术,进入IT产业,是认为IT产业可以助你脱困,远离贫穷。是的,IT产业有这个「钱」景,但你得有那份实力。要吃硬核桃,也得先估量自己的牙口。「好利」是基本人性,Acer总裁施振荣先生大力提倡「好逸恶劳」之说,视为人性之本,进步的原动力。谁能说不是呢?好利可以,近利就不妙了。近利代表目光浅短,一切作为都因此只在小格局中打转。梨园有句话:要在人前显贵,就要在人后受罪。台上一分钟,台下十年功。老祖宗这方面的教诲太多了,身为中国人的我们,应该都耳熟能详。对于心急的朋友,我只有一句话:勿在浮沙筑高台。你明明很清楚这个道理,为什么临到自己身上,就糊涂了?急是没有用的,浮躁更会坏事。耐住性子扎根基吧。做任何事都要投资,扎根基就是你对自己的未来的投资。如果想知道如何按部就班扎根基,侯捷网站上有一篇文章:「97/06选义按部考辞就班」,请你看看。口舌之战有何益最常在程序技术相关论坛上看到毫无价值而又总是人声鼎沸的口舌之战,就是诸如「VB和Delphi谁好」、「BCB和VC谁优」、「Linus和Windows谁棒」、「Java和C++谁强」这种题目。每次出场都一片洋洋洒洒,红红火火急速窜升为超酷话题。众人各拥所好,口沫飞扬,但是从来说服不了任何异阵营的人,话都只说给自己人听,给自己人爽。这样的论战有何意义?许多人在重组自己的偏见时,还以为自己在思考呢。战到最后,就只是争谁说最后一句话而已。而且,擦伤引起的争吵几乎总是以刺伤结束。工具与技术的评比,是一场高水准的演出。真有能力做评比,侯捷是很尊敬的。但是这些各拥所好,口沫飞扬的人,真的对评比两造都有深刻的了解吗?很多时候我们看到的只是无知,而无知是这么一种东西:当你拥有了它,你就拥有巨大的胆量。很多人喜欢某种工具,只不过因为那是他的初体验。他玩它玩出了一点心得,可以说出它的某些好,就开始做「评比」了。你只看到牡丹的艳丽,又怎知寒梅的清香,幽兰的空灵?绝大多数人使用某种工具,不是因为它最好,不是因为众里寻它千百度,仅仅只是因缘际会。虽然说不同的应用环境选择不同的工具,是最伶俐的作为,但我真的怀疑,在现今工具(以及工具背后反映的技术)如此繁复的时空下,有多少人能够同时精通一个以上的同质工具?追二兔不得一兔,我还是认为你精专一样工具,把它发挥到最高效能,获得的利益多些。被大家拿来评比的,都是市场上的佼佼者,还能差到哪里去?能够两雄相争,必然是在技术面、非技术面(资源的普及、品牌的可靠度)各有一片天,你的评比意义大吗?全面吗?大多数人没有能力同时精通两种同质工具,初学者听了网路上不知名大侠的高论,也不可能有所选择(如果有,怕也只是蒙着头瞎选)。这种没有提供数据,评论者也没有显示任何信誉(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@kkcity.com.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可能就不是最好的
本文标题:C++高手对新手的忠告-侯捷
链接地址:https://www.777doc.com/doc-2756565 .html