零代碼時(shí)代即將到來?沒那么簡(jiǎn)單
“零代碼”概念如今變得越來越流行。
“零代碼”意味著,無需專業(yè)的軟件知識(shí),你也能輕松規(guī)劃一個(gè)商業(yè)邏輯或者開發(fā)一個(gè)應(yīng)用程序。
這當(dāng)然是一個(gè)好的趨勢(shì),而且,市場(chǎng)上已經(jīng)出現(xiàn)了一些優(yōu)秀的“零代碼”工具。
所以,“零代碼”時(shí)代真的要到來了嘛?沒那么簡(jiǎn)單!
為什么要“零代碼”?
“零代碼”的優(yōu)勢(shì)很明顯。培養(yǎng)一個(gè)軟件開發(fā)人員的成本很高,人才稀缺,而且一般的軟件開發(fā)人員資歷尚淺,再加上運(yùn)維成本很高,軟件項(xiàng)目的開發(fā)也就困難重重。
一個(gè)“數(shù)字化企業(yè)”需要大量的軟件,而且絕大部分都是量身定制的,無法實(shí)現(xiàn)量產(chǎn)。于是,整個(gè)市場(chǎng)對(duì)軟件的需求量是十分大的。
如果有一種全新的方式可以取代開發(fā)大量軟件的過程而同樣實(shí)現(xiàn)產(chǎn)業(yè)數(shù)字化,何嘗不是一種重大的突破呢?然而,萬事開頭難。
將整個(gè)商業(yè)流程數(shù)字化有以下兩個(gè)明顯的好處:
整個(gè)項(xiàng)目的更新迭代將由軟件完成從而節(jié)省了人力成本。發(fā)布一個(gè)新的軟件明顯比重新修改流程和培訓(xùn)工人輕松得多。創(chuàng)新使企業(yè)在競(jìng)爭(zhēng)同行中脫穎而出。當(dāng)所有企業(yè)的想法都一致時(shí),整個(gè)行業(yè)的服務(wù)會(huì)變得單一而平庸。這對(duì)一些企業(yè)來說不算什么壞消息,但消費(fèi)者可不一定會(huì)喜歡。
然而,許多企業(yè)的數(shù)字化轉(zhuǎn)型都以失敗告終。因?yàn)橐獙?shí)現(xiàn)這一質(zhì)的飛躍,一般企業(yè)先得轉(zhuǎn)型成為至少半個(gè)軟件開發(fā)公司,當(dāng)然,大多數(shù)企業(yè)并不具備這樣的條件。只要擁有足夠的資源(時(shí)間,資金,人員),開發(fā)軟件并非一件難事,但人們大都善于表達(dá)各種奇思妙想而缺乏把這些想法落實(shí)到位的能力。
“零代碼”解決了什么問題?
編寫代碼不僅是數(shù)字化轉(zhuǎn)型的關(guān)鍵也是其制約。因?yàn)榇a通常不是那么好些的,于是,簡(jiǎn)化代碼或者實(shí)現(xiàn)“零代碼”的意義是巨大的。
簡(jiǎn)言之,用規(guī)范的程序語言語法來編寫和實(shí)現(xiàn)商業(yè)邏輯是一件枯燥乏味的事情。就像會(huì)開車的人只需掌握簡(jiǎn)單易操作的駕駛技巧而無需知道發(fā)動(dòng)機(jī)如何工作一樣,代碼界也需要這樣的運(yùn)作模式以實(shí)現(xiàn)軟件開發(fā)的普適化。
不幸的是,這個(gè)問題已經(jīng)被仔細(xì)研究過很長(zhǎng)時(shí)間了,卻沒有被很好地解決。
抽象語言具體化
然而,代碼的抽象性往往決定了它很難被簡(jiǎn)化。程序員一般都力求代碼具體化以保證其簡(jiǎn)單易懂。
復(fù)雜代碼簡(jiǎn)單化
考慮到主要矛盾是編寫文本的復(fù)雜性,人們嘗試著開發(fā)了許多圖形化編程語言。例如Scratch(麻省理工學(xué)院的“終身幼兒園團(tuán)隊(duì)”開發(fā)的圖形化編程工具,主要面對(duì)青少年),只需稍做改變就可以實(shí)現(xiàn)不同邏輯。
然而,魚與熊掌不可兼得。簡(jiǎn)單易操作的語法架構(gòu)通常難以實(shí)現(xiàn)復(fù)雜場(chǎng)景的邏輯,反之亦然,一些領(lǐng)域特定語言(DSLs)又因其強(qiáng)針對(duì)性而難以推廣到其他領(lǐng)域。
用配置取代代碼
許多“零代碼”擁護(hù)者通過使用Zapier這樣的工具將不同的應(yīng)用程序整合集成在一起來使事情變得簡(jiǎn)單。
然而,這么做會(huì)有兩個(gè)缺陷:
第一,邏輯被分散到不同的應(yīng)用程序中從而使反向推理變得困難。
第二,也是更重要的一點(diǎn),邏輯由不同應(yīng)用程序的配置而非編寫某種具體代碼實(shí)現(xiàn)會(huì)使得其性能表現(xiàn)受制于這些應(yīng)用程序的水平。于是,程序員經(jīng)常面臨這樣的困境:我們是信任外部系統(tǒng)并在其中投入大量的配置工作,還是嘗試自己處理更多的代碼邏輯?
邏輯不會(huì)消失。因此將其嵌入到Zapier規(guī)則的布線中并不能減輕任何維護(hù)和測(cè)試的負(fù)擔(dān)。
代碼的等價(jià)性
軟件開發(fā)人員仍然使用純文本的編程語言是有原因的,主要是為了提高工作效率和流程的簡(jiǎn)潔性。毫無疑問,如果有很多更好的工具出現(xiàn),軟件開發(fā)人員會(huì)像扔燙手的山芋一樣放棄文本。
然而,不同的邏輯表示方式并不意味者邏輯本身的簡(jiǎn)化,就像“2”和“two”來表達(dá)“兩個(gè)”的性質(zhì)一樣。當(dāng)然,實(shí)現(xiàn)商業(yè)邏輯的方式還有很多種。
也就是說,在可視化開發(fā)環(huán)境中的這個(gè)過程:
可以完全等同于:
def process_email(self, address): if not self.validate_email(address): raise InvalidDataException(_("Address is not valid")) self.store(address)第一種方法要求開發(fā)人員熟悉圖形化的工作界面,第二種方法要求熟悉文本形式的編程語言,兩種方法都需要開發(fā)人員理解邏輯的內(nèi)在關(guān)聯(lián),而且都簡(jiǎn)單易學(xué)。
為了更好地理解軟件,開發(fā)人員通常需要在腦海里建模仿真,預(yù)測(cè)其在不同工作環(huán)境下的反應(yīng)。
這和許多人在使用現(xiàn)代數(shù)字化設(shè)備時(shí)遇到麻煩的原因完全一樣,所謂“VCR”問題就是指因?yàn)橛布妮斎氚粹o很少,但內(nèi)部工作非常復(fù)雜,因此用戶需要在腦海中保留設(shè)備內(nèi)部狀態(tài)的高級(jí)模型。
這聽起來有點(diǎn)不大現(xiàn)實(shí),因?yàn)檎铡靶闹抢碚摗眮碚f,貌似只有懂技術(shù)或者擅長(zhǎng)編程的人才會(huì)買數(shù)字化設(shè)備,而一般人想要用這些設(shè)備要先經(jīng)過專業(yè)的訓(xùn)練。從這個(gè)層面上來講,編程語言是文本或是圖形化的都無所謂。
“零代碼”不是一個(gè)好的趨勢(shì)嗎?
毫無疑問,“零代碼”是一個(gè)好的趨勢(shì)。
縱觀歷史,我們發(fā)現(xiàn),計(jì)算機(jī)編程語言的發(fā)展仍道阻且長(zhǎng)。
因此,我們?nèi)匀粦?yīng)該嘗試改善我們的語言和環(huán)境。考慮以下兩段代碼
#include <string.h>#include <stdlib.h>char *add_domain_name(char *source) {const size_t size = 1024;char *dest = malloc(size+1);strncpy(dest, source, size);strncat(dest, "@example.com", size);return dest;}
和這個(gè):
function add_domain_name(username: string): string {return username + "@example.com";}第一個(gè)是段C語言代碼,第二個(gè)是TypeScript代碼。事實(shí)上,這兩種語言的語法大致都相同,但是TypeScript比C更好用,因?yàn)殚_發(fā)人員無需擔(dān)心內(nèi)存分配或者字符串的編碼特性之類的事情。
事實(shí)上,對(duì)于一個(gè)足夠完備的應(yīng)用程序,其商業(yè)邏輯是十分強(qiáng)大的,以至于實(shí)現(xiàn)其的不同編程語言之間的差異可以忽略不計(jì)。顯然,編程語言的發(fā)展并沒有取得很大的進(jìn)步。
“零代碼”面臨的困難
眼下,已經(jīng)有一些很優(yōu)秀的”零代碼”平臺(tái)出現(xiàn),例如被譽(yù)為“軟件終結(jié)者”的Salesforce Cloud,它可以實(shí)現(xiàn)編程、基礎(chǔ)規(guī)則設(shè)定和配置的可視化。
項(xiàng)目通常以“原型”開始,以表明平臺(tái)可以做到這一點(diǎn)。這些內(nèi)容匯總起來很快,大致可以完成項(xiàng)目的80%。遺憾的是,成功并不能一蹴而就正如程序員所知:細(xì)節(jié)決定成敗。
當(dāng)平臺(tái)無法實(shí)現(xiàn)一些功能時(shí),開發(fā)人員通常需要自己構(gòu)建詳盡的解決辦法,有時(shí)候也許根本無法解決。比如,我曾經(jīng)使用平臺(tái)搭建過一個(gè)自動(dòng)響應(yīng)電子郵件的程序,但是這個(gè)程序無法配置在檢測(cè)垃圾郵件的程序后面,也無法檢測(cè)到SMTP郵件,因此,它是不能用的。
即使平臺(tái)可以自動(dòng)修復(fù)Bug并順利的實(shí)現(xiàn)邏輯,你仍然會(huì)遇到困難。例如,改善邏輯。
通常的代碼程序需要改進(jìn)時(shí),開發(fā)人員會(huì)編寫一段代碼,然后把它部署到一個(gè)獨(dú)立的環(huán)境中進(jìn)行測(cè)試,測(cè)試成功之后在將其部署到整個(gè)商業(yè)邏輯的代碼中,或者,直接把它部署到整體代碼中然后在一步步調(diào)試,由此提高了應(yīng)用程序的容錯(cuò)性并把對(duì)用戶的影響降到最小。
而“零代碼”增強(qiáng)了程序的專有性,因?yàn)椋銕缀醪荒馨淹粋€(gè)更改從一個(gè)項(xiàng)目準(zhǔn)確的復(fù)制粘貼到另一個(gè)項(xiàng)目。即使Salesfoce提供了相關(guān)功能,“零代碼”的這種缺點(diǎn)依然很明顯。
“零代碼”的優(yōu)勢(shì)
弄清楚軟件需求是件很重要的事。而“零代碼”平臺(tái)善于融合不同的軟件,這些軟件的價(jià)值會(huì)隨著融合而不斷彰顯。
“零代碼”平臺(tái)作為非IT系統(tǒng),不僅能讓終端用戶親身參與到軟件設(shè)計(jì)的過程中還可以及時(shí)收集到用戶反饋。即使所謂靈活的傳統(tǒng)開發(fā)團(tuán)隊(duì),也很少能做到讓終端用戶參與其中。于是“零代碼”平臺(tái)的這一優(yōu)勢(shì)不言而喻。
還有很多本質(zhì)上非“零代碼”系統(tǒng)的平臺(tái),但是用戶也能在其中發(fā)揮其主觀能動(dòng)性。例如我的最愛Looker(商業(yè)智能軟件和大數(shù)據(jù)分析平),和一些類似的平臺(tái)。有趣的是,在這些平臺(tái)中開發(fā)的模型大都是利用普通的軟件開發(fā)工具以純文本的形式出現(xiàn)的,這或許就是它們成功的秘訣。
結(jié)論
用“零代碼”平臺(tái)代替主流的軟件開發(fā)工具迄今仍然是夢(mèng)想。縱觀過去70年的發(fā)展,沒有任何跡象表明這一夢(mèng)想會(huì)很快被實(shí)現(xiàn)。
當(dāng)然,各種“零代碼”平臺(tái)的出現(xiàn)并非沒有價(jià)值,但必須謹(jǐn)慎對(duì)待。它并非是軟件開發(fā)的靈丹妙藥,而且有可能使事情變得更糟。
原文來自:大數(shù)據(jù)文摘