前端各類框架和工具不斷頻繁更新,作為開發者我們要怎麼對待?
React、Vue1到Vue2、ng1到ng2到ng4、Node.js v8、webpack1到webpack2等等這些組件框架前端工具不斷頻繁更新,作為開發者應該如何應對?
去不斷更新自己項目中使用的版本?
好像也不太現實吧。想聽聽前輩們的意見和建議。
如果選型是擁抱社區的,並且項目長期維護且活躍,積極跟進版本幾乎是唯一的選擇。偷懶不跟的話過了半年遇到某個非升級無法解決的 bug 時,或看到一個上次跟產品懟了半天說實現成本太高的 feature 被偷偷實現了想用時被迫跳十幾個(...)大版本,痛苦會更大。
較好的方法是,依賴的組件和庫有大更新時評估一下必要性和可能的影響和工作量。覺得有必要升級了,跟 PM 溝通一下排進開發周期。把合理的版本跟進作為日常迭代的一部分。
還有個好處是有些依賴中你根本沒意識到的 bug 社區里有人給你指出來並修掉了,下次被測試同學發現時你就可以輕鬆把鍋甩給組件庫併名正言順的要求版本升級了。
當然如果項目就依賴某個 DOM 操作的 util 庫或所有組件都是自己擼出來的那也就無所謂升級不升級了……
別的不敢說,Angular 2+就一條: 跟緊release,出了就升,盡量早升,在自己的軟體發布前兩周暫停升級就可以了,發布完立刻跟進。千萬別等兩年再一次性跟進。
緊跟式升級策略的優點是可以得到充分的調試和測試時間,對於能嚴格遵循semver標準的框架,這是最優解。根據需求不斷學習。
已經開始的項目 除非特殊情況 不要更新到有大幅度break change的版本(如angular.js 1.x到angular 2) 框架版本小幅度更新還是可以的
對於個人來說 框架數量多更新快 某種意義上說明社區活躍
但是不要被牽著鼻子走了,建議不要什麼框架都學,而是要學一些特性原理,把特性原理搞懂了,那些框架不過是特性的排列組合
這個和學語言一樣,不應該學語言本身,而是應該去學語言的特性
提升版本都不算大事,一步一步來就行,整個換掉才是nightmare,不過習慣就好。
明白什麼是真正重要的
知道什麼是重要的不容易,人太容易走神了,注意力太容易分散,人的感官依據外界刺激的強烈程度而反饋,刺激越多越新鮮越強烈,人的反應就大。在這些刺激之中,我們用在思考」什麼是重要的」這個問題上的時間變得越來越少,我們獨立判斷的能力一天天被磨損。
前端開發里真正重要的東西,很多年來都沒有變過,也不會變(至少是很長時間內)。
一是語言本身,HTML, CSS, Javascript,前兩者因為簡單所以常被人忽視,但深究也有不少學問。Javascript最值得說,大家都知道前端的核心是Javascript,我們寫來寫去都是Javascript,runtime跑的是Javascript。但真正投入到語言的學習中的可能不多,很多時候我們都是被開發任務帶著走,需要的時候學兩下字,學習也就是搜索一下,很多時間被工具的熟悉消耗掉了。工具當然是需要熟悉的,只不過如果沒有對語言核心的掌握,配置工具的時候就「配不進去」,只能讓我們拷貝黏貼,使用過Gulp,webpack的應該都有這些體會。
二是web平台的工作原理,DOM,HTTP,瀏覽器裝載渲染這些,細節有很多,這些東西不因為我們用的庫和框架的不同而改變,而是庫和框架在它們的基礎上建立起自己的封裝實現。要真正理解庫和框架,往往核心就是理解它們的底層是什麼,很多時候就是平台的API,平台提供的基礎設施,比如NG用的zoneJS實現了change detection,如果理解了它背後的原理是對於瀏覽器非同步API的patching,NG也就不神秘了。
還有一個是程序設計的能力。我可以不知道怎麼在「框架A組件化」,但我知道怎麼「組件化」,後者比前者更有適應能力和長期價值,萬變不離其蹤。JS程序設計,無論你用什麼框架,真正需要注意力的是一些通用的問題,比如如何合理地實現App的模塊化,如何讓這些模塊通信,什麼是合適的通信機制,什麼模式可以幫我架構等等。理解這些,任何框架我拿起來都可以和原有概念體系接上,並不需要特別地學習,用就是了。
明白了什麼重要,我們就在它們身上投入更多,不那麼重要的那些,就少投入一點;對待的心態也有所區別,核心的東西追求完整透徹,輔助的東西我們可以拿來主義。對待工具就用對待應有工具的態度,拿出來用,用好放回去,不用請它們吃飯。
沒人有選擇的「智慧」,區別只是勇氣
對待那些很不重要的東西,我們需要有做選擇的勇氣,這對嘈雜的技術圈裡的不少人,是一個不小的挑戰,所以需要自我訓練:不用就是不用,不喜歡就是不喜歡,大大方方地懷疑,大大方方地恨。
每個人都做過nice guy,覺得所有新技術都是機會,所以一一請吃飯 —— 結果被強姦一百遍。
「大大」,「巨巨」說得天花亂綴,招聘啟示寫得再殷切,但決定是你自己的,你的精力在你有限的時間裡是極其有限的,所以要把技術當成主動投資,投資就是選擇這個,不選擇那個,是有意識地自我控制的行為,投資不是把一萬塊分成100份,每份都壓100塊。三個框架你可以都做點功課,但你得決定投資那個,決定了就投入。
現在的技術,今天一個花樣,明天又一個花樣。每次都有承諾,每個承諾都很可疑:如果你這樣這樣這樣再那樣那樣那樣,問題就解決了,你看,很簡單吧!比如大家都熱愛的React,我個人就十分討厭,不管他們怎麼說,對我來說這就是一個缺乏品味的技術棧。今天Flux,明天Redux,後天MobX,破壞了一致性,反而回過來鼓吹JSX的表現力。Redux這樣的承諾,化成「直觀」的圖形,多數人類卻看不懂,卻說它好用。
放屁。
我個人的看法是FB的技術團隊只懂Hack,不懂設計,只不過有時候廠子大了Hack做得像模像樣,讓人誤以為是好設計。很多人把自己的項目當FB。
Not me. 我決定不投資React,這是我的選擇。因為這是我的選擇,所以你也沒有必要給我留言和我爭論。我做了一個選擇,我心安理得,我承擔潛在風險,我願意。
你也應該這樣。
你可能有不同的選擇,選擇什麼的結果都不會很差。但是如果你沒勇氣選擇東搞搞西搞搞什麼都搞,被坑了,你得先怪你自己。項目是你的,代碼是你來維護的,搞好搞壞是你的。所以你得負起責任來,對自己誠實一點,做點接地氣的決定。
不要害怕和別人不同,需要和別人不同的時候,就結結實實的決定。你受的教育不教獨立和勇氣,所以你得自己訓練自己。
有時候靠譜的事只有一件,就是「順其自然」
工具的開發者真想坑人的很少,但他們也是人,有時候一激動就把我們坑了。
把我們坑了不意味著工具不再提供價值了,我們應該把注意力放在它們提供的價值上,善加利用之,它升級你就升,他說同志們下一版本咱不兼容了,請大家把app重新搞一下,那你就搞,早點搞,不要想東想西耽誤了時辰。多數時候也不過是npm update,不需要花太多力氣。
在有價值的東西上投入一點時間來維護,這就像你投資了基金要交點年費一樣,是正常的。你上了賊船,沒太多選擇,你不得不尊重這種選擇,繼續搞下去。
有時候該換的時候就換,工具只是工具,不是結婚對象,策略靈活務實一點,大多數情況下,做一個pros/cons分析並不難。
同樣,不該換就不換,工具服務於更大的產品和商業的目標,如果這些目標是達成的,誰在乎你用的那個東西是不是最新版本呢,不是最新版本又怎麼樣呢,團隊用了幾年熟悉了,能當褲子穿了,就是自己的東西,版本也就沒那麼重要了。
搞清楚收益與成本,該幹嘛幹嘛。
我認為 前端類庫不斷頻繁更新,對於前端人員來說,是更多選擇,而不是負擔。
每種東西出來,肯定是用來解決特定領域問題的,你要做的就是到官網看看,搞下來玩一玩,大概摸清楚它的深淺和長短,在項目需要時,選擇一個最合適的放進來也就行了。
這個得分兩個方面來說,一方面是個人,另一方面是團隊。
對個人,我認為如果要選擇擁抱開源社區,那麼學習的心態和擁抱變化的心態要有,所以,無論是小版本的迭代,還是break change都應該持續的學習跟進,作為自己的能力儲備,並根據自己項目的需求適當的引入新版本的特性。畢竟是自己的項目,自己不介意的話,挖坑折騰一下也沒關係。
對團隊,我認為就應該考慮一下哪種框架更適合團隊成員使用,以及更有利於團隊項目進行。選型的第一原則就是穩。使用到團隊項目的框架應該是穩定的,否則在實現某些需求的時候發現框架存在某個難解決的bug,那可能會把整個團隊甚至公司的項目進度都給拖累了。所以,對於團隊項目的開源技術方案,我一般優先考慮github上的,然後看star數,然後看issue,提前判斷一下有哪些坑。面向團隊(這裡的團隊指的是創業公司那種幾人規模的團隊),選型其次要考慮的就是是否能在團隊中很快被消化。比如MVVM是選Angular,還是React,還是Vue。Angular可能更面向企業級,React最火,Vue上手容易,其實各有所長,怎麼選?看團隊,就拿我現在的團隊來說。公司那些小朋友,經驗不多,基礎還有很大提升空間,要麼應屆,要麼畢業一年,對Angular也只有實習經驗,Vue自己研究過,React沒碰過,然後我們公司項目的節奏又是很緊張的那種,好的情況一個月上線一個新項目,從前端產品頁面到後台管理系統一整套那種的,糟糕的時候兩周。注意,是上線,真正給到開發的時間不多。所以也就是說沒那麼多時間折騰高大上的技術,我便選了Vue作為MVVM框架,因為上手容易呀,團隊能夠很快用它上項目,在配合其他主流的組件庫進行封裝,快速完成需求,從而達成快速上線的目的。
不過考慮到團隊的將來,也不保證Vue能一直用下去,關鍵還是看需求和成本,功能需求,性能需求,開發效率需求,學習成本,維護成本等,所以我也在不停地關注Angular和React,甚至其他的開源框架的發展,並一直學習積累,也許會在今後的項目考慮遷移。
絕對不要在工作項目中去用最新版本!
絕對不要在工作項目中去用最新版本!絕對不要在工作項目中去用最新版本!
工程,就是用最穩妥最可控的方法完成需求任務,沒人要求你必須要用上最新最炫酷的技術才叫工程。
而且,每個軟體的最新版本(尤其是最新大版本)都很可能出現這樣那行的問題,沒法證明問題不存在,只有大範圍使用一段時間之後,把bug都fix之後,才能比較有信心用在工作項目中。
可能你會說:大家都不用最新版本,那誰去發現最新版本中的問題?
工作項目中不用最新版本,但是你自己寫著玩的個人項目中可以用啊,發現了問題就彙報,這樣才能推動開源軟體發展。
最後再強調一句:工作中不要去做小白鼠,如果你不想被莫名其妙的bug纏身的話。不斷學習,32歲零基礎入行前端. 2年體驗路徑html~php~wordpress~python~django~knockoutjs~angular2/4
發現框架怎麼換根本無所謂!其實框架真心簡單,換來換去都是那些概念,一周基本能上手大部分?否則沒人願意用,框架就為快速上手而存在,而且新的框架太牛逼,效率高得飛起,必須上呀話說我們都是用別人的輪子造成車,有必要去詳細研究輪子的實現嗎?快速出產品才是正途呀??
越來越覺得寫APP沒挑戰,演算法程序員才是王道?
最後的最後,告訴題主一個神奇的網站,我這樣的工具APP開發菜農真心沒原創多少代碼,可剽竊的東西太多了!而且效果巨牛逼,什麼設計師,什麼後台,根本不需要,不需要呀!??這個神奇的程序員面基專業網站就是:github
對了還有一個程序員知乎:stackoverflow我全部放棄了,,現在更專註於基礎性的學習(比如:深入理解計算機系統 設計模式 演算法導論)和讀一些感興趣的書籍(不局限於計算機)!
程序員要擁抱變化
除非你精力旺盛,恰巧又有充足的時間否則還是跟著公司走前端框架日新月異,幾個月就能出新的恕我淺薄,本身完全沒有時間和精力去完全學習的,看看到還可以
學習使用和在項目中使用要分開。
個人建議是,持續學習,但是在項目中不必急著更新,只要保持能滿足開發需求且是穩定的版本即可。
比如vue2.0剛出的時候,如果在項目中把1.0全面替換,容易出錯,而且改造成本也不低。不如等自己真正的掌握2.0的各種用法,在合適的時機或者在新的項目中使用。
合適的時機往往是項目不太趕,但是需要完善基礎框架時。
總之,急流中也要穩步前進。項目不用跟著升級,根據自己發展方向學習可以跟著升級。
選一個最合適,最好的不一定是最合適,綜合團隊,項目,周期亂七八糟的一起考慮
推薦閱讀:
※AngularJS、React 真的被淘汰了嗎?
※TypeScript中的裝飾器(Decorators)的本質是什麼(或者說它具體做了什麼工作)?
※在使用前端框架的同時,該如何提升自己原生JS的能力?
※2016 年的今天,Web 前端框架是否已經同質化?
※2017 年,前端的發展是否趨於平緩?