我們聽過很多工程師,什麼Java工程師,PHP工程師,數據庫工程師,等等,而對於Web前端開發工程師,可能是最近幾年才火起來的一個很新的職業,在國內乃至國際上真正開始受到重視的時間不超過10年。Web前端開發是從網頁製作演變而來的,名稱上有很明顯的時代特徵。
前端工程師是互聯網時代軟體產品研發中不可缺少的一種專業研發角色。從狹義上講,前端工程師使用 HTML、CSS、JavaScript 等專業技能和工具將產品UI設計稿實現成網站產品,涵蓋使用者PC端、移動端網頁,處理視覺和交互問題。從廣義上來講,所有使用者終端產品與視覺和交互有關的部分,都是前端工程師的專業領域。 2005年的時候大多數網頁長這樣:
現在的網頁一般是這樣的:
前端工程師的發展之路和前景是怎麼樣的?
前端是一個相對比較新的行業,互聯網發展早期(1995年~2005年)是沒有專業的前端工程師的。隨著互聯網的發展,大約從2005年開始,正式的前端工程師角色被行業認可,到了2010年,互聯網開始全面進入移動時代,前端工程師的地位越來越重要,前端領域的技術發展也越來越快,各種新的思想、設計模式、工具和平臺都快速發展,對前端工程師的技能要求也越來越高。 有一些資料可以說明前端行業的發展迅速。- 在2010年之後最流行的新程式設計語言中有相當部分和前端有關,比如 Dart、Clojure、CoffeeScript 和 TypeScript。
- 作為前端最重要的程式設計語言 JavaScript,在最近幾年裡不論是代碼量還是關注數都穩居 Github 平臺熱門程式設計語言榜。
- 行業對前端需求量持續增加,前端程式師薪水在行業裡面處於較領先的位置。
近年來最流行的程式設計語言很多都是JavaScript替代語言
JavaScript在最熱程式設計語言 TOP10
近幾年互聯網公司前端團隊每年擴張一倍
JavaScript工程師平均薪水排名在程式語言工程師收入前10
前端工程師需要什麼樣的知識和技能?
有人說前端工程師的技術棧是這樣的:
還有人說是這樣的:
實際上前端工程師最核心的技能還是:
在一個典型的互聯網公司的產品研發流程中,前端工程師和其他角色的關係大致上是這樣的:
前端是最接近產品和設計的工程師,起到銜接產品和技術的作用,前端為使用者可以看到的部分負責,所以也是最接近用戶的工程師。
在多終端的時代,如果一個產品同時支援PC、移動端,前端工程師還需要和更多的角色打交道:
JavaScript 對於前端是最重要的技能,所以優秀的前端工程師要有扎實的JavaScript基本功。而JavaScript這門程式設計語言也是目前程式設計領域炙手可熱的寵兒,如今的它不僅僅只是用來開發Web,還可以用在各個方面。
JavaScript 可以用在“樹莓派”這類智慧硬體晶片開發
前端工程師也是軟體工程師,所以軟體工程師的基礎知識也是非常重要的,這些基礎知識包括:
- 數學
- 電腦體系
- 作業系統
- 資料結構和演算法
- 編譯原理
- HTML: The Living Standard
- HTML & CSS
前端工程師的學習和成長
前端領域發展很快,各種新技術新思想不斷湧現,這是一個好現象。但是前端發展太快也帶來一些問題,比如有同學就問到我究竟應該學些什麼,Angular.js、React、Node.js、ES6、ES7、CoffeeScript、TypeScript……似乎永遠有太多東西需要學習,有些東西好像還沒學明白就被另一些新的技術取代而“過時了”。 其實還是那句話,前端工程師首先是軟體工程師,基礎是最重要的,如果基礎不扎實,一切應用技能就都是“浮雲”。前端的基礎是什麼?HTML、CSS、JavaScript基本功,數學、演算法、資料結構、作業系統、編譯原理基本功。 一個優秀的前端工程師必須要有自己擅長的領域,並且鑽研得足夠深入,同時要有眼界,能“跨界”。可以以前端作為職業,但千萬不要把自己的技能限制在前端領域,因為有很多東西,只有站在前端之外,才能看得更清晰,更透徹。 學東西千萬別盲目更風,大家都在談AngularJS就立即跑去學習,過幾天大家都談React了,就又放下AngularJS去學習React。前端領域知識點很多,值得學的東西也很多,聰明的同學懂得花時間學習成體系的知識並且研究得足夠深入,因為只有這樣才能從中總結出規律,形成方法論,這樣才能最大化學習的價值。
知識的正確用法 —— 一個領域裡面的大師永遠不會是另一個類似領域的菜鳥
這次前端星計畫佈置的一個實現帶有農曆和節氣的萬年曆,有些同學卡在農曆計算上,大約70%的同學懂得去網上找代碼,但只有不到1%的同學真正弄明白農曆計算的原理。
在面試的時候,面試官問到如何做前端性能優化,有的同學能夠拿雅虎的性能優化軍規回答得頭頭是道,反復強調使用工具壓縮靜態資源,但是自己搭建的博客的nginx服務卻沒有開啟gzip。都知道說要合併靜態資源,要減少HTTP請求,然而為什麼要減少HTTP請求,減少請求之後預計能改善多少性能,獲得多少收益呢?需要弄明白這些問題,也需要深入瞭解HTTP協定本身。
還有一個更有趣的問題,大家都說寫HTML的關鍵是語義化,那麼到底什麼是語義化呢?這個問題難住了不少同學。標籤要符合語義,這個答案看似簡單標準,但什麼樣的標籤才是符合語義?強調用 strong 不用 b?那如果有個外星文明,它們的語言裡 strong 相當於地球的 bold,bold 相當於地球的 strong,那麼它們究竟該用 strong 還是用 b?我們說 i 標籤是斜體的意思,那為什麼 fontawesome.io 拿它做 icon font 的標籤,這是不是“反語義”的?
過去很多地方農村有一種民間的染坊,製作染布的染料。這種染房裡面有一口很大的鐵缸,通常都要有一個身體非常強壯的工人拿一根很長的鐵棒在染缸裡面用力地敲擊,敲得越響,製作出來的染料顏色越鮮豔。 為什麼越用力敲打鐵缸染料就越好?染坊的人說這是祖祖輩輩傳下來的經驗,而事實上也是如此,真的染料的顏色和敲打用力有很大關係。直到有一天,一位從村裡走出去學化學的大學生,弄明白了原來只需要在染料中加適當比例的鐵屑,就能讓染料和含鐵元素氧化物產生化學反應而變得更鮮豔。原來祖祖輩輩傳下來的“儀式”實際上在真實原理面前只是一種信仰和宗教。同樣,如果我們不去瞭解技術的本質而止步于應用,那麼我們就只是技術宗教的信徒。所以在周愛民老師的《JavaScript 語言精髓與程式設計實踐》中說,電腦語言如同祭司手中的神杖,神杖換了,祭司還是祭司,世人還是會把頭叩得山響。祭司掌握了與神交流的方法,而世人只看見了神杖。
0 意見:
張貼留言