2021-011 🥚格子語言

「人人都能創作程式,說說非人類語言」,漸漸成為有趣的現象,2021全球程式設計師總量超過兩千三百萬人,差不多「剛剛好」填滿整個臺灣。

看起來好像嚇嚇叫,然而會操作 Excel 試算表的使用者有多少呢?7.5億人,天啊,這是什麼概念?把日本+韓國+美國全部總人口加起來,還不到 7.5 億人。可見,寫程式,這件事,仍然有很大的進步空間,說到底,「非人類語言」這種跟電腦溝通的東西,還是有一些些門檻。

我們有個信念,「人人都能創作程式」,而且並不是寫寫 Hello World 跟世界打招呼而已喔,而是能夠製作出價值創造,可以解放奔放創意,讓整個網路世界跟著我們的思維嘰哩咕嚕轉起來的那種,很好玩的東西。

有兩種很有趣的途徑有機會辦到這樣的設計,第一種是直接跟 AI 人工智慧交談,透過對談就可以把程式碼寫出來,完成許多重複性的任務。這種人工智慧的對談,最理想是能先限定某種專業領域,這樣電腦比較容易完成有限範圍的程式創作。我的八歲女兒兔兔,如果可以這樣用講話來寫程式,實在也是一種很有趣的思維訓練。這種能夠與人類透過交談寫程式的 AI 難度稍高一些,我們放在比較後面來發明好了。

另外還有一種比較簡單的途徑,是運用這 7.5 億人口已經學會的 Excel 試算表,進行程式創作,消弭程式設計的幾項困擾:

001 從無到有寫程式很難,但複製已經能跑的模板來修修改改,會相對輕鬆很多

002 初學者對於指令很難背誦,填空題很難,但指令若改為限定範圍的選擇題,好多了

003 領域專家很容易利用試算表發明自己的專屬描述語言,但需要能編譯為高效能執行碼

我們發現第三點尤其重要,我們的工作當中經常碰到環境工程領域的專家,可以非常精確的描述各種空氣污染物種的生成關聯性,有物理知識,也有化學知識。但碰到寫程式,就得仰賴程式設計師翻譯為資料科學的預測程式碼,這樣的翻譯溝通過程非常冗長,而且因為有很多試錯的合作往返過程,要是環境工程專家自己就有能力用試算表編寫一些專屬語言,許許多多預測演算法的創意,還有特徵工程調參數的靈感,就可以讓領域專家自己來超高速迭代執行。

講這麼多,不如我們直接來發明「🥚格子語言」,讓各種專業領域的夥伴,都可以輕鬆上手用試算表寫程式吧。

上面的格子語言,是直接用試算表來讓使用者簡單編輯,然後透過格子語言編譯器 grid2julia,就可以轉換為以下的 Julia 程式碼 source code 進一步跑出執行結果,未來我們還希望發展所見即所得的IDE編輯環境。

using HTTP       
function 抓檔案(檔案網址,輸出路徑與檔名)
  download(檔案網址,輸出路徑與檔名)
end
抓檔案("https://ci.taiwan.gov.tw/dsp/history/epa_erdb/EPA_OD_202007.zip","/results/data.zip")
3.3s
Julia
function 解壓縮(來源檔名)
  run(`unzip $(來源檔名) -d /results`)
end
解壓縮(
data.zip
)
0.4s
Julia
using CSV
using DataFrames
function 讀CSV(來源檔名)
  return CSV.File(來源檔名) |> DataFrame
end
function 只取欄位等於某字串的資料(來源檔名,欄位名稱,值等於哪個字串才取資料,輸出檔名)
  df=讀CSV(來源檔名)
  df_out=filter(x -> x[Symbol(欄位名稱)] == 值等於哪個字串才取資料,df)
  CSV.write(輸出檔名,df_out)
end
只取欄位等於某字串的資料(
EPA_OD_202007.csv
,"SiteName","新店","/results/output.csv")
0.5s
Julia
using Plots
function 畫圖表(來源檔名,橫軸欄位,縱軸欄位)
  df=讀CSV(來源檔名)
  y = df[Symbol(縱軸欄位)]; x = df[Symbol(橫軸欄位)];
  plot(x, y)
end
畫圖表(
output.csv
,"PublishTime","PM2.5")
0.5s
Julia

格子語言的未來發展,在網路世代可以與 serverless function 做呼應,也可以與OpenAPI 結合(提供預設參數並且預覽執行結果的文件介面)。

如果是 Julia 或 Python 格子函式所在的伺服器,全世界都能透過 REST API 輕易呼叫(應該要像現在的 CDN 可以到處下載 .js 檔案一樣方便)。透過超大共用 OpenAPI 目錄來註冊彙整格子函式指令集,並允許動態下載 serverless function source code 到本地執行。

如果是採用 JavaScript 實作的格子函式,甚至可以直接在使用者電腦瀏覽器執行,運用個人電腦或手機的高速CPU GPU與記憶體。JavaScript速度仍嫌不夠快的話,也能再以 RUST、WebAssembly 技術以 .wasm 格式來加速。

格子語言的 IDE 編輯工具,除了可以是Excel、Google Sheet之外,或許也會漸漸有自己便利的所見即所得工具出現。

我們期待格子語言的幾個發展特色如下:

. 指令可跨人類語言:允許中文、英文、日文

. 允許別名:抓檔案、抓網路檔案,都可以運作順暢

. 瀏覽器客戶端執行:用 JavaScript 或 RUST wasm 技術撰寫的格子函式,可在瀏覽器跑

. 伺服器端執行:Julia、Python、JavaScript 撰寫的格子函式,循 OpenAPI 規格呼叫

. 全球統一註冊目錄:可重用函式不需自己再寫過,直接引用大家寫好的

. 模板可重用:視覺呈現也好,清資料也好,都有大量模板可直接拿來修改

. 所填即所得:填格子立刻就會有視覺回饋呈現,方面除錯與加速設計

. 可測試的預設參數:預設參數本身就有說明作用,輸入與執行輸出結果都能當文件

. 跨程式語言:同一個格子函式可以有多種語言以及多種版本,不同效能的實作品

Runtimes (1)