比如圖形圖像壓縮,比如加解密算法,比如網(wǎng)絡(luò)協(xié)議棧等,每一個子領(lǐng)域都夠很多專家投入一輩子的。不過這些領(lǐng)域經(jīng)常返璞歸真,C 反倒會成為更常用的語言;而且往往需要高等數(shù)學(xué)作為發(fā)動機(jī)。比如著名的卡馬克牛頓迭代法求平方根的倒數(shù)算法,其中用的魔幻數(shù)字就引出了好幾篇論文。專家們用卷積找出了一個魔幻數(shù)字,但是效果不如卡馬克數(shù)字。再后來有人暴力窮舉,這才找出一個優(yōu)于卡馬克魔幻數(shù)的新數(shù)字來。再比如,現(xiàn)在的 CNN 神經(jīng)網(wǎng)絡(luò),有次我提到要理解它你得懂卷積;于是跳出來幾個自以為很懂的出來杠我“我敢打賭,你是聽到這個東西的名字里有個卷積于是胡亂腦補(bǔ)。其實(shí)這東西和卷積沒半毛錢關(guān)系”……他們不知道,CNN 里面的確沒有卷積符號、也沒有使用卷積計算公式;但它的實(shí)現(xiàn)思路就是卷積運(yùn)算。只不過它的設(shè)計者把卷積算法化用進(jìn)簡單的連續(xù)矩陣計算中,在深度神經(jīng)網(wǎng)絡(luò)中實(shí)現(xiàn)了“特征抽象和特征空間變換”——這是矩陣和卷積全都學(xué)到出神入化、用出來讓普通人看不懂、但內(nèi)行一看就知道還是新瓶裝舊酒的結(jié)果。其實(shí)前面提到的數(shù)據(jù)結(jié)構(gòu)與算法等基礎(chǔ)知識,會玩的同樣能玩到返璞歸真。比如有人隨隨便便三兩行代碼就把一個數(shù)組變成了環(huán)形緩沖區(qū),或者簡簡單單兩行聲明就搞定了一個遞歸算法。如果你積累不夠深厚、頭腦不夠靈活,這個東西就很難看懂。總之,這個領(lǐng)域是屬于創(chuàng)造者的。能踏入這個領(lǐng)域,那就不是你找工作,而是工作找你了。綜上,如果僅僅是學(xué) C 這門語言的話,學(xué)到什么程度你都不好找工作。你需要學(xué)的,是用 C 這門語言去解決問題。能解決課后練習(xí)題是一個水平,能刷網(wǎng)上的算法題又是一個水平;能自己搞定簡單的實(shí)用項(xiàng)目是一個水平,能充分利用操作系統(tǒng)以及第三方軟件/庫給你提供的抽象(意味著你能理解他們的設(shè)計思路)實(shí)現(xiàn)幾乎所有東西又是一個水平;理解各種東西背后的原理是一個水平,把這些原理玩的出神入化又是一個水平;學(xué)會用數(shù)字認(rèn)識這個世界是一個水平,能夠化用高深的數(shù)學(xué)知識、信手解決沒人說得清的難題又是一個水平……一般來說,只要你能達(dá)到“用 C 解決簡單問題”的水平,找工作就不成問題了;只是受限較多,只能從事一些較為初級的工作,極易陷入沒日沒夜機(jī)械的寫代碼的窘境,然后看著層出不窮的新技術(shù)欲哭無淚。你往前趕的越多,你代碼里的智慧和靈氣就越多;此時你才可以嘗試那些必須用巧力的工作,或者用巧力把繁重的工作變得簡單、甚至促進(jìn)你所在公司乃至全人類的開發(fā)效率。玩到這個程度,你才算真正踏入程序員的行列。