雷火电竞首页-中国电竞赛事及体育赛事平台

0471-4953016
當(dāng)前位置:首頁-新聞資訊-行業(yè)資訊

軟件開發(fā)越來越糟?

發(fā)布時(shí)間:2020-03-03閱讀次數(shù):3258

最近,我偶然間讀到Nikita Propokov的一篇文章《軟件幻滅》(https://tonsky.me/blog/disenchantment/)。這不禁讓我想起了Maciej Ceg?owski的帖子《網(wǎng)站臃腫危機(jī)》(https://idlewords.com/talks/website_obesity.htm),以及其他幾篇類似的帖子。

越來越多的軟件開發(fā)人員認(rèn)為,如今的應(yīng)用程序規(guī)模越來越大,速度越來越慢,問題越來越多。然而,以這個(gè)時(shí)代的硬件水平,我們理應(yīng)能夠編寫出更快、更小、更健壯的應(yīng)用程序。DOOM,于1996年問世,就能在懷孕測試儀(https://www.cnet.com/culture/programmer-makes-original-doom-playable-on-pregnancy-test/)以及其他上百種意想不到的設(shè)備上運(yùn)行。而另一方面,時(shí)至2022年,聊天應(yīng)用程序在后臺(tái)運(yùn)行時(shí)居然會(huì)占用0.5GB(甚至更多)的內(nèi)存,有時(shí)甚至?xí)屧O(shè)備完全失去反應(yīng),即使在高端硬件上也是如此。

對(duì)于這個(gè)主題的帖子,人們普遍認(rèn)為80%的批評(píng)是公平合理的,還有20%只不過是沒病空呻吟。

大多數(shù)開發(fā)人員都知道,千萬不要說“這只是一個(gè)智能手機(jī)操作系統(tǒng),能有多難?”之類的話?;蛘?,“90年代的電子表格應(yīng)用程序只需要10 KB,為什么這款應(yīng)用需要一個(gè)G?”若非親手構(gòu)建應(yīng)用程序,你永遠(yuǎn)無法想象其復(fù)雜性和困難程度。

但這并不意味著,我們不能進(jìn)行客觀的批評(píng)。如今的應(yīng)用程序的的確確比以前更慢了,而且還在沒有相應(yīng)增加價(jià)值的情況下呈指數(shù)增長。其實(shí),幾乎所有現(xiàn)代應(yīng)用程序都可以被優(yōu)化。我們可以提高它們的速度,甚至可能提高幾個(gè)數(shù)量級(jí)。我們可以刪除代碼。我們可以編寫微型的、專門構(gòu)建的庫。我們可以找到壓縮文件的新方法。


但為什么我們沒有這么做呢?

Propokov的答案是“軟件工程師并沒有為自己的工作而感到自豪”。這句話雖有一定的道理,但我堅(jiān)信,努力工作并出色地完成任務(wù)是人類的自然天性,只有當(dāng)某些事情反復(fù)阻礙時(shí),我們才會(huì)失敗。因此,與其抱怨人類的懶惰,并以此來解釋為什么如今的軟件如此緩慢且有缺陷,我們更加應(yīng)該思考:“什么樣的力量和驅(qū)動(dòng)力創(chuàng)造的環(huán)境導(dǎo)致軟件工程師很難全力以赴做好自己的工作?”

對(duì)此,我有幾個(gè)答案。

速度、可靠性以及磁盤占用空間并不能吸引客戶

在工程師眼中,軟件是由交互組件、輸入和輸出構(gòu)成的網(wǎng)絡(luò)。這個(gè)模型既準(zhǔn)確又實(shí)用。然而,這并不是打包、營銷或銷售軟件的方式。對(duì)于商人和客戶來說,軟件就是一系列功能。

以庫存管理應(yīng)用程序?yàn)槔?。營銷會(huì)大肆展示高分辨率的庫存照片、大膽的色調(diào),以及各種功能亮點(diǎn):

跨多個(gè)倉庫跟蹤庫存;

與物流、供應(yīng)鏈以及銷售系統(tǒng)集成;

多層次的周次以及月度報(bào)告;

細(xì)粒度的訪問和安全控制;

所有終端的即時(shí)更新;

可在Windows、MacOS和Linux上運(yùn)行。

這些陳述都是可證偽的,也就是說,我們只需要一個(gè)小時(shí)的演示,就可以證明軟件能否做到這些。但只有一條與速度有關(guān)。軟件實(shí)際上可能非常慢,需要幾秒鐘才能響應(yīng)按鈕點(diǎn)擊,但依然可以保證“即時(shí)更新”。

速度會(huì)影響用戶對(duì)應(yīng)用程序的整體體驗(yàn)。速度是質(zhì)量的重要標(biāo)志,但這個(gè)特性很難吸引人。如果你花大量時(shí)間優(yōu)化核心流程,而競爭對(duì)手正在開發(fā)一種新型報(bào)告,那么有可能接下來你會(huì)因此而損失大量客戶。針對(duì)現(xiàn)有客戶調(diào)查一下,你就會(huì)發(fā)現(xiàn),當(dāng)問及下一步應(yīng)該開發(fā)什么時(shí),他們大多會(huì)要求功能,而不是速度,除非軟件太慢以至于無法使用。再者,董事會(huì)根本不可能允許公司暫?,F(xiàn)有的產(chǎn)品開發(fā)計(jì)劃,抽出六個(gè)月的時(shí)間來處理技術(shù)債務(wù)。功能、功能、還是功能,我們身上的這些壓力從未減輕。

程序員希望編寫快速的應(yīng)用程序。但市場根本不在乎。

你可能注意到,上述我們沒有提及可靠性。有誰敢說自己的應(yīng)用程序沒有bug?我們根本沒有辦法確保這一點(diǎn),更不用說通過產(chǎn)品演示證明了。難道我們要說“90%的單元測試覆蓋率和全套集成測試?”誰能明白這意味著什么,而且如果你向他們解釋,他們會(huì)感到無聊。我們無法向客戶解釋可靠性,讓他們相信你的說辭,同時(shí)又對(duì)這個(gè)話題感興趣。敏捷時(shí)代告訴他們,bug是不可避免的,你只能努力修復(fù)。由于沒有全面的方法來衡量軟件中的缺陷,因此不能將其作為比較產(chǎn)品的特性。我們投入時(shí)間來測試、重構(gòu)和改進(jìn),但可能完全不會(huì)有人注意到。

程序員希望編寫沒有bug的應(yīng)用程序。但市場根本不在乎。

另外,上述我們也沒有提到磁盤使用情況,盡管有時(shí)我們會(huì)在“下載”按鈕下方用一行小字顯示下載文件的大小。與上述功能亮點(diǎn)相比,磁盤使用情況在客戶心目中的影響力太小。上一次,你因磁盤空間不足而責(zé)怪開發(fā)人員(而不是自己的計(jì)算機(jī))是什么時(shí)候?你是否會(huì)根據(jù)下載文件的大小選擇視頻游戲?可能永遠(yuǎn)不會(huì)。你會(huì)發(fā)現(xiàn)有人抱怨最新的《使命召喚》太大,但新版發(fā)布的那一周仍然賺了10億美元。

減小可執(zhí)行文件或輸出包的大小是吃力不討好的工作。但這通常是一項(xiàng)技術(shù)含量很高的工作,不僅需要了解正在構(gòu)建的應(yīng)用程序,還需要了解其依賴的數(shù)百個(gè)較低級(jí)別的庫。此外,通常我們并不鼓勵(lì)這項(xiàng)工作,部分原因是這是一個(gè)雷區(qū)。你也許并不了解某一行代碼的作用,但這并不意味著它沒有用。也許這樣做只會(huì)造成在智能手機(jī)上運(yùn)行Ubuntu的那0.01%的用戶出問題。但也許你付出了大量努力,最后不過是防止應(yīng)用程序在每四年一次的閏日崩潰。即使是最小的工具函數(shù)最終也會(huì)發(fā)展成公司智慧的產(chǎn)物。我們沒必要惹這種麻煩。

一些程序員希望編寫更小的應(yīng)用程序。但對(duì)市場或我們來說,這樣做并沒有好處。

消費(fèi)類軟件被低估

分發(fā)應(yīng)用程序并不難。互聯(lián)網(wǎng)的誕生或多或少正源于此。但銷售應(yīng)用就像拔牙。大眾愿意花15美元買一個(gè)三明治或一張電影票,即便碰到爛片也只能一聲嘆息,但面對(duì)感興趣的應(yīng)用,即便只需要1美元,他們也會(huì)猶豫不決。只有兩種人群愿意為優(yōu)質(zhì)的軟件付費(fèi):企業(yè)和游戲玩家。不知為何,我們所在的世界其他人都希望軟件免費(fèi)。

這種期望對(duì)消費(fèi)應(yīng)用的質(zhì)量造成了破壞。構(gòu)建一款應(yīng)用所需的成本大約為5萬~50萬美元。如果你無法讓用戶付費(fèi),那么就必須通過其他方式收回成本。以下這些因素是導(dǎo)致Web和原生應(yīng)用膨脹和緩慢的最主要原因:用戶跟蹤、廣告、營銷漏斗、捆綁銷售、付費(fèi)訂閱、針對(duì)上述所有內(nèi)容的反制措施,以及其他上百個(gè)不太體面的收入來源。人們往往以為這些都是因?yàn)樯碳业呢澙?,但其?shí)大多數(shù)時(shí)候都是因?yàn)樗麄兒芙^望,沒有更好的方式?;ヂ?lián)網(wǎng)上的一些流行網(wǎng)站,大多只能勉強(qiáng)維持。

我并沒有夸大這樣的系統(tǒng)造成的浪費(fèi)和低效率。如果按照合理的價(jià)格發(fā)布一款獨(dú)特、高質(zhì)量的應(yīng)用,結(jié)果往往是無人問津,下載量為0。于是,你只能以免費(fèi)試用/訂閱模式重建。然而如此一來,即便下載此次達(dá)到數(shù)百次,也只有少數(shù)用戶愿意轉(zhuǎn)為付費(fèi),這些收入不足以支撐你的開銷。那么,接下來,你只能在免費(fèi)版本中投放廣告,雖然UI設(shè)計(jì)師可能會(huì)極力反對(duì)。然而,即便這樣,你也會(huì)發(fā)現(xiàn)廣告瀏覽獲取的收入僅為幾分錢。于是,你只能投放更多的廣告。然后,用戶就會(huì)抱怨廣告太多,因?yàn)樵谒麄兛磥?,你?yīng)該讓他們繼續(xù)免費(fèi)使用應(yīng)用。你嘗試將一些廣告換成應(yīng)用內(nèi)購買。而用戶會(huì)繼續(xù)抱怨。無奈之下,你添加了一些“行動(dòng)呼吁”,鼓勵(lì)用戶付費(fèi)使用無廣告體驗(yàn)版。結(jié)果發(fā)現(xiàn),很多人很快就刪除了應(yīng)用。為此,你添加了分析和遙測,這樣就可以弄清楚如何保留住客戶。然而,你發(fā)現(xiàn)“保留”可能就是“成癮”的代名詞。如此循環(huán)往復(fù),不久之后你的應(yīng)用就徹底“面目全非”,成為一個(gè)毫無樂趣的收入機(jī)器,各種濫用用戶的注意力和隱私。但你依然無法賺到很多錢。

如果人們?cè)敢飧顿M(fèi)購買應(yīng)用,我們就可以避免這一切。但不幸的是,他們不愿意,所以應(yīng)用都變成得臃腫、緩慢、bug累累。

開發(fā)人員沒有意識(shí)到自己的力量

看到這里,有人肯定會(huì)說,你就知道指責(zé)他人,難道軟件開發(fā)人員就沒有責(zé)任了嗎?我認(rèn)為,確實(shí)有些方面我們可以做得更好。

即使在經(jīng)濟(jì)衰退期間,開發(fā)人員也擁有非凡的影響力。我們可以堅(jiān)持使用(或不使用)特定技術(shù)。我們依然有高薪、福利和股權(quán)。我們可以團(tuán)結(jié)一致來改變整個(gè)公司的文化和工作環(huán)境,雖然這種力量非常微弱。優(yōu)秀的程序員很難找,每個(gè)人都知道,而我們知道他們知道。

這就是我們的力量,我們可以更好地利用這種力量。

我們應(yīng)該在每次沖刺中預(yù)留一些時(shí)間出來解決技術(shù)債務(wù)。當(dāng)有優(yōu)化和改進(jìn)代碼的機(jī)會(huì)時(shí),我們應(yīng)該設(shè)法延遲功能開發(fā)。我們應(yīng)該說服老板支持開源項(xiàng)目。我們應(yīng)該建立一種期望,讓所有人明白我們不一定要投入所有工作時(shí)間開發(fā)新功能,我們的準(zhǔn)則和行業(yè)對(duì)我們有更高的期望。

大多數(shù)時(shí)候,這些做法都不會(huì)產(chǎn)生任何負(fù)面影響。我們并沒有過分要求。每個(gè)行業(yè)都有專業(yè)標(biāo)準(zhǔn)和要求。為什么我們認(rèn)為軟件開發(fā)就不能建立類似的標(biāo)準(zhǔn)和要求?

唯一需要注意的是,這些激勵(lì)措施對(duì)我們沒有好處。這是一場艱苦的戰(zhàn)斗。有些經(jīng)理不愿意我們花時(shí)間解決技術(shù)債務(wù),僅僅是因?yàn)樗麄儾焕斫?。有些銷售人員會(huì)擔(dān)心我們的軟件沒有競爭力。投資者可能會(huì)威脅將我們的工作外包給更靈活的開發(fā)人員。客戶的態(tài)度和市場力量的轉(zhuǎn)變還需要一段時(shí)間。但是,如果改變現(xiàn)代軟件的狀態(tài)是一個(gè)有價(jià)值的目標(biāo),那么就值得付出努力。

未來軟件開發(fā)能得到改善嗎?

我對(duì)軟件的未來并不樂觀。90年代,程序員可以構(gòu)建微型、高度優(yōu)化的應(yīng)用程序,因?yàn)楫?dāng)時(shí)他們別無選擇??蛻舻挠?jì)算機(jī)只有32MB內(nèi)存和200兆赫茲的單核處理器。如果應(yīng)用做不到極簡,就無法運(yùn)行。如今,兩年前購買的基本型號(hào)Macbook Air的內(nèi)存是原來的250倍,而且四核處理器的速度是單核的數(shù)倍。我們有更多選擇了,但我們交付的應(yīng)用90%是垃圾。除非有人抱怨,否則我們不會(huì)做優(yōu)化。我們會(huì)把整個(gè)Web瀏覽器打包到發(fā)消息的應(yīng)用、做筆記的應(yīng)用中,甚至連我們寫代碼用的工具都是如此。

在過去的二十年里,我們一直在努力提高軟件開發(fā)的速度,降低軟件開發(fā)的難度,讓軟件越來越易于使用。誠然,如今我們正在以前所未有的速度創(chuàng)建應(yīng)用,應(yīng)用擁有的功能數(shù)量也超出了以往,而軟件開發(fā)人員的經(jīng)驗(yàn)也比以往任何時(shí)候都匱乏。從商業(yè)的角度,我們不難看出這其中的吸引力。但我們也為此付出了代價(jià),我們的客戶、電力能源乃至整個(gè)地球都為此付出了沉重的代價(jià)。

這種狀況不會(huì)在一夜之間發(fā)生變化,甚至可能在未來五年內(nèi)都不會(huì)變化。但我依然對(duì)此充滿了希望。

最新一波Web編程語言和技術(shù)(如WebAssembly、ESBuild、SWC、Bun和Yew)正在努力讓編譯時(shí)和運(yùn)行時(shí)的速度和可靠性達(dá)到新的水平。Rust不僅能夠提供與C看媲美的性能,而且對(duì)開發(fā)人員非常友好,這種高級(jí)語言在Web服務(wù)器上越來越受歡迎。此外,還有Tauri等輕量級(jí)Electron的替代品有望成為Web開發(fā)人員的首選跨平臺(tái)框架。Tree-shaking也將為編譯器和打包器帶來新的希望。

就市場而言,幾款流行的游戲(比如《死亡細(xì)胞》和《以撒的結(jié)合》)已經(jīng)以付費(fèi)下載的方式進(jìn)入移動(dòng)平臺(tái)。雖然革命尚未成功,我們?nèi)孕枧Γ@是對(duì)全球最大的技術(shù)消費(fèi)者群體智能手機(jī)用戶進(jìn)行軟件成本再教育的一次突破。

如果在過去的二十年里,我們一直致力于提高生產(chǎn)力(雖然此過程會(huì)犧牲掉效率和財(cái)務(wù)可持續(xù)性),也許接下來的二十年里,我們可以解決集體技術(shù)債務(wù),找回失去的效率,并改善經(jīng)濟(jì)交流,同時(shí)還不會(huì)失去軟件為我們的生活帶來的生產(chǎn)力提升。

作者|Isaac Lyman