前端開發的難點到底在什么地方?
你要問前端開發難不難,我就得說計算機領域里常說的一句話,這句話就是『難的不會,會的不難』,對于不熟悉某領域技術的人來說,因為不了解所以產生神秘感,神秘感就會讓人感覺很難,也就是『難的不會』;當學會這項技術之后,知道什么什么技術能做到什么做不到,只是做起來花多少時間的問題而已,沒啥難的,所以就是『會的不難』。
但是,對于前端開發這個方向,即使『會了』……依然感覺很難,唉,說多了都是淚呀,我用三個親身經歷的怪現象來說明吧。
第一個怪現象:誰都可以指手畫腳的前端開發
我職業生涯很長一段時間都在做前端開發,我也做過后端開發,兩者一對比,給我影響最深的不是技術差異,而是——前端開發者聽到的『需求修改意見』要比后端多得多。
后端這東西,畢竟是藏在后面的,外行不懂就是不懂,裝不出來,他們也不好自取其辱亂比劃,但是,前端嘛……誰都能看得見,沒吃過豬肉還沒見過豬跑,所以,誰都可以指手畫腳提一點意見。
只看得見界面的產品經理可以提一些意見。
項目經理可以有一些意見。
啥也不懂的老板也可以提一些意見。
甚至連后端都可以來提一些意見。
……
正因為前端的產出是看得見摸得著的,所以造成了誰都可以『提一些意見』的現象。
前端開發最大的痛啊!
第二個怪現象:被鄙視但又十分搶手的前端
前端開發者,你懂的,居于開發者鄙視鏈的低端,業務邏輯大多都居于后端,超大并發量是后端實現的,超牛逼的AI、大數據分析、商業邏輯都在后端,前端要做的只是一個功能展示,所以,后端開發普遍看不上前端開發的工作,直到……到了公司舉辦黑客馬拉松活動的時候。
黑客馬拉松,就是讓程序員自行結隊,在幾天之內快速開發出來一個小型項目,到活動結束的時候,每個隊要演示自己的產品,于是,問題來了,平時你可以鄙視前端開發者,你可以把前端開發貶得一文不值,但是,到了黑客馬拉松的時候,才知道前端開發的必不可少,因為沒有前端你無法『演示』你的想法。
這時候,后端開發者也會發現,平時覺得前端開發很簡單,但是自己寫一個最簡單的AJAX form表單提交也要學半天,不管你的后端想法多么牛,如果最后沒有熟練的前端開發者,最后到了演示環節也要抓瞎。
所以,每到黑客馬拉松時,平時居于鄙視鏈最低端的前端開發者,突然就變成了最炙手可熱的紅人。
誰都覺得前端開發不重要,但是又離不開前端開發。
是不是很諷刺?
第三個怪現象:苦不堪言的多端開發
一個正經的產品,為了滿足用戶不同設備上使用的要求,需要提供多客戶端,最起碼要有網頁端、iOS端和安卓端,現在大部分產品還要考慮小程序端,這還沒算iOS要分iPhone和iPad,安卓也要考慮手機和平板,甚至要考慮機頂盒設備的界面……
各種設備、各種安卓版本、各種瀏覽器都有各自的特(bu)點(g),每個前端開發者都有體會,很多精力都消耗在處理某個特定平臺/版本/瀏覽器的bug上,唉,說到這里真想流淚……
因為要支持這么多不同的客戶端,一個產品的前端開發者種類也不止一個,要有網頁開發者、iOS開發者和安卓開發者,大一點的項目,靠一個人支撐一種客戶端就不行了,需要的是網頁開發團隊、iOS開發團隊和安卓開發團隊。
其實,不同客戶端實現的都是同一種功能,完全是因為這個世界存在這么多種客戶端,所以我們才被迫為各個客戶端寫一套代碼。
雖然多端的存在,增加了不少程序員的就業機會,但是,干過實際項目的都知道,這其實很麻煩,很麻煩很麻煩!為了給用戶最好的體驗,肯定希望各端提供一致的功能界面,如果有新功能,要上一起發布上線,但是,不同團隊之間開發周期肯定不同,很難保證同時完成任務,最后,花費開發時間最長的那一端的開發團隊就成為整個產品的短板。
每每想到這里,就緬懷秦始皇,秦始皇你要是不光把度量衡統一,把所有客戶端也統一了多好:-)
前端開發難在哪里?好了,看完上面這三種行業怪現象,不難看出,前端開發很真的很有難度,我這里只列出最關鍵的三點:
第一,當需求發生變化的時候,第一線中槍的往往就是前端,而且很多需求變化和后端無關,單純就是前端的改變。這些需求改變有的是不合理的瞎折騰,但是,客觀來說,也有不少是有必要的需求改變,應該用戶是上帝,用戶的喜好會變化,用戶的喜好我們也要反復揣摩,必須要伺候好用戶,也就是要適應需求變化,所以,難點就成了——如何讓前端開發適應快速變化的需求?
第二,平臺、瀏覽器生態復雜,要考慮的場景太多,不同平臺上實現同一界面功能的重復勞動嚴重,這個難點在于——如何消除前端開發的重復勞動?
第三,前端的學習曲線其實挺陡,很多后端開發者以為前端只是玩一玩HTML,到了自己上手的時候發現其實要學很多,下面只是一個簡化了的網頁前端學習路線圖。
上面這么多知識點學會,只能算入門,更不要說:
如果要做到高性能,要考慮CDN優化、JavaScript Profiling、打包策略……如果要做到安全,要防止注入攻擊,要防止XSS攻擊,要防止CSRF攻擊……這說的還只是網頁前端,沒說安卓和iOS開發、小程序開發,如果把這些都帶上,需要學習的知識量又要翻倍。
而且,前端也不是說讀幾本書就可以上手做真實項目的,如果沒有對這個領域長時間的浸淫,做出來的東西很可能就是漏洞百出,這個難點就是——如何讓前端學習曲線變得不陡?
總結一下:
如何讓前端開發適應快速變化的需求?如何消除前端開發的重復勞動?如何讓前端學習曲線變得不陡?長期以來,雖然無數仁人志士想要解決這些問題,也取得了一些成果,但是,前端是個被普遍低估了難度的開發活動!
前端開發的出路在何方?請注意,我現在說『前端開發的出路在何方』,并不只是要解決『前端開發工程師35歲之后怎么找工作』的問題,我想說的是整個行業如何定位前端開發的問題,或者說開發團隊整體應該怎么解決前面說過的前端開發困難的問題,反過來,如果我們認清了整個行業對于前端開發的定位,你作為前端開發工程師也就清楚35歲之后如何找到合適的工作。
在我看來,問題的關鍵點就是——現在很多前端開發的工作都是在重復勞動。
難道不是嗎?
你去問一個網頁前端開發工程師,他們在前一個項目里做的功能,和后一個項目里做得功能,本質有多大區別?
你去讓一個網頁工程師、安卓工程師和iOS工程師一起討論一下實現的功能,難道差不多就是一樣的,只不過用不同語言、部署在不同的平臺嗎?
你去問一下這個公司的前端,再去問一下另一個公司的前端,他們要考慮的性能、安全性問題,解決方法難道不都是很雷同嗎?
我不敢說所有前端開發工作都是重復勞動,對于一些極具開創新的界面和功能,是開拓一片新的天地,需要前端開發工程師開發全新的應用,但是,讓我們承認吧,對于大部分應用,尤其是對于一些工具類應用,歷史上已經被開發過無數回了,實在沒有必要再重復造輪子了。
只是,每一個應用的開發團隊,都很容易以為,自己的應用是『獨一無二』的,這種想法也可以理解,畢竟,世界上每一個應用都有自己的獨特一面,但是,這不表示所有的工作都應該從零開始。
這個行業已經這么成熟了,應該有一種盡量通用的框架來抽象可重復使用的功能,從而避免重復勞動,避免了重復勞動,也就解決了前端開發的最大難題。
像React、Vue和Angular這樣的前端框架,就是一種程度上的抽象,也很通用,但我認為并非是前面結論中指向的最佳答案,事實上,行業發展多年,也不乏很多平臺在為了前端開發的輕量化、功能模塊化而不懈努力著,最近看到APICloud發布了一些新的前端能力,也驗證了我前面說的觀點。
了解APICloud新產品特性
低代碼+高性能移動開發低代碼雖然早在海外應用多年,但直到這兩年才逐漸被國內所關注,其倡導代碼復用,以及通過模型或翻譯引擎自動生成大量代碼,這些都是很好解決前端開發重復性工作和高效迭代的方向;我對于APICloud的認可,也是建立在他們原有的跨平臺開發技術上進而實現了向低代碼開發平臺的轉變。
這次APICloud的產品迭代方向再次指向了前端,當然,我們都知道,現實中的開發,不可能一步跨入共產主義,歷史上拖泥帶水的代碼依然存在,開發人員也不大可能一下子換到另一種語言,這一點在AVM這個框架上得到了解決,同時支持React和Vue,無論來自于什么開發框架背景,都可以在APICloud上快速上手。
上文我也說到,前端開發最大的痛苦,就是多端支持,這一點在APICloud新發布的產品上得到進一步補充,一套代碼開發,自動生成適合安卓、iOS、微信小程序、HTML5的引用,所有跨平臺瀏覽器的問題得到解決,當然,市面上很多技術都在吹噓類似的『多端支持框架』,但依然要寫很多很多代碼,這一點可以參考APICloud的做法,就是在功能層實現最大的復用, 其實一款應用中的功能大部分已經由成熟的云廠商提供了,比如你寫個應用,最常用的IM、支付、統計、地圖等等,但我們集成到自己的應用中還需要編寫代碼的工作量,這點APICloud則通過統一的標準,封裝到自己的平臺,開發者一鍵集成確實省了不少的事,不用苦逼地重復寫fetch了!
其實現在所有的云服務都有一個趨勢,那就是簡單易用化,原因也很簡單,既然是『云服務』了,意味著可以很快用上,也可以很容易換另一家『云服務』,如果某個云服務的學習曲線很陡,那么很快就會讓用戶流失,因為用戶會選擇其他服務,從這一點上來說,可以相信APICloud這樣的低代碼開發平臺學習曲線相對更加平緩。
我更認可APICloud的方面,是APICloud不只是一個框架,還提供SDK支持,官方的開發工具SDK就包含APICloud Studio、Sublime APICloud Plugins、WebStormAPICloud Plugins,你可以選擇用官方Studio,并且新版本基于VSCode定制了,也可以使用Sublime或者WebStorm這樣已經用慣了的IDE插件來開發。
最后來說說,什么人會喜歡APICloud。
從應用開發的角度(也就是從管錢管資源的領導角度),APICloud這樣的低代碼開發平臺模式,能夠真正解決前端開發的三個大痛苦;但是,從前端開發者角度(也就是出勞力拿工資的打工仔角度),是不是感覺到了一絲絲威脅,如果像APICloud這樣進一步將前端開發者的工作量簡化,那么豈不是前端開發者都要丟掉工作了?
非也非也!
首先,低代碼平臺不是無代碼平臺,該寫的還是要寫,前端開發這個工種并不會消失,只是工作方式和內容發生了變化。
而且,大家要以清醒認識到,幾十年前根本沒有程序員這個職位,更不要說前端開發職位,同樣,再過幾十年,有一些職業也會消亡或者改變,與其哀嚎世界變化快,還不如主動擁抱變化,APICloud主導的這種高性能移動開發+低代碼開發的模式,是一種趨勢,既然改變不了,還不如主動接受。
不光是接受代碼開發的方式,以及這些平臺所提供的商業眾包資源也在成為很多平臺用戶獲得額外收入的一個主要來源。
如果不想一直996,或者不想35歲之后找不到工作,好好考慮一下吧:-)