關於「真阿當」對目前流行前端技術的批判,大家有什麼看法?
原始微博:sass和less最近是不是被提起得少了?backbon... 來自真阿當
歡迎各位前輩詳盡論述,感覺比在微博上撕逼好點。對我們這些晚輩也是一次難得的學習機會!也希望阿當老師本人可以從技術角度做一個詳細的論述。ps. 希望回答是有禮有節的論述,人身攻擊就太 low 了...
整個前端領域現在範圍很廣,包括傳統大家認知的前端,比如各種門戶網站,微博,淘寶,QQ空間等,還包括通過瀏覽器訪問的各種移動版頁面,App內置的Web頁面,各類企業管控後台,每種東西是有其自身特點的。
像jq這類東西,具有很高的通用性,可以處理幾乎每種情況,但不等於說在特定場景下都能有優勢,需要根據業務形態,人員技能去綜合選用。
前端領域的各種東西,有很多是面對特定場景的,比如我個人花了很多時間的Angular,它在中型後台管控系統上是具有較好開發效率的,也對Java開發人員有較好的親和力。但如果我是在微博,淘寶這樣的場景下,一定不會用它。
Angular,React,Vue,這些東西其實就像MFC,VB,DELPHI。它們幾個是存在競爭關係的,但它們與直接使用Win32 API編程並沒有競爭關係,人們選擇它們,是因為在不少場景下,它們有較高開發效率。但在它們流行的同時,仍然有不少人在直接使用Win32 API進行編程。
那這些東西會不會過時?當然會,而且這個領域不停出來各種東西,比如QT,比如WinForm,比如Swing,AWT,比如WPF。
所以現在你看前端領域火熱的框架們,像不像曾經的桌面開發的亂局?但不能因為亂,就覺得他們的存在和探索是錯了啊。
傳統軟體產品的生命周期常常有能達到十年甚至更多的,但是互聯網產品的周期更短。短的周期,導致我們對開發效率更加重視,我們要麼需要快糙猛,要麼需要既快又優雅,總之需要做得快。
所以我們在一些領域,可以藉由這麼一些新東西,達到快速開發,或者容易管控的目標。雖然它們也管不了十年八年,但在短短兩三年內能帶來的價值還是划算的。
在中型或者重型領域,模型層是比較複雜的,所以在這類場景下,MV*是有存在的價值的。有些太薄的場景下,引入這些東西確實是庸人自擾。
另外一個方面,傳統的高技能前端人員是稀少的,供不應求的,如果要手工打造一個精品項目,代價太大了。現在這類框架,能夠讓各種其他領域的人快速加入,儘可能多地完成業務目標。
jq本身還面臨的一個問題是,它之前著重要解決的兼容問題,隨著瀏覽器的標準化,越來越不成其為問題。所以如果用它支撐較大業務,還是需要再去做相應規範,約束,等做完之後回頭一看,還是做了個框架,而且更加非主流。
對現有框架發展還有較大影響的是一些語言特性,比如ES6帶來的class,module之類,還有promise,rx等等處理非同步流程的理念。即使場景限制到傳統那種前端里,jq也還是要面臨這些東西的衝擊的。
在快速發展的時代,變革無處不在,當今的前端領域相當於十五年前的桌面端領域,雖然什麼東西能活下來沒法預測,但總體方向還是很明確的。我也來說說我的幾個觀點吧:
1) 追逐新技術和基礎紮實不紮實沒有必然的因果關係,不能把小孩(請允許我這個「老人」對90後們用這個稱呼吧)的技術差歸結於行業有太多新技術、新概念的誘惑而迷失方向。
學技術並不一定因為可選擇性多就會迷失,所謂「傳承」在於守住初心……2)前端技術生態圈繁榮是一件很好事情,現在的前端後起之秀們很了不起,我在用我們團隊90後寫的組件化框架nova.js,整體上非常棒,我很喜歡。
3)前端的發展非常快,那是因為互聯網發展本身非常迅速,我們只是身在一輛快車上,而不見得自己跑的有多快。在這個連一級火箭都可以回收的年代,我相信人類用不了多久就可以登上火星,到時候星球之間的互聯網,有更多技術需要突破,前端的挑戰會更大,也許大到超出你我的想像。
4)未來是什麼樣子的不知道,但是技術和思想的開放性總是應該鼓勵的。技術和思想好不好,由市場來決定,我始終是相信開放總不會把市場給做壞的,就算市場鼓吹一個慫技術,讓它一時火爆,也永遠殺不死一個行業,只要我們對未來產品交互有好的期望,市場就擁有自我修正的力量,所以沒什麼好擔心。
5)拚命推廣自家的新技術,這本身也是很自然的事情吧,就算厚著臉皮安利,也比藏著掖著對行業的貢獻大,我是很希望有更多的新技術和更多的新思想出現。
我們一起推動整個行業往前進,每個人都能從中獲益。不好學的人不管在不在技術思想繁雜的環境中都不會好好學習,而好學的人,就像一條龍,水越深,成長的空間越大~我覺得吧,每個技術都有生命的終點,越接近底層的越能持久一些。我還可以預測 VanillaJS 還能挺十年呢,有啥意思呢。你不能說「看,他們最後都掛了吧」就拿來證明我們建的樓都是偽高樓。技術的發展又不是一下子能找到能管未來一百年的方案的,不斷有新的東西出來那肯定也會有老的東西死掉,我也不知道這個現象有啥問題。大家都有腦子都會思考,即使有人無腦追時髦,那也大可以隨他們去嘛。真要抱怨那大可以仔細說說看不上的那些項目/技術到底問題出在哪。
所以說啊,為什麼前端被黑的多?
就是因為這種人啊……這位大神搞前端肯定比我強,說不定比知乎大多數程序員都強。但是從軟體工程的角度來說,這話是大一新生的水準。---------------------------
在軟體開發的世界裡,
大部分的工具,都是因為業務需要才被創造出來的。你寫個Hello world,當然可以隨手寫;
你寫個知乎伺服器試試?那必然是要參考各種最佳實踐,研究各種可以用的工具,經過精心的設計和激烈的討論,最後才能定下一個方案來嘗試,而這個方案還不一定能沾上最終的方案的邊。你寫個windows的話,那估計過程就更複雜了。所以把業務拋開單獨談技術的好壞,
這種行為你說他耍流氓一點問題都沒有那麼問題來了:
當然我不是要問挖掘機,我想問問知乎上的各位前端開發者,現在的前端和五年前的前端比,業務的複雜度能是一樣的嗎?要我說,現在的前端做的事情,就是幾年前的桌面應用(或者移動平台的原生應用)做的事情。而五年以前的大部分網頁,也就是個頁面。這幾年間,無數的產品放棄了C/S轉向B/S,
那麼請問,以前他們用WPF,winform,Qt,MFC在Client上做的事情,現在要誰來做?應該沒人會天真的以為是伺服器去做吧。那麼,jQuery和上面那些,是同一個重量級的工具嗎?
或者說,web前端以前有過為同等複雜度的業務設計的工具嗎?C/S需要MVC,MVVM這些模式才能有效管理的巨大複雜度,到了web上只要用jQuery這種原始的工具就能解決,這種話能信嗎?
所謂「工欲善其事,必先利其器」,
angular和react的誕生,絕對不是什麼不接地氣的偽高端腦洞。它們是在B/S化的大潮下,為了對應前所未有的複雜度,應運而生的新工具。--------------------------------jQuery還可以再戰五年?我覺得10年都有可能。除非……W3C給弄一套持平或超越jQuery的web API。否則jQuery總能找到適合它的場景。但是這就像:VC6.0現在的確還有人用,只不過大家開發複雜業務的時候都不會優先考慮它了。
------------------------------Angular和react活不到2年?不好說,技術更新換代很快。MVVM已經是桌面應用上目前最成熟的技術了,但是並不代表它就不會在短時間內被取代。說不定馬上就會出現顛覆性的新工具呢?到時,Angular和react的死去也就只是時間問題了。不過呢,那個新工具,妥妥的不會是jQuery就是了。首先 Angular/React 的流行,肯定和 Google/FB 的牌子有關係,跟風的也肯定大有人在,善意地點醒這些人,無可厚非。但是直接一棒子打死說這些東西是『旁門左道』、『偽前端』、『不接地氣假高大上』、『解決的都是非核心痛點』(都是原話哦),這就更多是非理性的抵觸。
我是真心懷疑阿當老師是不是因為自己的心理抵觸所以根本沒有好好深入研究過這些『新』技術。(火不過兩年?Angular 在國外已經火了不止兩年了...)這裡摘錄阿當老師的一些看法:
- 『堅信基於widget和OO的組件化編程才是正確的套路,而不是mvc或者是變種的mvvm之流,後者解決不了無數據通信的單頁應用代碼該如何組織的問題』
- 『不和服務端通信的複雜交互的業務才是前端真正的痛點』換言之,阿當老師覺得現在流行的新框架沒有一個解決了這些問題。我相信如果對於 React、Angular 2、甚至是 Vue 的組件系統有哪怕是基礎的了解,是不會說出這樣的話的。現在這些新框架的核心思想其實是共通的,那就是 UI 應該是狀態的聲明式映射,理想情況下路由也是狀態的一部分,一切複雜的交互邏輯,最終都抽象為狀態的變化。在此基礎上以組件為單位對複雜度進行切分,具體的 API 實現有差別,但其實解決的痛點恰恰就是阿當所說的。至於組件的 OO,其實在實踐中早就發現在前端過度的 OO 抽象徒增複雜度,同時引入了繼承不靈活的缺點,所以更普遍的看法是 prefer composition over inheritance,通過 mixin 或是 higher order components (高階組件)來實現組合復用。這些東西人家生態圈裡都有考慮過好嗎?
然而阿當在批評這些框架的時候,談的卻是『不該圍繞 mvc/mvvm 組織代碼』、『前端路由不該圍繞 url 實現』,『不該把後端的東西生搬硬套到前端』,我心裡的感受就是:納尼?我們談的真的是同樣的概念嗎?這話拿來批評 Backbone 還說得過去,但是拿來批評 Angular/React... 完全雞同鴨講啊!你真的理解你批評的這些東西了嗎?你該不會是看到 MV* 就沒看下去了吧?
總結一下,就是我覺得阿當老師對於 Angular 和 React 的理解是有偏差的,他覺得這兩個東西『方向不對』,問題是人家的方向並不是他所理解的那個方向... 他目前的批評,我沒看到有在點子上的,他提出的『問題』,倒是在現有生態中都有對應的解決方案,只是他似乎並不了解(或者,因為『方向不對』而不屑去了解)。
我覺得阿當老師對於 SPA 肯定是有自己的深厚經驗的,但可能也正是因為這種經驗導致的自負所累,使得他對所謂的『新玩具』有著相當情緒化的抵觸。我覺得不論是作為技術選型的決策者,還是自己造輪子的人,有自己的判斷固然是很重要,但這種判斷得建立在一種開放的心態和充足的信息量上。前端確實新東西層出不窮,但我還真不相信多到了連看都沒時間看的地步。經驗豐富的人大部分東西幾分鐘就可以判斷值不值得進一步了解,如果僅僅因為新東西太多懶得篩選就選擇自己造輪子,我覺得並不是明智的選擇。阿當是我的老朋友了。我理解他話背後的意思,這些年影響前端技術風向的往往是其它語言,早年的Java、Ruby到最近的一些FP語言,設計出發點也是根據作者自己面對的問題。所謂「新技術」「新概念」其實不新,新瓶裝舊酒。前兩天正好跟一位想轉行做前端工程師的PM聊, 用一張圖說明:
首先分為三個層面認識前端開發涉及的東西:
1. 前端工程師自我養成:純前端技術部分(HTML / CSS / JavaScript)。
2. 就業必備的技術:基礎重要,是修內功。但是找工作,就要具備工程開發能力。沒用過構建工具不會Git怎麼團隊的小夥伴一起玩?那麼困繞正源於,就業必備技術大部分都是工具,現在這個階段又處在工具的變革期。需要付出更大的學習成本。
就業必備技術的紛亂跟國內大環境有關係。比如創業性產品就是要短平快的用開源項目攢出一個產品。技術選型上就是拼哪個開源項目生態體系健全就選哪個。國產的大概不會用,不是寫的不好而是沒有一個良性的開源社區的滋養。就業必備技術可以用來找工作、提身價,對於從事前端行業謀生的人來說,當然就會過度關注就業必備技術而忽略基礎的東西。
3. 項目需要的技術:用什麼學什麼。各個公司的技術特點均不同,由產品特點決定。對於基礎紮實的人來說,學習不是痛點,持續學習原本就是常態。
在個人追求技術提升(往往跟薪資掛勾)的時候要糾正:不是掌握越多工具水平越高,工具性技術是看使用經驗、處理過案例的複雜度。想真正成為大牛就要潛心於核心技術和編程思想等內功上。可能身邊有太多通過一些「捷徑」被認可的案例吧,必須認清這不是正常態。所以我建議那位想轉行做前端工程師的PM是,平時系統的持續的學習核心技術,為了找工作有針對性的學習就業必備技術,工具在於用法,不是原理,不必過於執念。
對待技術發展要保持開放的心態,保持好奇心,持續學習。如前面所述,要分清哪些是玩玩,哪些是工作需要,哪些需要深入學習......我很在意的一點是當我們在討論這個框架怎麼樣, 那個框架怎麼樣, 的時候, jQuery 作者不懂中文, Backbone 作者不懂中文, Angular 作者不懂中文, React 作者不懂中文,幾個社區聲名赫赫的框架當中只有 Vue 的作者能夠同時 hold 住中文和英文社區而前端本身的發展, 從規範, 到瀏覽器的實現, 到框架, 到社區維護, 絕大多數都是外國人在操作我們大量用戶就算對框架有反饋, 也很難被對方作者接收到再做回復有點像說某某公司因為什麼什麼過幾個月要倒閉, 然而聲音太小對方公司根本沒聽到
話說,只有我一個人關心,阿當說的抽象於Django和ROR里得到基於非MVVM生態的解決方案么?
------然後開始跑題-------&>
現在的web界面已經越來越往App化、基於高度抽象的形式去build了,從層級上來說,自然是越靠近底層的越不容易被替換,但同時因為偏底層,雖然生態足夠穩定了,但構建效率也要低,否則技術發展又圖什麼呢?
選擇一項技術用來構建項目,往往是有多種考量的,有個答主提到了VB做GUI 以及用ASP寫頁面,不巧我似乎還都躺槍了(都是淚)。但我們得辯證的看,不能說現在這個節骨眼還選擇jQuery就是錯的,但如果項目設計以及配置上允許但仍然毅然決然的選擇舊生態,我就會好奇,因為於我而言,我實在無法對著社區發展的紅利熟視無睹,工具鏈的演變+框架的演變所帶來的開發效率的提高是實實在在的切身利益。
jQuery或者說JavaScript本身都是時代與人共同選擇的產物,你看 web assembly都在整了,誰也沒辦法說未來五/十年,前端以及Web到底會進化成什麼樣,且行且覽且學。
Anyway,做符合項目需求以及時代趨勢的選擇。jQuery是死是活,我其實並不太關心,再說了,討論X年Y年其實沒什麼意義,也沒見過幾個互聯網產品運營超過十年,可以不重構,還能良好迭代的。
重要的是,千帆過盡,手裡到底留下了什麼。
----------------------------------------------------半夜起來喝茶的分割線--------------------------------------------------------
我半夜起來突然覺得,在這個話題底下,我是不是該提下這本書? 基於jQuery的,非MVVM SPA解決方案。
單頁Web應用 (豆瓣)(但我看這書的時候內心os是這樣的:Mmm如果用mvvm或者jsx的話這個模塊的視圖同步的邏輯就更簡單。至少,在代碼規模上我們可見一斑....,我一直覺得代碼越少說明描述問題的邏輯越少,也越容易維護不是么)我覺得這不是個技術問題,而是個心態問題。作為一個做技術的人,時時刻刻都要更新自己的技術棧是理所應當的。但作為一個人來說,精力總是有限的,因為各種各樣的原因,總有一天各位也會折騰不動,變成這個博主的這種心態,自認為已經掌握了真諦,可以以不變應萬變了。我個人認為,我們這些還折騰動的人,一定要珍惜青春多折騰,去偽存真,爭取在折騰不動之前達到足夠高的姿勢水平,這樣以後我們在微博上裝逼的時候才不會一下就被小輩看穿,撲倒在沙灘上。
其實我並不是前端工程師,但因為所帶的團隊包含了前端這個工種,為了更好地理解前端工作所以花時間在學習前端技術。簡而言之,我並沒有前端工作的實戰經驗,但因我是一名資深的軟體工程師,而軟體開發無論哪一個工種有很多東西卻都是相通的,所以在此也發表一下自己的看法。
我所使用的開發語言主要是C/C++,1999年從C的POP(面向過程編程)過渡到C++所支持的OOP(面向對象編程)時花了些時間才真正領悟到OOP的優勢與好處。當然,與我同齡之人不少在編程思想上仍停留在POP(儘管他們也用C++),這些人大多認為「C++太饒了」。我的這類經歷在前端技術快速發展的今天其實也出現了。
前端技術的快速發展最根本的原因是前端項目的規模在不斷地增大,這使得採用原生的HTML/CSS/JavaScript去做前端開發很難滿足高可維護和高開發效率的要求。解決大規模軟體的可維護性問題需採用更為抽象的軟體設計方法,這一點與Brooks在《人月神話》中所提出的「軟體開發的首要任務是為軟體抽象概念,而次要任務才是將抽象概念通過編程語言去表達」的思路是一致的。正因如此,業內在這塊有很多象React/Vue這樣的基於組件(Component)的新設計思想的探索,而且可以肯定的是,這樣的探索不會停止,且會越來越熱鬧。從行業發展的角度,這絕對是好事!明白了這一點,就一定不會被各種前端技術的出現感到意外。
但接下來的問題在於:我們要去跟進這些技術嗎?我想將這個問題拆解為「前端技術學什麼」和「如何有時間去學」兩個問題加以解答。
對於軟體開發,無論學什麼具體的技術,最為重要的是要學習設計思想和設計方法,否則必然被層出不窮的新技術給整趴。一旦我們會從設計思想層面去理解一種技術時,就能很快地抓住其重點,且這種理解有助於豐富個體的設計能力與設計思想,甚至讓我們自己有可能創造出一個新的框架。就這點來看,我更樂意看到前端同學更多地討論每種新框架的優點、交流實踐體會和探討框架的不足。從這一點來看,我們應當跟進前端技術的發展。
但是,跟進這麼多的新技術哪來那麼多時間?這個問題其實把我們從學習拉回到現實工作中。毫無疑問,前端項目的複雜度一直在增加,如果我們停留在只使用原生的HTML/CSS/JavaScript一定是沒有辦法提高工程效率的,在工程效率無以改善的情形下,我們很可能因為忙於工作而更沒有機會去學習,這某種程度上給自己製造了不去學習的借口。從這個層面來說,我們仍要很實際地嘗試使用新的技術去幫助改善工程效率,從而有利於讓自己的工作與學習形成正向循環。
以我的觀點,個人反對阿當對於新技術的過多批判,反對類似CSS比React等框架更有價值這樣的論調。CSS是很重要,但它沒能引入很好的設計思想幫助提高工程效率。我一直持一個觀點:討論哪一門編程語言更好、哪一個框架佔優是不成熟的表現。每一種技術都有其背景和應用場景,我們需要的能力是通過「打組合拳」的形式吸收各種優點去解決工程質量與效率問題,而這個「組合拳」如何打就是能力了,這正是我們在工程師職業生涯中最要學的。
我在《專業嵌入式軟體開發》一書中提出了這樣的想法,即軟體設計是質量之本。千萬不要以為掌握多少技術就能成為大牛、就能產出高質的代碼,也不要以為軟體工程師所做的都是軟體設計工作。對於那些排斥新技術的人,一定能提出「學會騎自行車有什麼用,還不如走路來得實在,且騎在路上多危險」這樣的主張。這些人或多或少都有固步自封的嫌疑。當然,新技術可以不去跟進,行業也不會因為某些人不跟進而停滯向前發展。與其停下張望與辯駁,不如擁抱前行,前者帶來的是焦慮,後者給予的卻是踏實。這麼明了的事,不知為何能引來那麼多的口水!
我所寫過的《軟體技術發展的驅動力》一文推薦讀一下,有助於理解為何有那麼多的新技術出現。另一篇值得一讀的是《軟體設計的真諦》,可以了解我對軟體設計的一點看法。前兩天還在組裡分享了關於前端庫/框架選型該怎麼做的問題,當時我給組裡的一句話就是如果你的項目已經處於中大型項目了,那麼在前端範圍內引入 mv* 是非常有必要的,職責分離啊,但是你就是為了寫個宣傳頁,上線兩天活動就下線了的,你非得用各種 react vue angular,那我只能說你是大炮打蚊子,可以這麼用么?當然可以,沒什麼實現不了的,可是,有必要麼?
這兩年前端屆的發展完全可以用飛速來形容,前兩天一群 RD 來跟我聊的時候都說看不懂現在前端發展了。可是這種發展真的就是不健康的么?從我入職現在公司以來已經著手重構過3個大系統了,每一個都是前人遺留下來的。在當時的業務需求下,一個 requirejs + jQuery 完全 hold 的住,可是呢,系統隨著越來越發展,最後完全變成失控的狀態啊,尼瑪你知道我看見那幾千行甚至上萬行的 js 文件是什麼感覺么?當然你可以說這個是使用不當,我用 jQuery 完全可以寫出層次分明的代碼,這是你人能力的問題。OK,這個結論我承認,可是既然現在已經有現成能夠解決問題的工具我為什麼不用呢?
後來直接上了 avalon.js(PM 死活要求兼容 IE8以及我個人經過評估認為 angular 給組內內幾個哥們寫他們會瘋掉),拋除第三方庫業務代碼直接減少二分之一,原本需要兩三個人的項目後來只需要半個人就可以 hold 住,難道不是生產力的提升么?
後來第三個複雜系統採用 vue 進行重構則是因為完全看中了 vue + vue loader 實現 mvvm + scoped css + 單文件組件編寫 的優勢,雖然還沒有重構完畢,但是現在收益已經是組裡完全可以看得到的了。
所以我想說的是,並不是每一個技術出來都是為了解決所有問題的。你要說我只有木頭,鎚子,釘子,就能完成所有高樓大廈的建設,我信,我也相信你有那個能力,可是成本呢?
PS:也並不是說你會用了目前最火的一堆框架,你就可以傲世群雄了,手裡有鎚子見到左右的東西都以為是釘子也並不是什麼好事兒…本來想寫個幾百幾千個字的,感覺並沒有卵用,該學的學該用的用
- 不以成敗論英雄;
- 技術社區需要不斷的成長和進化,推動技術和標準的發展;
- 在一個時間點,在特定的場景和資源的情況下,某個技術就是最好的;
- 說 Backbone Angular React 不好的,要麼是沒實踐過,要麼就是傻逼。
看到知乎上的明白人還是很多的,我就放心了……
這種反智主義的言論表面上帶著「過來人經驗之談」的淡然,實則透露出一種狹隘的傲慢。有些人吶,只因想通了幾個小問題,就以為掌握了宇宙真理,殊不知大家關注的問題早已不是他原先看到的那個了。
面對層出不窮的新技術,積極的人看到的是蓬勃向上,不斷湧現的新理念也令他們深受啟發;保守的人,看到的是混亂不堪,繼而愈發對自己的成績驕傲自持。點醒不顧自身現實盲目跟風的人,是好事,但說什麼 「jQuery還能堅挺5年」,就帶有明顯的抵制進步的情緒了,是必須要狠狠批判的。
前端技術發展到現在,技術和工程哲學方面的問題(所謂業務與技術孰輕孰重,什麼是團隊成長和協作的理想態,等等),早已有了完整的共識。這個共識,也應成為現代前端團隊的標配。還在這方面掙扎的團隊請負責人自行剖腹謝罪。
你們前端啊,萬事還是先承認自己是個程序員,一切工程問題,都按代碼世界的基本規律來解決比較好。
感謝諸位大神為新人消除誤導,希望大家都能從這次討論中有所收穫,今後就事論事,只聊乾貨,不帶情緒。
從這個角度出發,我這篇答案也是技術討論里的噪音,求摺疊。阿當曾經是前端屆的牛人,但不代表現在還是,就如我一樣。所以,面對這種言論,一笑而過就好。
更新一下,洗澡時候反思這次討論的一點想法:
上面言論,我知道有槽點,不過想了想還是放出來,希望能夠交流一下----------- 分割線,下面是原來的內容 -----------
前端界今天能討論一下這個問題,我覺得是挺好的,比以前在討論「javascript語句後面應該加分號嗎」好多了。
一直有在微博上關注阿當,他之前也發表過對追新技術這一行為的看法:他今天能說出一番話,我覺得跟他曾經熱衷新技術,並不斷思考新技術對前端開發人員的意義是有很大的關係的。這些年,前端的確有很多新技術「你方唱罷我登場」,像coffeescript、extjs還有prototype。現在用的人已經比較少了,而且也有很多人還沒來得及學習,它們就開始淡出人們的視野了。對於沒學習過這些新技術的人而言,的確會有損失,但也不是說沒學過就損失慘重。
現在很多面試官,都喜歡問新技術的問題,好像沒關注新技術,就代表這個人不思上進了,這其實是欠妥的。
另外,國內追新技術,並能在理解它基礎上,建立起自己一套東西或者有深刻理解和實踐的,感覺是少數。尤小右寫了vuejs、鄭海波寫了regularjs、司徒正美寫了avalonjs,像題葉、徐飛還有大漠窮秋這些前輩也寫了很多關於新技術的優秀文章。毫無疑問,像他們這樣熱愛鑽研的人,肯定能從新技術上受益匪淺。
不過大部分鼓吹新技術的人,貌似都沒有上述這些人的鑽研精神,經常是社區興起什麼就學什麼,一是為了面試,二是為了談資。
就我個人的看法,新技術不一定要去追,完全可以等它成熟後,再去研究。現在很多大公司本身內部就有一套成熟的框架,很多項目都是會用到這些框架。這些框架往往跟自己公司業務結合密切,也經過了內部員工的充分實踐,花精力在研究這些框架上面,我覺得也是一個不錯的選擇。配合平時大量的工作實踐,會更加深刻理解地當初這些框架為何那麼寫。
所以,我的看法就是,新技術可以去學,不過最好是等它成熟後再去鑽研,平時可以用這些新技術折騰一下工具之類的東西。沒有去學習新技術,也並不意味著這個人不上進,有些人對提高程序性能感興趣,去研究底層的東西,也是極好的。
PS:阿當說的jq還能堅挺5年,其實是指它已經成為工業標準,有長久的生命力。「我相信jquery還能堅挺5年,不相信rect和angular能熱過兩年」,其實就是說不相信react和angular能成為工業標準。這句話,更多是反對某些同學鼓吹的它們「這是未來的前端方向」。所以,阿當本意根本就不是否認學習新技術,而是批評業內這種浮躁的氛圍(人云亦云)。
以下是書本截圖時間備註:請勿將這次處於辯論中心的阿當前輩以及尤小右前輩跟上圖兩類人對號入座,我放這圖上來,只是覺得這次討論或多或少涉及到相關的內容,正好今晚看書看到這幾頁,就放上來以供閱讀。No king rules forever.
——King Terenas Menethil II
各位前輩的主要觀點是,不同框架有不同場景的用武之地。這當然沒錯,甚至很對。
雖然對前端的框架還沒有什麼深刻的理解,但我很擔心地看到前端圈日益焦躁的氛圍,在這裡,我想嘗試另外一個角度去解讀這個問題:承認我們的無知。
我們在解讀歷史的時候,往往有很多後見之名。因而歷史學家可以分析出很多諸如為什麼群雄割據過後是秦始皇統一了天下的道理。是,這些道理都成立,但是如果秦國能一統天下是那麼顯而易見的事,為什麼當時的六國沒有在更早的時候將其扼殺在搖籃,或是看到歷史的必然性而索性及早棄械投降?
因為即使我們並不是先知,但只要我們所做的預言能有一次準確就值得我們炫耀了——因為不準的時候我不會拿來說我五年前預言了什麼,甚至我自己都不記得了。比如對於 jQuery 五年後還會不會存活的話題,一半人說會,一半人說不會。那麼恭喜你們,整個前端界一半的人都對這個行業的預測如此準確,真是對行業有些深刻的理解啊!
可這,又如何呢?
今天,我們的前端圈子裡有太多這樣討論得熱火朝天的話題。大家似乎討論的是什麼框架好,什麼框架在什麼場景下適合,什麼框架有問題,什麼框架就是個巨坑根本不值得我學。
當然,這顯示了我們前端界熱火朝天的蓬勃生命力。但是,有時候會不會覺得這成了一種消遣?一種和無腦韓劇低俗網文一樣的消遣。我並不是說韓劇和網文就一定無腦低俗,比如韓劇里有不少深刻反思社會問題的佳作(強烈推薦《住在清潭洞》),網文也一樣。一開始,我們也沒認真看待這個問題,覺得沒啥大不了的,不就是網上又有人撕逼了,我湊個熱鬧看看。只是如果消遣佔據了我們過多的時間,如果這種消遣的文化成為主流和習慣,那麼犧牲的必然是本該用來鑽研技術的時間。而更嚴重的問題是,我們會慢慢失去思考的能力和學習的動力。消遣娛樂看似最無毒無公害了,但也最容易在不被察覺到的情況下就蠶食了我們的生活。這方面,《美麗新世界》和《娛樂至死》都談得很深刻。
此外,對這個問題言之鑿鑿的都是前端大牛們,一方面他們老司機自然懂得多,說出來也有說服力;另外一方面,畢竟那麼多粉絲,我們也更容易相信他們的權威。既然大牛都說 react 過時了,那我樂得少學點了。然後大神們更獨霸江湖了… 人家是用過了有經驗了隨便吐槽兩句,即使踩著巨坑過來,那人家也是長了巨大的經驗的。你跟著起鬨,聽風是雨,什麼都不用學了,甚至聽多了過兩天自己的撕逼技能也加成了。這樣的未來,我倒是覺得更好預測,你們說呢?其實阿當說的東西很有道理。
很多人的問題不是學了最新的框架/技術,而是他們「自以為」學了。現在用React的人很多,講一講React哪個api設計得不夠好,有幾個人能說出來?
寫過Angular的人很多,說說Angular是解決了什麼痛點才火的?用React的人應該都在用flux了,來講講它有什麼問題,發展方向在哪,社區有哪些東西正在朝著發展方向前進?用Gulp/Grunt/Webpack然後嚷嚷工程化的人多,Gulp相比Grunt進步在哪,Webpack又好在哪?很多人學了一個看起來牛逼的東西,都沒全會,也不知道這東西解決了什麼問題,甚至文檔都查不利索,就急著宣布這東西牛逼,無往不利,彷彿自己也跟著牛逼,跟著無往不利了
我在現實中也遇到過,對git上trending的項目門兒清,一個庫你問他看過沒,他說看過,拿最基礎的問題一問就說不知道,明明答案就在getting started里啊!這樣的人是老人其實還好,最多也就離遠點,但要是新人,真的讓人嘆息
但是,React、Angular們對前端生產力的提升和貢獻是顯而易見的,至於層出不窮的新技術讓新人迷茫,這難道是技術的問題嗎?
誠然有很多新的輪子本身是試錯的產物,也有很多本來優秀但被歷史埋沒的遺珠。但是不造他們,不去試錯,停下腳步來等新人?
說到底這個問題無關技術也無關圈子,如果一個人準備入行或者已經入行,卻連自己在這行的核心價值都想不清楚,整天追著新技術自我牛逼。那大浪淘沙之下,淘掉他們又有何不可呢先原樣引用過來
sass和less最近是不是被提起得少了?backbone呢?響應式設計呢?今天說得起勁的angular和rect,是不是半年後也逐漸消停了呢?一切不接地氣的性價比不高的偽高端,都會消停的。我相信jquery還能堅挺5年,不相信rect和angular能熱過兩年。踩jquery的一直不會停,新時髦也不會停。話放在這兒,兩年後咱看看。
SASS 和 LESS 被提起的少是因為大家已經習慣了使用它們了,沒必要再總是特意提起了。像我現在已經習慣了用 LESS,很少直接寫 CSS 了。CSS preprocessor 目前發展的程度完全夠用了,如是而已。
Angular 和 React 不會死。Angular 2.0 看起來蠻 promising。而 React 的開發風格也深得一部分人的喜歡。Angular 已經熱了遠超兩年了,繼續熱下去我看也很正常。當然並不是說只有這兩個框架會流行。確實會有越來越多的新的、定製化的框架湧現。
倒是 jQuery 過兩年就沒什麼存在的必要了。現在瀏覽器在 DOM、HTTP request 方面,已經提供了一致且便捷的 API;即使要考慮瀏覽器兼容問題,polyfill 也會成為主流的解決方式。就我自己來說,我實在不知道還要 jQuery 那一套自己都不 consistent 的東西幹嘛。
當然話說回來,雖然我把原 po 主的每一句話都反駁了一番,但是某種角度上我也能理解原 po 主的 concern。如同有些答主提到的:「前端圈很浮躁」。
這種浮躁似乎是從上游的瀏覽器廠商就開始的。自從 WHATWG 脫離 W3C 單幹以來,web 技術標準就一直沒有穩定過。ES6 是一個典型:從其它語言那裡拿來太多看起來很 fancy 的特性和 syntactic sugar,然後還不等標準最終確定,就大量被應用起來。Chrome 一路狂飆著版本號,幾乎每個版本都有新增的 API,也隨時都有 deprecate 掉的 API。TypeScript 從 1.4 開始,每一兩個月的新版本都有著大量的改動,一邊追趕著 ES6 的特性,一邊兼容著老版本 TS 的語法。整個前端技術棧就沒有什麼地方是穩定的。在這種前提下,各種新的理念、類庫、框架、構建工具層出不窮,其實也就不算奇怪了。
我也不喜歡為了趕時髦而隨時追最新的框架。選擇適合自己的技術是最好的;一味地吹捧新的東西沒有多少意義。像我就不會刻意吹捧 Vue.js,也不會用上 ES6 的 generator 等特性。
但 JavaScript 只用來寫一輛行腳本的時代已經過去了,所有人都埋頭用 jQuery 的時代也已經過去了。未來是百花齊放的。你可以寫 vanilla ES6,也可以用 Angular、React,也可以自己寫一個框架,也可以固守 ES3 的語法照樣寫出 fancy 的 web app 來。每條路都沒有錯。
這樣的未來也不是壞事。推薦閱讀:
※在CSS中所謂「標準的盒模型」有幾種,IE早期的盒模型是標準盒模型嗎?
※前端,準備年後跳槽,從現在開始準備,該制定怎樣的計劃?
※為什麼很多瀏覽器不直接支持原始的 CSS3 樣式,而要使用特定前綴(如 -webkit/-moz 等)呢?
※寫前端頁面的時候,是先把html骨架寫好再寫css,還是一邊寫html,一邊寫css?
※只用 CSS 能玩出什麼花樣?
TAG:前端開發 |