初学者是学习 C 语言还是 C++ 好?各有何利弊?
?
非計算機專業(yè)學(xué)生或者沒有以編程為職業(yè)打算的人,不需要學(xué)習(xí)編程語言,非要學(xué)習(xí)可以試試Python,面向應(yīng)用的高級庫多,學(xué)了對大部分人都有點用;語法簡潔,容易上手。
C++則應(yīng)當(dāng)成為計算機相關(guān)專業(yè)初學(xué)者的第一門編程語言、至少也應(yīng)該是其中之一,C排在C++之后,理由:
1:C++的內(nèi)存管理相對于C,對于初學(xué)者來說有非常重要的改進(jìn)。C++相對于現(xiàn)代不少有所謂垃圾回收特性的語言,的確比較簡陋,但是其自帶的類的構(gòu)造和析構(gòu)只需要學(xué)一點點就可以給初學(xué)者級別的程序提供足夠的內(nèi)存管理支持。
2:編程泛型多,學(xué)一C++個就相當(dāng)于獲得了:C風(fēng)格的命令過程語言 + 基于類的面向?qū)ο笳Z言 + C++11標(biāo)準(zhǔn)后的簡陋的函數(shù)式語言,一舉三得。值得一提的是,每一個新風(fēng)格的疊加都是在現(xiàn)有系統(tǒng)的基礎(chǔ)上實現(xiàn)(比如設(shè)計C的時候根本不會想到還會擴(kuò)展為C++,而C++必須高度兼容C),這是一個非常有挑戰(zhàn)的工作,C++之父Bjarne Stroustrup的《The Design and Evolution of C++》就描述了部分C++語言設(shè)計的過程,非常有價值。
3:基礎(chǔ)庫屏蔽了大量初學(xué)者容易出錯的細(xì)節(jié),以STL的string為例,這個庫雖然簡單,但是居然在C之上搭建的C++中實現(xiàn)了和許多現(xiàn)代的很高級的語言使用字符串一樣的體驗。換做是C,很多初學(xué)者就不太容易搞明白strcat, strcmp, strcpy等等那套幾乎針對內(nèi)存操作的字符串處理機制是怎么回事,再結(jié)合例如緩沖區(qū)溢出預(yù)防,正確分配和釋放內(nèi)存等等問題,學(xué)習(xí)曲線會很陡。
4:編程語言特性多不代表你必須學(xué)完全部特性才能開始應(yīng)用。C++那么多特性怕是不少C++的實現(xiàn)者都不能說自己完全“精通”,對于初學(xué)者來說,學(xué)會對初學(xué)者最友善的,最簡單的那部分(STL,基本的類)已經(jīng)能幫助解決很多問題甚至開始寫一些小型軟件了。
5:不過分脫離底層,計算機專業(yè)得用更加接近所謂“底層”的語言,“底層”值的是了解我們這個世界最流行的機器架構(gòu)中,數(shù)據(jù)是怎么在內(nèi)存中流動的,高級語言寫出的一些語句實際在機器中執(zhí)行大概要經(jīng)歷什么過程,以維基百科里快速排序詞條里的某所謂高級語言寫出的快速排序為例:
sort [] = []sort (pivot:rest) = sort [y | y <- rest, y < pivot]++ [pivot] ++ sort [y | y <- rest, y >=pivot]如果大家對C/C++感興趣的話,可以加一下我們的學(xué)習(xí)交流Q群:637 ?935 ?295,免費領(lǐng)取一套學(xué)習(xí)資料和視頻課程喲~
從代碼字面看來,算法的思想的確描述得很簡單,但是如果直接給初學(xué)者看這段代碼,初學(xué)者如何想象它為什么叫“快速排序”?這一條實際上跟第三條略微有點矛盾,不過參考第四條,初學(xué)者可以在學(xué)習(xí)的不同階段自由選擇已經(jīng)掌握的特性。
綜上所述,C++是計算機專業(yè)初學(xué)者的第一門編程語言的最佳選擇。
總結(jié)
以上是生活随笔為你收集整理的初学者是学习 C 语言还是 C++ 好?各有何利弊?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 之路,200行Python
- 下一篇: 台湾大学林轩田机器学习技法课程学习笔记5