Bret Victor – Learnable Programming

大家是否還記得之前酷殼向大家介紹的蘋果設計師Bret Victor一種可視編程的視頻《Bret Victor – Inventing on Principle》,最近,他寫了一篇文章—— Learnable Programming,寫這篇文章的原因是因爲“可汗學院(Khan Academy)”近期上線的一個在線編程環境,根據他的演講提供了一堆基於Javascript的“實時編程”的環境,因爲這個環境是引用了他的想法,所以,他有必要出來噴兩句。

這篇文章的開頭就是一個問題——“How do we get people to understand programming?”,我們怎麼讓人們懂得編程?

然後,他說了兩條——

  • 編程是一種思考,而不是一種死記硬背的技能!你學會了“for循環”並不是說你就學會了編程,這就好像你知道有鉛筆這個東西,但是你對繪畫還是什麼不懂。(對於這一條,正好這兩天我在微博上和人辯論“基礎算法面試題是否好”(還有微博一微博二),而且我以前也寫過一篇《爲什麼我反對純算法面試》,這裏借用Bret的話再加強一下我的觀點——“我們一方面在罵中國的應試教育毀了學生,另一方面我們又在把我們的面試變成“考八股文”式的考試!  你會qsort有什麼用?你只不過是會用一支高級鉛筆而已罷了。”)
  • 人只有看得見,才能理解。如果一個程序員不能看到他的程序在幹什麼,那麼她就不能理解程序。(對於這一條,讓我想到了Donald Knuth的話——“An algorithm must be seen to be believe!”)

所以,Bret 覺得編程軟件的目標是——

  • 支持並激發強大的思考。 To support and encourage powerful ways of thinking.
  • 讓程序員可以看得見程序的運行過程。To enable programmers to see and understand the execution of their programs

他說,可汗學院的“實時編程環境”並沒有達到上面的任何一個目標。他還說用Javascript這樣設計得很垃圾的語言根本不能支持強大的思考,而且還忽略了近十年來的成果,可汗學院這些東西完全是毫無價值的。

Bret認爲,Alan Perlis的名言——“要學會編程,你必需得同時變成機器和程序”是錯誤的,這句被廣爲流傳的錯誤名言,讓我們把編程變成很難,並且掩蓋了編程的藝術。人並不是一臺機器,我們也不應該強迫自己變成那樣。

接下來,他說明了一個編程系統應該有兩個部分——

  • 編程的“環境”,是其中一部分需要安裝在電腦上的。
  • 編程的“語言”,是另一部分需要安裝在程序員大腦裏的。

他隨筆給出來了一些Design Principles——

對於“編程環境”,應該能讓學習者幹下面的事:

  • 閱讀程序詞彙 read the vocabulary – 這些單詞意味着什麼?是不是顯而易見不用思考的?是不是很自然地被上下文解釋了?
  • 跟進流程 follow the flow – 在什麼時候會發生什麼?流程的時間過程是不是看得見摸得着的?流程的粒度是否有意義?
  • 看見狀態 see the state – 電腦在想些什麼?你能不能看到電腦裏的數據?並可以看到不同狀態的比較?沒有任何狀態會隱藏?
  • 通過交互來創造代碼 create by reacting – 從粗糙開始,然後開始雕琢程序。交互是否實時顯示在屏幕上?有多少組件我可以用來做實時交互?
  • 通過抽像來創造代碼 create by abstracting – 從一些hard code開始,然後開始抽象成變量抽象成公式,抽象成函數。從一個開始作模板,然後做多個不同的東西。

對於“編程語言” 來說,它應該提供下面的事:

  • 同一性和比方 identity and metaphor – 我怎麼把電腦的世界和我的世界聯繫起來? 推薦了一本書《“Mindstorms”
  • 分解 decomposition – 怎麼把我的想法分解成碎片?how do I break down my thoughts into mind-sized pieces?
  • 重組 recomposition – 怎麼把這些碎片重組起來? how do I glue pieces together?
  • 可讀性 readability – 這一大堆程序單詞是什麼意思?what do these words mean?

然後,他說“The Features are not the point”,我們很多時候會關注編程環境和編程語言提供的功能,這就好像我們在看一本書有哪些單詞一樣,有哪些單詞不重要,重要的是我這些單詞組合起來傳達了一個什麼信息一個設計的好的系統並不是一堆功能,一個設計得好的編程環境是激發特定的思考方式。所有的功能都是非常小心翼翼地組合起來爲之服務。(不好意思,我又要插一句。我覺得這和我在《抄襲,騰訊和產品》一文中,我所理解的“什麼是真正的產品”有點類似——真正的產品不是功能的組合,而是要表達的價值和對某一特定問題端到端的解決方案)

接下來,Bret用大量的示例告訴了大家上面所說的那幾條是具體是什麼。大家一定要去讀一讀!(我把這些東西總結果在上面的那些條目中了)

最後,Bret說了一下,他被問過很多次——這些漂亮的想法怎麼應用到現實世界中?他說這個問題問的是對的,但是這些問題問的就好像是——“怎麼能讓一匹馬從內燃機引擎受益”一樣,其假設的改變是錯誤的。他回答到,更準確的是——“Programming has to work like this”,所以他說,他的這些東西不是一種“Training”,也不是一種“銀彈”,只不過是拿開了眼罩。


(轉載本站文章請註明作者和出處 酷殼 – CoolShell.cn ,請勿用於任何商業用途)

發佈了26 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章