注:如果你目前WEB CRUD 的狀態已經非常滿意,大可不必浪費時間閱讀本文,也沒有必要學什麼底層。刷下小視訊開開心心的躺下不香嗎
本文陳述的內容是一個想當大佬的高手,或者準確的說你想當大佬的話,應該學習什麼知識,應該學點什麼東西,本文的內容並非本人一家之言,畢竟本人也沒有社會地位,不過無名之輩,說的話可能沒有什麼份量,所以本人將來自幾位高手的文章,我做了一些提煉總結,勸勉各位學習基礎知識的重要性。同時本人的意思也跟這些作者的意思差不多。
來自程式設計指北大佬的金玉良言
作者背景www.zhihu.com/people/bian-cheng-zh...
原文連結:mp.weixin.qq.com/s/5gRRo1hc6k4uGFf...
一、為什麼要學 C 語言?【為什麼要學底層基礎】
- 我們學的是 Computer Science,而不是 Programming Language,語言真的真的真的不是重點
- 只有掌握了最核心的東西,學起那些偏技能的東西才會很快很輕鬆
- C 語言特殊就特殊在它可能是唯一最適合用來學習一系列計算機基礎課的工具和媒介
- C 語言本身抽象層次非常低,語法也很簡單,沒什麼語法糖,很貼近作業系統
- C 語言是最適合用來理解計算機系統底層機制的語言
- 一是語法簡單,更加貼近計算機本質的一些東西,學 C 也不是簡單的學語言本身,而是想透過 C 語言去理解一些如暫存器、記憶體、函式呼叫、跳轉等東西
- 而和作業系統等密切相關的底層機制也只有通過學習 C 語言才能透徹地理解它們
1 不少 Java、C#、PHP、Python 程式設計師工作幾年後會遇到瓶頸,有些會回來學習 C 語言,重拾底層概念,尋求新的突破。【我覺得看情況,有些朋友幾年後,還是WEB CRUD,根本沒有學習的慾望了】
【我覺得rust golang 程式也是如此,不少GOLANG程式設計師說真的,連變數都沒有搞清楚】
2 這裡不是在否定其它非 C 程式設計師就沒技術,實際上我本身也不寫 C,我只是想表達如果你想學習底層機制、作業系統等,請學習 C 語言。
3 程式設計學到一定的時候,你就需要了解底層系統的機制,否則,知其然不知所以然。
4 真正的高手往往都是有很強的系統性基礎知識的,表面的東西永遠是膚淺的。
所以利用大學的時間恰恰是打好這些基礎的關鍵時間,等到工作了,大家都是更傾向於學習快速上手業務的技能。
所以,在大學裡先學什麼語言不重要,你可以先學 Python、Java,但是無論如何,如果你想學好 Computer Science,C 語言一定繞不開。
也許以後實際工作中你完全沒有機會去寫 C,但是這並沒關係,打好了基礎,學其它也會學得很快、很透徹。
對於計算機專業的同學,還是建議學好 C 語言,與其它課程相結合,多懂一點程式背後的實現原理
二、具體要學的東西
我覺得這句話很好:“C 語言是最適合用來理解計算機系統底層機制的語言” 我們想理解底層,不過你目前用的是php,python,nodejs,golang,java,rust…你想搞清楚底層的執行細節,真的有必要撿起來C語言
我的圖
- 記憶體與指標
可以很明確的說,大部分PHP GOLANG JAVA 等對記憶體與指標理解的不夠徹底,都是停留在百度背點概念。你要是想掙扎一下,可以先看看我講的《記憶體與資料精講》
一名合格的程式設計師必須瞭解記憶體
函式呼叫本質
系統呼叫 syscall
系統呼叫分類:多程式程式設計有關,網路程式設計有關,中斷訊號有關,多執行緒等
系統呼叫是所有上層語言與核心互動的唯一介面。
《深入理解計算機系統》、《Unix網路程式設計》、《Unix高階環境程式設計》我的話:多程式程式設計+網路程式設計
比如:
你看的這些都是系統呼叫,當你掌握了以後,對於你研究redis mysql nginx mongodb swoole haproxy 等專案就提供了強有力的基礎研究支援。 同時對於你解決和排查故障也提供了幫助,就算無法解決,也起碼給了你百度的一個方向。總不至於連個方向都沒有。
三、作者推薦學習的東西
《C程式設計語言》、《C和指標》《演算法:C語言實現》
《深入理解計算機系統》、《Unix網路程式設計》、《Unix高階環境程式設計》
四、其它作者的
總結
我的推薦:
多程式程式設計+網路程式設計+資料結構和演算法+記憶體與資料
本作品採用《CC 協議》,轉載必須註明作者和本文連結