摘要:不過細想想,我郵只有前端的選修課啥的,課程也不是那么就業(yè)導(dǎo)向。至少目前,很少有大公司完全把作為前后端通用的技術(shù)棧。不能把簡單看做是在服務(wù)端的延展。編譯這個思想在前端領(lǐng)域很重要不改變現(xiàn)有的語言環(huán)境同時進行最佳的工程實踐。
P.S. 噴神請繞道,大神勿噴,不引戰(zhàn),不攻擊,不鉆牛角尖。
大二時第一次接觸前端。許多同學(xué)估計都想過要做一個網(wǎng)站,大部分又是從PHP開始的(誰讓它是世界上最好的語言呢)。后端語言參與渲染HTML一直很主流,跟著教程做,你會寫一堆樣式表,到后來也許是需要在提交表單時進行客戶端驗證,你開始寫一些JS。
想做個網(wǎng)站啥的(以前app沒有那么多),必須要學(xué)會HTML、CSS、JS,HTML構(gòu)造結(jié)構(gòu),CSS表現(xiàn)樣式,JS決定行為。JS似乎充滿奇技淫巧,可以做各種效果啊,飛雪花片啊,搞咱們選課、評老師的網(wǎng)站啊。
后來接觸了jQuery,用起來無比順手,特別是看完《DOM編程藝術(shù)》以后。那段時間擔(dān)心JS掌握得不好,心想總是用jQuery以后不會寫Native怎么辦?也會關(guān)注“可以直接學(xué)習(xí)jQuery嗎”這樣一些問題。學(xué)習(xí)了Ajax后又做過瀑布流圖片墻,覺得無比興奮。不過認識也僅僅停留在異步加載局部更新DOM可以創(chuàng)造更好地用戶體驗。
實習(xí)期間,看到公司前端做雪碧圖、切片、搞div、css布局,然后花很多時間在瀏覽器兼容的問題的調(diào)試上。尤其是活動頁面,寫HTML、CSS基本占到工程的80%,JS寫起來很快。后來Bootstrap逐漸流行起來,后端同學(xué)可以直接寫后臺,甚至都不需要前端和射雞師了。加點柵格,加幾個類,輪播組件啥的樣樣有,再引入jQuery,前端便成為了順帶做的事了。
我接觸前端的過程沒有系統(tǒng)性,充滿了探(瞎)索(搞),也缺少引導(dǎo)。不過細想想,我郵只有前端的選修課啥的,課程也不是那么就業(yè)導(dǎo)向。就像論壇里的同學(xué),自己搞,自己提升。
我們把上面這些點提取出來:HTML、CSS、JS、jQuery、Bootstrap,再刷刷題,看看基礎(chǔ)知識,基本就可以參加校招了。
那些求入門、求實習(xí)、趕春招、趕秋招的同學(xué)一定來得及:不過潑一盆冷水,進入大公司只是開始,你的認識、習(xí)慣、思維方式最終會決定你事業(yè)或者專業(yè)的高度。
面對新技術(shù)我覺得了解它為什么產(chǎn)生,解決什么問題,會怎么發(fā)展,如何在現(xiàn)有的工程中進行實踐,比討論它們的優(yōu)劣更有意義:
首先 html5 不是一個新技術(shù),而是在現(xiàn)代瀏覽器中使用CSS 3等特性進行前端開發(fā)的過程。以前我們更關(guān)注瀏覽器的差異性,而現(xiàn)代的瀏覽器對標準的支持越來越統(tǒng)一。
回到j(luò)Query,在web app中使用越來越少了,一方面這個庫太“大”了(吃流量),從頁面加載、打開速度理論看,英明的老大會把它砍掉。針對庫大小的問題,Zepto.js是一個解決方案。這個庫與jQuery API相對統(tǒng)一,拋卻了很多瀏覽器的兼容性的代碼。
但是現(xiàn)在瀏覽器的querySelector方法,已經(jīng)很好地解決了jQuery中的“Query”,使用原生的fetch方法請求數(shù)據(jù),返回Promise也能比jQuery.ajax()的實現(xiàn)更好、更清晰的解決問題。
看待jQuery,我覺得應(yīng)該更多看到它的歷史意義。jQuery,一定程度上成為了工業(yè)標準,影響了JS語言的發(fā)展和其他JS庫的構(gòu)建。如同coffeescript對ES2015的影響。至于實踐,越來越多的web已經(jīng)不依賴jQuery進行開發(fā)了。
前端這幾年進步太快了,我嘗試按照不同方向討論一下這些技術(shù)棧。
脫離瀏覽器的JavaScript Node.js我們討論的JavaScript更多是以瀏覽器為宿主的ECMAScript,同源的ActionScript以Adobe的Flash作為宿主的。
瀏覽器中的JavaScript提供了大量與瀏覽器相關(guān)的API。脫離這些特定API看JavaScript,異步是它特別重要的一個特性。Google的V8引擎,讓JavaScript的運行時性能大大提升,是Node.js的產(chǎn)生另一個必要的條件。
Jser突然可以全棧了,面對新的技術(shù),不乏布道師。國內(nèi)第一本Node.js書籍是BYVoid寫的,當(dāng)時盛傳這個同學(xué)拿到了我司的60w的offer,一片沸沸揚揚;大家可以向他學(xué)習(xí),在一個技術(shù)還未在祖國大地流行起來時,迅速寫一本書。
至少目前,很少有大公司完全把JavaScript作為前后端通用的技術(shù)棧。傳統(tǒng)的后端語言和技術(shù)并未沒有被代替的危險。不能把Node.js簡單看做是JavaScript在服務(wù)端的延展。
我覺得,Node.js很大程度拓展了JavaScript的使用范圍,改變了傳統(tǒng)前端的工作流程(后面提)。特別是NPM的產(chǎn)生,意義非常之大,它讓JavaScript成為了一個生態(tài)系統(tǒng),CommonJs也在JavaScript模塊化未成熟之前,提供了優(yōu)秀的模塊化解決方案。
通過package.json,我們可以依賴已有的NPM項目構(gòu)建自己的庫。前段時間,某個同學(xué)應(yīng)為法律的問題,撤消了發(fā)布在NPM上的leftpad包,短短11行代碼的包撤消后,造成了React-Native、Babel等項目構(gòu)建失敗的災(zāi)難。
module.exports = leftpad; function leftpad (str, len, ch) { str = String(str); var i = -1; if (!ch && ch !== 0) ch = " "; len = len - str.length; while (++i < len) { str = ch + str; } return str; }
許多人反思,為啥那么簡單的代碼要依賴,不自己寫?是不是Jser忘記了怎么寫代碼了?我覺得,盲目解除對其他庫的依賴會失去NPM社區(qū)的初衷,除非你想做超級輪子哥。NPM生態(tài)圈制定一下撤包的規(guī)則,這種災(zāi)難或許以后就不會發(fā)生。自給自足的同學(xué)們,如果lodash撤包了,或者是tj holowaychuk大神激情起來刪了所有包,你們怎么辦?
Node.js也讓服務(wù)端渲染成為可能(universal),代碼段技能在服務(wù)端運行也可以在客戶端運行(universal)。從這點看,代碼更容易維護和編寫了,部分解耦了前端和服務(wù)端。對于SEO這個令人頭大的商業(yè)問題,服務(wù)端渲染可以較好地解決。感興趣的同學(xué),可以去了解一下搜索引擎的爬蟲是如何干活的。
總結(jié)一下,Node.js的產(chǎn)生完善了JavaScript生態(tài)圈,讓大家看到了JavaScript的潛力,讓構(gòu)建更為龐大的JavaScript項目成為可能,同時前端可以使用更為工程化的流程和工具進行開發(fā)。
推薦大家一定去了解和使用Node.js,使用NPM構(gòu)建自己的項目。
JSONJSON變成了事實上Web數(shù)據(jù)的傳輸標準,這個是JavaScript另一大貢獻。
對終端的開發(fā),使用JSON數(shù)據(jù)后使得服務(wù)端的開發(fā)更加專注和統(tǒng)一。
data.each do |key, value| puts "Key #{key.inspect} has value #{value.inspect}" end
這種代碼展示了服務(wù)端渲染的能力。但是對于對于iOS、Android等原生應(yīng)用,除了在WebView中,無法消費這些渲染好的HTML。
JSON和App的流行,讓后端語言在渲染方面逐漸讓道,向純粹的Service發(fā)展。比如beta版本的 Rails 5 大大增強了 Rails 作為 API Service的能力。
從Ruby 或者 PHP轉(zhuǎn)換到JSON需要相應(yīng)的映射函數(shù),Node.js來得更為直接,因為JSON就是一個普通的JavaScript對象。
大家可以去學(xué)習(xí)成熟的JSON風(fēng)格指南。同時通過實踐逐步加強對JSON的認識,設(shè)計更為規(guī)范的JSON(這個會森森影響到Mongo的存儲,查詢效率,React的性能)。
二進制處理后的JSON,是MongoDB存儲的內(nèi)容,這個基于文檔的數(shù)據(jù)庫被越來越多的公司使用,使得編寫嵌套數(shù)據(jù),存儲流數(shù)據(jù)更為容易。傳統(tǒng)的關(guān)系數(shù)據(jù)庫,將查詢結(jié)果表示為JSON,需要經(jīng)過查詢、封裝、Transform等多個步驟,而MongoDB的查詢結(jié)果就是JSON,直接查詢直接使用。當(dāng)然我們看到,在處理事務(wù)型問題上,關(guān)系型數(shù)據(jù)庫還是首選,比如電商。我們?nèi)グH關(guān)系型數(shù)據(jù)庫是否落后沒有意義——使用場景不同。
如果大家有興趣,可以去嘗試MongoDB,感受一下沖擊。
前端工程化接下來提一下前端工程化。腳本語言并不一定需要編譯再執(zhí)行。傳統(tǒng)的工程中,通過
這里第一次提到Immultable這個概念:總是不改變原來的對象而生成新的對象。Immultable,讓時光大法得以實現(xiàn)。我們?nèi)绻袲OM看做是State在UI層的映射,難么從State"到State后,自然能把UI層還原到原來的狀態(tài):Redux黑魔法。
Angular 2Angular 2 已經(jīng)到了Realease Candidate階段,從alpha階段開始,每一次release都有一大堆BREAKING CHANGES(MD API說變就變)。
不過好在基本每個版本我都在跟進,還是做了些實踐。
如果大家抱著學(xué)習(xí)的心態(tài),一定不要去看國外或者知乎大神們對各種框架的褒貶,也不要去搜“我究竟是學(xué)習(xí)(使用)React、Angular 2、Ember還是Vue這種問題”,了解它們的思想和解決問題的方式。
Angular 一直使用依賴注入的單例模式解決數(shù)據(jù)管理的問題。Angular 2使用zone.js實現(xiàn)了一個新的臟值檢查機制,并在瀏覽器端使用System.js管理code的依賴。
使用 TypeScript 進行開發(fā),意味著從生產(chǎn)到上線過程必須經(jīng)過編譯和轉(zhuǎn)換,特別裝飾符的使用,讓代碼表意性更強,同時裝飾符作為元數(shù)據(jù),指導(dǎo)TypeScript的編譯過程。
舉個例子,我們看看Angular 2如何解決表單的驗證問題:
Angular 2將每一個表單項(比如 input、textArea、radio)抽象為一個Control,將整個表單抽象為一個ControlGroup。每一個Control都有自己的驗證規(guī)則,ControlGroup的合法性又由其包含的所有Control共同決定。這個實踐使得驗證邏輯與表單DOM實現(xiàn)了分離,更為清晰,同時原本操蛋的表單測試變得簡單易行,因為測試ControlGroup時并不需要依賴于DOM。
分享一篇我翻譯的文章:Angular 2核心概念,閱讀后可以對Angular 2 有一個大致的了解。
Angular 2是對WebComponent的漸進,通過WebComponent,我們可以導(dǎo)入和使用各種成熟的組件,而不用關(guān)心它的具體實現(xiàn),就像黑盒一樣進行使用:例如我們想嵌入一個百度地圖的WebComponent,可以這么寫:
于是就I生成一個指定大小和位置的地圖組件(百度地圖沒有這東西,我YY的,股溝有)。
Vue這個框架我不是很了解,開發(fā)者是尤雨溪大神,在github上stars超過10,000。
手機淘寶的勾股大神一直在布道、推廣、實踐。個人覺得Vue的核心貢獻者太少了,拉上阿里巴巴是一個明智的選擇,畢竟很多前端大神可以共同完善它。
再看Virtual DOM這個概念,就像是薛定諤的貓,在渲染前什么都是、什么都不是。Virtual DOM是一個抽象的概念,也組成了另一個抽象概念—— Component。(這個堪稱是FB的野心,以后估計很多人被這個東西搞失業(yè))。
一個視覺元素,一個用戶事件,可以做如下抽象:
/***** /(html) View (iOS) UIView click /(html) Click (iOS) TouchUpInside *****/
我們發(fā)現(xiàn),如果在編譯時View、Click才與運行環(huán)境相關(guān),那么app、web app的開發(fā)其實是可以共享大部分代碼的,這個時候JavaScript變?yōu)榱酥虚g語言。
這個想法早在cocos2d中就已經(jīng)實現(xiàn),進行游戲開發(fā)的同學(xué)使用c++進行游戲開發(fā),編譯后產(chǎn)生安卓和 iOS 的版本平臺相關(guān)的游戲。
React-Native就是這個思路的實踐者,通過js綁定了OC或者安卓的運行環(huán)境,開發(fā)出性能接近于原生的原生應(yīng)用。React-Native大法延展了JS的廣度,也填補了iOS和安卓開發(fā)間的技術(shù)溝壑。
另一個黑魔法是熱更新,以往大幅度更新App只能在App Store、安卓各大渠道發(fā)布更新,然后從應(yīng)用商店提示用戶升級,每一次提交都需要被審核,更何況并不是每一個用戶都知道或者想去安裝每一個更新版本(比如我媽)。通過React-Native可以直接下載新的bundle,實現(xiàn)熱更新。
論壇里,有人討論React-Native熱度驟減,你們?nèi)ス倬W(wǎng)看看,人家才v0.25。很多公司用不好駕馭不了React-Native原因出在缺少既了解客戶端開發(fā)有了解前端開發(fā)的程序猿(媛):不能否認,Reactive-Natvie的產(chǎn)生是大勢所趨。
說道阿里在搞的Weex,也是在向這個方向探索,如果特別成功并且使用廣泛的話一定會把Vue搞得更大:尤雨溪大神在這個問題上相當(dāng)?shù)拿髦堑摹?/p>
再回到Angular 2,DomRenderer.getNativeElementSync(elementRef)也不是在做同樣的事情嗎?相關(guān)項目詳見:NativeScript 。
除了JavaScript,CSS 也在嘗試成為與平臺無關(guān)的樣式語言。React-Native就實現(xiàn)了CSS 的部分子集與iOS、Android的綁定。
大前端未來的前端是一個包含但不僅限于app和web,從事多端構(gòu)建任務(wù)的程序員工種。團隊中單一技能的人員會越來越少,客戶端與web端的界限也會越來越模糊。
同時新的技術(shù)大多會在不同領(lǐng)域交叉點產(chǎn)生。網(wǎng)絡(luò)提速,設(shè)別處理能力提高后,應(yīng)用大小、性能可能退居第二,用戶體驗和開發(fā)效率提升到第一。
比如很多公司,由于擔(dān)心js、css打包后過大,放棄使用框架。這點我持保留意見,快速迭代的產(chǎn)品必須有敏捷的技術(shù)棧和穩(wěn)定的框架。
目前新版本的Chrome、Node.js對ES6標準的支持已經(jīng)超過90%,Babel這一類工具的生命周期不會很長,TypeScript可能會越走越遠。
給大家的建議道阻且長,冰凍三尺非一日之寒;
廣泛地學(xué)習(xí),有條件和能力的同學(xué)盡早地接觸客戶端開發(fā),更多地了解服務(wù)端開發(fā);
前端大有可為,新技術(shù)的發(fā)明者大多不是老東西,老東西經(jīng)驗足但是歷史包袱重;
只在瀏覽器中思考必死無疑;
像一位同學(xué)提到的,打好基礎(chǔ),offer就有。學(xué)校里倒騰幾年真的很難搞出什么大新聞,面試官也不會刻意為難你;
測試測試測試,前端測試值得學(xué)習(xí)掌握,比如e2e,這是一個機會:我能告訴你很多公司的前端測試都瞎JB點嗎?
學(xué)習(xí)一些函數(shù)式編程的思想,例如:lodash、Redux、RxJS;
拿到offer只是開始不要嘚瑟。
番外篇——理性看待前端緊缺的現(xiàn)象剛?cè)肼毺詫殨r,團隊里有許多前端外包同學(xué),后來很大一部分轉(zhuǎn)正了,有經(jīng)驗的前端工程師一直稀缺。
2012年,PC購物還是主流,我們見證了無線成交額(GMV)逐漸趕超PC的時刻:端的重心越來越向mobile(App)移動。
Hybrid App很流行,部分是因為Native開發(fā)更為復(fù)雜,同時審核、更新機制緩慢。每一次手淘release都要考慮與老版本的兼容性,幾百號人同時開發(fā)二個(安卓、iOS)App想想多復(fù)雜。
H5在webview中運行,隨時可以更新、快速迭代,新產(chǎn)品或者是活動頁面大多數(shù)會采用H5的形式進行發(fā)布;甚至很多小公司由于財力和技術(shù)儲備有限,直接用App做殼,里面全是用H5來開發(fā):因此市場上產(chǎn)生了很大的H5程序員的需求。
且慢,沒有任何人說過H5比Native更好,也沒有什么H5的春天,一切的一切都是因為Native 開發(fā)、更新不夠成熟。但也僅限在一個時間段內(nèi)。
如果一切問題都不是問題了,干嘛不全做Native?目前看來類似于React-Native、JsPatch這樣的技術(shù)逐漸會讓很多前端失業(yè)或是是被動轉(zhuǎn)崗到純PC業(yè)務(wù)。
番外篇——推薦學(xué)習(xí)資源You don"t know JS,clone下來以后用markdone閱讀器閱讀;
ES6 教程,阮一峰大神的ES6教程,紙質(zhì)書可以在京東啥的買到;
LeanPub,自出版書籍網(wǎng)站,每次更新都會發(fā)布新版本。支持Visa支付;
Manning,特別是MEAP系列的圖書,按章節(jié)更新,最新一手資料,支持Visa、PayPal支付;
CodeSchool,在線學(xué)習(xí)網(wǎng)站,覆蓋前端、iOS、Ruby等,可以先試試免費課程,支持Visa、PayPal支付;
EggHead,在線學(xué)習(xí)網(wǎng)站,先試試免費課程,授課人大神極多,基本涵蓋了最新的前端技術(shù),支持Visa支付,200刀一年略貴;
要是覺得貴,想想火麒麟。
番外篇——F&QQ:樓主現(xiàn)在在干嘛?
A:五道口,創(chuàng)業(yè)狗。負責(zé)公司的技術(shù)和產(chǎn)品。
Q:還有什么想說的?
A:帖子還會更新維護。
Q:聯(lián)系方式?
A:微信請加mumuzhenzhen,告訴我你是誰。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/87757.html
摘要:圍繞以太坊的開發(fā)生態(tài)是目前相對最成熟的,比如有開發(fā)框架,有智能合約在線集成開發(fā)環(huán)境,還有專設(shè)的開發(fā)者問答頻道。 showImg(https://segmentfault.com/img/bVbaJOL?w=1200&h=514); 張泉靈說,時代拋棄我們的時候連聲再見都不會說,馬云說對于新興事物,絕大多數(shù)人是看不見、看不起、看不懂、來不及。自從學(xué)完 Coursera 上的 Crypto...
摘要:圍繞以太坊的開發(fā)生態(tài)是目前相對最成熟的,比如有開發(fā)框架,有智能合約在線集成開發(fā)環(huán)境,還有專設(shè)的開發(fā)者問答頻道。 showImg(https://segmentfault.com/img/bVbaJOL?w=1200&h=514); 張泉靈說,時代拋棄我們的時候連聲再見都不會說,馬云說對于新興事物,絕大多數(shù)人是看不見、看不起、看不懂、來不及。自從學(xué)完 Coursera 上的 Crypto...
摘要:轉(zhuǎn)行前端有哪些疑慮在人生的抉擇處,尋求一些別人的經(jīng)驗和總結(jié),無可厚非,但是決定了就一定要堅定的走下去,謹慎是為了更好的堅持,而不是放棄的理由。寫在前面這里前后端指的是開發(fā)的前后端。 轉(zhuǎn)行前端有哪些疑慮? 在人生的抉擇處,尋求一些別人的經(jīng)驗和總結(jié),無可厚非,但是決定了就一定要堅定的走下去,謹慎是為了更好的堅持,而不是放棄的理由。寫在前面:這里前后端指的是web開發(fā)的前后端。1、前端崗位需...
摘要:轉(zhuǎn)行前端有哪些疑慮在人生的抉擇處,尋求一些別人的經(jīng)驗和總結(jié),無可厚非,但是決定了就一定要堅定的走下去,謹慎是為了更好的堅持,而不是放棄的理由。寫在前面這里前后端指的是開發(fā)的前后端。 轉(zhuǎn)行前端有哪些疑慮? 在人生的抉擇處,尋求一些別人的經(jīng)驗和總結(jié),無可厚非,但是決定了就一定要堅定的走下去,謹慎是為了更好的堅持,而不是放棄的理由。寫在前面:這里前后端指的是web開發(fā)的前后端。1、前端崗位需...
摘要:轉(zhuǎn)行前端有哪些疑慮在人生的抉擇處,尋求一些別人的經(jīng)驗和總結(jié),無可厚非,但是決定了就一定要堅定的走下去,謹慎是為了更好的堅持,而不是放棄的理由。寫在前面這里前后端指的是開發(fā)的前后端。 轉(zhuǎn)行前端有哪些疑慮? 在人生的抉擇處,尋求一些別人的經(jīng)驗和總結(jié),無可厚非,但是決定了就一定要堅定的走下去,謹慎是為了更好的堅持,而不是放棄的理由。寫在前面:這里前后端指的是web開發(fā)的前后端。1、前端崗位需...
閱讀 3765·2021-08-10 09:42
閱讀 651·2019-08-30 15:55
閱讀 950·2019-08-30 15:54
閱讀 3170·2019-08-30 13:45
閱讀 622·2019-08-29 16:23
閱讀 2051·2019-08-29 16:23
閱讀 1052·2019-08-29 15:18
閱讀 2330·2019-08-29 12:57