前端學習計算機理論知識的好處

寫本文的目的,主要是源於和一個老前端的交流。前端

我認爲學習計算機理論知識頗有用,對職業發展幫助很是大。他認爲應用開發和底層開發是兩回事,前端屬於應用開發,學理論知識徹底浪費時間。具體細節就不說了,最後是不歡而散。web

不過,有一點咱們是達成共識的:學習計算機理論知識不能讓你的業務頁面寫得更快、更好,它不是銀彈,不能解決全部開發中的問題。若是你還處於入門級別,學這個也沒多大用,學好前端基礎知識反而更有用(這句話針對非科班出身的前端)。數據庫

我認爲學習計算機理論知識對於前端來講有兩點好處:數組

  1. 知其然,知其因此然
  2. 開拓眼界,多維發展

1. 知其然,知其因此然

咱們都知道,在 JavaScript 中,有兩種數據類型,分別爲基本類型和引用類型。服務器

基本類型babel

let a, b
a = 1
b = a
b = 3
console.log(a) // 1
console.log(b) // 3

引用類型併發

let a, b
a = { msg: 'hello' }
b = a
b.msg = 'world'
console.log(a) // { msg: "world" }
console.log(b) // { msg: "world" }

爲何基本類型 b 的值變了,a 不會變?而在引用類型中 b 的值變了,a也跟着變?若是你學習過內存管理以及編譯原理相關知識,就能夠理解這個現象了。學習

從程序的角度來看,內存被抽象爲一個一維數組,a 和 b 在內存都佔着一個位置,而且在內存中存儲的是它們各自的值。測試

而引用類型則不一樣,在建立一個引用類型數據時,須要在堆中分配一塊內存,而後將這塊內存的地址返回。即 a = { msg: 'hello' } 這個操做,a 存儲的是一個地址。執行 b = a 後, a 和 b 指向同一個地址。當 b.msg = 'world' 這個操做執行時,改變的是這塊內存中的值,因此就不難理解爲何在引用類型中 b 的值變了,a 也跟着變了。webgl

以上只是其中一個例子,還有更多例子就不一一列舉了。

學習計算機理論知識能讓咱們不單單看到程序的表面,還能看到程序計算的本質。想想,從你寫下一行代碼開始,經歷詞法分析、語法分析、生成機器碼,最後變成一條條指令在 CPU 中執行,而且數據在 CPU 與內存之間如何流轉你都瞭然如胸,這種感受多奇妙。

2. 開拓眼界,多維發展

一個好的前端不單單是一個前端,不要只盯着眼前的一畝三分地,更要了解前端之外的知識。

一個項目啓動前,一般會有一個需求討論會。若是你不懂理論知識,當聊到數據庫、服務器、併發等名詞時,你就只能兩眼一摸黑,插不上嘴,安安靜靜的坐在一邊。但若是你學過這方面的知識時,你就能和他們一塊兒指點江山,再也不是外人。

在前端方向,理論知識也有用武之地。例如 babel,就須要用到編譯原理;研究 webgl,還得用上圖形學的知識;學了軟件工程,你就明白測試、團隊規範的重要性和必要性。說白了,懂計算機理論知識的前端和普通前端是站在不一樣維度上看問題的。

計算機已經發展幾十年了,中間淘汰的技術數不勝數,前端仍是最近幾年才火起來的,說不定哪天這個職業就沒了。若是發生這種狀況,你還能幹什麼?

技術會過期,理論知識不會過期,只要馮諾依曼體系還在,你學的東西就一直有用。學好計算機理論知識,不幹前端,還能幹別的。

結論

  1. 計算機理論知識頗有用。
  2. 剛入門先學好前端基礎知識,感受水平差很少了,再去學習計算機理論知識。

更多文章,敬請關注

相關文章
相關標籤/搜索