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

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

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

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

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

  1. 知其然,知其所以然
  2. 開拓眼界,多維發展

1. 知其然,知其所以然

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

基本類型

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 也跟着變了。

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

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

2. 開拓眼界,多維發展

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

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

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

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

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

結論

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

更多文章,敬請關注

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章