不久前我寫了漢澳sinox無人工廠,引起很大反響,東莞開始有工廠實施無人工廠計劃,取代工人。雖然目前即使開發(fā)無人工廠也可能只是0.1版本,然后有1.0,2.0,無人工廠不斷升級版本,當然跟預想中的漢澳sinox無人工廠還有很大距離,但是畢竟提出了概念,并指明了方向,無人工廠技術研究很可能在中國引發(fā)新的工業(yè)革命。也為中國制造業(yè)指明了出路,不用擔心產業(yè)轉移等讓中國喪失世界工廠的地位,無人工廠技術和資金投入會越來越多,保持中國制造業(yè)領先地位還是有可能的。
我有時在想,無人技術發(fā)展很快,比如無人機技術已經很成熟,最近無人駕駛也開始實用,無人工廠如果技術也成熟了,那么下一步發(fā)展的無人技術是什么?無人是指不需要人,完全自動化操控的技術,不是沒有人。作為程序員,我很懶,我希望很多簡單重復的工作不需要人去做,直接自動化編程就好,比如軟件代工,沒什么技術含量,總是由編碼工人做重復工作,而不熟練的程序員還做不了,如果用機器來做,其實應該是軟件來做,就不需要重復工作的編碼工人了。軟件設計不需要機器生產,只是腦力勞動,所以也沒有無人編程工廠,應該是無人編程軟件,用軟件生產軟件,只是高智慧的軟件生產普通應用程序。無人編程工具,應該叫自動化編程系統(tǒng),還是需要人輸入需求的,否則軟件不知道生產什么。需求千變萬化,不像工廠生產的固定產品,軟件生產需要面對復雜的應用程序生成,估計開發(fā)難度會比無人工廠大很多,甚至不可能。不過我覺得既然提出了無人編程,即使只是感念,也要把它完善,也許幾十年以后無人編程會變成現實。
一旦無人編程技術成熟,程序員,這個最富智慧和腦力的職業(yè),也要面臨消失的可能。程序員將會繼產業(yè)工人之后走向失業(yè)。而很多普通的工作比如理發(fā),護理,打雜等,都可能由機器人完成,這個可能比較容易,要是能取代程序員,那么估計沒有什么工作不可以由無人機器或者軟件替代。這將是非常可怕,這樣還需要什么工作呢?大家都失業(yè)在家,讓機器人、智能軟件接管世界?開發(fā)機器人可以由無人工廠完成,而開發(fā)機器人軟件則由無人編程軟件完成,最后只有開發(fā)無人編程軟件的人員不失業(yè)。開發(fā)無人編程工具的人是誰?應該是各專業(yè)的頂尖科學家。
只有頂尖科學家可以工作,其他人都失業(yè),成為類似原始部落社會的人,不用做事。這個扯遠了,不過程序員應該是最后一批失業(yè)的產業(yè)工人。
好,現在已經知道有無人編程這個軟件了,那么這個軟件是怎么實現呢?說實話,這個軟件現在技術還不成熟,我們只能探討各種可能,并找到開發(fā)方法。
.net類庫的優(yōu)勢
我用過匯編。c/c++,java,perl,php等各種編程語言和工具,直到我用了C#.net,才知道編程真的越來越容易了,匯編不用說了,用機器語言寫程序,難。c語言,好些了,不過每個函數功能自己寫,累。vc好點,但是mfc寫界面還是很難,而且很多算法要自己實現,或者抄襲別人寫的類。java更好點。而腳本語言perl.php等怎么說呢?管理系統(tǒng)和做網頁是適合,但是做界面是很難的。最后出現了偉大的.net,很多功能函數,數據結構,算法都由.net類庫分門別類實現好了,比如要把“1,2,3,4,5”字符串按逗號分開,用split函數就好了,以前見vb有這個函數,覺得很方便,但是c/c++是沒有的,現在C#就特別方便了,直接用split就好。所以.net類庫非常方便用戶編程,而且界面控件也很方便實現,甚至web網頁程序也可以用控件實現。.net讓程序員開發(fā)速度快了好多倍。只可惜.net不能跨平臺,windows貴且不好用,所以被抵制。java現在也開發(fā)了很多類庫,跨平臺很好,所以被unix/linux世界推崇。
.net類庫讓人類開發(fā)能力上了一個檔次,雖然面對各種多樣復雜的計算,還是需要設計數據結構和邏輯算法,但是大部分基礎功能還是可以由.net類庫實現了。
能不能把.net類庫提升到一個檔次?開發(fā)更多的函數功能應該是可能的。但是也不可能包羅萬象,把所有計算都包含進去,比如新加坡總理李顯龍寫的數獨求解算法,把算法加入類庫,普通程序員就可以開發(fā)九宮這種數獨游戲。不過數獨算法應該找到源代碼,這樣不需要加入.net類庫也可以引用。
又比如開發(fā)3d游戲,雖然可以直接用directx渲染引擎庫,但是要實現游戲功能還不是簡單調用api就可以,所以又有3D游戲引擎,把更多的函數功能封裝成游戲調用接口,但是引擎接口也是很復雜的,熟悉引擎還要花時間,更不要說調用引擎完成游戲場景開發(fā),而游戲數據結構設計,比如靜態(tài)場景物體和動態(tài)物體,通關邏輯設計,對話等,內容非常復雜,不是會寫程序就能解決的。我們能不能把游戲引擎再次加入.net類庫,讓.net類庫功能無所不包呢。完全可能,只是這個是.net要做呢,還是屬于開發(fā)人員引入的引擎類庫?如果.net類庫無所不包,不過也不可能解決所有的問題,如果有上百萬個類,用戶又怎么知道怎么使用呢?
用框架自動生成基礎代碼
.net類庫無所不包,但是用戶怎么用呢?我們開發(fā)3d游戲首先要用的是directx(簡稱dx)顯示引擎,在此基礎上再使用Unity3D游戲引擎,然后才可以設計數據結構和邏輯算法,現在Unity3D是在dx引擎之上更高一級的引擎,可見需要層層調用引擎。.net類庫–>dx–>Unity3D–>游戲,要開發(fā)游戲要調用3層引擎,我們稱為框架,基礎代碼,這些框架讓我們節(jié)省大量工作,如果沒有這些框架,開發(fā)一個游戲幾乎是難以上青天。現在開發(fā)者只要集中在游戲邏輯設計以及圖像設計就可以了,省去了底層編碼。編程自動化就要首先調用框架,然后集中在邏輯設計,從而大大簡化無人編程工具的開發(fā)。
我們寫程序也是這樣,是在操作系統(tǒng)這個框架平臺上開發(fā),否則從開發(fā)操作系統(tǒng)開始,設計程序簡直是不可能。
我們設計幾萬個最佳的框架,放入無人編程工具里面,根據需要調用框架,從而實現編程自動化。數獨最優(yōu)解法也可以加入框架,屬于數學類框架,供上層調用。
用腳本語言實現自動代碼生成
有了框架基礎代碼,我們設計應用程序就集中在數據結構和邏輯算法設計,根據用戶的數據結構和邏輯算法自動生成源代碼。比如我們說的元語言編程,通過定義元語言,用腳本自動生成代碼。我們可以用shell,perl,python等腳本語言自動生成代碼,可以輸入元語言腳本,自動生成某種語言的源代碼。比如說要生成登錄程序,會根據用戶定義生成賬戶的注冊,修改,刪除,登錄,驗證碼等包含數據庫操作和界面交互的源代碼,不再需要普通程序員編寫代碼了。腳本的定義和解釋都是由用戶寫的腳本決定,可以根據需要修改腳本。這個方法可以生成大部分代碼,只是靈活性不是很高,可能滿足比較固定的應用程序代碼生成。
用lisp等高級語言實現自動代碼生成
lisp是表處理語言,擁有xml,元語言,模版等特征,可以用來生成新的應用程序代碼,不過代碼生成都用lisp實現,一旦改動,是不是也要修改lisp程序,跟腳本生成差別不是很大,不過對某些程序生成可能有用。比如cad用lisp腳本生成三維模型,也許在涉及開發(fā)制圖程序,可能lisp很有用。比如很多模型可以用lisp保存。
現在已經有一些代碼生成器軟件,可以通過向導方式生成源代碼。
用模版實現自動代碼生成
我們開發(fā)大同小異的網頁程序,為了滿足個性化的界面輸出,大量使用模版功能。在無人編程工具里面,我們是不是可以引入模版,從而滿足大同小異的多樣化應用程序生成需要。我們編程語言也引入了模版,也稱為泛型,泛類型,開發(fā)程序用《T》代表任何類型數據,這樣寫程序調用會有統(tǒng)一的接口,不管這個類型是整數,實數還是字符串,使用的時候指定T的類型就可以。
我們開發(fā)自動代碼生成也可以用模版,比如指定數據庫字段的名字和類型,就可以自動生成數據表字段,以及操作數據庫的類,界面操作的類。而界面顏色用了模版,用戶指定了某種顏色,就在生成的代碼中產生指定的顏色,而不是固定死,對于動態(tài)生成顏色的代碼可能沒用。模版可能適合生成某些比較固定的模式。
用大數據云計算實現自動代碼生成
我看到語音識別系統(tǒng)存入數百萬個語音片段,而表情識別系統(tǒng)則有幾百萬個表情存入數據庫,可見自動代碼生成可能存入數百萬個代碼片段,然后有數百萬個分門別類好的功能函數,大量的數據結構,大量的邏輯算法,甚至是邏輯算法生成模型。比如生成1到1萬的素數和,就要調用循環(huán)代碼,素數判斷函數,累加幾個功能,顯然用大數據,模版等技術,生成1到1萬的素數和代碼是完全可能的。
更復雜的,游戲設計,設計背景物體,怪物,玩家數據結構設計,物體出現、運動、死亡的邏輯,要完全自動生成,需要開發(fā)人員定義很多元數據,而且可能還不夠,需要設計獨有的算法,只是編寫代碼是不需要了。應用程序復雜多樣,可能自動生成工具也不是那么簡單能實現,不過像教學類的,比如出題考試,無非是建立題庫,出題邏輯算法,答案比較和分數生成,最難的是作文計分,這個智能程度很高,開發(fā)自動生成工具需要熟練的了解相關專業(yè),然后可以生成一萬個考題應用程序,甚至考題系統(tǒng)也能智能化,這個程序本身就能應付一萬種考題系統(tǒng),那么自動生成考題系統(tǒng)可能就不需要了。
綜合多種技術人工智能自動生成代碼
大數據可能還不能滿足代碼生成需要,可能還需要各種代碼生成模型,我們說這是更高一級的代碼生成人工智能,人工智能將應用上面提到的各種程序生成技術和手段,甚至自我學習能力,完成自動代碼生成。人工智能的神經網絡,深度學習技術,可能對代碼生成很有幫助。
開發(fā)sepl自動編程工具
既然提出了編程自動化,我覺得sepl不應該只是滿足于作為一個編程語言和集成開發(fā)工具,而是一個更高一級的無人編程工具。sepl無人編程工具擁有數百萬個代碼片段,數十萬個框架,數十萬個代碼生成模型,大量的模版,用戶只需要定義應用程序生成條件,就可以做到一鍵生成應用程序。這樣就不再需要程序員,而只是需要需求分析員,程序代碼自動生成。
新一代程序界面將智能動態(tài)輸出界面,從而實現圖形界面開發(fā)自動化
在多層邏輯實現的程序設計中,比如游戲,后臺服務器端可能都差不多,游戲邏輯也接近,只是反映在界面上,個性化界面,導致界面設計很復雜,如果界面是靜態(tài)的,那么幾億個用戶,涉及界面設計,自動生成很難實現人性化界面。不過如果我們采用動態(tài)界面輸出技術,系統(tǒng)根據個人喜好輸出界面,就不再需要面對無數的個性化界面設計。動態(tài)的界面會根據個人喜好調整界面輸出。這樣自動化代碼生成面臨的復雜個性化界面輸出就解決了,而后端邏輯設計,代碼自動生成就變得容易了。
自動代碼測試讓程序合格出廠
生成的代碼是否合格可用,如果用人去檢查測試,也是很麻煩的。系統(tǒng)推出自動代碼測試,生成源代碼的時候也生成測試代碼,可以對程序進行全面的完整的自動化測試,合格的產品可以出廠了。
是噩夢還是光明?
自動代碼生成系統(tǒng)出來后,寫程序不再需要編碼,程序員自然不需要很多。當人們還在因為寫不好程序而困頓的時候,開發(fā)自動程序生成工具是不是早了一點。其實自動程序生成也不是不需要寫程序,而是寫一次程序,到處可以利用,不用重復寫程序了,比如數獨游戲一旦實現了自動生成,也許某個3d游戲需要數獨游戲,這個3d游戲就不需要重新寫數獨程序, 而是開發(fā)工具自動生成。
就像java編寫一次,到處運行一樣,無人編程是寫一次程序,到處可以使用,不需要寫第二次了。
無人編程工具出現,編程速度會非常快,一個人頂上100個程序員,中國原來需要500萬個程序員現在只需要5萬個,99%的程序員失業(yè)了。
即使最復雜的應用程序都能自動生成,機器人等單一程序是不是更容易?
現在sepl無人編程工具還需要像visual studio那樣到處散賣嗎?估計也沒有人買得起。