談一談自動編程

這裏所說的自動編程,是運用人工智能技術來自動生成程序,儘可能免除人類勞動。編程

在自動產生程序以前,先要知道需求是什麼吧?要能把需求準確地描述給機器,這就須要一種需求描述語言。假如咱們製造了這種需求描述語言,它進一步發展,愈加規範,成爲了一種DSL(領域特定語言)。嗯,這就變成了DSL編程。框架

假如要生成一個應用程序,要選擇一些開發框架、中間件和技術方案吧?人類開發時要考慮開發成本和效益的權衡,可是機器既然已懂得多種技術方案,對它來講開發成本爲0,那麼選擇最好的那一個技術方案就好了。這就至關於存在一套最好(也可能最複雜)的框架,用DSL在框架之上編程。機器學習

鬧了半天就是DSL和框架啊?智能到哪去了?學習

要想真正發揮人工智能的做用,我有兩個思路:編碼

  1. 自動提問
    就算有了需求描述語言,人類就能準確描述需求嗎?若是描述得很差,機器可否經過一些分析,針對不足之處,向人類提問,用答案來完善需求描述呢?
  2. 自主學習
    人工智能的精髓是自主學習。若是機器能學習世界上現有的代碼,不須要人類特地爲它提供需求描述語言和技術方案,就方便多了。最好是人類直接說需求,機器本身思考,有問題就提問。

有一個有趣的事——最初的自動編程是什麼呢?當編譯器技術剛發明時,它就是自動編程:自動把高級語言代碼轉化成彙編碼或機器碼。人工智能

我我的認爲,凡是能給人類省事的技術,哪怕是if-else,也能夠算是某種人工智能。中間件

如今要求高了,編譯器是硬編碼的智能,而咱們還要可擴展、甚至自動擴展的智能。如今的自動編程主要有兩個流派:基於規則推理的、基於機器學習的(包括統計學習、深度學習等)。學術界對自動編程有一個更特別的說法——程序合成(Program Synthesis)。遞歸

因爲機器學習的火爆,比較流行的彷佛是基於機器學習(+深度學習)的自動編程,其中一種是經過學習輸入輸出數據的樣本,自動「猜」出一個能處理這些數據的程序。開發

對此,摘錄馬毅教授的一條微博:數學告訴咱們,不管overfit了多大的樣本數據,經驗事實如何震撼,也取代不了邏輯嚴格的推理證實——這是惟一能將結論從有限樣本擴展到無限的方法。編譯器

例如一個遞歸程序,只有數學概括法能準確生成它,任何有限樣本都沒法準確生成它(只能近似猜想)。對於有一點小bug就能出大事的程序,不能鬆懈啊。

所以我不是很同意基於機器學習的自動編程,即便要用,也只是輔助手段吧。啊哈哈~

相關文章
相關標籤/搜索