標籤:

能不能設計出一個終極傻瓜編程軟體,讓普通人可以完美編程?

比如,通過這個終極傻瓜軟體,我們只需要用自己的母語,輸入邏輯準確,精簡的句子。
比如我們要設計一個自動駕駛的簡單程序,那麼輸入:遇到障礙&>躲開 速度超過100&>自動減速 等等······ 諸如此類,讓所有普通人通過母語輸入,完成程序的設計可行嗎?


然後你會發現,真正的難點不是你用什麼語言或者語句,而是你說的邏輯準確。

普通人根本意識不到自己的思考方式距離邏輯準確有多遠。



LZ,簡單一句 遇到障礙物-躲開 到了代碼里就是這麼個邏輯:

當直線行駛時行駛正前方50米處遇到寬100厘米以上或高15厘米以上的硬度大於x並且位於車輛中軸線偏左一側的物體時,檢測右後方,右方,右前方車道的車輛情況,如果右後方無車或有車但在3秒內無法以車頭碰到本車車尾,並且右方無車,並且右前方無車或有車但車速足夠快使得3秒內其車尾不會碰到本車車頭,並且它沒有在減速或減速足夠慢,那麼繼續判斷前方路面狀況,如果有積水,判斷水深,如果水太深則深度減速同時放棄變道,如果水深不足0.5厘米則將方向盤以每秒dm1度的速度向右打m1度,當車身位於右側車道兩線之間後以同樣速度打回,修正方向;如果有積雪或冰,則將方向盤以每秒dm2的速度向右打m2度,重複上述動作。如果右側車輛情況不符合上述條件,那麼檢測左後,左側,左前方車輛狀況【此處省略與上面操作相同方向相反的200字邏輯】。

你猜這段指令會碰到什麼問題?如果那個障礙物只是被風吹著在向右移動,那這段指令就死翹翹了。所以仍然要不斷往上加各種判斷條件來增強這段代碼的健壯性...

這還沒考慮是否有隔離帶,是否是跨實線行駛,變到右車道後發現是右轉only車道怎麼辦,兩邊車道車況都不允許變道怎麼辦,變道到一半有車加塞怎麼辦,也沒考慮當前車速(如果速度太快那這麼變道就掛了)…這些寫出來會比上面長N倍


以下是原答案...

純搬運...
——————————-
某日,老師在課堂上想考考學生們的智商,就問一個男孩: 「樹上有十隻鳥,開槍打死一隻,還剩幾隻?」
男孩反問:「是無聲手槍,還是其他沒有聲音的槍么?」
「不是.」
「槍聲有多大?」
「80~100分貝.」
「那就是說會震的耳朵疼?」
「是.」
「在這個城市裡打鳥犯不犯法?」
『不犯.」
「您確定那隻鳥真的被打死啦?」
「確定.」老師已經不耐煩了,」拜託,你告訴我還剩幾隻就行了,OK?」
「OK.鳥里有沒有聾子?」
「沒有.」
「有沒有鳥智力有問題,呆傻到聽到槍響不知道飛的?」
「沒有,智商都在200以上!」
「有沒有關在籠子里的?」
「沒有.」
「邊上還有沒有其他的樹,樹上還有沒有其他鳥?」
「沒有.」 「方圓十里呢?」 「就這麼一棵樹!」
「有沒有殘疾或餓的飛不動的鳥?」
「沒有,都身體倍棒.」
「算不算懷孕肚子里的小鳥?」
「都是公的.」
「都不可能懷孕?」
「………,決不可能.」
「打鳥的人眼裡有沒有花?保證是十隻?」
「沒有花,就十隻.」 老師腦門上的汗已經流下來了,
下課鈴響起,但男孩仍繼續問:「有沒有傻的不怕死的?」
「都怕死.」
「有沒有因為情侶被打中,自己留下來的?」
「笨蛋,之前不是說都是公的嘛!」
「**可不可以啊!」
「………….,性取向都很正常!」
「會不會一槍打死兩隻?」
「不會.」
「一槍打死三隻呢?」
「不會.」
「四隻呢?」
「更不會!」
「五隻呢?」
「絕對不會!!!」
「那六隻總有可能吧?」
「除非你他媽的是豬生的才有可能!一槍只能打死一隻!」
「…好吧,那麼所有的鳥都可以自由活動么?」
「完全可以.」
「它們受到驚嚇起飛時會不會驚慌失措而互相撞上?」
「不會,每隻鳥都裝有衛星導航系統,而且可以自動飛行.」
「恩,如果您的回答沒有騙人,」學生滿懷信心的回答,「打死的鳥要是掛在樹上沒掉下來,那麼就剩一隻,如果掉下來,就一隻不剩.」
老師推推眼鏡,強忍著要昏倒的感覺,顫抖地說道:「你可以去當程序員了……」


回家路上買一斤蘋果,如果看到賣西瓜的,買一個


input:買個西瓜回來
output:買了個生西瓜回來
i:買個甜的,哦,對了,同時別熟過頭(我真是想的周到啊),買回來
o:瓜ok,被宰了,花了100000塊
i:附加條件,買便宜點的,哦,不對,是要注意性價比(還好我聰明)!
o:計劃任務啟動:去非洲買,那裡性價比最高
i:媽蛋!再附加:就給我樓下幾家店挑了買,1公里以內(防止他說我樓下打穿可以到美國,我真厲害)!!
o:下個月西瓜最便宜,sleep(30天)
i:媽蛋,還是請個程序員吧


你這不是編程,這是人工智慧。

而且你舉的例子,邏輯根本不準確精簡,太模糊了。
——————————————————
什麼叫遇到?
——離障礙多遠算遇到?距離的參照是以障礙的左邊界還是右邊界還是最近距離還是重心位置?
——電腦憑什麼不把「遇到」一詞理解為「視線範圍內」?哪怕距離500米外的一座山?
——實際上電腦會把它當成兩個動詞,一個遇,一個到。OK,你的車子會先撞上東西,再開始躲。

什麼叫障礙?
——多高?多寬?什麼形狀?什麼材質?
——材質的硬度如何判斷?如何區分地上是一片葉子還是一個釘子?

什麼叫躲開?
——多少速度?多少轉角?哪個方向?閃避路線曲率多少?
——躲開任務如何判定它是否完成?距離障礙多遠算「已經躲開了」?

這些東西你不事先告訴電腦,它知道嗎?;你事先告訴電腦了,還叫編程嗎?那叫初始化操作吧。

——————————————————

你不說,電腦又如何知道速度是什麼速度?
是車子自己的絕對速度?還是車子和前車的相對速度?還是雨刷的擺動速度?
100又是什麼單位?公里每小時?公里每秒?長度單位米?時間單位毫秒?海拔?油量?
「自動」和「減速」都是動詞,你又如何保證電腦不把它理解為兩個獨立動作?
它會不會自己一邊使勁左右搖晃(自「動」),一邊減速?
速度的定義都不清楚,何為減速?減速度多少?減到多少為止?

——————————————————

不要覺得我吹毛求疵,我是想告訴你編程是幹嘛的,編程就是用來定義這些東西的。
語言?那是很小很小的小問題。


首先要肯定一點就是,你說的需求是可以實現的。

但是,很顯然你搞錯了編程是幹什麼的。

編程要解決的問題是告訴計算機什麼是遇到障礙,怎樣是躲開,怎麼去減速等等等等。

至於你說的這些邏輯,其實就是業務人員在出廠前調校的參數罷了,這個根本不是程序猿乾的事情。

比如說:
Cortana,一個小時後提醒我睡覺

這個不是編程,Cortana才是程序猿搞出來的東西。


任何語言的編程其實都是完成一個完整的邏輯,就像題主所說的遇到障礙拐彎,什麼時候拐?左拐右拐?最基本的是判斷車道,如何判斷。判斷好車道後是不是需要前後左右的感測器,按照中國左行的標準,向左方避讓會不會跑到逆行的車道?向右方避讓會不會撞到行人或圍欄?如果障礙物是運動物體,如何判斷他的軌跡?最後把穿回來的數據按照一定演算法變成汽車的指令,怎麼算。這些都是要編程人員的考慮。。。而不是計算機,計算機啥都不知道
________________________________電腦補充分割線____________________________
接下來還得跳回去,程序還得自己設一計套演算法從車底盤上的感測器傳回來的信息分析車道,從四周感測器傳來的信息分辨"行人""護欄""運動的小狗""運動的重型貨車"並在幾乎瞬間分析好結果傳給中控電腦,中控電腦用程序自己想出來的演算法瞬間計算出幾個轉向軌道模型並結合環境變數選出最好的方案瞬間通知電子轉向系統拐個彎

所有中間的複雜演算法都是電腦想出來的,那麼電腦一定有超凡的資料庫和超強的人工智慧,那這種黑科技都開發出來了我們還居然開車?

最後補充一張圖,和樓主的問題異曲同工

++++++++++++++++再次補充+++++++++++++++++++++++
其實題注想的這種東西也是存在的,比方說谷歌和MIT合作的(現已分手)APP INVENTOR項目,整個程序就是搭積木一樣設計出來的,普通人可以搭積木出來一個前端,然後用搭積木的方式連好後端,(只不過前面所說的把一切雞毛蒜皮小的可能性都考慮進去的邏輯還是得題主自己想.)一般更小的程序邏輯系統是能給你提前想好的......算是完成了題主要求的一半吧.但是越是這種只能傻瓜編程,能改變的變數越少,性能和功能一般都遠遠不如初級的語言在補充一下,現在略神奇的語言wolfarm基本能完成題主的一部分需求,只可惜不太支持中文


++++++++++++++++++++++++++++

哈哈哈哈!!!!!!!!!!

昨天我家停電,正好想著一個月沒出門了,趁此機會上城去看變形金剛,結果。。。
在小巴車上看到了這個問題。。。
然後我就趕緊招呼老司機停車趕了回家的車,忙活了一個晚上的成果。。
就是做出了符合樓主的終極傻瓜編程軟體

樓主,快來完美編程吧。。。

小水管不給力,先傳一段視頻,回來繼續傳,我要趕車上城去補上昨天沒看成的變形金剛了。。。。。
晚上見

。。。尼瑪,土豆審核你妹啊。。
頁面在此,審核不知要多久我先閃了。。。


更新:預覽圖

更新:你好,漢編
視頻封面你好,漢編視頻

看了視頻的思考題1:如何畫線呢?

更新:漢編二重奏。。。畫線
視頻封面漢編二重奏。。。視頻
更新:漢編二重奏--。。。畫線。。。下
視頻封面畫線下部分視頻

看了視頻的思考題2:如何畫矩形呢?


後續視頻小水管上傳中。。。。

P。S。

寫圖中紅色部分的時候。。。我想起一個冷笑話。。。

多年以後,有一個CIA間諜來中國偷到了火箭衛星程序源代碼
不過慌亂之中,他只拿到了最後一頁































基本不可能。
我們可以這麼考慮,產品狗是用戶,程序狗是將用戶需求轉變成機器能執行的編譯器。
然後再來看看:以程序狗接近人類智商的水平,都經常會誤解產品狗超越宇宙真理的需求,你還奢望什麼?


不能,因為最難的是需求,客戶也不知道他們想要什麼,和人說都說不清楚,怎麼給機器說呢?


當你把母語說的真正邏輯準確,表達簡練的時候,也就跟高級編程語言差不多了。

ps:其實你說的這種「軟體」現在就有,就是程序員本身。


我們還是談談中國隊進世界盃的事吧


我想了一下,目前只有採用雲編程才可以解決

流程如下
1.輸入需求
2.提交到雲進行編譯
3.雲的那一端是計算機系的大學生

不過速度可能會慢一些


樓主知道原型設計類軟體嗎?去用用吧,不需要編程基礎。用過你就知道要理解並執行出你說的「邏輯準確」,那這個軟體本身得需要一個高不可攀的人工智慧來支持。要麼軟體的理解能力逆天,要麼編程人員的編碼符合邏輯,兩者至少要滿足一個,顯然後者的要求低太多了。

在人工智慧勉強算得上入門的時代,做不到這個程度是一方面,商業化價值(看起來)不大但極其耗費精力和時間的項目,恐怕很難趕在人類移民火星之前能面向世界。
現在的人工智慧就是基於大數據分析,通過數據分析的結果來模擬人工智慧。現在人工智慧研究的主流方向很有可能就完全錯了,我是侯世達派的。數據會告訴你,Nokia 在2007年到2017年,直板Symbian 手機業務營收和利潤的增長率,但它算不出什麼時候會出現iPhone 。
別對近期內人工智慧領域抱有太大的期望。

而且在我看來,普通人不需要終極傻瓜式編程軟體,這是一個偽需求。普通人只需要越來越多的問題都有現成的解決方案就夠了。難道我要吃飯還得自己種田嗎?要種田我還得自己生產肥料?為什麼不直接買米,或者直接去飯店呢?


你說的,是不是outlook....


你不可能連規格書都不告訴電腦就指望它能猜出你的心思的。當你說出第一句規格的時候,就是在寫代碼了。當然,你會在所有有歧義的地方不斷收到警告,你可別嫌煩


這裡的答案好像沒有人學過編譯器,大家似乎只圍繞著邏輯說事。我可以說,用自然語言寫程序比用現在世面上的程序語言寫程序要更更難、以至於近乎不可能嗎?

在「語言」上的分類,自然語言是處於最千變萬化,表達能力最強大,同時也最難以摸索出統一的規律的一種語言。在這個基礎上,語言學家們才提出一個概念叫「形式語言」,即formal language,這是一種用精確的數學公式就能把一個語言中的語法表達清楚的語言。

形式語言的概念到了諾姆·喬姆斯基,就形成了一個新的理論(喬姆斯基譜系)。這個譜系把形式語言分成四種:
文法 語言 自動機 產生式規則
0-型 遞歸可枚舉語言 圖靈機 無限制
1-型 上下文相關語言 線性有界非確定圖靈機 αAβ -&> αγβ
2-型 上下文無關語言 非確定下推自動機 A -&> γ
3-型 正規語言 有限狀態自動機 A -&> aB A -&> a

這四種語言中,從上到下的語言是變得越來越容易用公式表達,但是表達能力也越來越弱。到了最後一種語言,已經變成最普通的正規語言了。

計算機編程語言是屬於2-型,即上下文無關語言(context-free grammar)。只有這種語言,才可以用我們現在研究出來的編譯器進行編譯,也只有用這種語言寫出來的代碼,才可以經過編譯器的解釋之後被電腦理解。

回到樓主的問題,如果你想用自然語言來編程,就像樓上說的,你的邏輯能力已經足夠強大,你已經可以用你強大的邏輯能力來寫出複雜的自然語言程序,但問題是,那個編譯器怎麼辦?這個編譯器必須理解自然語言中那種千變萬化的語法,而這個是我們現行的數學理論中還無法建立起來的體系。

樓上有人說,這是自然語言處理。實際上,自然語言處理現在所處的階段仍然是在用各種數學上的統計模型去理解自然語言的。這些統計模型到目前為止,已經相當複雜,可以比較準確地推算出自然語言中的很多任務,比如翻譯,歸類,等等。但是還不能保證100%正確。

所以我認為,用自然語言寫程序,你首先要用那個不是完全正確的自然語言處理機去把你的程序變成一個上下文無關語言(勢必要造成很多錯誤,還有損失很多細節),然後再用編譯器去編譯。

所以,我認為這不是邏輯的問題,而是以現行的數學理論,根本不可能做到。


最終極的計算機程序應該能夠自動準確地解析人類的問題並有效地解決。

Wolfram Language正在朝這個方向邁步。這是一個Knowledge-based Programming Language,大數據和雲計算讓這項基礎得以實現。通過構造一個能描述整個人類所認知的世界的龐大程序資料庫,以及無數的預置程序和演算法,人們可以非常高效的使用現有的數據和抽象化的函數獲取和處理龐大的數據,解決複雜的問題。通過自然語言處理還能讓它對簡單的人類語言進行解析,「理解」人類提出的問題。Wolfram|Alpha就是這項技術的產物。

Stephen Wolfram"s Introduction to the Wolfram Language

然而現今階段這項技術還遠遠達不到終極的要求,它還不具備自主學習和思考的能力,而且由於涉及的領域太大太多,很多細節上的功能還有待實現。另外,它的自然語言分析功能還不能做到準確無誤,人們很多時候還需要使用嚴謹的程序邏輯思維去表述問題,甚至對於複雜的問題還是擺脫不了編寫代碼的方式。

然而很有可能在未來這項技術能夠成熟,人工智慧在其中有效發揮作用。關於未來計算機的討論,請參閱Ray Kurzweil - The Singularity Is Near.


有可能,但是這寫出來不僅需要大量的經歷,而且很可能讓編程更加複雜。

舉一個例子:
遇到大物體。

好,程序假設大物體是當前車體積兩倍。。。

你說不對,我想讓 1.5 倍,這你要在程序里註明吧。
你要重新定義大

然後遇到,電腦自己設置的是方圓 2 公里。

題主說太大了,我要改成十米,
然後後面和上面的不要看。
只看以前方為中心 90 度的。
這裡你又要重新定義遇到。

這樣算下來。。。你還不如自己寫來的快。。。


推薦閱讀:

怎麼使用思維導圖?
如果硬碟能達到內存的速度,那操作系統的設計是否會有變化?
編程到底難在哪裡?

TAG:軟體 | 編程 |