快捷搜索:

技术学习点滴

C++的用处

Bjarne Stroustrup清晰地回答了这个问题。以下翰墨摘编自D&E简体中文版《C++说话的设计和演化》。

在以下领域,C++有着根本性的上风:初级系统法度榜样设计、高档系统法度榜样设计、嵌入式法度榜样设计、数值科学谋略、通用法度榜样设计以及混杂系统设计等等。让我们略微展开描述一下:

1.初级系统法度榜样设计:C++是迄今为止最好的初级法度榜样设计说话。

2.高档系统法度榜样设计:包括操作系统核心、收集治理系统、编译系统、电子邮件系统、翰墨排版系统、图像和声音的编排系统、通讯系统、用户界面、数据库系统等等。

3.嵌入式系统:包括拍照机、汽车、火箭、电话互换机、汽车等等。

4.数值/科学谋略:包括仿真、实时数据获取和数据库造访等等。

Bjarne的小我主页上,有一页applications,那儿列出了一些(整个或大年夜部分)应用C++编写的系统、利用法度榜样和库。下面是一些例子:

1.Adobe Systems:所有主要利用法度榜样都应用C++开拓而成,比如Photoshop & ImageReady、Illustrator和Acrobat等。

2.Maya:知道“蜘蛛人”、“指环王”的电脑绝技是应用什么软件做出来的吗?没错,便是Maya。

3.Amazon.com:应用C++开拓大年夜型电子商务软件。

4.Apple:部分紧张“零件”采纳C++编写而成。

5.AT&T:美国最大年夜的电讯技巧供给商,主要产品采纳C++开拓。

6.Google:Web搜索引擎采纳C++编写。

7.IBM:OS/400。

8.Microsoft:以下产品主要采纳C++(Visual C++)编写:

Windows XP

Windows NT:NT4、2000

Windows 9x:95、98、Me

Microsoft Office:Word、Excel、Access、PowerPoint、Outlook

Internet Explorer,包括Outlook Express

Visual Studio:Visual C++、Visual Basic、Visual FoxPro

.NET Framework类库采纳C#编写,但C#编译器自身则应用C++编写而成。

Exchange

SQL Server

FrontPage

Project

所有游戏

......

9.KDE:K Desktop Environment(Linux)。

10.Symbian OS:最盛行的蜂窝电话OS之一。

我平日应用C++进行高端法度榜样开拓。

“平日”一词没什么好说的,无意偶尔只是出于公司文化或小我喜欢方面的缘故原由,选用了其余说话而不是C++,或者相反。我所说的“高端”是指:症毕营业处置惩罚,效率要求极高,实时性要求高等等。

我望见险些所有严肃的工控系统软件和实时数据采集、处置惩罚和体现(主如果图形)软件,都是采纳C++(或C,少部分采纳Java)编写而成的。

据我的懂得,我本来所在的钻研院险些每一个钻研所都在不合程度地应用C++(以及一些其余说话)。

想想看,迄今为止,今世Unix操作系统的各类变体上,最常应用的是什么样的开拓说话?(C/C++)

C++说话

C++说话是机动,但首先要看看应用者能不能发挥它的机动性;C++说话够强大年夜,但要看看应用者有没有本事发挥它的强大年夜功能。

应用C++说话和编译器编写一个快速的法度榜样,并不难,不过编写一个强健而高效的大年夜型法度榜样,就不是那么轻易了。

说话之间的差别,绝非只是大年夜括号和begin、end或Sub、End Sub之间的差别。选择了一种说话,你就选择了一种思维要领,一种法度榜样设计思惟。要想跳出说话的束缚,首先要对说话有着深刻的熟识和透彻的把握。天下上一些大年夜师级的人物,也经常绝不粉饰自己对某种说话(我并没有专指C++)的偏爱。一些人对说话尚一孔之见,就大年夜谈要跳出说话的束缚了 — 你无需跳出,由于你根本未曾深入。

纯挚的技巧性(学术性)钻研,总能给人带来纯挚的快乐。C++说话繁杂至极,可钻研性极强,但一样平常来说,没有3~5年的持续进修、思虑、应用,是弗成能真正掌握C++的。

我不是唯语谈吐或唯对象论者,但我否决抹杀不合说话、不合开拓对象之间的差别。抱持这种不雅点的人,若非蒙昧,等于醉翁之意。这就好比杂牌条记本电脑厂商最爱好叫喊“条记本电脑已经进入同质期间”一样,杂牌机怎么能和IBM比拟?

选择C++或选择Java,要看你小我喜欢和对将来的盘算。虽然只是说话上的区别,但由此抉择的就业领域切实着实不一样。

不管你走什么样的技巧路线,不管你用不用它做开拓,进修C++总会带来长远的好处。一名认识C++的开拓职员,要是他不是一个偏执狂的话,再进修Java或C#,都要轻易得多。

C++不过是一门编程说话,我们老是要用它来办理实际问题,以是要进修开拓对象(比如Visual C++),懂得操作系统(比如API),认识领域常识(比如电力系统),掌握其他软件技巧(比如数据库),等等。编写真正的代码,办理实际问题的能力,才是衡量一名法度榜样员是否有真水平的独一标准。

设计模式和统一建模说话

设计模式(Design Patterns)和统一建模说话(Unified Modeling Language,UML)是两个不合的观点。前者主要目标在于供给可重用的面向工具软件设计规划,后者则是一种描画软件蓝图的标准说话。

当然了,可以应用UML来描述设计模式的布局。

UML所描述的模型可以映射成C++、C#、Java等说话代码,以致可以映射到关系型数据库。映射历程可所以双向的,一样平常都有响应的软件对象(或插件)支持。

不合的说话,特点有所区别,这若干会影响设计模式在该说话中的实现(要领、难易)。比方说,要是应用C说话来描述设计模式,那么,承袭、封装和多态等特点就变成了必要钻研的设计模式,但在任何一门面向工具的说话中,这都纯属多余。

现在市道市面上还没有看到象样的以C#为手段讲述设计模式的书(我没有看到),但这并不打紧,假使有兴趣,完全可以读一读《Design Patterns: Elements of Reusable Object-Oriented Software》(中文版名《设计模式》机器工业出版社)这本书,只管它主要以C++和Smalltalk说话为解说手段。

设计模式本身无所谓短长,根据你要办理的目标问题,选择适当的设计模式。

系统架构

在企业级软件开拓中,架构第一紧张。架构出缺陷,系统就存在硬伤。优秀的架构来自于优秀的设计。这一点毋庸置疑。

任何成功的软件,纵然它没有明确地应用建模思惟、架构措施,但在骨子里、潜意识中,大年夜都具有优越的设计思惟和架构。

只有写过很多多少很多多少代码今后,只有做过一些够份量的企业级项目之后,才可能对软件架构形成清晰的熟识。很难想像一个连几行像样的代码都没有写过的人,对法度榜样思惟和架构却有着深刻的熟识。这种人,十有八九属于空言无补之辈。

我们时时时会看到这种环境,软件的设计也不算太差,但法度榜样员要么不知道怎么写实今世码,要么是代码写得短缺效率,或不敷强健,以致无意偶尔连“架构师”自己对此都一筹莫展。

我们也经常听到一些声音,不要太拘泥于说话(技巧)细节了,要从大年夜处着眼,要有大年夜局不雅,架构怎么怎么紧张,这些都是大年夜实话。不过现实环境每每是,很多法度榜样员不是太拘泥于说话(技巧)细节了,而是对说话(技巧)细节掌握得还远远不敷。

书籍常识的紧张性毋庸置疑,但毫不要以为读了两本书,自己就成了牛气的架构师、设计师或者什么建模专家。

早年的软件开拓笃志实践而短缺需要的理论指示。现在越来越走向别的一个极度:设计文稿越来越图文并茂,琳琅满目,但开拓出来的软件却比曩昔差很多。这种外面文章,意义何在?

数据库

大年夜多半软件都要和数据库打交道,并非只有MIS类软件如斯,数据库常识险些长短掌握弗成的,无非应用深度和广度有别而已。迄今为止,我编写的每一个项目软件,都要造访数据库,有一个法度榜样以致同时要跟两个数据库打交道(Oracle和SQL Server)。

假如你上过任何一门数据库根基理论方面的课,或卖力看过任何一本数据库根基理论方面的书,或许都不必再买更多的(类似的)书。二十多年以来,关系式数据库理论之稳定,远远跨越C++说话的稳定:)

SQL语法有标准,各类数据库又大年夜都加入了自己的一些“方言”,但若通了一个,其它数据库的(基础)学用光阴,可以小时计。

不过,不合的大年夜型数据库的办事端编程技巧,比如存储历程的语法,可能会有较大年夜的差别。打一个不恰当的比方,无意偶尔语法差异之大年夜,好比C++和Object Pascal之间的差别。

不是每一名法度榜样员都必要纯熟掌握数据库办事端编程技巧的,要视其在开拓团队中的角色而定。

MIS

MIS类软件开拓门槛很低,要对自己有足够的信心(这么说,并不否认MIS类软件也考究技巧)。

进修任何一门说话,都要多看书、多思虑、多写代码,必然要写几个正儿八经的、有些规模的软件,才可能真正掌握那种说话、开拓对象,没有什么捷径可言。

大年夜家都知道做项目软件费力,但项目软件的市场大年夜,有钱赚,奏效快,也不存在商品(产品)软件公司所头疼的盗版问题。今朝在海内要将软件做成产品并实现真正的商品化,是极其艰苦的。这里缘故原由很繁杂,有技巧层面的也有非技巧层面的。但最主要的缘故原由在于,做MIS本色上便是做营业,而实际上,没有任何两个组织的营业是相同的。从今朝来看,纵然供给了技巧先辈的MIS平台,也必要进行事情量可不雅的二次开拓 — 要是想把营业做到位的话。

开拓一个MIS是不是很难,要看你的系统功能要求是不是很繁杂。我介入的MIS都很繁杂,要写很多多少很多多少代码。迄今为止,我很少应用数据感知控件(当然了,我并不否决别人应用数据感知控件)。以为单靠拖拽几个控件,设置几个属性,再补上几行代码,就可以轻松搞定一个数据库治理系统的,要么那个“系统”太初级,压根就算不上系统,要么那种开拓对象太厉害,不是人类设计的 — 至少我没有见过。

只管海内切实着实有公司、小我应用Visual C++进行实际MIS开拓,但平日来说,除非有分外斟酌,应用VC进行MIS开拓,并非明智之选,至少今朝(的VC)如斯。

对付Windows上的MIS软件开拓者来说,六年前,只凭FoxPro就可以打世界。四年前,开拓职员发明,单单掌握VB、PB、Delphi这些开拓对象还不敷,至少还要进修一种大年夜型数据库产品,比如Oracle、DB2、Sybase和SQL Server等。三年前,Windows DNA以及类似技巧热火朝天,开拓职员还要相识若何编写COM组件,处置惩罚营业逻辑,以致还要对于负载平衡、容错等问题。本日,.NET一会儿带来这么多技巧,开拓职员必须进修许多新说话特点、至少部分框架类库以及五花八门的新观点,这以致引起了相称一部分人的惊恐。怨天恨地是无济于事的,精确的做法是投入需要的光阴,进修掌握.NET,由于它是Windows企业利用开拓的未来。

技巧进修

惊恐、迷惘和狐疑,每每都来自于新手。学了器械却不知道有没有用场,有什么用场,有多大年夜用场,这种思潮在一些论坛的贴子上随处可见。

有些开拓职员(我是指真正身处业界的某些开拓职员,而不是指新手和门生),出于各种缘故原由(有自身的,也有外在的,但归根结底是自身的缘故原由),安于采纳基础可行的技巧完成编程义务,而漠视(或不乐意)学用更优雅、更高效的编程技巧,这不是个好习气。

同一个问题,可以采纳效率低下、扩展性和掩护性差的要领加以办理,也可以采纳高效而优雅的要领办理,你倾向于哪一种?说得直白一点,编程高手和菜鸟的差别,每每也正在于此。高手编写的代码,经常会让菜鸟惊疑不已。

无论是门生同伙,照样一线开拓职员,都不应该有“书读得足够多了”或者“读几本书就可以了”之类的糊涂动机。会有那么一天,当你打开另一本以为已经认识的书籍时,却忽然发明,有很多器械着实还陌生得很。

说话毫不是整个。任何一门说话,都有它能够发挥长于的情况,都有它长于办理的目标问题。单单进修说话本身是远远不敷的,还要进修相关的库、相关的平台技巧,说得更远一点,还要熬炼对目标问题的阐发、归纳能力等等。

事情之前,技巧路线自己作主,事情之后,绝大年夜多半法度榜样员将被公司技巧路线阁下。

营业常识(领域常识)

进入财产界,你老是从事某一个(或某几个)领域的软件开拓(即就是Office这样的通用商品软件,也是有领域观点的,只不过这个“领域”范围广泛,不象收集通讯之类的领域来得那么集中),是以领域常识很紧张 — 我们开拓软件不便是为了办理该领域的问题的吗?

然则,领域常识是弗成能在门生阶段学到位的,它更必要在事情中体会、思虑、积累和检验,也经常必要前辈帮、带。门生期间,是可以广泛阅读、深入研究“纯”技巧的光阴阶段,功底深挚的纯技巧,是你敷衍任何领域问题的成本。一旦进入业界,你就不得不将绝大年夜部分光阴和精力花费在特定领域问题之上。

对付软件开拓来说,法度榜样说话、开拓对象(这两种器械每每搅和在一路)和领域常识同样紧张。不过,客不雅地讲,营业常识一样平常要比技巧本身轻易进修一些,你以致可以边做边学(当然了,若想成为一名领域营业专家,就不是夙夜迟早之功了)。

一个初涉软件开拓领域的新手不大年夜相识营业常识,比如说,电力行业的营业常识,这是可以理解的,但假使不能对照自若地应用法度榜样说话和开拓对象,那就别扭了。

营业常识和履历可以成为一小我在某开拓领域用饭的成本,但过硬的技巧更是你纵横多种软件开拓领域的利器。比如说,不做GIS又若何?你照旧可以开拓其余软件。

我并不是要否认营业常识的紧张性 — 它异常紧张。举个例子,一个MIS的实际效果不抱负,每每并不是由于技巧不敷先辈,而是由于没有在营业上做足功夫。

职业生涯

我无法为任何同伙筹谋职业生涯。人是会变的,本日这么想,在现实的压力下(或诱惑下),翌日可能又会孕育发生相反的设法主见。

不过,一小我的脾气是难以从根本上改变的,我信托“脾气决天命运”。要是你认定自己只爱好搞技巧,不善于或不爱好做技巧之外的工作,那就应该努力寻求搞技巧的情况。但不要一时兴起!三思而后行。我建议你的选择照样“中庸”一些对照稳妥。

同样,假如你对技巧不感兴趣,那就好好练练你的技巧之外的功夫。

一小我设法主见太多,盼望太少,就会“惶惶弗成终日”。或进或退,总得做出定夺,方可从生理逆境中解脱。

求职

我不是谋略机科班(传统意义上的谋略机专业)身世,我所熟识的技巧水准很高的同伙也大年夜都不是科班身世,不必为自己的身世认为自卑。只要用心、用功,就必然会有所成。

说一个现实问题。用人单位在招聘时,平日会先看应聘工具的卒业院校和所学专业,可以想象有些同伙可能是以碰过壁。或许招聘单位的技巧认真人还没有看到你的求职书,你就已经被“枪毙”掉落了。无意偶尔切实着实不是个体(你,或者认真招聘的人)的错,现实社会评价体系便是这个样子。我建议,假使自大(并且有可能的话),你完全可以直接到用人单位面谈。

面谈时不必过于感性,不要慷慨煽惑感动,这无济于事,就谈你对技巧的懂得,并且有勇气、有能力参加用人单位的考试。

以能力服人,以技巧服人。

可以做一份工致的小我简历,经由过程电子邮件要领多发给一些单位(应用google这样的搜索引擎就可以查到一些)。这种要领便捷,资源低廉,也相符软件开拓公司的招人习气。

口试异常紧张。一旦有单位看护口试,在(针对该单位)做好技巧筹备的同时,必然要留意自己的着装、辞吐和行径举止等等。牢记,法度榜样员也是一个“社会人”!

给新手

大年夜家懂的器械比你多,只是由于比你来得早。进修原先便是一个“从不知到知之”的历程,没有什么好自卑的。要想站稳脚跟,首先要学好和你当前职位相当的器械,必然要尽快认识公司的产品。

一名初涉软件开发行当的新手,每每会有两种生理:一是害怕,不知道自己究竟是否能胜任实际软件开拓事情。二是过于自大,眼高手低。这都是不需要的。

不症结怕。不会就多下些功夫进修,不要羞于问身边的高手,他们大年夜都热心,由于他们自己也都是从这个阶段过来的。不要过高预计自己,那样每每会跌跟头。

总之,不必自卑,别人只是先走了一步而已,只要用心、用功,你可以遇上并跨越他们。

您可能还会对下面的文章感兴趣: