版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
如果你是剛進入WEB前端研發(fā)領域,想試試這潭水有多深,看這篇文章吧。如果你是做了兩三年WEB產品前端研發(fā),迷茫找不著提高之路,看這篇文章吧。如果你是四五年的前端開發(fā)高手,沒有難題能難得住你的寂寞高手,來看這篇文章吧。WEB前端研發(fā)工程師,在國內是一個朝陽職業(yè),自07-08年正式有這個職業(yè)以來,也不過三四年的時間。這個領域沒有學校的正規(guī)教育,沒有行內成體系的理論指引,幾乎所有從事這個職業(yè)的人都是靠自己自學成才。自學成才,一條艱辛的坎坷路,我也是這樣一路走來。從2002年開始接觸WEB前端研發(fā)至今已然有了9個年頭,如今再回首,期間的走了很多彎路。推已及人,如果能讓那些后來者少走些彎路,辛甚辛甚!前言所謂的天才,只不過是比平常人更快的掌握技能、完成工作罷了;只要你找到了正確的方向,并輔以足夠的時間,你一樣能夠踏上成功彼岸。本文將WEB前端研發(fā)編程能力劃分了八個等級,每個等級都列舉出了對應的特征及破級提升之方法,希望每位在看本文的同學先準確定位自己的等級(不要以你目前能力的最高點,而是以你當前能力的中檔與之等級作對比,以免多走彎路),參考突破之法破之。所謂的級別,只是你面對需求時的一種態(tài)度:能夠完成、能夠完美地完成、能夠超出預期地完成。以追求完美的態(tài)度加以扎實的編程功力,那就是你的編程水平。切忌心浮氣燥,級別夠了,那級別里的東西自然就懂了。悟了就是悟了,沒悟也沒關系,靜下心來,投入時間而已。1.入門能夠解決一些問題的水平。有一定的基礎(比如最常見的HTML標簽及其屬性、事件、方法;最常見的CSS屬性;基礎的JavaScript編程能力),能夠完成一些簡單的WEB前端研發(fā)需求。舉個例子:刪除一字符串中指定的字符。\o"viewsource"viewsource\o"print"print\o"?"?1varstr="/?page";2str=str.replace('?page',"");3alert(str);4str=str.substring(0,str.indexOf("/"));5alert(str);首先不要苛責代碼的對錯嚴謹,畢竟每個程序員都有這樣的一個過程;其次,這兩段代碼在這個實例里沒有什么大過錯,可能會有瑕疵,但能夠解決問題(刪除指定的字符),這就是這個級別的特征。再舉個例子:\o"viewsource"viewsource\o"print"print\o"?"?01//計算系統(tǒng)當前是星期幾02varstr="";03varweek=newDate().getDay();04if(week==0){05str="今天是星期日";06}elseif(week==1){07str="今天是星期一";08}elseif(week==2){09str="今天是星期二";10}elseif(week==3){11str="今天是星期三";12}elseif(week==4){13str="今天是星期四";14}elseif(week==5){15str="今天是星期五";16}elseif(week==6){17str="今天是星期六";18}19//或者更好一些20varstr1="今天是星期";21varweek=newDate().getDay();22switch(week){23case0:24str1+="日";25break;26case1:27str1+="一";28break;29case2:30str1+="二";31break;32case3:33str1+="三";34break;35case4:36str1+="四";37break;38case5:39str1+="五";40break;41case6:42str1+="六";43break;44}45alert(str);46alert(str1);入門"階段是每個程序員的必經(jīng)之路,只要"入門",你就上路了。所謂"師傅領進門,修行靠個人",有了這個"入門"的基礎,自己就可以摸索著前進了。進階之路:將JavaScript、HTML、CSS之類的編碼幫助手冊里的每個方法/屬性都通讀幾遍!只有將基礎打好,以后的路才能走的順暢。參考這些幫助文檔,力爭寫出無瑕疵的代碼。這些編碼文檔建議不僅是在入門提高期看,在你以后每個階段破階的時候都應該看看,最基礎的東西往往也是最給力的東西,有時能夠給你帶來意想不到的收獲。2.登堂能夠正確地解決問題。不管你是通過搜索網(wǎng)絡,或者通過改造某些成品代碼(jQuery/Dojo/Ext/YUI)案例,只要能夠無錯地完成需求。同樣以上面的那段"字符串剪裁"代碼為例:\o"viewsource"viewsource\o"print"print\o"?"?1varstr="/?page";2str=str.replace(/?page/,"");3alert(str);僅僅解決問題對于"登堂"階段來說已經(jīng)不是問題,這個級別所給出方案不能是漏洞百出。以上面這段代碼為例:replace方法的第一個參數(shù)雖然可以支持字符串,但最佳的類型是正則表達式。\o"viewsource"viewsource\o"print"print\o"?"?1vara=newArray("日","一","二","三","四","五","六");2varweek=newDate().getDay();3varstr="今天是星期"+a[week];4alert(str);對比"入門級"的代碼,不管是從代碼量、代碼效率、代碼優(yōu)美性、代碼思路來說,"登堂"級的這個日期處理代碼都要優(yōu)秀很多。進階之路:這個階段雖然能夠給出正確的解題方案,但是不一定是最優(yōu)秀的方案。如何才能得到最優(yōu)秀的方案呢?首先就是積累各種能夠解決需求的方案,然后再驗證每個方案,在這些方案中選擇最好的一種。因此該階段的進階之路就是"行萬里路,看萬卷書",積累各個需求的各個解決方案。你可以扎身在專業(yè)論壇(藍色理想、無憂、CSDN)里,通讀所有的FAQ及帖子;你可以打開搜索引擎,窮舉所有的搜索結果。自己建立測試環(huán)境一一驗證這些代碼:去揣摩每段代碼的意圖,去比較每段代碼之間的差異。這兩條路可以讓你快速完成原始積累,當你再面對大多數(shù)需求時能夠說這些問題我以前做過,那你就水到渠成地晉階了。3.入室最強代碼,知道所有能夠解決需求的各種方案,能夠選擇使用最優(yōu)秀的方案滿足需求。這個級別基本上產品開發(fā)編程中的代碼主力。給出的一招一式,招招都是絕招。還以上面的那個例子為例,你能說出1、2、3之間的差別,以及適用于那種環(huán)境嗎?\o"viewsource"viewsource\o"print"print\o"?"?1varstr="/?page";2//1、字符串剪裁3str.substring(0,str.indexOf("?page"));4//2、正則表達式5str.replace(/?page/,"");6//3、字符串分拆、合并7str.split("?page").join("");能夠解決問題的方法會有很多,但是對于程序員來說應該選擇最優(yōu)秀的。上面這段代碼從代碼量來說"正則表達式"最優(yōu)秀;從代碼執(zhí)行效率來說:"字符串剪裁"法最高(Chrome中"正則表達式"效率最高),split法最次;從可擴展性上來說,"正則表達式"法最優(yōu)。具體使用那種方案視具體的需求環(huán)境而定。"入室"階段,程序員應該能夠肯定的回答:對于這個需求而言,我的代碼就是最優(yōu)秀的代碼。再以"今天是星期幾"為例,"登堂"級的代碼你敢說是最優(yōu)秀的代碼了嗎?\o"viewsource"viewsource\o"print"print\o"?"?1//計算系統(tǒng)當前是星期幾2varstr="今天是星期"+"日一二三四五六".charAt(newDate().getDay());對比"登堂"級的示例代碼,上面這段代碼給你什么感受?程序員追求的就是完美。"入室"級別追求的就是每一招每一式的完美無缺。從WEB前端編程來說,通過2年左右的努力,很多人能夠達到這個水平,但是,很大一部分人的編程能力也就止步于此?;蛳抻诋a品的需求單一性,或限于需求開發(fā)的時間緊迫性,或限于人的惰性,能夠完美地解決當前的需求就夠了。由于長期處于技術平臺期,技術上得不到提高,通常這個級別的工程師會比較燥。技術上小有所成;或追求個人的突破;或追求產品差異性帶來的新鮮感;或者只是想換個心情;因此很多此級別的工程師會經(jīng)常換公司。戒驕戒躁:切勿以為自己能寫一手漂亮的代碼而自滿;切莫以為別人"尊稱"你一聲"大俠"你就以"大俠"自居;切莫以為自己積累了一些得意的代碼就成了框架式開發(fā)。細節(jié)決定成敗,優(yōu)秀的方案并不能保證最終的成功。還以"刪除指定字符串"為例,原始字符串從格式上來看應該是了個URL鏈接,在去除"pn=0"之后,最末尾處留了一個尾巴"?";如果原始字符串是"/?pn=0&a=1",去除"pn=0"之后?和&兩個符號緊貼一起,這更是明顯的bug。進階之路:此階段進階之路就是:切勿心浮氣躁;你不再被需求牽著走,而是你牽著需求走。注重細節(jié),注意那些當前需求里沒有明文給出的細節(jié):代碼性能的差異、運行平臺(瀏覽器)的差異、需求的隱性擴展、代碼的向后兼容等等。再通讀幾遍HTML/CSS/JavaScript幫助文檔。我建議這個級別的工程師做一做WebTreeView控件,要求總節(jié)點量一萬左右操作流暢,你的晉升之路就在這個控件的編碼過程中。4.入微最強解決方案。你能夠走在需求的前面,將當前需求里有的、沒有直接提出來的、現(xiàn)在暫時沒有但將來可能有的等等,及前端編程潛規(guī)則等各個方方面面都綜合考慮,給出最優(yōu)方案。以一招勝萬招。\o"viewsource"viewsource\o"print"print\o"?"?01varstr="/?pn=0";//刪除指定字符pn=002//我將這個字符串里所可能想到的各種情況都列舉出來03vara=[04"/VMpn=?pn=0"http://pn=可能出現(xiàn)在?前05,"/VMpn=?pn="http://URL里允許pn值為空06,"/VMpn=?pn=0&a=1"http://URL里可有多個字段07,"/VMpn=?a=1&pn=0"http://可能排在最后08,"/VMpn=?a=1&pn=0&pn=1"http://可能有多個pn字段09,"/VMpn=?a=1&pn=0&b=2"http://可能在中間10,"/VMpn=?a=1&pn=0&pn=1&b=1"http://可能在中間成組11,"/VMpn=?a=1&pn=0&b=1&pn=1"http://可能零星分布12];13/*需求的不言之秘:14?若出現(xiàn)在字符串最尾則要去之15?&兩個符號不可重疊16*/17varreg=/((\?)(pn=[^&]*&)+(?!pn=))|(((\?|&)pn=[^&]*)+$)|(&pn=[^&]*)/g;18for(vari=0;i<a.length;i++){19alert(a[i]+"\n"+a[i].replace(reg,"$2"));20}這個階段已經(jīng)不再追求一招一式,對你來說不是使用什么創(chuàng)新絕招解決需求,而是給出成熟穩(wěn)重的方案,從根上解決問題。針對某個當前需求你的代碼可能不是最優(yōu),但是針對此類的需求你的代碼卻是最優(yōu)秀的代碼。進階之路:很多WEB前端研發(fā)工程師在做了3-4年之后就會進入一個瓶頸期:產品開發(fā)需求是小菜一碟,沒有新鮮的可以挑戰(zhàn)的東西;代碼開發(fā)中的稀奇的解題方法都已經(jīng)嘗試過。沒有了可挑戰(zhàn)的難題,失去了探索的激情,也就沒有了再上升的動力,好不容易走過"入室"級別的人又會有八九成止步于此?;蜣D做技術領導人,或轉到其它的領域,或換公司。這些人的上升之路在哪里呢?這個階段單單依靠技巧和數(shù)量的累積已經(jīng)沒有什么效果了,突破之路在第5層《化蝶》里會詳細說明,我建議你在這個階段末尾著重關注編程理論:面向對象/過程、代碼組織形式、編譯、代碼規(guī)范、其它的框架設計等等。我建議這個級別的工程師做一做WebEditor控件,不要求完整功能,但是該控件里的模塊劃分、代碼組織、編程思想做到位,給出一個系統(tǒng)的解決方案。5.化蝶破繭重生,這個層次關注的是編程語言本身,而不再關心產品需求。什么是繭?產品需求就是繭。當你一招勝萬招,打遍天下需求之時,你如果還拘泥于需求開發(fā),那就是你限于繭中而不自知。要么就在這個繭里默默地老去,要么就破開繭獲得新生。還是以那個"字符串剪裁"的老例子:\o"viewsource"viewsource\o"print"print\o"?"?01/**02*在拼接正則表達式字符串時,消除原字符串中特殊字符對正則表達式的干擾03*@author:meizz04*@version:2010/12/1605*@param{String}str被正則表達式字符串保護編碼的字符串06*@return{String}被保護處理過后的字符串07*/08functionescapeReg(str){09returnstr.replace(newRegExp("([.*+?^=!:\x24{}()|[\\]\/\\\\])","g"),"\\\x241");10}11/**12*刪除URL字符串中指定的Query13*@author:meizz14*@version:2010/12/1615*@param{String}urlURL字符串16*@param{String}key被刪除的Query名17*@return{String}被刪除指定query后的URL字符串18*/19functiondelUrlQuery(url,key){20key=escapeReg(key);21varreg=newRegExp("((\\?)("+key+"=[^&]*&)+(?!"+key+22"=))|(((\\?|&)"+key+"=[^&]*)+$)|(&"+key+"=[^&]*)","g");23returnurl.replace(reg,"\x241")24}25//應用實例26varstr="/?pn=0";//刪除指定字符pn=027delUrlQuery(str,"pn");這段代碼相對于層次4《入微》有什么區(qū)別嗎?從代碼實現(xiàn)上來說沒有太大的區(qū)別,但是從思路上來說卻有著本質的區(qū)別:不再是就事論事,頭疼醫(yī)頭,而是把一類問題抽象理論化,一招破萬招;有封裝的概念,不再是每次從零開始,而是站在半山腰開始爬。在WEB前端研發(fā)隊伍里也有很大一部分人《入室》層次時就自我感覺良好,直接跨躍到《化蝶》,積累自己的代碼庫,抽象化問題。但沒有基礎,缺少強大的后勁,即使能夠破繭也經(jīng)受不了風吹雨打。一份不成熟的架構設計對團隊開發(fā)帶來的危害遠大于它帶來的好處,這種例子在業(yè)界屢見不鮮。不要拔苗助長,不要不會走就想著跑,夯實基礎,水到渠成地成長,厚積薄發(fā),強力地破繭而出。進階之路:你已經(jīng)從原始積累,到厚積薄發(fā),到破繭而出之后,你所關注的應該不再是一招一式、一個項目、一個模塊,而應該是一種思路,一種理論。你可以做以下幾個步驟以突破到更高層次:再仔細看幾遍HTML/CSS/JavaScript接口幫助文檔;選擇一門強語言(C++/C#/Java等)觀察理解這些語言的組織結構,語言設計;看看原型鏈,鏈式語法編程,泛型,接口編程,DOM遙控器等等;仔細閱讀成熟的WEB前端開發(fā)框架的設計文檔,看他們?yōu)槭裁匆@樣設計。6.大俠這里所說的大俠,不是大家互相吹捧的"大俠",而是實至名歸的高手。這個級別的人完全有能力寫出不差于Bindows/jQuery/Ext/YUI/Dojo的同等級別規(guī)模的前端開發(fā)框架。應用成熟的開發(fā)框架指導、解決問題。\o"viewsource"viewsource\o"print"print\o"?"?01//庫文件/mz/string/escapeReg.js02/**03*在拼接正則表達式字符串時,消除原字符串中特殊字符對正則表達式的干擾04*@author:meizz05*@version:2010/12/1606*@param{String}str被正則表達式字符串保護編碼的字符串07*@return{String}被保護處理過后的字符串08*/09mz.string.escapeReg=function(str){10returnstr.replace(newRegExp("([.*+?^=!:\x24{}()|[\\]\/\\\\])","g"),"\\\x241");11}12//庫文件/mz/url/delQuery.js13///includemz.string.escapeReg;14/**15*刪除URL字符串中指定的Query16*@author:meizz17*@version:2010/12/1618*@param{String}urlURL字符串19*@param{String}key被刪除的Query名20*@return{String}被刪除指定query后的URL字符串21*/22mz.url.delQuery=function(url,key){23key=mz.string.escapeReg(key);24varreg=newRegExp("((\\?)("+key+"=[^&]*&)+(?!"+key+25"=))|(((\\?|&)"+key+"=[^&]*)+$)|(&"+key+"=[^&]*)","g");26returnurl.replace(reg,"\x241")27}28//應用實例29///includemz.url.delQuery;30varstr="/?pn=0";//刪除指定字符pn=031mz.url.delQuery(str,"pn");自成體系,有基礎,也有理論高度。知道為什么這樣設計,也知道什么樣的設計最好。比如這個例子可以有這樣的封裝:\o"viewsource"viewsource\o"print"print\o"?"?01//庫文件/mz/url/delQuery.js02///includemz.string.escapeReg;03/**04*刪除URL字符串中指定的Query05*@author:meizz06*@version:2010/12/1607*@param{String}urlURL字符串08*@param{String}key被刪除的Query名09*@return{String}被刪除指定query后的URL字符串10*/11Stotype.delQuery=function(key){12key=mz.string.escapeReg(key);13varreg=newRegExp("((\\?)("+key+"=[^&]*&)+(?!"+key+14"=))|
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度二手車買賣合同范本:二手車交易合同樣本與質保期約定
- 2024年度活動板房搭建與環(huán)保評估合同3篇
- 2024年房地產認籌協(xié)議范本(團購)3篇
- 2024年架空輸電線路桿塔設備運輸合同
- 2024版二婚離婚協(xié)議書模板:共同財產清算與分割流程2篇
- 2024年廢紙收購協(xié)議3篇
- 2024版bt項目生態(tài)環(huán)保責任合同2篇
- 2024年度蘇州物業(yè)服務滿意度提升合同
- 2024年商品砼購銷合同附材料檢測與質量保障3篇
- 2024版房產交易稅費結算與退還合同范本3篇
- 2023年民航東北空管局人員招聘筆試真題
- 教研組長述職報告演講
- 農村集體經(jīng)濟組織內部控制制度
- 《接觸網(wǎng)施工》課件 5.1.2 避雷器安裝
- 第二屆全國技能大賽珠寶加工項目江蘇省選拔賽技術工作文件
- 淮陰工學院《供應鏈管理3》2022-2023學年第一學期期末試卷
- 2025年計算機等級考試一級計算機基礎及MS Office應用試卷及解答參考
- 小學五年級上冊語文 第一單元 語文要素閱讀(含解析)
- 2024年廣東公需科目答案
- ABB工業(yè)機器人基礎知識
- 中國校服產業(yè)挑戰(zhàn)與機遇分析報告 2024
評論
0/150
提交評論