時(shí)間過(guò)得很快,我做軟件工程師已經(jīng)三年整了。我沒(méi)有做過(guò)一個(gè)項(xiàng)目,一直在做框架相關(guān)的工作,有時(shí)維護(hù)Web框架代碼,有時(shí)寫移動(dòng)Hybrid的前端UI框架,也有時(shí)做開發(fā)工具或自動(dòng)編譯平臺(tái)等。 我想分享下這段時(shí)間在工作上的個(gè)人經(jīng)驗(yàn),分為幾點(diǎn): 做框架的態(tài)度 我工作中做得最多就是框架,框架的本質(zhì)是提高重用性。對(duì)于做框架,除了本身能力很重要外,很關(guān)鍵的是做框架的態(tài)度。 1. 不要因?yàn)槔щy的而不去做 (1).作為程序員的程序員,如果你解決了一個(gè)困難的問(wèn)題,你造福的是所有使用你框架的人。 (2).即便是很簡(jiǎn)單的功能,能做就要做,只要這功能不是嘩眾取寵的。 我很厭煩的是一些遇到困難后,連去深入研究都沒(méi)有的人。當(dāng)然困難問(wèn)題解決起來(lái)耗費(fèi)的時(shí)間可能會(huì)長(zhǎng),但如果有益,就去解決。 2. 辨認(rèn)是否真的做不了 可能由于框架開發(fā)者能力的問(wèn)題,在某些問(wèn)題上找不到解決方案,于是有人就輕易歸結(jié)為做不了。并不是說(shuō)不能承認(rèn)做不了,而是希望能在問(wèn)題上多加探討,一句解決不了真太簡(jiǎn)單了。不要那么容易說(shuō)“做不了”,這個(gè)“做不了”應(yīng)該是反復(fù)驗(yàn)證之后才得出的結(jié)論,而不是“你不會(huì)”。 3. 將用戶當(dāng)傻瓜 提供出去的東西,不要讓使用者做得太多,能封裝就封裝,能簡(jiǎn)單就簡(jiǎn)單。別讓他們繞太多彎彎,不然會(huì)有一堆疑問(wèn)拋向你,用的人也很痛苦。 4. 框架技術(shù)選擇 框架如果需要接入其他技術(shù),不是用自己最擅長(zhǎng)的技術(shù),而是大眾最常用的。例如當(dāng)Python、Go、NodeJS都可以選擇時(shí)候,是否可以考慮最為大眾化的NodeJS。 JavaScript 1. 控件本質(zhì) 我寫得最多,最深刻的一點(diǎn)感悟就是。所有的控件效果,抽絲剝繭,可以歸結(jié)的本質(zhì)是,對(duì)于DOM元素的位置變換、隱現(xiàn),事件的控制。所以在實(shí)現(xiàn)一個(gè)控件的時(shí)候,最應(yīng)該做的分析最本質(zhì)的現(xiàn)象,是與哪些元素相關(guān),包含什么事件,涉及什么CSS3效果。這樣,你就不會(huì)無(wú)從下手。 2. 注意重用 另外,當(dāng)你寫重復(fù)代碼的時(shí)間就要注意了,重復(fù)地方是否有重用地方,是否可以做優(yōu)化。不要就直接復(fù)制、粘貼了。JavaScript里面這種隨意復(fù)制粘貼的情況很常見,所以加強(qiáng)復(fù)用東西(組件、控件)的編寫能力挺重要。 Hybrid框架(mobile) 之前我做了一年多Hybrid框架的Web UI部分。(目前有很多很好的Hybrid框架,我以前的文章也有說(shuō)過(guò)很多,想看的可以往前翻翻)。這里有兩點(diǎn)我想告訴Hybrid框架的開發(fā)者。 1. 如何做得像原生做的 (1).Web頁(yè)面結(jié)合原生殼的應(yīng)用,在效果上與真正的原生應(yīng)用還是存在差別。那怎么做的像原生做的,那就是用原生做。動(dòng)畫效果、控件用原生實(shí)現(xiàn),那么效果才真的像。 (2). 控件樣式就根據(jù)手機(jī)原生控件樣子做,像framework7?,F(xiàn)在很多框架都能在原生上找到影子。自己特立獨(dú)行一套效果圖出來(lái)其實(shí)沒(méi)必要,除非你的能比蘋果公司的設(shè)計(jì)師做的更好。 2. 別用單頁(yè) 這個(gè)是我添加在框架里最糟糕的東西。這個(gè)導(dǎo)致了加大開發(fā)者開發(fā)難度,效果在Android上也不盡如人意。 部署自動(dòng)化 1. 能自動(dòng)化的東西,就別手動(dòng)做 無(wú)論是做手機(jī)應(yīng)用,還是桌面應(yīng)用,原生或混合應(yīng)用(Hybrid),又或者是前端后端,程序打包編譯都應(yīng)該實(shí)現(xiàn)自動(dòng)化。 2. 把開發(fā)人員解放出來(lái) 開發(fā)一個(gè)打包平臺(tái),將版本、可配置內(nèi)容開放出來(lái),給部署人員去做配置打包,開發(fā)人員并不參與。 這種事利己利人,特別是在頻繁打包構(gòu)建時(shí)候。當(dāng)你花幾天做出自動(dòng)化東西,會(huì)發(fā)現(xiàn)后面省下的時(shí)間何止幾天。 對(duì)學(xué)習(xí)的問(wèn)題 1.學(xué)習(xí)只能靠自己 1. 公司本身不是讓你學(xué)習(xí)地方,是為了讓你創(chuàng)造價(jià)值的,只不過(guò)在創(chuàng)造價(jià)值時(shí),順帶學(xué)習(xí)了東西,讓你可以得到實(shí)踐。 當(dāng)然可能做的事本身就沒(méi)有可學(xué)習(xí)地方,那充實(shí)自己也只能是自己,也可能學(xué)到的東西得不到實(shí)踐。 2. 前輩只會(huì)講個(gè)大概給你,誰(shuí)也不想手把手的教,都想你能夠主動(dòng)去學(xué)習(xí)。 2.多學(xué)習(xí)多總結(jié) 從畢業(yè)開始到現(xiàn)在,我每到有疑問(wèn)的時(shí)候,都會(huì)記下來(lái),找時(shí)間去解決它,然后會(huì)總結(jié)經(jīng)驗(yàn),寫到博客里。總結(jié)寫博客有個(gè)好處,就是能把經(jīng)驗(yàn)教訓(xùn)進(jìn)行一次完整總結(jié),而為了博文內(nèi)容是正確的,我會(huì)查閱很多資料去歸納總結(jié),這樣總會(huì)有點(diǎn)成長(zhǎng)。 還有一點(diǎn)是,學(xué)習(xí)東西必須有結(jié)論,不能看了很多東西,卻沒(méi)有一個(gè)定論,這樣的話,下次你想起,你依舊不知道關(guān)鍵點(diǎn)在哪。所以,無(wú)論結(jié)論是對(duì)還是錯(cuò),學(xué)了就做屬于自己的總結(jié),即便是錯(cuò),也錯(cuò)得明白。 對(duì)錯(cuò)誤的態(tài)度 1.不要怕 在早些年,遇到問(wèn)題錯(cuò)誤時(shí),在沒(méi)明白詳情時(shí),就開始慌張了,擔(dān)心自己解決不了。而現(xiàn)在是比較坦然了,對(duì)于錯(cuò)誤,先理清問(wèn)題到底是什么,接著判斷是不是你該解決的,這問(wèn)題是否緊急,最后才是考慮怎么解決。最后,天塌了還有老大擋著。 2.承認(rèn)做不了 自己做不了,就承認(rèn)做不了,別死鴨子嘴硬,到后面出問(wèn)題了再說(shuō),那就尷尬了。 對(duì)于自我 1. 直面不足 我雖然自詡是個(gè)前端工程師,但是我知道我做不成那些漂亮的頁(yè)面(設(shè)計(jì)),只是在腳本部分有些造詣。我不是個(gè)聰明的人,只是還有些小勤奮,我會(huì)花時(shí)間去弄懂。為了寫好一篇博文,會(huì)去完整的查找資料驗(yàn)證。 2.成為別人的依靠 三年時(shí)間,也使得自己在某些方面是別人完成不了最后一個(gè)依靠。這時(shí)天塌了,找你了。 3.有些偏執(zhí)了 隨著我看到的東西越來(lái)越多,知道得越多,越能認(rèn)清一個(gè)東西對(duì)錯(cuò)好壞,對(duì)于我認(rèn)為不對(duì)的,就不妥協(xié),一定指出來(lái)。 4.小進(jìn)步 我不是個(gè)勤奮的人,也不是個(gè)不思進(jìn)取的人。我也怕自己沒(méi)有進(jìn)步,但也不喜歡強(qiáng)迫自己,所以現(xiàn)在我都是爭(zhēng)取自己每天有一點(diǎn)不同。閑暇時(shí)間會(huì)學(xué)學(xué)弄弄小東西,寫寫博文,無(wú)聊時(shí)也會(huì)打打游戲,我希望是能遵從我本心。 人總要一些追求的,不然每天都過(guò)得差不多。我追求是每天有一點(diǎn)不同,每天有一點(diǎn)小進(jìn)步,就夠了。 總結(jié) 我一開始是做一個(gè)產(chǎn)品的后端,再后面兩年轉(zhuǎn)而做前端的(應(yīng)部門需要,在我的部門里面,不是看你會(huì)什么,而是看要做什么,如果需要新技術(shù)才能做的,那就要去學(xué),然后用起來(lái))。三年時(shí)間過(guò)得很快,上面這些是我感覺(jué)比較重要的,希望對(duì)初入社會(huì)的程序員有些用處。
|
|