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