為什麼知乎前端圈普遍認為H5遊戲和H5展示的JSer(負責前端界面工作的程序員)不屬於前端工程師呢?

事實上,大家都使用HTML,CSS,JS這三種語言。唯一的區別就是他們使用canvas和webgl更多一些罷了。

在H5遊戲行業,你可以管他們叫做遊戲開發,ok的。

但問題來了,那麼展示類網站呢,比如廣告行業、比如企業級的宣傳領域,這類前端程序員依然被公司的HR定義為前端工程師啊。他們的工作流程就是做酷炫的動畫效果和互動效果因此也大量使用canvas2d和webgl技術,但又不如遊戲行業對於機制的要求那麼高。

然後悲劇了,他們的工作流程跟知乎前端們幾乎完全不一樣,使用的類庫也不一樣。找工作就變得非常難。各位互聯網前端,你們覺得廣告領域的前端和企業宣傳領域的前端應該叫什麼抬頭更合適呢?


題主自答

我本來想過兩天多看看大家的回答後再做總結,但因為可以修改,也憋不住還是提前自答一下我的問題吧。

我先說說我的經歷:

我從小學美術,後來考進了一所中專開設的電腦美術專業,在那裡差不多1998年左右學會使用flash 4.0並跟著Flash走了10多年。並在2000年左右學過網頁三劍客,學過dreamwear表格布局,並在那時候就開始接各類企業網站製作的外包進行製作。怎麼滴也算網頁製作這個領域的老司機了吧。

但我畢業後從一家電商公司去到了廣告行業後我的職業人生改變了。2005年前後市面上大量的出現了基於整站flash技術的網站開始遍布。對我影響最大的是一個叫做 2advanced 的網站,那時候我才意識到做網站這種富媒體應該要把它當做一個藝術作品來製作。2ad也是一個網頁設計製作的studio,在他們的作品集中,我看到過模擬非常真實的宇宙飛船效果,以及酷炫屌炸天的視覺編程粒子特效。

2ad v4版本 2004年

2ad v5版本 2006年

那個年代也有非常牛逼的幾位日本網站設計製作的藝術家,比如 中村勇吾(Yugo Nakamura)YUGOP.NET IS UNDER MAINTENANCE,和roxik城戸雅行http://roxik.com/

一時間我認為這個才是網頁設計(製作)的巔峰。

Yugo Nakamura作品

roxik作品

你可能認為這個跟前端有什麼關係?這些個都是用flash做的,甚至你認為這個跟開發都沒關係,都是美術設計和動畫的活,因此你始終帶著你目前所處領域對職能的認知看待我說的「當年」這件事了!

時間轉回到十多年前,flash這東西在中國剛風靡的時候出現了一群人叫做「閃客」(這個名字由閃客帝國網站的站長「編程浪子」高大勇定義的),這群閃客既會美術又會動畫還會編程也會做音樂。他們只是使用這個叫做flash的工具製作一切他們想表現的東西。他們大部分人用flash做MV卡通,也有人做網站。一時間Flash成了多媒體的代名詞。之前大家都使用authorwear的幻燈片和dircor來製作多媒體,在flash4.0後,幾乎flash可以做所有你想到的東西。所以學畫畫的,學編程的都來搞這個了,引發了一陣狂熱,因為當時互聯網帶寬也有限,除了那些純文字的網站以外,你突然能看到個會動的就很厲害,更何況flash中動的還那麼酷炫。我也為此買了不少動畫設計、as的書去學。但比起動畫我更喜歡as,因為我感覺控制起來更好玩。雖然在美術中專以及後來我大學念的多媒體都學過動畫設計專業,我甚至能逐幀的繪製如同迪斯尼卡通級別的逐幀動畫。

哦對了,順帶提一下,我接觸網頁那會兒,還沒有css呢,記得css這個東西被發明出來後大家一陣興奮。

諾干年後(2012),我去到了我如今的公司VML(當年的 im2.0)上班,也是因為對這兩個人的崇拜,第一張是閃客帝國站長編程浪子高大勇,閃客一詞的發明者;第二張是閃客小小,他啟發過無數人走進了視覺編程遊戲開發行業,就因為他的棍子武術的小人通過簡單的編程語句實現了遊戲開發,最主要的是他跟nike的官司後來贏了,成為了中國一個成功的藝術創作維權案。

當時勇哥是我們公司CTO,小小是公司頂層技術研發。

閃客裡面這些做網站的人就是我們這群早期的網頁設計(製作者),我們一般都會接了網站的單子自己消化從頁面設計、UI美工、動畫、重構、後端(當時是用asp語言)的所有工作,看似像不像今天的全棧工程師?甚至比全棧更牛的就是連美術都不需要,美術程序一個人搞定。

再後來,由於flash網站的體量越來越大,要求越來越高,行業出現了細分:設計的活、flash動畫的活、flash程序開發的活、後端的活都逐漸分開了。而我選擇了flash開發的活,因為我之前所說我更喜歡用程序去構建視覺。所以在整個工作流里我們被定為「前端開發工程師」這個工作。會涉及到flash+dom+css這幾項工具。

再後來,flash被喬布斯宣判了死刑,adobe最後也放棄了這個他們從macromedia重金購買的產品。但是公司不管,商業運作才不管你技術怎麼變革呢,趨勢就是企業minisite廣告在移動互聯網時代也要從PC站進入到移動端,利用當下流行的app(諸如微信、新浪微博)等社交工具引流提高交互效果。我們也被迫轉型H5(即放棄flash)。

最初因為我們也都是從網頁三劍客時代過來的。也經歷過漫長的網頁製作史,最初用Table切圖-&>div+css切圖才到了flash RIA時代。但在脫離flash後,動畫效果的僵硬(因為程序控制動畫非常不直觀,以及想要處理複雜動畫需要非常多的tween疊加),美術創意那邊始終不買賬,他們認為flash時代能做的你們現在做不了那就是你們技術上有問題水平不行,因此我們也就一直在找這個銜接——即可視化美術UI、以及布局和動畫跟程序交互脫離這件事情。這樣我們就可以讓昔日的動畫師做回自己的工作,而不用讓程序憑藉不直觀的感覺通過代碼去調整複雜的動畫效果。

在最初我們嘗試了序列圖,雪碧圖這些實現動畫效果(我想大家都經歷過,甚至很多前端現在都在用)但由於文件太大,最後決定使用了adobe flash CC自帶的creatjsTool,讓美術以及動畫師做完後導出,事實上動畫師這個工作他屬於美術人員他們壓根不懂代碼,甚至不管你技術怎麼實現。但他們的專業是優良的動畫感受,動畫節奏的把握,以及如同迪斯尼動畫品質的(預備動作、開始動作,結束動作,緩衝動作)中變形的拉伸以及通過動畫模擬物理等等,這些才是動畫師的專業,所以我看到答案中那些管我們叫動畫師的人我覺得他們工作中一定也是不屬於自己的事就是別人的事的做事風格吧,事實上動畫師不會寫代碼。

但我們用了creatjs後發現在動畫師使用mask以及變換後在手機端特別的卡,最後我們選擇了flash2x+egret方法。Flash2x Tool.

在選擇egret之前,我們也嘗試過lufy"s legend,以及pixi.js,這些canvas框架都非常完整的繼承了flash中的可視化編程模塊思想(即顯示列表)並保持跟Flash as3中類似的api結構,但由於flash2x團隊沒有支持pixi所以放棄了傳說中效率最高的pixi. lufy由於長期不維護自己的項目因此我們也沒有去使用。白鷺團隊是之前adobe傳教士7yue離開adobe後的加盟公司,並由之前負責as的人維護更新,並在2015年拿到了小米雷軍的順為資本的風投。因此選擇了egret.

在使用中,我們嘗試了egret的整套工具流,發現他自己的egret-inspector,因此覺得感覺跟chorme中開發者工具在dom中修改dom樹和css也差不了太多。這也就回答了大家覺得canvas不如dom中css所見即所得方便的問題。同樣操作inspector的參數後,頁面也會發生相對應的修改。

再後來,由於canvas因為是全屏刷新渲染的問題,因此對於H5網站的耗電問題一直是所有canvas引擎的坑。因此白鷺借鑒Flash中的局部自動臟矩形的經驗,重做了egret引擎,也就是所謂的egret3.0版本。但由於更新了底層不兼容了flash2x,這也讓2x項目的主創人員小可非常不悅,因此他決定自己寫個引擎不依賴於其他引擎了,這樣就不會由於其他引擎迭代中修改了最初架構設計中底層而導致不兼容的問題,這個引擎就是annieJs http://AnnieJS。

再後來在flash2x的群里大家逐漸發現彼此都是廣告領域的人彼此意識到這個工作流遊戲開發不會用,前端webapp開發也不會去使用,我們管我們的圈子叫「互動圈」-即互動廣告H5開發(暫且這麼叫吧,但事實上這個名稱在招聘類網站根本搜不到工作的)。

那看看我們公司在廣告這個領域是做些什麼樣的網頁前端吧:

比如基於threejs的淘寶雙11邀請函。(已下線)

比如基於flash+egret的百事新年活動。2017把樂帶回家 (用手機ua打開這個鏈接)

比如基於dom+css3d的adidas的某個產品宣傳網站

但我認為其實在WebApp這個領域,也根本沒必要把你的所有數據暴露給SEO的,比如你做個餓了么H5沒必要讓搜索引擎搜到你app中的XX黃燜雞的話,因此完全也可以使用canvas引擎製作。因此html其實最大的優勢只是在於語義化這件事。因此我諮詢了下flash2x的小可這個問題,他的回答如下:

雖然不排除我們彼此間的flash情懷,但事實上flash的確還是留下了很多不錯的製作富媒體應用的思路,這個不可否認。

在公司內部,我們名片都印成「web前端開發工程師」,但我們彼此都發現如果去其他招聘web前端開發工程師的地方找工作,我們根本沒法對號入座。我們也都關注所有的前端微信公眾號以及這個圈子裡有啥新技術,一旦有了我們都會去使用。但事實上最後能用到工作場景中的技術只有一部分。最初我們使用Jqurey+backbone+requirejs,然後用typescript或者es6構建項目模塊化,也會使用gulp,webpack自動化腳手架、模塊管理器跟打包工具等等,我們也學習angular,react,vue,service work,flex布局,響應式布局甚至微信小程序,但由於公司項目著重點不同因此MV框架中渲染成dom+CSS的結果我們沒法結合到實際項目中,但是redux思路被我們很早就用上了,當時學redux的時候我們就驚訝的發現就是flash時代的singalbus,但是singal早了不止10年,但這個思路我們一直沿用著backone里的events。在我想盡辦法結合MV框架的時候,我同事的話啟發了我,他說MV框架是給那些處理數據的前端使用的,我們是處理效果的前端,用他根本沒意義。

那麼問題來了,看下圖:

找了張鵝廠的。但事實上大家對前端的JD需求都是這樣的。

正如前面幾貼里有人回答,我也是做跟你一樣領域的,我平時自學他們要求的那些不就完事了么。那問題出現了,技術學習一般需要這個流程: 寫過hello world -&>做過demo-&>實踐過項目-&>踩過坑-&>燙平一切。這樣一來如果公司應用場景並不好的情況下,一般自學或者關注某個新技術而沒在項目中使用的話達到做過demo已經是不容易了。這樣一來用人單位如何信任你是個他們認為資深的前端工程師呢?

因此我的結論就是隔行如隔山,或許換崗也只能在原先的行業里遊走,跳出這個行業根本看不清方向。就比如我一個開發IOS已經8年多的老技術說的,他去高德地圖面試,結果人家說了個術語他居然從沒聽過。我認為領域或許是技術的一個壁壘。除非企業非常信任你能超強的學習能力,在沒人教的情況下很快就能得心應手,否則一般轉行意味著減薪降職。

那麼事實上呢?眾所周知,其實新崗位一直都在迭代,以前的頁面重構師(往往是女生的切圖員)也在被迫接受學習js成為前端。新技術層出不窮後導致了新崗位也在不斷誕生,比如看似又回到從前但完全不是一回事的全棧工程師。在這樣的背景下不得不堅持學習。1年前我們都在說前端領域3個月不學習基本上沒法和別人溝通了。但事實上我現在也逐漸意識到即使學了本質上也很難跟別人溝通,因此你跟別的前端就如同在一個平行宇宙你們能看到對方但彼此其實是摸不到的。這層阻礙是由於行業差別導致的崗位差異導致的。

因此我其實很不認可,坊間各類《前端學習路線圖》,比如下面這個

如果照這上面的結構初學者去學,一定可以當一輩子「初學者」了。哈哈。往往專家就會讓初學者往左走100米,往前走100米,然後往後走100米,再往右走100米,然後跟他說你已經了解到了這100平方里的知識架構了。但其實如果初學者往東走400米或許可以走更遠。但事實上萬一往東走400米後發現是條死路的情況依然還是有的。就比如以前學flash後不願學其他的最後死在flash這一條道上的人。所以走100平方或許不是壞事,我暫時就不多做評論了,各有利弊吧。

但從「大前端」的概念來看,說到底JSer所需要接觸的領域也越來越多,但對於公司內項目的應用場景肯定是有限的。其實可以根據項目需求的場景進行學習。把一個領域學精才是王道。

所以以我現在對前端這個領域的觀察來看前端應該分三類:

1、側重數據層前端:

行業:webAPP,一人多職的負責公司網站前後端的全棧(全棧我不認為只是因為公司為了省錢,但不排除這種情況);

這類前端更需要了解全棧知識(前後端,資料庫),懂nodejs,懂php,懂資料庫。要懂最新的雙向綁定MV以及組件化框架,比如angular,react,vue。還要懂資料庫。

這類前端的高階技術需要掌握數據結構,以及各種和數據有關的演算法。

需要數學知識:概率學、微積分等等。

2、側重表現層的前端:

行業:H5遊戲、H5展示、數據可視化方案、廣告活動配合的手機移動站點

這類前端需要了解canvas繪圖,flash動畫以及各類canvas引擎的表現技術,webGL,GLSL語言。

高階需要掌握計算機圖形學知識。

需要數學知識:離散數學和線性代數、平面幾何、立體幾何、射影幾何』、繪圖函數等等。

3、側重hybird的前端:

行業:初創型互聯網企業以及app跨平台方案供應商

這類前端要了解原生APP的開發方法。以及市面上各種打包方式,比如react-native,微信小程序,以及weex等技術。

高階需要掌握 c語言或者彙編語言等底層的開發技術,並編寫靈活的打包方案。

事實上第三類的前端也覆蓋第一類前端,而第二類的前端被知乎籠統的歸納為「遊戲設計師」。

相關鏈接:

為什麼業內不流行基於移動端的Web APP去使用H5整站 canvas技術?在這貼里我已經詳細的剖析我們團隊的工作流程和製作方法,有興趣的請點擊探討

小可的文章《如何優雅的用Flash開發Html5交互項目》知乎專欄

——————————————————————————————

補充一 2017.02.07

知乎網友:職位不中要,你管他叫什麼呢?老闆給你錢了么,給你了抬頭不重要吧。

答:對,在很多小公司初創型公司,一個人身兼多職很正常,但這就出現了個問題,人的經歷是有限的,尤其在行業細分越來越嚴重的時候,如何選擇自己的將來或許是一個需要考量的問題。我曾今在小公司上過班,經歷過幾乎就給一個網站設計的抬頭,結果連修電腦的事情也管這樣的工作。雖說這並沒什麼給錢就行了,但未來呢,你怎樣在你的簡歷里描述你做過的這份工作呢?要知道在海投海選的招聘市場里,你的簡歷或許在還沒有到達技術經理的郵箱就已經被HR的助理給篩掉了。道理很簡單他們覺得你之前的工作經歷跟他們不符合。這也就是我這篇里題目以及長篇大論的緣由。但是事實極有可能並不是你沒做過他們描述的工作,只是他們通過抬頭誤解了你的工作。這其實就引出了另一個很複雜的問題,技術類工作簡歷怎麼寫的問題。有時候真的很難辦,因為人的經歷有限。懂的多未必是好事,這也給招聘方帶來挑戰。

總之隨著時代的進步,崗位也在發生變化或許之後web前端的變化會更大都有可能。只有跟上,別掉隊了。

——————————————————————————

補充二 2017.02.08

知乎網友:你這類或許應該叫做「頁面重構師」更合適。

答:我理解的頁面重構這一職業起源於最初的大學計算機系不教photoshop,相反藝術院校的多媒體專業只教網頁三劍客而造成了畢業生去了公司後發現程序員不會切圖,然後就誕生了一個只負責切圖的工種。這種工種本身也不會寫代碼只會用dreamwear的所見即所得拉表格布局,後來在div+css的浪潮中逼著他們適應了看html的標籤,並學了通過css控制頁面。這種工種雖不會寫代碼但可以和.net程序員輕鬆合作製作整站。但隨著web2.0時代的到來,越來越多的內容通過cms、blog等工具生成後端的工作量逐漸變大。再加上SPA時代的到來,並讓很多公司看到了單頁的好處,所以要求前端就必須會js。

但事實上歸根到底就還是要回到高等教育中的職業教育問題,我們都知道目前的大學教育體系來自於中世紀教會,教育本質上是一種約束機制。再加上社會的變化,本質上大學的教育內容早就跟社會脫節了。大學中的系和專業的分類,最終導致了培養出來什麼樣的職業人類。

我的同事就常說,人的職業就跟遊戲里一樣是分屬性的,這個基礎屬性在你畢業時候就已經寫好了,畢業後的努力都只是在這個屬性上加成,就比如你的天生職業是個「肉盾」,你拚命的練習「遠程」,遠程的技能是可以提高,然後你找了一個遠程的工作但怎麼都比不過別人。我們稱他為選錯行了。

但事實上社會的進步導致了跨界需求越來越大,甚至很多界是曾經根本不存在的。這時候公司就會想到去鄰進專業的職業類型里招人。這時候擺在求職者面前的是繼續學習這條路。回到上一段的比喻,如果肉盾的你,訓練了遠程技能或許短時間沒用。但不等於未來沒用。產業的進步一定會產生新的機會,我把這一種屬性的提高叫做「升階」。這時候人的比較就更複雜了,這就是我文中提到的那個向東走400米,還是走100平方的道理一樣。走400米那叫升級,你單項的級別比別人高,但不排斥科技進步導致的變化。這個玩過即時戰略遊戲的玩家應該心裡都清楚。

學校對人基礎屬性的決定因素或許越來越大,但社會對跨界人才的需求也會越來越饑渴。這就是目前甚至以後企業招人越來越難的情況。大家都只注意自己在升級,而不考慮升階(比如提升科技)。因此出現了前陣子的熱帖 如何評價真阿當的文章:《2016年前端技術觀察》? - 前端開發 - 知乎,阿當老師的保守那貼也都提到了,他其實就是站在過去看現在,但當下是目前這種劃分結構也不代表未來,所以如果我們保持覺得如今的技術架構不去學習,不久我們就會變成他,認為過去很好很滿足,之後發明的一切都沒用的看法。

僅僅我個人觀點,僅供參考。

後面待補充......


關於「職位的定義」這件事吧,其實它就是個社會約定。你說它重要吧它也不重要,它既不限制你學習其他東西,也不能涵蓋一個人的所有能力。你說它不重要吧它其實也挺重要的,職位是讓別人了解到你的專業能力的最快速方式,無論是招聘還是自我介紹啥的。

別說 Canvas, WebGL 了,就是當年的 Flash,VBScript,也當然是屬於 Web 前端技術的範疇內的。但職位既然是一個社會性的東西,就難免會出現「主流認知」。目前更多數的前端工程師在從事的還是與 HTML/CSS/DOM 打交道的工作,所以這個 title 更容易在大家的認知里被映射為與 HTML/CSS/DOM 相關的能力,僅此而已。

既然題主跳出來說了不少,我也就再多說兩句吧。

第一,別張口閉口 H5 的,我在很早以前答過一題「關於 HTML5 被簡稱做 H5 ,你怎麼看?」,裡面提到了對「H5」這個爛詞的用法分歧有多大,也側面說明了如果大家認為「做 H5 的人」都是「前端工程師」的話,「前端工程師」的職能分歧會有多大。

第二,我想幫 @賀師俊 澄清一下,題主 refer 的「在瀏覽器中用 Canvas 和 WebGL 開發遊戲還能算是前端開發嗎?」,賀老回答「我的意見,嚴格來說,不算Web前端開發,而是遊戲開發」我覺得沒毛病,因為原題的 scope 就只是「遊戲開發」而沒有題主一直在說的「廣告與企業展示領域」。說實話,「廣告與企業展示領域」與 「遊戲開發」的難度完全不是一個量級的,前者的複雜度完全就是後者的一個子集。

第三,作為一個老 Flasher,我當然知道 Flash 一統動畫、互動展示、遊戲、網站前端、企業級應用、RIA 的黃金年代,但我也當然知道這幾個領域對工程師的要求就根本不在一個維度的……簡單的廣告展示說白了你就是拿著 AS2 的 gotoAndPlay() 硬懟 MovieClip 你也懟得出來,所以別老拿 Flash 說事。

不嚴謹的類比一下:

  • 「主流的前端開發」==「FL 網站前端、企業級應用、RIA」== 「business development」,側重於解決「Data + UI」的軟體工程問題
  • 「HTML5 遊戲開發」== 「FL 遊戲」== 「game development」,遊戲開發作為軟體工程中一個極為特殊的門類,側重解決諸如圖形、動畫、物理、粒子等…
  • 「HTML5 互動展示」== 「FL 互動展示」,由於複雜度和性能要求都為遊戲開發的子集,技術上反而條條大路通羅馬(畢竟用 DOM 寫個打飛機這樣的遊戲也是毫無壓力的),主要側重效果的實現。

最後,題目本身就是不成立的,沒人說你們不是「前端工程師」。如果你們想為「企業廣告互動展示行業的前端工程師」換一個名字,我的老東家 LxU Studio 用的 「HTML5 互動工程師」我覺得還不錯。開發 HTML5 遊戲的肯定都是自詡「HTML5 遊戲開發工程師」而不是「前端工程師」的,畢竟 skill set 的差別擺在那。

任何標籤都是雙刃劍,就連「軟體工程師」這個詞都頗有爭議,又何況是「前端工程師」呢。要知道前端工程師的變種諸如「UI 工程師」、「產品工程師」、神TM「創業工程師」、「React 工程師」、「Vue 工程師」從來就沒少過。

干自己的活,想取啥名就取啥名,讓別人猜去吧,你的能力不是由你的 title 決定的。


為毛這麼關心title ,要是公司能給我一個月幾十萬工資,叫我狗都行 ? ????


我認為只要是瀏覽器側或者是終端側的開發都算大前端。

只不過進一步的細分應該怎麼做似乎的確一直爭議挺大。知乎上也總有很多聲音說不需要進一步細分,但我是不認可的,這裡不展開先。

從現在的討論看起來我覺得至少偏應用層方向可以分為幾個類型: 前端開發,體驗開發(頁面重構),遊戲開發。而差異於應用層,可以再添加運營開發,可視化工程師,架構師,前端運維,框架工程師等等。而 React Native / Weex 會不會對崗位細分產生更多的影響尤未可知,但我看到的是 Ract Native 和 React Web 之間其實有相互影響的趨勢,現在有些有區別的東西以後未必會進一步分化,而可能融合起來,那麼劃分出 Hybrid 工程師可能就不那麼妥當了。

我覺得題主描述的更多是「體驗工程師」的範疇,也是之前知乎有討論過的頁面重構這個崗位:《如何看待騰訊等大公司前端分設JS與重構兩個崗位對公司和對個人的影響?》。但我自己的感覺是這個崗位目前似乎有些被輕視,並且被刻意分割(比如頁面重構可以少學點 JS 的說法);再加上當前大環境上的確對於體驗細節和動效還沒有太多的述求,就算是頁面重構那邊的工作也還是以量大管飽為主,以至於很多頁面重構工程師戲稱自己為「頁面仔」——大家可以參照對比下「程序猿/設計獅/碼農」這類的說法,我覺得不能只當戲說。

現在似乎已經開始有設計團隊希望尋找所謂「動效工程師」,可能也算是一種不錯的描述。

但是,從招聘來看,我認為現在大多數的 HR 們已經被前端的發展完全甩開,尤其是大公司內的情況,比如我這邊招聘已經基本不指望 HR …… 而我自己的經驗,我基本已經不看 title 了(雖然基本上 title 清一色的前端開發/Web開發),而更多看經歷、項目和技術描述。而如果我看到有人項目和技術描述里寫比較多的 canvas / H5 動效之類的,是會考慮招進來做前端的,在我看來有專攻的人會比純粹 jQuery / Angular 的前端靠譜太多。


狹義前端一般指跟CSS、DOM或DOM衍生技術打交道的人。

廣義前端定義太不統一,不結合語境沒法明確。


寫什麼代碼不是寫,你這麼在乎 title 幹啥。

在乎 title 有個問題,

一旦你把自己定位為「前端」,是不是你就不會去看 C 語言、彙編?

一旦你把自己定位為「後端」,是不是你就不會去看 Canvas?

這有點類似「作繭自縛」。


程序員不該糾結於網路上對自己職業的名詞定義,好好寫好自己的代碼哈。其實大家的鼻祖都是切圖的,俗稱:美工


謝邀,我並沒這樣認為,但我大約知道你在想什麼。我曾經有過這樣的經歷。

我第一次和前端打交道,是把一個 C++ 編寫的桌面軟體封裝成 ActiveX 插件。

後來我把那個軟體肢解了,自繪模塊和 protocol 模塊封裝成 ActiveX/npapi,其他的列表展示和增刪改查改為 html 實現。

再後來插件模塊越來越小,最後只保留了視頻解碼/渲染和 udp 通訊。自繪的 UI 組件,用 canvas 實現代替了 C++ 實現。整個程序變成了一個基於 backbone 的單頁應用。

再再後來我把這套東西封裝進了一個基於 libcef 架構的外殼,輔以一部分 port 到 js 中的 IO api,整體代替了那個 C++ 實現的桌面軟體。

這個項目撒手不管之後,我又做了個差不多的東西,這次完全把插件扔掉了,移動端整個就是個網頁,桌面端視頻渲染我用了個 flash 代替(如果是現在做,連 flash 都不用了, canvas + media source extension 搞定)。backbone 也被我扔掉了,一部分換成了 react,一部分換成了自己寫的框架。

把網頁裝進殼裡的事情我也又幹了一次,這次是移動端,我就編寫了個 js/android/ios 的消息 bridge,其他的都不管了。

在那份工作的最後,我已經完全不管網頁的事兒了。除了開會審需求,看看技術方案,自己開發的項目基本上和前端三大件沒關係,而是局限在 webgl/canvas 中。

說起來我真沒怎麼塌下心來做做網頁,但我一直覺得我就是前端工程師,如假包換,直到有一天我不想幹了,辭職找工作。

我發現對口的工作並不多(除非在行業內找,但是我的前東家幾乎是那個行業里最好的),我又不大喜歡做那種動畫推廣頁,能找到的崗位,大部分還是「做網頁」的。

第一個問題,我好像不大懂 css……hack、瀏覽器兼容、使用慣例,這些事我關注的都比較有限。

第二個問題,有次朋友給我推薦了一個老家的公司,我思想心切去面試,面試官給我展示了一個前端組件,大約就是一個表頭能滑動的列表組件,問我封裝一個這個要多久?

說實話我不大知道……我最近這幾年就沒做過「單純」的開發,主要精力都放在「踩坑」和思考需要做什麼上了。我琢磨著,你一個通用組件,怎麼不得花個把禮拜?可是人家說不行,說「專科畢業的花一天就能搞定」。這顯然跟學歷沒關係對吧,而且,我也沒應聘做表格的崗位嘛。

但問題在於,這個行業的從業者,普遍認為快速編寫表格組件是基本功。基本功不良,其他都無從談起。這就是題主你提到的問題的關鍵。

這是個關注點的問題。根據以往的工作經驗,我真的不太關心一個東西最快要多久能做出來,我關心的是一個亂七八糟,未知情況很多的東西通過哪些手段能給它 hold 住,或者怎麼做一個固化的東西給其他人屏蔽掉複雜性。但是,大部分招聘「前端工程師」的需求方,和我們的關注點並不一樣,他們需要的是一種基於既有工具的高速產出狀態。我覺得做遊戲/工具/類庫的人,可能也會遇到這個問題。

後來我想了一下,別人再問我是幹嘛的,我就告訴他「我做網頁裡面你看不見的那部分」,等於明確告訴對方,你看見的那部分,我不擅長,以免互相浪費時間。


崗位技能包含關係圖,越往左技能越全面。


不,業內的確不叫前端,就是為了區分……

他們叫動畫工程師/創意設計/美術總監……

更老一點有叫Flash工程師什麼的……


程序員別太低估自己的學習能力,也別被 title 束縛了自己的技能樹

我們團隊的產品是 Cocos Creator,一個用前端技術開發的跨平台遊戲開發工具,50%的代碼是 JavaScript,界面是 HTML+CSS (框架用了 Vue),為了發布遊戲到原生還要有配套的 C++ 遊戲引擎。

團隊里大部分人都是通吃 JS 和 C++ 的,所有人都能用 HTML 寫界面,所有人都能開發遊戲,有兩三個前端方面的專家,負責解決高端的界面框架和 CSS 問題。大家之前來自五湖四海,從主機遊戲、端游、手游、flash,到真正做網頁開發的前端,雖然背景和初始技能相差不少,但每個人都願意互相學習,持續成長。

題主所說的 title 差異造成的技能差異,比起網頁開發 vs 遊戲開發,JS vs C++ 都小太多了,通過自學很容易就能補上。至於要做某一特定領域的專家,那是另外一回事,但按照專家們的造詣,他們根本不會糾結 title 什麼的。


反對所有說title不重要的答案。你作為程序員可以只關心這個職位所需的技能,但是公司和業界必須要給一個準確的title來直觀的描述該職位所乾的事情。不然分那麼多工程師幹嘛?什麼Java工程師,前端工程師,演算法工程師,系統工程師,都叫程序員好了,反正title不重要,寫代碼就行了。

另外感覺很多回答都是答非所問,問題是為什麼知乎前端圈普遍認為這類人不屬於前端工程師,想給這類人找個更合適的title,但是大家卻都聚焦到了「title重不重要」這個話題。

我的觀點,這類人依然是前端工程師,但不是現在用Vue.js, React來寫業務代碼的Web前端工程師。之所以有人覺得不是只是對前端工程師這一職業的理解有偏差而已,而且「前端工程師」本身這一職位就沒有一個統一的定義也是造成這種理解偏差的重要原因。前端工程師的範疇已經非常廣了,現在淘寶還出了端工程師,Web前端和客戶端都會涉及,廣義上來講,所有直接與客戶打交道的都算前端,搞H5遊戲的自然也是前端工程師,只是他們的工作內容更接近於遊戲開發,技術棧選擇了web而已。

所以要細分,而且我認為未來前端所承擔的東西會越來越大,劃分出更細的title是必然的事。

再回到題主的回答,H5遊戲工程師叫Web遊戲開發工程師或者Web動畫工程師會更恰當一些(相較於之前的Flash動畫工程師)。還有廣告領域的前端和企業宣傳領域的前端跟H5遊戲也不是一個概念,他們乾的活其實跟傳統的網頁開發工程師是一樣的,叫這個title更合適。


如果給你負責技術團隊,你會怎麼招人呢?

遊戲 和 常規的前端開發本身就是有天然隔離的。


前端不過是一個名字,一般指web前端(其實其他領域也有前端比如SLAM前端只不過知名度太低),而web前端市場上需求最多還是傳統的使用css dom和js進行頁面處理的工作內容。所以一般說前端大多時候指的還是這個狹義的前端,相比較來說純粹的canvas,webgl方向還是有很大區別的。

我覺得別人認不認同這個概念不重要,重點是canvas,webgl這些技能點面向的領域相對狹窄,對於很多純粹做dom開發的工作沒多大價值,但在部分領域如你說的遊戲和廣告也是剛需。對於自己來說要不要點一下其他更通用的技能點需要個人權衡。這裡有個深度優先或者廣度優先的搭配問題。

深度優先的角度,canvas webgl可以深入探索,opengl學好了也可以無縫對接ios 安卓的圖形渲染底層。threejs的渲染,節點管理,裁剪,節點排序,不同模型解析,模型動畫解析等每個模塊都可以花時間解讀和修改。甚至webrtc可以從canvas拿到攝像頭的圖像用於圖像識別(我的專欄正在寫這個)我相信這些東西搞得好雖然領域狹窄但也不至於不好找工作。

廣度上就可以在這個之外多了解些通用的前端開發,vue react 之類的接觸下,用js生成native app嘗試下,資料庫服務端什麼的也做做,通過這些可以在本職工作以外,逐步和主流的前端靠攏,未來一專多能,找工作的範圍就大了。

個人認為選擇上述那一條路其實也不是特別重要,重點是肯花時間學東西,肯費腦子想出路這件事情本身。


現在的前端圈基本是處於融合且分離的矛盾亂燉狀態,以前搞flash的、搞設計的、搞遊戲的甚至是製藥的(並沒有其他意思)都有在接觸或者間接的了解到了前端。

打個比方,使用RGB色彩計數,那麼很明顯,就會有255*255*255種色彩的組合,這麼多種顏色就好比世間的職業,只要某個參數不同最後的色彩就不同,參數差的遠一點,視覺上可能帶來的就是顏色差的遠了。我說這個是什麼意思呢?

所謂的title就是顏色,紅橙黃綠藍靛紫,紅又分深紅、淺紅,黃又分深黃、淡黃,顏色多了,世間才會有彩虹。

記得小時候數學老師在黑板上畫了個圓,然後在圓里用粉筆點了很多點,問我們,你們看到了什麼? 結果不出意料,很多人都說一個圓,圓里有點。我說了什麼呢?我說我看到了圓里的空白。老師呵呵一笑。

他說,空白,在圓外更多。


我在2016年做的工作應該就是介於企業展示和H5遊戲之間的,並不認為自己是個假的Web前端。

2016年初剛入職的時候,確實是做企業展示比較多,之前大部分都是簡單的Swiper插件做的,或者是一些簡單的Canvas圖片合成分享,這些沒太多技術含量可言。

後來我慢慢在公司里推崇使用Egret、Phaser、PlayCanvas等遊戲開發框架來進一步實現更加複雜的交互展示。

但就算採用了egret,踩適配各大機型的坑仍然不少。而且頁面開發的時候,canvas的開發效率比dom低太多,趕著活動上線往往都會採用dom為主,canvas為輔的混合編寫方案。這就涉及到組件化、模塊化概念,例如: 在canvas上實現輸入框輸入組件、下拉組件,它們如果封裝成模塊,能非常方便的重構以及後續復用。

做企業展示總不能一直一成不變吧。如果創意部門有好的創意,我都儘可能的將之實現,模塊化工作能夠非常方便的以不變應萬變。使用webpack和gulp結合,統一開發和發布流程我也是覺得很有必要的。這個難道不是前端常見的工作流?

雖然公司分配的主要任務就是切圖和實現動畫,但我就要一直弔死在這棵樹上?我喜歡用腳本來節約時間,像js腳本和ps腳本都有寫。空閑時間還會研究遊戲引擎的實現,哪怕以後不寫引擎,對於寫出性能和維護良好的代碼依然非常有幫助。

我後半年寫的js比較多,因為涉及到複雜的交互邏輯,像元素動畫可以用css實現,後面我發現js實現性能不輸於css3,維護起來也要好很多,於是我大部分動畫都是js實現。前端常見的回調地獄在動畫實現上一樣存在,所以我先後嘗試用Promise和await來實現流程的同步。

總結,我並不認為自己與所謂主流前端開發有太大區別,唯一的區別就是有些人覺得做的比較雜而已。因為前端不是還分重構和js工程師嗎?企業展示就是兩者都需要,可以側重css,也可以側重js。

對於找工作,雖然暫時沒有這想法,但是我並不認為自己會不好找工作。讓我評估一下自己的能力的話,我現在功能基本上可以實現,更關注的是代碼的優雅實現,像設計模式和演算法這種。主流能做的我也應該做的下,前端推崇的angular、react、vue等都有在研究,雖然企業展示幾乎不可能用到。

我才不信不好找工作這個邪。。。


TGideas-騰訊遊戲官方設計團隊

你看這個裡面的職位是否符合你的情況?


個人的分法 前端分為數據向和交互向

題主的問題在我看來屬交互向

僅供參考


「前端」很重要嗎,我覺得「工程師」重要一點


按面向的領域來區分程序員 比按語言來區分更靠譜 不是么?


推薦閱讀:

碧藍幻想(グランブルーファン)能否成為第二個艦(艦隊これくしょん)?
手機遊戲、網頁遊戲如何盈利?
用flash寫的遊戲都可以用html5來重寫么?
HTML5 會不會代替 Flash 作為 Web game 的開發語言?
有哪些有毒的網路遊戲機制呢?

TAG:前端開發 | 網頁遊戲 | HTML5 | 前端工程師 | H5廣告 |