2011年,馬克·安德森寫了一篇文章,預(yù)言“軟件吞噬世界”。主要有兩種觀點(diǎn):一是很多傳統(tǒng)業(yè)務(wù)正在被軟件公司取代;第二,所有其他公司都發(fā)現(xiàn)他們提供的價(jià)值越來越來自軟件系統(tǒng)。
安德森寫這篇文章的時(shí)候,市值最大的10家公司都沒有從事軟件驅(qū)動(dòng)的業(yè)務(wù)。今天,10家最大的公司中有6家主要是由軟件驅(qū)動(dòng)的,而另外4家公司準(zhǔn)備轉(zhuǎn)型。
Stack Overflow和LinkedIn列出的非技術(shù)公司的軟件工程招聘廣告比技術(shù)行業(yè)本身多。這是經(jīng)濟(jì)發(fā)展的一個(gè)巨大變化,說明公司正在加強(qiáng)軟件工程實(shí)踐。
會(huì)計(jì)和軟件哪個(gè)對(duì)公司更重要?本文無答案。但是現(xiàn)在許多不認(rèn)為自己是軟件公司的公司開始發(fā)現(xiàn)軟件系統(tǒng)是他們運(yùn)營的關(guān)鍵組成部分。
如果各級(jí)CEO和經(jīng)理不懂軟件,那就可有可無了。這要么會(huì)限制他們的職業(yè)發(fā)展,要么會(huì)對(duì)公司的業(yè)績產(chǎn)生負(fù)面影響。無論如何,不懂軟件,注定失敗。(Gartner預(yù)測(cè),到2020年,50%的首席信息官(CIO)將被取代,因?yàn)樗麄儧]有能力改造公司。)
這篇文章列出了管理者應(yīng)該知道的10個(gè)常識(shí):
軟件不是魔術(shù)軟件永遠(yuǎn)不會(huì)“完成”軟件開發(fā)是團(tuán)隊(duì)作戰(zhàn),沒有人能做所有事情設(shè)計(jì)不是外觀,而是工作原理安全是每個(gè)人的責(zé)任feature大小并不能預(yù)測(cè)開發(fā)時(shí)間偉大來自于成千上萬的小進(jìn)步技術(shù)債很討厭,但不可避免軟件不會(huì)自己運(yùn)行(軟件需要運(yùn)維)復(fù)雜的系統(tǒng)需要DevOps才能良好運(yùn)行關(guān)于軟件,本文認(rèn)為這是所有管理者需要知道的十件最重要的事情:
1.軟件不是魔法
軟件不是魔法。雖然看起來像魔術(shù),或者說是魔術(shù),但其實(shí)不是魔術(shù)。每一個(gè)元素都是人類設(shè)計(jì)的,都有它的數(shù)學(xué)基礎(chǔ),或者說是可以用人類語言解釋的過程。
與魔法不同,軟件不是由空創(chuàng)造的。它需要設(shè)計(jì)、建造和維護(hù)。就像一個(gè)房子有很多系統(tǒng)一起工作(基礎(chǔ)、結(jié)構(gòu)、管道、房間、家具等)。),軟件系統(tǒng)也需要很多層和子系統(tǒng)來創(chuàng)建整個(gè)系統(tǒng)??梢栽O(shè)計(jì)的很好,也可以設(shè)計(jì)的很差,快速設(shè)計(jì)很少能持久。
如果人們無法用語言描述它會(huì)做什么(包括想要的結(jié)果和如何實(shí)現(xiàn)),那么計(jì)算機(jī)也做不到。“如何”叫算法,不算神奇。
機(jī)器學(xué)習(xí)等人工智能技術(shù)并不驚艷。機(jī)器學(xué)習(xí)是基于數(shù)據(jù)預(yù)測(cè),而不是顯式的規(guī)則或指令。一般用線性代數(shù)來做。如果有100萬張已知香蕉的照片和100萬張沒有香蕉的照片,一個(gè)訓(xùn)練有素的機(jī)器學(xué)習(xí)系統(tǒng)會(huì)根據(jù)它從前面的照片中學(xué)到的知識(shí)告訴你它看起來像第一組還是第二組。這不是魔法。使用機(jī)器學(xué)習(xí)根據(jù)過去的招聘決策對(duì)簡歷進(jìn)行排序,即使沒有任何有意的偏見,也可能會(huì)擴(kuò)大經(jīng)驗(yàn)性的招聘歷史。
2.軟件永遠(yuǎn)不會(huì)“完成”
軟件永遠(yuǎn)不會(huì)“完成”。軟件是一個(gè)迭代的過程,在其生命周期中有許多修訂和更新。我們的工作是創(chuàng)造一個(gè)能夠認(rèn)識(shí)到這一點(diǎn)的環(huán)境。
同樣,我們也從來沒有期望營銷和客戶獲取能夠“完成”,它們是迭代的過程。在每一次迭代中,當(dāng)我們繼續(xù)向業(yè)務(wù)交付價(jià)值時(shí),我們繼續(xù)學(xué)習(xí)和成長。即使已經(jīng)有一些成功的發(fā)布,我們也從未打算“停止”做這些事情。
如果軟件可以一個(gè)版本完成就好了,但事實(shí)并非如此。需求文檔充滿了歧義,軟件第一版全是“哦,我寫的,不是故意的”。最好的軟件可以激發(fā)新的想法和功能需求??吹叫碌匿N售管理系統(tǒng)效率更高,就會(huì)激發(fā)更高的效率。世界在變,競爭對(duì)手提供新的功能,人們有了新的想法。此外,總有一些錯(cuò)誤需要修復(fù):要么在代碼中,要么在構(gòu)建代碼的底層軟件框架和系統(tǒng)中。有些軟件可能很完美,但我們可以肯定,隨著時(shí)間的推移,人們會(huì)發(fā)現(xiàn)它搭建的平臺(tái)存在各種漏洞。
我們的工作是讓一個(gè)組織意識(shí)到這一點(diǎn)。
實(shí)現(xiàn)這一點(diǎn)的方法是建立一個(gè)有信心定期發(fā)布新版本的組織。當(dāng)全自動(dòng)測(cè)試和其他工程規(guī)范到位時(shí),我們建立信心。這種信心創(chuàng)造了每季度、每月甚至每周發(fā)布高質(zhì)量軟件的能力,而不是過長的發(fā)布周期。具體頻率不重要,信心重要。自信可以帶來更快的創(chuàng)新。
3.軟件開發(fā)是一場(chǎng)團(tuán)隊(duì)?wèi)?zhàn)斗,沒有人能做到一切
軟件開發(fā)是一場(chǎng)團(tuán)隊(duì)?wèi)?zhàn)斗。開發(fā)人員既不是產(chǎn)品經(jīng)理,也不是UX設(shè)計(jì)師,也不是質(zhì)量工程師、分析師、安全專家、技術(shù)作家或運(yùn)營工程師。組織需要所有的角色。
沒有一個(gè)經(jīng)理會(huì)建議每個(gè)銷售人員都去做營銷和公關(guān),否則銷售團(tuán)隊(duì)就會(huì)被開除(因?yàn)闋I銷人員知道產(chǎn)品,也能做銷售)。營銷和銷售是有聯(lián)系的,但又是不同的。所以,他們之間是有分工的。
同樣,開發(fā)團(tuán)隊(duì)需要獨(dú)立的人員來收集需求、質(zhì)量保證和測(cè)試、代碼編寫等等。
開發(fā)人員可以“無所不能”的神話被稱為“全棧開發(fā)人員”或“10x工程師”,通常只存在于小公司。是的,一個(gè)很小的公司可能會(huì)自己做營銷和銷售,但是你不一定會(huì)加入這么小的公司。
不要用自己的興趣去挑戰(zhàn)別人吃飯。孩子“擅長Facebook”并不代表他或她會(huì)成為下一個(gè)扎克伯格;一個(gè)孩子對(duì)工程感興趣,不代表他或她會(huì)用微積分。一個(gè)孩子可以自己建一個(gè)網(wǎng)站,并不意味著這個(gè)網(wǎng)站每小時(shí)可以處理數(shù)十億的金融交易。
4.設(shè)計(jì)不是外觀,而是工作原理
史蒂夫·喬布斯有句名言:“設(shè)計(jì)不僅僅是外觀和感覺。設(shè)計(jì)就是它的工作方式?!盪X的設(shè)計(jì)師不會(huì)坐下來決定菜單的顏色或者按鈕是圓形還是方形。他們決定什么是工作流和交互。
用戶會(huì)看到一個(gè)有三個(gè)選項(xiàng)的屏幕,還是一個(gè)屏幕只顯示一個(gè)選項(xiàng)?這個(gè)設(shè)計(jì)決策需要心理學(xué),需要對(duì)用戶的同理心,需要測(cè)試,測(cè)試,再測(cè)試。
UX設(shè)計(jì)面臨的最大挑戰(zhàn)之一是,一旦你熟悉了這個(gè)系統(tǒng),你就失去了預(yù)測(cè)新用戶的能力。當(dāng)預(yù)測(cè)新用戶的需求時(shí),設(shè)計(jì)系統(tǒng)的人將被自動(dòng)取消資格。UX也許美麗而優(yōu)雅,可以與一件藝術(shù)品相提并論,但要求UX設(shè)計(jì)師將背景換成帆船的圖片是沒有幫助的。
我們的工作是相信測(cè)試數(shù)據(jù)而不是主觀臆測(cè),創(chuàng)造一個(gè)環(huán)境,計(jì)劃在產(chǎn)品發(fā)布前做幾次修改,期望在產(chǎn)品發(fā)布后做進(jìn)一步的改進(jìn)。不要混淆UX設(shè)計(jì)師和平面設(shè)計(jì)師。讓UX設(shè)計(jì)師設(shè)計(jì)公司節(jié)日賀卡,讓技術(shù)作家寫公司時(shí)事通訊,也是同樣的不尊重行為。這些是不同的技能。
5.安全是每個(gè)人的責(zé)任
不管知不知道,不管喜不喜歡,我們都是從事安防行業(yè)的。所有軟件都有安全要求和潛在的安全漏洞。參與軟件開發(fā)的系統(tǒng)也有安全要求和漏洞。雖然防火墻和入侵檢測(cè)等安全基礎(chǔ)設(shè)施組件是必要的,但它們是不夠的:軟件平臺(tái)必須通過使用內(nèi)置的安全控制來設(shè)計(jì)、實(shí)施和維護(hù)。安全既是好的技術(shù),也是好的流程。
認(rèn)為我們不是攻擊的目標(biāo)是錯(cuò)誤的。所有的計(jì)算機(jī)系統(tǒng)都是攻擊的目標(biāo),因?yàn)楣舨粌H僅是針對(duì)其中的信息,而僅僅是針對(duì)它是一臺(tái)計(jì)算機(jī)這一事實(shí)。例如,一個(gè)沒有有價(jià)值信息的系統(tǒng)是網(wǎng)絡(luò)攻擊的目標(biāo),因?yàn)樗梢杂脕磙D(zhuǎn)發(fā)對(duì)其他計(jì)算機(jī)的攻擊,挖掘比特幣,或者存儲(chǔ)他人的盜版視頻。
安全不是一個(gè)開/關(guān)按鈕,有很多灰色區(qū)域。安全性最好從一開始就考慮。事后修補(bǔ)既費(fèi)錢又往往無效。我們不會(huì)先造一艘船,然后“加”一個(gè)函數(shù)讓它浮起來。同樣,也不可能先建立一個(gè)系統(tǒng),然后按下“安全”按鈕就安全了。
安全是關(guān)于風(fēng)險(xiǎn)和對(duì)風(fēng)險(xiǎn)的承受能力。加密兩個(gè)節(jié)點(diǎn)之間的通信不能保證其安全性,但提高了安全性,只有超強(qiáng)的計(jì)算能力才能破解密碼。降低一個(gè)領(lǐng)域的風(fēng)險(xiǎn)對(duì)其他領(lǐng)域沒有幫助。保護(hù)網(wǎng)絡(luò)并不能防止物理安全問題。一個(gè)人開門,別人就能偷你的備份磁帶。
正如吉恩·斯帕福德(Gene Spafford)的名言所說,“唯一真正安全的系統(tǒng)是一個(gè)關(guān)閉的系統(tǒng),用混凝土澆筑,由全副武裝的警衛(wèi)在一個(gè)絕緣的房間里守衛(wèi)——盡管如此,我仍然有疑問?!?/p>
遵守NIST CSF(國家標(biāo)準(zhǔn)與技術(shù)研究所網(wǎng)絡(luò)安全框架)、PCI DSS(支付卡行業(yè)數(shù)據(jù)安全標(biāo)準(zhǔn))和SOC 2(服務(wù)組織控制報(bào)告)可以量化風(fēng)險(xiǎn),如果做得好,可以降低風(fēng)險(xiǎn)。這些標(biāo)準(zhǔn)不能保證絕對(duì)安全,絕對(duì)安全是不存在的。更重要的是,它們?yōu)槿绾呜?fù)責(zé)任地處理和報(bào)告不可避免的安全漏洞提供了指導(dǎo)。誠實(shí)、坦率、開放是很好的建議。
軟件,如果任其發(fā)展,會(huì)變得像面包一樣古老。我們的工作是平衡安全錯(cuò)覺和現(xiàn)實(shí),并適當(dāng)?shù)仡A(yù)算時(shí)間和資源。
6.功能大小無法預(yù)測(cè)開發(fā)時(shí)間
特征尺寸(由用戶感知)與創(chuàng)建特征所需的時(shí)間無關(guān)。小功能可能需要幾天或幾年,大功能(被用戶感知)也可能需要幾天或幾年。
我們的工作是創(chuàng)建和支持一個(gè)軟件開發(fā)過程,這個(gè)過程接受這個(gè)事實(shí),而不是拍拍腦袋去評(píng)估數(shù)量。工作量評(píng)估本身可能需要非常長的時(shí)間。
鼓勵(lì)溝通解決工作量考核問題。工程師可能會(huì)給出一個(gè)令人驚訝的長工作估算,但他們也會(huì)對(duì)需求提出更改,從而大大縮短時(shí)間。請(qǐng)記住,工作量評(píng)估應(yīng)包括測(cè)試、培訓(xùn)、部署和意外假期(如病假)。
在沒有咨詢工程部門工作量的情況下,不要承諾某個(gè)特性。這不是我們?cè)诠緳?quán)力的標(biāo)志。需要的是一個(gè)專業(yè)的過程,在這個(gè)過程中,開發(fā)人員的請(qǐng)求被認(rèn)真對(duì)待,工作量被評(píng)估并按時(shí)交付(或者由于誠實(shí)的原因被延遲)。
7.偉大來自成千上萬的微小進(jìn)步
偉大來自于在很長一段時(shí)間內(nèi)數(shù)以千計(jì),也許數(shù)百萬計(jì)的微小進(jìn)步(變化)。如果變更的影響都被測(cè)量為負(fù),則變更將被回滾。
谷歌不是一天建成的。谷歌的搜索引擎是數(shù)百萬人改進(jìn)的結(jié)果。搜索質(zhì)量團(tuán)隊(duì)每周開會(huì)一次,工程師走上平臺(tái)提出修改建議。他們展示了在模擬環(huán)境中會(huì)有多大的改善,委員會(huì)進(jìn)行了辯論和投票。幾周后,將對(duì)測(cè)量結(jié)果進(jìn)行審查,并決定保留還是回滾更改。
Google搜索是迭代開發(fā)對(duì)“生活大爆炸”思維的勝利。沒有人能在一開始就做出好的搜索引擎。只有在好萊塢電影里,一個(gè)聰明的極客才能想出驚人的新點(diǎn)子,第一次完美實(shí)現(xiàn)。在現(xiàn)實(shí)世界中,一夜成名需要幾年時(shí)間。
無論目標(biāo)是為客戶提供更好的服務(wù)、更高效、錯(cuò)誤更少的系統(tǒng)還是更流暢的系統(tǒng),這都是正確的。
我們的工作是要求系統(tǒng)設(shè)計(jì)能夠容易地接受新的變化,并定義相關(guān)的關(guān)鍵績效指標(biāo)(關(guān)鍵績效指標(biāo)),這些指標(biāo)可以在變化前后容易地測(cè)量。最重要的是,必須有一個(gè)過程來檢查結(jié)果,并決定是保留還是回滾更改?;貪L不應(yīng)被視為失敗或懲罰。從每次回滾中學(xué)到的東西和從每次保留的更改中學(xué)到的東西一樣有價(jià)值。
托馬斯·愛迪生聲稱在發(fā)明燈泡的過程中測(cè)試了1000根燈絲。當(dāng)記者問他“失敗1000次是什么感覺?””他回答,“我沒有失敗1000次。燈泡是1000步的發(fā)明。"
8.技術(shù)債很煩,但不可避免
技術(shù)債務(wù)是未來需要做的工作,因?yàn)槲覀冞x擇了更簡單的解決方案,而不是使用更長時(shí)間的更好解決方案。任何規(guī)模合理的軟件項(xiàng)目都有技術(shù)債務(wù)。技術(shù)債務(wù)讓所有的進(jìn)步都變慢了。我們?cè)胶鲆曀?,它就越滾雪球。
有財(cái)務(wù)背景的管理者聽到“負(fù)債”這個(gè)詞,會(huì)認(rèn)為這是一項(xiàng)未來會(huì)有回報(bào)的投資。相反,技術(shù)債是有毒的,是痛苦的,是定時(shí)炸彈。
1972年,F(xiàn)ram為其濾油器做了一個(gè)電視廣告。廣告中,一位汽車修理工解釋說,一位客戶為了節(jié)省4美元,沒有更換機(jī)油濾清器。后來,客戶不得不花200美元更換一個(gè)昂貴的主軸承。汽車修理工總結(jié)道:“你可以現(xiàn)在付我錢,也可以以后再付?!?/p>
有一個(gè)軟件項(xiàng)目,其中一個(gè)子系統(tǒng)與供應(yīng)商通信。一開始系統(tǒng)只和一個(gè)供應(yīng)商溝通,所以很簡單。然后一個(gè)接一個(gè),然后又一個(gè)。有些功能必須實(shí)現(xiàn)三次,每個(gè)供應(yīng)商一次,不可持續(xù)。當(dāng)被要求支持第四家供應(yīng)商時(shí),開發(fā)商表示反對(duì)。是的,他們可以在一個(gè)月左右移植,但是軟件架構(gòu)開始嘎吱作響,就像颶風(fēng)中的老房子。這些權(quán)宜之計(jì)積累了大量的技術(shù)債務(wù)。
開發(fā)者的建議是花兩個(gè)月時(shí)間重構(gòu)供應(yīng)商架構(gòu),成為一個(gè)插件系統(tǒng)。然后,新的提供商可以在一周內(nèi)而不是一個(gè)月內(nèi)支持訪問。
管理者不高興。為什么下一個(gè)供應(yīng)商需要兩個(gè)多月才能支持,而上一個(gè)供應(yīng)商一個(gè)月內(nèi)就支持了?花兩個(gè)月償還技術(shù)債,會(huì)讓以后的支持更快,代碼更穩(wěn)定,更容易添加新特性。很難衡量確切的好處。
你可以現(xiàn)在付錢給我,也可以以后付錢給我。
我們的工作是分期償還技術(shù)債務(wù)。失控的技術(shù)債務(wù)降低了添加其他功能的能力,并導(dǎo)致軟件系統(tǒng)的不穩(wěn)定。技術(shù)債務(wù)的償還應(yīng)與業(yè)務(wù)目標(biāo)掛鉤,類似于非功能性要求。
9.軟件不會(huì)自己運(yùn)行(軟件需要運(yùn)維)
雖然廠商和開發(fā)者可能會(huì)嘗試告訴你不同的情況,但是軟件不會(huì)自己運(yùn)行。任何基于軟件的系統(tǒng),尤其是網(wǎng)站和web應(yīng)用,都需要運(yùn)維人員和運(yùn)維流程。否則,軟件就像一本合著的書,必須有人打開它,管理它,照顧它的需要。
運(yùn)維比軟件開發(fā)本身更重要。代碼只寫一次,但可能運(yùn)行幾百萬次。所以,粗略衡量一下,運(yùn)維的重要性是不是高了幾百萬倍?
我們的工作是期望操作和維護(hù)成為任何軟件系統(tǒng)的一部分。它必須像任何其他項(xiàng)目一樣進(jìn)行有效的規(guī)劃、預(yù)算、管理和運(yùn)行。
運(yùn)維功能(一般稱為非功能性需求)除了作為次要需求外,對(duì)用戶是不可見的。數(shù)據(jù)備份是非功能性需求的一個(gè)很好的例子。沒有用戶請(qǐng)求數(shù)據(jù)備份,但用戶請(qǐng)求恢復(fù)已刪除的數(shù)據(jù)。不幸的是,沒有備份就沒有恢復(fù)。恢復(fù)是功能性要求,而備份是操作性(非功能性)要求。
使軟件服務(wù)易于維護(hù)或高效運(yùn)行的功能需求從來不是由用戶提出的。然而,他們確實(shí)享受低成本和高可靠性系統(tǒng)的好處??蛻魰?huì)離開那些不靠譜的網(wǎng)站,再也不會(huì)回來。
持續(xù)改進(jìn)的需求不僅包括新的功能需求,還包括新的非功能需求。所以我們的工作不僅僅是為客戶提出的功能需求分配資源,還要為運(yùn)維需求分配資源。很難在兩種相互競爭的需求之間取得平衡。
然而,一個(gè)成功的產(chǎn)品是在業(yè)務(wù)需求和操作維護(hù)需求之間權(quán)衡的結(jié)果。
10.復(fù)雜系統(tǒng)需要DevOps才能運(yùn)行良好
復(fù)雜系統(tǒng)最好通過DevOps來改進(jìn)。DevOps的定義有很多,但是DevOps通常被認(rèn)為是通過快速迭代(特性、bug修復(fù)、流程改進(jìn)等)來加速交付價(jià)值。).要做到這一點(diǎn),每個(gè)參與的人都必須參與。也就是說,他們必須跨職能團(tuán)隊(duì)協(xié)作。DevOps這個(gè)名字來源于消除開發(fā)人員和運(yùn)維(IT)之間的隔閡,這對(duì)于快速發(fā)布是絕對(duì)必要的。然而,優(yōu)秀的DevOps環(huán)境將其擴(kuò)展到所有職能團(tuán)隊(duì)的端到端工作。
DevOps被誤解為做運(yùn)維的開發(fā)人員。這種“構(gòu)建它,運(yùn)行它”的策略是跨職能團(tuán)隊(duì)工作的一種方式(消除障礙),但不是唯一的方式。
一個(gè)復(fù)雜的系統(tǒng)需要三樣?xùn)|西:良好的流程,所有相關(guān)人員之間良好的溝通,以及嘗試新事物的能力。
結(jié)論
軟件正在吞噬世界。本文總結(jié)了軟件和軟件工程的十條諺語,希望管理者和相關(guān)從業(yè)者能夠理解它們的重要性并從中受益。
原文:https://queue.acm.org/detail.cfm? id = 3325792
1.《關(guān)于軟件開發(fā) 關(guān)于軟件開發(fā),都應(yīng)該知道的10個(gè)常識(shí)》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請(qǐng)聯(lián)系頁腳下方聯(lián)系方式。
2.《關(guān)于軟件開發(fā) 關(guān)于軟件開發(fā),都應(yīng)該知道的10個(gè)常識(shí)》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來源地址,http://f99ss.com/jiaoyu/1380213.html