什麼是低程式碼(Low-Code)?

EMAS發表於2020-11-19
簡介:什麼是低程式碼?我們為什麼需要低程式碼?低程式碼會讓程式設計師失業嗎?本文總結了低程式碼領域的基本概念、核心價值與行業現狀,帶你全面瞭解低程式碼。

1.jpg

一 前言

如果選擇用一個關鍵詞來代表即將過去的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。

Wikipedia定義

2.jpg

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

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

Forrester定義

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

3.jpg

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

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

低程式碼核心能力

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

4.jpg

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

不只是少寫程式碼

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

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

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

5.jpg

平臺的職責與挑戰

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

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

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

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

6.jpg

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

三 低程式碼相關概念對比

純程式碼(Pro-Code / Custom-Code)

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

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

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

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

7.jpg

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

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

零程式碼(Zero-Code / No-Code)

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

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

8.jpg

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

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

9.jpg

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

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.jpg

圖源: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一樣提供現成的軟體服務(更詳細的說明可參考配圖來源文章)。

四 為什麼需要低程式碼

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

為什麼「市場」需要低程式碼?

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

11.jpg

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

提效降本 & 質量保障

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

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

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

12.jpg

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

擴大應用開發勞動力

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

13.jpg

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

加強開發過程的溝通協作

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

14.jpg

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

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

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

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

為什麼「這個時代」才需要低程式碼?

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

技術成熟度不足

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

15.jpg

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

業務收益不明顯

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

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

16.jpg

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

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

為什麼「專業開發者」也需要低程式碼?

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

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

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

減少不必要的工作量

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

強大的平臺能力支撐

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

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

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

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

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

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

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

為什麼「我不」需要低程式碼

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

質疑1:低程式碼平臺不好使

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

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

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

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

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

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

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

質疑3:低程式碼應用難維護

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

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

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

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

五 低程式碼行業發展

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

市場規模

"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.jpg

總結一下就是兩點:

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

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

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

18.jpg

  • 應用級別劃分:從下往上,分別為工作組級(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類應用(企業展示、營銷頁、店鋪裝修)。
競品概況

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

19.jpg

上圖分別是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。

相關連結
[1]https://developer.aliyun.com/article/774446
[2]https://www.cloudops.com/blog/everything-you-need-to-know-about-bizdevops/

原文連結:https://developer.aliyun.com/article/778355?

版權宣告:本文內容由阿里雲實名註冊使用者自發貢獻,版權歸原作者所有,阿里雲開發者社群不擁有其著作權,亦不承擔相應法律責任。具體規則請檢視《阿里雲開發者社群使用者服務協議》和《阿里雲開發者社群智慧財產權保護指引》。如果您發現本社群中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社群將立刻刪除涉嫌侵權內容。

相關文章