|
|
【編者按】搞技術(shù)是一件極其幸運(yùn)的事情,不僅是我們迎來了最好的時(shí)代,亦在于我們的祖師爺大多還都健在甚至健談,比如 Linux 之父 Linus Torvalds、Python 之父 Guido van Rossum,而中國第一代程序員們也都還在折騰,首推 UCDOS 發(fā)明人鮑岳橋、超級(jí)解霸創(chuàng)始人梁肇新,以及今天我們的主人公 —— 國內(nèi)知名操作系統(tǒng)專家、指令集創(chuàng)始人兼 CEO 潘愛民博士。
潘愛民博士生于 70 年代,起于 BASIC 編程,師從漢字激光照排系統(tǒng)之父王選院士,從北大計(jì)算機(jī)研究所、微軟亞洲研究院到任職盛大創(chuàng)新院專家顧問,又先后任阿里 YunOS、阿里安全、飛豬、阿里業(yè)務(wù)平臺(tái)首席架構(gòu)師,進(jìn)入物聯(lián)網(wǎng)時(shí)代創(chuàng)立指令集深耕并親自主導(dǎo)物聯(lián)網(wǎng)操作系統(tǒng)研發(fā),歷經(jīng)中國互聯(lián)網(wǎng)行業(yè)從星火到移動(dòng)、AI、大數(shù)據(jù)、IoT 等各種燎原,幾乎可以算作是中國互聯(lián)網(wǎng)發(fā)展的一大縮影。
浮生多變化,萬事有盈虛。當(dāng)國內(nèi)程序員們憂于「35 歲職業(yè)坎、45 歲屈服現(xiàn)實(shí)、55 歲就得隱退」之時(shí),透過潘愛民博士的 30 年程序人生,我們不僅能夠看到一個(gè)中國第一代程序員死磕技術(shù),又深邃思考技術(shù)如何落地與產(chǎn)業(yè)融合,更能從他的身體力行中看到,后浪奔涌,老兵如何不息!
1.jpg (24.87 KB, 下載次數(shù): 54)
下載附件
2020-6-21 13:16 上傳
潘愛民
我第一次寫程序人生是2000年,當(dāng)時(shí)有很多編程實(shí)踐,剛剛開始有系統(tǒng)性的思考;第二次是2010年寫了我的成長故事(發(fā)表在《程序員》雜志上),當(dāng)時(shí)即將從微軟亞洲研究院畢業(yè),準(zhǔn)備進(jìn)入國內(nèi)工業(yè)界。到2020年,又10年過去了。回顧這10年,我一直在工業(yè)界努力,經(jīng)歷了三家公司:盛大、阿里巴巴和杭州指令集,親歷了移動(dòng)互聯(lián)網(wǎng)的發(fā)展,以及物聯(lián)網(wǎng)時(shí)代的興起。
在計(jì)算機(jī)技術(shù)飛速發(fā)展的年代,10年是一個(gè)很大的跨度,足以發(fā)生翻天覆地的變化。我有幸在正值壯年之際,又一次經(jīng)歷了中國互聯(lián)網(wǎng)產(chǎn)業(yè)的蓬勃發(fā)展。本文記錄我在這10年中的職業(yè)經(jīng)歷、技術(shù)感悟,以及從技術(shù)轉(zhuǎn)向業(yè)務(wù)、與產(chǎn)業(yè)融合的實(shí)踐與思考。
職業(yè)經(jīng)歷
2010年夏天,我離開微軟亞洲研究院,踏上了南下到上海的旅程,加入盛大創(chuàng)新院。當(dāng)時(shí)的感受是,在經(jīng)歷過北京大學(xué)的教學(xué)科研以及微軟亞洲研究院的系統(tǒng)研究以后,非常渴望回到國內(nèi)的企業(yè)或機(jī)構(gòu)進(jìn)行基礎(chǔ)軟件的研發(fā)。經(jīng)過多方考察,我選擇了盛大創(chuàng)新院作為職業(yè)生涯的下一站。
盛大創(chuàng)新院
對于程序員來說,盛大創(chuàng)新院是一個(gè)理想的創(chuàng)新機(jī)構(gòu),有老板的大力支持,有大量互聯(lián)網(wǎng)人才,正趕上移動(dòng)互聯(lián)網(wǎng)蓬勃發(fā)展的大好時(shí)機(jī)。有一批優(yōu)秀的項(xiàng)目脫穎而出,涉及到語音、短視頻、云計(jì)算、云筆記、LBS、智能手機(jī)等很多領(lǐng)域,其中有不少項(xiàng)目在盛大創(chuàng)新院解散以后還在延續(xù)并且做成功了。
當(dāng)時(shí)我?guī)ьI(lǐng)的方向是移動(dòng)操作系統(tǒng)——VisionOS。為什么要做移動(dòng)操作系統(tǒng),以及如何做、技術(shù)路徑如何選擇,這是在立項(xiàng)階段反復(fù)思考和推敲的問題。我至今認(rèn)為,那是發(fā)展自有移動(dòng)操作系統(tǒng)的最佳時(shí)期,Android尚未占據(jù)市場壟斷地位,并且Android手機(jī)的體驗(yàn)和性能離iOS還有顯著差距,自研系統(tǒng)有機(jī)會(huì)快速趕上來。
如果把微軟亞洲研究院看作企業(yè)象牙塔的話,那么在盛大創(chuàng)新院則感受到了國內(nèi)工業(yè)界的創(chuàng)新活躍氛圍。在盛大做終端操作系統(tǒng),游戲作為應(yīng)用生態(tài)中的一個(gè)重要組成部分,是獨(dú)特的優(yōu)勢。
當(dāng)時(shí)手機(jī)游戲尚處于早期摸索階段,但很多頁游已經(jīng)商業(yè)化運(yùn)營了。VisionOS選擇支持Flash和HTML5(H5),作為對于手機(jī)終端小游戲的基礎(chǔ)平臺(tái)。盡管當(dāng)時(shí)有Flash和H5誰是未來的爭論,作為基礎(chǔ)系統(tǒng)平臺(tái),面對大量存量的Flash內(nèi)容,VisionOS必須做好支持;同時(shí)基于前幾年我對Web技術(shù)的研究,未來我更看好H5。因此VisionOS對于Flash的策略是兼容支持;對于Web則從系統(tǒng)底層打造形成一個(gè)應(yīng)用平臺(tái)(Web Runtime)。
這是我第一次組建并帶領(lǐng)一個(gè)操作系統(tǒng)研發(fā)團(tuán)隊(duì),自己做架構(gòu)師,從Linux操作系統(tǒng)到應(yīng)用層技術(shù)棧,再到云端服務(wù),都涉及到了。
VisionOS的技術(shù)架構(gòu)跟Windows比起來,簡化太多了,所以我在VisionOS的架構(gòu)設(shè)計(jì)與技術(shù)選型上都能得心應(yīng)手。得益于盛大創(chuàng)新院良好的技術(shù)創(chuàng)新氛圍以及相對優(yōu)厚的待遇,我組建了一個(gè)非常優(yōu)秀的團(tuán)隊(duì),有玩Linux的,有精通圖形引擎的,有精通軟件工程的,有精通多媒體編解碼的,也有擅長系統(tǒng)安全的,共十多個(gè)人,用一年多時(shí)間建立了一個(gè)性能優(yōu)異的基于Linux/WebKit的移動(dòng)操作系統(tǒng)。
我從一開始就沒考慮跟Android兼容,而是走自建生態(tài)的道路。VisionOS從立項(xiàng)到?jīng)Q定解散,差不多兩年時(shí)間,對我來說,就像一次創(chuàng)業(yè)經(jīng)歷,做出了一個(gè)原型系統(tǒng),但未能實(shí)現(xiàn)商業(yè)化。
2.jpg (25.95 KB, 下載次數(shù): 45)
下載附件
2020-6-21 13:16 上傳
2010年潘愛民在盛大創(chuàng)新院
阿里巴巴
離開盛大創(chuàng)新院,我休息了兩個(gè)月,拿到了華為和阿里巴巴的操作系統(tǒng)首席架構(gòu)師的Offer,最終命運(yùn)使然,2013年初,我來到杭州,加入了阿里云OS。
當(dāng)時(shí)阿里云OS是阿里云下屬的一個(gè)部門,所以,確切來說,我加入了阿里云。杭州是我家鄉(xiāng)的省城,一向以風(fēng)景優(yōu)美著稱,當(dāng)時(shí)還算不上互聯(lián)網(wǎng)技術(shù)人才聚集地,但我時(shí)有耳聞,很多前端工程師經(jīng)常在杭州聚會(huì),技術(shù)的氛圍正在濃厚起來。
我在阿里巴巴工作了將近六年,主要分三個(gè)階段:云OS(后更名為阿里YunOS)、集團(tuán)安全部,以及飛豬和業(yè)務(wù)平臺(tái)部。在云OS工作的兩年間,正趕上云OS蓬勃發(fā)展的時(shí)期,從一個(gè)以Android BSP為基礎(chǔ)的兼容Android應(yīng)用的移動(dòng)操作系統(tǒng),演變?yōu)橐粋(gè)自主移動(dòng)操作系統(tǒng)。
作為云OS首席架構(gòu)師,最大的挑戰(zhàn)是確定新的架構(gòu),并且推動(dòng)各個(gè)開發(fā)組接受新的架構(gòu)。我同時(shí)也帶領(lǐng)了核心系統(tǒng)模塊的研發(fā)組。基于盛大VisionOS的研發(fā)經(jīng)驗(yàn)和教訓(xùn),我在設(shè)計(jì)新架構(gòu)以及核心模塊的技術(shù)選型方面,有足夠的把握讓新的云OS符合未來發(fā)展。
兩年間,云OS技術(shù)團(tuán)隊(duì)已經(jīng)非常強(qiáng)大了,聚集了國內(nèi)大量的系統(tǒng)工程師。我一心想做成云OS,然而,天時(shí)、地利、人和很難三者得兼,最終我還是放棄了繼續(xù)努力,轉(zhuǎn)到了阿里巴巴安全部。
當(dāng)時(shí)正趕上阿里的電商業(yè)務(wù)全面從PC互聯(lián)網(wǎng)轉(zhuǎn)向移動(dòng)互聯(lián)網(wǎng),安全能力也勢必要跟著升級(jí)。我一方面支持阿里業(yè)務(wù)的移動(dòng)安全,另一方面帶領(lǐng)一個(gè)架構(gòu)師團(tuán)隊(duì)來梳理和重構(gòu)阿里巴巴的安全體系。經(jīng)過兩年的安全領(lǐng)域?qū)嵺`以后,我希望能到業(yè)務(wù)部門學(xué)習(xí)和鍛煉,于是選擇了阿里飛豬。我認(rèn)為這是一個(gè)小而美的業(yè)務(wù)部門,既有平臺(tái)屬性,也有行業(yè)屬性。雖然飛豬的業(yè)務(wù)體量相對淘寶和天貓的總量小得多,但旅游是一個(gè)發(fā)展中的行業(yè),業(yè)務(wù)空間大,創(chuàng)新的機(jī)會(huì)也多。
最后趕上中臺(tái)戰(zhàn)略下的部門調(diào)整與合并,我來到了業(yè)務(wù)平臺(tái)部門。我突然發(fā)現(xiàn),加入阿里巴巴時(shí)滿懷著做成一個(gè)移動(dòng)操作系統(tǒng)的夢想,但現(xiàn)實(shí)中卻發(fā)展成為了企業(yè)中的老白兔。結(jié)合自己最后兩年對于業(yè)務(wù)的認(rèn)知,以及物聯(lián)網(wǎng)行業(yè)發(fā)展的判斷,也感受到杭州這塊互聯(lián)網(wǎng)熱土,最終我決定離開阿里巴巴,建立一家創(chuàng)業(yè)公司。
杭州指令集
在杭州,從阿里巴巴出來創(chuàng)業(yè)的前員工是一個(gè)廣泛的群體,并且不乏成功者。我估計(jì)杭州一半以上的科技創(chuàng)業(yè)公司的合伙團(tuán)隊(duì)中都有前阿里員工的身影。在這樣的群體氛圍中,我選擇出來創(chuàng)業(yè),也就絲毫不奇怪了。
我創(chuàng)立指令集有兩個(gè)初衷:
一、 物聯(lián)網(wǎng)是后移動(dòng)互聯(lián)網(wǎng)時(shí)代能看得到的一個(gè)大趨勢,而這個(gè)產(chǎn)業(yè)還處于零散發(fā)展的階段,除了一些嵌入式操作系統(tǒng)演變?yōu)槲锫?lián)網(wǎng)設(shè)備的操作系統(tǒng)以外,還缺乏基礎(chǔ)性的系統(tǒng)軟件,所以我認(rèn)為有機(jī)會(huì)做物聯(lián)網(wǎng)場景的系統(tǒng)軟件(解決一些共性的基礎(chǔ)功能需求)。
二、感受到了 智慧園區(qū)/智慧樓宇的發(fā)展與變遷,以阿里巴巴西溪園區(qū)為例,2013年啟用時(shí)就是一個(gè)普通的安裝了很多智能設(shè)備的園區(qū),但經(jīng)過幾年的發(fā)展,園區(qū)內(nèi)的很多設(shè)施,越來越智能,包括門禁閘機(jī)、燈、空調(diào)、停車、電視屏等,這一切都源于背后有一套系統(tǒng),將所有相關(guān)的設(shè)備連接到一起,并且與企業(yè)信息系統(tǒng)打通,從而實(shí)現(xiàn)了這些有良好體驗(yàn)的智慧功能。
我堅(jiān)信物聯(lián)網(wǎng)時(shí)代需要這樣的系統(tǒng)軟件。經(jīng)過一年的研發(fā)和運(yùn)營,指令集公司于2019年6月發(fā)布了商業(yè)智能操作系統(tǒng)1.0版本,可用于樓宇、園區(qū)等商業(yè)場景。通過跟大量的目標(biāo)客戶和合作伙伴交流,確實(shí)看到了廣泛的市場前景。更進(jìn)一步,在跟伙伴交流的過程中,我也看到了在工業(yè)制造場景下更加需要這樣的物聯(lián)網(wǎng)操作系統(tǒng)軟件,因此指令集公司也把工業(yè)智能操作系統(tǒng)作為第二個(gè)重要的發(fā)展方向。
一旦加入創(chuàng)業(yè)大軍,每天工作的重點(diǎn)以及思考問題的方式跟以往在大企業(yè)工作不一樣了。 某種程度上,這是一個(gè)身份的轉(zhuǎn)變,原來是專業(yè)工作者,現(xiàn)在是企業(yè)經(jīng)營主。盡管如此,我仍然努力做到對技術(shù)保持關(guān)注,特別是新興的技術(shù)趨勢。我堅(jiān)持寫技術(shù)文章,通過寫文章來理清思路,對相關(guān)技術(shù)進(jìn)行全面的整理,并結(jié)合實(shí)踐提出一些觀點(diǎn)。
技術(shù)成長
從2010到2020年這10年,我們經(jīng)歷了移動(dòng)互聯(lián)網(wǎng)的蓬勃發(fā)展、人工智能的再次復(fù)興、大數(shù)據(jù)的各種應(yīng)用,以及物聯(lián)網(wǎng)技術(shù)在各行各業(yè)的應(yīng)用。我作為一名從業(yè)者,有機(jī)會(huì)在大公司的平臺(tái)上經(jīng)歷了這些技術(shù)的發(fā)展與應(yīng)用,并且也有機(jī)會(huì)親自主導(dǎo)一個(gè)物聯(lián)網(wǎng)操作系統(tǒng)的研發(fā)和推廣,實(shí)屬幸運(yùn)。
一、移動(dòng)系統(tǒng)技術(shù)
早在2005年,我就選擇了將來往系統(tǒng)技術(shù)方向發(fā)展,當(dāng)時(shí)還在微軟亞洲研究院工作。我的想法是,在微軟工作最有價(jià)值的,應(yīng)該是鉆研Windows操作系統(tǒng),這是獨(dú)有的機(jī)會(huì),所以我從Windows性能診斷分析作為切入點(diǎn),研究Windows的內(nèi)部機(jī)理,將Windows線程調(diào)度、內(nèi)存管理、I/O等最核心的模塊剖析了一遍,并形成了一套系統(tǒng)性的診斷方法。有了這些基礎(chǔ)以后,我又進(jìn)一步考慮應(yīng)用層的性能問題,以瀏覽器的渲染引擎作為研究對象,分析渲染引擎的整個(gè)計(jì)算過程,挖掘可優(yōu)化的空間。核心的思想是,在計(jì)算流程中盡可能把重復(fù)的計(jì)算移除掉,從而保持整個(gè)響應(yīng)過程的高效。這些研究工作為我后來做操作系統(tǒng)打下了扎實(shí)的基礎(chǔ)。
2010年,我在盛大創(chuàng)新院有機(jī)會(huì)設(shè)計(jì)一個(gè)新的移動(dòng)操作系統(tǒng)VisionOS。基本的思路是,在移動(dòng)設(shè)備上,用Linux加一個(gè)Web渲染引擎來支撐一個(gè)Web運(yùn)行環(huán)境(Web Runtime),既可以運(yùn)行本地的Web應(yīng)用,也可以運(yùn)行在線應(yīng)用,并且通過插件的形式運(yùn)行Flash控件。我調(diào)研了Linux平臺(tái)上可使用的各種圖形軟件,最終決定自行開發(fā)一套適合于移動(dòng)設(shè)備的圖形庫,與WebKit高效對接。Linux社區(qū)有許多開源的圖形庫,也有像Qt這類比較成熟的跨平臺(tái)圖形窗口系統(tǒng),但它們首先為了兼容性的目的犧牲了效率,其次為了提升效率又做了很多優(yōu)化,從而軟件變得很復(fù)雜。在移動(dòng)設(shè)備上不需要復(fù)雜的圖形功能和窗口管理能力,我當(dāng)時(shí)的想法是,借鑒Windows圖形窗口系統(tǒng)的思想,簡化到極致,只需要基本的圖形能力和簡單窗口管理,就可以支撐VisionOS的底層圖形需求。移動(dòng)應(yīng)用內(nèi)部的控件管理由WebKit自身來完成即可。
在當(dāng)時(shí)的智能手機(jī)硬件環(huán)境下,要想做到流暢的觸控體驗(yàn),必須進(jìn)行深入的優(yōu)化,其中有一點(diǎn)至關(guān)重要,把芯片的圖形加速能力啟用起來。由于我們選擇了原生的Linux系統(tǒng),C庫采用glibc,那就要找到芯片廠商提供的硬件加速庫,才能完成這一優(yōu)化。然而我接觸了四五家芯片廠商,發(fā)現(xiàn)當(dāng)時(shí)的移動(dòng)芯片廠商基本上只提供Android的BSP,幾乎不再提供Linux BSP,除非有足夠采購量來提出特殊需求。在沒有得到芯片廠商支持的情況下,我們做了一個(gè)高難度的折中方案,將Android BSP中的硬件加速庫移植到VisionOS中,也就是說,將非glibc環(huán)境下的一個(gè)二進(jìn)制代碼庫鏈接到glibc中,供上層模塊調(diào)用。我團(tuán)隊(duì)中的同事足夠優(yōu)秀,將這些工作做得很漂亮,VisionOS比當(dāng)時(shí)同機(jī)配的Android系統(tǒng)要明顯高效,并且也很穩(wěn)定。
跨進(jìn)程通信是一個(gè)操作系統(tǒng)非常重要的能力,它讓應(yīng)用與應(yīng)用之間、應(yīng)用與系統(tǒng)之間便捷、高效地相互調(diào)用功能。系統(tǒng)底層往往有很多瑣碎的細(xì)節(jié)要處理,包括應(yīng)用數(shù)據(jù)到底層二進(jìn)制數(shù)據(jù)的轉(zhuǎn)換、共享緩沖區(qū)的管理等。作為一個(gè)面向終端用戶的操作系統(tǒng),必須要提供一套便于開發(fā)者使用的跨進(jìn)程通信機(jī)制。VisionOS選擇了自研方案,在Linux提供的跨進(jìn)程通信基礎(chǔ)上包裝了一套可解析應(yīng)用語義的系統(tǒng)機(jī)制。(Android對應(yīng)有一套binder機(jī)制,用于應(yīng)用與系統(tǒng)、應(yīng)用與應(yīng)用之間進(jìn)行通信。)
除了支持Web應(yīng)用和Flash內(nèi)容,我們也移植了一些Linux原生應(yīng)用。此外,有幾個(gè)系統(tǒng)應(yīng)用(包括桌面和相冊應(yīng)用)也是原生開發(fā)的。在當(dāng)時(shí)的硬件條件下,Web版本的相冊應(yīng)用與原生版本的相冊應(yīng)用有顯著的性能差異。因此,對原生應(yīng)用的支持也是VisionOS的一個(gè)特點(diǎn)。事實(shí)上,我調(diào)研了當(dāng)時(shí)Android手機(jī)上的某一家應(yīng)用市場中排名前一千個(gè)Android應(yīng)用,大部分應(yīng)用包含了原生版本的核心模塊(譬如圖形處理、多媒體處理、重力模型、加解密等),Java代碼只是搭建了應(yīng)用的框架而已。這些核心模塊是以.so文件格式打包在應(yīng)用發(fā)行包中,導(dǎo)致非ARM處理器的其他手機(jī)或移動(dòng)終端根本用不了這些應(yīng)用。我曾經(jīng)接觸過一家MIPS芯片商,盡管他們也支持Android操作系統(tǒng),但當(dāng)時(shí)環(huán)境下他們的終端設(shè)備無法直接運(yùn)行市場上的這些Android應(yīng)用。
我做移動(dòng)操作系統(tǒng)將近五年時(shí)間,先是做了VisionOS,后來兩年又做了云OS,在技術(shù)發(fā)揮上可謂淋漓盡致,但遺憾的是,因?yàn)榉N種原因沒有真正意義上建立起一個(gè)移動(dòng)操作系統(tǒng)的生態(tài)。而隨著Android系統(tǒng)越來越先進(jìn),其生態(tài)粘性越來越強(qiáng),再要建立一個(gè)對標(biāo)的移動(dòng)操作系統(tǒng),可能性微乎其微了,除非某種特定的產(chǎn)業(yè)結(jié)構(gòu)需求出現(xiàn)。
二、架構(gòu)師之路
最近這10年,我的技術(shù)角色定為架構(gòu)師可能是最合適的,雖然我自己最喜歡的稱呼是系統(tǒng)程序員。架構(gòu)師是一個(gè)泛稱,在具體場景中,往往對應(yīng)了一個(gè)規(guī)模或大或小的系統(tǒng),可以是軟件系統(tǒng),也可以是軟硬件結(jié)合的系統(tǒng)。比如一個(gè)應(yīng)用軟件,需要有一個(gè)架構(gòu)師;一個(gè)操作系統(tǒng),對應(yīng)有一個(gè)架構(gòu)師;一個(gè)業(yè)務(wù)模塊,可能也有一個(gè)架構(gòu)師。
隨著互聯(lián)網(wǎng)技術(shù)和業(yè)務(wù)的快速發(fā)展,架構(gòu)師這一職業(yè)也跟著在互聯(lián)網(wǎng)行業(yè)風(fēng)生水起。我談?wù)剬浖軜?gòu)師,特別是系統(tǒng)軟件架構(gòu)師的職責(zé)的理解。
軟件基本架構(gòu)首先要合理,所謂合理,指采用當(dāng)時(shí)相對成熟的軟件技術(shù)來實(shí)現(xiàn)系統(tǒng)功能。 一方面,架構(gòu)師要對相關(guān)的軟件技術(shù)有足夠的了解或精通,才能做好基礎(chǔ)的選型工作;另一方面也要了解技術(shù)發(fā)展趨勢,對軟件架構(gòu)的擴(kuò)展能力和前瞻性有清晰的判斷。現(xiàn)實(shí)中的絕大多數(shù)問題在業(yè)界都有一些參考方案,或者有一些成型的模式可供參考。
對軟件,特別是系統(tǒng)軟件的性能,有充分的理解。性能包含多方面的指標(biāo),有關(guān)于資源使用方面的,譬如存儲(chǔ)使用、網(wǎng)絡(luò)帶寬使用等,也包括異常情況下的表現(xiàn)、對大并發(fā)量的容忍、延遲等。在設(shè)計(jì)階段有針對性能的預(yù)估,在系統(tǒng)上線后有對性能的監(jiān)控,確保軟件系統(tǒng)健康運(yùn)行。
穩(wěn)定性,軟件的質(zhì)量保障是一個(gè)工程過程,在軟件發(fā)布以前經(jīng)過充分測試,包括功能測試和性能測試。軟件升級(jí)迭代流程要充分考慮到兼容性要求,常見的做法是,先采用灰度發(fā)布再全量發(fā)布,并且系統(tǒng)具有回滾能力。
成本控制和預(yù)測。高性能和穩(wěn)定可靠(以及安全性)都是以成本為基礎(chǔ)的。在技術(shù)選型、性能和穩(wěn)定性保障方面所做的決策,都需要考慮到成本因素。成本是一個(gè)綜合考慮,涉及到業(yè)務(wù)需求、商業(yè)價(jià)值、技術(shù)方案等多方面因素。
從軟件工程師(或程序員)到成為合格的架構(gòu)師需要技術(shù)積累,有足夠廣闊的知識(shí)面,更需要大系統(tǒng)經(jīng)驗(yàn)的積累。大系統(tǒng)經(jīng)驗(yàn)是難能可貴的,如果在客觀的工作場景中找不到,也可以從剖析一些軟件系統(tǒng)入手,來積累對復(fù)雜系統(tǒng)的認(rèn)知和把控能力。
系統(tǒng)程序員在這方面有天然的優(yōu)勢,因?yàn)橄到y(tǒng)程序員往往精通底層工作原理,所以在系統(tǒng)性能、穩(wěn)定性、安全性等方面能直接看到問題的本質(zhì)。但是從系統(tǒng)程序員到架構(gòu)師有一道坎,須放下對底層技術(shù)的執(zhí)念,接受上層應(yīng)用或中間件的各種妥協(xié),包括一些不優(yōu)雅或不精巧的習(xí)慣做法。
3.jpg (40.35 KB, 下載次數(shù): 58)
下載附件
2020-6-21 13:16 上傳
2016年潘愛民在莫干山
這10年間,我的架構(gòu)師生涯也分幾段經(jīng)歷:
在移動(dòng)操作系統(tǒng)方向上,我核心工作在架構(gòu)設(shè)計(jì)上,帶領(lǐng)一些核心模塊的開發(fā)小組。 得益于早年在Windows操作系統(tǒng)和Web渲染引擎方向的深入研究,我能夠提出比較合理、先進(jìn)的系統(tǒng)架構(gòu)。最具挑戰(zhàn)性的部分是如何構(gòu)建應(yīng)用生態(tài),包括應(yīng)用開發(fā)語言和環(huán)境的選擇,以及是否或如何兼容市場上已有的應(yīng)用。
在互聯(lián)網(wǎng)業(yè)務(wù)安全方向上 ,依托阿里巴巴集團(tuán)的業(yè)務(wù)背景,我有機(jī)會(huì)全面地梳理和構(gòu)建企業(yè)服務(wù)安全體系:從系統(tǒng)攻防,到業(yè)務(wù)平臺(tái)的
安全,再到情報(bào)收集,到研發(fā)流程中植入安全要求等。
在阿里業(yè)務(wù)線做架構(gòu) 。電商是典型的互聯(lián)網(wǎng)業(yè)務(wù),從PC互聯(lián)網(wǎng)到移動(dòng)互聯(lián)網(wǎng),既有技術(shù)挑戰(zhàn)(比如支撐頻繁的促銷活動(dòng)),又有大量的數(shù)據(jù)和服務(wù)需要拓展(比如旅行服務(wù))。 阿里巴巴的技術(shù)體系具有代表性,其基礎(chǔ)平臺(tái)結(jié)合了云計(jì)算的各種技術(shù)應(yīng)用。我正好趕上了阿里的中臺(tái)戰(zhàn)略:業(yè)務(wù)中臺(tái)+數(shù)據(jù)中臺(tái),期間收獲很多。其中有一段時(shí)間,我一直在研究與思考:如何將學(xué)術(shù)界關(guān)于軟件工程的研究成果與阿里的場景結(jié)合起來。阿里業(yè)務(wù)平臺(tái)的工程實(shí)踐在有些方面超前學(xué)術(shù)界很多,但學(xué)術(shù)界的很多研究成果并未在阿里實(shí)踐中發(fā)揮作用。
在物聯(lián)網(wǎng)方向 ,我從產(chǎn)業(yè)現(xiàn)狀出發(fā),看到一個(gè)潛在的系統(tǒng)需求:能夠?qū)⒁粋(gè)物聯(lián)網(wǎng)場景中的各種IoT設(shè)備連接起來并協(xié)同發(fā)揮作用的系統(tǒng)或平臺(tái)。我將這樣的系統(tǒng)軟件稱為物聯(lián)網(wǎng)操作系統(tǒng),而對應(yīng)的運(yùn)行在設(shè)備上的系統(tǒng)軟件稱為IoT設(shè)備操作系統(tǒng)。 指令集公司正是做這樣一個(gè)物聯(lián)網(wǎng)操作系統(tǒng),其核心能力是連接設(shè)備、數(shù)據(jù)匯聚與處理、業(yè)務(wù)支撐平臺(tái)。設(shè)備連接面對的是各種IoT設(shè)備和廣泛的協(xié)議;數(shù)據(jù)匯聚解決從數(shù)據(jù)采集,到數(shù)據(jù)存儲(chǔ)、分析和處理的全流程;業(yè)務(wù)支撐平臺(tái)主要將設(shè)備和數(shù)據(jù)的共性服務(wù)暴露給上層應(yīng)用。
架構(gòu)師解決的最核心問題是軟件的復(fù)雜性。首先要對軟件復(fù)雜性有深刻的認(rèn)識(shí),否則容易出現(xiàn)“過于畏懼系統(tǒng)而不敢下手”或者“對系統(tǒng)不敬畏而導(dǎo)致犯不該犯的錯(cuò)誤”的情形;其次,要有足夠的經(jīng)驗(yàn)來應(yīng)對軟件中的復(fù)雜性。
如上文所說,系統(tǒng)程序員更有優(yōu)勢成為架構(gòu)師,因?yàn)橄到y(tǒng)底層往往需要提供基礎(chǔ)的手段來克服一些本質(zhì)困難,比如單機(jī)操作系統(tǒng)的內(nèi)存管理與線程調(diào)度、分布式系統(tǒng)中的一致性算法等。
三、思考成為一種習(xí)慣
胡適曾經(jīng)在贈(zèng)給大學(xué)生的文章中提到“總得時(shí)時(shí)找一兩個(gè)值得研究的問題”。作為IT技術(shù)人,雖然已經(jīng)離開學(xué)校,但身處快速發(fā)展的產(chǎn)業(yè)中,更應(yīng)該時(shí)時(shí)思考一些問題。下面列舉一些我在過去十多年曾經(jīng)思考過或?qū)嵺`過的技術(shù)題目。
內(nèi)存跨機(jī)調(diào)度。
還在PC互聯(lián)網(wǎng)時(shí)期,曾經(jīng)有一段時(shí)期桌面P2P(peer-to-peer)技術(shù)很流行。我注意到,有些機(jī)器的內(nèi)存很富余,而有的機(jī)器限于當(dāng)時(shí)1GB或者2GB內(nèi)存配置而導(dǎo)致性能低下。于是很自然的想法是,讓空閑機(jī)器的物理內(nèi)存放出來供忙機(jī)器使用,通過千兆局域網(wǎng)絡(luò),把忙機(jī)器發(fā)生page fault的頁面按規(guī)則調(diào)度到空閑機(jī)器上。通過改Windows內(nèi)核的做法,我和實(shí)習(xí)生實(shí)現(xiàn)了一個(gè)原型系統(tǒng)。最終的效果沒有預(yù)期的那么理想,但此過程中我們學(xué)到了很多,掌握了頁面調(diào)度的算法和路徑,并且在內(nèi)核中實(shí)現(xiàn)了高效的網(wǎng)絡(luò)傳輸。
快速反匯編。
反匯編是逆向工程的基礎(chǔ),但是在x86二進(jìn)制可執(zhí)行文件中,反匯編難以做到100%正確,原因是代碼段中總有一些空隙,并且指令又是變長的,按順序反匯編很快就會(huì)丟失線索。我改變思路,從原始的程序入口和符號(hào)表線索入手,層層遞進(jìn),不斷挖掘新的線索;若沒有確定性的線索了,我們再從未反匯編的代碼區(qū)找出疑似的線索進(jìn)行嘗試,直至代碼段全部反匯編出來。最終實(shí)驗(yàn)的結(jié)果非常理想,比商用的反匯編器達(dá)到的覆蓋面還要大。在調(diào)試過程中,我們也見識(shí)到某些商業(yè)軟件使用花指令(很少聽說吧)做了代碼混淆。
一切計(jì)算均用查表來解決。
這是一個(gè)異想天開的主意,原始的想法是,既然計(jì)算機(jī)的本質(zhì)是計(jì)算,每天有大量的計(jì)算在不斷發(fā)生,其中必定有大量的計(jì)算是重復(fù)的,對于重復(fù)的計(jì)算,是不是只要算一次,下次直接查表就可以了。進(jìn)一步的想法是,只要在云端部署一個(gè)大計(jì)算機(jī),所有的計(jì)算都交給云端查表來完成。這其實(shí)也是函數(shù)式編程的思想,但我們不知道如何框定一個(gè)可計(jì)算的范圍。這種想法也僅限于想想而已。這一思路我和實(shí)習(xí)生后來用在Web渲染引擎的性能優(yōu)化上,把渲染樹上的重復(fù)計(jì)算識(shí)別出來剔除掉,確實(shí)能顯著提高渲染性能。
一個(gè)安全問題的解決辦法。
有一次碰到一個(gè)做云安全的朋友,想在云主機(jī)里加一些防護(hù)措施,但他的方案和思路沒有得到技術(shù)老大的認(rèn)可。后來,一支煙的功夫,我跟他討論了這個(gè)方案,如何把風(fēng)險(xiǎn)降到最小,嘗試著建立一個(gè)最小的代碼基讓技術(shù)老大審核。功能性的代碼可以動(dòng)態(tài)加載。據(jù)說后來這個(gè)方案被接受了。這個(gè)方案就是Windows保護(hù)模式的變種,也是一些安全軟件采用的手段。
紅綠燈配時(shí)優(yōu)化問題。
坐車或開車的時(shí)候經(jīng)常等紅燈,腦子里就想著是不是合理,能不能優(yōu)化;等電梯也是如此。終于今年4月份我在查閱了一些專業(yè)論文以后,系統(tǒng)性地整理了一下思路,將一路綠燈作為目標(biāo),進(jìn)行了概率意義上的分析。并且,進(jìn)一步以減少停車次數(shù)為目標(biāo),在紅綠燈不能控制的情況下,是否通過控制車速來做到車協(xié)同路,變相地實(shí)現(xiàn)車路協(xié)同。
計(jì)算使這個(gè)世界的運(yùn)行變得更加高效,我們的生活也為之發(fā)生變化。電腦的計(jì)算只是低級(jí)(機(jī)械)的計(jì)算,人腦的才是最聰明的計(jì)算;把平時(shí)的閑暇時(shí)刻用來做一些發(fā)散性的思考,說不定會(huì)有意外的收獲。曾經(jīng)有一位我很尊敬的老師說過,腦子越用越靈光,對此我深信不疑。程序員受編程思想的影響,平時(shí)的思考往往是程序化的,我也逃不脫這種思維的禁錮。
職業(yè)成長
在10年以前,我還是純粹的技術(shù)人,以深入鉆研技術(shù)為樂趣。最近這10年,我的職業(yè)生涯發(fā)生了很大變化。其中最重要的是,開始接觸業(yè)務(wù),貼近業(yè)務(wù),并且也開始思考產(chǎn)業(yè),最終走向了技術(shù)創(chuàng)業(yè)。
一、技術(shù)轉(zhuǎn)向業(yè)務(wù)
我的經(jīng)歷是一段極其緩慢地從純技術(shù)崗位走向業(yè)務(wù)的過程。先是在學(xué)校里工作,我職業(yè)初期做過一個(gè)地圖編輯產(chǎn)品,并進(jìn)一步搭建地理信息系統(tǒng),但很快就走上了教學(xué)科研崗位,脫離了業(yè)務(wù)需求。接著在微軟亞洲研究院工作,比在學(xué)校里還純粹鉆研技術(shù)。這是一段非常幸福的時(shí)光,大部分時(shí)間可以海闊天空地思考技術(shù),做實(shí)驗(yàn)。能做成原型就不錯(cuò)了。
進(jìn)入工業(yè)界做移動(dòng)操作系統(tǒng)和安全保障這一階段開始接觸業(yè)務(wù),前者需要運(yùn)營一個(gè)移動(dòng)操作系統(tǒng),后者要支撐阿里移動(dòng)業(yè)務(wù)的安全。實(shí)際的需求來自于運(yùn)營方或業(yè)務(wù)方,我的職責(zé)是做好技術(shù)和實(shí)施方案。如果把這些工作也看成業(yè)務(wù)的話,則它們屬于后臺(tái)支撐性的業(yè)務(wù)。
我在阿里后期階段的工作跟業(yè)務(wù)(旅行電商)結(jié)合越來越緊密,也參與一些業(yè)務(wù)發(fā)展會(huì)議。除了做一些技術(shù)決策以外,還需要在業(yè)務(wù)需求基礎(chǔ)上平衡和分配技術(shù)資源。如果有人問我,在阿里最值得學(xué)習(xí)的是什么,我的答案是阿里做業(yè)務(wù)的方法,包括如何制定目標(biāo)、拆解目標(biāo),以及如何運(yùn)營一個(gè)業(yè)務(wù)(特別是利用數(shù)據(jù)來運(yùn)營業(yè)務(wù),這是阿里的優(yōu)勢)。 雖然很多書或者文章也會(huì)講這些方法,但再多書面的學(xué)習(xí)都抵不上親身參與一個(gè)業(yè)務(wù)周期更為有效。
二、產(chǎn)業(yè)的思考
能將自己的工作融入到一個(gè)產(chǎn)業(yè)中,這是擴(kuò)大視野最好的做法。有些技術(shù)或產(chǎn)品天然要從產(chǎn)業(yè)的角度來看待,操作系統(tǒng)就是這樣的典型產(chǎn)品。做移動(dòng)操作系統(tǒng)要結(jié)合移動(dòng)互聯(lián)網(wǎng)產(chǎn)業(yè)的發(fā)展來思考,上游有芯片廠商,下游有手機(jī)廠商和移動(dòng)服務(wù)商,可能中間還有設(shè)計(jì)公司或系統(tǒng)服務(wù)商。
2012年我曾經(jīng)訪問過多家移動(dòng)芯片廠商,了解到芯片廠商對于移動(dòng)操作系統(tǒng)的態(tài)度和技術(shù)支持,知道自研獨(dú)立系統(tǒng)的困難,并且從一些關(guān)鍵點(diǎn)上探索可能的技術(shù)方案。另外,通用市場和垂直領(lǐng)域各有不同的要求,其對應(yīng)的產(chǎn)業(yè)鏈不一定是相同的。最終如何形成生態(tài),包括硬件產(chǎn)業(yè)的生態(tài)、移動(dòng)應(yīng)用的開發(fā)者生態(tài),決定了一個(gè)移動(dòng)操作系統(tǒng)應(yīng)該使用什么架構(gòu)、如何運(yùn)營。
我花了五年時(shí)間想做成一個(gè)移動(dòng)操作系統(tǒng),有這樣的機(jī)會(huì)是非常幸運(yùn)的,但最終沒有做成卻是遺憾的。我個(gè)人獲得了成長,這是一個(gè)額外的收獲。
2018年我轉(zhuǎn)到物聯(lián)網(wǎng)領(lǐng)域,再次趕上了一個(gè)快速發(fā)展的產(chǎn)業(yè)。盡管物聯(lián)網(wǎng)被提出并發(fā)展有很多年了,但是其發(fā)展空間仍然廣闊。我們在各行各業(yè)都能看到設(shè)備在聯(lián)網(wǎng)和升級(jí),智能家居、汽車、監(jiān)控?cái)z像頭、空調(diào)、電梯、人車通行道閘、工業(yè)生產(chǎn)設(shè)備等等,都以各種方式連接上網(wǎng)絡(luò)。
基于對眾多設(shè)備連接網(wǎng)絡(luò)的技術(shù)路徑和整體軟件結(jié)構(gòu)的分析,我認(rèn)為除了設(shè)備上的操作系統(tǒng),還需要一個(gè)針對物聯(lián)網(wǎng)場景的系統(tǒng)軟件,它解決該場景中的設(shè)備連接和數(shù)據(jù)共享的需求,讓這些設(shè)備形成一個(gè)整體來協(xié)同工作。
從物體聯(lián)網(wǎng)的角度來講,這才是真正的物聯(lián)網(wǎng)操作系統(tǒng)。產(chǎn)業(yè)界既有的做法是建立共享的物聯(lián)網(wǎng)平臺(tái),然而大量的業(yè)務(wù)場景中這種共享平臺(tái)并不能滿足需要;另一方面,在許多業(yè)務(wù)領(lǐng)域中已經(jīng)在以各種方式來解決設(shè)備連接和數(shù)據(jù)共享的問題,但往往是一些局部的非通用方案。
跟上一個(gè)產(chǎn)業(yè)的發(fā)展,比跟蹤一項(xiàng)技術(shù)的發(fā)展,要困難得多。這需要不斷學(xué)習(xí),不斷思考。產(chǎn)業(yè)中的很多知識(shí)和經(jīng)驗(yàn)并沒有那么高科技,它們來源于實(shí)踐者的日常活動(dòng)中,包括失敗的和成功的各種嘗試。這10年間,我接觸到了一些引領(lǐng)產(chǎn)業(yè)發(fā)展的人物,從他們身上學(xué)到了很多,也開始從產(chǎn)業(yè)發(fā)展的角度來思考問題。
三、技術(shù)創(chuàng)業(yè)感悟
從2018年我選擇了加入創(chuàng)業(yè)大軍,最深刻的體會(huì)是:離開大平臺(tái)了,你就什么都不是了。經(jīng)歷了兩年不到的創(chuàng)業(yè)歷程,說幾點(diǎn)感悟:
技術(shù)創(chuàng)業(yè),要快速搭建出目標(biāo)軟件,并找到試用客戶。
這一步是把創(chuàng)業(yè)的“故事”變成看得見、感受得到的場景,產(chǎn)品可以不完善,但要體現(xiàn)出核心理念。此步驟既可以驗(yàn)證可行性,也會(huì)接收到試用客戶的初期反饋。創(chuàng)業(yè)前期是個(gè)不斷試錯(cuò)的過程,每走好一步都可以增強(qiáng)支持者(包括股東、投資者,或合作伙伴等)的信心,也讓團(tuán)隊(duì)更有信心。為了減小試錯(cuò)的代價(jià),快是最有效的手段。
聚焦。
用技術(shù)來賺錢有各種途徑,越貼近用戶需求的技術(shù)或產(chǎn)品,相對而言變現(xiàn)容易得多。底層技術(shù)和產(chǎn)品要獲得市場認(rèn)可的周期則長得多。
我們經(jīng)常面臨各種誘惑,比如有客戶希望做一些他們的應(yīng)用需求(像小程序之類的),或者客戶已有的系統(tǒng)有遺留的問題需要解決一下。 承接這樣的需求可以快速地賺到錢,但影響主線產(chǎn)品的研發(fā)進(jìn)度。作為初創(chuàng)的技術(shù)公司,一定要抵擋住誘惑,學(xué)會(huì)拒絕。做系統(tǒng)軟件產(chǎn)品,更要耐得住寂寞。
時(shí)刻保持危機(jī)感。
在大平臺(tái)上工作,危機(jī)感源于自己的職業(yè)價(jià)值;而一旦開始創(chuàng)業(yè),危機(jī)感來自于公司的生死存亡。這種危機(jī)感可以把一個(gè)人或一個(gè)團(tuán)隊(duì)的潛能發(fā)揮出來。做好技術(shù)是一種聰明,而面對內(nèi)心中的危機(jī)感,需要的是智慧。
信任團(tuán)隊(duì)。
技術(shù)人創(chuàng)業(yè),有大量知識(shí)需要補(bǔ)充,涉及財(cái)務(wù)、法務(wù)、品牌、市場、商務(wù)等,自己不可能在每個(gè)方向都成為專家,所以要依靠團(tuán)隊(duì),信任團(tuán)隊(duì)。有了凝聚的、可信任的團(tuán)隊(duì),企業(yè)才能走得遠(yuǎn)。
寫在最后
程序人生又10年,但這10年我實(shí)際上跟程序代碼的接觸并不多。曾經(jīng)有一次,我團(tuán)隊(duì)中的架構(gòu)師給我講代碼實(shí)現(xiàn),他怕我聽不懂,就用以前DOS時(shí)代或者Windows時(shí)代的系統(tǒng)機(jī)制打比方,向我解釋當(dāng)前的架構(gòu)方案。
感謝這些架構(gòu)師對我的貼心,確實(shí)軟硬件技術(shù)發(fā)展都很快,編程的理念也有不小的變化。 用10年的跨度來看技術(shù)進(jìn)步,老程序員的知識(shí)結(jié)構(gòu)是需要升級(jí)的。在國內(nèi)IT企業(yè)市場,程序員35歲是一個(gè)職業(yè)坎,45歲很多程序員就屈服于現(xiàn)實(shí)了,55歲絕大多數(shù)就得退群了。
我在20年前寫第一篇程序人生時(shí),提到了我是軟件開發(fā)隊(duì)伍中的老兵,那時(shí)一方面是由于身體的垮塌,另一方面也是感受到了后浪的力量。
最近這10年,我還培養(yǎng)了一個(gè)輔助習(xí)慣 —— 跑步,跑的距離從5公里開始,到10公里,再到半程馬拉松(約21公里),然后到全程馬拉松(約42公里)。跑得不快,但能堅(jiān)持下來。 我希望自己的程序人生還能有至少兩次續(xù)篇,寫代碼不一定多,但仍然保持跟代碼的接觸。
公眾號(hào):CSDN |
溫馨提示:
1、本內(nèi)容內(nèi)由作者投稿,版權(quán)歸原作者所有!
2、本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。
3、本內(nèi)容若侵犯到你的版權(quán)利益,請聯(lián)系我們,會(huì)盡快給予刪除處理!
|