卷王指南,大學計算機專業,面臨分專業,計科,軟工,大資料,物聯網,網路工程,該選什麼?
同學們好,我是王老師——二哥呀!(笑噴)
好巧!前幾天有同學私信問過我這個問題:大學計算機專業,面臨分專業,計科,軟工,大資料,物聯網,網路工程,該選什麼?再加上高考結束後填報志願,想必 CSDN 上有很多同學挺迷茫的。
我就來(主觀地)一一分析下,從後往前。
網路工程,聽起來還算是蠻高階大氣上檔次的,大家可以去百度百科或者維基百科看一下這個專業的解釋。我的理解是網路工程是將計算機以及其他裝置串聯完成網路通訊,以及智慧化監控的學科。主要的分支有:路由交換、網路安全、無線網路等等。
我之前在的一個公司(十年前了),一百多號開發,但就兩三個網路專業的人才,他們很重要,一旦機房的網路出問題,都得靠他們解決。嗯,說句“心懷鬼胎”的話,平常我們最喜歡的一件事就是網路出問題,或者公司斷電,嗯,天賜的“摸魚好時機”。當然了,這種機會不多,這兩三位同事總是能在最短的時間內把問題解決掉。
物聯網,也簡稱為 IoT,是近些年比較火的一個概念,是指將日常的物理物件連線到網際網路的過程——從醫療裝置,到可穿戴裝置,小到智慧家居,大到智慧城市。
先說說我家的情況吧,比較常用的智慧裝置有兩個,一個是掃地機器人,需要地面牆角比較規整一點才能比較順利地完成清潔工作;一個是小夜燈,人經過的時候就亮起來,過一會自己就滅了,但經常夜裡翻個身它就亮了,還有點“智障”。
相對來說,物聯網還有很大的發展空間,比如智慧交通,再比如智慧農業,具體點的例子就是通過溼度感測器來自動觸發灌溉等。
大資料,也就是 Big Data,我瞭解到的適用於大資料的技術有:分散式檔案系統、分散式資料庫、雲端計算平臺、可擴充套件的儲存系統等。奧巴馬曾說“大資料”是未來的石油,可見其重要性。
大資料專業是典型的交叉學科,不僅涉及到計算機,還會涉及到數學和統計學,不僅對學校的學科實力有要求,對個人的硬性基本功也是有要求的。
軟體工程專業是以電腦科學為基礎的,更加強調軟體開發的工程性,包括軟體需求分析、軟體設計、軟體測試、軟體維護和軟體專案管理等。
電腦科學,也就是計科(Computer Science,簡稱 CS),不僅會研究計算機的硬體,也會研究計算機的軟體,更具體的主題包括程式語言、程式設計等。
先插個樓,開局一張圖:計科最佳指南。
我之前讀過鄒欣大佬(目前是 CSDN 副總裁)的一本書——《構建之法》,第一章就對軟體工程和電腦科學的關係做了解釋,它們開設的課程很相似,但本質上它倆是完全不同的。
電腦科學這一學術領域可以分為:計算機理論、資訊和編碼理論、演算法和資料結構、形式化方法、程式語言等。
偏實踐的領域:計算機體系結構(或者叫計算機組成原理)、作業系統、計算機網路、安全性和密碼學、人工智慧、計算機圖形學、人機互動、嵌入式系統和軟體工程。
按照武俠小說來講,電腦科學更像是九陽神功、乾坤大挪移這種頂級內功;而軟體工程更像是七傷拳、龍抓手、太極拳法等武功招式。在內功渾厚的基礎上,武功招式就可以打出最大的傷害值。
另外還有一種比較功利性的說法:如果打算本科畢業後就參加工作,可選軟體工程,如果打算考研進修,可選電腦科學。
不過,在我看來,無論選擇電腦科學還是軟體工程,大部分同學最終的選擇都是做一名軟體工程師。(落腳點還是很實在,增刪改查嘛,hhh)
當然了,軟體工程師可以分為兩種:一種是充分理解了電腦科學,從而有能力應對充滿挑戰的創造性工作;另一種僅僅憑著對一些高階工具或者框架的熟悉而勉強應付。
第一種工程師能隨著時間的流逝,不停地成長,最終成為技術大牛;而第二種工程師往往浮於表面,只學習某些特定的工具和技術,而不研究底層的原理,慢慢就會停滯不前。
我個人的總結就是,軟工的核心還是計科,計科學得好,軟工、大資料、物聯網、網路工程都是可以自如應對的。
接下來就很重要了!怎麼才能好學計科呢?怎麼才能成為別人眼中的大牛呢?
先說理論。
如果你要學習物理,我推薦你順著物理的發展史學習,先學習牛頓的經典物理,再學習熱力學、電磁學,然後學習相對論、量子力學這些徹底推翻經典物理的,最後學習電動力學這種硬核的。
整個學習過程,是自底向上的。學計科也要這樣嗎?
先學習電路,然後學習馮諾依曼結構,造一臺計算機?接著再學習如何用匯編寫個 mini os?接著學習如何寫一個簡易版的編譯器?最後再學習高階程式語言,比如說 Java、Python、C++?
顯然這樣是行不通的!電腦科學的學習最好是自頂向下。
什麼是頂?在我看來,就是一門高階的程式語言,比如說 Java、C++ 或者 Python。我個人從事 Java 後端開發的時間比較久,所以還是拿老本行來說。
當你學習到 Java 併發程式設計中的“原子性”、“同步”、“非同步”、“程式”、“記憶體分配”這些概念的時候,你自然而然會產生很多疑問,然後就會去學習作業系統,學習計算機組成原理,然後你的一系列問題就會逐漸被解決。
當你在學習 Java 的時候遇到效能問題時,你就會去研究,啊,原來 Java 是一門解釋型的程式語言,而 C 語言是一門編譯型的程式語言,所以 Unix/Linux 這種作業系統要用 C 語言來實現,因為要最大限度的壓榨硬體的瓶頸。
當然了,Java 為了提升自身的效能也是費盡心思,比如說即時編譯(JIT,Just-In-Time)通過在執行時將位元組碼編譯為本機機器程式碼來提高效能;比如說垃圾回收機制的升級,從 GC 到 ZGC,GC 的痛點在於垃圾回收期間,所有的執行緒都會停止活動,等待 STW(Stop The World)的結束,而 ZGC 在標記、轉移和重定位階段幾乎都是併發的,大大縮短了停頓的時間。
跑偏了,繼續來說。
當你用 Java 實現某個業務需求時,發現人家的演算法實現比你快得多,你自然會好奇,為什麼會這樣?然後你發現人家用的資料結構和你的不同,接著你就會去學習資料結構,再瞭解一些高效的演算法,比如動態規劃等。
你看,從學 Java 的語法開始,你一步步學到了作業系統、計算機組成原理、資料結構與演算法。
跟著需求去學習,才能真正學好電腦科學。
我也會給你推薦《CSAPP》這本黑皮書,畢竟永遠的神,但如果你沒有程式設計基礎就去啃,你可能很快就會被勸退的;反而,一開始,你讀一讀我寫的《教妹學Java》,或者去 B 站上看尚矽谷或者動力節點這些培訓機構的 Java 視訊課,沒準你會越學越覺得有信心——這麼簡單的東西,我這麼聰明,還能學不會?你會有這種自信的錯覺的!
反而一開始去啃 CSAPP,你會感覺,老天!我特麼是個廢材啊,我學的什麼鬼玩意,這竟然看不懂,學不會?
你可能要問,程式語言有很多種,Java、Python、C/C++、Go、JavaScript 等等,選哪一個呢?
選擇 Java 吧,常聽人說“人生苦短,我用 Python”;選擇 Python 吧,常聽人說“Go 是 Google 的親兒子,發展勢頭正勁”;選擇 Go 吧,常聽人說“前端(JavaScript 必學)更容易學習一些”;選擇 JavaScript 吧,常聽人說“C/C++ 具備現代程式設計的基礎要求,是很多程式語言的基礎。”
然後就又麻了!
我是從大一就開始學習的 Java,當時沒有選擇,因為不知道還有其他程式語言(噓),學校讓學 Java 就學了 Java。只能說非常的幸運,選對了。
那麼同學們也不需要糾結,前端、Java、Python、C++/C,到底怎麼選?學校安排啥就學啥,如果學校沒安排,那麼選 Java 可能是最樸實無華的選擇,因為綜合(就業崗位和薪資)考慮的話,Java 是其他程式語言無法替代的。
當然了,你也可以選擇 C 語言,這也是一個無法反駁的選擇,C 語言是其他很多程式語言的基石,學了這個,再學其他任何一門程式語言都是很好的基礎,只不過,指標這塊確實令人頭痛!
選擇一門程式語言後,踏踏實實地去學習,就會連根拔起很多其他方面的內容,比如說資料庫、資料結構與演算法、計算機組成原理、作業系統、計算機網路等等。
- 那 C 語言該怎麼學呢?
- 那 Java 該怎麼學呢?
- 那資料庫該怎麼學呢?
- 那資料結構與演算法該怎麼學呢?
- 那計算機組成原理該怎麼學呢?
- 那作業系統該怎麼學呢?
- 那計算機網路該怎麼學呢?
一個一個來解決。
C 語言:
推薦翁愷教授的《C 語言程式設計》,B 站地址:
https://www.bilibili.com/video/BV19W411B7w1
Java:
你可以先看看我整理的這份 GitHub 上星標 115k+ 的 Java 教程,裡面涵蓋了 Java 所有的知識點,包括 Java 語法、Java 集合框架、Java IO、Java 併發程式設計和 Java 虛擬機器,內容不多,只講重點。
GitHub 星標 115k+的 Java 教程,超級硬核!
資料庫:
- 《SQL 必知必會》
- 《高效能 MySQL》
- 《MySQL技術內幕-InnoDB儲存引擎》
- 《Redis 深度歷險:核心原理與應用實踐》
資料結構與演算法:
- 《演算法 4》
- 吃完 300 道 LeetCode 題後,我胖得快炸了
計算機組成原理:
- 《計算機是如何跑起來的》
- 《CSAPP》,也就是《深入理解計算機系統》
作業系統:
- 龍書《作業系統概念》
- 《現代作業系統》
計算機網路:
- 網路是怎樣連線的
- 圖解 HTTP
- 圖解TCP/IP
- TCP/IP詳解 卷1:協議
你可能要問,一定要按照這個次序嗎?
答案是可以不按照,但我這裡有 3 個重要的“先決條件”:
- 你最好先從一門程式語言開始,然後不斷縱向和橫向擴充套件;
- 你最好先學計算機組成原理再學作業系統;
- 你最好先學計算機網路和作業系統再學分散式系統;
限於 CSDN 外鏈的原因,學習資源我這裡沒法列全。
但考慮到同學們的訴求,我上週末花了兩天的時間,整理了一份 CS 自學指南,裡面囊括了所有我認為值得推薦給大家的學習資料(有書、有視訊、有公開課、有線上文件),這些學習資料不用懷疑,我都看過,雖然有些沒有看完,已經在 GitHub 上開源了。
你可以大致按照我列出的順序,藉助我推薦的教材和視訊課程,最好是兩者兼顧,然後花 100-200 個小時去學完每一個科目,然後在之後的程式生涯裡,不斷重溫這些精華,你會來感謝我的!
要把這些內容全部學完,當然是需要花時間的,不可能一朝一夕就能完成,大學期間可能完全學不完,即便是工作幾年後仍然可能學不完,但相信我,你會在這條路上得到快樂,得到滿足的。
還有什麼比學習更重要的事情呢?
如果有,那就是給二哥點個贊,來個三連了!
相關文章
- 大學學計算機應該選哪個專業呢?計算機
- 什麼是工業物聯網?工業物聯網Web組態軟體Web
- 物聯網工程專業畢業後可以從事什麼行業?行業
- 2022物聯網工業網際網路大背景下的工業革命
- 網易微專業大資料工程師大資料工程師
- 認識物聯網系列—物聯網與雲端計算、大資料大資料
- 網際網路公司需要什麼樣的計算機專業應屆生?計算機
- 大學選擇什麼專業,更有助於未來走進網際網路行業工作?行業
- 雲端計算、大資料、物聯網、人工智慧都是什麼關係?大資料人工智慧
- 河北工業大學計算機/軟體考研專業課鉅變,一門變三門!計算機
- 大三學生深刻探討所選計算機專業----軟體工程作業計算機軟體工程
- 【工業網際網路】苗凱翔 : 大資料與霧計算:端到端工業網際網路的重要趨勢大資料
- 該填志願了,國內大學計算機專業哪家強?計算機
- 工業物聯網是什麼?工業物聯網有什麼作用?能在哪些行業應用?行業
- 物聯網與工業物聯網:有什麼區別?
- 工業網路交換機發展面臨的5大挑戰
- 大資料驅動智慧製造 物聯網引爆工業革命商機大資料
- 大資料分析師要學什麼專業?大資料
- 工業物聯網核心裝置(邊緣計算閘道器)有什麼功能
- 專題三:計算機網路計算機網路
- 資料視覺化大屏能為物聯網專案帶來什麼視覺化
- 五分鐘自學程式設計:計算機網路到底應該怎麼學?!程式設計計算機網路
- 網路專業人員需要了解的物聯網資訊
- 最全最強!世界大學計算機專業排名總結!計算機
- 什麼是工業物聯網閘道器?
- 邊緣計算與工業網際網路
- 大學生不是計算機專業的也能學IT技術嗎?計算機
- 工業物聯網–資訊圖
- 軟體工程大眾化:開發者經驗(DX)和網際網路計算機軟體工程計算機
- 雲端計算實現物聯網的核心,雲端計算應該怎麼學?
- 什麼是工業物聯網?IIoT的要點
- 非計算機專業小白自學爬蟲全指南(附資源)計算機爬蟲
- 面臨畢業的計算機專業學生,怎樣去學習web前端,哪些是面試要點計算機Web前端面試
- 關於自己計算機專業寫點什麼?計算機
- 雲端計算、大資料和物聯網之間,之間有什麼關係與區別?大資料
- 【工業網際網路】郭朝暉:工業網際網路平臺背景下的工業大資料與智慧製造大資料
- 工業物聯網網路的實施戰略
- 為什麼計算機專業學生想學前端 如今Web前端薪資如何計算機前端Web