開發與維運

什麼是低代碼(Low-Code)?

1.png

來源 | 阿里巴巴雲原生公眾號

作者 | 楚衡

導讀:什麼是低代碼?我們為什麼需要低代碼?低代碼會讓程序員失業嗎?本文總結了低代碼領域的基本概念、核心價值與行業現狀,帶你全面瞭解低代碼。

前言

如果選擇用一個關鍵詞來代表即將過去的 2020 年,我相信所有人都會認同是“新冠”。疫情來得太快就像龍捲風,短短數月就阻斷了全世界範圍內無數人與人之間的物理連接。但好在,我們已經全面邁入互聯網時代:

  • N95 口罩再厚,也阻擋不了信息比特流的順暢流通(宅男:B 站依然香)。
  • 居家隔離再久,也妨礙不了釘釘消息的準時送達(社畜:工作依然苦)。

逍遙子在 9 月份的雲棲大會上說:“新技術代表的新生產力,一定是我們全速戰勝疫情、開創未來最好的原動力。” 那麼在後疫情時代,究竟需要什麼樣的新技術,才能真正解放 IT 生產力,加速社會數字化轉型,Make The World Great Again?我認為是低代碼(Low-Code)。

基於經典的可視化和模型驅動理念,結合最新的雲原生與多端體驗技術,低代碼能夠在合適的業務場景下實現大幅度的提效降本,為專業開發者提供了一種全新的高生產力開發範式(Paradigm Shift)。另一方面,低代碼還能讓不懂代碼的業務人員成為所謂的平民開發者(Citizen Developer),彌補日益擴大的專業人才缺口,同時促成業務與技術深度協作的終極敏捷形態(BizDevOps)。本文將重點介紹低代碼相關背景知識,包括低代碼的定義與意義、相關概念、行業發展等,期望能幫助大家更好地認識與理解低代碼這個新興領域。

什麼是低代碼?

“Low-Code” 是什麼?如果你是第一次聽說,沒準也會跟我當年從老闆口中聽到這個詞後的內心戲一樣:啥?“Low-Code”?“Code” 是指代碼我知道,但這個“Low”字是啥意思?不會是老闆發現我最近趕工寫的代碼很醜很 “Low” 吧... 想多了,老闆怎麼可能親自 review 代碼呢。那難道是指,“Low-level programming”裡的“Low”?老闆終於發現讓我等編程奇才整天堆 Java 業務代碼太浪費,要派我去閉關寫一個高性能 C 語言網絡庫... 顯然也不是,老闆哪能有這技術情懷呢。那到底是什麼意思?作為一名搜商比情商還高的程序員,能問 Google 的絕不會問老闆。於是我一頓操作後,不假思索地點開了第一條搜索結果。果不其然,這是一條充滿自由芳香只有翻牆才能聞到的 Wikipedia 詞條:Low-code development platform

1. Wikipedia 定義

2.png

從 Wiki 的這段定義中,我們可以提煉出幾個關鍵信息:

  • 低代碼開發平臺(LCDP)本身也是一種軟件,它為開發者提供了一個創建應用軟件的開發環境。看到“開發環境”幾個字是不是很親切?對於程序員而言,低代碼開發平臺的性質與 IDEA、VS 等代碼 IDE(集成開發環境)幾乎一樣,都是服務於開發者的生產力工具。
  • 與傳統代碼 IDE 不同的是,低代碼開發平臺提供的是更高維和易用的可視化 IDE。大多數情況下,開發者並不需要使用傳統的手寫代碼方式進行編程,而是可以通過圖形化拖拽、參數配置等更高效的方式完成開發工作。

2. Forrester 定義

順著 Wiki 的描述還能發現,原來 “Low-Code” 一詞早在 2014 年就由 Forrester 提出了,它對低代碼開發平臺的始祖級定義是這樣的:

3.png

相比 Wiki 的版本,這個定義更偏向於闡明低代碼所帶來的核心價值:

  • 低代碼開發平臺能夠實現業務應用的快速交付。也就是說,不只是像傳統開發平臺一樣“能”開發應用而已,低代碼開發平臺的重點是開發應用更“快”。更重要的是,這個快的程度是顛覆性的:根據 Forrester 在 2016 年的調研,大部分公司反饋低代碼平臺幫助他們把開發效率提升了 5-10 倍。而且我們有理由相信,隨著低代碼技術、產品和行業的不斷成熟,這個提升倍數還能繼續上漲。
  • 低代碼開發平臺能夠降低業務應用的開發成本。一方面,低代碼開發在軟件全生命週期流程上的投入都要更低(代碼編寫更少、環境設置和部署成本也更簡單);另一方面,低代碼開發還顯著降低了開發人員的使用門檻,非專業開發者經過簡單的IT基礎培訓就能快速上崗,既能充分調動和利用企業現有的各方面人力資源,也能大幅降低對昂貴專業開發者資源的依賴。

3. 低代碼核心能力

基於上述的定義和分析,不難總結出如下以下 3 條低代碼開發平臺的核心能力:

4.png

  • 全棧可視化編程:可視化包含兩層含義,一個是編輯時支持的點選、拖拽和配置操作;另一個是編輯完成後所及即所得(WYSIWYG)的預覽效果。傳統代碼 IDE 也支持部分可視化能力(如早年 Visual Studio 的 MFC/WPF),但低代碼更強調的是全棧、端到端的可視化編程,覆蓋一個完整應用開發所涉及的各個技術層面(界面/數據/邏輯)。
  • 全生命週期管理:作為一站式的應用開發平臺,低代碼支持應用的完整生命週期管理,即從設計階段開始(有些平臺還支持更前置的項目與需求管理),歷經開發、構建、測試和部署,一直到上線後的各種運維(e.g. 監控報警、應用上下線)和運營(e.g. 數據報表、用戶反饋)。
  • 低代碼擴展能力:使用低代碼開發時,大部分情況下仍離不開代碼,因此平臺必須能支持在必要時通過少量的代碼對應用各層次進行靈活擴展,比如添加自定義組件、修改主題 CSS 樣式、定製邏輯流動作等。一些可能的需求場景包括:UI 樣式定製、遺留代碼複用、專用的加密算法、非標系統集成。

4. 不只是少寫代碼

回到最初那個直擊心靈的小白問題:Low-Code 中的 “Low”,到底是啥意思?答案已經顯而易見:既不是指抽象程度很低(相反,低代碼開發方式的抽象程度要比傳統編程語言高一個 level),也不是指代碼很 low(也相反,低代碼所生成的代碼一般都經過精心維護和反覆測試,整體質量強於大部分手寫代碼),而是單純的“少寫代碼” —— 只在少數需要的情況下才手寫代碼,其他大部分時候都能用可視化等非代碼方式解決。

再往深一點兒看,低代碼不只是少寫代碼而已:代碼寫得少,bug 也就越少(正所謂“少做少錯”),因此開發環節的兩大支柱性工作“趕需求”和“修 bug”就都少了;要測的代碼少了,那麼測試用例也可以少寫不少;除了開發階段以外,平臺還覆蓋了後續的應用構建、部署和管理,因此運維操作也更少了(Low-Code → Low-Ops)。

然而,少並不是最終目的:如果單純只是想達到少的效果,砍需求減人力、降低質量要求也是一樣的。低代碼背後的哲學,是少即是多(Less is More),或者更準確說是多快好省(Do More with Less) —— 能力更多、上線更快、質量更好,成本還更省,深刻踐行了阿里“既要,又要,還要”的價值觀精髓。

5.png

5. 平臺的職責與挑戰

上面說的是低代碼給開發者提供的能力與吸引力,那麼作為服務的提供方與應用的承載者,低代碼開發平臺自身應該承擔怎樣的職責,其中又會遇到多大的挑戰?是否就一定要如阿里雲所主張的那樣,“把複雜留給自己,把簡單留給別人”?雖然這句話聽起來很深明大義,但不知道大家有沒有想過,為什麼我們一定要抱著複雜不放,平白無故給自己找事?就不能直接幹掉複雜,也給咱阿里雲自己的員工留點簡單嗎?是工作太容易就體現不出來 KPI 價值了,還是家裡的飯菜不如公司的夜宵香?

冥思苦想許久後,我從熱力學第一定律中找到了答案:開發一個應用的總複雜度是恆定的,只能轉移而不可能憑空消失。要想讓開發者做的更少,安心享受簡單的快樂,那麼平臺方就得做的更多,默默承擔儘可能多的複雜度。就像一個滿身腱子肉的雜技男演員,四平八穩地託舉著在高處旋轉與跳躍的女搭檔;上面的人顯得越輕盈越毫不費力,下面的人就得越穩重越用盡全力。當然,不是說上面的女演員就很輕鬆沒壓力,只是他們各自的分工不同,所承擔的複雜度也不一樣。

根據《人月神話》作者 Fred Brooks 的劃分,軟件開發的複雜度可以劃分為本質複雜度(Essential complexity )和偶然複雜度(Accidental complexity)。前者是解決問題時固有的最小複雜度,跟你用什麼樣的工具、經驗是否豐富、架構好不好等都無關,而後者就是除此之外在實際開發過程中引入的複雜度。通常來說,本質複雜度與業務要解決的特定問題域強相關,因此這裡我把它稱為更好理解的“業務複雜度”;這部分複雜度不是任何開發方法或工具能解決的,包括低代碼。而偶然複雜度一般與開發階段的技術細節強相關,因此我也相應把它稱為“技術複雜度”;而這一部分複雜度,恰好就是低代碼所擅長且適合解決的。

為開發者儘可能屏蔽底層技術細節、減少不必要的技術複雜度,並支撐其更好地應對業務複雜度(滿足靈活通用的業務場景需求),這是身為一個低代碼開發平臺所應該盡到的核心職責。

6.png

在盡到上述職責的同時,低代碼開發平臺作為一個面向開發者的產品,還需要致力於為開發者提供簡單直觀的極致開發體驗。這背後除了巨大的工作量,還得能在“強大”和“易用”這兩個很難兩全其美的矛盾點之間,努力找到一個符合自己產品定位與目標客戶需求的平衡點 —— 這也許是設計一個通用低代碼開發平臺所面臨的最大挑戰。

低代碼相關概念對比

1. 純代碼(Pro-Code / Custom-Code)

“純代碼”可能算是我杜撰的一個詞,更常見的說法是專業代碼(Pro-Code)或定製代碼(Custom-Code);但意思都一樣,就是指傳統的以代碼為中心(Code-Centric)的開發模式。之所以我選擇用“純代碼”,是因為如果用“專業代碼”會顯得似乎低代碼就不專業了一樣,而用“定製代碼”又容易讓人誤解成低代碼無法支持定製的自定義代碼。

當然,更準確的稱謂我認為是“高代碼”(與低代碼恰好對應,只是名字太難聽,被我嫌棄了...),因為即便是使用傳統的代碼 IDE,有些開發工作也支持(甚至更適合)以非代碼方式完成,比如:iOS 端開發時使用的 SwiftUI 界面設計器、服務端開發數據庫應用時使用的 PowerDesigner 建模工具。不過這部分可視化工作在傳統開發模式下只是起輔助作用,最後通常也是生成開發者可直接修改的代碼;開發者仍然是以代碼為中心來開展主要工作。

低代碼與純代碼之間的關係,其實跟視頻和文章之間很像:

  • 低代碼就像是現代的“視頻”,大部分內容都由直觀易理解、表達能力強的圖片組成,因此更容易被大眾所接受。但與此同時,視頻也不是死板得只能有圖片,完全可以添加少量文字(如字幕、標註)來彌補圖片表達不夠精確的問題。BTW,關於“圖”和“文字”之間的辯證關係,可以進一步參考《架構製圖:工具與方法論》這篇文章中的相關描述。
  • 純代碼則更像是傳統的“文章”,雖然很久以來都一直是信息傳播的唯一媒介,但自從視頻技術誕生以及相應軟硬件基礎設施的普及以來,便逐漸開始被搶走了風頭。如今,視頻已成為大部分人獲取信息的主要渠道(從電視電影到 B 站抖音),而經常讀書讀文章的人卻越來越少。但不可否認的是,文章依然有它存在的意義和受眾(不然我也不會費這勁敲這麼多字了),即使“市場份額”一直在被擠壓,但永遠會有它立足的空間。

7.png

如果按上面這種類比關係推導,低代碼未來也會遵循與視頻類似的發展軌跡,超越純代碼成為主流開發模式。Gartner 的預測也表達了相同的觀點:到 2024 年,所有應用程序開發活動當中的 65% 將通過低代碼的方式完成,同時 75% 的大型企業將使用至少四種低代碼開發工具進行應用開發。

但同樣地,就像是視頻永遠無法取代文章一樣,低代碼也永遠無法徹底取代純代碼開發方式。未來低代碼和純代碼方式將以互補的形態長期共存,各自在其所適合的業務場景中發光發熱。在後面的“低代碼業務場景”章節,會詳細列出哪些場景在現階段更適合用低代碼模式開發。

2. 零代碼(Zero-Code / No-Code)

從分類的完備性角度來看,有“純代碼”自然也應該有完全相反的“零代碼”(也稱為“無代碼”)。零代碼就是完全不需要寫代碼的應用開發平臺,但這並不代表零代碼就比低代碼更高級和先進,它只是做了一個更極端的選擇而已:徹底擁抱簡單的圖形可視化,完全消滅複雜的文本代碼。選擇背後的原因是,零代碼開發平臺期望能儘可能降低應用開發門檻,讓人人都能成為開發者(注意:開發 ≠ 寫代碼),包括完全不懂代碼的業務分析師、用戶運營,甚至是產品經理(不懂裝懂可不算懂)。

即便是專業開發者,在技術分工越來越精細的趨勢下(前端/後端/算法/SRE/數據分析..),也很難招到一個能獨立開發和維護整套複雜應用的全棧工程師。但零代碼可以改變這一切:無論是 Java 和 JavaScript 傻傻分不清楚的技術小白,還是精通深度學習但沒時間學習 Web 開發的算法大牛,都可以通過零代碼實現自己的技術夢或全棧夢。“改變世界的 idea 已有,就差一個程序員了”,這句玩笑話或許真的可以成真;哦不,甚至都用不著程序員,有 idea 的人自己就能上。

8.png

當然,所有選擇都要付出代價,零代碼也不例外。完全拋棄代碼的代價,就是平臺能力與靈活性受限:

  • 一方面,可視化編輯器的表達能力遠不及圖靈完備的通用編程語言,不引入代碼根本沒法實現靈活的定製與擴展(當然,理論上也可以做成 Scrach/Blockly 那樣的圖形編程語言,但那樣不過是換一種形式在手寫代碼而已)。
  • 另一方面,由於目標受眾是非專業開發人員,平臺能支持的操作會更趨於“傻瓜化”(e.g. 頁面只支持大塊業務組件的簡單堆疊,不支持細粒度原子組件和靈活的 CSS 佈局定義),同時也只會透出相對“親民化”的模型和概念(e.g. 使用“表格”表示數據,而不是用“數據庫”),無法支撐強大專業的底層開發原語和編程理念。

9.png

雖然零代碼與狹義上的低代碼有著上述明顯差異,但從廣義上來說,零代碼可以當作低代碼的一個子集。Gartner 在其相關調研報告中,就是將 “No Code” 劃在了範圍更廣的低代碼應用平臺“LCAP”(Low-Code Application Platform)中。而當前市面上很多通用的低代碼開發平臺,也都兼具一定程度的零代碼能力;比如低代碼領域領頭羊 Mendix,既提供了簡單易用的零代碼 Web IDE - Mendix Studio,也包括一個功能更強大的低代碼桌面 IDE - Mendix Studio Pro。

3. HpaPaaS(高生產力應用 PaaS)

上文提到,“Low-Code” 一詞是拜 Forrester 所賜。作為同樣是國際知名調研機構(a.k.a 造詞小能手)的 Gartner,顯然不會輕易在這場可能決定低代碼領域江湖地位的新概念作詞大賽中認輸,於是也於 2017 年發明了 “HpaPaaS”(High-productivity application Platform as a Service)這個聽上去更高大上的縮寫詞。

按照 Gartner 的定義,HpaPaaS 是一種支持聲明式、模型驅動設計和一鍵部署的平臺,提供了雲上的快速應用開發(RAD)、部署和運行特性;這顯然與低代碼的定義如出一轍。但事實證明,名字起得太專業並不見得是好事,“HpaPaas” 最終還是敗給了起源更早、更接地氣也更順口的 “Low-Code”:從 2019 年開始,Gartner 在其相關調研報告中也開始全面採用 “Low-Code” 一詞(如 LCAP),親手為 “HpaPaaS” 打上了 @deprecated 印記。

10.png

圖源:https://blog.kintone.com/business-with-heart/difference-saas-iaas-paas-apaas-hpapaas

值得補充的是,“HpaPaaS“ 這個詞也並非橫空出世,而是傳承自更早之前 Gartner 提出的 “aPaaS”,它倆之間的關係是:HpaPaaS 只是 aPaaS 的一個子類;除了 HpaPaaS 這種通過低代碼實現的高生產力應用開發平臺以外,aPaaS 還包括面向純代碼的傳統應用開發平臺(High-control aPaaS,即可控度更高的純代碼開發方式)。

不值得但就想八卦一下的是,“aPaaS” 這個詞也非憑空捏造,而是與雲計算的興起淵源頗深。相信各位雲道中人都已猜到,aPaaS 與 IaaS/PaaS/SaaS 這些雲計算遠古概念是一脈相承的:aPaaS 介於 PaaS 和 SaaS 之間,相比 PaaS 提供的服務更偏應用,但又不像 SaaS 一樣提供現成的軟件服務(更詳細的說明可參考配圖來源文章)。

為什麼需要低代碼?

低代碼是什麼可能並沒那麼重要,畢竟在這個信息爆炸的世界,永遠不缺少新奇而又短命的事物。大部分所謂的新技術都只是曇花一現:出現了,被看到了;大部分人“哦”了一聲,已閱但表示不感興趣;小部分人驚歎於它的奇思妙想,激動地點了個贊後,回過頭來該用什麼還是什麼。真正決定新技術是否能轉化為新生產力的,永遠不是技術本身有多麼優秀和華麗,而是它是否真的被需要,即:為什麼需要低代碼?如果用不同的主語填充上面這個問句(冷知識:這叫做“延遲主語初始化”),可以更全面地看待這個問題:

1. 為什麼「市場」需要低代碼?

在這個大爺大媽都滿嘴“互聯網+”和“數字化轉型”的時代,企業越來越需要通過應用(App)來改善企業內部的信息流轉、強化與客戶之間的觸點連接。然而,誕生還不太久的 IT 信息時代,也正面臨著與我國社會主義初級階段類似的供需關係矛盾:落後的軟件開發生產力跟不上人民日益增長的業務需求。

11.png

Gartner 預測,到 2021 年應用開發需求的市場增長將至少超過企業 IT 交付能力的 5 倍。面對如此巨大的 IT 缺口,如果沒有一種革命性的“新生產力”體系,很難想象僅憑現有傳統技術體系的發展延續就能徹底解決問題。而低代碼技術正是帶著這樣的使命而降臨,期望通過以下幾個方面徹底革新應用開發生產力,拯救差一點就要邁入水深火熱的 IT 世界:

1)提效降本 & 質量保障

雖然軟件行業一直在高速發展,新的語言、框架和工具層出不窮,但作為從業者我們不得不承認:軟件開發仍處於手工作坊階段,效率低、人力成本高、質量不可控。項目延期交付已成為行業常態,而瓶頸幾乎總是開發人員(對機器能解決的問題都不是問題);優秀的開發人才永遠是稀缺資源,還賊貴;軟件質量缺陷始終無法收斂,線上故障頻發資損不斷。

相比而言,傳統製造業經過幾百年工業革命的發展,大部分早已擺脫了對“人”的強依賴:從原料輸入到製品輸出,中間是各種精密儀器和自動化流水線的穩定支撐,真正實現生產的標準化和規模化。雖然信息化號稱是人類的第三次工業革命,但以軟件行業目前的狀況,遠遠還沒到達成熟的“工業化”階段。

所以,親愛的程序員朋友,當你與前端聯調了一上午接口,又與產品撕逼了一下午需求,再與自己的 bug 抗爭了一整晚,好不容易遁入夢鄉又被一連串報警短信吵醒時,是否有抬頭對著星空憧憬過:“I have a dream... that one day,軟件開發也能像工業製品一樣,批量流水化生產,穩定高效沒煩惱。” 事到如今,不管你有沒有意識到,這個憧憬正在慢慢變成現實。

12.png

是的,低代碼正在將應用軟件開發過程工業化:每個低代碼開發平臺都是一個技術密集型的應用工廠,所有項目相關人員都在同一條產線內緊密協作。開發主力不再是熟知 for 循環一百種寫法的技術 Geek,而是一群心懷想法業務 sense 十足的應用 Maker。藉助應用工廠中各種成熟的基礎設施、現成的標準零件、自動化的裝配流水線,開發者只需要專注於最核心的業務價值即可。即便是碰到非標需求,也可以隨時自己動手,用最靈活的手工定製(代碼)方式來解決各種邊角問題。

2)擴大應用開發勞動力

通過讓大部分開發工作可以僅通過簡單的拖拽與配置完成,低代碼(包括零代碼)顯著降低了使用者門檻,讓企業能夠充分利用前面所提到的平民開發者資源。部分純零代碼需求場景下,低代碼還能讓業務人員實現自助式(self-service)應用交付,既解決了傳統 IT 交付模式下的任務堆積(backlog)問題,避免稀缺的專業開發資源被大量簡單、重複性的應用開發需求所侵佔,也能讓業務人員真正按自己的想法去實現應用,擺脫交由他人開發時不可避免的桎梏。

13.png

至此,應用開發能力不再是少數專業開發者的專利和特權,且今後所需要的技能門檻與擁有成本也會越來越低,真正實現所謂的“技術民主化”(democratization of technology)。

3)加強開發過程的溝通協作

多方調查結果顯示,軟件項目失敗的最主要原因之一就是缺乏溝通(poor communication)。傳統開發模式下,業務、產品、設計、開發、測試與運維人員各司其職,且各有一套領域內的工具和語言,長久以來很容易形成一個個“豎井”(silos),讓跨職能的溝通變得困難而低效。這也是為什麼當前熱門的敏捷開發和 DevOps 都在強調溝通(前者是協同 Biz 與 Dev,而後者是協同 Dev 和 Ops),而經典的 DDD 領域驅動設計也主張通過“統一語言”來減少業務與技術人員之間的溝通不一致。

14.png

有了低代碼後,這一狀況將得到根本改善:上述各角色都可以在同一個低代碼開發平臺上緊密協作(甚至可以是同一個人),這種全新的協作模式不僅打破了職能豎井,還能通過統一的可視化語言和單一的應用表示(頁面/數據/邏輯),輕鬆對齊項目各方對應用形態和項目進度的理解,實現更終極的敏捷開發模式,以及在傳統 DevOps 基礎之上更進一步的 BizDevOps

4)統一開發平臺下的聚合效應

低代碼嘗試將所有與應用開發相關活動都收斂到同一個平臺(one platform)上後,將會產生更多方面的聚合效應與規模收益:

  • 人員聚合:除了上一點所提到的各職能角色緊密協作以外,人員聚合到統一的低代碼開發平臺進行作業後,還能促進整個項目流程的標準化、規範化和統一化。
  • 應用聚合:一方面,新應用的架構設計、資產複用、相互調用變得更容易;另一方面,各應用的數據都天然互通,同時平臺外數據也能通過集成能力進行打通,徹底消除企業的數據孤島問題。
  • 生態聚合:當低代碼開發平臺聚合了足夠多的開發者和應用後,將形成一個巨大的、連接一切、有無限想象力的生態體系,徹底放飛低代碼的價值。

2. 為什麼「這個時代」才需要低代碼?

如果你瞭解過市面上各種低代碼產品,不難發現其實這個領域的許多玩家在低代碼概念誕生之前就已經存在了,比如:低代碼領域的另一個巨頭 OutSystems,早在 2001 年就已經創立;而去年也被 Forrester 評為低代碼行業leader之一的 FileMaker,更是誕生於遙遠的 1985 年(正好 35 歲,似乎在瘋狂暗示什麼)。那麼,如果低代碼像前面說的那麼好,為什麼以前沒有火起來呢?從技術和業務兩個角度看,可以歸納為以下原因:

1)技術成熟度不足

低代碼底層的各項核心技術(可視化、模型驅動、RAD、BPMS...)都已經有漫長的發展歷史,看上去似乎只是新瓶裝舊酒。然而理智的人都知道,任何技術都會遵循所謂的“技術成熟度曲線”(The Hype Cycle),不可能剛一誕生就跳過發育直接秀翻全場,被大規模採納和投入生產。以模型驅動技術為例,雖然十幾年前就已經有體系化的理論研究(e.g. MDA)和配套工具(e.g. EMF),但在當時的技術背景下,由於能力不完備、過於理想化、技術門檻高等原因,一直沒能在工業界走向主流。

15.png

而如今這個時代,支撐低代碼的那些“老”技術都已經過長時間的發展醞釀與市場檢驗,而另一些完美互補的“新”技術(e.g. 雲原生、響應式 Web)也在飛速發展和走向成熟,是時候通過“低代碼”這個新酒瓶重新包裝上市,為亟需新生產力的傳統IT市場帶來一場真香之旅了。

2)業務收益不明顯

即使十幾年前的低代碼技術已經足夠成熟,也一定不會在當年的應用開發市場上產生現在這樣的影響力。為什麼?因為技術都是為業務服務的,而當時的應用開發業務需求可比現在簡單多了:沒有如今的多渠道(Multi-channel)、多樣化體驗(Multi-experience)和各種集成與定製需求,也不會奢求如今已成為企業級應用標配的彈性、分佈式和高可用,更是缺乏快速變化的IT業務場景來推動持續集成與快速交付。

雖然低代碼可以完美解決上述所有問題(e.g. 多端應用生成、雲原生架構、API 集成能力),但放在當年的市場和業務背景下,加上前面所說的技術不成熟度,整體的投入產出比會很低,不足以讓企業大面積採納低代碼解決方案。

16.png

而如今這個時代,企業都快被新技術帶來的能力和收益“慣壞了”,動不動就是:我想做一個送菜應用。用戶端?安卓、iOS、H5、小程序都來一套。運營端?一般都在電腦上看,但記得手機上也得適配啊。服務端?上雲,必須的。哦,我聽技術合夥人說現在流行多雲架構,也給我整一套哈。運維還要錢?啥是運維?應用有了不就能用了嘛,運維還要花我錢?你當投資者給我的錢是大風颳來的啊!

如果用傳統的開發模式,這麼全套下來的工時與報價,可能早就嚇跑了這群跟產品經理一樣天真可愛的人;但現代化的低代碼技術,可以圓了上面這位創業者的賣菜夢,用白菜一般的價格,實現白粉一樣的價值。當年的程維如果能用上現在的低代碼,第一版的滴滴 App 也就不至於被外包做得烏煙瘴氣直接報廢了(至少能多扛一陣子...)。

3. 為什麼「專業開發者」也需要低代碼?

雖然零代碼確實是設計給非專業開發者用的,但其所能支撐的業務場景確實有限,無法真正革新傳統開發模式,替代那些仍需專業開發者參與的複雜業務場景。而狹義上的低代碼卻有潛力做到這一點,因為它天生就是為專業開發者而量身定製的。Gartner 最近的一項調研報告顯示,“66% 的低代碼開發平臺用戶都是企業 IT 部門的專業開發者”。這充分說明了,專業開發者比平民開發者更需要低代碼。

屏幕前一批穿格子襯衫的同學要發問了:“低代碼都不怎麼寫代碼了,怎麼能算是為我們程序員服務呢?”。雖然程序員討厭重複自己,但重要的事情還是得多說一遍:開發 ≠ 寫代碼。1 萬年前蹲在洞穴裡的原始人,在用小石子畫遠古圖騰;100 年前坐在書桌前的徐志摩,在用鋼筆給林徽因寫情書;而今天趴在屏幕前的很多人,相信都已經開始用上手寫板或 iPad 塗塗寫寫了。千百年來,人類使用的工具一直在演進,但所從事活動的本質並沒有多大改變。無論是用小石子還是小鼠標,寫作繪畫的本質都是創造與表達,最終作品的好壞並不取決於當時你手中拿著什麼;同樣地,應用開發的本質是想法和邏輯,最終價值的高低也不取決你實現時是用的純代碼還是低代碼。

而相比純代碼而言,低代碼極有可能成為更好的下一代生產力工具:

1)減少不必要的工作量

可視化拖拽與參數配置的極簡開發模式,結合模型驅動的代碼自動生成機制,可以消滅絕大部分繁瑣和重複的 boilerplate 代碼;一站式的部署和運維管理平臺,無需自己搭建 CI/CD 流水線、申請環境資源、配置監控報警;一次搭建同時生成、構建和發佈多端應用,免去人工同步維護多個功能重複的端應用;開箱即用的組件庫、模板庫、主題庫、連接器等,讓最大化軟件複用成為可能。總而言之,低代碼能夠讓專業開發者更專注於創新性、有價值、有區分度的工作,而不是把寶貴開發時間都耗費在上面那些不必要的非業務核心工作上。

2)強大的平臺能力支撐

雖然上面列的技術支撐性工作並不直接產生業務價值,但卻會直接影響業務的性能、成本、穩定性、安全性、可持續發展能力等。有遠見的企業,絕不允許犧牲這些重要指標,來換取短暫的業務加速。低代碼開發平臺深知這一點,因此在簡化和屏蔽底層技術細節的同時,也會儘可能把自己所 cover 的部分做到最好(至少能和純代碼開發方式一樣好),包括但不限於:

  • 現代化的技術架構和實現:現代化的低代碼開發平臺,在支撐用戶應用時所選擇的技術架構與實現方案,也會是現代化且符合業界最佳實踐的,例如,前端基於主流的 HTML5/CSS3 標準和 React 框架,後端基於成熟的 Java 語言、SpringBoot 框架和 MySQL 數據庫,部署環境基於雲原生的 Docker 鏡像、CI/CD 流水線、K8s 集群和 Service Mesh 技術(相關知識可參考《正確入門 Service Mesh:起源、發展和現狀》)。
  • 零成本的技術升級和維護:低代碼的高維抽象開發方式,讓應用的核心業務邏輯與底層技術細節徹底解耦。開發者在大部分情況下都不需要關心底層技術選型,同時也無需親自跟進這些技術的版本升級與漏洞修復,免費享受與時俱進的技術紅利和應用安全性提升。即便遇到某些底層技術或工具需要進行徹底更換(比如不再維護的開源項目),開發者也完全不必感知;技術遷移再費勁再難搞,平臺自己努力就行,對開發者來說只要服務一直在線,歲月就依然靜好;事後可能還會驚喜地發現,應用訪問突然就變得更快了,彷彿冥冥中自有天助,感激上蒼和低代碼。

3)一體化生態能力複用

複用(Reuse)是提升軟件開發效率和工程質量的最有效途徑。傳統的代碼開發模式下,開發者可以通過提取公共類/函數、引用共享庫、調用外部 API 服務、沉澱代碼片段和模板等方式實現複用。在低代碼的世界裡,平臺也可以提供對應的多層次多粒度複用手段,比如頁面組件庫、邏輯函數庫、應用模板庫等。

但更重要的是,低代碼平臺還可以充分發揮其一體化的生態優勢,提供強大易用的可複用能力(資產)的發現、集成與共享體系:以頁面組件為例,你可以直接用系統組件,也可以在平臺自帶的組件市場上搜索和引用更合適的組件,還可以自己用代碼開發一個自定義組件併發布到市場中。平臺的生態體系越大,積累的可複用能力就越多,應用的開發成本也會越低。

相比而言,雖然傳統代碼世界整體生態更龐大和深厚,但由於各類技術不互通、缺乏統一平臺與市場、代碼集成成本高等原因,一直以來都沒有形成有類似規模潛力的生態能力複用體系,導致重複造輪子和低水平重複建設的現象司空見慣,還美名為“新基建”。

說到這裡,另一批裹著衝鋒衣頭頂鋥亮的同學也忍不住了:“萬一低代碼真的發展起來了,是不是就不需要那麼多程序員了啊?上有老下有小的,同是碼農身,相煎何太急!”。低代碼雖然是一場應用開發生產力革命,但並不會革掉程序員的飯碗。它去掉的只是難懂的編程語法、繁瑣的技術細節和一切可自動化的重複性工作,並沒有也無法去掉應用開發最核心的東西:嚴謹的業務邏輯、巧妙的算法設計、良好的工程風格等。對於真正的程序員,即使剝去他一層又一層的編程語言和工具熟練度技能外殼,最終剩下的仍然是一個有價值的硬核開發者。

當然,如果你堅持要用純粹的寫代碼方式來改變世界,也不至於失業。要麼,你可以選擇那些低代碼暫時不太適用的領域,比如底層系統驅動、3D 遊戲引擎、火箭發射程序;或者,你也可以選擇去寫低代碼中那一部分不可或缺的自定義代碼擴展,為平民開發者提供高質量的積木。最後,你也完全可以選擇為低代碼平臺本身的底層代碼添磚加瓦,比如加入阿里云云原生應用研發平臺 EMAS 團隊 (〃'▽'〃) ,與作者一起共建下一代雲原生低代碼開發平臺“Mobi”,內推直達郵箱:pengqun.pq # alibaba-inc.com。

4. 為什麼「我不」需要低代碼

即使所有人都認同上述“為什麼要用低代碼”的理由,但仍不時會有試水者跳出來,給大家細數“為什麼我不需要低代碼”。實踐出真知沒錯,而且大部分質疑背後也都有一定道理;但在我看來,更多的可能是主觀或無意識的偏見。這裡我列了一些對低代碼的常見質疑和我個人的看法,期望能幫助大家看到一個更全面和客觀的低代碼。

質疑 1:低代碼平臺不好使

“試用過一些所謂的低代碼開發平臺,要麼能力很弱,要麼體驗太差,只能開發點玩具應用。”

作為調研過國內外多款低代碼產品的深度體驗用戶,我的觀點是:不能以偏概全。低代碼市場在國內正處於爆發初期,所以許多與低代碼只沾一點邊的產品也都在蹭熱點;但它們並不能代表低代碼目前的業界水平和發展方向。市面上真正成熟的企業級低代碼開發平臺,完全有能力以高效的開發方式滿足大部分複雜場景的功能需求,以及企業級應用所需要的安全、性能、可伸縮等非功能需求,這一點在國外市場已得到充分驗證(不然也不會這麼被寄予厚望)。

當然,國內市場尚處於魚龍混雜的混戰階段,遇到真龍的概率很低,但碰上金魚鯉魚甚至木頭假魚都在所難免。相信隨著時間推移,真正有實力和口碑的產品都能脫穎而出,為大家展現低代碼該有的樣子。

質疑 2:低代低開發不可控

“平臺上的各種可視化組件、邏輯動作和部署環境都是黑盒,如果內部出問題無法排查和解決。”

作為同樣不搞清楚底層原理不舒服斯基的程序員,我更願意相信:問題只是暫時的。雖然這確實是目前使用低代碼平臺時繞不開的一個痛點,但並不屬於低代碼技術本身的固有缺陷。計算機領域有一句至理名言:任何問題都可以通過增加一個間接的中間層來解決。低代碼的思路亦是如此:與當年的操作系統和現在的雲平臺一樣,都是想通過建立一個黑盒化的中間層抽象來降低開發者的工作量與心智負擔。

當然,所有額外增加的中間層都不是完全免費的,低代碼也不例外。作為一個尚未成熟穩定的新的中間層,低代碼必然會出現各種讓使用者束手無措的問題,就跟當年的操作系統內核 bug、如今的雲主機 I/O hang 一樣。但歷史規律也告訴我們,所有偉大的技術最終都會走向成熟;只要低代碼領域一直健康發展,問題總會越來越少,最終降到一個絕大部分人感知不到的範圍內。過去縈繞在 Windows 用戶心中揮之不去的“藍屏”問題,對如今的新用戶來說早已不知為何物;今天低代碼開發者所遇到的種種“藍瘦”問題,未來也終將成為被遺忘的歷史(誰還沒段黑歷史呢)。

質疑 3:低代碼應用難維護

“應用一旦複雜起來,各種複雜邏輯流穿插著自定義代碼,看不懂也改不動,還不如全用代碼呢。”

作為對軟件可維護性深有感觸的無腦級佈道者(見《救火必備!問題排查與系統優化手冊》),我不得不說:用低代碼開發,也要講基本法。一般來說,無論是使用低代碼開發還是純代碼開發,造成應用可維護性低的根本原因往往不在於開發工具,而是開發者自身沒有去遵循一些軟件開發的普適原則,比如工程規範性、命名可讀性、DRY/KISS/SOLID 原則等。

好的低代碼平臺絕不會阻礙開發者去改善應用的可維護性;恰恰相反,還會儘可能提供引導和幫助。以 Mendix 為例,除了支持基本的模型分析與重構(e.g. 無用模型、對象重命名、子邏輯流提取)以外,甚至還提供了基於 ISO/IEC 25010 標準的應用質量監控(AQM)能力。另一方面,讓應用變得難以維護的一個客觀原因也是應用本身過於複雜,而低代碼作為高度抽象和自動化的開發模式,在降低應用複雜度方面是專業的。

綜合來看,低代碼雖然不是能解決一切問題的銀彈,但更不是會帶來更多問題的炸彈:在提高應用可維護性方面的上限,一定比傳統開發模式更高;但決定應用可維護性下限的,依然還是開發者自己。

低代碼行業發展

迴應質疑的最好方式,就是做好你自己,用實際的表現說話。對於一個行業而言,判斷它當前的表現是否夠好,或者未來是否有潛力做到更好,可以從以下這三個方面進行衡量:市場規模(蛋糕夠不夠大)、適用場景(是否可落地)、競品狀況(有沒有被驗證過)。

1. 市場規模

"Talk is cheap,show me the code money." > —— Linus Starcraft

文章可以忽悠,但市場不會說謊:

  • Forrester 在 2015 年曾預測過,低代碼的市場將從 2015 年的 17 億美元增長至 2020 年的 150 億美元。
  • Marketsandmarkets 在今年四月份的分析報告中預測,低代碼的市場將從 2020 年的 130 億美元(估算值,可以看出來與 Forrester 當年的預測是接近的)增長到 2025 年的 450 億美元(年複合增長率:28.1%)。
  • PS Inteligence 在 2018 年的分析報告中預測,全球的低代碼開發平臺市場中,亞太地區將在今後五年(2019-2024 年)中保持最高的增長速度。

17.png

總結一下就是兩點:

  • 低代碼的市場規模足夠大,且一直都在高速增長。
  • 作為亞太地區的經濟大國與IT強國,中國的低代碼市場將會引來一個爆發期,未來幾年內的增速都會超過全球平均水平。

2. 適用場景

理論上來說,低代碼是完全對標傳統純代碼的通用開發模式,應該有能力支撐所有可能的業務場景。但理論也只是理論,低代碼一統江湖的夢想尚未照進現實,也不可能完全取代現實。前文中提到過,低代碼與純代碼方式是互補關係,未來也將長期共存,各自在其所適合的業務場景中發光發熱。同時還需要指出的是,當前階段的低代碼技術、產品和市場都尚未完全成熟,因此部分本來可能很適合用低代碼來開發的場景,目前也只能先用純代碼來替代。

Gartner 在 2019 年的低代碼調研報告中,曾經繪製過一張用來闡述低代碼適用場景的“應用金字塔”:

18.png

  • 應用級別劃分:從下往上,分別為工作組級(Workgroup Class)、部門級(Departmental Class)、企業級(Enterprise Class)、可擴展需求極強的企業級(Extreme-Scale Enterprise Class)。容易看出來,它主要的劃分維度就是應用所面向的用戶基數(基數越大,可擴展需求也越高)。
  • 任務關鍵性:從下往上,各級別應用的任務關鍵性(Mission Criticality)逐級遞增。例如一個只在工作組內使用的後臺管理應用,一般都不會涉及到影響整個企業的關鍵任務。脫離企業這個視角來看,整個軟件產業中也有很多通用的任務關鍵型應用,比如:實時操作系統、航空調度系統、銀行對賬系統。
  • 實現複雜度:從下往上,各級別應用的複雜度(Complexity)也逐級遞增。例如最上層的企業級應用,除了功能覆蓋面大導致業務複雜以外,往往還需要滿足更多苛刻的非功能需求,包括但不限於:用戶體驗、性能、可靠性、安全性、可伸縮性、可維護性、兼容性。其他一些複雜軟件的案例包括:3D 遊戲界面(交互複雜)極其底層的遊戲引擎(邏輯複雜)、超大型 CRM 系統(一方面是實現很複雜,另一方面,這種成熟軟件的標準化程度較高,大部分情況下可以直接用現成的 SaaS 軟件)。
  • 應用需求量:從上往下,各級別應用的需求體量(Volume)逐級遞增,呈現一個金字塔形狀。這個特徵可以用萬能的 2/8 原則來理解:20% 的“全民”應用,由於需求的通用性和普適性,可以覆蓋至少 80% 的用戶群體(例如企業大部分人都要用的考勤系統);而剩下那 80% 的“小眾”應用,由於需求的定製化和特殊性(例如螞蟻的期權系統...),就只能覆蓋各自小圈子裡那 20% 的用戶了。
  • 與低代碼的契合關係:從上往下,各級別應用與低代碼越來越契合(Relevant)。也就是說:越簡單的應用,越契合低代碼;越不太關鍵的任務,也越契合低代碼。同時,由於契合低代碼的應用更偏金字塔底層,而這些應用的需求量都更大,所以可以得出如下判斷:低代碼能夠適用於大部分業務場景(而且這個比例會一直上升,逐步往金字塔的更上層應用逼近),例如:B2E 類應用(表單、審批流、ERP 系統)、B2B 類應用(企業商城、工業控制檯)、B2C 類應用(企業展示、營銷頁、店鋪裝修)。

3. 競品概況

低代碼雖然是一個新興概念,但這個行業本身並不算很新(前文也有提到),這些年以來早就積累了不少資深的榮耀王者。同時,低代碼作為一個朝陽產業和資本熱點,近幾年也不斷有更多的新玩家在加入這個刺激戰場。

19.png

上圖分別是 Gartner 給出的低代碼平臺魔力象限和 Forrester 給出的低代碼平臺技術波譜。從圖中可以看到:

  • OutSystems 和 Mendix 一馬當先,是公認的低代碼領域頭牌。這兩家都是很純粹的通用低代碼開發平臺,且都經過了長時間的發展和積累:OutSystems 成立於 2001 年,員工人數 1000+,年營收超過 1 億美元;2018 年 6 月獲得了 KKR 和高盛的 3.6 億美元融資,目前估值超過 10 億美元;Mendix 成立於 2005 年,員工人數 500+,年營收超過 2300 萬美元(18 年數據),2018 年 8 月被西門子以 7.3 億美元收購。
  • Salesforce 和 Microsoft 緊隨其後,都處於行業領先者地位。但這兩家的公司性質和發展路徑都很不一樣:Salesforce 是以 SaaS 起家,公司規模就不用多說了,反正就是 SaaS 屆的巨無霸。這類 SaaS 廠商做低代碼的動力,是為了解決客戶對成品 SaaS 軟件的定製訴求。M$ 更不用多介紹,只說下他們做低代碼的天然優勢:一方面,作為辦公軟件航空母艦,低代碼可以幫助他們的客戶實現從 Excel 表單到定製 App 的能力與體驗升級;另一方面,作為雲計算三巨頭之一,低代碼可以幫助他們連接內部的雲計算生態體系,為開發者提供一個統一和易用的上雲界面。
  • 國外市場已經得到充分驗證,但國內市場還剛剛興起,還沒有一家能夠贏得上述調研機構的芳心,擠進上面這兩張方圖。國內目前的一些競品和融資情況包括:2018 年 5 月,搭搭雲完成A輪的千萬級融資;2018 年 9 月,宜創科技得到清源創投的戰略融資;2018 年 12 月,輕流完成千萬級 Pre-A 融資;2019 年 8 月,數式科技得到盈動資本的數千萬人民幣天使輪融資;2019 年 8 月,ClickPaas 獲得晨興資本數百萬美元的 A 輪融資;2019 年,奧哲分別獲得阿里 5 千萬的 A+ 輪融和高榕資本上億元的 B 輪融資。(注:競品數據來源於我們組 PD 的辛勤整理;為此我決定這篇文章剩下內容再也不黑 PD 了;下篇再說。)

結語

本文總結了低代碼領域的基本概念、核心價值與行業現狀。雖然這些內容都比較基礎和偏理論,但我始終認為,深刻理解一個系統的前提,正是這些務虛的東西 —— 技術架構只會告訴你這個系統是怎麼實現的(How),無法準確表述它到底能用來做什麼(What),以及為什麼要做這樣一個東西(Why);而後面這兩個問題的答案,才是後續系統所有設計與演進的根因和驅動力。

雖然程序員真的不喜歡重複自己,但冗餘也是一種必要的容錯手段,好東西真的不容錯過:歡迎各位技術同路人加入阿里云云原生應用研發平臺 EMAS 團隊,我們專注於廣泛的雲原生技術(Backend as a Service、Serverless、DevOps、低代碼平臺等),致力於為企業、開發者提供一站式的應用研發管理服務,內推直達郵箱:pengqun.pq # alibaba-inc.com。

Leave a Reply

Your email address will not be published. Required fields are marked *