當前位置:首頁 > 公眾號精選 > C語言與CPP編程
[導讀]大家好,我是唐唐!昨天水知乎回答的時候,看到了這個問題:這個問題很多讀者也問過我,“invalids”回答的這個問題,看完后很認同。分享給大家。簡單說,如果僅僅學C/C本身的話,學到什么程度你都找不到工作。學習掌握某種編程語言的語法只是一個基礎,一個起點。因為語言只是一種工具,學...

大家好,我是唐唐!

昨天水知乎回答的時候,看到了這個問題:

這個問題很多讀者也問過我,“invalid s”回答的這個問題,看完后很認同。分享給大家。

簡單說,如果僅僅學 C/C 本身的話,學到什么程度你都找不到工作。

學習掌握某種編程語言的語法只是一個基礎,一個起點。因為語言只是一種工具,學會語法特性僅僅是知道這種工具長什么樣子、能擰能鉆能銑能刨,如此而已。

想要找到工作,你需要能夠使用這件工具創(chuàng)造價值——你不能僅僅知道鋼銼能挫鐵,還要學會看圖紙、會在給你的料子上合理規(guī)劃、挫出符合圖紙要求的合格元件來。

鏈接:https://www.zhihu.com/question/400543720/answer/1275849097

簡單說,如果分若干級別的話,可能如下:

1、了解 C 的常規(guī)語法,知道函數(shù)調用、類、虛函數(shù)、多態(tài)等的功能/原理;可以獨立完成課后習題。

達到這個水平已經可以勝任很多職位了;但需要在工作中繼續(xù)成長。幸好愿意招應屆生的公司對新人的要求都不高,你有時間慢慢成長。

但要注意,這里的要求是“獨立完成課后習題”,靠老師教、抄別人答案是不管用的。甚至抄完了死記硬背下來也是白搭。必須自己通過獨立思考解決問題。面試者有的是辦法試探出你有沒有自己解決問題的能力。

如果課后題被“劇透”的太厲害的話,網上刷題也是條路子。還是那句話,別一味抄別人的代碼,你起碼要能獨立解決其中一小半的問題,這才能證明你的確知道這件工具的用法。

2、能夠活用自己掌握的 C 知識,獨立實現(xiàn)一些小型項目

比如,寫個沙雕小游戲逗女朋友開心,寫個排課程序幫老師解憂,甚至寫個簡單的課程提醒程序提示你每天帶哪些書,等等。真正把“實踐任務”和“C 編程連起來”——現(xiàn)在很多公司其實干的就這活,沒什么技術含量。

3、借助別人封裝好的 API/庫,實現(xiàn)看起來更強更厲害的功能

比如,借助算法庫里的 MD5 算法和 OS 提供的目錄遍歷API,把系統(tǒng)所有要害文件(應用程序、DLL、注冊表等)的大小、修改時間、數(shù)字摘要都算出來、儲存到一個文件里。以后每隔幾天遍歷一次,檢查它們的大小、修改時間,如果有變化就計算數(shù)字摘要——也可以強制計算所有的數(shù)字摘要——從而找出哪些要害文件被修改了、這些修改是系統(tǒng)自己打的補丁呢,還是不法程序(病毒木馬流氓軟件等)的非法修改。

這就是一個極為簡陋、但效果還行的反病毒工具。它的缺點是,這是個白名單工具,只能檢查到通過修改要害文件獲得執(zhí)行權的病毒/木馬,同時會對系統(tǒng)更新產生誤報。但仍然不失為一個效果不錯的系統(tǒng)問題排查工具——因為 OS 要害文件經常是好些年不變的(現(xiàn)在你知道為何有時候有的殺毒軟件會殺系統(tǒng)文件甚至殺自己了吧?)。

再比如,利用現(xiàn)成的深度學習庫/語音識別庫搞一些貌似高大上實則沒什么技術含量的人臉識別/語音識別/聲線識別程序——別緊張,你能行。

能折騰這些,你到公司基本上就可以算是個“能人”,可以跟風做一些聽起來很帥但其實仍然沒什么技術含量的工作了。

4、真正理解算法與數(shù)據(jù)結構,理解操作系統(tǒng)原理、計算機原理、數(shù)字電路原理以及編譯原理、數(shù)據(jù)庫原理、網絡原理等等基礎原理。

到了這個程度,你才算沒辜負“科班出身”這個頭銜,脫離了“碼農”“調庫專家”“新技術層出不窮怎么都跟不上學不完”的半外行狀態(tài),可以從事一些較為硬核的、探索性的工作,幫公司開拓新應用領域了。

5、你仍然可以繼續(xù)深入。

比如圖形圖像壓縮,比如加解密算法,比如網絡協(xié)議棧等,每一個子領域都夠很多專家投入一輩子的。不過這些領域經常返璞歸真,C 反倒會成為更常用的語言;而且往往需要高等數(shù)學作為發(fā)動機。

比如著名的卡馬克牛頓迭代法求平方根的倒數(shù)算法,其中用的魔幻數(shù)字就引出了好幾篇論文。專家們用卷積找出了一個魔幻數(shù)字,但是效果不如卡馬克數(shù)字。再后來有人暴力窮舉,這才找出一個優(yōu)于卡馬克魔幻數(shù)的新數(shù)字來。

再比如,現(xiàn)在的 CNN 神經網絡,有次我提到要理解它你得懂卷積;于是跳出來幾個自以為很懂的出來杠我“我敢打賭,你是聽到這個東西的名字里有個卷積于是胡亂腦補。其實這東西和卷積沒半毛錢關系”……

他們不知道,CNN 里面的確沒有卷積符號、也沒有使用卷積計算公式;但它的實現(xiàn)思路就是卷積運算。只不過它的設計者把卷積算法化用進簡單的連續(xù)矩陣計算中,在深度神經網絡中實現(xiàn)了“特征抽象和特征空間變換”——這是矩陣和卷積全都學到出神入化、用出來讓普通人看不懂、但內行一看就知道還是新瓶裝舊酒的結果。

其實前面提到的數(shù)據(jù)結構與算法等基礎知識,會玩的同樣能玩到返璞歸真。比如有人隨隨便便三兩行代碼就把一個數(shù)組變成了環(huán)形緩沖區(qū),或者簡簡單單兩行聲明就搞定了一個遞歸算法。如果你積累不夠深厚、頭腦不夠靈活,這個東西就很難看懂。

總之,這個領域是屬于創(chuàng)造者的。能踏入這個領域,那就不是你找工作,而是工作找你了。

綜上,如果僅僅是學 C 這門語言的話,學到什么程度你都不好找工作。

你需要學的,是用 C 這門語言去解決問題。能解決課后練習題是一個水平,能刷網上的算法題又是一個水平;能自己搞定簡單的實用項目是一個水平,能充分利用操作系統(tǒng)以及第三方軟件/庫給你提供的抽象(意味著你能理解他們的設計思路)實現(xiàn)幾乎所有東西又是一個水平;理解各種東西背后的原理是一個水平,把這些原理玩的出神入化又是一個水平;學會用數(shù)字認識這個世界是一個水平,能夠化用高深的數(shù)學知識、信手解決沒人說得清的難題又是一個水平……

一般來說,只要你能達到“用 C 解決簡單問題”的水平,找工作就不成問題了;只是受限較多,只能從事一些較為初級的工作,極易陷入沒日沒夜機械的寫代碼的窘境,然后看著層出不窮的新技術欲哭無淚。

你往前趕的越多,你代碼里的智慧和靈氣就越多;此時你才可以嘗試那些必須用巧力的工作,或者用巧力把繁重的工作變得簡單、甚至促進你所在公司乃至全人類的開發(fā)效率。玩到這個程度,你才算真正踏入程序員的行列。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
關閉
關閉