Saturday, June 29, 2013

visual programming的實作分類

縱觀visual programming的實作類型,大抵上就是三種分類

一種是connector-based,主要就是透過各種連接線把一塊一塊的運算單元(通常會被取名叫node)連結起來,connector可以做個別描述,也可以做型別判斷。實作的方式其實是偏向物件導向,或者也可以說是函式導向,而實作的方式也影響了使用者的學習曲線,那表示使用者多半也得熟悉物件或是函式的概念。這樣的工具我用過的在電子圈有labview/xilinx,資訊圈有quest3d/virtools/mindstorm nxt/udk、互動圈的max|msp/pd、設計圈有犀牛上的蚱蜢,或者像是Maya的材質球也是透過相同的概念而來,其實是一種偏向各個擊破法(divide & conquer)思考的形態,對於分歧或選擇這兩種邏輯的視覺化有其優勢,呈現資料流也相對清楚,但是在結構化呈現以及迴圈、scope之類的概念就比較難以表示。對於初學者來說,還是需要一點點數學與邏輯的基礎概念才行。

第二種是brick-based,透過類似積木堆疊的方式來寫程式,目前幾個標榜給初學者玩的像是mit的scratch/app inventor、berkeley的snap之類的都是這種。實作的方式是偏向指令式的,作法就是把每一個brick當成一道指令來對應,這種類型的作法對於分歧或選擇是非常難以描述得好的,但是對於迴圈則有很良好的視覺呈現,因為迴圈的起終點及條件是相當清楚的。初學容易,但是因為其對於選擇的弱點,稍微複雜的程式結構反而會變得更難寫。學習曲線短是因為使用者只要知道每個指令在做啥,而不需要理解處理或運算的邏輯,對於使用者而言比較不會有黑盒子的感覺。

第三種是rule-based,主要是透過if-then的條件來作為驅動,但是從系統的觀點,這種機制並不得以建立完整的架構,因為缺乏了組織化的結構,用這樣單純的機制,遇到了多重選擇或是迴圈,程式會比指令式還更難讀懂,通常僅能用作AI的輔助機制,或是在封閉系統裡做特定目的的運作,像同系嫡生的kidsim/viscuit/agentsheets,以及非常特殊的微軟的kodu,單就遊戲創作而言,我認為kodu真的是個傑作,當然以多用途程式來說,這種類型顯然就受限非常大了。而像little bit planet裡面的編輯機制,其實是rule-based的變形,而他所使用的rule,就不是概念上的邏輯,而是物理性質,所以可以做到不需要文字說明就能夠運作,也是我認為最直觀的系統。實作上相對簡單許多,就是大量的if結構,對應到每個圖形去就是了。

今天在寫我自己的系統,是一個visual programming的環境,剛好因為上面每一種都有實作過,突然就想要整理一下從實作觀點來看的心得。

在這三種機制之外,不知道還有沒有別的可能性呢....好希望還能夠繼續探索,可惜,似乎沒有這種機會了....

No comments: