為什么寫這篇文章
受《大學計算機:計算思維導論》的啟發, 對計算機科學有一個全局的景圖,了解計算機是從哪里來的, 又如何發展到今天。要深刻的理解一個事物,要追本溯源(第一性原理),以發展的眼光把握事物的發展歷史, 站在巨人的肩膀,站得高,望得遠。
《大學計算機:計算思維導論》給我帶來了宏觀的計算機景圖。計算機來源于數學, 其理論基礎之一是數理邏輯,而數理邏輯體系的發展歷史背后有一條主線——一條漫長的歷史長河,沿著這條河流回溯而上,將會遇到歷史人物——布萊尼茨、布爾、弗雷格、圖靈、香農(感興趣的,強烈推薦科普書?邏輯的引擎)。19世紀的布爾最偉大的成就在于將邏輯代數化,構建了邏輯體系。 該邏輯體系下, 與、或、非構成了基本的邏輯符號, 而這是計算機數字電路的理論基礎。 20世紀的香農發表了論文《對繼電器和開關電路中的符號分析》,論證了構造 與、或、非電路的可行性。
沿著邏輯電路順流而下,可以看到更為開闊壯觀的景象。與、或、非門 構建了更復雜的集成電路,?如 譯碼器 和 加法器,譯碼器可用于尋址技術,加法器是最基本的計算單元。復雜電路的集成構成了現代計算機, 現代計算機的模型是馮諾曼依體系,計算機設備由、輸入、輸出、控制器、計算器、存儲組成。在硬件的基礎上,?操作系統是對底層硬件的抽象。高級語言是對匯編語言的抽象。 算法和系統工程構建于高級語言之上, 并結合網絡原理,構建了現代互聯網 。 現代互聯網已經深刻的影響了生活方式和生產方式。 基于這條主線,可以清晰的看到計算機的發展全貌以及理論基礎。?
而慶幸的是,我大學教育的課程已經提供了這一條主線。但悲劇的是:在大學時代, 但沒有意識到課程連接起來形成這一條主線,貫穿著計算機的發展歷程。 當然,現在意識到這一點,為時未晚, 這也是我寫這篇文章的初衷,也希望更多人看到計算機基礎的重要性!
什么是計算機基礎
記得在大學時代修過的計算機核心課程:《模擬與數字電路》、《計算機組成原理》、《計算機體系結構》、《操作系統》、《編譯原理》、《數據結構》、《數據庫原理》、《網絡原理》。當時的印象比較深刻的是《模擬與數字電路》,學起來枯燥, 要基于與、或、非門實現各種復雜的電路, 想想腦袋都疼!這些課程環環相扣,《模擬與數字電路》是《計算機組成原理》的基礎,?《計算機組成原理》是《計算機體系結構》的基礎,這三門課程是偏向于底層硬件實現;而《操作系統》是對底層硬件的抽象和擴充;《編譯原理》是對高級語言的翻譯;《數據結構》是算法的基礎;工程實現依賴于《數據庫原理》;《網絡原理》提供的廣域網、局域網服務,是現代互聯網的基礎設施。 在馮諾曼依體系下,這些基礎課程現在不過時、未來也仍然不過時, 它們提供了一個全局的視角,去洞察計算機的本質!
大學時代還學習了數學的基礎課程:《離散數學》、《微積分》、《線性代數》、《概率論》。《離散數學》是計算機領域建模的有利武器,例如:圖論是建模的必殺技,人工智能的理論基礎之一就是數理邏輯。 在機器學習領域, 梯度下降法可以看到《微積分》的影子。《線性代數》是機器學習的基礎之一。 《概率論》和 《統計學》為機器學習開創了另外一個方向,如:貝葉斯模型。計算機是源于數學, 而數學又是建模的工具。現實生活的問題千變萬化,從計算機的視角去解決這些問題, 就得對問題進行 抽象, 然后利用數學建模, 建立一套理論基礎, 進行演繹推理, 在理論層面上證明了可行性之后, 然后再進行工程實踐。 這一過程經歷了? 抽象->理論->設計,這是認識世界得科學方法。 也只有通過科學的方法去認識世界, 我們才能改造世界。?
我認為:以上課程是計算機的基礎。計算機來源于數學, 計算機是我們改造世界的有利武器,? 而現代計算機基于 堅實的理論 構建的。 學習這些課程, 不僅可了解計算機的來龍去脈, 而且提供了思想的源泉,掌握科學的方法,站在更高的視角, 觸達計算機的本質。
為何計算機基礎重要
21世紀, 進入了知識爆炸的年代。 計算機領域也一樣, 技術更新迭代的速度如同火箭的速度一樣。 新的技術框架和組件層出不窮。但是,萬變不離其宗,掌握扎實的基礎,面對技術浪涌,也能應對自如!
從世界范圍內來看,知名院校計算機學院都會開設上述基礎課程, 例如:國內的清華、北大, 美國的MIT、伯克利、斯坦福、CMU。 這些課程開設的目的就是夯實理論基礎,才能構建宏偉建筑。羅馬不是一天建成的,但是沒有基礎, 羅馬不可能建成的!
快速學習能力的提升依賴于扎實的計算機基礎。 這是一個需要終身學習的年代,不僅要關注學習本身, 還得關注學習效率的提升。基礎夯實, 意味著面對技術潮涌,也能應對自如。 金融領域的技術, 技術難點之一就是實現數據一致性, 數據一致性依賴于事務, 最基礎的一致性模型就是分布式事務, 而分布式事務的基礎是 本地事務, 《數據庫原理》就提供了本地事務的基本原理。 如果理解了本地事務原理, 學習分布式事務理論就事倍功半。 在《操作系統》中, 有一個最基本的模型:生產者-消費者,而消息隊列的實現本質上也是 生產者-消費者模型。生產者-消費者模型實現了空間和時間的解耦, 應用場景廣泛,例如:異步解耦、削峰、數據一致性、數據通道。如果掌握了扎實了數學基礎,要轉型算法工程師、從事數據挖掘、機器學習等行業, 面對眼花繚亂的數學公式, 也可從容不迫!其實,各行各業都一樣, 根基穩固了, 學習能力自然就提升了!
計算機基礎是否扎實決定了職業生涯能走多遠!程序員的圈子總是有一種焦慮感,程序員是年輕人的天下、35歲達到職業瓶頸期。如果花5年甚至10年重復得干CRUD工作,每天忙碌于解決線上問題、修復Bug, 職35歲能不到達職業瓶頸? 為什么計算機基礎扎實了, 有助于職業生涯走得更遠? 這得從計算機思維說起。 基礎不僅僅帶來的是理論知識, 更重要的是帶來了思維方式的提升。 其中最重要的兩個思維是:自動化思維和抽象思維。?
計算機是按照指令順序自動執行,自動化思維的啟示是解放雙手、關注核心的項目,能自動化的事情就應該自動化。??計算機領域層有出不窮的自動化工具,充分利用自動化工具,?解放雙手,就解放了焦慮, 做更有意義的事情,才能有更大的成長空間。
抽象思維,解決復雜問題的利器!為什么有些人是行業專家, 指點江山?為什么有人是架構師,高屋建甌?為什么有些人只是辛勤的搬磚族? 本質的區別在于抽象思維。行業專家制定行業標準 , 例如 網絡原理的七層模型, 構建該模型首先得具備抽象能力,分層的邊界是什么? 每一層具體的職責是什么?各層之間如何交互。 架構師解決系統架構問題, 就得摸清系統的邊界? 系統的職責是什么? 系統之間如何通信?應用哪些技術組件? 這些都需要抽象思維,站得足夠高, 才能望得足夠遠。 而計算機基礎可以訓練抽象思維(話題太大了, 后期單獨介紹)。是否具備抽象思維 決定了你是陷入忙碌的死循環 還是 做更有意義的事情, 也同樣決定了你是辛搬磚族 還是 高屋建甌者!
路漫漫其修遠兮,吾將上下而求索!