記者 / 陳秋歌
微軟亞太研發(fā)集團(tuán)服務(wù)器與開發(fā)工具事業(yè)部高性能計(jì)算首席架構(gòu)師徐明強(qiáng)博士,長期從事高性能計(jì)算(HPC)系統(tǒng)和編程軟件的研發(fā)工作,并熱衷于高性能計(jì)算的普及事業(yè)。2004年微軟提出“讓每個(gè)科學(xué)家都有一臺高性能計(jì)算機(jī)”的口號,徐明強(qiáng)對此產(chǎn)生了強(qiáng)烈共鳴,并于2004年加入微軟,投入到高性能計(jì)算的普及浪潮中。同時(shí)徐明強(qiáng)也是微軟在中國為數(shù)不多的架構(gòu)師之一,相信他的架構(gòu)師之路,可以給那些正在努力成為架構(gòu)師的人一些啟示?!冻绦騿T》雜志近日專訪了徐明強(qiáng),請他與我們分享他不尋常的人生之路、架構(gòu)師之路。
記者:能簡單談?wù)勀耐杲?jīng)歷嗎?童年哪些事、哪些人對您的影響最大?
徐明強(qiáng):我是一名60后,出生在西安。父母都是西安交大老師,為了把我留在他們身邊,從幼兒園到西安交大畢業(yè),我從沒有離開過西安。在我的成長過程中,父母一直陪伴在我左右,他們對我兒時(shí)的啟蒙教育為我以后的事業(yè)發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
父親熱衷于無線電,從小喜歡自學(xué),所以在我很小的時(shí)候他就有意識地培養(yǎng)我自己解決問題的能力。每當(dāng)我遇到難題時(shí),他不會直接幫我解決,而是讓我獨(dú)立去解決問題。記得小時(shí)候曾做過一個(gè)單晶體管收音機(jī),當(dāng)時(shí)以為按照線路圖組裝后就大功告成了,但組裝完成后才知道,天線的設(shè)計(jì)也是不可缺少的步驟,只有長短合適的天線才能保證收聽到好音質(zhì)的廣播。諸如此類的小事,都在潛移默化地影響著我的思考方法,同時(shí)也給了我很多啟示。就拿設(shè)計(jì)單晶體管收音機(jī)來說吧,將它與編程過程進(jìn)行類比,可以看出很多相似之處。對于編程,不是只把編程模式設(shè)計(jì)好就完事了,雖然它至關(guān)重要,但僅僅是工作的一步。系統(tǒng)的可維護(hù)性、糾錯(cuò)性、容錯(cuò)性在編程模式設(shè)計(jì)完后就要重點(diǎn)進(jìn)行考慮和設(shè)計(jì)了。
對我兒時(shí)成長影響比較大的另一件事就是古典音樂。上中學(xué)時(shí),我特別喜歡聽古典音樂,尤其是貝多芬的音樂。他不向命運(yùn)低頭、不服輸?shù)臍赓|(zhì)為他的音樂注入了一種不可抗拒的力量。我被這種力量深深感染,為他那與命運(yùn)抗?fàn)幍木穸袆?。在他音樂的感召下,我逐漸形成了不向困難低頭、樂觀的處世態(tài)度?,F(xiàn)在每當(dāng)遇到有挑戰(zhàn)的難題時(shí),我都會把它當(dāng)作一種機(jī)遇、一種樂趣,用積極的心態(tài)去面對它、解決它。古典音樂也是我兒時(shí)學(xué)習(xí)的動力之源。我上中學(xué)時(shí)還是80年代,當(dāng)時(shí)聽音樂只能用錄音帶,要錄制比較長的交響樂只能用很貴的進(jìn)口錄音帶,為了向父母要錢買進(jìn)口錄音帶,我首先要保證把功課做好。可以說對古典音樂的癡迷一直在促進(jìn)我的學(xué)習(xí)。
記者:考入西安交大后,您才開始接觸計(jì)算機(jī)嗎?當(dāng)時(shí)感覺如何?對大學(xué)生活有什么感觸?
徐明強(qiáng):1982年我考上了西安交大,讀的是計(jì)算機(jī)軟件專業(yè)。也是從那時(shí)起我才開始接觸計(jì)算機(jī),接觸編程。
記得報(bào)考大學(xué)專業(yè)時(shí),父親希望我能學(xué)習(xí)最前沿的技術(shù),他問了一些西安交大的老師,了解到當(dāng)時(shí)最前沿的技術(shù)是計(jì)算機(jī)軟件開發(fā)。于是就幫我報(bào)考了計(jì)算機(jī)軟件專業(yè)。報(bào)考時(shí),我還不知道計(jì)算機(jī)軟件是什么。后來讀大學(xué)的哥哥告訴我計(jì)算機(jī)軟件就是編程,這是我第一次對計(jì)算機(jī)軟件有了一個(gè)初步認(rèn)識,當(dāng)時(shí)感覺蠻不錯(cuò)的。
等到了大學(xué),隨著對計(jì)算機(jī)軟件學(xué)習(xí)的深入,我越發(fā)覺得軟件開發(fā)真的是件很棒的事。軟件開發(fā)可以實(shí)現(xiàn)你能想象到的任何事情,可以說只有你想不到的,沒有它實(shí)現(xiàn)不了的,這是軟件開發(fā)的魅力所在,也正是它的這種獨(dú)特魅力深深吸引了我。
回想起大學(xué)四年,前兩年的收獲還是蠻多的,學(xué)習(xí)了計(jì)算機(jī)軟件的基礎(chǔ)課,為我以后的學(xué)習(xí)和研究提供了充實(shí)的營養(yǎng)成分。大學(xué)后兩年開始學(xué)習(xí)更深層的涉及軟件底層的一些理論知識,像計(jì)算機(jī)體系結(jié)構(gòu)等課程,這些課程很抽象且不好理解。當(dāng)時(shí)國內(nèi)軟件還很不發(fā)達(dá),大學(xué)師資力量也比較薄弱,專門從事計(jì)算機(jī)軟件科研的教師很少,而且大多是從數(shù)學(xué)系轉(zhuǎn)過來的,本身沒有深厚的軟件研發(fā)功底。他們也只是照本宣科,羅列一些抽象的概念,對他們講的知識,我總結(jié)不出任何規(guī)律。在思維方式上我屬于抽象歸納型,記憶力不是很好,若對接觸的事物找不到任何規(guī)律,我是很難記住它們的。所以在大學(xué)的后兩年,我的收獲并不多,對很多知識也是一知半解,很多東西也是出國后才搞清楚。
在大學(xué)的學(xué)習(xí)過程中,我的編程實(shí)踐也在逐漸深入。其中編程最多、做得最大的系統(tǒng)是在畢業(yè)設(shè)計(jì)時(shí),與帶我的老師協(xié)作開發(fā)的一個(gè)系統(tǒng)。這個(gè)系統(tǒng)由編譯系統(tǒng)和可視化系統(tǒng)組成,其中編譯系統(tǒng)是對COBOL語言進(jìn)行編譯,由帶我的老師來做;把編譯系統(tǒng)生成的中間代碼進(jìn)行可視化的可視化系統(tǒng)由我來負(fù)責(zé)。當(dāng)時(shí)除了畫圖部分由C語言實(shí)現(xiàn)外,大部分用Pascal語言來實(shí)現(xiàn)。在設(shè)計(jì)可視化系統(tǒng)時(shí),我設(shè)計(jì)了作業(yè)調(diào)度器解決了COBOL語言分支跳轉(zhuǎn)的問題,同時(shí)用遞歸加棧的方法對算法進(jìn)行了優(yōu)化。后來這個(gè)系統(tǒng)的畢業(yè)論文還獲獎了。也是因?yàn)檫@次畢業(yè)設(shè)計(jì),讓我對算法產(chǎn)生了濃厚的興趣。
記者:大學(xué)畢業(yè)后,您就直接出國留學(xué)了。出國留學(xué)后,您的經(jīng)歷如何?都遇到了哪些挑戰(zhàn)?獲得了哪些成就?
徐明強(qiáng):1986年我大學(xué)畢業(yè),年底正好趕上第一批中英友好獎學(xué)金,我通過英語考試選拔后,就去英國??巳卮髮W(xué)(University of Exeter)留學(xué)了。
去英國留學(xué)我直接讀的是博士。當(dāng)時(shí)英國讀博的要求沒美國那么嚴(yán)格(美國要求只有讀研究生后才有資格讀博),所以我可以跨越研究生課程,直接讀博士。由于本科后兩年沒扎實(shí)學(xué)到實(shí)質(zhì)性的東西,再加上缺乏研究經(jīng)驗(yàn),所以剛學(xué)習(xí)博士課程時(shí),面臨著很多挑戰(zhàn),而其中最大的挑戰(zhàn)就是要用英語理解所有課程。面對課本上眾多不認(rèn)識甚至都沒見過的詞匯,我不得不從頭開始逐詞學(xué)習(xí),同時(shí)研究生課程的空白對我來說無疑也是一個(gè)很大的坎兒。當(dāng)時(shí)我選的研究課題是并行計(jì)算,對我來說,這完全是一個(gè)陌生的領(lǐng)域,在國內(nèi)從沒接觸過。帶我的導(dǎo)師又是一位對我比較放手的導(dǎo)師,讓我一個(gè)人安排學(xué)習(xí)計(jì)劃及科研方向。當(dāng)時(shí)我完全處于一種被動、迷茫的境地。
面對種種挑戰(zhàn),我靜下心來花了18個(gè)月的時(shí)間,進(jìn)行了大量閱讀和編程實(shí)驗(yàn),填補(bǔ)了研究生課程的空缺,同時(shí)還確定了博士學(xué)位的主攻課題。主攻課題的確定是我博士學(xué)業(yè)中的一個(gè)轉(zhuǎn)折點(diǎn),只有確定了課題,才能研究如何解決這個(gè)問題。后來我用了大概一年半到兩年的時(shí)間來解決這個(gè)課題。
我現(xiàn)在熱衷于普及高性能計(jì)算機(jī),也是從那時(shí)開始的。當(dāng)時(shí)并行計(jì)算是一個(gè)新領(lǐng)域,而搞并行計(jì)算,算法最關(guān)鍵,而研究算法需要高性能的機(jī)器才能測出算法的提速效益。當(dāng)時(shí)我們用于科研的實(shí)驗(yàn)室里只有四個(gè)節(jié)點(diǎn)且都是單晶機(jī),而這樣的硬件條件是無法進(jìn)行算法研究的。無奈之下,我放棄了算法研究,轉(zhuǎn)去搞模擬和協(xié)議。這件事對我的觸動很大。當(dāng)時(shí)我就想,像我們這些專門搞并行計(jì)算的人都無法擁有實(shí)驗(yàn)所需的高性能計(jì)算機(jī),而那些搞科學(xué)的科研人員又要等到什么時(shí)候呢?2004年初,微軟提出了“讓每個(gè)科學(xué)家都有一臺高性能計(jì)算機(jī)”的口號,我對此產(chǎn)生了很強(qiáng)的共鳴,當(dāng)時(shí)就下定決心也要為高性能計(jì)算機(jī)的普及助推一把。
時(shí)至今日,在高性能計(jì)算機(jī)領(lǐng)域,有5500萬人還無法使用高性能計(jì)算機(jī)。無法使用,并不是受限于高性能計(jì)算機(jī)的價(jià)格,而是復(fù)雜的技術(shù)導(dǎo)致。使用高性能計(jì)算機(jī)不僅要懂系統(tǒng)管理,還要懂網(wǎng)絡(luò)管理,這對于一般科研人員來說是件很困難的事。要想普及高性能計(jì)算機(jī),就要從技術(shù)、服務(wù)上下手,讓高性能計(jì)算機(jī)的使用變得簡單化、服務(wù)一體化。我個(gè)人認(rèn)為唯有微軟有這方面的基因,可以把復(fù)雜的東西變簡單,把只有少數(shù)人專有的技術(shù)簡單化并普及給大眾。
1991年博士畢業(yè)后,我去曼徹斯特大學(xué)做了兩年的助理研究員,同樣做并行計(jì)算研究。其實(shí)這兩年的收獲并不多,最大的收獲便是學(xué)會了優(yōu)雅系統(tǒng)和實(shí)用、高效系統(tǒng)的選擇和取舍。
那時(shí)業(yè)界存在分布式編程模式和共享內(nèi)存編程模式兩大陣營。當(dāng)時(shí)曼徹斯特大學(xué)買了一臺虛擬內(nèi)存機(jī)器KSR,它屬于操作系統(tǒng)級,解決了Cache Coherence一致性的問題,同時(shí)可以在多機(jī)上提供共享的虛擬內(nèi)存,它的編程模式非常優(yōu)雅。我也是被它優(yōu)雅的編程模式吸引并開始鉆研。后來發(fā)現(xiàn)虛擬內(nèi)存技術(shù)性能差,因?yàn)樗会槍?yīng)用和管理,對應(yīng)用所使用的內(nèi)存情況一點(diǎn)也不了解,所以它的性能是沒辦法提高的。而當(dāng)時(shí)采用分布式編程模式的MPI則不一樣,它靠應(yīng)用開發(fā)者把內(nèi)存有效地分開并進(jìn)行分布,然后通過有效的消息傳送降低開銷,提高了性能。從哲學(xué)角度來說,不知道應(yīng)用對數(shù)據(jù)的訪問細(xì)節(jié),就不可能把性能做好,所以在高性能計(jì)算領(lǐng)域,很多時(shí)候性能和優(yōu)雅度需要保持一個(gè)平衡?,F(xiàn)在我在架構(gòu)沒有明顯改變的情況下,對虛擬內(nèi)存技術(shù)一般是抱比較健康的懷疑態(tài)度的。
離開曼徹斯特大學(xué)后,1993~1995年,我在美國阿岡國家實(shí)驗(yàn)室完成了博士后研究。當(dāng)時(shí)是跟著Ian Forster(后來被譽(yù)為“網(wǎng)格之父”)。Ian Forster是搞并行邏輯語言的編譯及運(yùn)行時(shí)系統(tǒng)的。當(dāng)時(shí)他搞的并行邏輯語言并沒得到別人的認(rèn)可,所以他基于Fortran發(fā)明了Fortran-M語言。他給Fortran加了一些消息傳送,而我為這些信息傳送編了一個(gè)編譯器。
記者:您的第一份工作是編程,可以說您也是從程序員起步的。那在程序員成長過程中,您最難忘的事是什么?
徐明強(qiáng):1996年,我在加拿大Platform Computing公司做開發(fā)工程師,當(dāng)時(shí)有個(gè)系統(tǒng)在客戶那里總是coredump,而且crash的地方都不同。后來,公司派我去客戶數(shù)據(jù)中心“救火”。在機(jī)場的時(shí)候,我就開始逐行讀程序。從數(shù)十萬行中要找出問題,真有大海撈針的感覺。我當(dāng)時(shí)祈禱,愿天地的主宰幫助我,結(jié)果不久我就發(fā)現(xiàn)一個(gè)循環(huán)中有一句語句的二維數(shù)組的索引用反了。舉例說明,本來應(yīng)該是array[i][j]=1.0結(jié)果筆誤成 array[j][i] =1.0。
把這個(gè)問題修正后,我在客戶那兒的三天,系統(tǒng)一直沒出問題,之后也沒出現(xiàn)任何問題。這次經(jīng)歷給了我很深的體會——程序員手中的責(zé)任是何等的大。據(jù)統(tǒng)計(jì),許多的程序錯(cuò)誤都是在周五最后一個(gè)工作小時(shí)提交進(jìn)系統(tǒng)的,而且,不少錯(cuò)誤都是重現(xiàn)以前的錯(cuò)誤。同樣,這類錯(cuò)誤常常在程序員筋疲力盡的時(shí)候引入的。所以,在這之后,我開始注意編程時(shí)的身體和精神狀況,確保在編程時(shí)候保持良好的狀態(tài)。
記者:在架構(gòu)師成長過程中,您最難忘的事是什么?您認(rèn)為架構(gòu)師需要具備哪些素質(zhì)?
徐明強(qiáng):1997年,我在Platform Computing公司開始負(fù)責(zé)公司某產(chǎn)品的架構(gòu)重建工作。這是一個(gè)近十年的軟件產(chǎn)品,在軟件維護(hù)、新功能添加、擴(kuò)展等方面存在比較大的困難。我一開始就犯了許多技術(shù)人員常犯的錯(cuò)誤,即沒有定義原產(chǎn)品架構(gòu)的具體問題就開始著手寫解決方案,結(jié)果整個(gè)方案無法得到認(rèn)可。后來我花了一個(gè)月的時(shí)間,將原產(chǎn)品架構(gòu)的問題一一定義清楚,包括問題描述、根結(jié)定義。有了清晰的問題定義,整個(gè)方案很容易就進(jìn)入了后續(xù)設(shè)計(jì)、開發(fā)階段。這次經(jīng)歷后,無論我再做任何事情,不管大小,都會首先把問題定義清楚,同時(shí)搞清問題實(shí)質(zhì),有時(shí)候?qū)栴}本身的興趣要超過尋找解決方案的興趣。技術(shù)人員最大的誤區(qū)就是急于展示身手,而且常常為自己的技術(shù)找問題。如果把自己擅長的技術(shù)比作鐵錘,技術(shù)人員很容易把所有問題都看成釘子,很少在問題本身上下工夫。結(jié)果,往往很快步入迷途,真正該解決的問題沒有得到解決。
我覺得架構(gòu)師必須學(xué)會的第一件事情就是要懂得如何進(jìn)行權(quán)衡。因?yàn)槲覀兠鎸Φ亩际窍嗷ッ艿囊恍┰O(shè)計(jì)要素和限制,但事實(shí)卻要求你在這些相互矛盾的要素限制和約束條件之間取得巧妙的平衡,因此,我認(rèn)為平衡能力是微軟架構(gòu)師的第一個(gè)重要素質(zhì)。
第二是架構(gòu)師必須足夠成熟。因?yàn)樗麄兺枰跓o法獲得完整信息的情況下,迅速領(lǐng)會問題,并根據(jù)經(jīng)驗(yàn)做出審慎判斷。其實(shí)微軟內(nèi)部有一個(gè)能力要求(Deal With Ambiguity),即能把一張比較模糊的圖片清晰化。如果從經(jīng)驗(yàn)層面上談,我想歸納四個(gè)方面。首先當(dāng)然是在專題領(lǐng)域的經(jīng)驗(yàn)和對微軟軟件開發(fā)工程的經(jīng)驗(yàn)。第二就是要有判斷力、決定力和領(lǐng)導(dǎo)力,以推動各個(gè)團(tuán)隊(duì)的技術(shù)進(jìn)展,并且能在壓力下作出關(guān)鍵性的決策,然后將開發(fā)貫徹到底,并提高效率。架構(gòu)師有權(quán)在技術(shù)上作出決定,在大家意見不一致的時(shí)候,他要能給出大部分人比較能夠接受的意見。第三是善于溝通。溝通的關(guān)鍵就是贏得他人的信任。微軟架構(gòu)師跟其他合作人沒有直接的上下級關(guān)系,應(yīng)該通過溝通去贏得其他人的贊同,而不能靠命令強(qiáng)制指導(dǎo)。同時(shí)為了提高效率,架構(gòu)師必須贏得項(xiàng)目團(tuán)隊(duì)、管理團(tuán)隊(duì)、合作伙伴和客戶等多方面的認(rèn)同,這樣才能將產(chǎn)品開發(fā)出來。第四是通常說的抽象思維和分析能力。具體思維的人可能比較注重細(xì)節(jié),但往往也會將問題復(fù)雜化,使頭緒增多而無法收斂。抽象思維可以幫架構(gòu)師從大量信息、系統(tǒng)文件中,看出一些規(guī)律來,并找出與之相關(guān)的方面,歸納關(guān)鍵問題,表述模糊的概念并將其變成相關(guān)各方能夠理解的項(xiàng)目構(gòu)件,并以具體的語言進(jìn)行溝通。
最后,我認(rèn)為無論是什么樣的架構(gòu)師都要具備一定的商業(yè)頭腦,充分把握業(yè)務(wù)的知識,因?yàn)閷I(yè)務(wù)的把握能夠帶來擁抱變化的能力,而且可以在設(shè)計(jì)的時(shí)候留出一點(diǎn)擴(kuò)展的余地,適應(yīng)將來可能來臨的需求變化。
記者:您能談?wù)勎④浭窃趺磁囵B(yǎng)架構(gòu)師的嗎?
徐明強(qiáng):像微軟這樣龐大的軟件開發(fā)組織結(jié)構(gòu)里,架構(gòu)師會根據(jù)產(chǎn)品團(tuán)隊(duì),工作職能進(jìn)行進(jìn)一步劃分。微軟基本上是從產(chǎn)品組資深人員里選拔架構(gòu)師。
如果要理解微軟的架構(gòu)師職能劃分,就需要先了解微軟的產(chǎn)品部門劃分。通常在微軟的產(chǎn)品組有三個(gè)更小一級的分組:項(xiàng)目經(jīng)理組、開發(fā)組、測試組。每個(gè)組都可以培養(yǎng)出架構(gòu)師。
項(xiàng)目經(jīng)理組主要負(fù)責(zé)業(yè)務(wù)的需求定義和產(chǎn)品規(guī)格書的撰寫;開發(fā)組主要負(fù)責(zé)軟件的實(shí)現(xiàn),以滿足項(xiàng)目經(jīng)理所定義的需求規(guī)格書;測試組主要確保軟件產(chǎn)品交付的質(zhì)量。從這個(gè)角度看,我們可以把架構(gòu)師分為項(xiàng)目經(jīng)理架構(gòu)師、開發(fā)架構(gòu)師和測試架構(gòu)師三種基本類型。
不同的架構(gòu)師職能大相徑庭,比如項(xiàng)目經(jīng)理架構(gòu)師,更側(cè)重于業(yè)務(wù)上的需要。從這個(gè)意義上看,你就會發(fā)現(xiàn)不同架構(gòu)師之間的區(qū)別。由于項(xiàng)目經(jīng)理主要是看用戶的需求,對整個(gè)系統(tǒng)性能和工作品質(zhì)提出要求,同時(shí)還要確認(rèn)在用戶應(yīng)用場景,產(chǎn)品是否可以有效地被系統(tǒng)支撐。
而開發(fā)架構(gòu)師比較側(cè)重于技術(shù),盡管某些問題上會與項(xiàng)目經(jīng)理架構(gòu)師重疊,但更多時(shí)候分工還是非常明確的。技術(shù)架構(gòu)師的一大職能是技術(shù)選型,比如在產(chǎn)品中選擇使用什么技術(shù),數(shù)據(jù)庫要采用哪種規(guī)格的SQL Server,數(shù)據(jù)庫的模式(Schema)應(yīng)該怎樣設(shè)計(jì),.NET組件的選擇等,這些都是開發(fā)組架構(gòu)師所關(guān)注的。
測試架構(gòu)師則關(guān)注測試系統(tǒng)對架構(gòu)設(shè)計(jì)的幫助,包括如何自動化測試、如何更有效地手工測試等。比如HPC Server測試組的架構(gòu)師的工作,由于涉及很復(fù)雜的分布式系統(tǒng),就需要做可擴(kuò)展性測試,計(jì)算資源分配的測試,包括測試方法的設(shè)計(jì)等。
記者:您對年輕技術(shù)人員有哪些建議?
徐明強(qiáng):我主要提三點(diǎn)建議。
第一,要避免“急功近利”的心態(tài)和作風(fēng)。在小事上要忠心,然后才可能被賦予重任。我加入Platform Computing公司的第一個(gè)任務(wù),是寫一個(gè)相對簡單的腳本文件,但我還是花了100%的熱情去寫。我發(fā)現(xiàn)原來的腳本文件有許多冗余部分,而且其中記錄臨時(shí)文件的程序容易出錯(cuò)。我修改了這部分腳本文件,使得今后編寫程序的程序員能夠更便捷地編寫腳本文件。后來,我就開始做比較復(fù)雜和核心的項(xiàng)目??梢哉f,從小事贏得別人的信任。
第二,要對系統(tǒng)的穩(wěn)定性和性能問題感興趣并多解決這些問題。解決這些問題需要有藍(lán)領(lǐng)精神,需要挽起袖筒做臟活。做這些“偵探”工作可以幫助你對系統(tǒng)有更全面的了解,而且可以培養(yǎng)出務(wù)實(shí)的精神。許多大的發(fā)現(xiàn)都是從小處著手,然后就會有奇特收獲。大多年輕人都想有重大成就,其實(shí)很多時(shí)候,只要你工作足夠細(xì)致,好的結(jié)果就呼之欲出了。年輕的時(shí)候總是想很快結(jié)束戰(zhàn)斗,而資深的架構(gòu)師常常問自己和合作的人,我們還有什么沒有考慮到?在討論解決方案的時(shí)候,往往開始20%的時(shí)間,可以想到80%的解決方案。而最好的方案往往需要用剩下的80%的時(shí)間去尋找。好的解決方案,如同寶藏,要用耐心和細(xì)心去發(fā)掘。
第三,要對公司的愿景和商業(yè)策略感興趣。對公司來說,架構(gòu)師最大的貢獻(xiàn)就是能夠創(chuàng)建數(shù)年的產(chǎn)品計(jì)劃、能夠清晰表述客戶價(jià)值的產(chǎn)品路途、能夠前瞻市場變化并能夠以最佳時(shí)間推出市場歡迎的產(chǎn)品。如何做到呢?起點(diǎn)就是要珍惜每一次訪問客戶的機(jī)會,用心當(dāng)學(xué)徒式地學(xué)習(xí)用戶是如何使用自己的產(chǎn)品。每一個(gè)步驟都要記清楚,真正理解用戶的商業(yè)流程和應(yīng)用場景。許多時(shí)候,我們只是把用戶的需求記錄下來,對于用戶的應(yīng)用場景缺乏了解,結(jié)果設(shè)計(jì)出來的產(chǎn)品非用戶所需。我的一個(gè)資深開發(fā)員同事用了個(gè)非常好的比喻:車子上有許多螺絲釘,是要用電動工具的。如果你只看表面現(xiàn)象,看見車上的螺釘,就給別人一個(gè)螺絲刀。那么,別人用起來手腕會要斷掉的。
(本文來自《程序員》雜志10年12期)