1. 程式人生 > >做Web前端開發,需要熟悉計算機專業課嗎?

做Web前端開發,需要熟悉計算機專業課嗎?

Web前端需要熟悉大學裏[高大上]計算機專業課嗎?

這裏說的『高大上』的專業課,主要指算法、數據結構、操作系統、編譯原理、線性結構、離散數學等等。

對於大學不是計算機專業,但以後想要從事前端開發工作的同學來說,這些『高大上』的計算機專業課是否有必要花時間去了解呢? 以下內容整理自網易前端工程師鄭海波的知乎問答。

『基礎決定你可能達到的高度, 而業務決定了你的最低瓶頸』,兩者不可偏廢。

說說我自己吧。

我的計算機基礎就非常薄弱,但是我當年進公司卻拿了較高評價的Offer。起初,我會反感公司校招時放那麽多計算機基礎的題目,會反感領導要求前端有計算機背景(這主要是因為自己基礎薄弱,但心裏又比較自負)。

北京整容整形醫院http://www.bj-swjtu.com

但是知道的越多,就越感受到自己的渺小。因為我感受到了我那皮毛都算不上的基礎知識帶給我的巨大收益,我會開始計算並焦慮我好像得花非常多的時間來彌補自己知識的短板。所以我認為:計算機基礎知識非常重要,它決定了你能走到什麽高度。

我其實是很羨慕那些學了4年甚至7年計算機的同學,但是我發現,有些科班的同學甚至無法和我交流類似的知識體系。這說明應試教育體系下,所謂的計算機基礎還是需要通過思考和實踐來真正成為自己的東西,否則並沒什麽卵用。

前端的發展非常快,以至於你今天關註的新東西,明年再看可能就截然不同甚至被廢棄了。所以保持高的學習力來應對這種變化非常重要。高的學習力在很大程度上和你的計算機基礎緊密相關(先拋開智力等不可抗因素)。

現在純前端範疇裏還幾乎沒有出現新創的知識領域。但是反過來說,從來沒有一個領域有Web前端這麽飛速發展,不斷的有在舊知識體系在它上面重演。我記得有一句名言大概是這個意思:所有東西都會用js實現一遍。 我現在深以為然。 我相信在很多人也看出來了,前端這些年看似發展的非常蓬勃,但其實並沒有太多新鮮的東西,一切都是重演。計算機基礎是以不變應萬變的秘訣。現在的前端現在已經不再需要『我會寫java後臺代碼』等等愚蠢的強調來站直腰板了,成熟的公司已經開始重視前端帶來的實際價值,。所以前端本身當然不能固步自封,鞏固計算機基礎,用以靈活應用到日常業務,用以吸收新鮮技術,也就是自然而然的事情。

有同學或許還會問:前端做項目如何積累經驗? 這裏面有主動和被動兩個方面積累經驗,但歸根結底都是基於思考。

被動——由項目需求、特點決定,如視覺交互或前後端技術架構的特殊性導致你要去思考解決方案,進而積累經驗,這個機會是可遇不可求的。

主動——學習現在熱門的技術,ES6(babel) 、Commonjs(browserify)、React、同構Webapp開發等等. 確定它們的潛在風險和適用場景後 應用到你的產品開發中。 這個機會是人人都可爭取的。

就個人而言,我在每一個階段都會反思, 我是否比上一個半年要進步了。如果沒有,就會渾身不舒服。 最後再列下我覺得部分已經讓我受益的基礎知識:

- 高中的物理知識 + 最最基礎的大學物理;

- 編譯原理的最最基礎的前端知識用以一致的處理文本類問題,把你從糟糕的邏輯判斷和正則表達式的濫用中拯救出來;

- 大學中的矩陣論、線性代數 ,進而一些計算機圖形學的簡單理解。這些並不一定要和webGL結合,但是和物理一樣可以幫助你做出『符合直覺』的效果和動畫;

- 數據結構和基本算法,你要清楚特定的基礎數據結構可以處理的問題,其實很多不是那麽基礎的算法和數據結構都需要自己在實際需求中去摸索或學習, 所以如果你已經知道這些算法,那可以跳過很多耗時的技術選型階段, 這就是知識的廣度帶來的優勢;

- 一些函數式編程的思想, SICP是大家廣泛推薦的書, 然而我還沒看完。一些衍生的內容,比如不變數據結構的定義和應用,事實上你現在就可以通過幾十行代碼在js裏實現不變數據結構的幫助函數來幫助你在復雜應用裏實現undo, redo甚至歷史回溯功能,而不需引入facebook那高大120kb的immuable.js。

做Web前端開發,需要熟悉計算機專業課嗎?