低代碼,要怎么低?和低代碼有關(guān)的十大問題(低代碼是什么)
或許是因為 Mendix 和 Outsystems 的收購及融資,還有 Gartner/Forrester 的鼓吹(Gartner 甚至預(yù)測 4 年后低代碼開發(fā)會占應(yīng)用開發(fā)的 65% 以上,你敢信?),這兩年低代碼忽然開始受到關(guān)注,不少公司在開發(fā)這方面的產(chǎn)品,jabdp平臺就是這樣的一種低代碼開發(fā)平臺。本文將談?wù)勎覍Φ痛a的理解,嘗試回答這個 10 問題:
- 低代碼是什么?
- 之前是否有低代碼平臺?它們是怎么做的?
- 低代碼究竟能解決什么問題?
- 低代碼平臺適合用在什么地方?
- 低代碼平臺會帶來什么新問題?
- 低代碼平臺的難點在哪?
- 前端如何低代碼?
- 后端如何低代碼?
- 低代碼平臺是否會大量取代研發(fā)?
- 未來會怎樣?
低代碼是什么?
按維基百科的說法,低代碼這個稱呼是 Forrester 在 2014 年提出的,指那些用可視化方式創(chuàng)建應(yīng)用的平臺,特點是代碼量比傳統(tǒng)開發(fā)少得多,甚至無代碼,所以能顯著提升開發(fā)效率。
這個定義比較模糊,使得低代碼平臺有各種各樣的形式,我見到的就有以下幾種:
- 在線 IDE 和編輯器,界面方面雖然有可視化設(shè)計,但需要二次開發(fā)才能用。
- 提供一站式開發(fā)平臺,提供了持續(xù)集成、部署和運維等功能,包含開發(fā)全流程。
- 簡化前端開發(fā),界面方面可以做到不用寫 JavaScript。
- 簡化后端開發(fā),可以在線設(shè)計數(shù)據(jù)結(jié)構(gòu),并實現(xiàn)增刪改查功能。
- 徹底簡化前后端開發(fā),甚至變成無代碼平臺,什么都可視化編輯,易用性好,但犧牲了靈活性,這里面有很多子分類,比如 BPM、OA 系統(tǒng)、APP 開發(fā)等。
- 圍繞某個成熟產(chǎn)品擴展功能,比如 CRM、ERP 之類的產(chǎn)品,為了滿足定制需求,提供定制開發(fā)功能。
為什么會有那么多種形式?在我看來主要和團隊定位有關(guān),有個「康威定律」是這么說的:
"設(shè)計系統(tǒng)的架構(gòu)受制于產(chǎn)生這些設(shè)計的組織的溝通結(jié)構(gòu)。" ——M. Conway
比如公司內(nèi)有兩個獨立的小組,那整個系統(tǒng)設(shè)計肯定會劃分出兩個獨立的模塊,相互之間有明確的界限,這也影響了對于低代碼平臺實現(xiàn)方式的選擇。
如果是前端團隊,一般會選第 1 種形式,很少考慮第 3 種,因為團隊成員都會 JavaScript,沒必要弄個不用寫 JavaScript 的產(chǎn)品,更不會考慮第 4 種,因為不負責(zé)后端開發(fā)。
如果后端的團隊,就會選擇第 4 種,因為只負責(zé)后端開發(fā)。
如果是大公司內(nèi)的工程團隊,因為職責(zé)是負責(zé)開發(fā)環(huán)境,所以會選擇第 2 種形式,但這種形式一般有很多定制功能,并且依賴公司內(nèi)部基礎(chǔ)設(shè)施,導(dǎo)致只能在內(nèi)部使用。
如果是創(chuàng)業(yè)公司,往往會選擇第 5 種形式,面向外部當(dāng)然是前后端都封裝起來更簡單,但可能過于追求「無代碼」,導(dǎo)致雖然用起來簡單,卻失去了靈活性,只適合簡單應(yīng)用。
如果公司本身有成熟產(chǎn)品了,自然是選擇第 6 種方式,圍繞這個產(chǎn)品來擴展更有優(yōu)勢。
因此下次在了解一款低代碼產(chǎn)品前,先了解它背后是什么團隊,擅長做什么,團隊背景將在很大程度上決定這款產(chǎn)品的側(cè)重點。
之前是否有低代碼平臺?它們是怎么做的?
在低代碼這個名詞出現(xiàn)前早就有各種提升開發(fā)應(yīng)用效率的產(chǎn)品了,比如我知道最早的是 FileMaker,它在 1985 年就出現(xiàn)了,發(fā)展歷史幾乎和這幾十年的計算機技術(shù)同步,最早是 DOS 下的程序,蘋果推出 GUI 操作系統(tǒng) Macintosh 之后改成了 GUI 程序,在 2010 年移動時代推出了手機版的 FileMaker Go,然后在 2016 年推出了云上版本 FileMaker Cloud,最新版本又加入了人工智能。
FileMaker 最初定位是個數(shù)據(jù)庫,但它在數(shù)據(jù)庫的基礎(chǔ)上擴展了應(yīng)用開發(fā)功能,使得可以基于它開發(fā)應(yīng)用,比如下圖是用它編輯應(yīng)用界面的例子:
FileMaker
類似的還有 Microsoft Access,也是非常古老的軟件,1992 年就發(fā)布了:
Access
Oracle 在 2004 年也搞過一個叫 APEX 的東西,基于向?qū)У姆绞缴蓭追N固定模板頁面,雖然靈活性差但用起來簡單,最近也改叫低代碼了。
Oracle APEX
另外就是Visual Basic 6.0,1998 年發(fā)布的,功能比現(xiàn)在的許多低代碼平臺都強。
還有著名的 SaaS 軟件 Salesforce,十幾年前就可以擴展字段來擴展功能,可以看到界面還是 web 1.0 時代的風(fēng)格:
Salesforce
另外還有很多商業(yè)產(chǎn)品,它們幾乎都有十年以上的歷史,最近才改叫低代碼平臺。
低代碼究竟能解決什么問題?
對于這個問題,有兩種極端,專業(yè)開發(fā)者會認為低代碼平臺是個玩具,沒什么用,而小白又以為有了這個完全不懂寫代碼也能開發(fā)應(yīng)用,但這兩種想法都不太正確。
要回答這個問題,首先按《人月神話》里的說法將軟件開發(fā)進行分類:
所有軟件活動包括:
根本任務(wù)–打造構(gòu)成抽象軟件實體的復(fù)雜概念結(jié)構(gòu)。
次要任務(wù)–使用編程語言表達這些抽象實體,在空間和時間限制內(nèi)將它們映射成機器語言。
這個分類最早出現(xiàn)在 1986 年作者的論文里,年代久遠可能看過的人不多,這里多說兩句,「根本任務(wù)」指什么?舉個例子,比如要實現(xiàn)一款發(fā)工資的軟件,里面涉及到如何計算所得稅,那就得實現(xiàn)個人所得稅的計算方法,用什么語言實現(xiàn)這個算法屬于「次要任務(wù)」,而這個算法本身屬于「根本任務(wù)」,無論用什么方式實現(xiàn),你都不可能降低這個算法復(fù)雜度,比如個人所得稅有 7 個層級,那就一定在某個地方有 7 個 if 語句。
「根本任務(wù)」無法解決,因為它就是需求本身,唯一解決辦法是砍需求。
低代碼平臺主要解決的是「次要任務(wù)」,用更簡化的方式來實現(xiàn)同樣的功能,比如前面那個問題,在低代碼平臺中常見有這幾種做法:
- 提供一種簡化的 DSL,類似 Excel 里的公式。
- 提供圖形化代碼編輯器,類似 Unreal Engine 里的「藍圖」,或者類似 Blockly/Scratch 那種拼圖的方式。
- 支持寫代碼或外部 api 來擴展。
- 平臺內(nèi)置實現(xiàn),比如前面提到的個人所得稅,平臺可以內(nèi)置一個專門算這個的函數(shù)。
其中 DSL 的方式只適合簡單場景,因為 DSL 一般不具備復(fù)雜的邏輯控制、定義函數(shù)等功能,DSL 中要加入這些功能還不如直接用成熟的語言,比如 JavaScript/Lua。
很多低代碼平臺使用的是第 2 種方式,這種方式看起來最符合低代碼平臺的定義,也看起來最高大上,以 UE4 里的藍圖為例,這是我見過最復(fù)雜的可視化代碼編輯器,可以用它來編寫著色器和控制游戲流程:
根據(jù) Epic 國內(nèi)社區(qū)經(jīng)理的說法,藍圖在實際開發(fā)中用得更多,我的個人體會是這種編輯器有以下幾個好處:
- 方便預(yù)覽,尤其是寫著色器時可以馬上看到每個節(jié)點的輸出,這點比代碼有明顯優(yōu)勢。
- 解決了編程環(huán)境問題,不需要花時間配置環(huán)境。
- 節(jié)點會列出參數(shù)和屬性,這樣就不需要像寫代碼那樣查手冊了,直接點選就可以修改。
- 調(diào)試能實時生效,比如拖動某個數(shù)值馬上能看效果。
- 不容易犯錯,比如需要符合類型才能連線,因為整個環(huán)境是可控的,在很多細節(jié)上可以比代碼報錯跟友好。
- 最重要的是:藍圖比 C 簡單得多,也不像 C 那樣需要多年經(jīng)驗,因此對人員的要求更低,更容易招到人。
圖形化編程在三維設(shè)計領(lǐng)域取得了不少成績,比如 Blender、Grasshopper、Houdini、NUKE、Substance Designer 等,通過節(jié)點編程的方式極大提升了靈活度,但這些都是針對特定領(lǐng)域優(yōu)化,并不是通用編程方式。
對于通用編程領(lǐng)域使用節(jié)點編輯器是否可行?《人月神話》里也提到過圖形化編程,原文是這樣說的:
流程圖是一種非常差勁的軟件結(jié)構(gòu)表達方式。實際上,它最好被視為是 Burks, von Neumann 和 Gold stine 試圖為他們說設(shè)計的計算機提供一種當(dāng)時迫切需要的高級控制語言。如今的流程圖已經(jīng)變得復(fù)雜了,一張圖有若干頁,有很多連接點,這種表現(xiàn)形式實在令人同情。流程圖已經(jīng)被證明是完全不必要的設(shè)計工具–程序員是在開發(fā)之后,而不是之前繪制描述程序的流程圖。
更加基本的是,如我們上面所討論的,軟件非常難以可視化。即使用圖形表達出了流程圖、變量范圍嵌套情況、變量交叉引用、數(shù)據(jù)量和層次化數(shù)據(jù)結(jié)構(gòu)等等,也只是表達了某個方面,就像盲人摸象一樣。
這本書里預(yù)言的是 10 年內(nèi)不會有突破性進步,然而過了 34 年的今天也沒見明顯進步,1985 年 Raeder 在他的文章里告訴我們流程圖最早是給匯編語言用的,因為匯編代碼里都是跳來跳去的,看著容易暈,有這樣的圖可以看起來更清晰:
但在高級語言下就不需要這個了,因為高級語言下的代碼可讀性和這張圖是一樣的,但在復(fù)雜業(yè)務(wù)邏輯下用圖形連線會很亂,對于熟悉看代碼的開發(fā)者來說效率反而降低了,后來在《人月神話》20 周年紀(jì)念版里增加了這樣一句話:
流程圖是被吹捧得最過分的一種程序文檔。詳細逐一記錄的流程圖是一件令人生厭的事情,而且高級語言的出現(xiàn)使它顯得陳舊過時。
所以這幾種方法里我最傾向的是第 3 種,直接通過代碼擴展功能,目前排名靠前的低代碼平臺都支持代碼擴展,比如 Salesforce 和 ServiceNow,尤其是 ServiceNow 在前后端都使用 JavaScript,后端用到了 Rhino 引擎。
如果需求很常見,可以選擇第 4 種方法,有些低代碼平臺針對某個垂直領(lǐng)域做了優(yōu)化,集成了許多這個行業(yè)常見的功能,在同一個行業(yè)中,一家公司要解決的「根本任務(wù)」,在另一家公司大概率也會遇到,因此使用這種低代碼平臺可以明顯降低成本。比如淘寶可以算是電商行業(yè)的「低代碼」平臺,它把各種電商相關(guān)的功能都集成進去了,同時還提供了店鋪裝修功能實現(xiàn)個性化設(shè)計。
低代碼平臺適合用在什么地方?
什么樣的應(yīng)用適合使用低代碼平臺?目前看來最適合的場景是面向企業(yè)內(nèi)部員工(B2E)的應(yīng)用,也就是企業(yè)內(nèi)部的各種系統(tǒng)及平臺。
雖然也有面向?qū)ν鈶?yīng)用的低代碼平臺,比如創(chuàng)建移動 APP,但這種只有小公司才會用,因為對外應(yīng)用一般是公司主營業(yè)務(wù),需要很高的自主可控性,而且定制需求多,對展現(xiàn)的要求也很高,沒法復(fù)用低代碼平臺中的組件,只能通過自定義代碼擴展,但如果大量使用代碼擴展就還不如完全自己開發(fā)了。
以 jabdp為例,常用的功能,例如表單列表的增刪改查,只需簡單的自定義和配置就能自動生成。復(fù)雜的業(yè)務(wù)功能,只需要會基本的sql語句和javascript語法,就能進行快速開發(fā),滿足其個性化的業(yè)務(wù)需求,設(shè)計出各種復(fù)雜的企業(yè)web應(yīng)用。既能快速提高開發(fā)效率,幫助公司節(jié)省人力成本,同時又有效解決企業(yè)級項目中常遇到的改需求的問題,不失靈活性。
jabdp開發(fā)平臺適合用于大部分的企業(yè)級web應(yīng)用的開發(fā),尤其適合企業(yè)信息管理系統(tǒng)(MIS)、企業(yè)資源計劃系統(tǒng)(ERP)、客戶關(guān)系管理系統(tǒng)(CRM),業(yè)務(wù)支撐系統(tǒng)(BSS)等。并且就一些經(jīng)典的項目案例提取整合出各種類型的項目模板,共享給開發(fā)者參考,開發(fā)者可以在原有的項目基礎(chǔ)上進行修改定制,以打造其個性化的企業(yè)信息化平臺。
低代碼平臺會帶來什么新問題?
盡管低代碼平臺能明顯提升效率,但它也會帶來新的問題,比如擴展性、難以支持復(fù)雜場景、性能等問題,但在我看來最大的問題是平臺鎖定,許多問題都是這點帶來的:
- 平臺使用自己內(nèi)部獨立的框架,需要額外的學(xué)習(xí)成本。
- 平臺是個黑盒,不清楚內(nèi)部如何實現(xiàn),遇到 bug、性能等問題只能求助官方。
- 如果有的需求不能滿足,需要等平臺的排期升級。
- 信息分布在各處,不像本地代碼那樣方便全局搜索,對于不熟悉的新人往往得在各個界面里找半天,而且是功能越強大的平臺越難找。
- 不方便多人協(xié)作,有的平臺只提供少量環(huán)境,難以做復(fù)雜的分支管理。
- 平臺后續(xù)發(fā)展是個未知數(shù),哪天倒閉了怎么辦?Google 4 年前發(fā)布了一款低代碼創(chuàng)建 APP 的產(chǎn)品 Google App Maker,既能可視化創(chuàng)建界面,又能寫 JavaScript 擴展功能,但它在今年 2 月份的時候宣布關(guān)閉,無法導(dǎo)出,用戶只能自己重寫一個,連 Google 的低代碼平臺都會關(guān)閉,其它小公司就更別說了。
低代碼平臺為什么做不到開放?在我看來主要是兩個原因:
- 技術(shù)上的矛盾,為了實現(xiàn)低代碼就得隱藏很多不必要的細節(jié),而這些細節(jié)有的依賴平臺底層框架,有的依賴平臺編輯器,這些都是低代碼平臺最核心的技術(shù),沒法開源。
- 商業(yè)上的矛盾,如果能方便導(dǎo)出,讓使用者可以二次修改并部署到任意地方,低代碼平臺就變成離線開發(fā)工具了,只要一個帳號就能開發(fā)無數(shù)應(yīng)用,不利于商業(yè)化,因此甚至有的低代碼平臺只提供 SaaS 版本,只能在線使用。
平臺鎖定這個問題在國內(nèi)更嚴(yán)重,有種說法是古代中國屬于大陸農(nóng)業(yè)文明,農(nóng)業(yè)文明的特點是強調(diào)自給自足,能不求人就不求人,這個長期影響很難改變,所以國內(nèi)公司一變大就希望什么都自己掌握,信不過別人。
目前國內(nèi)只有一個封閉的開發(fā)平臺取得了巨大成功,這個平臺是微信小程序,相比原生 APP 開發(fā),微信小程序的開發(fā)成本更低,而且還跨平臺,所以其實也能算是低代碼,微信小程序就是很封閉,只能運行在微信上,還得使用專門的框架和工具,連注冊賬號和發(fā)布應(yīng)用都要人工審核,但依靠微信的影響力和用戶量,這些都不是主要問題。
在這個問題上,jabdp低代碼平臺已經(jīng)實現(xiàn)了全部開源,https://gitee.com/jabdp/jabdp。
低代碼平臺的難點在哪?
在我看來低代碼平臺的難點是如何同時滿足易用性和靈活性,因為它們經(jīng)常是沖突的,以低代碼平臺中必備的可視化頁面編輯器為例,要怎么實現(xiàn)頁面布局?主要有三種做法:
- 基于 flexbox/float 方式來布局,這種方式靈活性強,但犧牲了易用性,需要使用者至少懂點 css,不然弄不明白。
- 基于絕對定位來布局,這種方式易用性強,想拖哪就拖哪,但又失去了靈活性,要支持多分辨率就得手機和 PC 單獨編輯,而且不好實現(xiàn)根據(jù)內(nèi)容自動撐開高度。
- 提供水平/垂直分欄的容器,通過它們組合來實現(xiàn)各種布局,這種方式處于上面兩者之間,靈活性和易用性都不突出,只適合用在移動端或后臺類的頁面。
除了布局,還有另一個問題是要不要支持自定義 class?不支持的話靈活性差,改個字體所有地方都要配一遍,而支持又導(dǎo)致易用性差,不了解 css 的用戶會發(fā)現(xiàn)改了一個地方影響到別的了,要想不一樣還得新建一個 class,有理解上的成本。
所以復(fù)雜靈活的可視化編輯器有可能吃力不討好,那偏向易用性呢?有些低代碼平臺追求「零代碼」,讓普通人都能用起來,但這樣會面臨另一個意想不到的強大競品:「Excel」,對于普通人來說 Excel 就是一個好用的數(shù)據(jù)庫,可以添加數(shù)據(jù)、修改數(shù)據(jù)、查找數(shù)據(jù)、排序過濾等,還能做圖表,無需開發(fā)應(yīng)用就能管理數(shù)據(jù)。
前段時間在吳伯凡的課程里聽到一個故事,原文是這樣的:
雷軍很吃驚地發(fā)現(xiàn),小米的整個管理系統(tǒng),就是采購部門也就是供應(yīng)鏈部門抱著一臺電腦,生產(chǎn)部門抱著一臺電腦,銷售部門抱著一臺電腦,電腦里都是Excel,三個部門打開以電腦后就對數(shù)字,這就是小米的流程管理。
同行知道這些事情以后不相信,認為這是天下奇聞。一個一年生產(chǎn)幾千萬臺手機的公司,管理流程竟然是這樣的,這種流程出問題也是很自然的。
但從另一個角度看,這個故事卻告訴我們,小米剛開始幾年僅靠 Excel 就能生產(chǎn)幾百萬臺手機,創(chuàng)造幾百億流水了,因此很多時候 Excel 就足夠了,目前有些在線編輯的 Excel 平臺,還出現(xiàn)了類似 Airtable 那樣的新型 Excel,還有專門做漂亮表單的 Typeform 等,甚至連 Notion 這個文檔工具都內(nèi)置一個小數(shù)據(jù)庫,這類產(chǎn)品在易用性上遠好于各種零代碼平臺。
前端如何低代碼?
前端開發(fā)的主要工作是界面、交互和業(yè)務(wù)邏輯,20 年前的 FrontPage 和 Dreamweaver 就實現(xiàn)了可視化編輯頁面,但它們生成的代碼遠不如手寫,后來隨著前端重構(gòu)的流行,開發(fā)者又回歸到通過寫代碼來制作頁面。
現(xiàn)在可視化頁面編輯器主要用于制作靜態(tài)原型,或者官網(wǎng)及落地頁,很少用在前后端交互比較多的頁面中,因為動態(tài)數(shù)據(jù)難以在可視化編輯器里展示,比如 if xxx 的時候顯示 yyy 要怎么顯示呢?所以界面開發(fā)效率提升主要靠 UI 組件庫。
前端 UI 組件庫十幾年前就有了,比如 YUI 是在 2006 年發(fā)布,jQuery UI、Ext JS 也緊跟著在 2007 年發(fā)布了,但這些組件庫在產(chǎn)品線中用得不多,你想想百度搜索、貼吧、知道、百科的各個頁面中,有哪些東西是通用的?能想到的恐怕只有輪播圖、彈出層、下拉菜單這幾個,這些在整體開發(fā)中占比不高,即便都用上對整體效率提升也不明顯,所以前面也提到低代碼平臺不適合用在面向用戶的產(chǎn)品中。
但在企業(yè)應(yīng)用中情況就不一樣了,這些應(yīng)用頁面相似度更高,大部分是表格表單,而且更重視功能而不是個性化展現(xiàn),因此更容易實現(xiàn)復(fù)用。
在企業(yè)應(yīng)用里甚至可以簡化成表格展現(xiàn),第一列是時間,第二列是用戶名,第三列是文本,雖然展現(xiàn)差了很多,功能卻是一樣的。
后端如何低代碼?
在后端方面,低代碼平臺主要能解決這幾類問題:
- 系統(tǒng)開發(fā)通用性問題,比如
- 登錄、帳號/角色、權(quán)限管理
- 頁面路由和導(dǎo)航
- 外部系統(tǒng)對接,有的還提供一種通用協(xié)議來連各種數(shù)據(jù)源
- 數(shù)據(jù)管理,增刪改查
- 流程管理
- 開發(fā)及運行環(huán)境
其中最常用的是增刪改查,要如何實現(xiàn)?目前見到有這 3 種方式:
- 基于表單,優(yōu)點是用起來簡單,只需要設(shè)計好表單就可以用了,但缺點是靈活性要弱,難以支持復(fù)雜的關(guān)系。
- 基于數(shù)據(jù)模型,需要先定義數(shù)據(jù)模型,優(yōu)點是靈活性強,但易用性又差了,非開發(fā)人員使用會有成本。
- 提供 BaaS 服務(wù),比如開源的 Parse,通過提供友好的 API 來實現(xiàn)用戶管理、數(shù)據(jù)存取等功能,這種方式需要寫后端代碼,但靈活性高。
低代碼是否會大量取代研發(fā)?
不會,原因如下:
- 前面提到過低代碼不適合開發(fā)面向客戶(toC)的應(yīng)用,在許多公司這部分才是最占人力的。
- 對于企業(yè)內(nèi)部應(yīng)用,低代碼可以顯著提升效率,但效率提升帶來的不是人員減少,而是需求增多,很多之前中低優(yōu)的項目終于排上了。
- 低代碼平臺解決不了「根本任務(wù)」,圖形化編程只適合特定場景,用它來做控制流還不如寫代碼,因此依然需要研發(fā)。
未來會怎樣?
我的個人判斷是:
- 圖形化編程只能在特定領(lǐng)域成功,目前看來主要是和音樂及圖形相關(guān)的軟件。
- 面向普通用戶的無代碼平臺發(fā)展會受限,很多時候還不如用「Excel」。
- 對于成熟的垂直領(lǐng)域,購買軟件是成本最低且效果最好的選擇。
- 低代碼在國內(nèi)和國外會有明顯區(qū)別,國內(nèi)更喜歡私有部署而不是 SaaS 版本,技術(shù)鎖定將會是在國內(nèi)推廣時的最大障礙。
- 低代碼平臺不適合用來開發(fā)面向客戶的應(yīng)用,以后也一樣。
好了,今天的文章分享到這就結(jié)束了,要是喜歡的朋友,請點個關(guān)注哦!–我是簡搭(jabdp),我為自己“帶鹽”,感謝大家關(guān)注。