Scott Guthrie 是 Microsoft 開發(fā)事業(yè)部的總經(jīng)理。他領(lǐng)導(dǎo)著負(fù)責(zé)構(gòu)建 CLR(公共語言運(yùn)行庫(kù))、ASP.NET、WPF (Windows Presentation Foundation)、"WPF/E"、Windows Forms、IIS(Internet 信息服務(wù))7.0、Commerce Server、.NET Compact Framework 和 Visual Studio Web 和客戶端開發(fā)工具的開發(fā)團(tuán)隊(duì)。在編寫新的《架構(gòu)師雜志》評(píng)述系列文章期間,Ron Jacobs 就職業(yè)生涯及對(duì)體系結(jié)構(gòu)的看法這兩個(gè)主題與 Scott 進(jìn)行了一次訪談。
RJ:有人認(rèn)為您所從事的“是一份很棒的工作”,今天就讓我們來聊聊您和您的職業(yè)。您目前在 Microsoft 負(fù)責(zé)哪方面工作?
SG:我現(xiàn)在負(fù)責(zé) .NET 開發(fā)人員平臺(tái)組。其中包括 CLR(公共語言運(yùn)行庫(kù))、.NET Compact Framework、IIS(Internet 信息服務(wù))、ASP.NET、Atlas、Commerce Server、Windows Presentation Foundation、Windows Forms 和用于在 Visual Studio 中開發(fā) Web 應(yīng)用程序的工具。
RJ:哇,涉獵廣泛!
SG:也樂趣無窮。這其中包括我們的核心應(yīng)用程序模型、運(yùn)行庫(kù)、工具及其基層的所有引擎。涵蓋了許多絕妙的技術(shù),有許多值得研究的東西。
RJ:大多數(shù)人會(huì)因?yàn)?ASP.NET. 而記住您。讓我們回到您初到 Microsoft 的日子。您最初都做些什么?
SG:我最早是在 IIS 團(tuán)隊(duì)工作,那是在 96 到 97 年,主要從事核心 Web 服務(wù)器技術(shù)的研究工作,并參與了一個(gè) IIS 版本的研發(fā)。IIS 4 發(fā)布后,我們開始研究下一代的 Web 編程模型組件。我們當(dāng)時(shí)認(rèn)為,“我們可能已經(jīng)做到極至了。就功能集來說還能有什么要做呢?”
于是,我們開始和眾多的客戶溝通,仔細(xì)了解他們?cè)跇?gòu)建哪些類型的應(yīng)用程序。我們很快就意識(shí)到需要做的事還有很多。人們當(dāng)時(shí)都在為代碼/內(nèi)容分離以及如何編寫干凈代碼這兩個(gè)問題所困擾。我們常開玩笑說我們編寫的代碼“一次編寫,終身不讀”。從工具和運(yùn)行時(shí)管理的角度來講,要使當(dāng)時(shí)現(xiàn)有的基礎(chǔ)結(jié)構(gòu)真正良好地運(yùn)行存在許多挑戰(zhàn)。為了實(shí)現(xiàn)這個(gè)目標(biāo),我們成立了一個(gè)小組來專門研究針對(duì) IIS 的未來體系結(jié)構(gòu)。正是這個(gè)小組發(fā)明了我們隨 Windows Server 2003 引入的 HTTP.SYS 內(nèi)核驅(qū)動(dòng)程序。我和另一個(gè)同事一起,開始研究 Web 編程模型組件并編寫了 ASP.NET 最初的原型。
RJ:你們當(dāng)時(shí)似乎正在考慮將這再提高一個(gè)層次,利用在那時(shí)還相當(dāng)神秘的某種東西。我還記得 .NET 的那些日子;你們那時(shí)稱它為 ASP+。
SG:我們最初叫它 XSP;總有人會(huì)問 X 代表什么。那時(shí)它真的什么都不代表。XML 以它開頭;XSLT 以它開頭。一切美好的事物似乎都從 X 開始,因此我們最初會(huì)這樣命名。在最初的六個(gè)月中,我們沒有使用 .NET。那時(shí)候還沒有 CLR(它大約是和我們一起起步的),因此我們大部分的原型設(shè)計(jì)使用的都是 C++、JavaScript 和 ActiveScript 腳本引擎。我們知道我們需要一個(gè)面向?qū)ο蟮沫h(huán)境,我們非常喜歡受管編程模型在垃圾回收、精細(xì)封裝和面向?qū)ο蠹夹g(shù)方面的特性。盡管如此,我們開始編寫生產(chǎn)代碼時(shí)實(shí)際上使用的卻是 C++,因?yàn)楫?dāng)時(shí)的確沒有一個(gè)理想的運(yùn)行時(shí)平臺(tái)來構(gòu)建代碼。我們就這樣編寫了兩星期,直到和 CLR 團(tuán)隊(duì)不期而遇;當(dāng)時(shí)這個(gè)團(tuán)隊(duì)在公司內(nèi)部還沒有上層產(chǎn)品的合作伙伴。他們唯一擁有的編譯器是叫做“simple managed C”的東西,我們親切地稱它為“smack”。我們最終決定,“我們或許應(yīng)該以它為基礎(chǔ)”。這要冒極大的風(fēng)險(xiǎn),我們的團(tuán)隊(duì)在那時(shí)總共才三四個(gè)人。我們之所以能夠賭一把,主要因?yàn)闆]有人真正在乎我們的成敗。謝天謝地,我們做到了,而且取得了巨大的成功。后來的事可以說是眾人皆知了。
RJ:我還記得那時(shí)候的事。CLR 剛剛問世的時(shí)候,幾乎沒有人愿意下這個(gè)賭注。許多團(tuán)隊(duì)都在說“我不這么認(rèn)為”,但是你們做到了,而且取得了驚人的成績(jī)。
SG:是的,盡管在服務(wù)器上實(shí)現(xiàn)垃圾回收在今天已經(jīng)司空見慣,但整個(gè)想法在當(dāng)時(shí)卻著實(shí)令人們嚇了一跳。他們說:“不可能構(gòu)建出能在后臺(tái)運(yùn)行垃圾回收的應(yīng)用程序。服務(wù)器永遠(yuǎn)都不會(huì)伸縮”。當(dāng)時(shí)出現(xiàn)過很多非常糟糕的情況。從項(xiàng)目的角度講,我們所做的一件事取得了巨大的成功。我們說:“我們要拿托管代碼賭一把,它不會(huì)成為某些本機(jī)內(nèi)容的打包程序。我們要將它深深地置入到平臺(tái)之中。我們 95% 的代碼將用托管代碼編寫”。
我們這樣做有兩重原因。一是要利用其提供的擴(kuò)展性,真正將面向?qū)ο蟮臄U(kuò)展性深深置入到平臺(tái)中。二是,我們知道客戶應(yīng)用程序?qū)⒉捎猛泄艽a,而且相對(duì)于客戶所占的份額而言,我們?cè)谡{(diào)用堆棧方面的代碼的比例相對(duì)較小。如果我們連用托管代碼編寫代碼都沒想到,還認(rèn)為客戶應(yīng)用程序能輕易成功,那簡(jiǎn)直就是自欺欺人。它有著巨大的促動(dòng)作用。從第一天開始直到創(chuàng)建出較為復(fù)雜的示例,我們一直在根據(jù)需要不斷調(diào)整核心的 CLR 引擎,當(dāng)我們開始著手在上面構(gòu)建更為復(fù)雜的客戶應(yīng)用程序時(shí),我們的工作轉(zhuǎn)化為客戶巨大的成本節(jié)約優(yōu)勢(shì)。這是一次不錯(cuò)的賭博。
RJ:您將這看成是推動(dòng)引擎改進(jìn)的方式,這很有意思。您曾說:“我們不但要做這件事,還要通過這件事進(jìn)一步改善引擎”。
SG:我想這是一次風(fēng)險(xiǎn)很高的賭博,但這種方式確實(shí)很奏效。這在很大程度上得益于我們是一個(gè)小團(tuán)隊(duì),而且是從一個(gè)全新的代碼庫(kù)入手。如果我們的團(tuán)隊(duì)再大一些,或者擁有一個(gè)現(xiàn)有的大型舊代碼庫(kù),實(shí)施起來可能會(huì)更加困難,因?yàn)?COM 互操作性在那時(shí)還根本不存在。但我們是從頭開始,而且開始時(shí)人員較少,這些確實(shí)有助于我們將這些核心的改進(jìn)深入到引擎內(nèi)部。隨著我們的不斷壯大和功能集的不斷翻新,我們得到了源源不斷的回報(bào)。
RJ:我想管理層肯讓你們?nèi)L試真的很不錯(cuò)。
SG:這的確是一場(chǎng)賭博,但卻是經(jīng)過周密計(jì)劃的。如果我們能夠成功將會(huì)帶來巨大的優(yōu)勢(shì),但不利的方面是我們只有三四個(gè)人,在接下來的一年我們總可以嘗試一些新的東西。Microsoft 經(jīng)常下這樣的大賭注,而且往往都會(huì)取得巨大的成功。當(dāng)然偶爾也會(huì)失敗,而且敗得一塌糊涂,但作為公司來講,我們會(huì)盡可能確保將賭注押在一些關(guān)鍵的環(huán)節(jié)上。
RJ:您必須說服所有人允許你冒這個(gè)風(fēng)險(xiǎn)嗎?或者要比這簡(jiǎn)單得多?
SG:我們的確不得不說服很多人朝著這個(gè)目標(biāo)努力。在項(xiàng)目早期,我們所做的就是力爭(zhēng)讓運(yùn)行代碼在原型上運(yùn)行,以展示給他人。通常你在處理一個(gè)全新的項(xiàng)目或者做之前沒有人做過的事兒時(shí),將許許多多聽起來還不錯(cuò)的 PowerPoint 幻燈片整理起來非常容易,但真實(shí)地展示代碼并讓人們親身經(jīng)歷這些代碼的運(yùn)行是尤為重要的。不僅可以用原型證明其真實(shí)性,而且在這一過程中你也可以學(xué)會(huì)很多。
我和我的團(tuán)隊(duì)努力去做的一件事就是及早構(gòu)建原型,構(gòu)建示例應(yīng)用程序,尤其是可以讓客戶親身體驗(yàn)的演示應(yīng)用程序,我們要向客戶說,“看,你可以這樣來構(gòu)建應(yīng)用程序”。我們?cè)O(shè)法盡早地做這件事,以便發(fā)現(xiàn)哪些環(huán)節(jié)可行,哪些不可行,并相應(yīng)做出響應(yīng)。ASP 項(xiàng)目開始的一個(gè)半月后,我寫出了一個(gè)原型,讓人們親身地感受了一下。這里有組件控件驅(qū)動(dòng)模型(那時(shí)我們還沒有叫它控件,它們是聲明性的標(biāo)記或組件),這里有 Web 編程的事件驅(qū)動(dòng)方法。我們得以構(gòu)建出應(yīng)用程序,并很快發(fā)現(xiàn)我們計(jì)劃中的一些事情的確無法用代碼編寫出來。與此同時(shí),我們也了解到“這項(xiàng)功能或那項(xiàng)功能確實(shí)很棒”,我們就這樣不斷周而復(fù)始,反復(fù)迭代。在我們?cè)噲D讓人們知道我們并不是瘋子的時(shí)候,這一過程發(fā)揮了很大的作用。我們展示了我們的代碼,而人們也得以親身體驗(yàn)。這仍然是一次賭博。
RJ:這聽起來像是測(cè)試驅(qū)動(dòng)開發(fā)的思路。我們完成一些短迭代周期;發(fā)現(xiàn)一些行之有效的東西。我們會(huì)使用自己的作品,針對(duì)自己的 API 編寫代碼,以便了解它們的使用效果。
SG:原理的確是相同的。我將測(cè)試驅(qū)動(dòng)開發(fā)的意義劃分為兩層:第一,它是用來盡早提升質(zhì)量的方法,第二,它會(huì)為在不必?fù)?dān)心回歸的情況下重構(gòu)和調(diào)整代碼庫(kù)奠定基礎(chǔ)。在開發(fā)生產(chǎn)代碼時(shí),我們內(nèi)部當(dāng)然會(huì)遵循這個(gè)基本原理。我想甚至在開始編寫生產(chǎn)代碼前的原型階段也是有意義的。對(duì)于 ASP.NET.,那是我們成功的之處。那時(shí)我們就決定要拋掉后幾個(gè)月中所要編寫的每行代碼。我們就此達(dá)成一致。我們不會(huì)說:“哦,留著這個(gè)做修改吧;我們可以把它整理出來”。不。我們要把它徹底拋棄。我們會(huì)在某個(gè)時(shí)候?qū)⑦@個(gè)子目錄徹底“刪除”,那樣一來,我們就可以更加大膽地去嘗試新事物。我們不必戰(zhàn)戰(zhàn)兢兢地去保證每樣?xùn)|西的穩(wěn)定性,就因?yàn)樗鼘⑦M(jìn)入最終版本。
事實(shí)上我們這樣做了幾個(gè)月,然后說:“我們做完了,把它刪除;從頭開始吧;現(xiàn)在我們來編寫全部的生產(chǎn)代碼并且要確保質(zhì)量”。我想很多團(tuán)隊(duì)都可以從這一點(diǎn)上受益。保證刪除原型代碼是最最艱難的事。項(xiàng)目通常都是伴隨著“嗯,有點(diǎn)相近”的思維而開發(fā)出來的。從原型入手并且確??煽啃允呛茈y的。我堅(jiān)定地認(rèn)為應(yīng)該從原型階段入手并隨后將它刪除。
RJ:這說明從原型階段,我們應(yīng)該著眼于學(xué)習(xí),而不應(yīng)看重這些文件和代碼。
SG:每次做項(xiàng)目的時(shí)候,只要是重新編寫,無論是否從零開始,代碼都會(huì)變得更好。這在一定程度上是因?yàn)槟懔私饬饲耙环N方法的問題和缺陷,并且能夠進(jìn)行反思并做出改進(jìn)。難就難在你不能一次又一次輕松地做到這一點(diǎn)。但是,當(dāng)你最先涉足一個(gè)項(xiàng)目或是一個(gè)全新領(lǐng)域,根本不知道該如何從頭開始研究出最終產(chǎn)品時(shí),專門花一段時(shí)間來構(gòu)建原型并不斷嘗試是至關(guān)重要的。
RJ:有人稱之為“體系結(jié)構(gòu)刺探”(architectural spike)。這是一個(gè)全新的領(lǐng)域,有待于我們進(jìn)一步探索。我們來換個(gè)話題,那在來 Microsoft 前您做過什么?
SG:實(shí)際上我大學(xué)一畢業(yè)就來 Microsoft 工作了。在大學(xué)期間我就在 Microsoft 實(shí)習(xí)。我在大學(xué)和高中期間參與了幾次創(chuàng)業(yè),搞過一些開發(fā),并以此為樂,但是大學(xué)畢業(yè)后我還是直接加入了 Microsoft。
RJ:我們和許多對(duì)結(jié)構(gòu)體系感興趣的人都交談過。好像幾乎沒有人是只做些設(shè)計(jì)而根本不編寫代碼的純粹的架構(gòu)師。多數(shù)人都是多面手:他們有時(shí)參與開發(fā),有時(shí)進(jìn)行架構(gòu)設(shè)計(jì)。對(duì)于一直在做開發(fā)但打算更多進(jìn)行架構(gòu)方面構(gòu)思的人,您有什么建議?
SG:編寫代碼對(duì)于架構(gòu)師而言是非常重要的。你不一定要簽入生產(chǎn)代碼,但要不斷嘗試新技術(shù)、新方法,并體會(huì)系統(tǒng)的工作方式。最近我并沒有編寫大量的生產(chǎn)代碼,但我每天要花一或兩小時(shí)編寫代碼??梢允鞘纠?、原型或一些有趣的私人項(xiàng)目;無論什么,我都要進(jìn)行嘗試,思考事物的構(gòu)建方式。從代碼架構(gòu)師的角度來說,動(dòng)手實(shí)驗(yàn)非常重要。
我的另一條建議是要研究核心系統(tǒng)理論,探索如何架構(gòu)高度可靠的系統(tǒng)。想一下你要考慮的一些原則,并應(yīng)用到實(shí)際工作中。這并不是說要考慮具體的代碼內(nèi)容,而是思考簡(jiǎn)易性、可靠性或容錯(cuò)性。這些因素在成功的系統(tǒng)中起著核心作用;無論是客戶端應(yīng)用程序、服務(wù)器應(yīng)用程序還是游戲程序,都是如此。一個(gè)認(rèn)真考慮這些原則并配以良好編碼背景的架構(gòu)師可以在很大程度上給團(tuán)隊(duì)以指導(dǎo)。
這些原則并不是要探索出一個(gè)向?qū)Щ蚴情_發(fā)不錯(cuò)的新東西,而是要研究 Windows 或 Unix 應(yīng)用程序中進(jìn)程地址空間的工作方式。什么是線程技術(shù)?如何深刻理解它在多處理器或多核系統(tǒng)上的工作?要消化吸收這種類型的知識(shí)、考慮由此衍生的結(jié)果,花些時(shí)間專門研究未來的趨勢(shì)(即從硬件和軟件角度研究技術(shù)未來的走向),并考慮如何進(jìn)行修改并為我所用。這就是我的建議。
RJ:Microsoft 有開發(fā)人員、項(xiàng)目經(jīng)理和架構(gòu)師。人們通常對(duì)架構(gòu)師這一角色充滿好奇。您希望架構(gòu)師在團(tuán)隊(duì)中發(fā)揮怎樣的作用?
SG:我們希望或期待架構(gòu)師能夠在團(tuán)隊(duì)中擔(dān)負(fù)起幾個(gè)責(zé)任。一是我剛剛談到的,要在體系結(jié)構(gòu)、開發(fā)和軟件原理方面擁有非常深厚和堅(jiān)實(shí)的背景。我們希望這樣的背景會(huì)將一些有用的東西逐步滲透,給其他團(tuán)隊(duì)成員帶來潛移默化的影響。尤其是在指導(dǎo)年輕和資深的開發(fā)人員時(shí),走廊里的對(duì)話或者辦公室中的閑談都可以給團(tuán)隊(duì)以很大程度的指導(dǎo)。
我們希望架構(gòu)師能夠從技術(shù)角度為產(chǎn)品的未來鋪平道路。架構(gòu)師通常要做一些更高級(jí)的原型構(gòu)建工作并研究產(chǎn)品的開發(fā)方向。我們希望他們就研發(fā)方向提出建議,就實(shí)現(xiàn)而言,要求他們既要探索下一代產(chǎn)品,又要著眼于當(dāng)前產(chǎn)品,以發(fā)現(xiàn)我們應(yīng)進(jìn)一步改進(jìn)的地方。例如,我們應(yīng)該將哪些地方的分解略加調(diào)整?我們需要在代碼庫(kù)中做些什么來進(jìn)行改進(jìn)?
RJ:除了深厚、堅(jiān)實(shí)的技術(shù)技能外,您認(rèn)為一個(gè)成功的架構(gòu)師還應(yīng)具備哪些品質(zhì)?
SG:至少在 Microsoft,對(duì)于那些想要在架構(gòu)領(lǐng)域有所建樹的具有深厚背景的技術(shù)人員來說,最難的是要保證將自己的技術(shù)技能與公司團(tuán)隊(duì)內(nèi)部和團(tuán)隊(duì)之間的協(xié)調(diào)工作能力相結(jié)合。
一些軟技能更難培養(yǎng),這就意味著架構(gòu)師需要?jiǎng)邮謱?shí)踐,但還要注意不要危及開發(fā)人員或其他團(tuán)隊(duì)。他們也應(yīng)當(dāng)避免“這是我的,那是你的”這樣的對(duì)話。架構(gòu)師必須能夠自如地跨多個(gè)團(tuán)隊(duì)開展工作。他們?cè)诠ぷ鲿r(shí)注意不要給人留下這樣的印象:那就是架構(gòu)師只是暫時(shí)投身于最有趣的問題,然后在遇到難題時(shí)便會(huì)抽身而去。其他團(tuán)隊(duì)成員必須相信架構(gòu)師是忠于團(tuán)隊(duì)的,與團(tuán)隊(duì)之間保持長(zhǎng)期的合作關(guān)系,會(huì)對(duì)問題的解決有所貢獻(xiàn)。這些是架構(gòu)師需要培養(yǎng)的技能。具有最強(qiáng)影響力的資深架構(gòu)師能夠?qū)⑸詈竦募夹g(shù)和設(shè)計(jì)技能與人際交往技能和協(xié)作能力結(jié)合在一起。
RJ:許多人都在說,如今社會(huì)變化的速度越來越快,新生事物無時(shí)無刻不在涌現(xiàn)。您也提到過跟上發(fā)展的腳步是何等重要,但是每天的時(shí)間是有限的。您是如何跟上發(fā)展的腳步的呢?
SG:這很困難,在開發(fā)領(lǐng)域更是如此。就日新月異的創(chuàng)新步伐和信息流動(dòng)的速度而言,我實(shí)在想不出有哪個(gè)時(shí)代會(huì)像現(xiàn)在這樣快?;叵?90 年代的 Internet 大戰(zhàn),Internet Explorer 與 Netscape 的競(jìng)爭(zhēng)硝煙四起。那個(gè)時(shí)候,我們好像不斷地在發(fā)布新的產(chǎn)品,又總會(huì)有新的東西涌現(xiàn)。
從開發(fā)的角度講,我想我們現(xiàn)在所處階段的發(fā)展速度比那個(gè)時(shí)候更快。要跟上時(shí)代的腳步當(dāng)然十分困難。你必須找時(shí)間去不斷充電。你必須騰出時(shí)間專門關(guān)注業(yè)界的動(dòng)態(tài)。我想就這點(diǎn)而言博客是一個(gè)很好的機(jī)制。我訂閱了 Bloglines,這是一項(xiàng)不錯(cuò)的免費(fèi)服務(wù)。我大概訂閱了 300 或 400 個(gè)博客,我盡量每天早晚花 20 到 30 分鐘閱讀所有人的帖子。這樣可以很好地了解當(dāng)今的熱門話題和有趣的想法。
在某種程度上,為了跟上發(fā)展的腳步,還要每天花一小時(shí)專門構(gòu)建原型,用自己的產(chǎn)品或其他技術(shù)來進(jìn)行各種嘗試;充分掌握現(xiàn)有的組件并知道如何使用它們。在研究任何新技術(shù)、API、方法或編程手段時(shí),還有一項(xiàng)重要的工作,那就是不僅要仔細(xì)研究有趣的事物本身,而且還要盡量推演出其有用的原則,以便你能夠在別處加以應(yīng)用。因此,如果你研究的是一本有關(guān) Java 重構(gòu)的書,很好。書中會(huì)講到許多具體的 Java 重構(gòu)技術(shù),但有哪些更為廣義的重構(gòu)概念是你能夠消化理解并應(yīng)用于 VB 或 C# 的?如果是針對(duì)某項(xiàng)專門任務(wù)的非常理想的 AJAX JavaScript 框架,也很好?,F(xiàn)在,回想一下,盡量找出它的哪個(gè)方面可以應(yīng)用于其他 JavaScript 框架。架構(gòu)師應(yīng)當(dāng)善于研究某些事物并推演事物本身及其中蘊(yùn)涵的有趣方面,而不是僅僅關(guān)注于某個(gè)個(gè)別的技術(shù)元素。
RJ:回顧這些年在 MS 的經(jīng)歷,您有什么遺憾的事情嗎?
SG:回首往事,總會(huì)有些想要換種做法的事情。有時(shí),可能是曾做過的技術(shù)工作,是某種功能的實(shí)現(xiàn)方式,你會(huì)想“每個(gè)人都濫用了那項(xiàng)功能”?;蛘咚麄冏鍪碌姆绞奖畴x了我們的預(yù)期。當(dāng)然,在我們構(gòu)建了像 .NET 那樣廣泛的開發(fā)平臺(tái)后,我會(huì)后知后覺地想出許許多多本可以換種做法的事情。還有一些事情的處理方式,或者與不同團(tuán)隊(duì)的合作方式,你會(huì)想,“唉,要是我稍微換個(gè)方法處理那次談話就好了”。所以,我肯定能舉出許多個(gè)別的例子。
總的來說,我對(duì) .NET 的結(jié)果非常滿意,就結(jié)果而言我們已經(jīng)相當(dāng)成功。但是,也確實(shí)有很多事情我們本可以換種做法,比如“唉,要是不封裝那個(gè)類就好了”,或者“唉,要是將那個(gè)類封裝起來就好了”。
如果說有一件重要的事情令我感到遺憾,那就是對(duì)于 .NET 客戶端應(yīng)用程序的構(gòu)建,我們應(yīng)當(dāng)早一點(diǎn)花更多時(shí)間去仔細(xì)考慮客戶端的安裝過程。我認(rèn)為我們所采用的方法,即下載的單一可再發(fā)行組件包并不比其他任何的 Windows 可再發(fā)行組件包差,但我們本應(yīng)當(dāng)一開始就抓住這個(gè)機(jī)會(huì)去減少安裝帶來的影響,并簡(jiǎn)化客戶端應(yīng)用程序的部署。這就是我們現(xiàn)在正在花大量時(shí)間研究的東西,將來一定會(huì)有極大的改進(jìn),但是我們本應(yīng)該在六年前就完成這項(xiàng)工作,本應(yīng)該早一點(diǎn)花更多時(shí)間來研究其中的一些情況。
RJ:在您的辦公室中,擺放著全部頗有淵源的演講者徽章,您曾有機(jī)會(huì)拜訪過許多地方,結(jié)識(shí)了許多人。遇到過什么特別的事嗎?有什么人尤其讓您記憶深刻?
SG:關(guān)于開發(fā)人員平臺(tái)的應(yīng)用有一件很有趣的事,我發(fā)現(xiàn)人們基于我們的平臺(tái)所構(gòu)建的應(yīng)用程序真是五花八門,千差萬別。無論是世界最大的社會(huì)網(wǎng)絡(luò)平臺(tái) MySpace、還是倫敦股票交易所或英國(guó)國(guó)民健康服務(wù)中心、甚至是華爾街的眾多公司(Costco、Dell.com 或 Match.com),都離不開 Microsoft 的技術(shù)。前者每天要使用 .NET 瀏覽 15 億的網(wǎng)頁,而后面的機(jī)構(gòu)有許許多多非常好的客戶應(yīng)用程序是基于 Microsoft 技術(shù)構(gòu)建的。其中許多采用了 Web 方面的技術(shù);其他的則采用其他方面的技術(shù)。再看看“迪斯尼樂園”的設(shè)施,運(yùn)行“快速通行證”的儀表都是在精簡(jiǎn)框架和 CLR 上運(yùn)行的。如果美國(guó)人口局或美國(guó)郵政總局的人來敲門,這個(gè)人手里拿的設(shè)備也是在 .NET Framework 上運(yùn)行的。
于我而言,印象最為深刻的事就是看到 .NET 在全世界如此廣泛而多樣化的應(yīng)用。有時(shí)候采用奇異而怪誕的方式,有時(shí)候則用于關(guān)鍵任務(wù)應(yīng)用程序,但每一次都那么獨(dú)一無二,坦率地說真的是超乎你的想像。我認(rèn)為好的框架并不體現(xiàn)在人們按你的預(yù)想在上面構(gòu)建應(yīng)用程序,而在于客戶和開發(fā)人員能夠?qū)⑺淖饔冒l(fā)揮到超乎你想象的程度。對(duì)我來說,這就是 .NET 最突出的地方。
Scott Guthrie 于 1997 年加入 Microsoft,最初從事 IIS4 和 Windows NT Option Pack 的研究工作。在其發(fā)布后不久,他設(shè)計(jì)了最初代號(hào)為“XSP”的新服務(wù)器編程模型并構(gòu)建出原型。隨后的 1998 年,與 Mark Anders 一起組建了一個(gè)新的團(tuán)隊(duì),構(gòu)建了最終被稱為 ASP.NET 的框架。
Scott 于 2002 年初成為 ASP.NET 的生產(chǎn)單元總經(jīng)理 (PUM),并隨 Windows Server 2003 發(fā)布了 ASP.NET V1.1。在這一期間,他還領(lǐng)導(dǎo)開發(fā)了備受歡迎的 Web Matrix 開發(fā)工具,這是一個(gè)免費(fèi)的 ASP.NET 開發(fā)工具,有助于激發(fā) Web 開發(fā)工具的新思維,是為編程愛好者和熱衷者提供的一個(gè)新方法。2002 年底,他又成為 Visual Studio 內(nèi)部 Web 工具功能的 PUM,負(fù)責(zé)開發(fā)新的 Visual Web Developer 獨(dú)立產(chǎn)品(將作為 Visual Studio 2005 系列的一部分發(fā)布)和 Visual Studio 中的全部 Web 開發(fā)功能。Visual Web Developer 和 ASP.NET 2.0 于 2004 年夏季進(jìn)入第一次大范圍公測(cè),將于 2007 年上半年發(fā)布。
在 2003 年底,Scott 的團(tuán)隊(duì)與 IIS 團(tuán)隊(duì)合并,他擔(dān)任結(jié)合了 IIS、ASP.NET 和 Visual Studio 資產(chǎn)的聯(lián)合 Web 平臺(tái)和工具團(tuán)隊(duì)的 PUM。隨著 ASP.NET 2.0 和 Visual Web Developer 的完成,這個(gè)團(tuán)隊(duì)目前正積極開發(fā) Microsoft Web 應(yīng)用程序服務(wù)器的下一個(gè)主版本,它將作為 Longhorn 的一部分發(fā)布。
Scott 現(xiàn)任 Microsoft 開發(fā)事業(yè)部的總經(jīng)理,領(lǐng)導(dǎo)負(fù)責(zé)構(gòu)建 CLR、ASP.NET、WPF、"WPF/E"、Windows Forms、IIS 7.0、Commerce Server、.NET Compact Framework 以及 Visual Studio Web 和客戶端開發(fā)工具的開發(fā)團(tuán)隊(duì)。
Scott 于 1997 年畢業(yè)于杜克大學(xué)的計(jì)算機(jī)科學(xué)專業(yè),并取得學(xué)位。
聯(lián)系客服