十月 26, 2013
» 人人能編程是可能的嗎?



今年的Coscup活動中,我分享了一個開放的講題「人人能編程是可能的嗎?」。

在準備講題的過程中參考了很多資料、思考了很多的可能性,最後選擇以現在的方式和大家分享。

之所以會提出這個講題,其實是自己對我過往在各處分享各種不同講題、寫技術書籍、辦活動的總結。我發現不管我分享的主題為何,似乎這些活動彼此之間有一條驅動我這麼做的暗線存在。就我目前看到驅使我做這些事情的動力,可能是「讓人人能編程」這個願景。


「人人能編程是可能的嗎?」是個開放結局的問題,每個人都有自己的想法,覺得不可能實現或是有自己相信的可能實現。從講題被接受後,我也一直在尋找要怎麼將各種可能幫助我們達成「人人能編程」的各種可能性組織起來。
最後我歸納出可以用「人」、「程式」、「指令」、「機器」四個「從寫程式到在機器上執行」的過程中會遇到的必要元素間的距離來做判斷。用這四個元素間關係所組成的六個維度作為判斷框架,能協助我們判斷每個可能的實現在各個層面對「讓人人能編程」這件事。

從PC到筆電到智慧手機/平板這條線,改進的是「人與機器的距離」這個維度。

周蟒改進的是「人與程式的距離」這個維度。

Blockly改進的是「人與程式的距離」(積木化)、「程式與指令的距離」(輸出Python, Javascript)、「指令與機器的距離」(網頁上直接執行)、「人與指令的距離」(開源且Blockly本身積木與輸出都很容易修改)、「人與機器的距離」(開網頁就能用)這些維度。

因為演講時間有限,沒有辦法把每個想表達的想法都傳達出來,所以特別寫下此文,聊以記之。

八月 16, 2009
» Introduction of Android Scripting Environment



On Coscup 2009

十月 22, 2007
» 周蟒中文程式語言的四不一沒有

竊以為周蟒中文程式語言的四不一沒有是:

一不:不強求完全的中文編程

過猶不及,絕大多數的程式語言是使用英文。周蟒中文程式語言的目標是協助使用者透過中文程式語言學習程式語言,進而接觸世界上大部份的程式語言,而不是脫離現實世界。

二不:不用中文數字或運算符號 (加, 減, 乘, 除 +, - ,*, / ...)

程式語言中使用到數字與運算符號,並不僅只於常用的整數或四則運算符號。

三不:不用文言文

程式語言是人與電腦溝通的語言,電腦只懂得平鋪直敘的邏輯。所以我們也不用掉書袋,直接用白話溝通。

四不:不用中文標點符號

由於周蟒是完全兼容 Python 程式語言的中文程式語言,而將中文的標點對應到英文標點的歧異不少,反而會造成寫作與辨識的困擾。統一使用英文標點並不影響閱讀,對以後學習其他英文程式語言也不致造成額外障礙。

一沒有:沒有大括號 {}

周蟒是 Python 程式語言加上中文支援的中文程式語言,而 Python 程式語言本身就是使用結構化的程式區塊來代替以大括號判定程式區塊的語言。也符合中文使用習慣。

» 我對測試的態度

pycon 2007 裡的 presentation 提到測試金字塔, 由下而上將測試歸為三類:

單元測試, 功能測試, 應用測試。

程式測試需要很多的單元測試, 一些功能測試, 少量的應用測試。

具有某個程度的單元測試可以保證代碼質量。


周蟒是我第一個包含完整測試的開源專案.然而周蟒也不是一開始就寫了測試用例.

我的經驗是"先能跑, 再求好"。在一開始先讓功能能跑,之後再想法改善或改寫。

周蟒改善或改寫的過程中, unittest, doctest(單元測試, 功能測試),
與 example test(應用測試)就是主要保證功能穩定的方式。

我覺得加入測試是我在開發周蟒過程中做出的最好決定。
當周蟒程式超過15k後,
已經進入難以將整份 code 短時間一次 Review 的階段。
這時我決定花時間為周蟒加入一部分測試用例。
我發現這麼作提昇了整個小程式的'解析度'-- nosetests 的報表告訴我: 每個簡單的功能都運行。

當我在周蟒加入了某數量的測試用例後, 周蟒的開發方式就有了質變。

由於可以提前由自動測試獲得功能結果, 讓周蟒的開發方式變得更大膽,
我可以放心地大膽試驗各種新功能, 並隨時能透過測試確認新功能對架構帶來的影響。
也得以在早期版本中即輕鬆地透過大規模的重構來增加架構的彈性。


用幾次就丟的程式/腳本當然沒加入測試的價值.
然而要維持一份可維護的程式, 加入測試是很好的方式.

biggo.com.tw

A Django site.