前天,知名外包公司Thoughtworks針對(duì)低代碼發(fā)表了一篇《聊聊低代碼》村斟,從VB等“托拉拽”技術(shù)的覆滅開始講起贫导,將低代碼定義為一種領(lǐng)域特定語(yǔ)言,代表程序員關(guān)上了低代碼的大門蟆盹。
從文章中我讀到了知乎上非常流行的味道孩灯,即互聯(lián)網(wǎng)==軟件,一個(gè)技術(shù)用來(lái)開發(fā)大數(shù)據(jù)量逾滥、高用戶體驗(yàn)的互聯(lián)網(wǎng)服務(wù)時(shí)不好用峰档,那么他就干啥啥不行了。作為一名入行十幾年匣距,一直在使用Visual Studio+.NET+WinForm/WPF,“托拉拽”搞企業(yè)軟件開發(fā)的老程序員哎壳,我也有幾句話說(shuō)毅待。
托拉拽已死?
Thoughtworks:就例如大家最熟悉的VB(Visual Basic)归榕,現(xiàn)在回頭來(lái)看不就是一個(gè)典型的試圖通過(guò)組件的托拉拽加少量代碼的方式實(shí)現(xiàn)應(yīng)用的快速構(gòu)建的“低代碼平臺(tái)”么尸红?而又怎么會(huì)漸出了歷史舞臺(tái)?難道只是簡(jiǎn)單的CS架構(gòu)問(wèn)題么刹泄?話說(shuō)想想BS架構(gòu)下類似的工具也有不少外里,最后也都難逃同樣的命運(yùn)……
這句話的潛臺(tái)詞是“VB/WinForm/WPF/Silverlight等可視化界面設(shè)計(jì)方案都失敗了,所以這條路行不通”特石。我認(rèn)為盅蝗,這句話得加一個(gè)限定,即“互聯(lián)網(wǎng)領(lǐng)域”姆蘸。
這些技術(shù)在toC端確實(shí)已經(jīng)不再流行墩莫,但是toB領(lǐng)域依然是主流。用友U8 CS門戶就是用WinForm做的逞敷,U8 BS門戶基于Silverlight開發(fā)的狂秦,今天依然是用戶最多的ERP軟件;.NET和.NET Compact+WinForm做的各類數(shù)采和執(zhí)行控制軟件依然是工廠生產(chǎn)線的主力推捐。為什么裂问?因?yàn)榭梢暬夹g(shù)的本質(zhì)是代碼自動(dòng)生成技術(shù),也就是將用戶托拉拽的行為翻譯成代碼(不只是C#、Java這種可執(zhí)行代碼堪簿,更常見的是XML和Json等描述性語(yǔ)言)痊乾。相比于手工優(yōu)化后的代碼,可視化技術(shù)自動(dòng)生成的代碼在性能上確實(shí)有一定的差距戴甩。在性能要求高的互聯(lián)網(wǎng)領(lǐng)域符喝,這種方案確實(shí)遭遇了很大的挑戰(zhàn);但是甜孤,在硬件性能趨于過(guò)剩的企業(yè)服務(wù)器領(lǐng)域协饲,這種性能損失完全可以接受。
所以缴川,在企業(yè)服務(wù)領(lǐng)域茉稠,可視化界面設(shè)計(jì)方案并沒(méi)有失敗,只是技術(shù)平臺(tái)的升級(jí)把夸,讓那些為Windows桌面程序而线、Silverlight插件設(shè)計(jì)的可視化開發(fā)方案顯得落后罷了。進(jìn)入Web+多終端時(shí)代恋日,企業(yè)服務(wù)領(lǐng)域需要的是新一代可視化技術(shù)膀篮,從產(chǎn)出Windows桌面程序,切換到產(chǎn)出純H5的Web應(yīng)用岂膳,而不是徹底退回到和互聯(lián)網(wǎng)一樣的純手工編碼誓竿。
低代碼和可視化并不能提升效率?
Thoughtworks:這種平臺(tái)往往Demo看起來(lái)非常的酷炫和有沖擊力谈截,但是一旦真正應(yīng)用到實(shí)際工作過(guò)程中就會(huì)出現(xiàn)各種問(wèn)題:開發(fā)效率不升反降筷屡,平臺(tái)學(xué)習(xí)成本高,程序員學(xué)習(xí)動(dòng)力不強(qiáng)簸喂,功能受限毙死,感覺(jué)束手束腳,調(diào)試難測(cè)試更難喻鳄,數(shù)據(jù)不開放扼倘,平臺(tái)與工具綁定,性能問(wèn)題等等……
即便有腳手架(類似ASP.NET MVC)寫代碼的開發(fā)和維護(hù)投入也比托拉拽要高很多除呵,因?yàn)殚_發(fā)環(huán)節(jié)中唉锌,除了敲下代碼,還需要涉及內(nèi)部Review竿奏、自測(cè)袄简、自查、調(diào)試以及接手他人代碼的學(xué)習(xí)過(guò)程泛啸,可視化在這些領(lǐng)域都能體現(xiàn)出更強(qiáng)的效率優(yōu)勢(shì)绿语。具體到可視化帶來(lái)的影響,我的經(jīng)驗(yàn)是.NET WinForm的界面構(gòu)建速度比VC++大約高2-3倍;客戶反饋用低代碼做后端WebAPI比Spring Boot快2-3倍吕粹,前端快1-2倍的樣子种柑。當(dāng)然我接觸的項(xiàng)目都是企業(yè)軟件,業(yè)務(wù)邏輯和數(shù)據(jù)處理復(fù)雜度高匹耕,性能和界面精細(xì)度要求低聚请。
低代碼基于特定領(lǐng)域語(yǔ)言?
Thoughtworks:所以一個(gè)低代碼平臺(tái)的關(guān)鍵成敗稳其,作為解釋器(Interpreter)的花里胡哨的工具其實(shí)并不是關(guān)鍵驶赏;低代碼平臺(tái)關(guān)注解決的問(wèn)題領(lǐng)域(軟件開發(fā),軟件設(shè)計(jì)既鞠,應(yīng)用開發(fā)煤傍、數(shù)據(jù)庫(kù)操作、系統(tǒng)集成嘱蛋、中臺(tái)能力組合編排…)蚯姆,以及是否能通過(guò)“抽象”和“約束”為這個(gè)領(lǐng)域設(shè)計(jì)出一套好的DSL(或是元模型),才是關(guān)鍵洒敏,也直接關(guān)乎平臺(tái)的成敗龄恋。
在討論DSL的可視化帶來(lái)的各種限制之前,按照知乎慣例凶伙,我們得先問(wèn)“低代碼是不是基于DSL”郭毕。
我認(rèn)為,低代碼镊靴,尤其是模型驅(qū)動(dòng)的低代碼平臺(tái)铣卡,本質(zhì)是高級(jí)語(yǔ)言的可視化方案链韭,而不是發(fā)明了另一種面向特定領(lǐng)域的語(yǔ)言偏竟。比如outsystems的process、mendix的microflow敞峭、活字格的命令踊谋,本質(zhì)上都是在前端或后端執(zhí)行的function,在前端表現(xiàn)為mvvm中的command旋讹,后端表現(xiàn)為webapi殖蚕。在這里面,可視化的操作元素對(duì)應(yīng)的是C#沉迹、JS的語(yǔ)句睦疫,并不是發(fā)明了一個(gè)新的語(yǔ)言,在抽象程度上沒(méi)有本質(zhì)差異鞭呕,不過(guò)考慮到研發(fā)成本投入和市場(chǎng)定位蛤育,目前在功能實(shí)現(xiàn)上優(yōu)先覆蓋企業(yè)軟件中涉及到的應(yīng)用場(chǎng)景,如語(yǔ)言層面的輸出輸出參數(shù)、流程控制(順序瓦糕、選擇底洗、循環(huán))、異常處理咕娄、調(diào)用亥揖、返回等,以及應(yīng)用底層的數(shù)據(jù)訪問(wèn)(CRUD)圣勒、事務(wù)控制费变、日志,和更高層次的文件操作灾而、WebAPI/RFC/Modbus調(diào)用等胡控。
這就意味著,至少在企業(yè)服務(wù)這個(gè)大的領(lǐng)域中旁趟,低代碼的約束性和應(yīng)用場(chǎng)景和高級(jí)語(yǔ)言開發(fā)一致昼激。具體而言,后端不存在寫代碼可以實(shí)現(xiàn)锡搜,而低代碼的可視化無(wú)法實(shí)現(xiàn)的業(yè)務(wù)功能橙困。在前端,低代碼開發(fā)平臺(tái)的前端設(shè)計(jì)能力和編碼開發(fā)確實(shí)存在一定差距耕餐,即便是行業(yè)top的outsystems凡傅,也有一些交互的限制。不過(guò)肠缔,企業(yè)軟件重后端輕前端的特點(diǎn)夏跷,讓這些問(wèn)題在后端開發(fā)的高效率面前,都變得可以妥協(xié)明未。
開發(fā)工具的生產(chǎn)力沒(méi)有差異槽华?
Thoughtworks:低代碼平臺(tái)的工具部分,往往最大的價(jià)值并不是提高程序員的效率趟妥,反而是為了實(shí)現(xiàn)對(duì)于業(yè)務(wù)人員的自助(Self-Service)服務(wù)平臺(tái)猫态。
從低代碼概念的提出者Forrester到對(duì)低代碼進(jìn)行細(xì)分的Gartner,行業(yè)主流研究機(jī)構(gòu)都將專業(yè)開發(fā)者視作低代碼技術(shù)的主要用戶群體披摄。Forrester在低代碼的相關(guān)報(bào)告中亲雪,將“面向?qū)I(yè)開發(fā)者的低代碼平臺(tái)”作為重要分類;Gartner在低代碼的定義中明確指出僅提供給業(yè)務(wù)人員使用疚膊,而無(wú)法提供給專業(yè)開發(fā)者使用的不能稱之為低代碼開發(fā)平臺(tái)义辕。
軟件==互聯(lián)網(wǎng)?
最后我想說(shuō)寓盗,低代碼技術(shù)的本質(zhì)依然是軟件開發(fā)技術(shù)灌砖,軟件開發(fā)者無(wú)法忽視這個(gè)技術(shù)的存在夺巩。在追求極限性能、極致用戶體驗(yàn)的互聯(lián)網(wǎng)開發(fā)者看來(lái)周崭,WinForm柳譬、Cordova、Blazor以及這回的低代碼都無(wú)法滿足開發(fā)者對(duì)最優(yōu)化的追求续镇。但是美澳,我們也得看到,在面向企業(yè)服務(wù)的領(lǐng)域中摸航,這些技術(shù)憑借著“節(jié)省開發(fā)成本”的一招鮮制跟,壓過(guò)了各自的不足和限制,正在大量的團(tuán)隊(duì)中服役酱虎。
軟件開發(fā)沒(méi)有銀彈雨膨,互聯(lián)網(wǎng)的砒霜也許就是企業(yè)軟件的蜜糖。
所以读串,如果你從事的是企業(yè)軟件開發(fā)聊记,請(qǐng)一定認(rèn)清咱們所在的這個(gè)行業(yè)與“互聯(lián)網(wǎng)”的差異。當(dāng)看到什么“35歲失業(yè)”恢暖、“低代碼已死”等話題的時(shí)候排监,多琢磨琢磨。