逛了兩天知乎發現給我推送的都是些什么東西,我就想看看關于計算機相關的問題和回答,給我推薦的都是"我和女兒哪個身材好?","能看看你手機里封神的照片嗎?","植發大概需要多少錢?","30 歲還沒對象丟人嗎?"這還是我保守的選了幾個。
還是這個問題和回答稍微靠譜點,"計算機本科階段應該學哪些東西?"
我打算寫一個稍微普世一點/適合大多數畢業生的回答,精英同學可以把這篇文章關了。
我最近接觸到一些高校教師和同學,也跟他們聊過本科所學的東西,然后結合我自己的親身經歷,聊聊我的看法:
大多數高校所教的東西其實都跑偏了,所教授的內容并不適合社會所需,但是學生卻為了所謂的成績和績點在不需要的學科上投入了大量的時間,嚴重的甚至影響畢業。有些科班上所學的幾大基礎課,側重點不是講如何實現之類的工程論概念,而是劃重點 --- 什么 tcp 報文頭有哪些,Java 11 有哪些新特性,C++ 17 引入了什么東西,這種只要動動手指上網就能查到的東西,而且檢索出來結果的準確性比你記這些東西要高多了。
但是怎么說呢,國內高校就喜歡考這些固定死的程序式的可量化的東西,因為好判卷子,這樣教授們就可以花時間歇著或者搞錢,甚至判卷子都不用自己親自判,直接找兩個學生說給你們安排點事,學生絕對屁顛屁顛過去幫忙,因為這是跟教授混臉熟的機會。
而且大學里面教的一些內容稂莠不齊,很多教授其實都是上班拿錢混日子,他們的主要目的并不是為了教書育人。我最近還了解到有個學校導員教了十幾年 Java 之后,學生問他一個 Java 中 transient 關鍵字的用法她都不知道。如果碰到這類的老師,我想說同學們,還是靠自己吧。
所以最近互聯網上一直充斥著一道辯論:大學到底應不應該擴招。
很多人說大學階段應該掌握一些抽象的、概念化的、核心的東西,比如操作系統原理,Linux 內核的調度策略等,我并不否認這些東西很重要,對培養一個程序員的底層功力大有裨益,但是對于普通大學生來說,學這些東西對你現階段的幫助太小了。而且如果你不是計算機專業科班專業的同學,在課余時間要修煉這些"內功",難度很大,因為這些是需要投入大量時間靜下心來學好的東西。
一個可以預料到的事實是,你花了大量的時間在操作系統、計算機網絡、算法上面,同時你的同寢室友花了大量時間在研究 Java、多線程、SpringBoot、Cloud 之類的框架上,那么他會比你成長更快,更容易產生對編程的興趣,更容易進入編程行業,因為這些框架能夠更容易讓你做出來實質性的東西,獲得正向反饋,而且你的室友還有時間參加各種競賽、獲得名次,結交各路朋友,結識各類資源,等秋招的時候他的簡歷會比你豐富很多很多,找工作會有更多機會,甚至沒準人家已經直接保研了。
千萬不要覺得學計算機基礎這些知識會讓你有優越感,讓你覺得能夠更接近世界的本源,讓你能夠像計算機一樣思考問題,讓你像一片硅片一樣參與計算工作,這是一種錯誤的觀念。大多數開發的日常工作都是流水線式的 CRUD,不排除大多數互聯網大廠也是這樣。所以能干活是一件至關重要的事情,企業把你招進來,只是想給你最低的薪資并榨取你的剩余價值,殘酷但很真實。
再退一步來講,如果你沒接觸過數據庫,你要怎么理解數據庫事務機制呢?如果你沒寫過 Java 和 C ,你要怎么理解面向對象和面向過程呢?說到底,還是你要學了個大概才能漸漸明白這些東西。互聯網上那些關于核心、本質概念的一類思想,無非是你的前輩們花了很長時間、寫了很多代碼之后悟出來的,總結出來的經驗,如果你沒有經歷這樣的學習路徑,你很難真正領悟。學習沒有捷徑,這也是人與人之間差距越來越大的原因,一個有學習習慣的人和一個沒有的人他們的脾性有很大的差別。熱衷于學習的更喜歡思考,就像點亮技能一樣把知識樹填滿,而不喜歡學習的人總想著一步登天。
所以,如果你不是喜歡鉆牛角尖,或者有嚴重的精神潔癖,一定要把一項技能的前置鋪墊全部弄清楚的話,實用主義一點拿來即用其實沒什么問題,開源的出現也是為了讓我們更快的提高生產效率,而不是倡導每個人都自己造個輪子用自己的。不排除自己造個輪子能對個人技能和內功修煉有極其重要的作用,但要衡量現階段對你適不適合。如果你是個急需上岸找工作的大學生,你業余時間研究這些底層內功真沒什么用(還是那句話,我說的是普通的大部分人),因為企業要求你能創造價值,而你研究這些底層技術無法創造短期價值。如果你保研上岸或者做技術研究,研究這些底層是可以的。知識沒有對錯,只有適不適合,工具也是如此。
其實寫下來這些話蠻悲觀的,但是我們不得不應對大環境的沖擊,效率為先,能創造價值的人會獲得更多的嘉獎,這種功利性的拿來即用主義無疑是丑惡的,但是卻能創造價值。
抽象是美的,工程化也是美的,當你啃了很多大頭書之后,你會發現這些抽象的理論概念雖不能馬上創造經濟價值,但卻是邏輯清晰的,也是很干凈的,然后你就會明白為什么很多人會寫出來這么多屎山代碼,你突然有一種想要重構他的沖動,然而你看了一下上個季度的績效是 C ,你說算了吧,活著要緊。
所以回到主題上來說,本科階段到底應該學什么?其實你想學什么就能學什么,這要看你的計劃和預期是否一致,如果你想要找工作上岸,就要學企業需要你掌握的技能,提高簡歷的豐富程度,不斷精進,精進 cv 技術,精進輪子技術,精進拿來即用主義,精進和面試官扯皮的技術。如果你覺得抽象很美,你可以考研,做研究,找到某一個研究方向不斷深入下去。知識沒有對錯,只有適不適合你,工具也是一樣。
Anyway,很遺憾這篇文章沒有像平常一樣寫太多關于書籍推薦、技術總結之類的硬核內容,但我也希望這篇文章能給部分同學提供一下思想指導,好讓同學們不再那么迷茫。
最后用一個我覺得比較有意義一段話來作為結束語吧。
