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