相關閱讀 |
>>> 創業先鋒 眾人拾柴火焰高 >>> | 簡體 傳統 |
我想應該跟很多人一樣是從游戲開始的。小時候有段時間,家里是不允許我玩游戲機的,于是我就經常去公共圖書館。在我九歲的時候,我發現那些我以為是教編程的書其實只是羅列了基本的源碼。還有一些講游戲設計的書整本都是源碼。于是當我想玩游戲的時候就把這些源碼輸入計算機,但又常常半路遇到語法錯誤,而我當時還不能理解這些錯誤信息,也不知道如何解決。所以我不得不重來一遍,直到我終于可以玩這個游戲,如此反復之后我意識到我可以修改這個游戲,而從那以后就一發不可收拾了。我學了 C++ -- 那時我大概 10 歲 -- 因為人們是用它寫游戲的,我試圖寫過一個 MUD 游戲 -- 那是我第一個大項目,還進行的不錯... 單人模式下所有功能都可以很正常的運行,但多玩家的模式沒有完成 -- 所以我想答案應該是沒有吧。因為后來我轉移注意力到圖形方向去了,開始迷戀上 GL 和 3D 渲染之類的事情。 我做了一陣游戲引擎之類的東西,看了所有 OpenGL 的教程,什么旋轉的方塊啊,顆粒引擎啊這些東西,然后我開始做真正的游戲。在那個時候,對一個 13 歲的我來說,那真是繁復的工作。我發現沒有足夠好的圖形工具來顯示游戲內容。于是,我跟我的室友開始做一個像素編輯器。我們把它叫做 Pixen。那是我第一次接觸 Cocoa,還是開源的。當我們發布 1.0 版本的時候,我當時大概 14 歲吧,我們去購物中心里面蘋果商店的 OS X Panther (還是 Jaguar?) 的發布會。那個時候他們就開始搞發布會了!我們想贈送我們那個像素編輯器的 CD。 我當時的理想就是成為某種工程師。我當時對電氣工程,或者甚至是高中的那些化學小實驗的理工科挺著迷的,所以當時是想成為這些工程師中的一種,而軟件工程是我當時真正可以著手做的。當時我把這稱為編程,而不是軟件工程,于是有些人告訴我:“不對不對,你應該叫它計算機科學!”當然,在當時,我并不明白在計算機科學,軟件工程和編程當中暗流洶涌的文化差異,我只覺得它們是很有用的清晰的術語。但其實我們常常把它們用錯了。 我肯定不是計算機科學家,雖然我是學這個的。我覺得我差不多算是軟件工程師,一個深受計算機科學影響的軟件工程師。不過我最近會花大概一半時間做一些兒童教育方面的研究,讀論文和書籍,分析設想,我們希望能在這個方向略盡綿力。 這個, 我想我可以從其他一些事來回答這個問題... 我之前去加州理工學習過一段時間,這所學院支持了大量自然科學的項目,諸如 NASA 和 DARPA,所以當時的討論都集中在人性化影響上。當時有一個 NASA 的人過來對我們說:“好了,你們是最優秀的,而你們即將在世界上最好的研究學院之一學習,你們將擁有無數可能。這對你是無限機遇,而你們也應當把握這樣的機遇,將它們利用來做些真正有意義的事情。” 當我來到更廣闊的軟件社區里時,我是少數的幾個畢業之后沒有去做研究的人之一。剛畢業的時候我希望能做一些事情,但我對大多數商業軟件工程和軟件銷售的能產生的影響和追求的目標感到失望,于是我冥思苦想到底可以在哪個領域發揮我的專長, 而最先踏出的第一步最終決定了我的方向。我深受物理學家 David Deutsch 的影響,通過他我確認了我想要走的方向,那就是擴展人類知識和能力范圍,繼而我就開始思考怎樣才可以做到。 如果人類能活得更久一些,那我們就能在知識能力上走得更遠,所以在生物技術和化學工程會有很多的機遇。如果人類有更好的工具進行試驗,也能更進一步,所以在工具制造,綜合工具,虛擬現實,或者是接下去的人工智能領域也都有很多的機會。但基于我的背景和機遇,我最終決定在教育方面做一些貢獻,我認為這將會是更好的選擇。因為如果我可以創造終身學習的一代人,那么我們將有更多的人來解決這些問題。 是的,那是我的期望。學習的一大挑戰就是元學習 (meta learning,即“學習如何學習”)。這是一種可以不必摧毀自信或摧毀學習態度的學習方式。如果我開發的這些工具不但可以讓畢業生得到相同成績,并且他們最終不但對數學有更好的認知而且會更傾向于在之后的生活中學習數學,那我就達到目標了。 是的,它還不夠好,并且在很多方面都不夠好。最缺乏的是沒有讓學生得到剛才我說到的那些機遇和資源,我覺得那是最重要并且最首要需要改善的事情。所以這就是為什么現在的任務是給所有人提供免費教育,而 Khan Academy 的使命是為大家提供世界一流的免費教育。所以現在我們會先將重點集中在為大家提供免費教育上面,接下來會是世界一流的免費教育。但那是后續的事了,因為我對現在所謂的世界一流還有些懷疑和考慮。 我有很多同學接受了最好的付費教育,由諾貝爾獲獎者授課。盡管如此,他們的學習態度卻很糟,認為一畢業就算完。他們只想結束這一切然后去找份穩定的工作,放空大腦,因為他們已經被系統和制度打倒,而好奇心跟智慧也已經枯竭。 是啊。如果你問人們你覺得數學怎么樣,大多數人都會回答說:“哦,數學很無聊。”或者“我數學不好,我不太適合學數學。”。如果你問他們對科學的態度,答案也類似。但如果問到文學,或許他們會談論一些他們讀過的書籍里的有趣橋段,但那也只是他們學生時代讀過的罷了,現在已經停止閱讀了。 所以我最期望影響的是改變人們認為教育隨著大學畢業一并終止了這一認知。而這其實并不是一個技術上的問題,所以我對給我自己貼上“軟件工程師”的標簽有些顧慮。雖然我大部分的經驗與之相關,但我的目標是卻不是這個方向。 眼下,學習的標準含義已經被普遍認可。不論是讀教課書,看一個視頻還是聽一個演講,你都是被動的吸收知識。你只用坐在那接收,或許如果你比較有錢的話還可以在之后有個對話交流之類的。但當你畢業之后,你必須自己去創造這樣的學習環境。 我對所謂的構建式學習環境 (constructivist learning environments) 很感興趣。這是一位幾十年前的學習研究者 Papert 創造的術語。在構建式學習環境下,學生由被動的從教科書里學習轉變成自主的創造知識。在這樣的模式下,會更像是創造了一種環境,讓你在這樣的氛圍中積極主動的理解事物繼而掌握它們。 Papert 的研究里有一個例子,他嘗試用 Logo 來教學生抽象及程序性思維,而不是編程本身。 他甚至有一個教室里掛了一個 Logo 的海龜的標志。那時候還有一種機械海龜,可以在真的紙上作畫。這個教室四周掛滿了畫,有些是源代碼生成的,有些不是。 這些畫作會隨著一批批的學生換掉,因為比如有些學生會看到一朵花然后說:“哦,我喜歡那個圖,能給我嗎?”然后教師會說:“當然可以,不過你必須輸入這些代碼,海龜會按代碼畫出這個圖。”接著學生會說:“好的。”然后開始畫畫。之后他或許又看上其他畫作,但那些并沒有源代碼,于是他就得自己想辦法。 教室里這些沒有源碼畫作是被設計出來的,需要學生理解原理后制作出來。創造性環境就這樣塑造出來了。我正在研究這個很可能會被研究很多年的假說,首先是允許人們自助的構建知識,那么將很可能得到同樣的學習效果,當然如果達到這一結果我會非常高興,不僅如此,他們還會在自我認知,學習態度和學習興趣上都比其他同學高出不少。 另外有一個兒童教育研究者 Piaget 對此有很多的研究成果。他認為對青年一代的開發當中最重要的事情之一是對自主性的訓練。而這里的自主性比我們平時認為的自主性還要更寬范一些。不是“我可以隨便的玩”這樣的自主性,而是“我正在對我生活中所有的的事情做決定”。這跟其他人來告訴你要怎么分配你的時間或訴諸權威是相抵觸的。 比如說,常規性的回答 “Bobby 在玩游戲的時候作弊了” 這樣的問題,會是 “哦,我去找他談談”。與之相反的,如果是自主性的回答將會是 “那么你是怎么跟 Bobby 說的?”。我認為自主性的訓練在各方面都是非常重要的。有些研究認為這會在短期內得到更好的效果,但我認為從長期來說也會引導出更善于思考的人。 我對那種一整天的日程都被別人安排的情況很質疑。我認為如果一個導師以日復一日的調整學生的學習環境來達到修正學生學習進程的方式會是更積極的。確切一點,舉個例子,比方說與其一次性給學生全部人類知識的目錄,并且把每個知識點都按重要程度分類,我認為更好的方式是把所有的知識都看成是書架上的書,然后按難易程度由低到高的擺放。 當然,我懷念那兒的人,這太重要了。事實上這正是我對這個行業感到一些失望的地方。有這么多優秀的人被局限在這些巨型公司里,他們只是偶爾被善加利用,但更經常的情況下他們只是一臺機器的零件,但以他們的智慧其實可以做更大更影響深遠的貢獻。我并不是說一定要來我這個項目,我是指更廣泛的情況。讓我覺得有點傷感的不僅僅情感上的想念,我更懷念的是諸如當時在 NeXT 和那些非常有經驗的人進行的非常有激發性的談話。我仍然希望他們可以發揮更大的影響力。 填補這中間的鴻溝的一件事是當我 16 歲的時候,我寫了一個叫 Sparkle 的框架。它讓我認識到了到了一些框架開發的現實,比如說你要修改大家正在用的 API,他們就會非常生氣。這是框架開發的基本現實之一,但老實說其實我在到 Apple 之前并不知道我當時在干嘛。我完成了學業,我有了更大的雄心,而 Apple 看起來是個非常好的學習地點,事實上也是。 其實現在也仍然是,所以我還是會跟那些跟我當時抱一樣想法的人提出相同的建議。跟我共事的團隊是開發了這個體系超過十年的人們,而我差不多是當中墊底的。于是我被迫非常快速的學習和理解許多設計這種規模框架所需的獨特的角度。尤其是考慮框架的二進制兼容(binary compatibility)問題,而 Sparkle 并沒有考慮過。幸運的是,我周圍的人都非常慷慨的付出他們的時間和精力幫助我進步。在犯了很多很多錯誤之后,我終于意識到我都干了些什么蠢事兒,而當我幾年后離開,之后大概再也用不到那些技術。 我認為二進制兼容是最讓我吃驚的事情。我當時并不理解當中的困難和復雜。想象一下這類的 bug 吧:在 iOS 8 里按鈕是白色背景,但在 iOS 7 里面卻是透明的。iOS 8 還沒有發布,所以這肯定是我們自己的問題。于是你開始一點點鉆研,發現可能在 iOS 7 里調用的一個方法是控制這個的,但這個方法在 iOS 8 里已經不被調用了。 然后,很快的,你為了知道怎么回事,去分解,追溯,結果發現這是一個第三方的代碼所為,而且你還沒有源代碼。基本上有一半的時間,有些人在做一些奇怪的令人發指的事以達到效果,而另一半時間我們用一些非常規的手段做了些改動,于是我們需要因此增加一些防御措施。 是啊,差不多就像偵探似的工作。 是的,肯定是。每個版本都是很機密的,我們不可能問:“嗨,Facebook 的哥們兒,你們為什么要這么做啊?”我們必須自己搞明白。在這一點上我非常的敬佩 Peter 跟他的團隊的工作。我認為那是非常好的事情,也很樂意看到更多這樣的事。我期待看到更多框架開發的團隊。Facebook 做出了非常好的表率,GitHub 也是。 是啊,我現在作為一個第三方開發者,也不得不時不時的反編譯UIKit,因為我想知道“UIKit,你在干嘛啊?”這樣的問題,而回答這個問題最簡單的方式就是逆向編譯。 是,我得說這些都挺讓人激動的。如果說真正讓我激動的事,卻并不是在消費軟件工程行業。可以幫助我工作的那一類里面,最讓我激動的是真正的交互式原型工具。比如你想要做一個以前從來不存在的交互,或者有這樣的概念但并沒有真正的工具的交互的時候。我們大多數仍然只是在 Photoshop 中去設計它。 當你在 Photoshop 上設計的時候,你只是在創造一個你在 Photoshop 中設計的一樣的東西。我記得在 Apple 的時候,我可以分辨出最初從 Photoshop 還是 After Effects 還是現場模型中得來的需求,這之間有非常大的區別。現在有一些工具可以做這件事,雖然我覺得它們都乏善可陳,但我還是非常熱誠的關注著,希望能有所貢獻。 是的,Framer 是一個不錯的例子。我對剛剛被 Google 收購的 Form 這樣的產品很感興趣,當然還有 Origami,也很有意思。我在 Apple 參與了一個原型工具的內部項目,它在有些方面要做的好一些,而另一些方面欠缺一點。每種工具都有優點缺點,我們差不多維護了一個羅列著“這個工具可以用來干這個,那個工具更適合做那個”的表單,我們不得不來回挑選。我認為它們除了做那些非常類似于早已存在的工具做的事情之外并沒有在某個方面特別的擅長。 這個我并不這么認為,但我想我必須進一步解釋一下。交互有離散模式和連續模式。像鼠標點擊就是離散模式的交互,而手勢就是連續模式的交互。類似的,你的應用也有離散狀態和連續狀態。例如滾動就是連續的而在導航棧中導航到其他層就是離散的。 Storyboard 只允許你控制那個四四方方的空間內的離散區域。因此你可以點屏幕上一個部件,然后通過一個離散的轉場把你引導到另一個地方。這種交互是最常見的也最沒意思的,而且說實話我認為這種交互占統治地位的原因是因為我們沒有一個工具來讓我們思考其他模式的交互方式。 不過從 iOS 7 起,這種離散模式也的邊界也開始比較模糊了。比如可以點擊一個表單的單元格然后展出單元格下面的內容。這是一些很簡單的例子,但卻很難用 storyborad 實現。 是的,那也是為什么我希望沒有那么多人去做照片分享類 app 的原因。 我閱讀了各種不同領域的論文,我仍然在思考這個問題。最近讓我注目的是兒童發展或者說教育,教學模式這些方面。我讀到的最讓我興奮的調查結果是有一個班的只有五歲的一年級學生,老師并沒有給他們常規的數學指導,而是一個氛圍,由一系列慢慢調整的活動組成,而這些活動都是游戲。一年之后,他們進行了評估,雖然這些學生并沒有學習正式的算術方法,但他們都能夠答對問題并且有非常獨特的認知。這樣的事情讓我非常的激動。 隊伍不好帶啊... 這是一種獨特的技能,而我之前并沒有經驗。在軟件行業,我們總是讓一些有貢獻的工程師去做領導的角色,并期望他們脫穎而出。當然,鑒于領導別人是一項特殊的技能,我們必須感激他們做的不錯,因為這需要學習大量的知識。 首先因為他們真的非常慷慨的花時間來做我的導師。在 Apple 總是有很多的挑戰,但 Apple 的文化有個問題是它并不看重導師的價值。因為 Apple 對此沒有特別的獎勵,而且教導和學習也沒有被納入企業文化構建當中來。 不管怎樣,我真的非常幸運能有人花了很多時間來教我做事,并且當我犯了嚴重錯誤的時候能花時間主動幫助我。那么是什么讓人印象深刻呢?大概是他們的經驗吧。這個行業現在非常有趣,因為充斥了新畢業生,而正是這些新畢業生在 Twitter 上嘰嘰喳喳,在會議上演講。但這個行業已經形成有一段時間了,肯定有很多有 15 或 20 年相關領域經驗的大神級軟件工程師,但他們并不經常唧唧喳喳。你很難一直讀到他們的文章,因為他們基本都被雪藏在公司里,這種情況下他們無法發聲也很低調,但是他們肯定知道很多。 我們大概有 20000 行 Swift 的代碼,那個項目有四位開發人員,都用 Swift 寫代碼。我們所遇到問題或者說我們稱之為問題的東西,其實是實用主意和理想主義的沖突。我相信語言本身的問題都是暫時的,并不能造成宏觀的影響,對于你可以在 6 個月時間做出來的 app 來說,這些問題都不重要。所以完全可以對我的抱怨不置可否,只要專業軟件開發的生態系統能長期健康發展,我認為這門新語言將會是一個非常好的貢獻,而頭幾個月的磕磕碰碰不值一提。 積極的一面來說,Swift 讓我們的代碼更清晰。這是我讀 Swift 接口的時候讓我最高興的事情。比如 Swift 的 block 代碼,我可以更清楚當前發生以及接下來要發生的事情。我可以看到返回值并且可以從中理解更多。我可以用更準確的方式來枚舉模型里的系統狀態。我們可以更準確的以約束,限制,依賴的方式來使用值類型 (value types)。更廣的說,我很贊同這種把 UIKit 當成一種庫而不是框架的模式。 如果說問題的話,沒有工具,工程師也不能去深究。事實上我其實覺得 Apple 的 Swift 開發團隊是 Apple 里最優秀的工程師團隊,但是工作還沒有完成。現在還到處都是 bug,經常崩潰,偶爾還會生成錯誤代碼。更嚴重的是,它真的很慢。非常非常慢。不能增長式編譯是最大的問題。我們構建的是一個有 UI 的應用,所以我們得花上和考慮如何促進學習差不多相同的時間來打磨應用的用戶交互和動畫 ,然而每次都要花接近兩分鐘才能看到效果實在是很傷 -- 并不僅僅是效率而是士氣。這讓所有人都很憤怒,基本上所有時間所有人都很憤怒。更糟的是,這讓我們變懶了。因為太慢,我們不想改東西,所以如果用 Swift 實現的 UI 比 Objective-C 實現的 UI 更難看我一點都不會吃驚,因為在上面的迭代總是讓我們崩潰。 但那只是暫時的,我對此并不担憂。他們知道這些而且肯定會修正這個問題。只是你無法管理預期,不是出于惡意,我認為 Apple 其實不明白而且之前并沒有做過這么大型的東西。 我沒有什么內部消息,所以我只是猜測,但我認為這會是長期的工程。至少當我在那兒的時候,團隊的主要工作是維護和提升現有的框架,然后支持諸如新屏幕尺寸或者新硬件之類的市場需求。這都會花很多的時間,所以對大型的決定會更謹慎,我認為并不會很快。 我認為如果我們快進到十年之后,API 將會完全不一樣。我對此深信不疑,不然肯定會讓人非常的失望。但要是只是一年之后的話,我想大家一定會看到注釋得更好的頭文件...(不得不說,黑的漂亮!) 是啊,短期內一定會這樣的。Facebook 的組件項目 (components project, 其實就是 React) 就做得很好,但那不是 Swift,是 C++,我認為超級贊,這主意太棒了。React 是個不錯的設計。我對我在 Apple 最大的怨言就在此,因為 Apple 的文化并不看重學習,所以沒有人閱讀。我的意思是沒有人讀正經的東西,沒有人讀期刊,也沒有人讀論文,沒有人知道現在外面正在發生的什么。人們不知道 React 之類的東西,這真讓人沮喪。 不管怎樣,我認為那是非常不錯的,而且毋庸置疑的是肯定會有人把 UIKit 或者其他框架當做是庫來把它們封裝的更好。不過,除非 Apple 自己來做否則不會是一個更好的解決辦法,也會總是落后,總是不匹配一樣。 基本上都一樣。我希望可以發布更多的開源的東西。我之前在這上面吃過虧。很有意思的是,當你發布開源項的時候,人們還希望你去維護它。我想大家對軟件開源社區的期待還沒有被明確。有一些開源軟件有自己的社區也能被很好的維護,而另外有一些開源軟件是以教育或興趣的目的被分享的,就不怎么被維護。我基本上只有精力做到后者,因為老實說,軟件工程并不是我現在感興趣處理的問題。 (訪談來自Objc中國譯自Objc.io)Andy,謝謝你抽空接受采訪。可以跟我們談談你是如何開始編程的嗎?
你完成它了嗎?
然后你就繼續做游戲?
是不是有其他的什么可能你就不會成為一個程序員了?你當時還對其他什么特別感興趣嗎?
好勒。那你現在基本上就是軟件工程師了?
離開 Apple 去 Khan Academy,幫助人們學習和教育,看起來是個不小的跨越。這是怎么發生的呢?是什么促動你的?
那么你是想為后代打造一些幫助學習的工具以便于他們解決更艱難的問題?
看起來很顯然你并不滿意我們已有的教育?你可以詳細談談嗎?
聽上去真讓人沮喪...
既然你現在在終身學習上面有這樣一個大計劃,那你對你十年后的愿景是怎樣的呢?你期望達到什么目標?
除了用構建式方式鼓勵人們更主動的學習之外,另一個相比你在 Khan Academy 做的和更傳統的教育方式之間的主要區別是更自由地選擇想學習什么以及什么時候學習。那么你覺得這個改變有什么影響呢?
那么在 Apple 有沒有什么很讓你懷念的呢?
可以多分享一下在 Apple 的時光嗎?開發一個被如此多人使用的框架是個什么體驗?而你又是怎么從做游戲一步步達到的?
開發這樣大型規模的框架里面最讓你吃驚的是什么
聽上去有好多事兒...
聽上去 Peter Steinberger 走的是另一個方向,反編譯 UIKit 來改 bug
我從來沒想過 Apple 也需要反編譯其他人的二進制來分析 bug
去年有無數的新東西面世,有沒有哪個讓你激動?你對 Swift 的出現興奮么?
你是指像 Framer 這樣的工具嗎?
你是否覺得 storyboard 也在朝這方面走呢?
我們需要更多像 Bret Victor 這樣的人來解決這種問題。
你之前提到說消費類軟件工程不是你感興趣的領域,那么這個領域之外你感興趣的是什么呢?
那么你在 Khan Academy 開始工作以來學到的最重要的事情是什么
為什么?
你之前提到過你在 Apple 有很好的導師,為什么他們如此出色?而你又從他們那學到什么呢?
在 Khan Academy,你跟你的團隊很快就適應了 Swift。你可以跟我們分享一下你的經驗嗎?
你認為 Swift 會對 Apple 框架的 API 造成什么影響呢?你認為短期內會有什么變化嗎?
或者我們可以有像 Reactive Cocoa 那樣的人,把它封裝的更好看一點...
既然你離開了 Apple,你也開始做更多寫作和演講方面的事情。你有什么其他的計劃嗎?
CocoaChina 2015-08-23 08:44:28
稱謂:
内容: