學(xué)習(xí)c++需要的時(shí)間以及知識(shí)
學(xué)習(xí)c++需要的時(shí)間以及知識(shí)
C++是當(dāng)今應(yīng)用廣泛的計(jì)算機(jī)編程語(yǔ)言,那么想要學(xué)習(xí)掌握C++大概要多長(zhǎng)時(shí)間呢?應(yīng)該怎樣學(xué)習(xí)C++?下面是學(xué)習(xí)啦小編整理的學(xué)習(xí)c++需要的時(shí)間以及知識(shí),希望對(duì)您有用。
學(xué)習(xí)c++需要的時(shí)間以及知識(shí)篇一
完全學(xué)習(xí)C語(yǔ)言需要一個(gè)月。
學(xué)習(xí)語(yǔ)言容易,但要想隨心所欲的發(fā)揮,需要相當(dāng)長(zhǎng)的時(shí)間,你先花一個(gè)月的時(shí)間把C語(yǔ)言的語(yǔ)法、函數(shù)庫(kù)等弄明白,再花半年時(shí)間閱讀一些別人編好的程序,以能看明白為準(zhǔn),然后自己編一些小程序。然后你就能對(duì)比出你自己的水平與你心中所謂的“完全學(xué)習(xí)”差距有多大了。
學(xué)習(xí)是個(gè)長(zhǎng)期的積累的過程。學(xué)任何知識(shí)都是這樣,尤其是計(jì)算機(jī)行業(yè),發(fā)展太快,要學(xué)的東西更多。編程語(yǔ)言只不過是一個(gè)方面而已,但做好也不是件容易的事。從事工作了也更得學(xué)。java ,c /c++ ...什么的語(yǔ)言,都是相通的。只是語(yǔ)法上有些區(qū)別,重要的是數(shù)據(jù)結(jié)構(gòu)和算法。程序就是算法和數(shù)據(jù)結(jié)構(gòu),這些掌握了才叫會(huì)編程,才會(huì)寫出好程序。學(xué)會(huì)語(yǔ)法只能算是學(xué)習(xí)英文認(rèn)識(shí)字母一樣。慢慢學(xué)吧。
學(xué)習(xí)c++需要的時(shí)間以及知識(shí)篇二
如果說(shuō)有一種語(yǔ)言定義了當(dāng)今編程的實(shí)質(zhì),那么它就是C++。它是高性能軟件開發(fā)的杰出語(yǔ)言。它的語(yǔ)法已經(jīng)成為專業(yè)編程語(yǔ)言的標(biāo)準(zhǔn),并且它的設(shè)計(jì)思想在計(jì)算界引起深刻的反響。
Java和C#語(yǔ)言都是從C++繼承而來(lái)的。簡(jiǎn)而言之,要成為專業(yè)的編程人員就意味著要深刻理解C++。它是現(xiàn)代編程的基礎(chǔ)。
本篇旨在介紹C++,包括它的歷史,它的設(shè)計(jì)思想,以及幾個(gè)最重要的特性。學(xué)習(xí)一門編程語(yǔ)言最困難的事情就是所有的元素都不是單獨(dú)孤立存在的。相反,構(gòu)成語(yǔ)言的各個(gè)部分是相互協(xié)作,一起工作的。這種相關(guān)性使得我們很難討論C++的一個(gè)方面而不去考慮其它方面。為了克服這個(gè)困難,本篇對(duì)幾個(gè)C++特性進(jìn)行了簡(jiǎn)單的介紹,包括C++程序的通用形式,一些基本的控制語(yǔ)句,以及運(yùn)算符。本篇不會(huì)涉及過多的細(xì)節(jié),更注重C++程序中通用的概念。
必備技能 1.1 C++歷史簡(jiǎn)介
C++是從C語(yǔ)言發(fā)展而來(lái)的。這一點(diǎn)不難理解,因?yàn)镃++是構(gòu)筑的C語(yǔ)言的基礎(chǔ)之上的。然而,C++是C語(yǔ)言的超集。C++擴(kuò)展并增強(qiáng)了C語(yǔ)言,支持面向?qū)ο蟮木幊?這點(diǎn)在本篇的后面會(huì)進(jìn)行描述)。C++同時(shí)對(duì)C語(yǔ)言做了改進(jìn),包括擴(kuò)展了例行程序庫(kù)集。然而大部分的C++特性是直接從C繼承而來(lái)的。因此,為了充分理解和欣賞C++,我們必須深入了解C語(yǔ)言是如何運(yùn)作的。
C: 現(xiàn)代編程時(shí)代的開始
C語(yǔ)言的發(fā)明定義了現(xiàn)代編程時(shí)代的開始。它的影響不應(yīng)該被低估,因?yàn)樗鼜母旧细淖兞巳藗兛紤]和實(shí)現(xiàn)程序的方法。它的設(shè)計(jì)思想和語(yǔ)法已經(jīng)影響到了每一個(gè)主流的編程語(yǔ)言。C語(yǔ)言是計(jì)算發(fā)展的主要的,革命性的推動(dòng)力之一。
C語(yǔ)言由Dennis Ritchie 在 DEC PDP-11電腦上,在UNIX操作系統(tǒng)下發(fā)明并實(shí)現(xiàn)的。C語(yǔ)言是從一種古老的叫做BCPL的語(yǔ)言發(fā)展而來(lái)。BCPL 是由Martin Richards開發(fā)的。BCPL 語(yǔ)言對(duì)由 Ken Thompson 發(fā)明的B語(yǔ)言產(chǎn)生著深刻的影響,而B語(yǔ)言最終在20世紀(jì)70年代發(fā)展成C語(yǔ)言。
在C語(yǔ)言發(fā)明之前,計(jì)算機(jī)語(yǔ)言被設(shè)計(jì)出來(lái)或者是為了進(jìn)行學(xué)術(shù)計(jì)算,或者是為官方的委員們所使用。而C卻不同。它是一群真實(shí)的程序員設(shè)計(jì)、實(shí)現(xiàn)并開發(fā)出來(lái)的。它反映了這些人完成編程工作的方法。它的特性是這群實(shí)際使用這個(gè)語(yǔ)言的人們反復(fù)推敲,打磨,測(cè)試的結(jié)果。因此,C語(yǔ)言吸引了眾多的擁護(hù)者,并迅速成為全世界編程人員的選擇。 C語(yǔ)言的發(fā)展經(jīng)歷了20世紀(jì)60年代的結(jié)構(gòu)化編程的革命。在此之前,大型程序是難以書寫的,因?yàn)槌绦虻倪壿嬟呄蛴谕嘶?ldquo;意大利面條式的代碼”,充斥著難以理解的,混亂的轉(zhuǎn)跳,函數(shù)調(diào)用和返回。結(jié)構(gòu)化編程通過增加很好的控制語(yǔ)句,帶有局部變量的子程序段和其它的一些改進(jìn)解決了這個(gè)問題。結(jié)構(gòu)化編程使得編寫巨大的程序成為了可能。盡管還有別的結(jié)構(gòu)化的編程語(yǔ)言,例如Pascal,C卻是第一個(gè)功能強(qiáng)大,富于表達(dá),能書寫出優(yōu)美代碼的結(jié)構(gòu)化語(yǔ)言。它語(yǔ)法簡(jiǎn)單易用,并且它的設(shè)計(jì)思想是程序員掌控一切,而不是語(yǔ)言本身掌控一切,這就使得C語(yǔ)言很快擁有了眾多的擁護(hù)者。我們現(xiàn)在來(lái)看這點(diǎn)可能有點(diǎn)難以理解,但是C當(dāng)時(shí)確實(shí)為編程者帶來(lái)了他們渴望已久的新鮮空氣。因此,C語(yǔ)言很快就在20世紀(jì)80年代變成了使用最廣泛的結(jié)構(gòu)化編程語(yǔ)言。
學(xué)習(xí)c++需要的時(shí)間以及知識(shí)篇三
絕大多數(shù)人都把細(xì)節(jié)太多(或者用貶義詞來(lái)說(shuō)就是“陰暗角落太多”)歸結(jié)為C++的本質(zhì)問題,認(rèn)為一切邪惡由此而生。也正因此,大約9月份的時(shí)候,Linus在郵件列表上說(shuō)“C++是一門有思想包袱的語(yǔ)言;僅僅是為了讓程序員遠(yuǎn)離C++,我也要用C”。這句短短的話在國(guó)內(nèi)引起了很大的反應(yīng).
然而,這一通渾水?dāng)囘^之后,我相信引起的變化未必很大。大多數(shù)原先的反對(duì)者能從中找出反對(duì)的理由,于是更加反對(duì);大多數(shù)原先的贊同者也能從中找到贊同的理由,于是更加贊同;而剩下來(lái)的原先沒有明確意見的,看雙方各有各的道理,可能還是沒有頭緒。
擺脫自我服務(wù)偏見——理性思考的前提
《決策與判斷》上提到過一個(gè)有趣的真實(shí)故事:1980年的某一天,美國(guó)空戰(zhàn)司令部的計(jì)算機(jī)突然發(fā)出警報(bào)——蘇聯(lián)的一枚核彈正在向美國(guó)本土飛來(lái)。司令部立即調(diào)兵遣將,迅速為一場(chǎng)核戰(zhàn)做好了準(zhǔn)備,然而3分鐘之后,工程人員發(fā)現(xiàn)是計(jì)算機(jī)的一個(gè)小零部件故障造成的。然而,這場(chǎng)虛驚之后,大眾的反應(yīng)才是真正有意思的:原先支持核武裝的,認(rèn)為現(xiàn)在感覺更加安全了(因?yàn)?ldquo;事實(shí)證明這類的故障是完全可克服的”);而原先反對(duì)核武裝的則認(rèn)為更不安全了(因?yàn)?ldquo;這類錯(cuò)誤信號(hào)可能導(dǎo)致蘇聯(lián)過度反應(yīng),引發(fā)真正的核戰(zhàn)”)。類似的情況也發(fā)生在三里島核泄露事件之后,同樣的,反對(duì)者認(rèn)為(“這表明管理部門沒有辦法安全管理核能”),支持者認(rèn)為(“這正表明這樣的危險(xiǎn)沒有想像得那么嚴(yán)重,是可克服的”)。社會(huì)心理學(xué)把諸如此類的現(xiàn)象總結(jié)為“自我服務(wù)偏見”。不幸的是,“真理越辯越明”其實(shí)只適用于理性思考者。
為什么啰嗦這么一大通呢?就是因?yàn)?,一直以?lái)泛濫于程序員社群的“語(yǔ)言之爭(zhēng)”,背后真正的原因其實(shí)并不在于語(yǔ)言實(shí)質(zhì)上的優(yōu)劣,而在于觀察者的眼睛。在觀察者的眼睛里面,語(yǔ)言并非一門工具,而是自己花了N多時(shí)間(其中尤數(shù)C++為最)來(lái)“修煉”的技能,對(duì)于這樣的技能,被否定無(wú)疑等同于自己被否定。所以,從心理學(xué)上講,語(yǔ)言并不是工具(盡管一直有這么一種呼吁),而是信仰。這樣的信仰在越是花得時(shí)間久的語(yǔ)言上越是激烈。有趣的是,幾乎所有的“熱鬧”的社群都有這樣的現(xiàn)象;因?yàn)榫退阏Z(yǔ)言本身不復(fù)雜,程序員仍然還是要投入大量的精力去學(xué)習(xí)各種各樣的框架類庫(kù)(想想Java的那些框架?)。因此這些語(yǔ)言社區(qū)的信仰未必不比C++社群的強(qiáng)烈。 然而,一旦弄清我們?yōu)槭裁磿?huì)把語(yǔ)言當(dāng)成信仰,就非常有助于擺脫在看待語(yǔ)言時(shí)的“自我服務(wù)偏見”,從客觀的角度去看待問題。——“當(dāng)你看到的是支持某個(gè)意見的證據(jù)時(shí),試著去想一想有哪些證據(jù)是不支持它的”。
那么為什么要擺脫自我服務(wù)偏見?說(shuō)小了,是為了成為一個(gè)更優(yōu)秀的程序員(誰(shuí)也不希望因?yàn)槠姸ナ褂靡婚T低效的語(yǔ)言乃至不妥當(dāng)?shù)恼Z(yǔ)言)。說(shuō)大了是節(jié)省生命(因?yàn)槠娍赡軐?dǎo)致越陷越深,浪費(fèi)時(shí)間)。
所以,如果你能夠理性的思考我們將要討論的問題,避免自我服務(wù)偏見(就當(dāng)你從來(lái)沒有花時(shí)間在C++上一樣)。那么我們便可以開始討論真正的問題了。
現(xiàn)在,幾乎每個(gè)學(xué)習(xí)C++的都知道C++的核心問題是其復(fù)雜性;甚至本身不在C++社群的,也知道這是事實(shí)。群眾的眼睛是雪亮的,何況這還是個(gè)太顯而易見的事實(shí)。
但看了無(wú)數(shù)篇闡述C++復(fù)雜性的文章,和爭(zhēng)論C++復(fù)雜性的吐沫星子(包括我前段時(shí)間寫的兩篇關(guān)于C++的總結(jié))。我始終都有一個(gè)感覺——沒分析透,就跟盲人摸象一樣。正如“Why C++”的一位讀者批評(píng)的,我在文章里面沒有寫明到底哪些是C++的“非本質(zhì)復(fù)雜性”。當(dāng)然,我自己憑感覺就能知道,而接觸C++一段時(shí)間的人大致也能知道,但新手乃至非新手則對(duì)我所謂的“非本質(zhì)復(fù)雜性”根本沒有一個(gè)具體的認(rèn)識(shí),這就使得那篇“Why C++”脫離了原本的意圖——面向所有C++使用者和學(xué)習(xí)者。
同樣的原因,在寫了“你應(yīng)當(dāng)如何學(xué)習(xí)C++”一文之后,當(dāng)孟巖先生邀請(qǐng)我給《程序員》寫一個(gè)系列的文章,介紹一下我在接觸C++的過程中的態(tài)度和認(rèn)識(shí)轉(zhuǎn)變時(shí),我雖然非常高興的答應(yīng)了,但直到現(xiàn)在3個(gè)月過去了還是顆粒無(wú)收。為什么?因?yàn)槲矣X得真正本質(zhì)的問題沒有被清晰的觸摸到;所以直到現(xiàn)在我都沒有動(dòng)筆,免得廢話說(shuō)了一大堆,除了能被當(dāng)成小說(shuō)讀讀之外,對(duì)真正考慮是否要學(xué)習(xí)乃至使用C++的人未必有什么實(shí)際用處。
然而,這么個(gè)念頭一直都放在潛意識(shí)里面。前一陣子和xx通信,談到了關(guān)于C++復(fù)雜性的一些想法,在郵件里面總結(jié)了一下C++的復(fù)雜性來(lái)源,感覺思路清晰了許多。而這篇文章要達(dá)到的目的,正是傳達(dá)對(duì)C++的復(fù)雜性的一個(gè)具體而明確的認(rèn)識(shí),有了這個(gè)認(rèn)識(shí)作為支持,我們便可以推導(dǎo)出學(xué)習(xí)C++的最佳(實(shí)踐者)的方法。