摘自Objc Issue #20 Interviews, 01.2015
原文地址 ;做者Andy Matuschakhtml
我想,和不少朋友同樣,是經過遊戲。實際上在我小時候一段時間內,我被禁止玩遊戲,因而我就常常去公共圖書館。在我九歲的時候,我發現那些所謂教你如何編程的書籍實際上只是衆多基本的源碼清單。還有一些講遊戲設計的書整本都是源碼。因此當我有機會玩遊戲時我會把這些源碼輸入計算機,固然常常會在半路出現語句錯誤而且我既不能識別錯誤信息也不知道如何修復。所以我只能重頭再來,直到我能玩上游戲。幾回這樣嘗試以後我意識到我有能力修改遊戲,自那之後事情就一發不可收拾了。
我想我是在十歲的時候學會了C++,由於那時人們都用C++寫遊戲;以後我嘗試去寫一個多用戶網絡(MUD)遊戲,這是我我的第一個大的項目。它運做得還不錯。程序員
在單人遊戲場景中,它運做的很流暢;可是顯然它還沒完成多用戶網絡遊戲中的多玩家模式。因此我想答案是沒有。後來我着迷於圖形、GL、3D渲染之類的事物。編程
我曾經作過一段時間的遊戲引擎,看了全部標準的OpenGL教程:旋轉立方體、顆粒引擎以及其餘諸如此類的事情,而後我開始製做真正的遊戲——那真是在13歲年紀瞎忙的活生生例子。我意識到那時沒有一個適用於製做遊戲內容的圖表工具,所以個人室友和我開始製做一個像素工具。當時它被叫作Pixen。那是我第一次接觸Cocoa並且它仍是開源的。當咱們推出1.0版本時,我想我仍是14歲,咱們去商場中蘋果商店的OS X Panther(應當是Jaguar?)的發佈會。他們那個時候開始搞發佈會了!咱們想要把Pixen的CD送給他們。網絡
我那時候就想成爲某種工程師。我曾癡迷於電力工程甚至高中的化學小實驗,因此這些方向也不妨是一個選擇,而軟件工程是我當時真正能着手作的。那個時候,我還稱呼其爲編程而不是軟件工程,而後一些人告訴我「不,不,你應該稱之爲'計算機科學'!」固然,那個時候我並無明白在計算機科學、軟件工程以及編程之間暗涌的有趣的文化差別,我只是以爲它們都是實用清晰的術語。可是咱們偶爾會犯某種程度上的誤用。app
儘管我是學計算機科學的,但我顯然不是一個計算機科學家。我會說某種程度上我是一個軟件工程師,一個深受計算機科學影響的軟件工程師。最近我會花約一半時間在幼兒成長方面作更多的研究工做,論文和書籍閱讀以尋找靈感看看咱們如何能這塊兒領域貢獻力量。框架
恩,有不少方面能夠來回答這個問題。我以前去了加利福尼亞理工學院,一所支持許多國家科學項目諸如NASA、DARPA以及諸如此類的學院。所以在那兒的討論老是關於人性化影響。當時有一個NASA官員過來對咱們說 是,大家是最棒和最聰明的。大家將進入世界上最好的研究性學院之一,並且大家將是享有特權的。全部對大家有益的機會都將開放給大家。如今,大家必須使用他們來創造價值,大家必須作一些有意義的事。」
當我來到更廣闊的軟件社區時,我是少數幾個畢業以後沒有去作研究的人。我大學剛畢業那時候我想要作出點事兒,但我又失望於多數商業軟件工程和銷售的追求以及所產生的影響,因此關於在什麼領域我能發揮所長我深思了好久。第一步顯然是明確個人方向:「什麼是影響、什麼是有意義的」。那時我已經深受物理家David Deutsch的影響,經過他我確認了我想要走的方向:延伸人類知識和能力範圍。以後我開始考慮對此我該怎麼作。
若是咱們能活得更久,那咱們對知識能觸及得更遠,所以在生物和化學工程方面有許多可能性。若是咱們有更好的試驗工具,咱們也能走得更遠——這也是爲何虛擬和合成的工具、虛擬現實以及人工智能領域如此吸引人。可是結合我的背景和機會,我認爲在教育領域作一些貢獻應當是我最明智的選擇,由於若是我能創造終生學習的一代人,那麼咱們會影響並吸引更多人來解決這些問題。工具
是,這是個人願景。學習的一大挑戰就是「元學習」(meta learning,即「學習如何學習」)。這種學習方式不會摧毀你的學習自信以及態度。若是我開發的工具可以使得畢業生們得到相同的數學成績,與此同時他們對待數學有更好的態度和認知並且對在以後生活中學習數學這件事更感興趣,那我就滿足了。學習
是,他們不夠好,並且從不少維度看他們都不夠好。最重要一點就是大多數人沒有辦法接觸到我剛剛所描述的那些機遇和資源,而這點偏偏是我認爲當前要改進並且是首要的,這就是爲何人人都能免費受教育是當前的使命。可汗學院的使命實際上就是爲人人創造世界一流的免費教育,所以當前咱們首先關注人人都能免費受教育,其次再是世界一流的免費教育。可是說到第二點,所謂的「世界一流」定義我還保留意見。
我有許多得到最好的教育經費並受指導於諾貝爾獲獎者的同窗,儘管如此,他們對於學習這件事依舊抱着糟糕的態度,並且心心念着一旦畢業就要結束學習。他們只想着趕快離開並找到穩定的工做,好在職場中讓大腦停工,由於他們被體系搞得着實精疲力盡所以他們的好奇心和才智已經被嚴重破壞。優化
認同。我想你應該問過大多數人他們對於數學的觀點,他們不是說「噢,數學真無聊」就是「我不擅長於數學,我不是個數學家」在科學學科方面,你獲得的迴應也會相似。可是若是你問人們關於文學的事情,或許他們會討論一些自認爲情節有趣的書籍,然而那也只是他們在學生時期經常閱讀罷了,至於如今可能早已中止。所以我想我最但願推動的進步是改變所謂「教育在大學以後就結束」的固有觀念,這不是真正意義上的科學難題,也是我某種程度上對於「軟件工程師」這個標籤有所猶豫的緣由,確實軟件工程是我專攻並積累經驗的領域,但我追求的目標與志向並不是這個方向。動畫
目前,標準的學習方法已經約定俗成。個人意思是你讀一本教科書,那麼你被動地要去吸取當中的知識;或者你看一段視頻,還得看演講類的內容。意味着若是你要學習,你得坐下來並進行吸取消化。或許以後你有錢了還能夠來個對話交流什麼的。在你畢業以後,你必須本身去創造這樣的學習環境。
對於所謂的「建構主義學習環境」我真的很好奇,這是幾十年前的一位學問研究者帕波特定義的術語。在一個建構主義學習環境,學生自發性地創造知識,而不是一味地被動進行課本閱讀和吸取。在這些模型中,更多的是一個環境被建構好,爲了能理解一些知識,其特性將激勵或要求你去熟練使用。
帕波特研究的其中一個例子,他努力使用Logo語言進行關於抽象與程序化思惟的教學,而不是編程自己。他還有一個教室裏放着Logo turtle的標誌,那時候還有一種機械海龜能夠真的在紙上畫畫。因此教室周圍掛滿了機械海龜畫的畫,一些畫上是源代碼,一些不是。這些畫也會隨着時間因學生的更替而變換,比方說一個學說可能看到一朵花而後說:「哇,我喜歡這幅圖,我能擁有它嗎?」而後老師會說:「好呀,固然能夠,不過你得先輸入代碼,海龜會照着代碼畫出這個圖。」而後學生會說:「沒問題。」接着他就開始做畫。以後可能他會看上另一幅畫,可是那幅畫沒有源代碼,那就只能本身想轍了。
在建構主義學習環境中,設計其餘圖示也是爲了要求學生進行創造前要先理解。所以,創造性環境就這樣被塑造出來了。我正在研究並且極可能會研究不少年的假說,實際上是容許人們自主建立知識,我想能看到這樣的產出首先我會很高興;其次,他們在「元認知」上也會大幅提升,在自我認知、學習態度以及學習興趣上都會比其餘同窗高出很多。
另外一個幼兒成長研究者 Piaget 在這方面有不少研究成果,他說青年思惟開發階段重要的事情之一就是自主性訓練,並且這裏的自主性相較咱們平時討論的又要寬泛不少。它不是指「我能自由地玩耍」而是指「我能對我生活中全部正在發生的事情作決定」。這其實和一些人老是提醒你要如何分配你的時間,強調行爲規則的權威性是相悖的。打個比方,對於「Bobby玩遊戲的時候做弊了」這件事不自主的回答就是「好,讓我來和他說」,相反地,自主性的回答會是「那你和Bobby說了什麼嗎」。我想自主性的訓練在各方面都很重要。有一些研究代表這會在短時間內有更好的產出,可是我相信從長遠來看這將引導出更優秀的思考者。
我對於那些一成天的日程被安排滿滿的狀況保持懷疑。若是教育者可以日復一日地,優化學生的學習環境來修正學習進度,我認爲這反倒更加積極。再確切一些,好比我想與其把全部人類學知識的目錄按重要程度進行分類一股腦給學生,倒不如把全部人類學知識當作一個書架,按難易程度由低到高進行排放。
恩,我懷念那兒的人,這真的很重要。實際上這也是目前我對於這個行業真正感到失望的地方。那麼多有才能的人被這些巨型公司套牢,而他們只是偶爾被良好利用,更多時候他們只是一臺機器的齒輪,但他們的聰明才智徹底能作更大更深遠的影響。我不是說必定要來個人項目裏幹,而是更寬泛地。在情感角度,我會難過是由於我真的懷念他們,比方說懷念當時在NeXT的時候和那些經驗豐富的同事共同激發出來的對話。然而我也但願他們的影響可以更加深遠。
填補這段差距的一個例子是我在16歲的時候完成的一個名叫Sparkle的框架。當時它教會我認識到框架開發的一些事實,換句話說當你修改你們正在用的API,他們就會生氣。這是框架開發的事實之一,但坦誠來講其實我去Apple以前我不清楚本身在幹嗎。我完成了學業,有了更大的野心,不過蘋果看起來彷佛是很是好的學習平臺,它曾經是,它如今依舊是。所以我會對任何與我有相同抱負的人給予同樣的建議。當時與我共事的同事都是有過十幾年編譯框架經驗的人,我想我應該是團隊中墊底的。沒辦法,我被逼着要快速的學習和理解許多在設計框架的時候所須要的獨特的思考方式,特別是考慮框架中的二進制兼容,而先前的Sparkle並無。幸運的是,我周圍的每一個人都很慷慨地付出時間與精力來指導我。在犯過許多許多錯誤以後,我終於明白了我都作了什麼,而幾年後當我離開,可能我再也用不到那些技術了。
我想「二進制兼容」應當是我最吃驚的。當時我並無理解當中的難點與複雜程度,你能夠想象下:在iOS8裏頭按鈕是白色背景,但在iOS7中,它是透明的。iOS8尚未被髮布,因此這必定是咱們的問題。因而你要開始一點點鑽研,你意識到也許在iOS7中調用的方法是來控制這個的,但這個方法在iOS8中已經不調用了。爲了去搞清楚到底怎麼回事,咱們要迅速去分解、辨析,發現這是第三方的代碼同時咱們還缺乏源代碼。
大約一半的時間,一些人在作一些可恥的事情以求達到目的,而剩下一半時間咱們要以很是規的行爲來進行修改,所以咱們有理由須要去增長防護措施。
沒錯,就好像偵探的活兒同樣。
是阿,固然了。每次發佈都很祕密以致於咱們不能問:「嘿,Facebook的哥們兒,你爲何要這麼作?」咱們必須得本身搞清楚。在這一點上,我很敬佩Peter和他的團隊作的事。我以爲那是很棒的事,也很想去看到更多這樣的事。我很想的
是阿,如同我如今做爲第三方開發者,仍是不得不常常反彙編UIKit。由於我就像這樣:「UIKit,到底怎麼回事兒?」那麼得到答案的最簡單方式就是分析反彙編。
是,我得說它們確實讓人激動。不過當咱們談論讓我真正感到激動的東西,它並再也不消費軟件工程行業。可是就能幫助我完成工做的工具而言,我感到最興奮的品類是真正的交互式原型工具,好比你要作之前歷來不存在的工具,或者以前有過概念可是尚未工具能真正實現交互。因此咱們大部分人依舊只在Photoshop中進行設計而已,當你在Photoshop中設計時,你創造的東西看起來就像是Photoshop的產物。我記得以前在Apple,我能看得出來自於Photoshop、After Effects仍是現實模型的不一樣需求的區別,這之間有很大的區別。如今已經有一些工具可以實現這一點,我想它們都尚未絕對成熟完善,但我很熱忱地關注着這些進步,也但願能有所貢獻。
是阿,Farmer是一個很是不錯的例子。我對剛被Google收購的Form很感興趣,以及Origami,固然也頗有趣。我在蘋果參與了一個原型工具的內部項目,它再一些方面更好一些,在一些方面又稍遜一籌。每一個工具都有它的優缺點。實際上咱們還編排了一個關於「你能夠用這個工具幹這個,你能夠用這個工具幹那個」,後來咱們發現咱們不得不來回挑選。我感受除非它們作已有工具在作的事情,不然它們並無在其餘方面有特別優秀的表現。
實際上我不這麼看,但我得解釋一下。關於交互,如今有離散模式和連續模式。像鼠標點擊這一類交互就是離散模式的交互而手勢這一類交互就是連續模式的交互。類似地,你的應用也有離散狀態和連續狀態。例如滾動就是連續的而導航堆棧中導航到其餘層級就是離散的。
Storyboards只容許你操做控制那個四方形中的離散部分,所以當你點擊屏幕上的一個部位,你就能經過離散轉換到徹底不一樣的地方。可是我發現這是最沒有意思的交互方式,坦誠來說我認爲咱們的用戶接口主要被那樣的交互方式所控制是由於咱們沒有工具容許咱們思考其餘的交互方式。
可是從iOS 7起,這種離散模式的邊界也逐漸變得模糊。舉個比方,點擊一個單元格的時候可以展開單元格如下的內容。這是很是瑣碎的例子,然而storyboard卻很難呈現。
確實,這也是爲何我但願少些人來作照片分享類的app。
我讀了不一樣領域的不少論文,至今我仍在思考這件事。就目前我最感興趣的是幼兒成長或教育、教學模式。最讓我激動的是我讀到一篇調查,一個只有五歲孩子的班級,老師並無進行常規的數學教學,而是經過不斷改變的一系列活動來塑造學習環境進行施教,這些活動都是遊戲。一年之後,他們的評估代表儘管他們沒有受到正式的算術教學,可是他們都能答對問題並且具有優秀的認知。這件事真的讓我很是激動。
帶團隊可不容易…
這是一項我沒有經驗、且大相徑庭的技能。在軟件行業裏,咱們老是讓有所貢獻的工程師去擔當領導的角色,並期待他們能表現優異,顯然這是大相徑庭的技能,所以咱們必需要清楚這點並加以欣賞。這裏頭有不少學問。
首先他們願意慷慨地花之間來指導我。在Apple挑戰老是無處不在,但Apple的問題在於它的文化並不看重導師的價值。沒有獎勵機制,並且指導和學習也沒有融入到企業文化中。
但無論怎樣,我真的太幸運能有人願意花不少時間來指導我,並且當我在項目中犯了極其嚴重的錯誤的時候他們也會花時間來指導我。那麼,是什麼提升了效率?應該是他們的經驗吧。如今這個行業是個有趣的領域,由於這裏充斥了應屆生,也正是這些應屆生在Twitter發聲、在會議上演講。可是這個行業的造成又不是這一時半刻,確定有不少在這個領域具有15到20年專業經驗的軟件工程師,他們不多發聲,甚至你很難督導他們的文章。由於他們被公司雪藏,所以他們鮮爲人知,但他們確定懂得不少。
咱們擁有20000行的Swift代碼,以及每一個項目都有四個開發者,都用Swift進行編譯。因此那些問題或者咱們稱之爲問題的東西其實是實用主義與理想主義的衝突。我確信語言自身的問題只是暫時的,實際上它們並不會形成宏觀層面的影響;對於你在六個月內作出的app來說,這些問題一樣不重要,所以儘管忽略個人抱怨。
只要專業軟件開發以及生態系統可以長期健康發展,我想這門語言會是很是卓越的貢獻,而頭幾個月的跌跌撞撞根本不算什麼。
從積極的一面來講,Swift幫助咱們寫出更清晰的代碼。這是我讀Swift接口時感到最高興的事。當我讀Swift的block代碼時,我對正在發生的以及即將發生的有了更清晰的理解。我能夠看到返回值而且能從中理解更多。我能使用枚舉法來更精準地爲系統狀態建模:更精確的是,咱們可使用值類型來約束、限制從屬關係;更寬泛的是,我贊同把UIKit當作庫而不是框架的模式。
就問題而言,若是沒有工具,工程師也沒有去深刻解析。實際上我恰巧以爲Swift開發團隊是Apple裏最棒的隊伍,可是它還沒完成。如今它都是bug,常常崩潰,時不時還產生錯誤的代碼。更爲要緊的是,它真的好慢,至關至關慢。對我而言,缺乏增加式編譯是目前最大的問題。咱們構建一個有UI的應用,咱們得花上與思考如何促進學習同樣的時間來打磨應用的交互和動畫。並且每次要花上將近兩分鐘的時間才能看到效果然的太傷了,這不只效率低下,還挫敗士氣。每一個人老是生氣。更糟糕的是,它讓咱們變得懈怠。咱們再也不想去作改動,因此我絲絕不會驚訝於Swift實現的UI比Objective-C實現的UI效果更差,由於這上面的迭代簡直讓人抓狂。但這是暫時的,其實我絲絕不擔憂。他們清楚這些問題並且會去修復。只是咱們沒有辦法很好地管理預期,不是出於惡意地,可是我確實以爲蘋果以前不瞭解這些問題並且沒有作過這麼大型東西的經驗。
顯然實際上我沒有什麼內部確切信息,我也只是猜想而已,但我想這會是個長期公稱。至少當我在蘋果的時候,團隊花了大把時間來支持諸如新屏幕尺寸或者新硬件的市場需求,而不是維護和提高現有框架。那些工做已經花了大把時間了,因此作任何重要舉動時都要慎重考慮,因此我不認爲這會很快就來。
我認爲咱們快進到將來的十年後,API將會徹底不同。我堅信這會實現,不然會讓人極其失望。即便是一年之後,我想大家也必定能拿到更優註釋的頭文件。
沒錯,短期內必定會有的。Facebook如今就在作他們的組件項目(Component project),不過這不是Swift,是C++,我以爲這很勇敢,想法很贊。React是很不錯的設計。而我對蘋果的怨言之一也正在此,由於蘋果的文化不評估學習的價值,所以沒有人閱讀。我實際上是借鑑當科學家討論閱讀時他們所表達的意思。如今沒有人讀刊物,沒有人讀報紙,沒有人知道外面在發生什麼。正如人們不知道React以及諸如此類的東西,這可真讓人沮喪阿。
無論怎樣,我認爲它們都是很是讚的事物並且我堅信會有人把UIKit以及其餘框架當作庫來對待並把它們包裝得更好。然而,除非蘋果親自來作,不然不會被良好的適應,它們會老是落後而且感受很不匹配。
基本上仍是那樣。我但願能夠發佈更多開源的東西,過去我在這上頭有過教訓。不過至關有趣的是,當你發佈開源項時,人們還指望你能維護它。我想咱們對大衆對開源軟件的期待沒有明確的約定。有一些開源軟件有自身的社區能被很好地維護,而有一些開源軟件僅是做爲教育或興趣的目的被分享,就沒有被真正地維護。至於我,基本上只有精力作到後者,由於,坦誠來講,軟件工程目前不是我感興趣的,要努力解決問題的部分。
(完)