談一談自動程式設計

2022-07-10 15:39:16 字數 1145 閱讀 2678

原文發表於2019-01-15。

這裡所說的自動程式設計,是運用人工智慧技術來自動生成程式,盡量免除人類勞動。

在自動產生程式之前,先要知道需求是什麼吧?要能把需求準確地描述給機器,這就需要一種需求描述語言。假如我們製造了這種需求描述語言,它進一步發展,越發規範,成為了一種dsl(領域特定語言)。嗯,這就變成了dsl程式設計。

假如要生成乙個應用程式,要選擇一些開發框架、中介軟體和技術方案吧?人類開發時要考慮開發成本和效益的權衡,但是機器既然已懂得多種技術方案,對它來說開發成本為0,那麼選擇最好的那乙個技術方案就行了。這就相當於存在一套最好(也可能最複雜)的框架,用dsl在框架之上程式設計。

鬧了半天就是dsl和框架啊?智慧型到哪去了?

要想真正發揮人工智慧的作用,我有兩個思路:

自動提問

就算有了需求描述語言,人類就能準確描述需求嗎?如果描述得不好,機器能否通過一些分析,針對不足之處,向人類提問,用答案來完善需求描述呢?

自主學習

人工智慧的精髓是自主學習。如果機器能學習世界上現有的**,不需要人類特意為它提供需求描述語言和技術方案,就方便多了。最好是人類直接說需求,機器自己思考,有問題就提問。

有乙個有趣的事——最初的自動程式設計是什麼呢?當編譯器技術剛發明時,它就是自動程式設計:自動把高階語言**轉化成彙編碼或機器碼。

我個人認為,凡是能給人類省事的技術,哪怕是if-else,也可以算是某種人工智慧。

現在要求高了,編譯器是硬編碼的智慧型,而我們還要可擴充套件、甚至自動擴充套件的智慧型。現在的自動程式設計主要有兩個流派:基於規則推理的、基於機器學習的(包括統計學習、深度學習等)。學術界對自動程式設計有乙個更特別的說法——程式合成(program synthesis)。

由於機器學習的火爆,比較流行的似乎是基於機器學習(+深度學習)的自動程式設計,其中一種是通過學習輸入輸出資料的樣本,自動「猜」出乙個能處理這些資料的程式。

對此,摘錄馬毅教授的一條微博:數學告訴我們,無論overfit了多大的樣本資料,經驗事實如何震撼,也取代不了邏輯嚴格的推理證明——這是唯一能將結論從有限樣本擴充套件到無限的方法。

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

因此我不是很贊成基於機器學習的自動程式設計,即使要用,也只是輔助手段吧。啊哈哈~

談一談自動程式設計

這裡所說的自動程式設計,是運用人工智慧技術來自動生成程式,盡量免除人類勞動。在自動產生程式之前,先要知道需求是什麼吧?要能把需求準確地描述給機器,這就需要一種需求描述語言。假如我們製造了這種需求描述語言,它進一步發展,越發規範,成為了一種dsl 領域特定語言 嗯,這就變成了dsl程式設計。假如要生成...

談一談教育

今晚和研究生的師兄聊了會天,突然就說到教育的問題,有點感想,就寫下來,算是我對中國教育的一點看法吧。毫無疑問,中國的教育體制存在不少問題。在高中的時候或許還不是那麼明顯 對比起大學來說 上了大學,我才看清了我們教育的一些弊端。我覺得,最大的弊端,在於價值觀的引導問題上。不知道大家有沒和我一樣覺得當今...

談一談裁員

資本寒冬,經濟不景氣,要保持公司運作,可能會涉及到裁員。另外,有些員工的價值觀已經與公司不符,再留用可能會影響團隊和公司的和諧,此時也可能會涉及到裁員。裁員,不是說想裁就能裁的,需要考慮幾個方面 為什麼要裁?是否可以不裁?裁員是否會影響業務程序?裁員是否會付出經濟代價 賠償 裁員是否會負一定的法律責...