Mitch Resnick於2012年11月在TED進行了〈Let's teach kids to code〉演說,許多人對其中的Scratch感到無比興趣,在這之前,Google亦發布過Blockly。坦白說,視覺化程式語言不是新鮮貨,然而或許會是程式語言未來發展的一個主力方向,也帶來了一些反思程式設計本質的機會。

預測程式語言的未來

在臺灣這個國家,經常時不時地就會出現一窩蜂的現象,某個東西有話題、好賣、紅了,就會一堆人開始盲從,直到把它玩爛為止,說穿了,就是沒有認真研究過市場需求和供給等方面,就唯恐落於人後地冒然從事。

各行各業都存在這種現象,程式開發界也不例外,Java紅了學Java,Ruby夯了拱Ruby,JavaScript翻身了就說:「其實我滿喜歡JavaScript的」,行動App紅了,就一堆人做著App發財夢,坊間一大堆補習班也樂得三個月就送出一班懷抱著夢想的學員。

當初就死啃著JavaScript這條鹹魚的人,或者被視為曲高和寡玩弄著函數式設計的開發者,就現今來說,活像撿了個大便宜,當初只是覺得這些東西有些道理,或許那時就認真分析這些道理,大膽預測現在發生的事,早就被當成半仙也說不一定。

在《松本行弘談程式世界的未來》這本書中,作者根據硬體價格不斷下降,而性能、容量、頻寬等不斷上升的趨勢,從程式語言的過去與現況,作了一些程式語言未來發展的預測,對嵌入式、平行運算、資料分析、主從架構等方向,各自提供直接支援,將會是未來程式語言可能的發展方向,

當然,預測未來不是為了成為半仙,若能像松本行弘這樣根據過去、現況以及客觀發展趨勢等事實,預測程式語言的未來,那麼開發者就有機會依各自興趣、個人生涯規畫下,作為各自能力累積的一個指引,而不是單純地期待選中一條鹹魚,然後期待它翻身,或者誤信那些為了推動背後更多商業利益的江湖郎中,莽莽撞撞地蜂湧投入,在破財耗時之餘,最後只得到一堆泡沫。

松本行弘也曾請學生們預測過程式語言的未來,學生們做出「能更簡單寫出程式的語言」、「能以自然語言對電腦下令」的預測,自然語言寫程式的未來想必還太遠,至於能更簡單寫出程式的語言這預測有點模糊,什麼樣是簡單?如果連孩子們都能使用的語言,是不是就算是簡單呢?

從小學程式設計的利器?

這兩年來,在科技大廠各巨頭與新聞媒體的推波助瀾下,興起了人人學程式設計的風潮,基於「XX應從小開始」的不敗口號,自然也不能放過讓孩子們從小學程式設計的可能性,相關產品中,最小年齡層甚至有五歲左右就可以開始使用,無論操控的實際硬體是什麼,為了讓孩子們編寫程式方便,大多搭配平板電腦或手機,然後使用積木圖像來代表各個程式設計語法,可使用拖拉方式來組合、建構程式。

在這類以積木圖像代表程式語法的視覺化語言中,最為人所知的就是Scratch,它甚至推出了更簡化的ScratchJr,五歲孩子就能使用的產品中,它就是其中之一,近兩年來,也迅速成了各教育單位推動從小學程式設計的利器。

Google亦發表過視覺化程式語言Blockly,同樣也是積木式建構語法,並主打著針對更高年齡層的學習者而設計,可轉換為JavaScript、Python、XML等語法。

此外,LEGO積木機器人從第一代RCX到現在的EV3,都可以搭配視覺化程式語言來編寫程式,因為直覺簡單,幾乎已成了各機器人營隊的首選配備。

在《Code Complete 2》中,提到:「生動的隱喻說明更廣泛的現象,而你可以運用它們提升自己對軟體開發過程的了解」,視覺化程式語言,實際上是一種圖像式的隱喻,突顯出軟體設計中組合與建構的過程,積木是孩子們自小就熟悉不過的玩具,積木式的圖像搭配觸控式螢幕,創造出目前最貼近孩子們生活中的經驗連結,不可否認地,這確實是有助於降低接觸程式設計的門檻與排斥,孩子們確實可在不知道的情況下,從事程式設計的動作。

實際上,視覺化程式語言並不是新東西,在〈Visual Programming Languages - Snapshots〉這篇文章中,Eric Hosick收集了幾十種視覺化程式語言的擷圖與相關鏈結,我實際在進行EV3設計的過程中,有個遙遠的記憶竟然慢慢清晰了起來,「這感覺活像以前在學校使用電子電路圖設計軟體,那些資料線(Data Wires)不就像是電路?這玩意兒不只是設計給孩子們使用的!」

適用特定領域的視覺化語言

當提及視覺化程式語言,就目前來說,都是被放在程式啟蒙教育上,當孩子們逐漸長大,而原有的積木語言不足以滿足設計需求時,就會轉而使用更複雜的語言,無論是更複雜的積木語言,或者是Python之類實務而主流的程式語言。

除了積木能表達的概念有限之外,圖像式的程式密度有限,一個簡單的四則運算,就能佔據設計畫面中極大面積是最大缺點,好一點的設計軟體可以將選取的程式區域建構為新積木,不過,總是會增加操作與設計上的一些麻煩。

視覺化程式語言不適合用來設計太複雜的程式,如果僅將視覺化程式語言應用在特定領域,針對特定功能,而非作為一門通用語言,表達的概念就不用那麼多,那麼,視覺化程式語言將生活經驗連結至程式設計的優點,就能突顯。

在過去,突顯這類優點沒用,只有特定設計元素的視覺化語言,終究只是玩具。然而,未來嵌入式系統的發展,或許就能實現視覺化語言在特定領域的應用。

松本行弘對未來的預測中談到,因為電腦的價格不斷下降,可能的未來景象之一,就是:「至今還沒用上電腦的地方,也會開始嵌入電腦」,想像一下,你可以在按摩椅的螢幕上拉一拉積木,就可以設計出「喔!~~~對!就是那邊用力一點……」、然後「重複個兩三下」之類的程式,或是拉拉烤箱螢幕上積木,就可讓烤箱烤出專屬味道的雞,甚至能下載五星級主廚特調程式……這才是我心中人人寫程式的未來景象,如果真能實現,人們應該也不會說那是在寫程式了,就像我女兒從來都不知道,她在ScratchJr中「玩」的那隻「貓」,其實是大人們意圖讓孩子們寫程式的邪惡使徒。

簡單來說,視覺化程式語言,或許是縮短程式設計與大眾之間距離的利器,而不單只是從小學程式設計的利器。

積木圖像的隱喻,暗示人們可以組合、建構元素來達到一些目的,以便改善自己的生活,操作咖啡機螢幕上的積木,不會讓你成為偉大的開發者,只是為了研磨或煮出一杯好咖啡。每個設備都可以寫程式,而使用的是一個很小的子集,用在特定的東西上,你隨時都可以自訂設備的行為。

你不用等待視覺化語言的未來

預測未來真的是滿煽情的,說實話,我心中常做這種事,只是這麼公開寫出來大概是第一次,心中常做這些事的原因在於,在幻想未來的過程中,總得收集了一些必要資訊,認真地思考對與錯,有時我會默默地遵循著自己預測的未來去準備,反正也沒講出來,成真了或不成真,都不會是八卦!

如果未來每個人,真的只要一點點的程式設計能力,就能改善自己的生活,那麼已經是身為開發者的你呢?

我經常對學員講一句話:「你會為老闆寫程式,會為客戶寫程式,那麼你有沒有幫家人或自己寫過程式呢?」身為開發者,應該是不用等待視覺化語言的未來的吧!程式設計的本質,不就是為了解決生活中的大小問題嗎?

專欄作者

熱門新聞

Advertisement