最近一期的《程式設計師》刊登了一篇前端年度技術盤點文章《2016年前端技術觀察》,作者是曹劉陽(阿當)。
關注過 2016 年前端微博網紅圈的同學肯定知道,阿當基本把新技術都吐槽了一番。然而這次的文章,就像 @賀師俊 所說的
(這篇文章)是從CSDN/程式設計師這個老牌程式設計師媒體上發表的,就讓前端圈之外的人誤以為阿當的觀點是前端行業的主流看法或者至少是有很大影響力的意見。這會誤導其他技術人員(包括技術管理層)和非技術人員(如產品、設計)。
大部分前端從業者是不贊同阿當對新技術的批評的。
但是作為一個有著「實事求是」精神的程式設計師,你在批判一個人或事物的時候,是不是應該先了解一下他或它。我們在反駁阿當之前是不是應該先看完他的文章?
可是啊,
原文一共一萬兩千多字(加程式碼)!為了需求加班加點的程式設計師有時間看完嗎?
我本著「我不入地獄誰入地獄」的精神,把原文簡化到 1314 字(這個數字是什麼意思……),並放在知乎「如何評價真阿當的文章:《2016年前端技術觀察》?」這一問題下面,以饗吃瓜群眾。希望群眾們知道阿當在說什麼,以及前端大神們反對的是什麼。
簡化文如下。
看之前先看我的總結:
阿當文章實在太長,但是主要論點只有一個,就是注重基礎,反對新技術。後半句顯然不對(雖然文中列舉了很多反對理由);前半句看起來對,但是論據有問題。
論據主要有
1 你水平不行,用不好新技術
2 你精力不夠,只能先學基礎
寫議論文重點是可靠的論據。
次要論點就是「我當年很牛逼」。
以下是我自己理解的,以阿當的口吻說的,大家不要以為真的是阿當說的(不保證還原了原意)。
2016 年我噴了 Sass、React和Angular,被前端各種佈道者鄙視,於是我們互相傷害起來。
但我研究的技術可比你們學得這點東西多多了。
我以我的經驗,認為這些才流行幾年的玩意兒,是值得懷疑的。
- 有些玩意是高手發明出來給高手用的,小公司的幾個前端玩得轉?
- 你們這些佈道者只說優點不說缺點是什麼意思?安利你聽說過沒。
所以前端新人們,你們要長點腦子,別聽風就是雨。
關於 SCSS 和 LESS
優點你們都吹得那麼好,我偏說缺點。
直接能執行在瀏覽器裡的 CSS 你不用,加一道字串變化在中間擋著,一來增加上手門檻,要學新知識;二來新的語法增加新的複雜度;三來這玩意有傳染性,我想用你的程式碼我就必須也用 SCSS/LESS。
而且,你 SCSS/LESS 依然沒有解決你想要解決的問題呀!
所以我認為弊大於利。
跨界、CoffeeScript、TypeScript和ES6
前端你為啥這麼在意語法糖?你個前端不好好研究優雅的使用者體驗,去研究什麼語法糖,你忙得過來嗎?
CoffeeScript 是 Ruby 社群搞出來的,TypeScript 是 C# 社群搞出來的,它們都是非前端社群的產物,迎合的也是非前端的工程師群體的程式設計習慣。適不適合前端,走著瞧。
最終你們這些前端看上了 ES6,但是你們這些前端在語法還沒成型的時候就用 Babel 來轉譯是不是有點太激進啊?
學學 jQuery,通過原生 JS 來加語法糖,穩定過渡。你們前端咋這麼猴急呢?
關於Node
Node.js 作者本人就把這玩意兒當個玩具,你們前端居然當個寶。
前端沒有拿著玩意寫後臺,而是那它做指令碼。
寫寫指令碼就算了,前端居然還妄圖一門語言統一前後端。然後整天佈道什麼「全棧」。
可是孩子呀,你一個跟 DOM 打交道的人能理解後端那些概念嗎?你們就知道個 JS,連資料庫也只喜歡長得像 JSON 的 MongoDB。
半吊子想當架構師。
你們看看現在有幾個公司用 Node 做伺服器啊?伺服器端 Node 完敗。
你們這些不會寫 shell 的人就老老實實用 Node 寫指令碼吧。
但是你們寫指令碼也要有個限度好不好?看看現在的前端工具流有多複雜了啊。而去年的工具今年你們就拋棄了。
孩子氣。
關於跨界、全棧、公司定崗
前端這麼亂,不就是因為前端沒主見嗎,盡聽別的圈子扯。
CoffeeScript 是 Ruby 社群的;LESS 也是 Ruby 社群的;Node 的作者就是一個票友,平時根本不用 JS;Angular 是 Google 的服務端團隊搞的;React Native 是為了做原生 App;全是跨界的!
他們解決的是他們自己的問題,對你有沒有用你不想想?
你引入任何一箇中間層都會有弊端,你不知道嗎?
你用技術要在在乎其缺點。全棧。
你想做全棧我不反對,但是你要看看公司給不給你機會呀。
你以為你學了 Node 公司就願意你去開發後臺?你有這個能力嗎?
你以為你學了 React Native 公司就願意讓你開發 App?你有這個能力嗎?
你真的比得過人家專職團隊嗎?
全棧是頂級高手團隊才有的,Google、Facebook。在小公司還是安心做前端把。
關於前端的核心競爭力
前端你不要拿自己的弱項跟別人的強項比了,找死呀。
你拿 Node.js 跟 Python 後臺比得了?他們學起 Node.js 不甩你一條街啊?
你拿 React Native 跟 iOS 開發比得了?他們學起 React Native 不甩你兩條街啊?
用 Java 寫安卓應用的程式設計師什麼時候找死跟 Java 後臺程式設計師搶飯碗了?
用 C++ 寫桌面應用的程式設計師什麼時候找死跟 C++ 伺服器程式設計師搶飯碗了?
就你能啊?
你前端的核心競爭力應該是搞清楚瀏覽器上面的東西!
HTML標籤、CSS,JavaScript,Form2.0、Websocket、離線快取、Webworker、Border-image、Canvas……
這些東西是有難度的。你讓一個後端開發寫個 CSS 垂直居中並說出優缺點你看他會不會。要想破頭啊。這東西靠經驗啊。
你不好好看核心,去學一些亂七八糟的是什麼意思?
那麼什麼是核心呢?HTML、CSS和JavaScript
現在的那些個前端佈道師,不講核心專講新技術,又是幾個意思?
關於Angular,後臺,SPA
這是給伺服器同學用的,如果你的團隊以伺服器開發人員為主,你再用這個吧。
你們這群沒主見的前端,追捧這個幹什麼?根本就不是給你用的好嗎?Angular 2 一升級你是不是又傻眼了,怎麼後端又改用 TypeScript 了?
你去追前端基本功呀!
另外 Angular 真的好嗎?其實後端程式設計師可以自己找前端同學封裝一些更輕量的框架。(你們前端不行?當我沒說)
關於React
React 元件化的思路,我是認同的。Flex 的元件化方案比 HTML 不知高到那裡去了。React 元件化 是對 HTML 很好的擴充套件。
但是 React 太重了,條條框框太多了,把簡單事情搞複雜了。
我推崇「輕框架 + 元件化 + 物件導向」。你們不好好改進原來那一套執行得不錯的方案,為什麼非要去追新,而且還一年換一個星來追。
如果 React 就火個幾年,後面的前端新人不學 React,你這個 React 專案誰來負責?你怎麼跟公司交代?用新框架重寫?!
你作為個人學習去玩玩 React 我是鼓勵的。
關於抽象和麵向物件,你真的掌握了嗎?封裝、繼承、多型、設計模式、解耦、API設計這些真的都熟練了嗎?我接觸過的前端,絕大多數同學都毫無概念。來看看我的程式碼。
關於SPA和Web Site
SPA 不是說你動態載入頁面和資料就叫做 SPA 的。SPA 強調的是功能。你要用新技術做出新的功能。現在中國有幾個是真正意義上的 SPA 頁面?網頁遊戲、線上IDE、網頁版PhotoShop之類才是真正的 SPA。
所以別老是說什麼你在做 SPA。
React Native和PhoneGap
不看好。除了開發成本低,沒有任何優點。但是哪個公司是因為開發成本低成功的?
關於微信小程式
這玩意既不是 HTML 5 也不是 Native,不看好。
關於前端的缺人和高薪水
現在前端多,只是因為前端太少,跟新技術沒關係。
同時 HTML 5 的應用場景變多了,所以需要更多前端了。
等前端足夠多了你再看看你的工資。
最終工資高的,還是基礎知識好的人。
寫在最後
雖然我寫了這麼多,但也有可能,全是錯的。
完,結合這篇文章一起看,效果奇佳:《在 2016 年學 JavaScript 是一種什麼樣的體驗?》。
由於原答案的立場問題(站在阿當的立場噴前端),很多人貶,所以雖然是高票答案,但是並沒有排在前面。
你們啊,太年輕,這樣玻璃心不好,吐槽都接受不了,將來怎麼和大神談笑風生?你說是吧。
有人問我的觀點是什麼。
其實經常看我視訊的同學都知道,我的態度一項都是,管它什麼技術,先學會皮毛,再瞭解原理,最後對其進行吐槽(批判)。
我對不瞭解的東西一向是不敢批判的。
任何一項新技術,你都搞清楚其優缺點和使用場景。
沒有完美的技術方案。
那麼阿當的觀點到底對不對呢?
全文一萬多字,總有幾句話是對的,你說是不是?
而且本文中吐槽前端的話,用來自省,是非常有用的!
請關注知乎專欄:zhuanlan.zhihu.com/study-fe