首頁>Club>
人人都說,C++是所有計算機程式語言中難度最高的,那麼,它究竟難在哪裡呢?是不是高不可攀呢?C++的大牛們,是如何學習的呢?如何制定學習計劃呢?(自學)掌握了以後,就業前景和發展又如何?
121
回覆列表
  • 1 # Crazy林16

    粗略瞭解下。C是一種計算機程式設計類語言。而C++則是一種比C更加深入更加高階的一種。具體難在哪裡,我並沒有辦法解答。但我想,之所以認為難,大多和基礎、基本知識不夠根深蒂固有關,同時和自身興趣有關。當然,這也和理解能力,自身靈活性相關,同時對於這些比較有難度的知識,還需要更多的恆心,雖然在學習的過程中有時會受到一些打擊或者困難,但只要用心,能遇到的都不是真正的困難,只是時間問題。

    我的答案也許沒能幫得上什麼忙,但是我想至少可以作為一種鼓勵,我也有很多很多的東西是在工作中學習到的。無論哪個行業,領域,如果你想要去學習和駕馭它,首先必須先去“愛”它。所謂幹一行愛一行,我想可以這麼理解的。

  • 2 # SOWORD科技言

    C++是在C語言基礎上發展而來的,學過C語言的程式設計師再來學習C++會更會入手,當然C語言也不是很好學,更何況C++要比C語言難一點。

    第一從語法來說,C++程式語言還是比較簡單,只要掌握C++程式設計方式與常見的java,PHP都很相識。

    第二是拋異常,C++不像其他程式語言簡單的列印就可以看出錯誤地方,C++需要編譯出來在執行,但是編譯過程很難發現有錯誤資訊。

    第三C++沒有標準類庫,不像python到處都是免費的類庫可以直接使用。

    第四語言設計上的複製性,主要體現在繼承、封裝、多型等等。

    雖然C++是比計較難學的一種程式語言,但是它的市場很大,大型遊戲開發,科技演算法,網路軟體開發,作業系統等領域。

  • 3 # 悲了傷的碼丁

    個人感覺國內多數人混淆了兩個概念:程式語言的語法知識和程式設計能力。多數人剛學習時,重心花在龐大、全面的語法細節中,結果如在大海中劃個小船一樣,最終迷失了方向而放棄。但在實際程式設計過程中,多數時間使用到的語法很少。

    因此,真正想進入程式設計行業,培養程式設計能力更重要。只要程式設計能力上來了,再掌握程式設計語法要容易得多。

    程式設計能力體現在C語言上,就是解決問題的流程細節中,簡單說就是會畫解決問題的流程圖。而對於C++語言,主要是系統構架上,體現在掌握類之間的關係、物件之間的關係。

    教人會點語法容易,因此高校與培訓機構多偏於這方面。但培養人的思維與觀念,太難了,誰會去做啊!

  • 4 # 犍為真人

    剛好最近在學習C++,以前又有其它語言的程式設計經驗,所以對此剛好有一定發言權。

    C++是所有主流程式語言中最難掌握的語言!這一點基本上得到了公認。“主流”一詞不能少,大致可以認為是各類計算機語言排行榜中前50名了那些。有些搞怪的,用來“玩”的語言可能比C++還難,但是它們不主流,也幾乎沒有誰真正用在生產環境,所以沒有必要討論。還有少數人認為最難的主流程式語言是彙編或LISP。這也是有道理的。不過不管怎麼說,說C++的難度處於主流語言中前三位,就更加無懈可擊,誰也否定不了。

    我們這裡討論難度,主要都是以純語言和核心標準庫函式來說的,沒有包含衍生的整個生態系統。比方說說JavaScript的難度那就是純JavaScript,而沒有包含jquery、vue、node.js等。再比如討論JAVA難度,同樣不包含安卓開發、spring甚至hadoop。再比如Python就不包含numpy、django甚至人工智慧。

    就我接觸過的一些程式語言,JAVA、C#、Python、PHP、JavaScript、Go、C、R、scala、F#,它們在純語法上,和C++的難度完全不在一個重量級!一種小巫見大巫的感覺。我剛加入一個C++團隊,凡是接觸過其他語言的,都說C++太難了。而有部分成員說C++簡單的,一看都是剛畢業沒有幾年,只玩過C++而不知道其他語言的(一種初生牛犢的感覺吧)。

    第一、C++直接編譯成原生代碼

    原生代碼,就是直接可以在作業系統上執行的,不需要藉助其他程序去引導它。C#、JAVA是運行於虛擬機器的,Python、JavaScript是需要直譯器的。也就是這些語言離開了虛擬機器或直譯器就執行不起來。但也正因為如此,它們才變得相對簡單。因為虛擬機器和直譯器遮蔽了底層的很多細節。比方說你用JAVA寫一段程式碼,你甚至都不需要知道到底作業系統是Windows還是Linux,你眼中的記憶體也僅僅是虛擬機器上(簡化的)記憶體。而C++不得不考慮底層的很多細節,導致很難。同樣需要考慮底層的還有C、Go、rust等。單從這個角度看,這類程式語言是同一難度級別的。

    第二、C++沒有完善的自動垃圾回收機制

    當我們一提到C/C++,大概首先想到的就是它們的指標。指標是C/C++的精髓,同樣也是難度的根源之一。JAVA、Python等很多程式語言都是沒有指標的。因為它們的虛擬機器或直譯器自帶自動垃圾回收。指標實際上就是記憶體地址。當我們新建一個物件時,必須向作業系統分配記憶體(記憶體地址、指標),而物件使用完畢後,又應當回收。最常見的問題就是忘了回收或者其他變數正在引用就提前回收了。比如一個函式申請了記憶體,到底是該函式負責回收還是呼叫方負責回收?而帶垃圾回收的語言,程式設計者完全不用操心這些事,完全不需要知道記憶體是如何分配的,該誰來回收以及如何回收。自動垃圾回收有利有弊,利是對開發者簡單,弊是執行效率相對低下。C/C++是注重執行效率而犧牲了簡單性。

    第三、C++使用大量的預編譯

    在沒有預編譯的語言中,採用if else以及函式來完成類似的功能。比如if 32位作業系統該怎麼做else怎麼做。但是這樣的程式碼最後是會執行的。而預編譯時,假如不是32位作業系統(編譯階段就已經知道),相應的程式碼不會編譯,這樣就降低程式碼大小,且少了一個if else判斷,效率更高。而預編譯中的宏則是直接替代,防止了函式呼叫。函式呼叫也是需要損失效能的。正是這種過分強調效能,導致預編譯被大量使用,給程式碼閱讀和除錯帶來極大的不方便。

    第四、C++歷史包袱太多

    C++是上世紀80年代的發明,還是比較古老了。在長期的發展中,存在大量的歷史問題。比方說,一個字串處理,就千奇八怪,它甚至都沒有字串型別這一說法。STL裡有std:string,但也不是唯一的或做多的選擇。相反,在其他所有現代語言中,字串如何處理,都有幾乎唯一的選擇。C++選擇太多,一方面你必須面臨如何選擇的問題,另一方面為了看懂別人的程式碼,你還不得不學習其他的選擇是如何做的。歷史包袱,就是說為了相容以前的程式碼和以前的規範,不得不使整個系統非常複雜龐大。我們就說說Python吧,大家都知道目前有一個問題就是Python2.x和3.x的問題。你看,Python就果斷地拋棄了2.x這個包袱(新版不再完全相容老版),否則也會越來越複雜。C++沒有這麼做,因為老系統太多了,而且用的人多,根深蒂固,基本不可能推翻重來。像Go、D、rust這些新興語言想取代年老的C++,都一直沒有成功。如果C++想甩掉歷史包袱(變成一門新的語言),那和rust、Go等又有什麼區別?

    第五、C++沒有一個唯一的大東家

    我們知道很多語言背後都有一個團隊在運營,它們有絕對的權力或者說叫話語權,比如微軟的C#、甲骨文的JAVA、谷歌的Go。Python(準確地說是cPython),也有唯一的開源專案,統一行動。再看C++,它不隸屬於任何一個團隊,它沒有唯一的編譯器開發商。微軟的msvc,Linux的g++,還有clang等等。這麼多廠商,誰也不佔主導地位,誰也不聽誰的。最後只能成立一個C++標準協會,大家協商著來,相互妥協。這種相互妥協,導致C++變得異常複雜,既相容這個又相容那個,甚至可以說是個“怪胎”。

    第六、C++編譯器太多,風格不一致

    這個其實是上一條的延續(篇幅太長)。剛說了C++沒有哪個廠家一家獨大,靠標準協會協調。C++標準異常複雜。甚至有個詞語叫做“未定義行為”。同樣的程式碼,在這個編譯器可以執行,在另一個編譯器不行或者結果不一樣,這種情況太多了。迄今為止沒有一個公認的嚴格的C++規範,C++是非常自由的。自由就意味著難度大。Python為什麼簡單,就是因為它不自由,連變數名如何寫,程式碼縮排都中規中矩。風格一致。不過也有其他語言和C++相似,比如JavaScript,它也是多廠家,標準不統一,風格不一致。

    第七、C++語法博大精深

    上面說了那麼多,強調的都是背後的原因,那具體說來,到底C++難在哪裡呢?這個不好說,下邊只是我的理解,簡單羅列出來。複雜的const和static語義。指標運算,取地址運算,引用,比如*、&、&&。模板與泛型。函數語言程式設計。建構函式、複製建構函式、賦值建構函式、移動建構函式、解構函式。多重繼承。

    第八、第三方庫不多

    相對說來,C++主張從輪子造起,第三方庫不是太多。很多看似簡單的功能都得自己實現或者拼命地找庫。一般說來,C++使用時間長了,就掌握得更好,所謂越老越吃香。因為可以不斷積累庫函式。而類似JAVA、Python這種,一方面標準庫就自帶,另一方面,遇到問題,網上一搜索,拿來就用。像執行緒、XML、json、sqlite3、TCP、http訪問、crc32/md5,像這些如此基礎的功能都沒有提供自帶標準函式。

  • 5 # 陪我闖蕩

    哪種語言都不能,只要你願意下功夫,有耐心,堅持住。那麼要怎樣才能入門快呢?那就是必須要有興趣,你對語言程式設計這方面沒有興趣,只是為了好找工作而學習的話,建議你還是不要學,不感興趣學習起來很難很難。。。

    話說哪種語言比較容易呢?哪種語言比較難呢?其實都不容易也不難,能不能成為大神,其實並不是靠程式設計能力來實現的,而是靠你的思維來決定的,所以思維最重要,思維最重要,那麼如何鍛鍊思維呢?其實好多人程式設計的時候只會想到別人建好的庫,去網上找人家的庫,呼叫人家的庫來使用,問題是他根本不知道這個庫是如何實現的,這類人可以說是碼農,搬運工,這種行為是在束縛著思維。

    那麼哪種語言入門比較好呢?其實是學習最新的語言是比較好入門的,因為最新的語言一般的經過開發包裝出來比較大眾化的語言,也是人人都可以學習的,最新的語言一般是根據時代來開發的,可以瞭解一下語言發展的歷史 機器碼-彙編-c-c++-c#-java-python,看看這些是不是最新的會比較容易入門

  • 6 # 使用者3419679655392

    一個程式語言倒不是很難,個人認為難點如下:

    1. 碎片化嚴重c++11 boost 等各種standard都要過一遍。

    2. c++想用最小的開銷來完成抽象,例如編譯時的泛型實現,動態派發,typeid, 左值右值,內聯,多重繼承等等。

    3. c++編譯器上面可以做很多文章,例如分支預測,記憶體對齊,尾遞迴等等。

    4. 相容c導致的一些歷史遺留問題, 例如記憶體安全,執行緒安全,宏的一些黑科技。

    5. 要寫makefile, 一個專案的makefile就要寫兩天。

    6. 不同人寫c++的風格不一樣,例如有人喜歡用lambda, 有人喜歡用函式指標。

  • 7 # 25765537

    你學了幾個月,能問這個問題,說明有兩種可能:1、你其實沒學進門;2、你真的沒感到難度。

    如果是第一種情況,那麼你應該考慮暫時停下來,等真覺得需要時再回來學;如果是第二種情況,那麼恭喜你,這個世界至少百分之九十的程式語言對你不再存在障礙了!

    不過實話說,我沒感覺C++難在哪裡,如果說是改別人的程式碼,如果這個程式碼寫得乾淨利落風格好,那麼不管什麼語言都很好懂,但如果反過來,那麼不管用什麼語言寫的,看起來都是一砣屎!

  • 8 # 動漫集結優號

    難不難學了才知道

    1.一般要先用1個月左右(有的人悟性高2周左右)打c基礎,看看譚的書,把習題獨立完成。

    再用半個月左右搞下指標,陣列,連結串列,結構,主要是指標。

    多動手多練,這些都熟了後,考試是沒問題。

    2.但要用在工作上還遠不夠,要搞清楚你的方向是在win 還是linux下,要系統學習下

    內容:

    c的發展 ;

    系統記憶體工作原理,c的記憶體分配;

    學習堆、棧、程序、執行緒、訊息、佇列、同步、非同步、socket、等

    學習下程式設計思想;

    資料結構;

    再吃下幾本好書,

    c指標陷阱

    apue c (如果在linux下)

    高效c 程式設計

    主要要勤動手,動腦,要多學習高手的寫法,理解學習中的理論。c是博大精深,易學難精,主要還是方向的選擇,這是我的一點建議。

    這樣你的水平也應該不會差到哪去。

  • 9 # 福靈健康

    一句話:學精通了C++,再學其它任何一門語言就可以拿著手冊開寫,而且能寫出高質量的程式碼,對於一個普通的程式設計師來講就可以完全透過語言關了(彙編,HDL類的除外)

  • 10 # joy0123

    有程式設計基礎學c++就不會那麼難,不要被指標、記憶體洩露啥的給嚇住。而且現在qt的出現,也讓學習c++變得容易很多,如果想學c++的話,可以從學習qt開始,qt要比c++學起來容易些,而且開發介面,就像用c#一樣,拖拽就可以了。上手非常快,qt官網還有教程,如果沒聽過qt的話,可以百度搜下,詳細瞭解下。qt讓c++的開發容易了很多。

  • 中秋節和大豐收的關聯?
  • 劃撥土地和國有土地性質區別?