在計算機科學本科教育中,我們應該關注哪些課程和技能?這是一個值得深思的問題。我打算撰寫一篇面向廣大畢業(yè)生的通用性回答,不針對特定精英群體。
許多高校的課程內(nèi)容可能與社會需求存在偏差,學生們往往為了成績和績點,在一些實用性不高的科目上投入了大量時間,這有時甚至影響了他們的畢業(yè)進程。
一些基礎課程的教學重點,往往不是教授如何實現(xiàn)工程概念,而是強調(diào)記憶一些容易通過網(wǎng)絡搜索獲得的信息,如TCP報文頭的構成、Java 11的新特性、C++ 17的新功能等。這些信息的準確性往往比記憶要高得多。
然而,國內(nèi)高校傾向于考核這些固定的、可量化的內(nèi)容,因為它們便于評分。這導致一些教授可能將評分工作委托給學生,以節(jié)省自己的時間。
此外,大學課程的質(zhì)量參差不齊,部分教授可能主要關注自己的工作和收入,而非教育本身。例如,有的學校輔導員教授Java多年,卻對Java中的transient關鍵字的用法一無所知。面對這種情況,學生們可能需要更多地依靠自己。
關于大學是否應該擴招的辯論一直存在。許多人認為,大學階段應該掌握一些抽象的、概念化的核心知識,如操作系統(tǒng)原理、Linux內(nèi)核的調(diào)度策略等。這些知識對于培養(yǎng)程序員的底層能力確實很重要,但對于大多數(shù)本科生來說,這些知識可能在現(xiàn)階段幫助有限。
如果你不是計算機專業(yè)的學生,要在課余時間掌握這些知識將非常困難,因為它們需要大量的時間和精力。
可以預見的是,如果你將時間投入到操作系統(tǒng)、計算機網(wǎng)絡、算法等課程,而你的同學則專注于Java、多線程、SpringBoot、Cloud等框架的學習,他們可能會更快地成長,更容易對編程產(chǎn)生興趣,也更容易進入編程行業(yè)。
不要認為學習計算機基礎知識就能帶來優(yōu)越感,或讓你更接近世界的本源。大多數(shù)開發(fā)工作都是日常的CRUD操作,即使是在互聯(lián)網(wǎng)大廠也是如此。企業(yè)招聘你,主要是希望你能創(chuàng)造價值,而不僅僅是掌握理論知識。
如果你沒有接觸過數(shù)據(jù)庫,就難以理解數(shù)據(jù)庫事務機制;如果沒有寫過Java和C語言,就難以理解面向?qū)ο蠛兔嫦蜻^程的區(qū)別。只有通過實踐,你才能真正理解這些概念。互聯(lián)網(wǎng)上關于核心概念的討論,往往是經(jīng)驗豐富的前輩們在長時間的編程實踐后總結出來的。
學習沒有捷徑,這也是人與人之間差距越來越大的原因之一。有學習習慣的人更傾向于思考,逐步點亮自己的技能樹;而不喜歡的人則總想一步登天。實用主義在某些情況下是可取的,開源的出現(xiàn)是為了提高生產(chǎn)效率,而不是要求每個人都重新發(fā)明輪子。
如果你急需找到工作,那么在業(yè)余時間研究底層技術可能并不實用,因為企業(yè)需要的是能立即創(chuàng)造價值的人才。如果你的目標是保研或進行技術研究,那么深入研究這些底層技術是有意義的。
知識本身沒有對錯,關鍵在于它是否適合你。同樣,工具也是如此。這篇文章沒有提供太多關于書籍推薦或技術總結的內(nèi)容,但我希望通過它為一些同學提供思想指導,幫助他們減少迷茫。
總之,在本科階段,你應該根據(jù)自己的計劃和預期來選擇學習內(nèi)容。如果你想找工作,就應該學習企業(yè)需要的技能,提高簡歷的豐富度,不斷精進自己的技能。如果你對抽象概念感興趣,可以選擇考研或進行深入研究。知識沒有對錯,只有適合與否。