別再壘代碼了

別再壘代碼了

(圖為中國工程院院士倪光南)

引言:

根據倪光南院士 11 月 17 日在“飛算全自動軟件工程平台發佈會”上的演講中介紹,我國的軟件和信息服務業總量世界第二,2019 年達到 7 萬多億元人民幣。從規模上來看,我們的軟件人才在世界上僅次於美國,2019 年我國軟件從業人員為 673 萬人,在世界上僅次於美國。每年中國畢業生的數量世界第一,其中大量都是軟件人才,這些使得我國軟件從業人員可以很快地達到世界第一。

倪院士同時指出,“儘管軟件行業增速很快,但我們仍未很好解決某些方面受制於人的問題,特別是一些基礎軟件,還有短板。例如操作系統、工業軟件等基礎軟件對外依存度大。” 

具體到軟件開發自身的問題,“迄今為止,軟件行業作業方式落後,過度依賴人工,而這樣的依賴,會造成四個很明顯的痛點:項目成本高、開發週期長、代碼質量低、團隊管理難。”

針對上面這些痛點,飛算科技提出了很好的解決方案,正在研製的“全自動軟件工程平台”為解決軟件工程的這些痛點,提供了科學實踐的基礎,對複雜的軟件工程開發提供了可靠和可行的工具,在各行各業進行產業互聯網和數字化轉型的時期,具有不可估量的意義。

本文回顧了從雲計算產業在國內落地以來,所經歷的企業上雲的歷程,以及技術推動下微服務和低代碼運動的興起,以及我國像飛算全自動軟件工程平台這樣的自主軟件品牌,所做的創新和實踐。

別再壘代碼了

(圖為國際歐亞科學院院士、國際歐亞科學院中國中心副主席張景安)

2008 年,王堅在阿里戰略會議上算了一筆賬。2007 年淘寶成交額是 600 億,什麼時候能做到 1 萬億,以及到 1 萬億時需要花多少錢?

大家估算是 2012 年破萬億,如果按照淘寶客單價 100 塊,那麼 1 萬億除以 100 塊,每年就有 100 億的交易量,每件商品需要 n 次搜索+瀏覽+圖片,然後再折算成需要購買多少 EMC 的存儲、多少 Oracle 的數據庫,以及多少台 IBM 的機器。算下來,等到達到 1 萬億那一年,每一年都要付給這三家公司總共 200 億元。

即使付了 200 億,也不一定能支持,全世界還沒有人做到過這個規模。

算完這個,馬雲當即就表示,即使當了褲子,也要把阿里雲做出來。在場所有的人都支持。

2009 年王堅開始做阿里雲。到 2014 年,已經做到了前 5 名。阿里雲做起來之後,自己用當然不夠划算,需要鼓動客户來用,這樣就可以分攤掉成本。

先開始是親戚用,比如支付寶用阿里雲。然後一些建站的小客户用。2015 年,趕上了一些大客户,比如快的對滴滴的大戰,然後是新浪微博,這些互聯網客户體量非常大,互聯網用雲也是剛需,是上雲的第一波。 

但互聯網公司本身技術能力強,忠誠度低,傳統企業上雲,成了兵家必爭之地。

數字化轉型

傳統企業上雲,首先得完成數字化轉型。

所有的企業做數字化轉型,除了要去把以前的數據做歸攏以外,更多的是想什麼?打開互聯網,用互聯網的流量進來,不管是零售業還是製造業,不管線上線下都想這麼玩。通過數字化轉型+雲,永遠在線,這樣就能持續帶來客户,降低獲客成本。 

但是阿里賣的是雲。怎麼數字化轉型,涉及各行各業太複雜,如果一定要找阿里,阿里一般會把這種單子分包給它的集成商。這個集成商就是大大小小的軟件開發企業。據艾瑞諮詢《中國軟件開發行業研究報告》,2019 年,中國這樣的軟件開發企業超過了 4 萬家。

軟件開發企業分為兩類。一類是跟機器打交道的,比如做遊戲、做驅動、做電路設計、做嵌入式;另外一類是跟業務打交道的,主要就是企業信息化和數字化相關的軟件,企業內部最典型的就是 ERP ,企業外部最典型的就是電商網站或者客户服務系統。 

涉及數字化轉型的,主要是後一類跟業務打交道的。 

業務的特點就是計劃趕不上變化,需求迭代超過了傳統軟件開發自身的迭代速度。時間就是金錢,企業對軟件開發的敏捷性需求是無止境的。

最後一公里

然而,這些軟件開發企業其實自己就存在“數字化轉型”的問題。因為寫代碼這個事情,看起來很高深,充滿着創造性,其實是個手藝活。 

就像寫文章是一千個人就有一千種寫法,寫代碼也是一樣的。 

編程語言是用來定義算法和數據結構的,主要的對象是計算機。然後由編譯程序編譯成計算機可理解的二進制碼。所以定義一種編程語言,核心就是編譯器。

隨着系統越來越複雜,大部分的系統都很難一個人完成,需要團隊一起完成,而且需要持續的迭代。寫代碼這門手藝,就變成了一項軟件工程,如何協調多人也就變成了軟件管理。 

軟件工程的一代宗師邁克爾·傑克遜(Michael A. Jackson,不是那位歌壇巨星),《程序設計原理》的作者,曾哀嘆軟件行業普遍缺乏專業性,充滿了業餘人員,“手中有個錘子,看到什麼都是釘子”,誰都可以開發性命攸關的軟件。 

人們經常會比較軟件開發生產率和硬件製造生產率。後者在 20 年內至少翻了 1000 倍,從勞動密集型的裝配車間,到自動化的流水線工業。而前者仍然是手工作坊。

著名的《人月神話》一書中,闡釋了軟件系統的複雜性。在規模上,軟件實體可能比任何由人類創造的其他實體更復雜,至少在語句的級別上,沒有任何部分是相同的。如果有相同的情況,我們就會把它合併成供調用的子函數。在這個方面,軟件系統與電腦、建築或者汽車都大不相同,後者往往存在大量重複的部分。 

目前大部分的系統都是多人開發,先拆成不同的模塊分散開發,然後再合併代碼,這時候也會導致非常多的問題。這麼多人寫出來的東西,質量到底怎麼樣,可以打個大大的問號。

除了複雜性,軟件開發中最根本的任務是構建在規格説明、需求設計之上的複雜概念結構,次要任務才是使用編程語言來表達這個抽象實體。這和數學和物理學完全不同,數學家和物理學家可以為複雜的現象建立簡化的模型,並通過試驗來驗證。因為這些模型中忽略的複雜度,不是被研究對象的根本屬性。軟件則恰恰相反,複雜度是本質特性,不能被忽略。 

由於軟件的複雜度,造成了很多軟件開發的經典問題。團隊之間的溝通非常困難,導致了產品瑕疵、進度延遲、成本超支;列舉可能的狀態變得十分困難,影響了軟件產品的可靠性;由於函數的複雜性,造成了程序難以閲讀和使用;由於結構的複雜,造成很多安全機制狀態上的不可見性。 

系統越來越複雜,代碼越來越看不懂,還有很多管理上的噩夢。

比如,怎麼適應客户需求的瞬息萬變,如何管理不同層級的開發人員,離職了怎麼交接,諸此種種難題,成了企業數字化轉型的“最後一公里”。

低代碼和微服務 

為了解決軟件開發的經典難題,計算機科學家在不懈努力。主要的理論就是用有力的工具來輔助人工勞動,提高勞動生產率,改善工作質量,由此產生了 CASE(Computer-Aided Software Engineering),即計算機輔助軟件工程。 

最簡單的工具,比如產生圖表的自動圖形工具。在 Excel 裏就提供這樣的工具,不用編程,拖拽鼠標就能完成複雜的圖表。 

低代碼(low-code)成為新的流行語,本質上就是希望結合可視化開發技術和代碼生成來減少手動編碼,以此來加快應用程序交付。事實上,軟件工程的整個歷史都是關於提高抽象層次的。

低代碼可以追溯到模型驅動工程。1991 年,在著名的 CAiSE 會議的第 1 版中,可以找到這樣的論文:“給定最終模型,可以自生成完整的計算機化信息系統”。 

像 Google 的 AppMaker ,微軟的 PowerApps ,都是新一代的低代碼軟件開發平台。

2020 年 10 月 19 日,在加拿大的蒙特利爾,舉辦了第一屆低代碼研討會。會議是 ACM / IEEE 舉辦的 MODELS 2020 的一部分。

除了低代碼,還有一個浪潮就是微服務(Microservices)。因為大部分的軟件都已經在雲上,2005 年,Peter Rodgers 博士首先提出了 Micro-Web-Service 的概念,核心想法是讓服務由類似 Unix 管道的訪問方式使用,複雜的服務背後是使用簡單的 URI 來開放接口。 

2014 年,微服務的概念形成。微服務就是單一應用程序構成的小服務,服務依照業務功能設計,以全自動的方式部署,與其他服務使用 HTTP API 通信。服務也具備最小的規模集中管理能力(例如 Docker),服務可以用不同的編程語言與數據庫等組件實現。

雖然聽起來簡單,但是實現微服務體系結構非常困難。目前最流行的有兩個框架,一個是 Netflix 開放了一個 Java 平台的開源框架,叫 Spring;另外一個是 Google 設計並捐贈給 Linux 基金會的 K8s 。 

Spring 下,又有一個有名的 Spring Boot ,可以輕鬆創建獨立的、生產級別的,基於 Spring 的應用程序,並且運行它們。它和著名的虛擬化軟件 VMware 背後是同一家公司。

從人治到法治

2016 年,陳定瑋手下有 150 位工程師,給銀行、金融這樣的大客户做軟件開發。當時,微服務正在興起,陳定瑋卻經歷着各種陣痛。

陳定瑋的經歷頗為傳奇。他之前是台灣特種部隊海豹隊隊員,那時候的台灣青年都有服兵役的義務。他因此經歷過魔鬼式的一年訓練和兩年的軍隊緊急任務的考驗。 

大家都叫他 Peter ,陳定瑋是 1978 年生人,在他後來讀書的時候,電腦其實蠻貴的。所以開發軟件的時候,會想盡辦法去節省資源,比如把內存分區分片,讓程序變得更優化,追求軟件的最佳實踐,要盡善盡美。

2016 年,各類業務需求不斷,人員不斷新增,項目經常趕工。

因為趕工,業務需求實現大多沒有編寫設計方案文檔,只能靠人工點檢代碼;跟業務的溝通成本高,開發人員理解需求不到位就直接寫代碼,導致常常要返工。團隊成員技術能力參差不齊,代碼質量也就無法保證。 

項目管理成本高,人員離職,新人接手維護時間成本高。總的來説,Peter 要在 4 個象限來回折騰。 

一是技術,要負責頂層設計(選型、架構、性能),技術迭代、運維;二是人力,要做管理、溝通、招聘,還要考慮知識經驗的累積;三是基礎建設,包括軟件,例如開發工具的選擇,硬件的投入;四是質量與安全,軟件既需要穩定,也需要安全,防止信息泄露、黑客攻擊。

到了 2016 年底,Peter 開始反思軟件工程體系管理問題,在長達一年的時間裏,白天也不能影響工作,之前在深夜 12 點到凌晨 5、6 點,犧牲掉睡覺時間,他開啓了飛算全自動軟件工程平台研發的征程。 

辦公室裏擺了一張小牀,累了就在這裏睡覺。在項目初期有一年多的時間裏,80% 的時間都回不了家,導致妻子幾次提出要離婚。 

陳定瑋和團隊一做就是 4 年。目標非常宏大而直接,就是實現“全自動軟件工程平台”,實現“你輸入流程圖,我實現自動開發、自動測試、自我運維”,告別代碼,用標準化的流程操作,用托拉拽的方式實現開發。 

讓軟件工程行業的作業方式從“人治”變成“法治”,並針對行業痛點逐一擊破,實現“降低項目成本、提升開發效率、保證代碼質量、簡化團隊管理”。

研發過程中,Peter 也一直在尋找是否有合適的對標產品,這樣可以不用重複造輪子。但是他發現大部分的低代碼工具都是更偏向於前端開發,而不是後端微服務的領域。

這樣造成了這些工具一般只能完成固定類型的工作場景,比如做客户關係管理軟件(CMS),或者項目管理系統,或者問卷調查,簡易收集數據。 

還有一類通過可視化工具為業務系統建模,產生業務描述文件,通過解析器直接解析業務描述文件運行。但做不到封裝成組件,只能算作低代碼,並不能完全實現零代碼。 

最開始的時候,團隊對這個項目是非常明顯的牴觸的態度,因為這個項目的研發的結果就是“代碼消失”,而“代碼消失”,則等於取代了他們一部分的工作。 

最開始的時候 Peter 只能單打獨鬥,大家都不理解,只能不斷地做思想工作,告訴他們不要沉浸下反覆的敲代碼當中,做個低價值的“碼農”,而是要幹掉自己,從敲代碼的工作中解脱出來,去思考更高層面的事情。 

其實有的時候,説敲代碼也談不上,因為網上可以搜到各種各樣的開源代碼。遇到一些小功能模塊,拷貝黏貼變成了常態。

用開源代碼是把雙刃劍。它節省了開發成本,卻使得開發人員得以偷懶,知其然不知其所以然。

這樣造成幾個影響,一是連 CTO 也搞不清究竟有多少代碼是自己團隊開發人員寫的,有多少又是開源來的,造成了軟件的知識產權問題;二是開源代碼一開始可以運行,但是遇到大併發這種情況,系統是否扛得住;三是代碼的安全問題,比如是否有SQL注入等問題。

對於需要高併發、穩定、安全的企業應用,比如銀行信息安全要求高的客户,系統崩潰將會是大的災難。而軟件開發企業,一旦因為代碼質量管控能力不夠,失去這樣的客户,對公司將是聲譽的大災難。

想要解決這些問題,只能從根本出發,徹底消滅掉代碼,不僅要做到前端,而且還要做到後端的微服務開發,箇中的難度,只有一次次的實踐,保持初心,堅持不懈。

別再壘代碼了

(圖為格力電器董事長兼總裁董明珠)

飛算全自動軟件工程平台

2017 年 - 2020 年,飛算全自動軟件工程平台在不斷的迭代,確定解決方案。

其中有幾個重要的里程碑,0.8 版本上線時,完成一個創新產品,並落地實施。0.9 版本上線時,功能更加完善,易用性大幅提升。1.0 版本上線時,全面提升了軟件工程能力與實踐,開始打造可信的高質量產品。

飛算全自動軟件工程平台的核心技術之一就是把流程圖編譯成微服務。開發的過程變得超級簡單,就是把業務畫成流程圖就行了。 

誰對流程圖最熟?業務人員。軟件開發的生產力工具,迴歸到了真正的需求者。對於大部分的要求前端和後端的軟件需求,代碼消失了。除了遊戲、驅動程序這樣和底層機器打交道的,只要是 Java 能做的應用系統,都可以通過飛算全自動軟件工程平台來實現。因為飛算全自動軟件工程平台本身是用 Java 來開發。

其實 Python 也可以,飛算全自動軟件工程平台有個組件的概念,編程語言被隱藏在組件下面。有多少組件,就能做多少應用。 

用流程圖設計之後,飛算全自動軟件工程平台自動生成項目部署包+執行服務包,可執行文件是基於 Spring Boot 的可執行 JAR 包,客户下載項目部署包+執行服務包,放到服務端部署即可,與原來的方式一模一樣。

流程圖設計直接就在瀏覽器裏面完成,不能搭建開發環境,連上網,打開瀏覽器,就可以開發軟件。

軟件開發過程,從人治變成法治。系統越複雜,軟件開發的成本降低越明顯。而且再也沒有代碼泄露的風險了。

四年鑄一劍。2020 年 11 月 17 日,飛算全自動軟件工程平台在北京國家會議中心正式發佈。Peter 玩了一個更酷的挑戰,就是在發佈會現場做一個現場挑戰賽,邀請一個 IT 團隊用傳統作業方式,來 PK 飛算全自動軟件工程平台,從實戰中體現及驗證產品價值。而且這個挑戰賽還要繼續懸賞“百萬獎金”,一直襬下擂台。 

這種極限挑戰,也許已經根植在這位前海豹隊隊員的骨髓中。

別再壘代碼了

(圖為陳定瑋在飛算全自動軟件工程平台發佈會上)

對話飛算陳定瑋 

AI 科技評論:目前飛算全自動軟件工程平台,在後端的微服務開發上,已經實現了 100% 的零代碼?

陳定瑋:是的。用户也不用關注微服務,平台自動提供內建的微服務能力。穩定性比用户自己使用微服務框架要高。不需要用户深入研究微服務框架的學習,以及出現各類問題難以定位及解決的窘境。 

AI 科技評論:如果有更復雜的系統,飛算全自動軟件工程平台也能實現全自動開發嗎? 

陳定瑋:對於更復雜的需求,比如複雜的 SQL 查詢,這些都可以做成組件。組件的豐富程度,決定對需求的包容和擴展性。但系統開發者也不可能考慮到所有的需求,所以有了組件的“眾創平台”的設計。像知識圖譜這樣的AI技術,就可以做成組件。未來的設想是,組件可以交易,人人為我,我為人人。  

AI 科技評論:目前已經有客户在使用飛算全自動軟件工程平台了嗎?

陳定瑋:大概有十幾家客户已經在試用,而且客户反饋降本增效非常明顯。飛算的質量體系根據阿里公約,相當於用自動化開發實現阿里P6、P7的開發能力。同時也實現了等保和國密的要求。

AI 科技評論:飛算全自動軟件工程平台,軟件工程包含比較廣,比如軟件開發、軟件測試、軟件運維,目前飛算全自動軟件工程平台實現到了什麼程度?

陳定瑋:飛算全自動軟件工程平台並沒有改變軟件工程的體系,還是需求、開發、測試、上線、運維。

目前主要實現的還是軟件開發的後端環節。目前自動化測試和自動化運維功能基本都已經實現了 50% ,接下來,會加入前端的自動化開發。

以前是開發需要 3 個月,測試就需要 3 個月,測試這部分的時間可以大大縮短,因為開發問題自動化了,bug 率就大大降低了。自動化運維則大大節省了人力,目前我們後台有 6000 台虛機,只需要 3 個人就可以輪班管理。

AI 科技評論:飛算全自動軟件工程平台的目標客户是誰?

陳定瑋:其實誰都可以用,像智能投顧這類公司,甚至沒有工程師,也能玩轉軟件開發。有了想法,先做出來,不斷驗證,這就是互聯網的思維。 

但最迫切的還是中小型軟件公司,我所謂的中小型軟件公司指的是註冊資金小於 1 億的企業。 

對於這樣的公司,比如要養一個 25 人的互聯網技術開發團隊,每年都花 400 萬到 500 萬的人力成本。而且需要不斷的和客户改需求,甚至駐場開發。通過飛算全自動軟件工程平台,企業的降本增效是驚人的。 

AI 科技評論:那飛算全自動軟件工程平台本身怎麼贏利呢? 

陳定瑋:目前設想的主要是按照工具的 SAAS 收費模式。客户自己配置好雲服務器可訪問的 IP 或域名即可。我們沒有提供雲服務器這部份的服務。

雷鋒網雷鋒網雷鋒網

版權聲明:本文源自 網絡, 於,由 楠木軒 整理發佈,共 7135 字。

轉載請註明: 別再壘代碼了 - 楠木軒