之前***的***《全面提升軟件工程能力與實(shí)踐,打造可信的高質(zhì)量產(chǎn)品》刷屏了,作為一個(gè)軟件工程專(zhuān)業(yè)科班出身的軟件開(kāi)發(fā)從業(yè)者,自然是引起了我的好奇。仔細(xì)閱讀之下確實(shí)讓我大吃一驚,看似八股官方文,但細(xì)看之下是作者對(duì)于軟件工程的理解確實(shí)非常深刻,各種專(zhuān)業(yè)術(shù)語(yǔ)信手拈來(lái),比喻恰到好處。
我對(duì)華為的研發(fā)其實(shí)一直挺好奇的,從傳統(tǒng)的硬件公司,到現(xiàn)在軟硬件齊頭并進(jìn),華為手機(jī)銷(xiāo)量都已經(jīng)超過(guò)了蘋(píng)果,可見(jiàn)華為的軟硬件研發(fā)實(shí)力早已是全球領(lǐng)先了。***中的這一句:
二十年前的 IPD 變革,重構(gòu)了我們的研發(fā)模式,實(shí)現(xiàn)了從依賴(lài)個(gè)人、偶然性推出成功產(chǎn)品,到制度化、持續(xù)地推出高質(zhì)量產(chǎn)品的轉(zhuǎn)變。
也揭示了華為的軟件研發(fā)能做到領(lǐng)先水平的原因。
華為是在 1999 年開(kāi)始從 IBM 引進(jìn) IPD 的,到今年 2019 年正好 20 年,在過(guò)去的 20 年里,IPD 幫助華為從游擊隊(duì)變成了正規(guī)軍,研發(fā)隊(duì)伍從幾千人到幾萬(wàn)人,軟件產(chǎn)品也覆蓋到手機(jī)操作系統(tǒng)、應(yīng)用、云服務(wù)。
我對(duì) IPD 是不甚了解的,只知道 IPD(Integrated Product Development,集成產(chǎn)品開(kāi)發(fā))是一種產(chǎn)品開(kāi)發(fā)方法,但如果說(shuō)軟件產(chǎn)品的開(kāi)發(fā)方法,我是比較熟悉的,那就是軟件工程么!
***發(fā)出的這封信的大背景也很特殊,2018 年***開(kāi)始,中興、華為首當(dāng)其沖成為美國(guó)開(kāi)刀的對(duì)象,跟風(fēng)站隊(duì)的澳大利亞、新西蘭、英國(guó)也跳出來(lái)抵制華為,說(shuō)華為不安全,可能含有***,竊聽(tīng)***,這帽子一扣是很難扯清的!這就是為什么整封信從標(biāo)題開(kāi)始,一共 17 次提到兩個(gè)關(guān)鍵字:“可信”。
只有讓客戶(hù)覺(jué)得華為的產(chǎn)品“可信”,華為才能盡快走出這場(chǎng)危機(jī),那么怎么才能做到可信?
如果你是餐廳老板,有人造謠你的廚房臟亂差,員工上完廁所不洗手,你怎么辦?最好的辦法自然是用先進(jìn)的管理流程,并且讓整個(gè)做菜的過(guò)程盡可能公開(kāi)透明。
所以信中有這樣一句話(huà):
我們要轉(zhuǎn)變觀念,追求打造可信的高質(zhì)量產(chǎn)品,不僅僅是功能、特性的高質(zhì)量,也包括產(chǎn)品開(kāi)發(fā)到交付過(guò)程的高質(zhì)量。
要轉(zhuǎn)變觀念,不再只認(rèn)結(jié)果的質(zhì)量,還要追求過(guò)程質(zhì)量了!而如何追求過(guò)程質(zhì)量呢?那就是要:“全面提升軟件工程能力和實(shí)踐”
如果信到此為止,也就是個(gè)普通官方八股文了。領(lǐng)導(dǎo)們么,可不就是喜歡指?jìng)€(gè)大方向,說(shuō)你們要用軟件工程,要實(shí)施軟件工程,至于怎么用,那是你們的事情,畢竟做領(lǐng)導(dǎo)的哪有幾個(gè)真的懂軟件工程的,難得的是這封信居然有很多具體怎么做的內(nèi)容。
軟件項(xiàng)目管理金三角
先看這一句:
我們各級(jí)管理者和全體員工都不得以進(jìn)度、功能、特性等為理由來(lái)降低可信的要求,確保可信的要求在執(zhí)行過(guò)程中不變形。
振聾發(fā)聵呀同志們,熱淚盈眶呀!生活中多少次:三個(gè)月的項(xiàng)目老板說(shuō)你一個(gè)月就要給我做完;做到一半的項(xiàng)目,PM 說(shuō)這個(gè)功能很重要,我們要加上去。最終怎么辦?犧牲質(zhì)量唄!又想要馬兒跑得快又想要馬兒不吃草,天底下哪有那么好的事情!
軟件工程里面早就告訴我們了:時(shí)間、范圍、成本這三個(gè)要素直接決定了產(chǎn)品的質(zhì)量!
希望各位老板別光學(xué)喬布斯,也學(xué)學(xué)***!
程序開(kāi)發(fā)
2018年底程序員被裁的不少,很多程序員開(kāi)始擔(dān)憂(yōu)起前景來(lái),其實(shí)如果你能做到這下面要求的應(yīng)該是不擔(dān)心被裁的!
我們要從最基礎(chǔ)的編碼質(zhì)量做起,視高質(zhì)量代碼為尊嚴(yán)和個(gè)人聲譽(yù)。代碼就像是高樓大廈的一磚一瓦,沒(méi)有高質(zhì)量的代碼,可信的產(chǎn)品就是空中樓閣。我們要優(yōu)化并遵循公司各種編程規(guī)范,遵從架構(gòu)與設(shè)計(jì)原則,熟練使用各種編程庫(kù)和API,編寫(xiě)出簡(jiǎn)潔、規(guī)范、可讀性強(qiáng)、健壯安全的代碼。
這一段是說(shuō)給我們程序員看的,這其實(shí)也是對(duì)程序員的基本要求,大家看看自己,看看身邊,真能做到的有多少?像我一樣覺(jué)得自己還做的不夠好的,咱還是努力學(xué)***吧,多練練,多用點(diǎn)心肯定更沒(méi)問(wèn)題的。
架構(gòu)
說(shuō)完程序員開(kāi)始說(shuō)架構(gòu)師了:
我們要深刻理解架構(gòu)的核心要素,基于可信導(dǎo)向來(lái)進(jìn)行架構(gòu)與設(shè)計(jì)。
看到?jīng)]有,又提到可信了,架構(gòu)設(shè)計(jì)的時(shí)候,別再天馬行空,啥新酷用啥,啥流行用啥,一定要“可信導(dǎo)向”,架構(gòu)設(shè)計(jì)目標(biāo)先搞清楚!
再是細(xì)節(jié):
在確??尚诺那疤嵯拢谛阅?、功能、擴(kuò)展性等方面做好權(quán)衡;慎重地定義我們的模塊與接口,真正做到高內(nèi)聚與低耦合;我們要遵循權(quán)限和攻擊面最小化等安全設(shè)計(jì)原則,科學(xué)設(shè)計(jì)模塊之間的隔離與接口,提升安全性;低階架構(gòu)與設(shè)計(jì)要遵循高階的架構(gòu)與設(shè)計(jì)原則,在充分理解原有架構(gòu)與設(shè)計(jì)的情況下,持續(xù)優(yōu)化;我們要熟悉各種設(shè)計(jì)模式,重用公共成熟組件和服務(wù),避免重復(fù)勞動(dòng)。
“高內(nèi)聚與低耦合”,“權(quán)限和攻擊面最小化”,“模塊之間的隔離與接口”,“重用公共成熟組件和服務(wù)”……道理我都明白,做到可不容易!
技術(shù)債務(wù)
華為這些年高速發(fā)展,早些年為了追求速度肯定也沒(méi)少走捷徑,這些年下來(lái)也肯定沒(méi)少欠技術(shù)債務(wù),現(xiàn)在也是一個(gè)從追求速度到追求質(zhì)量轉(zhuǎn)型的契機(jī)。所以信中說(shuō)完架構(gòu)開(kāi)始講技術(shù)債務(wù)了:
我們要重構(gòu)腐化的架構(gòu)及不符合軟件工程規(guī)范和質(zhì)量要求的歷史代碼。我們知道,再好的架構(gòu),其生命力也是有限的。隨著時(shí)間的推移、環(huán)境的變化以及新技術(shù)、新功能特性的引入,架構(gòu)也會(huì)腐化。面對(duì)腐化了的架構(gòu),要毫不猶豫地去重構(gòu)它。同時(shí)主動(dòng)以可信設(shè)計(jì)原則為導(dǎo)向,去重構(gòu)不符合軟件工程規(guī)范和質(zhì)量要求的歷史代碼,提升軟件架構(gòu)的生命力。
我們都知道,沒(méi)有萬(wàn)能的架構(gòu),只有適合當(dāng)時(shí)需求,當(dāng)時(shí)技術(shù)條件和人員的架構(gòu),時(shí)間推移了很多架構(gòu)就滿(mǎn)足不了要求了,就需要重構(gòu)了!作為80后,小時(shí)候其實(shí)生活挺艱苦的,那時(shí)候我們穿衣服都講究的是:“新三年,舊三年,縫縫補(bǔ)補(bǔ)又三年”,架構(gòu)也一樣嘛,不滿(mǎn)足需求我們先修修補(bǔ)補(bǔ),真要重構(gòu)挑戰(zhàn)還是不小的,但是不去做它會(huì)一直成為發(fā)展的一個(gè)障礙,這封信也算是推了一把:“面對(duì)腐化了的架構(gòu),要毫不猶豫地去重構(gòu)它。”,當(dāng)然你重構(gòu),也不要忘記“可信”這個(gè)根本目標(biāo):“同時(shí)主動(dòng)以可信設(shè)計(jì)原則為導(dǎo)向”。
其實(shí)Google在這方面已經(jīng)走在前面了,一直鼓勵(lì)重寫(xiě)代碼,任何軟件每隔幾年就重寫(xiě)一遍,這樣可以?xún)?yōu)化代碼,采用最新技術(shù),去掉一些沒(méi)有價(jià)值的功能,最重要的是讓新員工得到鍛煉,保持高昂的斗志。不知道這點(diǎn)是不是華為在像Google學(xué)***!
安全
這些年,互聯(lián)網(wǎng)發(fā)展很快,但是安全事故卻層出不窮:開(kāi)房記錄被泄漏、密碼被泄漏、比特幣被盜……這***出業(yè)界其實(shí)對(duì)安全是不夠重視的,所以信中也不止一次提到安全問(wèn)題:
公司已經(jīng)明確,把網(wǎng)絡(luò)安全和隱私保護(hù)作為公司的最高綱領(lǐng)?!?/p>
“我們要深入鉆研軟件技術(shù),尤其是安全技術(shù)?!?/p>
“我們要遵循權(quán)限和攻擊面最小化等安全設(shè)計(jì)原則,科學(xué)設(shè)計(jì)模塊之間的隔離與接口,提升安全性”
“編寫(xiě)出簡(jiǎn)潔、規(guī)范、可讀性強(qiáng)、健壯安全的代碼。
要打造一個(gè)“安全”的軟件,就是首先要有安全意識(shí),然后要懂安全技術(shù),在整個(gè)開(kāi)發(fā)過(guò)程中要從架構(gòu)設(shè)計(jì)、代碼方方面面去注意。
技術(shù)是工具
這些年開(kāi)發(fā)界一直有些不好的風(fēng)氣,就是都認(rèn)為自己的技術(shù)是最牛的,寫(xiě)后端的看不上前端的,用angular的看不上vue,寫(xiě)PHP的認(rèn)為自己的語(yǔ)言是全世界最好的,開(kāi)發(fā)的還看不上測(cè)試的。但是信中這一句話(huà)不要忽視呀:“軟件技術(shù)是我們打造產(chǎn)品的基本工具”,技術(shù)只是工具,只是我們用來(lái)打造產(chǎn)品的工具!
“技術(shù)是否先進(jìn),技術(shù)選擇是否合理,將決定我們軟件的高度;”,技術(shù)的選型,不僅看的是不是先進(jìn),還要看是不是適合當(dāng)前產(chǎn)品項(xiàng)目,并不是什么什么新酷就用什么!
“我們要深入學(xué)***架構(gòu)與設(shè)計(jì)、編碼、測(cè)試、安全、可用性、性能、維護(hù)性、體驗(yàn)等技術(shù),并科學(xué)運(yùn)用這些技術(shù)。”,既然技術(shù)只是工具,那么我們就沒(méi)必要給自己設(shè)置各種技術(shù)壁壘障礙。如果開(kāi)發(fā)就只學(xué)編碼,測(cè)試就只學(xué)測(cè)試,認(rèn)為安全那應(yīng)該是搞安全的事,這樣的話(huà)是非常不利于團(tuán)體協(xié)作的,每個(gè)人都在一個(gè)領(lǐng)域能有深入的鉆研,同時(shí)對(duì)其他領(lǐng)域有一定了解,對(duì)個(gè)人,對(duì)團(tuán)隊(duì)是非常有利的一件事。這樣也不需要DevOps這種為了兼顧開(kāi)發(fā)、測(cè)試、運(yùn)維三種角色而存在的工種!
一致性
我們做軟件開(kāi)發(fā)的都知道,也看過(guò)很多段子:從客戶(hù)的需求,到最終的實(shí)現(xiàn),總是差別很大;我們?cè)陧?xiàng)目初始的時(shí)候制定了很多規(guī)范,卻總是不了了之,難以執(zhí)行;我們良好的設(shè)計(jì),在編碼實(shí)現(xiàn)的時(shí)候,因?yàn)橼s進(jìn)度、開(kāi)發(fā)人員偷懶等各種原因繞開(kāi)設(shè)計(jì),抄近路,最后設(shè)計(jì)和編碼無(wú)法一致……
一致性在軟件開(kāi)發(fā)領(lǐng)域一直都是理想美好而現(xiàn)實(shí)卻很殘酷,信中也提到:
我們要遵守過(guò)程的一致性。遵守適用的法律法規(guī)、遵循業(yè)界共識(shí)的標(biāo)準(zhǔn)、規(guī)范,確保規(guī)范到實(shí)現(xiàn)的一致性、代碼到二進(jìn)制的一致性。架構(gòu)要符合架構(gòu)原則,設(shè)計(jì)要遵循設(shè)計(jì)模式,代碼要符合編程規(guī)范,最終做到需求與實(shí)現(xiàn)一致,達(dá)成各項(xiàng)對(duì)客戶(hù)的承諾。我們只有腳踏實(shí)地做好每一步,才能真正打造出可信的高質(zhì)量產(chǎn)品。
無(wú)論這個(gè)目標(biāo)有多難,但是從“遵守過(guò)程的一致性”開(kāi)始,在每個(gè)階段都去做到一致性,“腳踏實(shí)地做好每一步”,還是有希望做到,“真正打造出可信的高質(zhì)量產(chǎn)品”。
改變***慣
在實(shí)施軟件工程的過(guò)程中,有兩個(gè)難題,一個(gè)就是轉(zhuǎn)變思想,另一個(gè)就是改變***慣了,這種改變的過(guò)程也一定是很痛苦的。
為此,我們要改變行為***慣,追求精品。我們要開(kāi)放透明、積極和勇于揭示問(wèn)題并主動(dòng)推動(dòng)改進(jìn)。軟件開(kāi)發(fā)是一種創(chuàng)造性和藝術(shù)性的工作,需要充分發(fā)揮我們的聰明才智和潛力。我們要改變只重視功能結(jié)果、不重視代碼質(zhì)量的行為***慣,要嚴(yán)格遵守軟件工程規(guī)范;改變被動(dòng)的修修補(bǔ)補(bǔ);改變碎片化知識(shí)獲取,主動(dòng)去學(xué)***提升并貢獻(xiàn)經(jīng)驗(yàn)、代碼,形成共享知識(shí)庫(kù)。我們需要改變的行為和***慣還有很多,對(duì)絕大多數(shù)人來(lái)講都將是一個(gè)痛苦的轉(zhuǎn)變過(guò)程,會(huì)脫一層皮,但我相信大家能夠迎接這種挑戰(zhàn)。
從事軟件開(kāi)發(fā)工作越久,恐怕養(yǎng)成的壞***慣就越多,信中列的幾條都很有代表性:
“只重視功能結(jié)果、不重視代碼質(zhì)量”“功能實(shí)現(xiàn)完了就完事了,質(zhì)量那是QA的事”,這種壞***慣不改質(zhì)量是很難有保障的
“不遵守軟件工程規(guī)范”軟件工程的各種規(guī)范不是約束,也不是擺設(shè),而是實(shí)實(shí)在在為了團(tuán)隊(duì)整體更好的協(xié)作。對(duì)于定好的規(guī)范,要嚴(yán)格執(zhí)行,不合理的規(guī)范,也要提出來(lái)一起改進(jìn)。
“被動(dòng)的修修補(bǔ)補(bǔ)”為了能繼續(xù)湊合,繼續(xù)修修補(bǔ)補(bǔ),而沒(méi)有考慮重構(gòu)改進(jìn),也是一個(gè)不好的***慣。
“碎片化知識(shí)獲取,不主動(dòng)去學(xué)***提升”在現(xiàn)在的信息時(shí)代,碎片化的知識(shí)獲取是容易的,但是像軟件工程這種知識(shí),僅僅通過(guò)碎片化的學(xué)***還是不夠的,必須的主動(dòng)的,系統(tǒng)的去學(xué)***,雖然這個(gè)過(guò)程會(huì)很辛苦,但是是非常有必要的。
“不愿意貢獻(xiàn)經(jīng)驗(yàn)、代碼,不去形成共享知識(shí)庫(kù)”很多人不愿意去分享知識(shí)和經(jīng)驗(yàn),有的是因?yàn)樘珣?,有的是覺(jué)得沒(méi)什么好處。但是分享本身就是一個(gè)學(xué)***和提升的最好手段!知識(shí)庫(kù)這種事不僅是對(duì)別人,對(duì)自己也是一個(gè)特別好的過(guò)程。想象下你新加入一個(gè)團(tuán)隊(duì),如果這個(gè)團(tuán)隊(duì)有很好的知識(shí)庫(kù),你可以通過(guò)知識(shí)庫(kù)很快的上手工作,同樣的,如果你把你的經(jīng)驗(yàn)寫(xiě)到知識(shí)庫(kù),后面的新人也可以受益你的貢獻(xiàn)!
“軟件工程”和“質(zhì)量工程”需要依靠架構(gòu)技術(shù)
“軟件工程”和“質(zhì)量工程”需要依靠架構(gòu)技術(shù),而不是依靠CMM和QA管理流程。一切工程問(wèn)題,首先要思考能否通過(guò)技術(shù)解決,當(dāng)前技術(shù)無(wú)法解決的問(wèn)題,暫時(shí)由管理手段代勞,同時(shí)不停止尋找技術(shù)手段。
所有的涉及到人的管理最終都要?dú)w結(jié)到人管理還是制度管理的問(wèn)題上,軟件項(xiàng)目管理也不例外,如果過(guò)多的依賴(lài)于人的管理,那么項(xiàng)目經(jīng)理的職責(zé)就太重了,優(yōu)秀的項(xiàng)目經(jīng)理本身就是稀缺資源,最終會(huì)變成一個(gè)瓶頸。
所以通過(guò)架構(gòu)技術(shù)和工具,把管理流程落實(shí)下來(lái)是一個(gè)非常好的方式。有兩個(gè)例子可以很好的說(shuō)明這點(diǎn)。
早些年軟件項(xiàng)目團(tuán)隊(duì)是非常龐大的,各個(gè)服務(wù)龐大模塊緊密,所以管理成本很高,后來(lái)微服務(wù)這種架構(gòu)提出后,將大的服務(wù)拆成小的服務(wù),整個(gè)組織也從大項(xiàng)目部門(mén)拆分成各個(gè)小組,各小組可以獨(dú)立更新維護(hù)。
另一個(gè)例子是以前單元測(cè)試和代碼審查還有自動(dòng)部署很難執(zhí)行,后來(lái)借助源代碼管理工具和CI(Continuous integration,持續(xù)集成)工具,就可以很容易的進(jìn)行代碼審查、并且可以確保單元測(cè)試測(cè)試跑通過(guò)后才進(jìn)行部署。這一點(diǎn)其實(shí)信中也有體現(xiàn):
我們將全面強(qiáng)化以Committer角色為核心的代碼審核和提交機(jī)制,代碼經(jīng)過(guò)更加嚴(yán)格和系統(tǒng)的審核才能合入版本。為此我們將建立一支更高水平的Committer角色群體,負(fù)責(zé)軟件架構(gòu)的看護(hù)、代碼的審核和提交,整體保障合入代碼的高質(zhì)量。我們要變革考核機(jī)制,要讓架構(gòu)設(shè)計(jì)好、代碼寫(xiě)得好的人脫穎而出,對(duì)編程能力不滿(mǎn)足要求的人給予幫助和培訓(xùn)。但任何人如果編寫(xiě)的代碼長(zhǎng)時(shí)間不能合入版本,將會(huì)被團(tuán)隊(duì)拋棄。
軟件工程就像一個(gè)國(guó)家的農(nóng)業(yè)
軟件工程就像一個(gè)國(guó)家的農(nóng)業(yè),是最基礎(chǔ)的設(shè)施!
很感動(dòng),這些年軟件工程被提起的其實(shí)不多,大家關(guān)注的更多是各種新酷的技術(shù),而對(duì)于這種軟件開(kāi)發(fā)最基礎(chǔ)的理論視而不見(jiàn)。還有人一提到軟件工程,就馬上說(shuō)軟件工程不是銀彈。軟件工程從來(lái)不說(shuō)自己是銀彈,就像現(xiàn)代醫(yī)學(xué),也不會(huì)號(hào)稱(chēng)自己包治百病,只會(huì)不斷改進(jìn),對(duì)癥下藥!
希望這封信能帶動(dòng)軟件工程在國(guó)內(nèi)的更多發(fā)展,也希望我這篇淺顯的文章能幫助大家更好的理解一些軟件工程的概念。
-
軟件開(kāi)發(fā)
+關(guān)注
關(guān)注
0文章
614瀏覽量
27364 -
華為
+關(guān)注
關(guān)注
216文章
34440瀏覽量
251771 -
任正非
+關(guān)注
關(guān)注
6文章
271瀏覽量
31065
原文標(biāo)題:從軟件工程的角度,解讀任正非的新年公開(kāi)信
文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論