今天想聊聊可視化編程(visual-programming)的未來發(fā)展,喂喂,咱們這兒還沒開始,各位大佬先別急著走啊您……確實(shí),可視化這個(gè)概念跟任何技術(shù)并稱,都是技術(shù)前沿、下一個(gè)風(fēng)口、萬億市場(chǎng)的代名詞,數(shù)據(jù)可視化、可視化分析、神經(jīng)網(wǎng)絡(luò)可視化……唯獨(dú)在一個(gè)領(lǐng)域似乎成了 low 和過時(shí)的象征——可視化編程。無論資深程序員還是風(fēng)投大佬,只要你跟他提起這個(gè)概念,對(duì)方都會(huì)立刻露出一種“不提這個(gè)還能聊”的鄙夷神情。
然而可視化編程本來是一個(gè)多么朋克且具有未來感的語匯,它最大的意義在于打破一些我們今天看起來不可逾越的技術(shù)壁壘,重新定義被稱之為底層技術(shù)生態(tài)的一些東西。著名的信息技術(shù)分析公司 Gartner 早在 2012 年就提出了“全民開發(fā)者”(Citizen Developer)概念,指的是借助于一些組件化的集成代碼可視化平臺(tái),一些不具備專業(yè)代碼技能和開發(fā)經(jīng)驗(yàn)的“小白”人群也能自主組織或參與應(yīng)用開發(fā),從而把代碼開發(fā)由一項(xiàng)程序員專屬職能擴(kuò)充到更廣泛的人群,甚至是全人類。想象一下,你們公司的保潔阿姨將參與下個(gè)季度的核心項(xiàng)目開發(fā),隔壁的王大爺開發(fā)了一個(gè)名為“跳了嗎”的程序用來約小區(qū)大媽一起能跳廣場(chǎng)舞……媽耶,這將是一個(gè)多么不可思議而令人神往的時(shí)代,不僅是 IT 行業(yè),整個(gè)社會(huì)都將發(fā)生天翻地覆的變革。
然而理想是雄壯的,現(xiàn)實(shí)卻是悲壯的。從上世紀(jì) 60 年代至今,無數(shù)大佬在這個(gè)領(lǐng)域進(jìn)行了前赴后繼的探索,提出了各種解決方案,并開發(fā)出了配套的工具,目前可知的可視化編程工具已超過 90 余款。上世紀(jì)九十年代,還有人嘗試開展一場(chǎng)運(yùn)動(dòng),即在企業(yè)中普及可視化編程工具,通過 UML CASE 來定義和生成應(yīng)用。這種工具的工作原理是通過可視化方法為系統(tǒng)建模,根據(jù)模型生成程序代碼,任何代碼的變更都可以反向反映到模型上。
但是這些實(shí)踐都宣告失敗了。截至目前,可視化編程只在一個(gè)領(lǐng)域取得了一些成果,你猜對(duì)了,就是以 Scratch、Blockly 為代表的兒童編程。想到這些,一股悲壯感油然而生,猛虎落淚.jpg。
那么現(xiàn)在問題來了。為什么一個(gè)看似如此潛力非凡的技術(shù)風(fēng)向,卻至今未能爆發(fā)出應(yīng)有的潛能,反而受到專業(yè)人士唾棄?問題到底出在概念本身,還是缺乏有效的實(shí)現(xiàn)路徑?對(duì)可視化編程的負(fù)面印象到底是一種偏見,還是它從根本上就是個(gè)糟糕的 idea?有沒有一種解決方案能夠從底層實(shí)現(xiàn)革新,創(chuàng)造真正意義上實(shí)現(xiàn)可視化編程?這就是我們接下來試圖討論的問題。
為了解答可視化編程相較于傳統(tǒng)編程到底差在哪里的問題,我們首先和一些程序員聊了一聊。他們是這樣說的:
幾乎所有的程序員都首先對(duì)現(xiàn)有可視化編程平臺(tái)的工作方式提出了質(zhì)疑。他們認(rèn)為,大多數(shù)可視化平臺(tái)都采用了 Block Type(積木模塊型),即通過“拖拽”、拼接并通過可視化窗口對(duì)一些對(duì)象屬性進(jìn)行定義的方式來實(shí)現(xiàn)項(xiàng)目的搭建。這是一種十分低效的編程方式。程序員的基本氣節(jié)就是,寧愿用鍵盤敲出一行行代碼,也不愿拖壞鼠標(biāo)。
多數(shù)受訪程序員們認(rèn)為,可視化編程工具聽起來只能搭建一些前端頁面,要么就是通過圖形化節(jié)點(diǎn)的方式來做一些簡單的程序序列,做做兒童編程還行,至于具有復(fù)雜數(shù)據(jù)架構(gòu)的大型應(yīng)用,別問,問就是做不了。
可視化編程的基本邏輯是實(shí)現(xiàn)代碼到可視化圖形的映射。一個(gè)簡單的程序包含數(shù)百行代碼的情況是常態(tài),而當(dāng)這些代碼成為百上千個(gè)圖形元素,閱讀和理解的抽象程度、維護(hù)的困難程度甚至?xí)^以文本形式存在的代碼。
高級(jí)語言歷經(jīng)了很長的發(fā)展歷程,其實(shí)語言本身并沒有什么本質(zhì)提升,但是基本架構(gòu)、代碼庫和配套的 IDE 卻日益完善。而可視化編程目前還只停留在初級(jí)階段,只解決了工具層面的核心問題,缺乏配套的工作環(huán)境和技術(shù)資源積累,將在很大程度上限制工作效率甚至抑制產(chǎn)能。
可視化編程工具基于對(duì)既有代碼邏輯或?qū)ο筮M(jìn)行封裝來實(shí)現(xiàn),卻也因此而無法被輕松解耦,極大地限制了開發(fā)的自由度。如果遇到問題,是不是還要重新維護(hù)和開發(fā)可視化工具本身???何況有很多工具甚至還不是開源的。那我要這鐵棒有何用…
程序員們均認(rèn)為,可視化編程工具開發(fā)出來的東西都是模塊拼接而成的,缺乏有效的可復(fù)用機(jī)制,首先不具備清晰的數(shù)據(jù)結(jié)構(gòu),其次更無法被模塊化。所以,只能開發(fā)一次性應(yīng)用???
除了對(duì)于可視乎語言本身的指摘,很多程序員也表現(xiàn)出了對(duì)這種新工作方式的抗拒。他們覺得自己已經(jīng)習(xí)慣了代碼化的開發(fā)邏輯,很難適應(yīng)一款從根本上存在歧異的“語言”。而如果在使用中要同時(shí)兼顧,則更加難以協(xié)調(diào)思維邏輯的轉(zhuǎn)換。
可以看出,程序員對(duì)于可視化編程的抗拒心理主要圍繞產(chǎn)能、開發(fā)效率、使用性、功能性等實(shí)踐方面。盡管很多程序員都承認(rèn),可視化編程是一個(gè)好的概念,但是作為一種工具,它從邏輯上并不能真正實(shí)現(xiàn)對(duì)高級(jí)語言的簡化,反而在操作層面將其復(fù)雜化了。一言以蔽之,所以可視化編程只能做為一種初級(jí)工具,作為高級(jí)語言的輔助品,而永遠(yuǎn)無法取代高級(jí)語言。
可以看出,程序員抗拒可視化編程,本質(zhì)是在說,目前還沒有一款成熟的可視化產(chǎn)品真的能夠讓他們體會(huì)到便利,解決他們后顧之憂。這讓我們不禁開始思考,本質(zhì)上這或許是一個(gè)技術(shù)發(fā)展階段的問題,不是可視化編程這個(gè)思路不好,只是好的工具還沒有問世?為此,我們調(diào)研了目前市場(chǎng)上的一些可視化工具,想要看看是否有一些工具已經(jīng)做出了一些突破,或者具備實(shí)現(xiàn)突破的潛質(zhì)。
調(diào)查顯示,作為可視化編程的發(fā)源地,目前國外主打可視化編程、低代碼編程的平臺(tái)至少有十幾家,其中最具代表性的可以說是 OutSystems、Mendix、Salesforce、 Kony 等幾家。而值得欣喜的是,國內(nèi)這幾年也有一些功能相對(duì)完善的競品出現(xiàn),包括明道云、簡道云、iVX 等。關(guān)于這些平臺(tái)的相關(guān)評(píng)測(cè)文章已經(jīng)很多了,而這里我們不去比較平臺(tái)的優(yōu)劣,主要探討這些產(chǎn)品在可視化編程領(lǐng)域的技術(shù)探索進(jìn)展到了什么地步,對(duì)于傳統(tǒng)技術(shù)生態(tài)的改造有哪些貢獻(xiàn),因此只在國內(nèi)外產(chǎn)品中各選出一例進(jìn)行討論。
Mendix 一直被視為可視化開發(fā)領(lǐng)域的標(biāo)桿產(chǎn)品,也是全球頂級(jí)的 Paas 提供商。雖然它的核心邏輯是早已不被看好的 UML,但不可否認(rèn),它確實(shí)在這條路上走出了一些新意,告訴我們可視化開發(fā)也可以做很多事情。
首先,Mendix 是一款目標(biāo)非常明確的產(chǎn)品,它要解決的核心痛點(diǎn)就是可重復(fù)開發(fā)。而它解決問題的核心思路是建立可視化模型,通過建立模型之間的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)應(yīng)用模型的搭建。采用模型解釋方法取代代碼生成方法,一鍵部署和運(yùn)行,而不需要再編輯、編譯和運(yùn)行。
在擴(kuò)展性方面,Mendix 使用 Java 語言編寫 Java action,擴(kuò)充 micorflow 來使用定制代碼,解決復(fù)雜業(yè)務(wù)問題;如果有更復(fù)雜業(yè)務(wù),還可以使用提供的 DSLs 來調(diào)用。
同時(shí),Mendix 提供了一套完善的基礎(chǔ)開發(fā)框架,允許使用敏捷方法來應(yīng)用工具進(jìn)行模型開發(fā),最小模型為領(lǐng)域模型和 GUI 模型,services 和外部數(shù)據(jù)源等。
可以看到,針對(duì)可視化開發(fā)可能存在的功能性、開源、安全性、開發(fā)效率等問題,Mendix 至少都提供了一些解決方案。我們目前還無法完整評(píng)估這種解決方案是否高效,但至少在應(yīng)用層面已經(jīng)完全夠用。從 Mendix 官網(wǎng)所提供的應(yīng)用實(shí)例來看,可視化工具已經(jīng)在某些開發(fā)領(lǐng)域體現(xiàn)出它相對(duì)于傳統(tǒng)編程的優(yōu)越性。
我們選擇 iVX 作為國內(nèi)可視化開發(fā)平臺(tái)的代表,是因?yàn)樗钦娴男?,在很多方面讓人耳目一新。來,讓我們康康,iVX 的首頁一上來就號(hào)稱它重構(gòu)了一套可視化開發(fā)語言,Emmm,感覺有點(diǎn)暴躁,它是否真的能做到呢?
首先 iVX 告訴我們,“可視化編程”并不一定意味著“拖放”。iVX 完全摒棄了被人詬病的塊拼接模式,通過對(duì)象樹方式來定義對(duì)象結(jié)構(gòu),通過事件面板的方式來定義對(duì)象間的交互邏輯和數(shù)據(jù)邏輯。
可以說,iVX 在進(jìn)行編程邏輯可視化的基礎(chǔ)上,很好地保留了了原生的開發(fā)邏輯。例如,在事件這部分不是通過逐一為每個(gè)對(duì)象添加響應(yīng)條件的方式來進(jìn)行,而視采用條件、循環(huán)、動(dòng)作、回調(diào)模塊互相組合的方式來做,所有事件都被集成在一個(gè)面板里,一目了然。
而尤其值得表揚(yáng)的是它的 IDE,采用不同的顏色區(qū)分各種對(duì)象和事件模塊,并支持對(duì)所有對(duì)象、數(shù)據(jù)和事件的搜索,能夠添加備注,感覺有點(diǎn)厲害。
在開源性和擴(kuò)展性方面,iVX 支持接入 API 和 JS 代碼。同時(shí)非常有意思的是,他們還搞了一個(gè)叫小模塊的東西,允許用戶把自己開發(fā)的一部分東西抽象成一個(gè)組件,在可復(fù)用性方面還是挺有創(chuàng)意的。
我們還看到,iVX 采用了前后端分離的數(shù)據(jù)架構(gòu),這無疑是處于對(duì)數(shù)據(jù)的并發(fā)性能和安全性的考慮。在同類應(yīng)用當(dāng)中這是一個(gè)比較具有前瞻性的布局,但是表現(xiàn)如何,還有待測(cè)試。
雖然說重新定義編程語言這事兒還不好說,但是 iVX 這款產(chǎn)品在很多方面都提出了一些具有創(chuàng)造性的解決方案,已經(jīng)足以讓人感到眼前一亮。它至少重新定義了一種新的零代碼開發(fā)模式,幫助企業(yè)做一些建站、開發(fā)一些 OA 應(yīng)用啥的,應(yīng)該不在話下。
基于上面的描述,我們可以看出,目前很多可視化開發(fā)工具確實(shí)在技術(shù)領(lǐng)域取得了一些突破。核心發(fā)展的方向主要是兩個(gè),一種在于為特定問題或場(chǎng)景提供解決方案,如 Mendix 專注于可重復(fù)開發(fā),國內(nèi)一些云平臺(tái)專注于為企業(yè)提供快速開發(fā)模組。另外還有一些工具則試圖構(gòu)建一款底層開發(fā)工具,提供一種全局性的開發(fā)思路,這個(gè)路無疑比較困難,但是他們也取得了不少進(jìn)展。從目前已經(jīng)商業(yè)化了的幾款工具來看,工具功能已經(jīng)發(fā)展到了可以勝任各類 WEB 應(yīng)用、OA 應(yīng)用甚至構(gòu)建一些平臺(tái)的水準(zhǔn),也已經(jīng)建立了基本成熟的 aPaas 平臺(tái)的運(yùn)營模式,有一些大企業(yè)入駐并體會(huì)到了可視化開發(fā)帶來的便利。
盡管可視化開發(fā)工具并非一無是處,但它的問題也非常明顯,距離真正重構(gòu)技術(shù)生態(tài)還有著漫長的距離。例如在大企業(yè)最為看中的安全性和標(biāo)準(zhǔn)化問題方面,既有工具都還不能提供完美的解決方案。而對(duì)于上下游資源的運(yùn)營和新生技術(shù)生態(tài)的建構(gòu),也尚顯幼稚。
可視化編程盡管在發(fā)展過程中經(jīng)歷了一些挫折,但近年來所取得的成就也應(yīng)該受到關(guān)注。盡管開發(fā)人員對(duì)于代碼的親近和工具的抵觸心理幾乎是無法解除的魔咒,類似于一種精神潔癖。但是如果一款工具足夠完善,勢(shì)必能在技術(shù)層面撼動(dòng)這種固有成見。而當(dāng)更多的開發(fā)人員嘗試使用可視化工具,并積極在這一領(lǐng)域探索,可以預(yù)見,未來可視化編程不僅能參與底層的應(yīng)用架構(gòu),還將幫助我們?cè)诟邔哟紊蠈?duì)事物進(jìn)行建模。
聯(lián)系客服