感謝編程之北的文章計算機程序設(shè)計是什么,在閱讀了他寫的好多內(nèi)容后,我深受啟發(fā)。
為什么寫這篇文章?
我的本科是數(shù)學(xué)系,接觸過C/C++,又在大三接觸過,還自學(xué)過Java,總的感覺是什么都會一點,但是什么都不精,或者說能感覺到語言和語言之間的相似性,但還遠沒有達到觸類旁通的地步。
上了計算機的研究生后,不同的課要求使用不同的語言去做一些作業(yè),其中屬于上手最快的,很多東西都可以調(diào)包,可以非常容易的實現(xiàn)一些算法,但是一涉及到C/C++我又感覺啥也不會了。結(jié)合我自己規(guī)劃在研究生畢業(yè)后去字節(jié)跳動/騰訊從事后端開發(fā),即成為一名合格的軟件工程師(至于原因見另一篇文章),我決心學(xué)好一門程序語言,在研二前達到通過字節(jié)后端訓(xùn)練營的標(biāo)準(zhǔn)。(今天被虐慘了)
學(xué)什么語言?
C/C++
首先,參考北哥 @編程指北 的意見,深入學(xué)習(xí)1~2門語言,其他語言等用到的時候再學(xué)。因為我課業(yè)繁重,沒有很多精力全面鋪開去搞,而且結(jié)合之前的經(jīng)驗,淺嘗輒止無法領(lǐng)略語言的精髓(語言特性),這樣再學(xué)習(xí)其他語言,或者自己在開發(fā)和做題時沒法觸類旁通。
其次,C/C++主要是和計算機這學(xué)期的程序設(shè)計和算法主要是用C/C++去學(xué),所以學(xué)好這個語言對考試有幫助。C語言也可輔助學(xué)習(xí)計算機系統(tǒng)知識。
最后,數(shù)學(xué)和C類似,數(shù)學(xué)是很多學(xué)科的基礎(chǔ),可以從原理上剖析很多學(xué)科的底層邏輯,C也如此,開發(fā)中的很多工具是C所編寫的,如果想深入研究這些工具的原理,C也值得一學(xué)。
怎么學(xué)?
原則1:重視語言特性
舉例:電腦分為很多種,但我們不能片面說IBM的比HP的好,我們需要了解電腦的各類參數(shù)(處理器、內(nèi)存、硬盤、顯示器、顯卡....),組件與組件之間的兼容性,才能有全面客觀的比較。
語言也是如此,也有自己的配置,特性一般有:
此乃不變性。掌握了不變的法則,應(yīng)用在變化的語言學(xué)習(xí)上,必能事半功倍。
如果熟悉語言特性,那么自己所需要的特性,在任何一種語言里必然有對應(yīng)的表達方式,如果沒有,也一定會有繞過的辦法。此時,帶著問題在大部頭里去找相應(yīng)的特性,就能更有針對性。
原則2:合適的入門語言
選擇沒有明顯問題的語言,掌握最關(guān)鍵的語言特性,而非一些主次部分全都學(xué)個遍。感覺是帕累托法則的反復(fù)使用。為了成為合格的軟件工程師,我需要學(xué)習(xí)重要的語言,為了掌握這門語言計算機程序設(shè)計是什么,我需要學(xué)習(xí)其中最核心的特性。
原則3:在學(xué)會了語言特性的前提下,實現(xiàn)它
就像利用數(shù)學(xué)知識出題,證明你真的懂了,在學(xué)習(xí)的領(lǐng)域,能“創(chuàng)造”意味著真正懂了。
(具體怎么做后續(xù)再看看)