入坑前端到今天也將近兩年半了,這兩天突然想到了第一次面試時面試官的一個問題-------你怎樣理解前端的工作?
對于當(dāng)時我一個小白而言完全是胡說一通,詞不達(dá)意,搞得面試官一臉懵逼,現(xiàn)在想想那可能就叫尬聊吧……時隔兩年在不斷爬坑中對這個問題有了自己新的認(rèn)識,今天趁著上午沒什么事情,寫下這篇博客,想到哪寫到哪,談一談我所理解的前端。
技術(shù)方面:
第一階段(新手村)
一個前端初學(xué)者必須所掌握的核心技能HTML,CSS,JavaScript,這三項是前端最底層的技術(shù)支持了,如果你看幾年前的回答應(yīng)該還會有一項jquery,但我個人覺得現(xiàn)階段的前端圈jquery可以不作為必備技能,雖然Jquery對新人很友好,但現(xiàn)在mvvm框架滿天飛Vue, Angular,React三分天下,用起來要比直接操作dom的jquery舒服很多,當(dāng)然在這個階段是打基礎(chǔ)的階段框架,類庫什么的可以往后靠。原生Js永遠(yuǎn)都是重中之重,只會用框架不懂底層原理永遠(yuǎn)達(dá)不到精通,推薦紅寶書Javascript高級程序設(shè)計,吃透紅寶書打牢基礎(chǔ)再去學(xué)習(xí)其他框架,媽媽就再也不用擔(dān)心你的學(xué)習(xí)。接下來還有一項額外的技能PhotoShop,要知道ps可以不用去做,但必須要會,而且在一些小公司里UI只會丟給你一個PSD,沒有什么Sketch之類的東西,也沒人幫你切圖,這些都需要你自己來處理,所以ps是額外的必備技能。
第二階段(副本開啟)
進(jìn)入告訴成長階段,開始打怪升級,這個階段的時間持續(xù)最長,在這期間你需要爬無數(shù)的坑,積累各種失敗的經(jīng)驗,一關(guān)一關(guān)的往下刷,關(guān)于HTML和CSS你需要知道各種UI框架的使用,如BootStrap,ElementUI……,關(guān)于不同圖片的格式標(biāo)準(zhǔn),瀏覽器的兼容性,移動和pc端的區(qū)別,響應(yīng)式布局,flex布局,柵格布局,對設(shè)計審美的提升…等關(guān)于提高你頁面開發(fā)效率的各種技能,UI框架這一塊比較雜選自己感興趣的看看就好。
Js方面這時候已經(jīng)可以開始挑一種主流框架進(jìn)行學(xué)習(xí)了,前面提到的Vue, Angular,React都是不錯的選擇, 并且對面向?qū)ο缶幊?對象封裝,原型繼承,閉包,同步異步差異,等一系列的js進(jìn)階知識應(yīng)該進(jìn)行深入了解,同時對es6標(biāo)準(zhǔn)也需要了解,可以參考阮一峰老師的es6入門,書中包含了es6的各種新特性,默認(rèn)參數(shù),模版表達(dá)式,多行字符串,拆包表達(dá)式,改進(jìn)的對象表達(dá)式,箭頭函數(shù) =&>,Promise,塊級作用域的let和const,class類,模塊化等常用特性.可以做到自己封裝組件,編寫維護(hù)性高,可讀性強(qiáng)的代碼. 而且在平時需要多看別人寫的代碼,汲取別人的優(yōu)點,并且閱讀大量的技術(shù)文獻(xiàn),最重要的是要總結(jié)自己的問題,比如說你遇到一個bug,迷迷糊糊的就解決了,下一次你又遇到相同的問題,這個時候有沒有對之前問題進(jìn)行總結(jié)的效果就看出來了.
第三階段及更高級
了解各種設(shè)計模式,看得懂各種框架源碼,前后端通吃,可以自己手寫js框架...好吧,我還沒到這個階段就不寫了..............
在工作中
一個完整的的工作流程應(yīng)該是:
立項--項目研討--需求確認(rèn)----產(chǎn)品出原型----后臺開發(fā)同時設(shè)計師拿到原型進(jìn)行UI設(shè)計--前端開始開發(fā)--測試提bug--改bug--重復(fù)n次--產(chǎn)品驗收
上面只是一套籠統(tǒng)的流程,至少在前端這方面我們需要做的有梳理業(yè)務(wù)邏輯并理解業(yè)務(wù)邏輯,這對你后面的開發(fā)很有用處,同時根據(jù)需求進(jìn)行應(yīng)用技術(shù)的選擇,項目結(jié)構(gòu)的劃分,需求模塊的劃分,完整項目的搭建,當(dāng)然現(xiàn)在有很多可以自動化構(gòu)建工具可以節(jié)省你很多時間, 現(xiàn)在的前端開發(fā)已經(jīng)不再僅僅只是靜態(tài)網(wǎng)頁的開發(fā)了,日新月異的前端技術(shù)已經(jīng)讓前端代碼的邏輯和交互效果越來越復(fù)雜,更加的不易于管理,模塊化開發(fā)和預(yù)處理框架把項目分成若干個小模塊,增加了最后發(fā)布的困難,沒有一個統(tǒng)一的標(biāo)準(zhǔn),讓前端的項目結(jié)構(gòu)千奇百怪。前端自動化構(gòu)建在整個項目開發(fā)中越來越重要,但新手入門還是應(yīng)該去嘗試自己一點一點的去構(gòu)建一個項目,等你多做幾個項目覺得每次都這樣重復(fù)好煩,自然而然的就入了自動化構(gòu)建的坑,畢竟這樣能讓你更深刻的理解,為什么要使用自動化構(gòu)建……比如我們主棧是vue,我們最常用的就是vue-cli,自動化工具有很多選擇如Bower、Gulp、Grunt、node、yeoman,我們應(yīng)該根據(jù)需求選擇最適合自己的去研究。
溝通
前端是團(tuán)隊里最應(yīng)該學(xué)會溝通的人,界面有問題需要和UI溝通,數(shù)據(jù)有問題需要和后臺溝通,功能有問題需要和產(chǎn)品溝通,測試的時候給你提bug你還需要和測試溝通……emmm心累
溝通ui
前端是最接近用戶的人,用戶對一個網(wǎng)站,軟件最直觀的感受是反映到前端的,可能你會說最直觀的不應(yīng)該是UI設(shè)計師么,你要知道我是前端我為設(shè)計師代言!!!
和UI的溝通,在工作中我們不應(yīng)該是被動的實現(xiàn)UI的設(shè)計,而是應(yīng)該合理化的提出自己的想法,不然日后返工浪費的是雙方的時間,比如最開始剛來公司的時候,項目里對一些小圖標(biāo)的圖片還在使用雪碧圖,但很明顯隨著瀏覽器的支持越來越好,svg和字體圖標(biāo)慢慢占據(jù)主流,我在阿里巴巴圖標(biāo)庫建了一個項目把UI也拉了進(jìn)來,UI把他用到的圖標(biāo)直接添加進(jìn)項目,前端直接從項目生成字體圖標(biāo)引入到項目,絕逼要比自己慢慢切圖,扣圖標(biāo),合并雪碧圖要省事的多,而且用起來也特別爽,想改顏色就改顏色。再比如你需要做一個圖表,用到了echarts,你完全可以讓UI基于echarts去設(shè)計樣式,而不是讓他在那里自由發(fā)揮,因為你永遠(yuǎn)不知道設(shè)計師的腦子里裝了多少創(chuàng)意,這樣節(jié)省的是兩個人的時間,不會出現(xiàn)他做好樣式而你實現(xiàn)不了的尷尬。
溝通產(chǎn)品
一般來說程序員和產(chǎn)品經(jīng)理之間是最難溝通的,只有相殺沒有相愛,畢竟子曾經(jīng)曰過:’這個需求很簡單,怎么實現(xiàn)我不管,明天上線!’,
下面引用lensuntop的一篇文章,我覺得寫的非常好
記得有一個段子:
產(chǎn)品汪:程序猿,我們來實現(xiàn)一個緊急需求?
程序猿:請說。
產(chǎn)品汪:請根據(jù)手機(jī)殼的顏色,來實現(xiàn)APP啟動的顏色。
程序猿已經(jīng)在風(fēng)中凌亂。。。
從這個段子中多少能折射出產(chǎn)品和技術(shù)之間的各種激情“火花”。產(chǎn)品經(jīng)理眼中簡單的需求,而在我們看來是不可能實現(xiàn)的。而程序員也無法理解產(chǎn)品經(jīng)理為什么要實現(xiàn)這樣的需求。那么,站在一個程序員的角度應(yīng)該怎么樣和產(chǎn)品經(jīng)理溝通呢?
1.深刻理解需求,清楚需求的動機(jī)和緣由
我們程序員一定會在問,產(chǎn)品經(jīng)理為什么想要根據(jù)手機(jī)殼的顏色來動態(tài)實現(xiàn)APP啟動時的顏色。既然想聽解析,那就先別急著說出自己的結(jié)論——技術(shù)上無法實現(xiàn)!既然有疑問,那就先將自己的疑問解決。
2.換位思考
產(chǎn)品有產(chǎn)品的角度。作為程序員我們追求的是什么?邏輯正確,更快,更容易擴(kuò)展。產(chǎn)品追求的是什么?說實話,我自己沒有深刻去思考過這個問題。站在一個慣性的角度思考可以想到:一個產(chǎn)品為什么存在,他的存在能解決什么問題,他的用戶體驗好不好。這些才是決定一個產(chǎn)品的核心價值。畢竟工作性質(zhì)影響了一個人的思維邏輯,所以這時候,我們能站在一個產(chǎn)品的角度去思考每一個需求,便顯得尤其重要。
3.不放過每一個細(xì)節(jié)
作為程序員想必對這句話都是深深認(rèn)同的。因為一個標(biāo)點符號或者類型的錯誤,會導(dǎo)致一個自己意想不到的bug。產(chǎn)品經(jīng)理在設(shè)計一個產(chǎn)品的時候,都是從大方向去想問題的,大方向沒有錯就行了,細(xì)節(jié)脫離不了大方向。這是他們想的。但是對于程序來說,卻萬萬不能。因為一個細(xì)節(jié)的邏輯往往決定了整個大方向。舉個例子:有一個需求,用戶的作品需要提交審核,經(jīng)過審核才可以讓所有人看到。當(dāng)產(chǎn)品經(jīng)理交這個需求給你的時候,你能察覺到什么問題了嗎?這里面有幾個細(xì)節(jié):1.用戶提交審核后,用戶可以不可以再編輯作品;2.作品是否會多次審核;3.需不需要記錄審核歷史;4.用戶作品是否需要有版本的控制,如要產(chǎn)生版本,版本又是如何產(chǎn)生的;5.審核通過后,用戶可以不可以再修改作品,若不可以,那么是不是其他人就看不見用戶作品......話說回來這只是一個簡單的邏輯需求!但是涉及的細(xì)節(jié)卻是太多太多。我們往往在編碼的時候?qū)懖幌氯ィ褪且驗榻o的需求太模糊,沒有細(xì)化到點上。
4.換一種方式說“不能實現(xiàn)”
不能實現(xiàn),這句話想必我們都是經(jīng)常說。但是直接對產(chǎn)品經(jīng)理說,沒準(zhǔn)會讓產(chǎn)品經(jīng)理抓狂。因為我們會讓他們覺得他們提出的任何需求,我們都不能實現(xiàn)。但是事實并非如此,因為不能實現(xiàn)是有條件的,比如時間不夠。所以我們要先認(rèn)同產(chǎn)品經(jīng)理的觀點(“能實現(xiàn)”),再提出自己實現(xiàn)他的需求的條件是什么。因為現(xiàn)實產(chǎn)品經(jīng)理也不會經(jīng)常犯傻,經(jīng)常提出一些不合理的需求,但是面對需求,我們需要評估實現(xiàn)的時間,而且這個時間不是那么容易評估準(zhǔn)確的。
5.當(dāng)遇到不合理的需求時,積極尋求替換方案
就拿段子里面的需求來說,讓我們提供幾種APP皮膚給用戶進(jìn)行選擇,肯定比原先的需求容易實現(xiàn),而且也更加符合人性化。說另外一個故事,有家智能家居的公司,要實現(xiàn)廚房水龍頭,根據(jù)人聲說水溫幾度,就可以達(dá)到幾度。換個角度想,你會感覺出40度和45度水的溫差嗎?而且根據(jù)人聲判斷,這又涉及到聲音識別系統(tǒng),你要兼容多少種語言?其實我就覺得左右切換就挺智能的,完全沒有必要搞的那么復(fù)雜。所以程序員要找到一種更好更容易實現(xiàn)的方法。別給產(chǎn)品經(jīng)理的想當(dāng)然自亂陣腳。
6.必須遵循文檔精神
在開發(fā)的時候,我們往往會另外與產(chǎn)品經(jīng)理進(jìn)行細(xì)節(jié)化的討論。但是這種討論結(jié)果,我們并沒有記錄到產(chǎn)品原型里面或者需求列表里面。但是過了幾個月后,我們自己往往會忘記我們當(dāng)初為什么會討論出這樣或者那樣的一個細(xì)節(jié)。所以一切的需求必須是根據(jù)的。從另一方面來說,也保障了雙方的利益,別等到出問題的時候,不知道是誰的責(zé)任,而在這一方面,程序員往往很吃虧。
6.對自己的程序有一顆藝術(shù)的心
有人說過,當(dāng)需求影響到代碼擴(kuò)展性的時候,會首先砍需求,而不是改代碼!在一定程度上,我是認(rèn)同這句話的。在我看來,程序是一件思想上的作品,要達(dá)到藝術(shù)的境界,從功能、體驗和邏輯上都必須是合情合理的。就像一件藝術(shù)品一樣,看起來是渾然天成的!因為一件看起來很“丑陋”作品,一定是不符合人的邏輯和習(xí)慣的。
寫到最后,感覺繞回到程序員自身了。其實跟產(chǎn)品經(jīng)理溝通,最重要的是要明白到:我們是在解決問題,而不是在制造問題!主要抱著這個核心,一切問題迎刃而解
一般來說和后臺溝通沒那么多的麻煩,約定好規(guī)則后,一般來說你們是通過api來溝通的,但當(dāng)你調(diào)試接口時,出現(xiàn)一些未知的,你感覺不是自己問題的時候,及時的溝通后臺是最明智的。
責(zé)任劃分
相信大家在這一點上都深有感觸,因為前端是最后一關(guān),所有的需求都是在前端手里變成一個具體的產(chǎn)品的,這樣也就導(dǎo)致你很容易變成背鍋俠,導(dǎo)致項目延期的情況有很多種,設(shè)計圖不及時,后臺數(shù)據(jù)出現(xiàn)問題,產(chǎn)品臨時改需求,如果你不能證明是這些問題導(dǎo)致項目延期,這個鍋你必背無疑,唯一的方法就是--à口頭確認(rèn)--à發(fā)email到責(zé)任人確認(rèn)--à通知上級,千萬不要覺得這個麻煩,出問題的時候會比這個更麻煩的,
寫不動了,以上就是個人爬坑后對前端的一些理解(ps:雖然我還在坑里),也算對自己工作的一個總結(jié)吧,寫的比較絮叨,不喜勿噴。