2011年,馬克·安德森(馬克·安德森)寫了一篇文章預(yù)測(cè),“燕子軟件世界”。有觀點(diǎn)主要有兩點(diǎn):第一,很多傳統(tǒng)企業(yè)都被軟件公司所取代;第二,所有其他的公司都發(fā)現(xiàn),他們提供的價(jià)值越來(lái)越多地來(lái)自于軟件系統(tǒng)。
在安徒生寫這篇文章的時(shí)候,沒有10家最大公司的市值是在一個(gè)軟件驅(qū)動(dòng)的業(yè)務(wù)。今天,最大的10家公司的6主要是軟件驅(qū)動(dòng)的,而其他4個(gè)是準(zhǔn)備轉(zhuǎn)型。
堆棧溢出和非高科技公司超過(guò)了技術(shù)行業(yè)本身LinkedIn列表中的軟件工程的招聘廣告。這是在經(jīng)濟(jì)發(fā)展和顯示,企業(yè)正在加強(qiáng)他們的軟件工程實(shí)踐的重大轉(zhuǎn)變。
會(huì)計(jì)或軟件,其中之一是對(duì)公司更重要?有在這篇文章中沒有答案。但現(xiàn)在不認(rèn)為自己的軟件公司很多公司也開始發(fā)現(xiàn),軟件系統(tǒng)是其運(yùn)營(yíng)的關(guān)鍵組成部分。
如果各級(jí)CEO和管理者不明白這個(gè)軟件,那么他們將是可有可無(wú)的。這將限制或者他們的職業(yè)發(fā)展或公司業(yè)績(jī)產(chǎn)生負(fù)面影響。在任何情況下,不明白的軟件,是注定要失敗的。?。ǎ牵幔颍簦睿澹蝾A(yù)測(cè),到2020年,50?F的首席信息官(CIO)將被替換,因?yàn)樗麄儧]有改變公司的能力。)
軟件常識(shí)
本文列出了10級(jí)常見的感官,管理者應(yīng)該知道:
關(guān)于軟件,本文認(rèn)為,這是10件最重要的事情所有的管理者需要知道:
1.軟件不是魔術(shù)
軟件是不是魔術(shù)。雖然它看起來(lái)像魔法,還是魔法,這不是魔術(shù)。每個(gè)元素是由人類設(shè)計(jì)的,有它的數(shù)學(xué)基礎(chǔ),或者可以在人類的語(yǔ)言來(lái)解釋的過(guò)程。
不像魔術(shù),軟件不是憑空造出來(lái)。它需要設(shè)計(jì),建造和維護(hù)。就像房子有多個(gè)系統(tǒng)一起工作(基礎(chǔ),結(jié)構(gòu),管道,房間,家具等),軟件系統(tǒng)也需要多層次和子系統(tǒng)創(chuàng)建整個(gè)系統(tǒng)。它可以設(shè)計(jì)好或不好的設(shè)計(jì),以及快速的設(shè)計(jì)很少過(guò)去。
如果人們無(wú)法用語(yǔ)言來(lái)描述它會(huì)做(包括所期望的結(jié)果,以及如何去實(shí)現(xiàn)它),然后計(jì)算機(jī)無(wú)法做到這一點(diǎn)無(wú)論是?! 叭绾巍敝Q的算法,這是不神奇。
機(jī)器學(xué)習(xí)等人工智能技術(shù)并不神奇。機(jī)器學(xué)習(xí)是基于數(shù)據(jù)的預(yù)測(cè),沒有明確的規(guī)則或指令。它使用線性代數(shù)一般都做。如果有100個(gè)一萬(wàn)張香蕉已知的照片100萬(wàn)張照片,而不香蕉。一個(gè)訓(xùn)練有素的機(jī)器學(xué)習(xí)系統(tǒng)將著眼于新的照片,并會(huì)告訴你,它看起來(lái)像基于它已經(jīng)從以前的照片學(xué)到的知識(shí)在第一組。不過(guò)在第二組,這不是魔術(shù)。使用機(jī)器學(xué)習(xí)排序基于過(guò)去的聘用決定重新開始,即使沒有任何刻意的偏見,可能放大了實(shí)證招聘歷史。
2.軟件永遠(yuǎn)不會(huì)“完成”
軟件永遠(yuǎn)不會(huì)“完成”。軟件是一個(gè)反復(fù)的過(guò)程,它包含生命周期期間多次修改和更新。我們的工作是創(chuàng)建一個(gè)認(rèn)識(shí)到這一點(diǎn)的環(huán)境。
同樣,我們永遠(yuǎn)不要指望市場(chǎng)營(yíng)銷和客戶獲取要“完成”,他們也是反復(fù)的過(guò)程。在每次迭代中,我們將繼續(xù)提供價(jià)值的業(yè)務(wù),我們也在不斷地學(xué)習(xí)和成長(zhǎng)。即使有一些成功的版本中,我們從來(lái)沒有打算“停止”做這些事情。
這將是巨大的,如果軟件可以在一個(gè)版本完成,但這并不現(xiàn)實(shí)。需求文檔是充滿模糊性,以及該軟件的第一個(gè)版本是充滿了“哦,那是我寫的,但我不是這個(gè)意思”的場(chǎng)面。最好的軟件可以啟發(fā)新的思路和功能要求。鑒于新的銷售管理系統(tǒng)是更有效的將激發(fā)更高的效率。世界在變化,競(jìng)爭(zhēng)對(duì)手提供新的功能,人們有新的想法。此外,總有一些bug需要修復(fù):它可能是在代碼中,也可能是在底層的軟件架構(gòu)和系統(tǒng)構(gòu)建的代碼。某些軟件可能是完美的,但可以肯定的是,隨著時(shí)間的推移,人們會(huì)發(fā)現(xiàn)在它構(gòu)建平臺(tái)的各種漏洞。
我們的工作就是讓組織意識(shí)到了這一點(diǎn)。
認(rèn)識(shí)到這個(gè)問題的方法是建立一個(gè)組織,有信心定期發(fā)布新版本。當(dāng)完全自動(dòng)化測(cè)試和其他工程規(guī)范到位,我們?cè)鰪?qiáng)信心。這種信心建立,以避免過(guò)長(zhǎng)的發(fā)布周期,而是每季度發(fā)布高質(zhì)量的軟件,每月甚至每周的能力。具體的頻率并不重要,但信心是很重要的,并且自信可以導(dǎo)致更快的創(chuàng)新。
3.軟件開發(fā)是一個(gè)團(tuán)隊(duì)作戰(zhàn),沒有一個(gè)人可以做任何事
軟件開發(fā)是一個(gè)團(tuán)隊(duì)的戰(zhàn)斗。開發(fā)商既不是產(chǎn)品經(jīng)理,也不UX(用戶體驗(yàn))的設(shè)計(jì)師,也不是質(zhì)量工程師,分析師,安全專家,技術(shù)作家或操作工程師。企業(yè)需要的所有角色。
沒有經(jīng)理會(huì)建議每銷售(轉(zhuǎn)讓)工作人員做營(yíng)銷和PR,否則銷售團(tuán)隊(duì)將被解雇(因?yàn)闋I(yíng)銷人員了解產(chǎn)品,他們也可以做銷售)。市場(chǎng)營(yíng)銷和銷售是相關(guān)的,但它們是不同的。因此,兩者之間的分工。
同樣,開發(fā)團(tuán)隊(duì)需要獨(dú)立的人員收集的要求,質(zhì)量保證和測(cè)試,代碼編寫等。
一個(gè)神話,開發(fā)人員可以“一切”被稱為“全棧開發(fā)者”或“10X工程師”,這一般只在小公司的存在。是的,一個(gè)非常小的公司可以在同一時(shí)間做市場(chǎng)營(yíng)銷和銷售,但你可能不加入這樣一家小公司。
不要吃用你自己的利益來(lái)挑戰(zhàn)別人的敬業(yè)精神。一個(gè)孩子是“善于臉譜”并不意味著他或她將是下一個(gè)扎克伯格;一個(gè)孩子在工程上有意義并不意味著他或她可以使用積分;一個(gè)孩子可以自己做一個(gè)網(wǎng)站,并不意味著這個(gè)網(wǎng)站能處理數(shù)十億每小時(shí)的金融交易。
4.設(shè)計(jì)并不美觀,但工作原理
史蒂夫·喬布斯的名言說(shuō):“設(shè)計(jì)不僅僅是外觀和感覺。設(shè)計(jì)是如何工作的。”?。眨卦O(shè)計(jì)師不坐下來(lái)決定菜單的顏色,或者按鈕是否是圓形或方形。他們決定工作流程和交互。它是什么。
使用者會(huì)看到三個(gè)選項(xiàng)的屏幕,或者只有一個(gè)選項(xiàng)的屏幕?這樣的設(shè)計(jì)決策需要心理學(xué),同情用戶和測(cè)試,測(cè)試,再測(cè)試和。
一個(gè)UX設(shè)計(jì)的最大挑戰(zhàn)是,一旦你熟悉的系統(tǒng),您將無(wú)法預(yù)測(cè)新用戶的能力。預(yù)測(cè)新用戶的需求時(shí),誰(shuí)設(shè)計(jì)的系統(tǒng)的人將自動(dòng)被取消資格。?。眨乜赡苁敲利悆?yōu)雅,媲美一件藝術(shù)品,但要求UX設(shè)計(jì)師的背景更改為帆船的照片是沒有幫助的。
我們的工作是信任的測(cè)試數(shù)據(jù),而不是主觀臆測(cè),營(yíng)造環(huán)境,規(guī)劃多個(gè)版本的產(chǎn)品發(fā)布之前,并期望進(jìn)一步改進(jìn)產(chǎn)品發(fā)布后。不要混淆UX設(shè)計(jì)師平面設(shè)計(jì)師。問一個(gè)UX設(shè)計(jì)師,設(shè)計(jì)公司的節(jié)日賀卡是一樣的粗魯行為,要求技術(shù)作家寫在公司通訊。這些都是不同的技能。
5.安全是每個(gè)人的責(zé)任無(wú)論我們知道與否,我們是否希望它與否,我們都在安全行業(yè)。所有軟件都有安全需求和潛在的安全漏洞。參與也開發(fā)軟件系統(tǒng)具有安全性要求和漏洞。盡管安全的基礎(chǔ)設(shè)施組件,如防火墻和入侵檢測(cè)是必要的,他們是不夠的:內(nèi)置的安全控制也必須用于設(shè)計(jì),實(shí)施和維護(hù)的軟件平臺(tái)。安全既是一個(gè)良好的技術(shù)和良好的工藝。
如果你認(rèn)為我們是不是攻擊的目標(biāo),那么你就錯(cuò)了。所有計(jì)算機(jī)系統(tǒng)的攻擊目標(biāo),因?yàn)楣舨粌H是其中的信息,但僅限于一個(gè)事實(shí),即它是一臺(tái)電腦。例如,沒有有價(jià)值的信息系統(tǒng)是網(wǎng)絡(luò)攻擊的目標(biāo),因?yàn)樗梢杂糜谵D(zhuǎn)發(fā)上的其他計(jì)算機(jī)的攻擊,或者開采比特幣,或儲(chǔ)存他人的盜版視頻。
安全性是不一樣的開/關(guān),有很多灰色地帶的按鈕。安全性是最好從一開始就考慮。驗(yàn)尸維修價(jià)格昂貴,而且往往是無(wú)效的。我們不會(huì)先造一艘船,然后“添加”功能,使其浮動(dòng)。同樣,也不可能先建立一個(gè)系統(tǒng),然后按“安全”按鈕是安全的。
安全是對(duì)風(fēng)險(xiǎn)和寬容風(fēng)險(xiǎn)。加密兩個(gè)節(jié)點(diǎn)之間的通信不保證其安全性,但它提高了安全性。只有超級(jí)計(jì)算能力可以破解密碼。在一個(gè)區(qū)域內(nèi)降低風(fēng)險(xiǎn)并不能幫助其他領(lǐng)域。保護(hù)網(wǎng)絡(luò)不防止人身安全問題。一個(gè)人打開一扇門,和其他人可以竊取您的備份磁帶。
隨著基因斯帕福德說(shuō)過(guò)一句名言:“唯一的真正安全系統(tǒng)是由全副武裝的警衛(wèi),即使如此,我還是有疑慮關(guān)閉,鑄混凝土,和守衛(wèi)在絕緣室的系統(tǒng)?!?/p>
符合安全標(biāo)準(zhǔn),如NIST?。茫樱疲绹?guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究所網(wǎng)絡(luò)安全架構(gòu)),PCI DSS(支付卡行業(yè)數(shù)據(jù)安全標(biāo)準(zhǔn))和SOC?。玻ǚ?wù)組織控制報(bào)告)可以量化的風(fēng)險(xiǎn),如果做得恰當(dāng),它也可以降低風(fēng)險(xiǎn)。這些標(biāo)準(zhǔn)并不能保證絕對(duì)安全,絕對(duì)的安全是不存在。更重要的是,他們提供了有關(guān)如何應(yīng)對(duì)和負(fù)責(zé)任的報(bào)告不可避免安全漏洞的指導(dǎo)。誠(chéng)實(shí),坦率,開放是好的建議。
軟件,如果你不理會(huì)它,它變得陳舊像面包。我們的工作是與現(xiàn)實(shí)的平衡安全性妄想,并做出適當(dāng)?shù)念A(yù)算時(shí)間和資源。
6. ??特征大小不能預(yù)測(cè)的開發(fā)時(shí)間
該功能(用戶感知)的大小無(wú)關(guān),與創(chuàng)建功能所需的時(shí)間。小功能可能需要數(shù)天或數(shù)年,和大的功能(用戶認(rèn)為)也可能需要數(shù)天或數(shù)年。
我們的工作是建立和支持接受這個(gè)事實(shí),而不是工程量的頭腦風(fēng)暴評(píng)估軟件開發(fā)過(guò)程。工作量評(píng)估本身可以采取一個(gè)令人驚訝的很長(zhǎng)一段時(shí)間。
鼓勵(lì)溝通解決工作量評(píng)估問題。工程師可以給工作令人驚訝的長(zhǎng)估計(jì),但也提出更改要求,大大降低了時(shí)間。請(qǐng)記住,工作量評(píng)估應(yīng)包括測(cè)試,培訓(xùn),部署和意想不到的離開(例如病假)。
切勿在沒有與工程部談判的工作量承諾的特征。這不是我們?cè)诠緳?quán)力的象征。它需要一個(gè)專業(yè)的過(guò)程中,開發(fā)人員的要求認(rèn)真對(duì)待,工作量評(píng)估,并按時(shí)交付(或延遲誠(chéng)實(shí)的原因)。
7.偉大來(lái)自成千上萬(wàn)的小改進(jìn)
偉大來(lái)自于十萬(wàn),甚至上百萬(wàn)的超過(guò)長(zhǎng)期做小的改進(jìn)(改變)。如果變化的影響被測(cè)量為負(fù),則改變將被回滾。
谷歌不是一天建成的。谷歌的搜索引擎是由數(shù)以百萬(wàn)計(jì)的個(gè)人改進(jìn)的結(jié)果。搜索質(zhì)量團(tuán)隊(duì)達(dá)到每周一次,和工程師們走上舞臺(tái),并提出自己的建議進(jìn)行修改。他們表現(xiàn)出太大起色怎么會(huì)在模擬環(huán)境,以及委員會(huì)辯論和投票。幾個(gè)星期之后,測(cè)量結(jié)果進(jìn)行審查,并決定將作出保留或回滾所做的更改。
谷歌搜索是迭代開發(fā)的在思考“的數(shù)據(jù)大爆炸”的勝利。沒有人能在一開始做一個(gè)很好的搜索引擎。只有在好萊塢電影可以將智能怪胎想出一個(gè)驚人的新的理念,完美實(shí)現(xiàn)它的第一次。在現(xiàn)實(shí)世界中,它需要多年才能一夜成名。
這是真的,你正在努力實(shí)現(xiàn)的目標(biāo)是否是為客戶提供更好的服務(wù)系統(tǒng),以更少的錯(cuò)誤更有效的系統(tǒng),或者系統(tǒng)運(yùn)行更加順暢。
我們的工作是需要系統(tǒng)的設(shè)計(jì)能夠很容易地接受新的變化,并確定相關(guān)的KPI(關(guān)鍵績(jī)效指標(biāo))。這些KPI您可以前和變化后容易測(cè)量。更重要的是,必須有檢查結(jié)果,并決定保留或回滾的變化過(guò)程?;貪L不應(yīng)該被認(rèn)為是失敗或處罰。你從每個(gè)回滾學(xué)到什么是有價(jià)值的,你從每個(gè)保留的變化學(xué)到什么。
愛迪生權(quán)利發(fā)明電燈的過(guò)程中已經(jīng)測(cè)試了1000根長(zhǎng)絲。當(dāng)記者問他:“感覺怎么樣失?。保埃埃按危俊彼卮鹫f(shuō):“我并沒有失?。保埃埃按蔚臒襞菔牵保埃埃安降陌l(fā)明?!?/p>
8.技術(shù)債務(wù)很討厭,而且是不可避免的
技術(shù)債務(wù)是工作需要在未來(lái)完成的,因?yàn)槲覀儸F(xiàn)在選擇一個(gè)簡(jiǎn)單的解決方案,而不是使用一個(gè)更好的解決方案,需要較長(zhǎng)時(shí)間的。合理的規(guī)模的任何軟件項(xiàng)目具有技術(shù)債務(wù)。技術(shù)債務(wù)讓一切進(jìn)步慢,而你忽略它的越多,它雪球。
當(dāng)金融后臺(tái)聽到“債務(wù)”的經(jīng)理,他們認(rèn)為這是一項(xiàng)投資,將在未來(lái)還清。技術(shù)債務(wù)是相反的。它是有毒的,痛苦的,它是一個(gè)定時(shí)炸彈。
1972年,弗拉姆取得其機(jī)油濾清器一個(gè)電視廣告。在廣告中,一名汽車修理工解釋說(shuō),客戶沒有為了節(jié)省$?。锤鼡Q機(jī)油機(jī)濾。后來(lái),客戶不得不花200元更換昂貴的主軸承。該汽車修理工的結(jié)論是:“你可以給我現(xiàn)在或以后?!?/p>
有其中一個(gè)子系統(tǒng)與供應(yīng)商進(jìn)行通信的軟件項(xiàng)目。最初,系統(tǒng)只與一家供應(yīng)商溝通,所以這是非常簡(jiǎn)單的。然后,我把一個(gè)又一個(gè),然后另一個(gè)。有些功能必須為每個(gè)供應(yīng)商,這是不可持續(xù)的實(shí)施三次,一次。當(dāng)記者問到支持第四供應(yīng)商,開發(fā)商反對(duì)。是的,他們可以在一個(gè)月左右移植,但軟件架構(gòu)開始吱吱作響,像一個(gè)老房子在颶風(fēng)。這些權(quán)宜之計(jì)已經(jīng)積累了大量的技術(shù)債務(wù)。
開發(fā)人員的建議是花2個(gè)月重構(gòu)供應(yīng)商體系結(jié)構(gòu),使之成為插件系統(tǒng)。然后,新的供應(yīng)商可以支持在一個(gè)星期內(nèi),而不是一個(gè)月的訪問。
管理者不快樂。為什么接下來(lái)的供應(yīng)商需要兩個(gè)多月來(lái)支持,而此前的供應(yīng)商支持的話一個(gè)月?逗留2個(gè)月償還技術(shù)債務(wù)將使未來(lái)支持更快的代碼更穩(wěn)定,更容易增加新的功能。這是很難測(cè)量精確的優(yōu)點(diǎn)。“你現(xiàn)在可以給我,也可以在以后給我”。
我們的工作是分期償還的技術(shù)債務(wù)。外的控制技術(shù)債務(wù)減少添加其他功能的能力,并且使軟件系統(tǒng)變得不穩(wěn)定。技術(shù)債務(wù)償還應(yīng)與業(yè)務(wù)目標(biāo),類似的非功能性需求。
9.軟件本身不會(huì)運(yùn)行(軟件需要運(yùn)行和維護(hù))
雖然廠商和開發(fā)者可以試著告訴你不同的東西,軟件本身不運(yùn)行。任何基于軟件的系統(tǒng)(尤其是網(wǎng)站和Web應(yīng)用程序),需要操作和維護(hù)人員和流程。否則,軟件就像是一個(gè)封閉的書,必須有人打開它,管理它,并利用其需要照顧。
操作和維護(hù)比軟件開發(fā)本身更重要。該代碼被寫入一次,但它可能會(huì)運(yùn)行數(shù)百萬(wàn)次。因此,粗略測(cè)量,是較高的運(yùn)行和維護(hù)數(shù)百萬(wàn)次的重要性?
我們的工作是希望操作和維護(hù)成為任何軟件系統(tǒng)的一部分。它必須要有計(jì)劃,預(yù)算,管理和有效像任何其他項(xiàng)目的運(yùn)行。
操作和維護(hù)功能(通常被稱為非功能性要求)是不可見的用戶,除了作為次要的要求。數(shù)據(jù)備份是的非功能性需求的好例子。沒有用戶請(qǐng)求的數(shù)據(jù)備份,但用戶沒有請(qǐng)求恢復(fù)被刪除的數(shù)據(jù)。不幸的是,沒有一個(gè)備份沒有恢復(fù)。恢復(fù)是一個(gè)功能性要求,和備份是操作和維護(hù)(非功能性)的要求。
便于維修和軟件服務(wù)的高效運(yùn)作的功能要求從來(lái)沒有用戶提出。但是,它們享受低成本,高可靠的系統(tǒng)的好處。客戶將離開這些不可靠的網(wǎng)站,永不回來(lái)。
持續(xù)改進(jìn)的要求不僅包括新的功能需求,也有新的非功能性需求。因此,我們的工作不僅是分配資源,由客戶提出的功能需求,同時(shí)也為操作和維護(hù)的需求分配資源。它難以在兩個(gè)相互競(jìng)爭(zhēng)的需求之間的平衡。
但是,一個(gè)成功的產(chǎn)品是業(yè)務(wù)需求和運(yùn)營(yíng)維護(hù)需求之間進(jìn)行權(quán)衡。
10.復(fù)雜的系統(tǒng)需要的DevOps運(yùn)行良好
復(fù)雜的系統(tǒng)最好通過(guò)的DevOps提高。有DevOps的許多定義,但通常的DevOps被看作是通過(guò)快速迭代加快價(jià)值(功能,bug修復(fù),工藝改進(jìn)等)交付。要做到這一點(diǎn),每個(gè)人都參與必須參與。換句話說(shuō),他們必須在職能團(tuán)隊(duì)協(xié)作。這個(gè)名字的DevOps來(lái)源于去除開發(fā)商和運(yùn)營(yíng)(IT)之間的屏障,這是快速釋放絕對(duì)必要的。但是,一個(gè)良好的DevOps環(huán)境它延伸到所有職能團(tuán)隊(duì)的端至端的工作。
DevOps的誤解是作為開發(fā)人員做運(yùn)營(yíng)和維護(hù)。這種“構(gòu)建它,運(yùn)行它”的策略是一種跨職能團(tuán)隊(duì)(消除障礙)的工作,但它不是唯一的方法。
一個(gè)復(fù)雜的系統(tǒng),需要三樣?xùn)|西:一個(gè)好的過(guò)程,與所有相關(guān)人員良好的溝通,并嘗試新事物的能力。